示例#1
1
 /**
  *	Function called on plugin initialisation allowing to declare the new types needed by our plugin
  *	@see wpshop_products::create_wpshop_products_type();
  *	@see wpshop_categories::create_product_categories();
  */
 public static function add_new_wp_type()
 {
     $wpshop_shop_type = get_option('wpshop_shop_type', WPSHOP_DEFAULT_SHOP_TYPE);
     /*	Creation du type d'element Entité pour wpshop	*/
     wpshop_entities::create_wpshop_entities_type();
     add_action('add_meta_boxes', array('wpshop_entities', 'add_meta_boxes'));
     add_action('save_post', array('wpshop_entities', 'save_entity_type_custom_informations'));
     add_filter('manage_posts_columns', array('wpshop_entities', 'custom_columns_header'), 10, 2);
     add_filter('manage_posts_custom_column', array('wpshop_entities', 'custom_columns_content'), 10, 2);
     // 			add_action('quick_edit_custom_box', array('wpshop_attributes', 'quick_edit'), 10, 2);
     add_action('bulk_edit_custom_box', array('wpshop_attributes', 'bulk_edit'), 10, 2);
     /*	Creation des types personnalisé à partir des entités créées	*/
     wpshop_entities::create_wpshop_entities_custom_type();
     /*	Add wpshop product type and add a new meta_bow into product creation/edition interface for regrouping title and editor in order to sort interface	*/
     wpshop_products::create_wpshop_products_type();
     add_action('add_meta_boxes', array('wpshop_products', 'add_meta_boxes'));
     add_filter('post_link', array('wpshop_products', 'set_product_permalink'), 10, 3);
     add_filter('post_type_link', array('wpshop_products', 'set_product_permalink'), 10, 3);
     add_action('pre_get_posts', array('wpshop_products', 'set_product_request_by_name'));
     $product_class = new wpshop_products();
     add_action('save_post', array($product_class, 'save_product_custom_informations'));
     /*	Add wpshop product category term	*/
     wpshop_categories::create_product_categories();
     /*	Add wpshop message term	*/
     if ($wpshop_shop_type == 'sale') {
         /*	Add wpshop orders term	*/
         wpshop_orders::create_orders_type();
         add_action('add_meta_boxes', array('wpshop_orders', 'add_meta_boxes'));
         add_action('manage_' . WPSHOP_NEWTYPE_IDENTIFIER_ORDER . '_posts_custom_column', array('wpshop_orders', 'orders_custom_columns'), 10, 2);
         add_filter('manage_edit-' . WPSHOP_NEWTYPE_IDENTIFIER_ORDER . '_columns', array('wpshop_orders', 'orders_edit_columns'));
         add_action('restrict_manage_posts', array('wpshop_orders', 'list_table_filters'));
         add_filter('parse_query', array('wpshop_orders', 'list_table_filter_parse_query'));
     }
     $args = array('public' => true, '_builtin' => false);
     $output = 'objects';
     // names or objects, note names is the default
     $operator = 'or';
     // 'and' or 'or'
     $wp_types_original = get_post_types($args, $output, $operator);
     foreach ($wp_types_original as $type => $type_definition) {
         $wp_types[$type] = $type_definition->labels->name;
     }
     $to_exclude = unserialize(WPSHOP_INTERNAL_TYPES_TO_EXCLUDE);
     if (!empty($to_exclude)) {
         foreach ($to_exclude as $excluded_type) {
             if (isset($wp_types[$excluded_type])) {
                 unset($wp_types[$excluded_type]);
             }
         }
     }
     DEFINE('WPSHOP_INTERNAL_TYPES', serialize(array_merge($wp_types, array('users' => __('Users', 'wpshop')))));
 }
 /**
  * AJAX - Création d'un nouveau produit / Create a new product
  */
 function create_product()
 {
     global $wpdb;
     $response = array('status' => false, 'output' => __('Error at product creation!', 'wpshop'), 'pid' => -1);
     $post_title = !empty($_POST['post_title']) ? $_POST['post_title'] : -1;
     $post_content = !empty($_POST['post_content']) ? $_POST['post_content'] : '';
     $attributes = !empty($_POST['attribute']) ? $_POST['attribute'] : -1;
     $id_attribute_set = !empty($_POST['wps-product-attribute-set']) ? $_POST['wps-product-attribute-set'] : -1;
     if (-1 != $post_title && -1 != $id_attribute_set) {
         $new_product_id = wp_insert_post(array('post_type' => WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT, 'post_status' => 'publish', 'post_title' => $post_title, 'post_content' => $post_content));
         if (!is_wp_error($new_product_id)) {
             update_post_meta($new_product_id, '_' . WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . '_attribute_set_id', $id_attribute_set);
             $data_to_save['post_ID'] = $data_to_save['product_id'] = intval($new_product_id);
             $data_to_save['wpshop_product_attribute'] = !empty($attributes) ? $attributes : array();
             $data_to_save['user_ID'] = get_current_user_id();
             $data_to_save['action'] = 'editpost';
             $response['pid'] = $new_product_id;
             $response['status'] = false;
             $response['output'] = __('Product created partially!', 'wpshop');
             if (!empty($new_product_id) && !empty($data_to_save['user_ID'])) {
                 $product_class = new wpshop_products();
                 $product_class->save_product_custom_informations($new_product_id, $data_to_save);
                 $response['status'] = true;
                 $response['output'] = __('Product created successfully.', 'wpshop');
             }
             $wps_quick_creation_hook = do_action('wps-new-product-quick-created', $new_product_id);
             if (!empty($wps_quick_creation_hook)) {
                 $response[''] = $wps_quick_creation_hook;
             }
         }
     }
     wp_die(json_encode($response));
 }
 /**
  * Récupère le pilotage de prix, le nombre de produit avec un prix incohérent, le type de l'entité et la langue de la boutique. 
  * Parcours la tableau de donnée avec la nouvelle valeur des prix par produit incohérent puis met à jour tout les autres prix de 
  * ce produit. Ensuite renvoie le template avec le nombre de prix incohérent qui on été corrigé et le template de la méthode :
  * ajax_checking_products_values si des produits incohérents sont toujours présent. / Get the price piloting, the number of 
  * product with an inconsistent price, type of the entity and the language of the shop. Browse the given table with the new
  * new value pricing of the inconsistent product and updates any other price of this product. Then display the template 
  * of the number of corrected product and the template of the method : ajax_checking_products_values if inconsistent product
  * already present.
  * 
  * @param array $_POST['product_price'] List of the new price for the product like array( $id_product => $new_price )
  * @return JSON Response
  */
 public function ajax_save_product_price()
 {
     header('Content-Type: application/json');
     $response = array();
     $price_piloting_option = get_option('wpshop_shop_price_piloting');
     $inconsistent_product_number = !empty($_POST['product_price']) ? count($_POST['product_price']) : 0;
     $consistent_product_number = 0;
     $entity_type_id = wpshop_entities::get_entity_identifier_from_code(WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT);
     $language = WPSHOP_CURRENT_LOCALE;
     if (!empty($_REQUEST['icl_post_language'])) {
         $query = $wpdb->prepare("SELECT locale FROM " . $wpdb->prefix . "icl_locale_map WHERE code = %s", $_REQUEST['icl_post_language']);
         $language = $wpdb->get_var($query);
     }
     if (!empty($_POST['product_price'])) {
         foreach ($_POST['product_price'] as $product_id => $price) {
             try {
                 if ($price_piloting_option == 'TTC') {
                     wpshop_attributes::saveAttributeForEntity(array('decimal' => array('product_price' => $price)), $entity_type_id, $product_id, $language, 'wpshop_products');
                 } else {
                     wpshop_attributes::saveAttributeForEntity(array('decimal' => array('price_ht' => $price)), $entity_type_id, $product_id, $language, 'wpshop_product');
                 }
                 wpshop_products::calculate_price($product_id);
                 $consistent_product_number++;
             } catch (Exception $e) {
             }
         }
     }
     $response['template_number'] = __(sprintf('Number of processed product : %d/%d', $consistent_product_number, $inconsistent_product_number), 'wps-product');
     $list_product = wps_product_ctr::get_inconsistent_product();
     ob_start();
     require wpshop_tools::get_template_part(WPS_PRODUCT_DIR, WPS_PRODUCT_TEMPLATES_MAIN_DIR, "backend", "product_check_data");
     $response['template'] = ob_get_clean();
     wp_die(json_encode($response));
 }
 function latest_products_ordered($orders)
 {
     global $wpdb;
     $product_id = $output = '';
     $products = array();
     $display_option = get_option('wpshop_display_option');
     if (!empty($orders) && !empty($display_option) && !empty($display_option['latest_products_ordered'])) {
         foreach ($orders as $order) {
             $order_content = get_post_meta($order->ID, '_order_postmeta', true);
             if (!empty($order_content) && !empty($order_content['order_items'])) {
                 foreach ($order_content['order_items'] as $item) {
                     if (count($products) >= $display_option['latest_products_ordered']) {
                         continue;
                     }
                     $product_id = $item['item_id'];
                     if (!empty($item) && !empty($item['item_meta']) && !empty($item['item_meta']['variation_definition'])) {
                         $parent_def = wpshop_products::get_parent_variation($item['item_id']);
                         if (!empty($parent_def)) {
                             $parent_post = $parent_def['parent_post'];
                             $product_id = $parent_post->ID;
                         }
                     }
                     if (!in_array($product_id, $products)) {
                         $products[] = $product_id;
                     }
                 }
             }
         }
         if (!empty($products)) {
             $products_id = implode(",", $products);
             $output = wpshop_display::display_template_element('latest_products_ordered', array('LATEST_PRODUCTS_ORDERED' => do_shortcode('[wpshop_products pid="' . $products_id . '"]')));
         }
     }
     return $output;
 }
 function add_gift_product_to_cart($cartContent, $order)
 {
     global $wpdb;
     if (!empty($order['cart_rule']) && !empty($order['cart_rule']['discount_value']) && !empty($order['cart_rule']['discount_type']) && $order['cart_rule']['discount_type'] == 'gift_product') {
         $product = get_post($order['cart_rule']['discount_value']);
         $option_name = '';
         if ($product->post_type == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION) {
             $parent_product_infos = wpshop_products::get_parent_variation($product->ID);
             if (!empty($parent_product_infos) && !empty($parent_product_infos['parent_post'])) {
                 $parent_post_infos = $parent_product_infos['parent_post'];
                 $product_title = $parent_post_infos->post_title;
                 $product_options = get_post_meta($product->ID, '_wpshop_variations_attribute_def', true);
                 if (!empty($product_options) && is_array($product_options)) {
                     $option_name = '';
                     foreach ($product_options as $k => $product_option) {
                         $query = $wpdb->prepare('SELECT frontend_label FROM ' . WPSHOP_DBT_ATTRIBUTE . ' WHERE code = %s', $k);
                         $option_name .= $wpdb->get_var($query) . ' ';
                         $query = $wpdb->prepare('SELECT label FROM ' . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . ' WHERE id= %d', $product_option);
                         $option_name .= $wpdb->get_var($query) . ' ';
                     }
                     $discount_value = $product_title;
                 }
             }
         } else {
             $discount_value = $product->post_title;
         }
         $tpl_component['CART_PRODUCT_MORE_INFO'] = $option_name;
         $tpl_component['CART_LINE_ITEM_ID'] = $order['cart_rule']['discount_value'];
         $tpl_component['CART_LINE_ITEM_PUHT'] = number_format(0, 2);
         $tpl_component['CART_LINE_ITEM_DISCOUNT_AMOUNT'] = number_format(0, 2);
         $tpl_component['CART_LINE_ITEM_TPHT'] = number_format(0, 2);
         $tpl_component['CART_LINE_ITEM_TPTTC'] = number_format(0, 2);
         $tpl_component['CART_LINE_ITEM_QTY_'] = 1;
         $tpl_component['CART_LINE_ITEM_REMOVER'] = '';
         $tpl_component['CART_PRODUCT_NAME'] = $discount_value . ' (' . __('Gift product', 'wpshop') . ')';
         $cartContent .= wpshop_display::display_template_element('cart_line', $tpl_component);
     }
     return $cartContent;
 }
				<?php 
        echo wpshop_tools::trunk($order_item['item_name'], 50);
        ?>
				<?php 
        $product_attribute_order_detail = wpshop_attributes_set::getAttributeSetDetails(get_post_meta($order_item['item_id'], WPSHOP_PRODUCT_ATTRIBUTE_SET_ID_META_KEY, true));
        $output_order = array();
        if (count($product_attribute_order_detail) > 0 && is_array($product_attribute_order_detail)) {
            foreach ($product_attribute_order_detail as $product_attr_group_id => $product_attr_group_detail) {
                foreach ($product_attr_group_detail['attribut'] as $position => $attribute_def) {
                    if (!empty($attribute_def->code)) {
                        $output_order[$attribute_def->code] = $position;
                    }
                }
            }
        }
        $variation_attribute_ordered = wpshop_products::get_selected_variation_display($order_item['item_meta'], $output_order, 'cart');
        ksort($variation_attribute_ordered['attribute_list']);
        ?>
				<?php 
        if (!empty($variation_attribute_ordered['attribute_list'])) {
            ?>
					<ul class="wps-cart-item-variations" >
				<?php 
            foreach ($variation_attribute_ordered['attribute_list'] as $attribute_variation_to_output) {
                ?>
					<?php 
                if (!empty($attribute_variation_to_output)) {
                    ?>
						<?php 
                    echo $attribute_variation_to_output;
                    ?>
 /**
  * Display a form allowing to create an entity from frontend with a shortcode
  * @param array $shortcode_args The different parameters for the shortocde: the field list for the form, different parameters for the entity to create
  */
 public static function wpshop_entities_shortcode($shortcode_args)
 {
     global $wpshop_account, $wpdb;
     $output = $form_content = '';
     if (get_current_user_id() > 0) {
         if (!empty($_POST['quick_entity_add_button'])) {
             $attributes = array();
             foreach ($_POST['attribute'] as $attribute_type => $attribute) {
                 foreach ($attribute as $attribute_code => $attribute_value) {
                     $attributes[$attribute_code] = $attribute_value;
                 }
             }
             $result = wpshop_products::addProduct($_POST['wp_fields']['post_title'], '', $attributes, 'complete');
         }
         if (empty($shortcode_args['attribute_set_id']) || empty($shortcode_args['post_type'])) {
             $output = __('This form page is invalid because no set or type or content is defined. Please contact administrator with this error message', 'wpshop');
         } else {
             $entity_identifier = wpshop_entities::get_entity_identifier_from_code($shortcode_args['post_type']);
             $attribute_set_def = wpshop_attributes_set::getElement($shortcode_args['attribute_set_id'], "'valid'");
             if (empty($entity_identifier) || empty($attribute_set_def) || $entity_identifier != $attribute_set_def->entity_id) {
                 $output = __('This form page is invalid because type and set are not linked. Please contact administrator with this error message', 'wpshop');
             } else {
                 /** Display wordpress fields */
                 foreach (explode(', ', $shortcode_args['fields']) as $field_name) {
                     $label = '';
                     switch ($field_name) {
                         case 'post_title':
                             switch ($shortcode_args['post_type']) {
                                 case WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT:
                                     $label = __('Product title', 'wpshop');
                                     break;
                                 default:
                                     $label = __('Name', 'wpshop');
                                     break;
                             }
                             $field_type = 'text';
                             break;
                         case 'post_thumbnail':
                             switch ($shortcode_args['post_type']) {
                                 case WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT:
                                     $label = __('Product picture', 'wpshop');
                                     break;
                                 default:
                                     $label = __('Default picture', 'wpshop');
                                     break;
                             }
                             $field_type = 'file';
                             break;
                     }
                     if (!empty($label)) {
                         $template_part = 'quick_entity_wp_internal_field_' . $field_type;
                         $tpl_component = array();
                         $tpl_component['WP_FIELD_NAME'] = $field_name;
                         $tpl_component['WP_FIELD_VALUE'] = '';
                         $input = wpshop_display::display_template_element($template_part, $tpl_component);
                         unset($tpl_component);
                         $template_part = 'quick_entity_wp_internal_field_output';
                         $tpl_component = array();
                         $tpl_component['ENTITY_TYPE_TO_CREATE'] = $shortcode_args['post_type'];
                         $tpl_component['WP_FIELD_NAME'] = $field_name;
                         $tpl_component['WP_FIELD_LABEL'] = $label;
                         $tpl_component['WP_FIELD_INPUT'] = $input;
                         $form_content .= wpshop_display::display_template_element($template_part, $tpl_component);
                         unset($tpl_component);
                     }
                 }
                 /** Display attributes fields	*/
                 $query = $wpdb->prepare("\nSELECT ATT.code\nFROM " . WPSHOP_DBT_ATTRIBUTE . " AS ATT\n\tINNER JOIN " . WPSHOP_DBT_ATTRIBUTE_DETAILS . " AS ATTR_DET ON ((ATTR_DET.status = 'valid') AND (ATTR_DET.attribute_id = ATT.id) AND (ATTR_DET.entity_type_id = ATT.entity_id))\n\tINNER JOIN " . WPSHOP_DBT_ATTRIBUTE_GROUP . " AS ATT_GROUP ON ((ATT_GROUP.status = 'valid') AND (ATT_GROUP.attribute_set_id = ATTR_DET.attribute_set_id) AND (ATT_GROUP.id = ATTR_DET.attribute_group_id))\nWHERE ATT.is_used_in_quick_add_form = %s\n\tAND ATT.status= %s\n\tAND ATT.entity_id = %d\n\tAND ATTR_DET.attribute_set_id = %d\nGROUP BY ATT.code\nORDER BY ATT_GROUP.position, ATTR_DET.position", 'yes', 'valid', wpshop_entities::get_entity_identifier_from_code($shortcode_args['post_type']), $shortcode_args['attribute_set_id']);
                 $attribute_for_creation = $wpdb->get_results($query);
                 foreach ($attribute_for_creation as $attribute) {
                     $attr_field = wpshop_attributes::display_attribute($attribute->code, 'frontend');
                     $form_content .= $attr_field['field'];
                 }
                 /**	Check if there are extra parameters	*/
                 if (!empty($shortcode_args['extra_element'])) {
                     $extra_element = explode(', ', $shortcode_args['extra_element']);
                     foreach ($extra_element as $element) {
                         $element_def = explode('!#wps#!', $element);
                         $element_type = $element_def[0];
                         $element_id = $element_def[1];
                         if ($element_type == WPSHOP_NEWTYPE_IDENTIFIER_ADDRESS) {
                             $form_content .= '<div class="wpshop_entity_address_container">';
                             // 								$form_content .= $wpshop_account->display_form_fields($element_id, null, 'not');
                             $form_content .= '</div><div class="wpshop_cls"></div>';
                         }
                     }
                 }
             }
         }
         $template_part = 'quick_entity_add_form';
         $tpl_component = array();
         $tpl_component['ENTITY_TYPE'] = $shortcode_args['post_type'];
         $tpl_component['ENTITY_ATTRIBUTE_SET_ID'] = !empty($shortcode_args['attribute_set_id']) ? $shortcode_args['attribute_set_id'] : 0;
         $tpl_component['NEW_ENTITY_FORM_DETAILS'] = $form_content;
         $tpl_component['ENTITY_QUICK_ADDING_FORM_NONCE'] = wp_create_nonce("wpshop_add_new_entity_ajax_nonce");
         $tpl_component['ENTITY_QUICK_ADD_BUTTON_TEXT'] = __($shortcode_args['button_text'], 'wpshop');
         /*	Ajout de la boite permettant d'ajouter des valeurs aux attributs de type liste deroulante a la volee	*/
         $dialog_title = __('New value', 'wpshop');
         $dialog_identifier = 'new_value_for_entity';
         $dialog_input_identifier = 'wpshop_new_attribute_option_value';
         ob_start();
         include WPSHOP_TEMPLATES_DIR . 'admin/add_new_element_dialog.tpl.php';
         $tpl_component['DIALOG_BOX'] = ob_get_contents();
         ob_end_clean();
         $tpl_component['DIALOG_BOX'] .= '<input type="hidden" name="wpshop_attribute_type_select_code" value="" id="wpshop_attribute_type_select_code" />';
         $tpl_component['DIALOG_BOX'] = '';
         $output = wpshop_display::display_template_element($template_part, $tpl_component, array(), 'wpshop');
         echo $output;
     } else {
         echo $wpshop_account->display_login_form();
     }
 }
	];
	var myPie = new Chart(document.getElementById("wps-statistics-best-sales").getContext("2d")).Pie(pieData);         	
});
</script>
<!-- Display Legend -->
<ul class="wps_statistics_legend">
	<?php 
    if (!empty($products)) {
        $i = 0;
        foreach ($products as $item_id => $product) {
            if ($i < 8) {
                $product_type = get_post_type($item_id);
                if ($product_type == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT) {
                    $product_name = get_the_title($item_id);
                } else {
                    $parent_def = wpshop_products::get_parent_variation($item_id);
                    if (!empty($parent_def) && !empty($parent_def['parent_post'])) {
                        $parent_post = $parent_def['parent_post'];
                        $product_name = $parent_post->post_title;
                    }
                }
                ?>
	
					<li><span style="background :<?php 
                echo $colors[$i];
                ?>
;" class="legend_indicator"></span><span><a href="<?php 
                echo admin_url('post.php?post=' . $item_id . '&action=edit');
                ?>
"><?php 
                echo !empty($product_name) ? $product_name : __('Deleted product', 'wpshop');
 /** Create a credit **/
 function create_an_credit($order_id, $product_list = array(), $credit_statut = 'not_paid', $credit_customer_account = '', $products_list_to_restock = array())
 {
     $status = false;
     if (!empty($order_id)) {
         $price_piloting_option = get_option('wpshop_shop_price_piloting');
         $order_credits = get_post_meta($order_id, '_wps_order_credit', true);
         $order_meta = get_post_meta($order_id, '_order_postmeta', true);
         if (empty($product_list)) {
             if (!empty($order_meta) && !empty($order_meta['order_items'])) {
                 $credit_def = array();
                 $credit_def['ref'] = self::generate_credit_slip_number($order_id);
                 $credit_def['credit_status'] = 'not_paid';
                 $credit_def['items'] = array();
                 $credit_total_amount = 0;
                 foreach ($order_meta['order_items'] as $item_id => $item) {
                     if (!empty($item_id) && !empty($item)) {
                         $credit_def['items'][$item_id] = $item;
                         $credit_total_amount += $credit_def['items'][$item_id]['item_total_ttc'];
                     }
                 }
                 if (!empty($order_meta['order_shipping_cost'])) {
                     $credit_def['items']['shipping_cost']['item_qty'] = 1;
                     $credit_def['items']['shipping_cost']['item_total_ht'] = $credit_def['items'][$product_id]['item_pu_ht'] = !empty($price_piloting_option) && $price_piloting_option == 'HT' ? $product['price'] : $product['price'] / (1 + WPSHOP_VAT_ON_SHIPPING_COST / 100);
                     $credit_def['items']['shipping_cost']['item_total_ttc'] = $credit_def['items'][$product_id]['item_pu_ttc'] = !empty($price_piloting_option) && $price_piloting_option == 'HT' ? $product['price'] * (1 + WPSHOP_VAT_ON_SHIPPING_COST / 100) : $product['price'];
                     $credit_def['items']['shipping_cost']['item_tva_amount'] = $credit_def['items'][$product_id]['item_tva_total_amount'] = $credit_def['items'][$product_id]['item_pu_ttc'] - $credit_def['items'][$product_id]['item_pu_ht'];
                     $credit_def['items']['shipping_cost']['item_name'] = __('Shipping cost', 'wpshop');
                     $credit_def['items']['shipping_cost']['item_tva_rate'] = WPSHOP_VAT_ON_SHIPPING_COST;
                 }
             }
             $d = array();
             $d[] = $credit_def;
             update_post_meta($order_id, '_wps_order_credit', $d);
         } else {
             if (empty($order_credits)) {
                 $order_credits = array();
             }
             $credit_def = array();
             $credit_def['credit_date'] = current_time('mysql', 0);
             $credit_def['ref'] = self::generate_credit_slip_number($order_id);
             $credit_def['credit_status'] = $credit_statut;
             $credit_def['items'] = array();
             $credit_total_amount = 0;
             foreach ($product_list as $product_id => $product) {
                 if (!empty($order_meta) && !empty($order_meta['order_items']) && !empty($order_meta['order_items'][$product_id])) {
                     $credit_def['items'][$product_id] = $order_meta['order_items'][$product_id];
                     /** Check Price & Quantity **/
                     if (!empty($product['qty']) && $product['qty'] != $credit_def['items'][$product_id]['item_qty']) {
                         $credit_def['items'][$product_id]['item_qty'] = $product['qty'];
                         $credit_def['items'][$product_id]['item_total_ht'] = $credit_def['items'][$product_id]['item_pu_ht'] * $credit_def['items'][$product_id]['item_qty'];
                         $credit_def['items'][$product_id]['item_total_ttc'] = $credit_def['items'][$product_id]['item_pu_ht'] * (1 + $credit_def['items'][$product_id]['item_tva_rate'] / 100) * $credit_def['items'][$product_id]['item_qty'];
                         $credit_def['items'][$product_id]['item_tva_total_amount'] = $credit_def['items'][$product_id]['item_pu_ht'] * ($credit_def['items'][$product_id]['item_tva_rate'] / 100) * $credit_def['items'][$product_id]['item_qty'];
                     }
                     if (!empty($product['price']) && $product['price'] != (!empty($price_piloting_option) && $price_piloting_option == 'HT' ? $credit_def['items'][$product_id]['item_pu_ht'] : $credit_def['items'][$product_id]['item_qty'])) {
                         $credit_def['items'][$product_id]['item_pu_ht'] = !empty($price_piloting_option) && $price_piloting_option == 'HT' ? $product['price'] / (1 + $credit_def['items'][$product_id]['item_tva_rate'] / 100) : $product['price'];
                         $credit_def['items'][$product_id]['item_pu_ttc'] = $credit_def['items'][$product_id]['item_pu_ht'] * (1 + $credit_def['items'][$product_id]['item_tva_rate'] / 100);
                         $credit_def['items'][$product_id]['item_tva_amount'] = $credit_def['items'][$product_id]['item_pu_ht'] * (1 + $credit_def['items'][$product_id]['item_tva_rate'] / 100);
                         /** Total **/
                         $credit_def['items'][$product_id]['item_total_ht'] = $credit_def['items'][$product_id]['item_pu_ht'] * $credit_def['items'][$product_id]['item_qty'];
                         $credit_def['items'][$product_id]['item_total_ttc'] = $credit_def['items'][$product_id]['item_pu_ht'] * (1 + $credit_def['items'][$product_id]['item_tva_rate'] / 100) * $credit_def['items'][$product_id]['item_qty'];
                         $credit_def['items'][$product_id]['item_tva_total_amount'] = $credit_def['items'][$product_id]['item_pu_ht'] * ($credit_def['items'][$product_id]['item_tva_rate'] / 100) * $credit_def['items'][$product_id]['item_qty'];
                     }
                 }
                 /** Shipping Cost Include **/
                 if ($product_id == 'shipping_cost') {
                     $credit_def['items'][$product_id]['item_qty'] = 1;
                     $credit_def['items'][$product_id]['item_total_ht'] = $credit_def['items'][$product_id]['item_pu_ht'] = !empty($price_piloting_option) && $price_piloting_option == 'HT' ? $product['price'] : $product['price'] / (1 + WPSHOP_VAT_ON_SHIPPING_COST / 100);
                     $credit_def['items'][$product_id]['item_total_ttc'] = $credit_def['items'][$product_id]['item_pu_ttc'] = !empty($price_piloting_option) && $price_piloting_option == 'HT' ? $product['price'] * (1 + WPSHOP_VAT_ON_SHIPPING_COST / 100) : $product['price'];
                     $credit_def['items'][$product_id]['item_tva_amount'] = $credit_def['items'][$product_id]['item_tva_total_amount'] = $credit_def['items'][$product_id]['item_pu_ttc'] - $credit_def['items'][$product_id]['item_pu_ht'];
                     $credit_def['items'][$product_id]['item_name'] = __('Shipping cost', 'wpshop');
                     $credit_def['items'][$product_id]['item_tva_rate'] = WPSHOP_VAT_ON_SHIPPING_COST;
                 }
                 $credit_total_amount += $credit_def['items'][$product_id]['item_total_ttc'];
                 if (!empty($products_list_to_restock)) {
                     if (array_key_exists($product_id, $products_list_to_restock)) {
                         /** Check Post type to know if product is a variation **/
                         $product_quantity = $credit_def['items'][$product_id]['item_qty'];
                         $item_post_type = get_post_type($product_id);
                         if ($item_post_type == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION) {
                             $parent_product_def = wpshop_products::get_parent_variation($product_id);
                             $parent_post = $parent_product_def['parent_post'];
                             if (!empty($parent_post)) {
                                 $product_id = $parent_post->ID;
                             }
                         }
                         self::restock_product_after_credit($product_id, $product_quantity);
                     }
                 }
             }
             $credit_def['total_credit'] = $credit_total_amount;
             $order_credits[] = $credit_def;
             update_post_meta($order_id, '_wps_order_credit', $order_credits);
             if (!empty($credit_customer_account)) {
                 $user_metadata = get_user_meta($order_meta['customer_id'], '_wps_credit_amount', true);
                 if (empty($user_metadata)) {
                     $user_metadata = 0;
                 }
                 $user_metadata += $credit_def['total_credit'];
                 update_user_meta($order_meta['customer_id'], '_wps_credit_amount', $user_metadata);
             }
         }
         $status = true;
     }
     return $status;
 }
require_once ABSPATH . 'wp-admin/includes/admin.php';
// T�l�chargement produit t�l�chargeable
if (!empty($_GET['download']) && !empty($_GET['oid'])) {
    $variation_id = '';
    if (is_user_logged_in()) {
        $user_id = get_current_user_id();
        $order = get_post_meta($_GET['oid'], '_order_postmeta', true);
        if (!empty($order)) {
            $download_codes = get_user_meta($user_id, '_order_download_codes_' . $_GET['oid'], true);
            if (!empty($download_codes) && is_array($download_codes)) {
                foreach ($download_codes as $downloadable_product_id => $d) {
                    $is_encrypted = false;
                    if ($d['download_code'] == $_GET['download']) {
                        wpshop_tools::create_custom_hook('encrypt_actions_for_downloadable_product', array('order_id' => $_GET['oid'], 'download_product_id' => $downloadable_product_id));
                        if (get_post_type($downloadable_product_id) == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION) {
                            $parent_def = wpshop_products::get_parent_variation($downloadable_product_id);
                            if (!empty($parent_def) && !empty($parent_def['parent_post'])) {
                                $parent_post = $parent_def['parent_post'];
                                $variation_id = $downloadable_product_id;
                                $downloadable_product_id = $parent_post->ID;
                            }
                        }
                        $link = wpshop_attributes::get_attribute_option_output(array('item_id' => $downloadable_product_id, 'item_is_downloadable_' => 'yes'), 'is_downloadable_', 'file_url', $order);
                        if ($link !== false) {
                            $uploads = wp_upload_dir();
                            $basedir = $uploads['basedir'];
                            $pos = strpos($link, 'uploads');
                            $link = $basedir . substr($link, $pos + 7);
                            /** If plugin is encrypted **/
                            $encrypted_plugin_path = get_post_meta($_GET['oid'], '_download_file_path_' . $_GET['oid'] . '_' . (!empty($variation_id) && get_post_type($variation_id) == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION ? $variation_id : $downloadable_product_id), true);
                            if (!empty($encrypted_plugin_path)) {
示例#11
0
 /**
  * Change output for product page
  *
  * @param string $content The content of a post
  * @return Ambigous <mixed, string>|unknown
  */
 public static function products_page($content = '')
 {
     global $wp_query;
     if (!empty($wp_query->queried_object) && !empty($wp_query->queried_object->post_type) && $wp_query->queried_object->post_type == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT) {
         return wpshop_products::product_complete_sheet_output($content, $wp_query->post->ID);
     } else {
         return $content;
     }
 }
<?php

if (!empty($product_id)) {
    ?>
	<?php 
    echo wpshop_products::wpshop_variation($product_id);
    ?>
	<div class="wpspos-product-variation-selector" >
		<button class="wps-bton-first-mini-rounded alignRight" id="wpspos-product-with-variation-add-to-cart" ><?php 
    _e('Add product', 'wpshop');
    ?>
</button>
	</div>
<?php 
} else {
    ?>
	<?php 
    _e('We are unable to detect the product you want to add to order', 'wps-pos-i18n');
}
	<div class="wps-table-content wps-table-row">
		<div class="wps-table-cell  wps-cart-item-img"><?php 
        echo get_the_post_thumbnail($product->ID, 'thumbnail');
        ?>
</div>
		<div class="wps-table-cell"><?php 
        echo !empty($product_metadata) && $product_metadata['product_reference'] ? $product_metadata['product_reference'] : '';
        ?>
</div>
		<div class="wps-table-cell"><?php 
        echo $product->post_title;
        ?>
</div>
		<div class="wps-table-cell">
		<?php 
        $product = wpshop_products::get_product_data($product->ID);
        echo wpshop_prices::get_product_price($product, 'price_display', array('mini_output', 'grid'));
        ?>
		</div>
		<?php 
        if ('completed' != $order_post_meta) {
            ?>
			<div class="wps-table-cell">
				<a class="wps-bton-icon-minus-small wps-cart-reduce-product-qty" href=""></a>
				<input id="wps-cart-product-qty-<?php 
            echo $pid;
            ?>
" class="wps-cart-product-qty" type="text" value="1" name="french-hens" size="3" style="text-align : center">
				<a class="wps-bton-icon-plus-small wps-cart-add-product-qty" href=""></a>
			</div>
			<div class="wps-table-cell">
 /**
  * Check if there is enough stock for asked product if manage stock option is checked
  *
  * @param integer $product_id The product we have to check the stock for
  * @param unknown_type $cart_asked_quantity The quantity the end user want to add to the cart
  *
  * @return boolean|string  If there is enough sotck or if the option for managing stock is set to false return OK (true) In the other case return an alert message for the user
  */
 function check_stock($product_id, $cart_asked_quantity, $combined_variation_id = '')
 {
     // Checking if combined variation ID exist and it is a simple option
     if (!empty($combined_variation_id) && strpos($combined_variation_id, '__') !== false) {
         $var_id = explode('__', $combined_variation_id);
         $combined_variation_id = $var_id[1];
     }
     if (!empty($combined_variation_id)) {
         $variation_metadata = get_post_meta($combined_variation_id, '_wpshop_product_metadata', true);
         if (isset($variation_metadata['product_stock'])) {
             $product_id = $combined_variation_id;
         }
     }
     $product_data = wpshop_products::get_product_data($product_id, false, '"publish", "free_product"');
     if (!empty($product_data)) {
         $manage_stock = !empty($product_data['manage_stock']) ? $product_data['manage_stock'] : '';
         $product_post_type = get_post_type($product_id);
         if ($product_post_type == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION) {
             $parent_def = wpshop_products::get_parent_variation($product_id);
             if (!empty($parent_def) && !empty($parent_def['parent_post'])) {
                 $parent_post = $parent_def['parent_post'];
                 $parent_product_data = wpshop_products::get_product_data($parent_post->ID);
                 $manage_stock = !empty($parent_product_data['manage_stock']) ? $parent_product_data['manage_stock'] : '';
             }
         }
         $manage_stock_is_activated = !empty($manage_stock) && strtolower(__($manage_stock, 'wpshop')) == strtolower(__('Yes', 'wpshop')) ? true : false;
         $the_qty_is_in_stock = !empty($product_data['product_stock']) && $product_data['product_stock'] >= $cart_asked_quantity ? true : false;
         if ($manage_stock_is_activated && $the_qty_is_in_stock or !$manage_stock_is_activated) {
             return true;
         } else {
             return __('You cannot add that amount to the cart since there is not enough stock.', 'wpshop');
         }
     }
     return false;
 }
	];
	var myPie = new Chart(document.getElementById("wps-statistics-most-viewed-statistics").getContext("2d")).Pie(pieData);         	
});
</script>
<!-- Display Legend -->
<ul class="wps_statistics_legend">
	<?php 
    if (!empty($products)) {
        $i = 0;
        foreach ($products as $item_id => $product) {
            if ($i < 8) {
                $product_type = get_post_type($product->post_id);
                if ($product_type == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT) {
                    $product_name = get_the_title($product->post_id);
                } else {
                    $parent_def = wpshop_products::get_parent_variation($product->post_id);
                    if (!empty($parent_def) && !empty($parent_def['parent_post'])) {
                        $parent_post = $parent_def['parent_post'];
                        $product_name = $parent_post->post_title;
                    }
                }
                ?>
	
					<li><span style="background :<?php 
                echo $colors[$i];
                ?>
;" class="legend_indicator"></span><span><a href="<?php 
                echo admin_url('post.php?post=' . $product->post_id . '&action=edit');
                ?>
"><?php 
                echo $product_name;
 /**
  * Update th receive payment part in order postmeta and return "Complete" if the shop have received the total amount of the order
  * @param int $order_id
  * @param array $params_array
  * @return string
  */
 public static function check_order_payment_total_amount($order_id, $params_array, $bank_response, $order_meta = array(), $save_metadata = true)
 {
     global $wpshop_payment;
     global $wpdb;
     $order_meta = !empty($order_meta) ? $order_meta : get_post_meta($order_id, '_order_postmeta', true);
     $wps_message = new wps_message_ctr();
     if (!empty($order_meta)) {
         $order_info = get_post_meta($order_id, '_order_info', true);
         $user_data = get_userdata($order_meta['customer_id']);
         $email = !empty($user_data) && !empty($user_data->user_email) ? $user_data->user_email : '';
         // 			$email = ( !empty($order_info) &&  !empty($order_info['billing']) && !empty($order_info['billing']['address']['address_user_email']) ) ? $order_info['billing']['address']['address_user_email'] : '' ;
         $first_name = !empty($order_info) && !empty($order_info['billing']) && !empty($order_info['billing']['address']['address_first_name']) ? $order_info['billing']['address']['address_first_name'] : '';
         $last_name = !empty($order_info) && !empty($order_info['billing']) && !empty($order_info['billing']['address']['address_last_name']) ? $order_info['billing']['address']['address_last_name'] : '';
         $key = self::get_order_waiting_payment_array_id($order_id, $params_array['method']);
         $order_grand_total = $order_meta['order_grand_total'];
         $total_received = !empty($params_array['status']) && $params_array['status'] == 'payment_received' && $bank_response == 'completed' && !empty($params_array['received_amount']) ? $params_array['received_amount'] : 0;
         foreach ($order_meta['order_payment']['received'] as $received) {
             $total_received += !empty($received['status']) && $received['status'] == 'payment_received' && $bank_response == 'completed' && !empty($received['received_amount']) ? $received['received_amount'] : 0;
         }
         $order_meta['order_amount_to_pay_now'] = $order_grand_total - $total_received;
         $order_meta['order_payment']['received'][$key] = self::add_new_payment_to_order($order_id, $order_meta, $key, $params_array, $bank_response);
         if ($bank_response == 'completed') {
             if (number_format((double) $total_received, 2, '.', '') >= number_format((double) $order_grand_total, 2, '.', '')) {
                 $payment_status = 'completed';
                 $order_meta['order_invoice_ref'] = empty($order_meta['order_invoice_ref']) && !empty($order_meta['order_payment']['received'][$key]) && !empty($order_meta['order_payment']['received'][$key]['invoice_ref']) ? $order_meta['order_payment']['received'][$key]['invoice_ref'] : $order_meta['order_invoice_ref'];
                 $order_meta['order_invoice_date'] = current_time('mysql', 0);
                 if (!empty($order_meta['order_items'])) {
                     foreach ($order_meta['order_items'] as $item_id => $o) {
                         $pid = $o['item_id'];
                         if (strpos($item_id, '__') !== false) {
                             $product_data_id = explode('__', $item_id);
                             $pid = !empty($product_data_id) && !empty($product_data_id[1]) ? $product_data_id[1] : $pid;
                         }
                         $product = wpshop_products::get_product_data($pid);
                         if (get_post_type($pid) == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION) {
                             $parent_def = wpshop_products::get_parent_variation($pid);
                             $parent_post = $parent_def['parent_post'];
                             $product = wpshop_products::get_product_data($parent_post->ID);
                         }
                         if (!empty($product) && !empty($product['manage_stock']) && strtolower(__($product['manage_stock'], 'wpshop')) == strtolower(__('Yes', 'wpshop'))) {
                             wpshop_products::reduce_product_stock_qty($product['product_id'], $o['item_qty'], $pid);
                         }
                     }
                 }
                 /** Add information about the order completed date */
                 update_post_meta($order_id, '_' . WPSHOP_NEWTYPE_IDENTIFIER_ORDER . '_completed_date', current_time('mysql', 0));
                 /** Check if the order content a downloadable product **/
                 if (!empty($order_meta['order_items'])) {
                     foreach ($order_meta['order_items'] as $key_value => $item) {
                         $key_value = $item['item_id'];
                         /** Check if it's a product with signle variation, check the parent product **/
                         if (!empty($item['item_id']) && get_post_type($item['item_id']) == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION) {
                             $parent_item = wpshop_products::get_parent_variation($item['item_id']);
                             $key_value = $parent_item['parent_post']->ID;
                             $parent_post_metadata = $parent_item['parent_post_meta'];
                             if (!empty($parent_post_metadata['is_downloadable_'])) {
                                 $query = $wpdb->prepare('SELECT value FROM ' . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . ' WHERE id = %d', $parent_post_metadata['is_downloadable_']);
                                 $downloadable_option_value = $wpdb->get_var($query);
                                 if (!empty($downloadable_option_value)) {
                                     $item['item_is_downloadable_'] = $downloadable_option_value;
                                 }
                             }
                         }
                         if (!empty($item) && !empty($item['item_is_downloadable_']) && (__($item['item_is_downloadable_'], 'wpshop') == __('Yes', 'wpshop') || __($item['item_is_downloadable_'], 'wpshop') == __('yes', 'wpshop'))) {
                             $download_codes = get_user_meta($order_meta['customer_id'], '_order_download_codes_' . $order_id, true);
                             if (!empty($download_codes) && !empty($download_codes[$key_value]) && !empty($download_codes[$key_value]['download_code'])) {
                                 $link = '<a href="' . WPSHOP_URL . '/download_file.php?oid=' . $order_id . '&amp;download=' . $download_codes[$key_value]['download_code'] . '">' . __('Download', 'wpshop') . '</a>';
                                 $wps_message->wpshop_prepared_email($email, 'WPSHOP_DOWNLOADABLE_FILE_IS_AVAILABLE', array('order_key' => $order_meta['order_key'], 'customer_first_name' => $first_name, 'customer_last_name' => $last_name, 'order_date' => $order_meta['order_date'], 'download_product_link' => $link), array());
                             }
                         }
                     }
                 }
                 // Send confirmation e-mail to administrator
                 if (empty($_SESSION['wps-pos-addon'])) {
                     $email_option = get_option('wpshop_emails');
                     if (!empty($email_option) && !empty($email_option['send_confirmation_order_message'])) {
                         wpshop_checkout::send_order_email_to_administrator($order_id, $user_data);
                     }
                 }
                 // POS Status
                 if (!empty($order_meta['order_payment']) && !empty($order_meta['order_payment']['shipping_method']) && $order_meta['order_payment']['shipping_method'] == 'default_shipping_mode_for_pos') {
                     $payment_status = 'pos';
                 }
             } else {
                 $payment_status = 'partially_paid';
             }
             $order_meta['order_status'] = $payment_status;
             update_post_meta($order_id, '_order_postmeta', $order_meta);
             $save_metadata = false;
             $allow_send_invoice = get_option('wpshop_send_invoice');
             $invoice_attachment_file = !empty($allow_send_invoice) ? wpshop_modules_billing::generate_invoice_for_email($order_id, $order_meta['order_payment']['received'][$key]['invoice_ref']) : '';
             $email_option = get_option('wpshop_emails');
             $shipping_mode_option = get_option('wps_shipping_mode');
             $shipping_method = !empty($order_meta['order_payment']['shipping_method']) && !empty($shipping_mode_option) && !empty($shipping_mode_option['modes']) && is_array($shipping_mode_option['modes']) && array_key_exists($order_meta['order_payment']['shipping_method'], $shipping_mode_option['modes']) ? $shipping_mode_option['modes'][$order_meta['order_payment']['shipping_method']]['name'] : (!empty($order_meta['order_payment']['shipping_method']) ? $order_meta['order_payment']['shipping_method'] : '');
             $payment_method_option = get_option('wps_payment_mode');
             $order_payment_method = !empty($payment_method_option) && !empty($payment_method_option['mode']) && !empty($order_meta['order_payment']['customer_choice']['method']) && !empty($payment_method_option['mode'][$order_meta['order_payment']['customer_choice']['method']]) ? $payment_method_option['mode'][$order_meta['order_payment']['customer_choice']['method']]['name'] : $order_meta['order_payment']['customer_choice']['method'];
             if (!empty($email_option) && !empty($email_option['send_confirmation_order_message']) && $payment_status == 'completed') {
                 $wps_message->wpshop_prepared_email($email, 'WPSHOP_ORDER_CONFIRMATION_MESSAGE', array('order_id' => $order_id, 'customer_first_name' => $first_name, 'customer_last_name' => $last_name, 'customer_email' => $email, 'order_key' => !empty($order_meta['order_key']) ? $order_meta['order_key'] : '', 'order_date' => current_time('mysql', 0), 'order_payment_method' => $order_payment_method, 'order_content' => '', 'order_addresses' => '', 'order_customer_comments' => '', 'order_billing_address' => '', 'order_shipping_address' => '', 'order_shipping_method' => $shipping_method));
             }
             $wps_message->wpshop_prepared_email($email, 'WPSHOP_OTHERS_PAYMENT_CONFIRMATION_MESSAGE', array('order_key' => $order_meta['order_key'], 'customer_first_name' => $first_name, 'customer_last_name' => $last_name, 'order_date' => $order_meta['order_date'], 'order_shipping_method' => $shipping_method), array(), $invoice_attachment_file);
         } else {
             $payment_status = $bank_response;
         }
         $order_meta['order_status'] = $payment_status;
         if (!$save_metadata) {
             return $order_meta;
         } else {
             update_post_meta($order_id, '_order_postmeta', $order_meta);
         }
         update_post_meta($order_id, '_wpshop_order_status', $payment_status);
     }
 }
 public function wps_create_new_free_product()
 {
     global $wpdb;
     $status = false;
     $output = __('Error at product creation!', 'wpshop');
     $new_product_id = -1;
     $post_title = !empty($_POST['post_title']) ? $_POST['post_title'] : -1;
     $post_content = !empty($_POST['post_content']) ? $_POST['post_content'] : '';
     $attributes = !empty($_POST['attribute']) ? $_POST['attribute'] : -1;
     if ($post_title != -1) {
         $new_product_id = wp_insert_post(array('post_type' => WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT, 'post_status' => 'free_product', 'post_title' => $post_title, 'post_content' => $post_content));
         if (!is_object($new_product_id)) {
             $attribute_set_list = wpshop_attributes_set::get_attribute_set_list_for_entity(wpshop_entities::get_entity_identifier_from_code('wpshop_product'));
             $id_attribute_set = null;
             foreach ($attribute_set_list as $attribute_set) {
                 if ($attribute_set->name == 'free_product') {
                     $id_attribute_set = $attribute_set->id;
                     break;
                 }
             }
             update_post_meta($new_product_id, '_' . WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . '_attribute_set_id', $id_attribute_set);
             $data_to_save['post_ID'] = $data_to_save['product_id'] = intval($new_product_id);
             $data_to_save['wpshop_product_attribute'] = !empty($attributes) ? $attributes : array();
             $data_to_save['user_ID'] = get_current_user_id();
             $data_to_save['action'] = 'editpost';
             $status = false;
             $output = __('Product created partially!', 'wpshop');
             if (!empty($new_product_id) && !empty($data_to_save['user_ID'])) {
                 $product_class = new wpshop_products();
                 $product_class->save_product_custom_informations($new_product_id, $data_to_save);
                 $status = true;
                 $output = __('Product created successfully.', 'wpshop');
             }
         }
     }
     echo json_encode(array('status' => $status, 'message' => $output, 'pid' => $new_product_id));
     wp_die();
 }
 /**
  * Add automaticaly products to cart if option is defined
  * @param array $cart_items
  * @return array
  */
 function add_automaticaly_product_to_cart($cart_items)
 {
     global $wpdb;
     // Recovery all products with options
     $query = $wpdb->prepare("SELECT post_id, meta_value FROM " . $wpdb->postmeta . " WHERE meta_key = %s ", '_' . WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . '_options');
     $post_list_with_options = $wpdb->get_results($query);
     $wps_orders = new wps_orders_ctr();
     if (!empty($post_list_with_options) && !empty($cart_items)) {
         foreach ($post_list_with_options as $product_info) {
             $product_meta = unserialize($product_info->meta_value);
             if (!empty($product_meta['cart']) && !empty($product_meta['cart']['auto_add']) && $product_meta['cart']['auto_add'] == 'yes' && empty($cart_items[$product_info->post_id])) {
                 $product = wpshop_products::get_product_data($product_info->post_id, true, '"draft", "publish"');
                 $the_product = array_merge(array('product_id' => $product_info->post_id, 'product_qty' => 1), $product);
                 $cart_items[$product_info->post_id] = $wps_orders->add_product_to_order($the_product);
             }
         }
     }
     return $cart_items;
 }
 function wps_get_summary_variations_product($product_id, $the_product, $has_variation)
 {
     global $wpdb;
     global $wpshop_payment;
     $output = '';
     $tpl_component = array();
     /**	Get attribute order for current product	*/
     $product_attribute_order_detail = wpshop_attributes_set::getAttributeSetDetails(get_post_meta($product_id, WPSHOP_PRODUCT_ATTRIBUTE_SET_ID_META_KEY, true));
     $output_order = array();
     if (count($product_attribute_order_detail) > 0) {
         foreach ($product_attribute_order_detail as $product_attr_group_id => $product_attr_group_detail) {
             foreach ($product_attr_group_detail['attribut'] as $position => $attribute_def) {
                 if (!empty($attribute_def->code)) {
                     $output_order[$attribute_def->code] = $position;
                 }
             }
         }
     }
     $variation_attribute_ordered = array();
     /** Check if product is a variation and change his name **/
     $product_post_type = get_post_type($the_product['product_id']);
     if (!empty($product_post_type) && $product_post_type == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION) {
         $parent_infos = wpshop_products::get_parent_variation($the_product['product_id']);
         $parent_post = !empty($parent_infos) && !empty($parent_infos['parent_post']) ? $parent_infos['parent_post'] : array();
         $the_product['product_name'] = $the_product['post_title'] = $parent_post->post_title;
     }
     foreach ($the_product as $product_definition_key => $product_definition_value) {
         if ($product_definition_key != 'item_meta') {
             $tpl_component['PRODUCT_MAIN_INFO_' . strtoupper($product_definition_key)] = $product_definition_value;
             if (!empty($wpshop_current_for_display) && in_array($product_definition_key, unserialize(WPSHOP_ATTRIBUTE_PRICES))) {
                 $tpl_component['PRODUCT_MAIN_INFO_' . strtoupper($product_definition_key)] = $product_definition_value;
             }
         } else {
             $variation_attribute_ordered = wpshop_products::get_selected_variation_display($product_definition_value, $output_order, 'selection_summary');
         }
     }
     ksort($variation_attribute_ordered['attribute_list']);
     $tpl_component['PRODUCT_VARIATION_SUMMARY_DETAILS'] = '';
     foreach ($variation_attribute_ordered['attribute_list'] as $attribute_variation_to_output) {
         $tpl_component['PRODUCT_VARIATION_SUMMARY_DETAILS'] .= $attribute_variation_to_output;
     }
     /**	For security get all attributes defined as user defined or used in variation in order to set default value to empty	*/
     $attribute_list = wpshop_attributes::getElement('yes', "'valid'", "is_used_for_variation", true);
     if (!empty($attribute_list)) {
         foreach ($attribute_list as $attribute_def) {
             $tpl_component['VARIATION_SUMMARY_ATTRIBUTE_PER_PRICE_' . strtoupper($attribute_def->code)] = '-';
         }
     }
     /**	Fill the array with all prices for different variations	*/
     foreach ($variation_attribute_ordered['prices'] as $attribute => $prices) {
         $tpl_component['VARIATION_SUMMARY_ATTRIBUTE_PER_PRICE_' . strtoupper($attribute)] = $prices;
     }
     $tpl_component['PRODUCT_VARIATION_SUMMARY_MORE_CONTENT'] = '';
     $query = $wpdb->prepare("SELECT post_id, meta_value FROM " . $wpdb->postmeta . " WHERE meta_key = %s ", '_' . WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . '_options');
     $post_list_with_options = $wpdb->get_results($query);
     if (!empty($post_list_with_options)) {
         $additionnal_price = 0;
         foreach ($post_list_with_options as $product_info) {
             $product_meta = unserialize($product_info->meta_value);
             if (!empty($product_meta['cart']) && !empty($product_meta['cart']['auto_add']) && $product_meta['cart']['auto_add'] == 'yes') {
                 $product = wpshop_products::get_product_data($product_info->post_id, true, '"publish", "draft"');
                 $the_product = array_merge(array('product_id' => $product_info->post_id, 'product_qty' => 1), $product);
                 $additionnal_price += !$different_currency || $change_rate == 1 ? $the_product['product_price'] : $the_product['product_price'] * $change_rate;
                 $tpl_component['AUTO_PRODUCT_NAME'] = $the_product['product_name'];
                 $tpl_component['AUTO_PRODUCT_PRODUCT_PRICE'] = wpshop_display::format_field_output('wpshop_product_price', !$different_currency || $change_rate == 1 ? $the_product['product_price'] : $the_product['product_price'] * $change_rate);
                 $tpl_component['PRODUCT_VARIATION_SUMMARY_MORE_CONTENT'] = wpshop_display::display_template_element('wpshop_product_configuration_summary_detail_auto_product', $tpl_component);
             }
         }
     }
     $tpl_component['PRODUCT_VARIATION_SUMMARY_GRAND_TOTAL'] = '';
     $tpl_component['SUMMARY_FINAL_RESULT_PRICE_NO_FORMAT'] = '';
     if (!empty($additionnal_price)) {
         $tpl_component['SUMMARY_FINAL_RESULT_PRICE'] = wpshop_display::format_field_output('wpshop_product_price', $tpl_component['PRODUCT_MAIN_INFO_PRODUCT_PRICE'] + $additionnal_price);
         $tpl_component['SUMMARY_FINAL_RESULT_PRICE_NO_FORMAT'] = $tpl_component['PRODUCT_MAIN_INFO_PRODUCT_PRICE'] + $additionnal_price;
         $tpl_component['PRODUCT_VARIATION_SUMMARY_GRAND_TOTAL'] = wpshop_display::display_template_element('wpshop_product_configuration_summary_detail_final_result', $tpl_component);
     }
     /**	Call informtion for partial payment	*/
     $partial_payment = $wpshop_payment->partial_payment_calcul($tpl_component['SUMMARY_FINAL_RESULT_PRICE_NO_FORMAT']);
     $tpl_component['PARTIAL_PAYMENT_INFO'] = !empty($partial_payment['amount_to_pay']) ? $partial_payment['display'] : '';
     /**	Define the current selected currency for the order summary	*/
     // 		$response['product_output'] = $has_variation ? wpshop_display::display_template_element('wpshop_product_configuration_summary_detail', $tpl_component) : '';
     $output = $has_variation ? wpshop_display::display_template_element('wpshop_product_configuration_summary_detail', $tpl_component) : '';
     return $output;
 }
    /**
     * Traduit le shortcode et affiche une cat�gorie
     * @param array $atts : tableau de param�tre du shortcode
     * @return mixed
     **/
    public static function wpshop_category_func($atts)
    {
        global $wpdb;
        $string = '';
        if (!empty($atts['cid'])) {
            $atts['type'] = !empty($atts['type']) && in_array($atts['type'], array('grid', 'list')) ? $atts['type'] : 'grid';
            $cat_list = explode(',', $atts['cid']);
            if (count($cat_list) > 1 || !empty($atts['display']) && $atts['display'] == 'only_cat') {
                $string .= '
					<div class="wpshop_categories_' . $atts['type'] . '" >';
                foreach ($cat_list as $cat_id) {
                    $sub_category_def = get_term($cat_id, WPSHOP_NEWTYPE_IDENTIFIER_CATEGORIES);
                    $string .= wpshop_categories::category_mini_output($sub_category_def, $atts['type']);
                }
                $string .= '
					</div>';
            } else {
                $sub_category_def = get_term($atts['cid'], WPSHOP_NEWTYPE_IDENTIFIER_CATEGORIES);
                if (empty($atts['display']) || $atts['display'] != 'only_products') {
                    $string .= wpshop_categories::category_mini_output($sub_category_def, $atts['type']);
                    $string .= '
					<div class="category_product_' . $atts['type'] . '" >
						<h2 class="category_content_part_title" >' . __('Category\'s product list', 'wpshop') . '</h2>';
                }
                $string .= wpshop_products::wpshop_products_func($atts);
                if (empty($atts['display']) || $atts['display'] != 'only_products') {
                    $string .= '</div>';
                }
            }
        } else {
            $string .= __('No categories found for display', 'wpshop');
        }
        return do_shortcode($string);
    }
    foreach ($orders_infos['order_items'] as $key => $item) {
        $item_ref = $item['item_ref'];
        $item_name = $item['item_name'];
        if (!empty($item['item_id'])) {
            $product_attribute_order_detail = wpshop_attributes_set::getAttributeSetDetails(get_post_meta($item['item_id'], WPSHOP_PRODUCT_ATTRIBUTE_SET_ID_META_KEY, true));
            $output_order = array();
            if (count($product_attribute_order_detail) > 0 && is_array($product_attribute_order_detail)) {
                foreach ($product_attribute_order_detail as $product_attr_group_id => $product_attr_group_detail) {
                    foreach ($product_attr_group_detail['attribut'] as $position => $attribute_def) {
                        if (!empty($attribute_def->code)) {
                            $output_order[$attribute_def->code] = $position;
                        }
                    }
                }
            }
            $variation_attribute_ordered = wpshop_products::get_selected_variation_display($item['item_meta'], $output_order, 'invoice_print', 'common');
            ksort($variation_attribute_ordered['attribute_list']);
            $cart_more_infos = '';
            if (!empty($variation_attribute_ordered['attribute_list'])) {
                foreach ($variation_attribute_ordered['attribute_list'] as $attribute_variation_to_output) {
                    $cart_more_infos .= '<li>' . $attribute_variation_to_output . '</li>';
                }
            }
            $item_name .= !empty($cart_more_infos) ? '<ul>' . $cart_more_infos . '</ul>' : '';
        }
        ?>
		<tr height="40" valign="middle" align="center">
			<td><?php 
        echo $item_ref;
        ?>
</td><td align="center"><?php 
示例#22
0
 /**
  * Manage special operation on wpshop plugin update
  */
 public static function make_specific_operation_on_update($version)
 {
     global $wpdb, $wp_rewrite;
     $wpshop_shop_type = get_option('wpshop_shop_type', WPSHOP_DEFAULT_SHOP_TYPE);
     switch ($version) {
         case 3:
         case 6:
             self::wpshop_insert_default_pages($wpshop_shop_type);
             wp_cache_flush();
             return true;
             break;
         case 8:
             /**	Change metaboxes order for product in case it already exists	*/
             $query = $wpdb->prepare("SELECT umeta_id, meta_value FROM {$wpdb->usermeta} WHERE meta_key = %s", 'meta-box-order_wpshop_product');
             $customer_metaboxes_order = $wpdb->get_results($query);
             if (!empty($customer_metaboxes_order)) {
                 foreach ($customer_metaboxes_order as $customer_metabox_order) {
                     $do_changes = false;
                     $current_order = unserialize($customer_metabox_order->meta_value);
                     if (array_key_exists('normal', $current_order) && false !== strpos('wpshop_product_important_datas', $current_order['normal'])) {
                         str_replace('wpshop_product_important_datas,', '', $current_order['normal']);
                         $do_changes = true;
                     }
                     if (array_key_exists('side', $current_order)) {
                         str_replace('wpshop_product_important_datas,', '', $current_order['side']);
                         str_replace('submitdiv,', 'submitdiv,wpshop_product_important_datas,', $current_order['side']);
                         $do_changes = true;
                     }
                     if (true === $do_changes) {
                         $wpdb->update($wpdb->usermeta, array('meta_value' => serialize($current_order)), array('umeta_id' => $customer_metabox_order->umeta_id));
                     }
                 }
             } else {
                 $users = get_users(array('role' => 'administrator'));
                 if (!empty($users)) {
                     foreach ($users as $user) {
                         $user_meta = array('side' => 'submitdiv,formatdiv,wpshop_product_important_datas,wpshop_product_categorydiv,pageparentdiv,wps_barcode_product,wpshop_product_actions,wpshop_product_options,postimagediv', 'normal' => 'wpshop_product_fixed_tab,postexcerpt,trackbacksdiv,postcustom,commentstatusdiv,slugdiv,authordiv,wpshop_wpshop_variations,wps_media_manager,wpshop_product_order_historic', 'advanced' => '');
                         update_user_meta($user->ID, 'meta-box-order_wpshop_product', $user_meta);
                     }
                 }
             }
             /*	Update the product prices into database	*/
             $query = $wpdb->prepare("\nSELECT\n(SELECT id FROM " . WPSHOP_DBT_ATTRIBUTE . " WHERE code = %s) AS product_price,\n(SELECT id FROM " . WPSHOP_DBT_ATTRIBUTE . " WHERE code = %s) AS price_ht,\n(SELECT id FROM " . WPSHOP_DBT_ATTRIBUTE . " WHERE code = %s) AS tx_tva,\n(SELECT id FROM " . WPSHOP_DBT_ATTRIBUTE . " WHERE code = %s) AS tva", 'product_price', 'price_ht', 'tx_tva', 'tva');
             $product_prices = $wpdb->get_row($query);
             $tax_id = $wpdb->get_var($wpdb->prepare("SELECT ATT_OPT.id FROM " . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . " AS ATT_OPT WHERE attribute_id = %d AND value = '20'", $product_prices->tx_tva));
             $query = $wpdb->prepare("SELECT * FROM " . WPSHOP_DBT_ATTRIBUTE_VALUES_DECIMAL . " WHERE attribute_id = %d", $product_prices->product_price);
             $price_list = $wpdb->get_results($query);
             foreach ($price_list as $existing_ttc_price) {
                 $tax_rate = 1.2;
                 $price_ht = $existing_ttc_price->value / $tax_rate;
                 $tax_amount = $existing_ttc_price->value - $price_ht;
                 $wpdb->replace(WPSHOP_DBT_ATTRIBUTE_VALUES_DECIMAL, array('entity_type_id' => $existing_ttc_price->entity_type_id, 'attribute_id' => $product_prices->price_ht, 'entity_id' => $existing_ttc_price->entity_id, 'unit_id' => $existing_ttc_price->unit_id, 'user_id' => $existing_ttc_price->user_id, 'language' => $existing_ttc_price->language, 'value' => $price_ht, 'creation_date_value' => current_time('mysql', 0)));
                 $wpdb->replace(WPSHOP_DBT_ATTRIBUTE_VALUES_INTEGER, array('entity_type_id' => $existing_ttc_price->entity_type_id, 'attribute_id' => $product_prices->tx_tva, 'entity_id' => $existing_ttc_price->entity_id, 'unit_id' => $existing_ttc_price->unit_id, 'user_id' => $existing_ttc_price->user_id, 'language' => $existing_ttc_price->language, 'value' => $tax_id, 'creation_date_value' => current_time('mysql', 0)));
                 $wpdb->replace(WPSHOP_DBT_ATTRIBUTE_VALUES_DECIMAL, array('entity_type_id' => $existing_ttc_price->entity_type_id, 'attribute_id' => $product_prices->tva, 'entity_id' => $existing_ttc_price->entity_id, 'unit_id' => $existing_ttc_price->unit_id, 'user_id' => $existing_ttc_price->user_id, 'language' => $existing_ttc_price->language, 'value' => $tax_amount, 'creation_date_value' => current_time('mysql', 0)));
             }
             /*	Update orders structure into database	*/
             $orders_id = $wpdb->get_results('SELECT ID FROM ' . $wpdb->posts . ' WHERE post_type = "' . WPSHOP_NEWTYPE_IDENTIFIER_ORDER . '"');
             foreach ($orders_id as $o) {
                 $myorder = get_post_meta($o->ID, '_order_postmeta', true);
                 $neworder = array();
                 $items = array();
                 if (!isset($myorder['order_tva'])) {
                     $order_total_ht = 0;
                     $order_total_ttc = 0;
                     $order_tva = array('20' => 0);
                     foreach ($myorder['order_items'] as $item) {
                         /* item */
                         $pu_ht = $item['cost'] / 1.2;
                         $pu_tva = $item['cost'] - $pu_ht;
                         $total_ht = $pu_ht * $item['qty'];
                         $tva_total_amount = $pu_tva * $item['qty'];
                         $total_ttc = $item['cost'] * $item['qty'];
                         /* item */
                         $order_total_ht += $total_ht;
                         $order_total_ttc += $total_ttc;
                         $order_tva['20'] += $tva_total_amount;
                         $items[] = array('item_id' => $item['id'], 'item_ref' => 'Nc', 'item_name' => $item['name'], 'item_qty' => $item['qty'], 'item_pu_ht' => number_format($pu_ht, 2, '.', ''), 'item_pu_ttc' => number_format($item['cost'], 2, '.', ''), 'item_ecotaxe_ht' => number_format(0, 2, '.', ''), 'item_ecotaxe_tva' => 20, 'item_ecotaxe_ttc' => number_format(0, 2, '.', ''), 'item_discount_type' => 0, 'item_discount_value' => 0, 'item_discount_amount' => number_format(0, 2, '.', ''), 'item_tva_rate' => 20, 'item_tva_amount' => number_format($pu_tva, 2, '.', ''), 'item_total_ht' => number_format($total_ht, 2, '.', ''), 'item_tva_total_amount' => number_format($tva_total_amount, 2, '.', ''), 'item_total_ttc' => number_format($total_ttc, 2, '.', ''));
                     }
                     $neworder = array('order_key' => $myorder['order_key'], 'customer_id' => $myorder['customer_id'], 'order_status' => $myorder['order_status'], 'order_date' => $myorder['order_date'], 'order_payment_date' => $myorder['order_payment_date'], 'order_shipping_date' => $myorder['order_shipping_date'], 'payment_method' => $myorder['payment_method'], 'order_invoice_ref' => '', 'order_currency' => $myorder['order_currency'], 'order_total_ht' => $order_total_ht, 'order_total_ttc' => $order_total_ttc, 'order_grand_total' => $order_total_ttc, 'order_shipping_cost' => number_format(0, 2, '.', ''), 'order_tva' => array_map(array('wpshop_tools', 'number_format_hack'), $order_tva), 'order_items' => $items);
                     /* Update the order postmeta */
                     update_post_meta($o->ID, '_order_postmeta', $neworder);
                 }
             }
             self::wpshop_insert_default_pages($wpshop_shop_type);
             wp_cache_flush();
             return true;
             break;
         case 12:
             $query = "SELECT ID FROM " . $wpdb->users;
             $user_list = $wpdb->get_results($query);
             foreach ($user_list as $user) {
                 $user_first_name = get_user_meta($user->ID, 'first_name', true);
                 $user_last_name = get_user_meta($user->ID, 'last_name', true);
                 $shipping_info = get_user_meta($user->ID, 'shipping_info', true);
                 if ($user_first_name == '' && !empty($shipping_info['first_name'])) {
                     update_user_meta($user->ID, 'first_name', $shipping_info['first_name']);
                 }
                 if ($user_last_name == '' && !empty($shipping_info['last_name'])) {
                     update_user_meta($user->ID, 'last_name', $shipping_info['last_name']);
                 }
             }
             /*	Update orders structure into database	*/
             $orders_id = $wpdb->get_results('SELECT ID FROM ' . $wpdb->posts . ' WHERE post_type = "' . WPSHOP_NEWTYPE_IDENTIFIER_ORDER . '"');
             foreach ($orders_id as $o) {
                 $myorder = get_post_meta($o->ID, '_order_postmeta', true);
                 if (!empty($myorder)) {
                     $new_items = array();
                     foreach ($myorder['order_items'] as $item) {
                         $new_items = $item;
                         $new_items['item_discount_type'] = !empty($item['item_discount_rate']) ? $item['item_discount_rate'] : 'amount';
                         // unset($new_items['item_discount_rate']);
                         $new_items['item_discount_value'] = 0;
                     }
                     $myorder['order_items'] = $new_items;
                     /* Update the order postmeta */
                     update_post_meta($o->ID, '_order_postmeta', $myorder);
                 }
             }
             /*	Delete useless database table	*/
             $query = "DROP TABLE " . WPSHOP_DBT_CART;
             $wpdb->query($query);
             $query = "DROP TABLE " . WPSHOP_DBT_CART_CONTENTS;
             $wpdb->query($query);
             return true;
             break;
         case 13:
             $attribute_used_for_sort_by = wpshop_attributes::getElement('yes', "'valid', 'moderated', 'notused'", 'is_used_for_sort_by', true);
             foreach ($attribute_used_for_sort_by as $attribute) {
                 $data = query_posts(array('posts_per_page' => -1, 'post_type' => WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT));
                 foreach ($data as $post) {
                     $postmeta = get_post_meta($post->ID, '_wpshop_product_metadata', true);
                     if (!empty($postmeta[$attribute->code])) {
                         update_post_meta($post->ID, '_' . $attribute->code, $postmeta[$attribute->code]);
                     }
                 }
                 wp_reset_query();
             }
             return true;
             break;
         case 17:
             $products = query_posts(array('post_type' => WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT));
             $query = $wpdb->prepare("SELECT id FROM " . WPSHOP_DBT_ATTRIBUTE_SET . " WHERE default_set = %s", 'yes');
             $default_attribute_set = $wpdb->get_var($query);
             foreach ($products as $product) {
                 $p_att_set_id = get_post_meta($product->ID, WPSHOP_PRODUCT_ATTRIBUTE_SET_ID_META_KEY, true);
                 if (empty($p_att_set_id)) {
                     /*	Update the attribute set id for the current product	*/
                     update_post_meta($product->ID, WPSHOP_PRODUCT_ATTRIBUTE_SET_ID_META_KEY, $default_attribute_set);
                 }
                 wp_reset_query();
             }
             self::wpshop_insert_default_pages($wpshop_shop_type);
             wp_cache_flush();
             return true;
             break;
         case 18:
             self::wpshop_insert_default_pages($wpshop_shop_type);
             wp_cache_flush();
             return true;
             break;
         case 19:
             $wp_rewrite->flush_rules();
             return true;
             break;
         case 21:
             /**
              * Correction des valeurs pour l'attributs "gestion du stock" qui n'�taient pas cr�es automatiquement
              */
             $query = $wpdb->prepare("SELECT ATTR_OPT.id, ATTR_OPT.value, ATTR_OPT.label, ATTR_OPT.position, ATTR_OPT.attribute_id FROM " . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . " AS ATTR_OPT INNER JOIN " . WPSHOP_DBT_ATTRIBUTE . " AS ATTR ON (ATTR.id = ATTR_OPT.attribute_id) WHERE ATTR_OPT.status=%s AND ATTR.code=%s", 'valid', 'manage_stock');
             $manage_stock_option = $wpdb->get_results($query);
             if (!empty($manage_stock_option)) {
                 $no_is_present = false;
                 $attribute_id = $manage_stock_option[0]->attribute_id;
                 foreach ($manage_stock_option as $manage_definition) {
                     if (strtolower(__($manage_definition->value, 'wpshop')) == strtolower(__('no', 'wpshop'))) {
                         $no_is_present = true;
                     }
                 }
                 if (!$no_is_present) {
                     $wpdb->insert(WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS, array('status' => 'valid', 'creation_date' => current_time('mysql', 0), 'last_update_date' => current_time('mysql', 0), 'attribute_id' => $attribute_id, 'value' => 'no', 'label' => __('No', 'wpshop')));
                 }
             }
             /** Change price attribute set section order for default set */
             $price_tab = unserialize(WPSHOP_ATTRIBUTE_PRICES);
             unset($price_tab[array_search(WPSHOP_COST_OF_POSTAGE, $price_tab)]);
             $query = "SELECT GROUP_CONCAT(id) FROM " . WPSHOP_DBT_ATTRIBUTE . " WHERE code IN ('" . implode("','", $price_tab) . "')";
             $attribute_ids = $wpdb->get_var($query);
             $query = $wpdb->prepare("\nSELECT ATTR_DET.attribute_group_id\nFROM " . WPSHOP_DBT_ATTRIBUTE_DETAILS . " AS ATTR_DET\n\tINNER JOIN " . WPSHOP_DBT_ATTRIBUTE_GROUP . " AS ATTR_GROUP ON ((ATTR_GROUP.id = ATTR_DET.attribute_group_id) AND (ATTR_GROUP.code = %s))\n\tINNER JOIN " . WPSHOP_DBT_ATTRIBUTE_SET . " AS ATTR_SET ON ((ATTR_SET.id = ATTR_GROUP.attribute_set_id) AND (ATTR_SET.name = %s))\nWHERE ATTR_DET.attribute_id IN (" . $attribute_ids . ")", 'prices', __('default', 'wpshop'));
             $list = $wpdb->get_results($query);
             if (!empty($list)) {
                 $change_order = true;
                 $old_value = $list[0]->attribute_group_id;
                 unset($list[0]);
                 if (!empty($list)) {
                     foreach ($list as $data) {
                         if ($old_value != $data->attribute_group_id) {
                             $change_order = false;
                         }
                     }
                     if ($change_order) {
                         foreach ($price_tab as $price_code) {
                             $query = $wpdb->prepare("SELECT id FROM " . WPSHOP_DBT_ATTRIBUTE . " WHERE code = %s", $price_code);
                             $attribute_id = $wpdb->get_var($query);
                             switch ($price_code) {
                                 case WPSHOP_PRODUCT_PRICE_HT:
                                     $position = WPSHOP_PRODUCT_PRICE_PILOT == 'HT' ? 1 : 3;
                                     break;
                                 case WPSHOP_PRODUCT_PRICE_TAX:
                                     $position = 2;
                                     break;
                                 case WPSHOP_PRODUCT_PRICE_TTC:
                                     $position = WPSHOP_PRODUCT_PRICE_PILOT == 'HT' ? 3 : 1;
                                     break;
                                 case WPSHOP_PRODUCT_PRICE_TAX_AMOUNT:
                                     $position = 4;
                                     break;
                             }
                             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_DETAILS, array('status' => 'valid', 'last_update_date' => current_time('mysql', 0), 'position' => $position), array('attribute_group_id' => $old_value, 'attribute_id' => $attribute_id));
                         }
                     }
                 }
             }
             return true;
             break;
         case 22:
             $query = $wpdb->prepare("SELECT ID FROM " . $wpdb->posts . " WHERE post_name = %s", WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT);
             $product_entity_id = $wpdb->get_var($query);
             if (empty($product_entityd_id) || $product_entity_id <= 0 || !$product_entity_id) {
                 /*	Create the product entity into post table	*/
                 $product_entity = array('post_title' => __('Products', 'wpshop'), 'post_name' => WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT, 'post_content' => __('Define the entity allowing to manage product on your store. If you delete this entity you won\'t be able to manage your store', 'wpshop'), 'post_status' => 'publish', 'post_author' => 1, 'post_type' => WPSHOP_NEWTYPE_IDENTIFIER_ENTITIES);
                 $product_entity_id = wp_insert_post($product_entity);
             }
             /*	Update eav table with the new entity id for product	*/
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE, array('entity_id' => $product_entity_id), array('entity_id' => 1));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_SET, array('entity_id' => $product_entity_id), array('entity_id' => 1));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_DETAILS, array('entity_type_id' => $product_entity_id), array('entity_type_id' => 1));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_VALUES_DATETIME, array('entity_type_id' => $product_entity_id), array('entity_type_id' => 1));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_VALUES_DECIMAL, array('entity_type_id' => $product_entity_id), array('entity_type_id' => 1));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_VALUES_INTEGER, array('entity_type_id' => $product_entity_id), array('entity_type_id' => 1));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_VALUES_TEXT, array('entity_type_id' => $product_entity_id), array('entity_type_id' => 1));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_VALUES_VARCHAR, array('entity_type_id' => $product_entity_id), array('entity_type_id' => 1));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_VALUES_HISTO, array('entity_type_id' => $product_entity_id), array('entity_type_id' => 1));
             /*	Create an element of customer entity for each existing user	*/
             $user_list = get_users();
             foreach ($user_list as $user) {
                 wps_customer_ctr::create_entity_customer_when_user_is_created($user->ID);
             }
             return true;
             break;
         case 23:
             /*	Delete duplicate entities	*/
             $query = "SELECT ID FROM " . $wpdb->posts . " WHERE post_name LIKE '%" . WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . "%' ";
             $product_entity_list = $wpdb->get_results($query);
             if (count($product_entity_list) > 1) {
                 $i = 0;
                 foreach ($product_entity_list as $product_entity) {
                     if ($i > 0) {
                         wp_delete_post($product_entity->ID);
                     }
                 }
             }
             return true;
             break;
         case 24:
             /*	Update the link status for disabled attribute set	*/
             $query = $wpdb->prepare("SELECT id FROM " . WPSHOP_DBT_ATTRIBUTE_GROUP . " WHERE status = %s", 'deleted');
             $deleted_attribute_group = $wpdb->get_results($query);
             if (!empty($deleted_attribute_group)) {
                 foreach ($deleted_attribute_group as $group) {
                     $wpdb->update(WPSHOP_DBT_ATTRIBUTE_DETAILS, array('status' => 'deleted', 'last_update_date' => current_time('mysql', 0)), array('attribute_group_id' => $group->id));
                 }
             }
             /*	Update entities meta management	*/
             $entities = query_posts(array('post_type' => WPSHOP_NEWTYPE_IDENTIFIER_ENTITIES));
             if (!empty($entities)) {
                 foreach ($entities as $entity) {
                     $support = get_post_meta($entity->ID, '_wpshop_entity_support', true);
                     $rewrite = get_post_meta($entity->ID, '_wpshop_entity_rewrite', true);
                     update_post_meta($entity->ID, '_wpshop_entity_params', array('support' => $support, 'rewrite' => array('slug' => $rewrite)));
                 }
             }
             wp_reset_query();
             return true;
             break;
         case 25:
             /*	Get the first entities of product and customer	*/
             $query = $wpdb->prepare("SELECT ID FROM " . $wpdb->posts . " WHERE post_name=%s AND post_type=%s ORDER BY ID ASC LIMIT 1", WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT, WPSHOP_NEWTYPE_IDENTIFIER_ENTITIES);
             $product_entity_id = $wpdb->get_var($query);
             /*	Update attributes that are not linked with entities	*/
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE, array('entity_id' => $product_entity_id), array('entity_id' => 0));
             /*	Get entities that have been created a lot of time and delete them	*/
             $query = $wpdb->prepare("SELECT ID FROM " . $wpdb->posts . " WHERE (post_name LIKE '%%" . WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . "-%%' OR post_name LIKE '%%" . WPSHOP_NEWTYPE_IDENTIFIER_CUSTOMERS . "-%%') AND post_type=%s", WPSHOP_NEWTYPE_IDENTIFIER_ENTITIES);
             $entities_to_delete = $wpdb->get_results($query);
             if (!empty($entities_to_delete) && is_array($entities_to_delete)) {
                 foreach ($entities_to_delete as $entity) {
                     wp_delete_post($entity->ID, true);
                 }
             }
             /*	Get post list that are children of entities created a lot of time */
             $query = $wpdb->prepare("SELECT ID FROM " . $wpdb->posts . " WHERE post_type LIKE %s", WPSHOP_NEWTYPE_IDENTIFIER_CUSTOMERS . "-%");
             $entities_to_update = $wpdb->get_results($query);
             if (!empty($entities_to_update) && is_array($entities_to_update)) {
                 foreach ($entities_to_update as $entity) {
                     wp_update_post(array('ID' => $entity->ID, 'post_type' => WPSHOP_NEWTYPE_IDENTIFIER_CUSTOMERS));
                 }
             }
             $query = $wpdb->prepare("SELECT ID FROM " . $wpdb->posts . " WHERE post_type LIKE %s", WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . "-%");
             $entities_to_update = $wpdb->get_results($query);
             if (!empty($entities_to_update) && is_array($entities_to_update)) {
                 foreach ($entities_to_update as $entity) {
                     wp_update_post(array('ID' => $entity->ID, 'post_type' => WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT));
                 }
             }
             /*	Change addons managament	*/
             $wpshop_addons_options = get_option('wpshop_addons_state', array());
             if (!empty($wpshop_addons_options)) {
                 foreach ($wpshop_addons_options as $addon_name => $addon_state) {
                     $options_args = array();
                     $options_args[$addon_name]['activate'] = $addon_state;
                     $options_args[$addon_name]['activation_date'] = current_time('mysql', 0);
                     if (!$addon_state) {
                         $options_args[$addon_name]['deactivation_date'] = current_time('mysql', 0);
                     }
                     add_option(WPSHOP_ADDONS_OPTION_NAME, $options_args);
                 }
                 delete_option('wpshop_addons_state');
             }
             /*	Update the different entities id into attribute set details table	*/
             $query = "UPDATE " . WPSHOP_DBT_ATTRIBUTE_DETAILS . " AS ATT_DET INNER JOIN " . WPSHOP_DBT_ATTRIBUTE . " AS ATT ON (ATT.id = ATT_DET.attribute_id) SET ATT_DET.entity_type_id = ATT.entity_id";
             $wpdb->query($query);
             return true;
             break;
         case 26:
             $query = "SELECT post_id, meta_value FROM " . $wpdb->postmeta . " WHERE meta_key = '_order_postmeta' ";
             $results = $wpdb->get_results($query);
             foreach ($results as $result) {
                 $order_info = unserialize($result->meta_value);
                 update_post_meta($result->post_id, '_wpshop_order_customer_id', $order_info['customer_id']);
                 update_post_meta($result->post_id, '_wpshop_order_shipping_date', $order_info['order_shipping_date']);
                 update_post_meta($result->post_id, '_wpshop_order_status', $order_info['order_status']);
             }
             /*	Update the different entities id into attribute set details table	*/
             $query = "UPDATE " . WPSHOP_DBT_ATTRIBUTE_DETAILS . " AS ATT_DET INNER JOIN " . WPSHOP_DBT_ATTRIBUTE . " AS ATT ON (ATT.id = ATT_DET.attribute_id) SET ATT_DET.entity_type_id = ATT.entity_id";
             $wpdb->query($query);
             return true;
             break;
         case 29:
             $billing_title = __('Billing address', 'wpshop');
             $shipping_title = __('Shipping address', 'wpshop');
             //UPDATE USERS ADDRESSES
             $billing_address_set_id_query = 'SELECT id FROM ' . WPSHOP_DBT_ATTRIBUTE_SET . ' WHERE name = "' . $billing_title . '"';
             $shipping_address_set_id_query = 'SELECT id FROM ' . WPSHOP_DBT_ATTRIBUTE_SET . ' WHERE name = "' . $shipping_title . '"';
             $billing_address_set_id = $wpdb->get_var($billing_address_set_id_query);
             $shipping_address_set_id = $wpdb->get_var($shipping_address_set_id_query);
             //Add Address & Google Map API KEY options
             add_option('wpshop_billing_address', array('choice' => $billing_address_set_id), '', 'yes');
             add_option('wpshop_shipping_address_choice', array('activate' => 'on', 'choice' => $shipping_address_set_id), '', 'yes');
             add_option('wpshop_google_map_api_key', '', '', 'yes');
             $query = 'SELECT * FROM ' . $wpdb->users . '';
             $results = $wpdb->get_results($query);
             foreach ($results as $result) {
                 $billing_infos = get_user_meta($result->ID, 'billing_info', true);
                 $shipping_infos = get_user_meta($result->ID, 'shipping_info', true);
                 if (!empty($billing_infos)) {
                     //Save Billing Infos
                     $billing_address = array();
                     if (!empty($billing_infos['civility'])) {
                         switch ($billing_infos['civility']) {
                             case 1:
                                 $civility = $mister_id;
                                 break;
                             case 2:
                                 $civility = $madam_id;
                                 break;
                             case 3:
                                 $civility = $miss_id;
                                 break;
                         }
                     } else {
                         $civility = $mister_id;
                     }
                     $billing_address = array('address_title' => $billing_title, 'address_last_name' => !empty($billing_infos['last_name']) ? $billing_infos['last_name'] : '', 'address_first_name' => !empty($billing_infos['first_name']) ? $billing_infos['first_name'] : '', 'company' => !empty($billing_infos['company']) ? $billing_infos['company'] : '', 'address' => !empty($billing_infos['address']) ? $billing_infos['address'] : '', 'postcode' => !empty($billing_infos['postcode']) ? $billing_infos['postcode'] : '', 'city' => !empty($billing_infos['city']) ? $billing_infos['city'] : '', 'state' => !empty($billing_infos['state']) ? $billing_infos['state'] : '', 'country' => !empty($billing_infos['country']) ? $billing_infos['country'] : '', 'address_user_email' => !empty($billing_infos['email']) ? $billing_infos['email'] : '', 'phone' => !empty($billing_infos['phone']) ? $billing_infos['phone'] : '', 'tva_intra' => !empty($billing_infos['company_tva_intra']) ? $billing_infos['company_tva_intra'] : '', 'civility' => $civility);
                     //Create the post and post_meta for the billing address
                     $post_address = array('post_author' => $result->ID, 'post_title' => $billing_title, 'post_status' => 'publish', 'post_name' => WPSHOP_NEWTYPE_IDENTIFIER_ADDRESS, 'post_type' => WPSHOP_NEWTYPE_IDENTIFIER_ADDRESS, 'post_parent' => $result->ID);
                     $post_address_id = wp_insert_post($post_address);
                     //Create the post_meta with the address infos
                     update_post_meta($post_address_id, '_' . WPSHOP_NEWTYPE_IDENTIFIER_ADDRESS . '_metadata', $billing_address);
                     update_post_meta($post_address_id, '_' . WPSHOP_NEWTYPE_IDENTIFIER_ADDRESS . '_attribute_set_id', $billing_address_set_id);
                 }
                 if (!empty($shipping_infos)) {
                     //Save Shipping Infos
                     if (!empty($shipping_infos['civility'])) {
                         switch ($shipping_infos['civility']) {
                             case 1:
                                 $civility = $mister_id;
                                 break;
                             case 2:
                                 $civility = $madam_id;
                                 break;
                             case 3:
                                 $civility = $miss_id;
                                 break;
                         }
                     } else {
                         $civility = $mister_id;
                     }
                     $shipping_address = array();
                     $shipping_address = array('address_title' => $shipping_title, 'address_last_name' => !empty($shipping_infos['last_name']) ? $shipping_infos['last_name'] : '', 'address_first_name' => !empty($shipping_infos['first_name']) ? $shipping_infos['first_name'] : '', 'company' => !empty($shipping_infos['company']) ? $shipping_infos['company'] : '', 'address' => !empty($shipping_infos['address']) ? $shipping_infos['address'] : '', 'postcode' => !empty($shipping_infos['postcode']) ? $shipping_infos['postcode'] : '', 'city' => !empty($shipping_infos['city']) ? $shipping_infos['city'] : '', 'state' => !empty($shipping_infos['state']) ? $shipping_infos['state'] : '', 'country' => !empty($shipping_infos['country']) ? $shipping_infos['country'] : '', 'civility' => $civility);
                     //Create the post and post_meta for the billing address
                     $post_address = array('post_author' => $result->ID, 'post_title' => $shipping_title, 'post_status' => 'publish', 'post_name' => WPSHOP_NEWTYPE_IDENTIFIER_ADDRESS, 'post_type' => WPSHOP_NEWTYPE_IDENTIFIER_ADDRESS, 'post_parent' => $result->ID);
                     $post_address_id = wp_insert_post($post_address);
                     //Create the post_meta with the address infos
                     update_post_meta($post_address_id, '_' . WPSHOP_NEWTYPE_IDENTIFIER_ADDRESS . '_metadata', $shipping_address);
                     update_post_meta($post_address_id, '_' . WPSHOP_NEWTYPE_IDENTIFIER_ADDRESS . '_attribute_set_id', $shipping_address_set_id);
                 }
             }
             // FORMATE THE ORDER ADDRESSES INFOS
             $results = query_posts(array('post_type' => WPSHOP_NEWTYPE_IDENTIFIER_ORDER, 'posts_per_page' => -1));
             foreach ($results as $result) {
                 $address = get_post_meta($result->ID, '_order_info', true);
                 $billing_address = array();
                 if (!empty($address['billing'])) {
                     if (!empty($address['billing']['civility'])) {
                         switch ($address['billing']['civility']) {
                             case 1:
                                 $civility = $mister_id;
                                 break;
                             case 2:
                                 $civility = $madam_id;
                                 break;
                             case 3:
                                 $civility = $miss_id;
                                 break;
                             default:
                                 $civility = $mister_id;
                                 break;
                         }
                     } else {
                         $civility = $mister_id;
                     }
                     $billing_address = array('address_title' => $billing_title, 'address_last_name' => !empty($address['billing']['last_name']) ? $address['billing']['last_name'] : '', 'address_first_name' => !empty($address['billing']['first_name']) ? $address['billing']['first_name'] : '', 'company' => !empty($address['billing']['company']) ? $address['billing']['company'] : '', 'address' => !empty($address['billing']['address']) ? $address['billing']['address'] : '', 'postcode' => !empty($address['billing']['postcode']) ? $address['billing']['postcode'] : '', 'city' => !empty($address['billing']['city']) ? $address['billing']['city'] : '', 'state' => !empty($address['billing']['state']) ? $address['billing']['state'] : '', 'country' => !empty($address['billing']['country']) ? $address['billing']['country'] : '', 'address_user_email' => !empty($address['billing']['email']) ? $address['billing']['email'] : '', 'phone' => !empty($address['billing']['phone']) ? $address['billing']['phone'] : '', 'tva_intra' => !empty($address['billing']['company_tva_intra']) ? $address['billing']['company_tva_intra'] : '', 'civility' => $civility);
                 }
                 $shipping_address = array();
                 if (!empty($address['shipping'])) {
                     if (!empty($address['shipping']['civility'])) {
                         switch ($address['shipping']['civility']) {
                             case 1:
                                 $civility = $mister_id;
                                 break;
                             case 2:
                                 $civility = $madam_id;
                                 break;
                             case 3:
                                 $civility = $miss_id;
                                 break;
                         }
                     } else {
                         $civility = $mister_id;
                     }
                     $shipping_address = array('address_title' => $shipping_title, 'address_last_name' => !empty($address['shipping']['last_name']) ? $address['shipping']['last_name'] : '', 'address_first_name' => !empty($address['shipping']['first_name']) ? $address['shipping']['first_name'] : '', 'company' => !empty($address['shipping']['company']) ? $address['shipping']['company'] : '', 'address' => !empty($address['shipping']['address']) ? $address['shipping']['address'] : '', 'postcode' => !empty($address['shipping']['postcode']) ? $address['shipping']['postcode'] : '', 'city' => !empty($address['shipping']['city']) ? $address['shipping']['city'] : '', 'state' => !empty($address['shipping']['state']) ? $address['shipping']['state'] : '', 'country' => !empty($address['shipping']['country']) ? $address['shipping']['country'] : '', 'civility' => $civility);
                 }
                 $billing_array_content = array('id' => $billing_address_set_id, 'address' => $billing_address);
                 $shipping_array_content = array('id' => $shipping_address_set_id, 'address' => $shipping_address);
                 $array_new_format = array('billing' => $billing_array_content, 'shipping' => $shipping_array_content);
                 //Update the post meta
                 update_post_meta($result->ID, '_order_info', $array_new_format);
             }
             /*	Update entities meta management	*/
             $entities = query_posts(array('post_type' => WPSHOP_NEWTYPE_IDENTIFIER_ENTITIES, 'posts_per_page' => -1));
             if (!empty($entities)) {
                 foreach ($entities as $entity) {
                     $params = get_post_meta($entity->ID, '_wpshop_entity_params', true);
                     $support = !empty($params['support']) ? $params['support'] : '';
                     $rewrite = !empty($params['rewrite']) ? $params['rewrite'] : '';
                     $display_admin_menu = 'on';
                     update_post_meta($entity->ID, '_wpshop_entity_params', array('support' => $support, 'rewrite' => $rewrite, 'display_admin_menu' => $display_admin_menu));
                 }
             }
             wp_reset_query();
             // Default Weight unity and Currency Options
             add_option('wpshop_shop_weight_group', 3, '', 'yes');
             add_option('wpshop_shop_default_weight_unity', 6, '', 'yes');
             add_option('wpshop_shop_currency_group', 4, '', 'yes');
             $default_currency = get_option('wpshop_shop_default_currency');
             foreach (unserialize(WPSHOP_SHOP_CURRENCIES) as $k => $v) {
                 if ($default_currency == $k) {
                     $symbol = $v;
                 }
             }
             if (!empty($symbol)) {
                 $query = 'SELECT * FROM ' . WPSHOP_DBT_ATTRIBUTE_UNIT . ' WHERE name = "' . html_entity_decode($symbol, ENT_QUOTES, 'UTF-8') . '"';
                 $currency = $wpdb->get_row($query);
                 if (!empty($currency)) {
                     update_option('wpshop_shop_default_currency', $currency->id);
                     // Update the change rate of the default currency
                     $wpdb->update(WPSHOP_DBT_ATTRIBUTE_UNIT, array('change_rate' => 1), array('id' => $currency->id));
                 }
             }
             // Update the field for variation and user definition field
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE, array('is_used_for_variation' => 'yes'), array('is_user_defined' => 'yes'));
             // Update field type for frontend output selection
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE, array('frontend_input' => 'text'), array());
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE, array('frontend_input' => 'textarea'), array('backend_input' => 'textarea'));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE, array('frontend_input' => 'select'), array('backend_input' => 'multiple-select'));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE, array('frontend_input' => 'select'), array('backend_input' => 'select'));
             add_option('wpshop_cart_option', array('product_added_to_cart' => array('dialog_msg'), 'product_added_to_quotation' => array('cart_page')));
             return true;
             break;
         case '30':
             /**	Update the current price piloting field for using it into variation specific attributes	*/
             $price_piloting_attribute = constant('WPSHOP_PRODUCT_PRICE_' . WPSHOP_PRODUCT_PRICE_PILOT);
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE, array('is_used_in_variation' => 'yes', 'last_update_date' => current_time('mysql', 0)), array('code' => $price_piloting_attribute));
             /**	Update the product reference field for using it into variation specific attributes	*/
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE, array('is_used_in_variation' => 'yes', 'last_update_date' => current_time('mysql', 0)), array('code' => 'product_reference'));
             /**	Insert new message for admin when a customer make an order	*/
             $admin_new_order_message = get_option('WPSHOP_NEW_ORDER_ADMIN_MESSAGE');
             if (empty($admin_new_order_message)) {
                 wps_message_ctr::createMessage('WPSHOP_NEW_ORDER_ADMIN_MESSAGE');
             }
             /**	Update all amount for paypal orders	*/
             $query = $wpdb->prepare("SELECT post_id FROM " . $wpdb->postmeta . " WHERE meta_key = %s AND meta_value = %s ", '_wpshop_payment_method', 'paypal');
             $paypal_payment_list = $wpdb->get_results($query);
             if (!empty($paypal_payment_list)) {
                 foreach ($paypal_payment_list as $post) {
                     $order_meta = get_post_meta($post->post_id, '_order_postmeta', true);
                     $order_payment_meta = get_post_meta($post->post_id, 'wpshop_payment_return_data', true);
                     if (!empty($order_meta['order_status']) && $order_meta['order_status'] == 'incorrect_amount') {
                         if (!empty($order_meta['order_grand_total']) && !empty($order_payment_meta['mc_gross'])) {
                             $order_amount_to_pay = number_format($order_meta['order_grand_total'], 5);
                             $order_amount_payed = number_format(floatval($order_payment_meta['mc_gross']), 5);
                             if ($order_amount_payed == $order_amount_to_pay) {
                                 wpshop_payment::setOrderPaymentStatus($order_id, 'completed');
                             }
                         }
                     }
                 }
             }
             /**	Save existing orders address information	*/
             $billing_title = __('Billing address', 'wpshop');
             $shipping_title = __('Shipping address', 'wpshop');
             $results = query_posts(array('post_type' => WPSHOP_NEWTYPE_IDENTIFIER_ORDER, 'posts_per_page' => -1));
             foreach ($results as $result) {
                 $address = get_post_meta($result->ID, '_order_info', true);
                 $address_format = array();
                 $billing_address = array();
                 if (!empty($address['billing']) && empty($address['billing']['id'])) {
                     if (!empty($address['billing']['civility'])) {
                         switch ($address['billing']['civility']) {
                             case 1:
                                 $civility = $mister_id;
                                 break;
                             case 2:
                                 $civility = $madam_id;
                                 break;
                             case 3:
                                 $civility = $miss_id;
                                 break;
                             default:
                                 $civility = $mister_id;
                                 break;
                         }
                     } else {
                         $civility = $mister_id;
                     }
                     $billing_address = array('address_title' => $billing_title, 'address_last_name' => !empty($address['billing']['last_name']) ? $address['billing']['last_name'] : '', 'address_first_name' => !empty($address['billing']['first_name']) ? $address['billing']['first_name'] : '', 'company' => !empty($address['billing']['company']) ? $address['billing']['company'] : '', 'address' => !empty($address['billing']['address']) ? $address['billing']['address'] : '', 'postcode' => !empty($address['billing']['postcode']) ? $address['billing']['postcode'] : '', 'city' => !empty($address['billing']['city']) ? $address['billing']['city'] : '', 'state' => !empty($address['billing']['state']) ? $address['billing']['state'] : '', 'country' => !empty($address['billing']['country']) ? $address['billing']['country'] : '', 'address_user_email' => !empty($address['billing']['email']) ? $address['billing']['email'] : '', 'phone' => !empty($address['billing']['phone']) ? $address['billing']['phone'] : '', 'tva_intra' => !empty($address['billing']['company_tva_intra']) ? $address['billing']['company_tva_intra'] : '', 'civility' => $civility);
                     $billing_address_option = get_option('wpshop_billing_address');
                     $address_format['billing']['id'] = $billing_address_option['choice'];
                     $address_format['billing']['address'] = $shipping_address;
                 }
                 $shipping_address = array();
                 if (!empty($address['shipping']) && empty($address['shipping']['id'])) {
                     if (!empty($address['shipping']['civility'])) {
                         switch ($address['shipping']['civility']) {
                             case 1:
                                 $civility = $mister_id;
                                 break;
                             case 2:
                                 $civility = $madam_id;
                                 break;
                             case 3:
                                 $civility = $miss_id;
                                 break;
                         }
                     } else {
                         $civility = $mister_id;
                     }
                     $shipping_address = array('address_title' => $shipping_title, 'address_last_name' => !empty($address['shipping']['last_name']) ? $address['shipping']['last_name'] : '', 'address_first_name' => !empty($address['shipping']['first_name']) ? $address['shipping']['first_name'] : '', 'company' => !empty($address['shipping']['company']) ? $address['shipping']['company'] : '', 'address' => !empty($address['shipping']['address']) ? $address['shipping']['address'] : '', 'postcode' => !empty($address['shipping']['postcode']) ? $address['shipping']['postcode'] : '', 'city' => !empty($address['shipping']['city']) ? $address['shipping']['city'] : '', 'state' => !empty($address['shipping']['state']) ? $address['shipping']['state'] : '', 'country' => !empty($address['shipping']['country']) ? $address['shipping']['country'] : '', 'civility' => $civility);
                     $shipping_address_options = get_option('wpshop_shipping_address_choice');
                     $address_format['shipping']['id'] = $shipping_address_options['choice'];
                     $address_format['shipping']['address'] = $shipping_address;
                 }
                 if (!empty($address_format)) {
                     update_post_meta($result->ID, '_order_info', $address_format);
                 }
             }
             /**	Delete username from frontend form	*/
             $attribute_login = wpshop_attributes::getElement('user_login', "'valid'", 'code');
             if (!empty($attribute_login)) {
                 $wpdb->update(WPSHOP_DBT_ATTRIBUTE_DETAILS, array('status' => 'deleted', 'last_update_date' => current_time('mysql', 0), 'position' => 0), array('attribute_id' => $attribute_login->id));
             }
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_DETAILS, array('last_update_date' => current_time('mysql', 0), 'position' => 0), array('status' => 'deleted'));
             return true;
             break;
         case '31':
             /**	Change order structure in order to support several payment	*/
             $existing_orders = query_posts(array('post_type' => WPSHOP_NEWTYPE_IDENTIFIER_ORDER, 'posts_per_page' => -1, 'post_status' => array('draft', 'trash', 'publish')));
             if (!empty($existing_orders)) {
                 foreach ($existing_orders as $order_main_informations) {
                     /**	Transfer payment return data form old meta to new	*/
                     $order_payment_return_data = get_post_meta($order_main_informations->ID, 'wpshop_payment_return_data', true);
                     update_post_meta($order_main_informations->ID, '_wpshop_payment_return_data', $order_payment_return_data);
                     delete_post_meta($order_main_informations->ID, 'wpshop_payment_return_data');
                     /**	Transfer old payment storage method to new storage method	*/
                     $order_meta = get_post_meta($order_main_informations->ID, '_order_postmeta', true);
                     if (!empty($order_meta['order_status'])) {
                         $order_meta['order_payment']['customer_choice'] = array('method' => !empty($order_meta['payment_method']) ? $order_meta['payment_method'] : (!empty($order_meta['order_payment']['customer_choice']) ? $order_meta['order_payment']['customer_choice'] : ''));
                         unset($order_meta['payment_method']);
                         $order_meta['order_payment']['received'][0]['waited_amount'] = !empty($order_meta['order_grand_total']) ? $order_meta['order_grand_total'] : 0;
                         $order_meta['order_payment']['received'][0]['method'] = $order_meta['order_payment']['customer_choice']['method'];
                         $order_meta['order_payment']['received'][0]['date'] = $order_meta['order_date'];
                         $order_meta['order_payment']['received'][0]['status'] = 'waiting_payment';
                         $order_meta['order_payment']['received'][0]['comment'] = '';
                         $order_meta['order_payment']['received'][0]['author'] = $order_meta['order_payment']['customer_choice'] == 'check' ? 1 : $order_meta['customer_id'];
                         if (in_array($order_meta['order_status'], array('completed', 'shipped'))) {
                             $order_meta['order_payment']['received'][0]['received_amount'] = $order_meta['order_grand_total'];
                             $order_meta['order_payment']['received'][0]['payment_reference'] = wpshop_payment::get_payment_transaction_number_old_way($order_main_informations->ID);
                             $order_meta['order_payment']['received'][0]['date'] = $order_meta['order_payment_date'];
                             $order_meta['order_payment']['received'][0]['status'] = 'payment_received';
                             $order_meta['order_payment']['received'][0]['comment'] = '';
                             $order_meta['order_payment']['received'][0]['author'] = $order_meta['order_payment']['customer_choice'] == 'check' ? 1 : $order_meta['customer_id'];
                             $order_meta['order_payment']['received'][0]['invoice_ref'] = $order_meta['order_invoice_ref'];
                         }
                         update_post_meta($order_main_informations->ID, '_order_postmeta', $order_meta);
                         if (!empty($order_meta['order_payment']['customer_choice'])) {
                             switch ($order_meta['order_payment']['customer_choice']) {
                                 case 'check':
                                     delete_post_meta($order_main_informations->ID, '_order_check_number', get_post_meta($order_main_informations->ID, '_order_check_number', true));
                                     break;
                                 case 'paypal':
                                     delete_post_meta($order_main_informations->ID, '_order_paypal_txn_id', get_post_meta($order_main_informations->ID, '_order_paypal_txn_id', true));
                                     break;
                                 case 'cic':
                                     delete_post_meta($order_main_informations->ID, '_order_cic_txn_id', get_post_meta($order_main_informations->ID, '_order_cic_txn_id', true));
                                     break;
                             }
                         }
                     }
                 }
             }
             $wps_messages = new wps_message_ctr();
             $wps_messages->wpshop_messages_historic_correction();
             wp_reset_query();
             $default_currency = get_option('wpshop_shop_default_currency');
             foreach (unserialize(WPSHOP_SHOP_CURRENCIES) as $k => $v) {
                 if ($default_currency == $k) {
                     $symbol = $v;
                 }
             }
             if (!empty($symbol)) {
                 $query = $wpdb->prepare('SELECT * FROM ' . WPSHOP_DBT_ATTRIBUTE_UNIT . ' WHERE name = "' . html_entity_decode($symbol, ENT_QUOTES, 'UTF-8') . '"', '');
                 $currency = $wpdb->get_row($query);
                 if (!empty($currency)) {
                     update_option('wpshop_shop_default_currency', $currency->id);
                     // Update the change rate of the default currency
                     $wpdb->update(WPSHOP_DBT_ATTRIBUTE_UNIT, array('change_rate' => 1), array('id' => $currency->id));
                 }
             }
             $shipping_confirmation_message = get_option('WPSHOP_SHIPPING_CONFIRMATION_MESSAGE');
             if (!empty($shipping_confirmation_message)) {
                 $message = __('Hello [customer_first_name] [customer_last_name], this email confirms that your order ([order_key]) has just been shipped (order date : [order_date], tracking number : [order_trackingNumber]). Thank you for your loyalty. Have a good day.', 'wpshop');
                 $post = array('ID' => $shipping_confirmation_message, 'post_content' => $message);
                 wp_update_post($post);
             }
             return true;
             break;
         case '32':
             /**	Update product set id that are null 	*/
             $query = $wpdb->prepare("UPDATE " . $wpdb->postmeta . " SET meta_value = (SELECT id FROM " . WPSHOP_DBT_ATTRIBUTE_SET . " WHERE default_set = 'yes' AND entity_id = '" . wpshop_entities::get_entity_identifier_from_code(WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT) . "') WHERE meta_key = %s AND ((meta_value = '') OR (meta_value = null))", '_' . WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT . '_attribute_set_id');
             $wpdb->query($query);
             $addons_options = get_option(WPSHOP_ADDONS_OPTION_NAME);
             if (!empty($addons_options) && !empty($addons_options['WPSHOP_ADDONS_QUOTATION']) && !empty($addons_options['WPSHOP_ADDONS_QUOTATION']['activate']) && $addons_options['WPSHOP_ADDONS_QUOTATION']['activate']) {
                 $admin_new_quotation_message = get_option('WPSHOP_NEW_QUOTATION_ADMIN_MESSAGE');
                 if (empty($admin_new_quotation_message)) {
                     wps_message_ctr::createMessage('WPSHOP_NEW_QUOTATION_ADMIN_MESSAGE');
                 }
                 $admin_new_quotation_confirm_message = get_option('WPSHOP_QUOTATION_CONFIRMATION_MESSAGE');
                 if (empty($admin_new_quotation_confirm_message)) {
                     wps_message_ctr::createMessage('WPSHOP_QUOTATION_CONFIRMATION_MESSAGE');
                 }
             }
             /**	Allows the administrator to manage a little bit more the catalog rewrite parameters	*/
             $options = get_option('wpshop_catalog_product_option');
             $options['wpshop_catalog_product_slug_with_category'] = empty($options['wpshop_catalog_product_slug_with_category']) ? 'yes' : $options['wpshop_catalog_product_slug_with_category'];
             update_option('wpshop_catalog_product_option', $options);
             /**	Create a new page for unsuccessfull payment return	*/
             self::wpshop_insert_default_pages($wpshop_shop_type);
             wp_cache_flush();
             /**	Update the iso code of currencies	*/
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_UNIT, array('code_iso' => 'EUR'), array('name' => 'euro'));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_UNIT, array('code_iso' => 'USD'), array('name' => 'dollar'));
             /** Update VAT Rate*/
             $query = $wpdb->prepare('SELECT id FROM ' . WPSHOP_DBT_ATTRIBUTE . ' WHERE code = %s OR code = %s', 'tx_tva', 'eco_taxe_rate_tva');
             $attribute_ids = $wpdb->get_results($query);
             foreach ($attribute_ids as $attribute_id) {
                 $query = $wpdb->prepare('UPDATE ' . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . ' SET value = replace(value, "-", ".") WHERE attribute_id = %d', $attribute_id->id);
                 $wpdb->query($query);
             }
             return true;
             break;
         case '33':
             /** Update the user_mail for the new system of log in/register */
             $query = $wpdb->query('UPDATE ' . WPSHOP_DBT_ATTRIBUTE . ' SET is_used_in_quick_add_form = "yes" WHERE code = "user_email"');
             /** Put discount attributes in price attribute set section*/
             $query = $wpdb->prepare('SELECT id FROM ' . WPSHOP_DBT_ATTRIBUTE_GROUP . ' WHERE code = %s', 'prices');
             $prices_section_id = $wpdb->get_var($query);
             $query = $wpdb->prepare('SELECT * FROM ' . WPSHOP_DBT_ATTRIBUTE . ' WHERE code = %s OR code = %s', 'discount_rate', 'discount_amount');
             $attributes = $wpdb->get_results($query);
             if (!empty($attributes) && !empty($prices_section_id)) {
                 foreach ($attributes as $attribute) {
                     $query = $wpdb->query('UPDATE ' . WPSHOP_DBT_ATTRIBUTE_DETAILS . ' SET attribute_group_id = ' . $prices_section_id . ' WHERE attribute_id = ' . $attribute->id);
                 }
             }
             return true;
             break;
         case '34':
             $query = $wpdb->prepare('SELECT id FROM ' . WPSHOP_DBT_ATTRIBUTE_GROUP . ' WHERE code = %s', 'prices');
             $prices_section_id = $wpdb->get_var($query);
             $query = $wpdb->prepare('SELECT MAX(position) AS max_position FROM ' . WPSHOP_DBT_ATTRIBUTE_DETAILS . ' WHERE attribute_group_id = %d', $prices_section_id);
             $last_position_id = $wpdb->get_var($query);
             $query = $wpdb->prepare('SELECT * FROM ' . WPSHOP_DBT_ATTRIBUTE_DETAILS . ' WHERE  attribute_group_id = %d AND position = %d', $prices_section_id, $last_position_id);
             $attribute_example = $wpdb->get_row($query);
             $query = $wpdb->prepare('SELECT * FROM ' . WPSHOP_DBT_ATTRIBUTE . ' WHERE code = %s OR code = %s', 'special_from', 'special_to');
             $attributes = $wpdb->get_results($query);
             $i = 1;
             if (!empty($attributes) && !empty($prices_section_id)) {
                 foreach ($attributes as $attribute) {
                     $wpdb->update(WPSHOP_DBT_ATTRIBUTE_DETAILS, array('attribute_group_id' => $prices_section_id), array('attribute_id' => $attribute->id));
                     $wpdb->insert(WPSHOP_DBT_ATTRIBUTE_DETAILS, array('status' => 'valid', 'creation_date' => current_time('mysql', 0), 'entity_type_id' => $attribute_example->entity_type_id, 'attribute_set_id' => $attribute_example->attribute_set_id, 'attribute_group_id' => $prices_section_id, 'attribute_id' => $attribute->id, 'position' => $last_position_id + $i));
                     $i++;
                 }
             }
             $discount_options = get_option('wpshop_catalog_product_option');
             $status = !empty($discount_options) && !empty($discount_options['discount']) ? 'valid' : 'notused';
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE, array('frontend_label' => __('Discount from', 'wpshop'), 'status' => $status), array('code' => 'special_from'));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE, array('frontend_label' => __('Discount to', 'wpshop'), 'status' => $status), array('code' => 'special_to'));
             return true;
             break;
         case '35':
             $wpdb->update($wpdb->posts, array('post_status' => 'draft'), array('post_type' => WPSHOP_NEWTYPE_IDENTIFIER_ADDRESS));
             return true;
             break;
         case '36':
             wpshop_entities::create_cpt_attributes_from_csv_file(WPSHOP_NEWTYPE_IDENTIFIER_ADDRESS);
             @set_time_limit(900);
             /** Change the path for old categories pictures */
             @chmod(WPSHOP_UPLOAD_DIR . 'wpshop_product_category', 0755);
             $query = 'SELECT * FROM ' . $wpdb->terms;
             $terms = $wpdb->get_results($query);
             if (!empty($terms)) {
                 foreach ($terms as $term) {
                     @chmod(WPSHOP_UPLOAD_DIR . 'wpshop_product_category/' . $term->term_id, 0755);
                     /** Check if a picture exists **/
                     $term_option = get_option(WPSHOP_NEWTYPE_IDENTIFIER_CATEGORIES . '_' . $term->term_id);
                     if (!empty($term_option) && !empty($term_option['wpshop_category_picture']) && is_file(WPSHOP_UPLOAD_DIR . $term_option['wpshop_category_picture'])) {
                         $wp_upload_dir = wp_upload_dir();
                         $img_path = WPSHOP_UPLOAD_DIR . $term_option['wpshop_category_picture'];
                         $img_basename = basename($img_path);
                         $wp_filetype = wp_check_filetype($img_basename, null);
                         /** Check if there is an image with the same name, if yes we add a rand number to image's name **/
                         $rand_name = is_file($wp_upload_dir['path'] . '/' . $img_basename) ? rand() : '';
                         $img_basename = !empty($rand_name) ? $rand_name . '_' . $img_basename : $img_basename;
                         if (copy($img_path, $wp_upload_dir['path'] . '/' . $img_basename)) {
                             $attachment = array('guid' => $wp_upload_dir['url'] . '/' . $img_basename, 'post_mime_type' => $wp_filetype['type'], 'post_title' => preg_replace('/\\.[^.]+$/', '', $img_basename), 'post_content' => '', 'post_status' => 'inherit');
                             $attach_id = wp_insert_attachment($attachment, $wp_upload_dir['path'] . '/' . $img_basename);
                             /** Generate differnts sizes for this image **/
                             require_once ABSPATH . 'wp-admin/includes/image.php';
                             $attach_data = wp_generate_attachment_metadata($attach_id, $wp_upload_dir['path'] . '/' . $img_basename);
                             wp_update_attachment_metadata($attach_id, $attach_data);
                             /** Update option picture **/
                             $term_option['wpshop_category_picture'] = $attach_id;
                             update_option(WPSHOP_NEWTYPE_IDENTIFIER_CATEGORIES . '_' . $term->term_id, $term_option);
                         }
                     }
                 }
             }
             /** Change metabox Hidden Nav Menu Definition to display WPShop categories' metabox **/
             $query = $wpdb->prepare('SELECT * FROM ' . $wpdb->usermeta . ' WHERE meta_key = %s', 'metaboxhidden_nav-menus');
             $meta_keys = $wpdb->get_results($query);
             if (!empty($meta_keys) && is_array($meta_keys)) {
                 foreach ($meta_keys as $meta_key) {
                     $user_id = $meta_key->user_id;
                     $meta_value = unserialize($meta_key->meta_value);
                     if (!empty($meta_value) && is_array($meta_value)) {
                         $data_to_delete = array_search('add-wpshop_product_category', $meta_value);
                         if ($data_to_delete !== false) {
                             unset($meta_value[$data_to_delete]);
                         }
                     }
                     update_user_meta($user_id, 'metaboxhidden_nav-menus', $meta_value);
                 }
             }
             return true;
             break;
         case '37':
             @set_time_limit(900);
             /** Change the path for old categories pictures */
             @chmod(WPSHOP_UPLOAD_DIR . 'wpshop/wpshop_product_category', 0755);
             /** Read all categories folders **/
             $categories_main_dir = WPSHOP_UPLOAD_DIR . 'wpshop/wpshop_product_category';
             if (file_exists($categories_main_dir)) {
                 $main_folder_content = scandir($categories_main_dir);
                 /** For each category folder **/
                 foreach ($main_folder_content as $category_folder) {
                     if ($category_folder && substr($category_folder, 0, 1) != '.') {
                         $category_id = $category_folder;
                         @chmod(WPSHOP_UPLOAD_DIR . 'wpshop/wpshop_product_category/' . $category_id, 0755);
                         $scan_category_folder = opendir($categories_main_dir . '/' . $category_folder);
                         /** For each Picture of category **/
                         $file_time = 0;
                         $save_this_picture = false;
                         while (false !== ($fichier = readdir($scan_category_folder))) {
                             if ($fichier && substr($fichier, 0, 1) != '.') {
                                 if ($file_time < filemtime($categories_main_dir . '/' . $category_id . '/' . $fichier)) {
                                     $save_this_picture = true;
                                     $file_time = filemtime($categories_main_dir . '/' . $category_id . '/' . $fichier);
                                 }
                                 /** Select category option **/
                                 $term_option = get_option(WPSHOP_NEWTYPE_IDENTIFIER_CATEGORIES . '_' . $category_id);
                                 $wp_upload_dir = wp_upload_dir();
                                 $img_path = $categories_main_dir . '/' . $category_id . '/' . $fichier;
                                 $img_basename = basename($img_path);
                                 $wp_filetype = wp_check_filetype($img_basename, null);
                                 /** Check if there is an image with the same name, if yes we add a rand number to image's name **/
                                 $rand_name = is_file($wp_upload_dir['path'] . '/' . $img_basename) ? rand() : '';
                                 $img_basename = !empty($rand_name) ? $rand_name . '_' . $img_basename : $img_basename;
                                 if (copy($img_path, $wp_upload_dir['path'] . '/' . $img_basename)) {
                                     $attachment = array('guid' => $wp_upload_dir['url'] . '/' . $img_basename, 'post_mime_type' => $wp_filetype['type'], 'post_title' => preg_replace('/\\.[^.]+$/', '', $img_basename), 'post_content' => '', 'post_status' => 'inherit');
                                     $attach_id = wp_insert_attachment($attachment, $wp_upload_dir['path'] . '/' . $img_basename);
                                     /** Generate differnts sizes for this image **/
                                     require_once ABSPATH . 'wp-admin/includes/image.php';
                                     $attach_data = wp_generate_attachment_metadata($attach_id, $wp_upload_dir['path'] . '/' . $img_basename);
                                     wp_update_attachment_metadata($attach_id, $attach_data);
                                     /** Update option picture **/
                                     $term_option['wpshop_category_picture'] = $attach_id;
                                     if ($save_this_picture) {
                                         update_option(WPSHOP_NEWTYPE_IDENTIFIER_CATEGORIES . '_' . $category_id, $term_option);
                                     }
                                     $save_this_picture = false;
                                 }
                             }
                         }
                     }
                 }
             }
             return true;
             break;
         case '38':
             wps_message_ctr::createMessage('WPSHOP_QUOTATION_UPDATE_MESSAGE');
             return true;
             break;
         case '39':
             $attribute_def = wpshop_attributes::getElement('tx_tva', "'valid'", 'code');
             /** Check if the 7% VAT Rate is not already created **/
             $query = $wpdb->prepare('SELECT id FROM ' . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . ' WHERE attribute_id = %d AND value = %s', $attribute_def->id, '7');
             $exist_vat_rate = $wpdb->get_results($query);
             if (empty($exist_vat_rate)) {
                 /** Get Max Position **/
                 $query = $wpdb->prepare('SELECT MAX(position) as max_position FROM ' . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . ' WHERE attribute_id = %d', $attribute_def->id);
                 $max_position = $wpdb->get_var($query);
                 if (!empty($attribute_def) && !empty($attribute_def->id)) {
                     $wpdb->insert(WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS, array('status' => 'valid', 'creation_date' => current_time('mysql', 0), 'attribute_id' => $attribute_def->id, 'position' => (int) $max_position + 1, 'value' => '7', 'label' => '7'));
                 }
             }
             /** Filter Search optimization **/
             @set_time_limit(900);
             $query = $wpdb->prepare('SELECT term_id FROM ' . $wpdb->term_taxonomy . ' WHERE taxonomy = %s ', WPSHOP_NEWTYPE_IDENTIFIER_CATEGORIES);
             $categories = $wpdb->get_results($query);
             $cats = array();
             if (!empty($categories)) {
                 foreach ($categories as $category) {
                     $cats[] = $category->term_id;
                 }
                 $wpshop_filter_search = new wps_filter_search();
                 $wpshop_filter_search->stock_values_for_attribute($cats);
             }
             return true;
             break;
         case '40':
             /**	Store watt in puissance unit group	*/
             $query = $wpdb->prepare("SELECT id FROM " . WPSHOP_DBT_ATTRIBUTE_UNIT_GROUP . " WHERE name = %s", __('puissance', 'wpshop'));
             $puissance_unit_group_id = $wpdb->get_var($query);
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_UNIT, array('group_id' => $puissance_unit_group_id), array('unit' => 'watt'));
             /**	Store day/week/year in duration unit group	*/
             $query = $wpdb->prepare("SELECT id FROM " . WPSHOP_DBT_ATTRIBUTE_UNIT_GROUP . " WHERE name = %s", __('duration', 'wpshop'));
             $duration_unit_group_id = $wpdb->get_var($query);
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_UNIT, array('group_id' => $duration_unit_group_id), array('unit' => 'day'));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_UNIT, array('group_id' => $duration_unit_group_id), array('unit' => 'week'));
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_UNIT, array('group_id' => $duration_unit_group_id), array('unit' => 'year'));
             /**	Store day/week/year in duration unit group	*/
             $query = $wpdb->prepare("SELECT id FROM " . WPSHOP_DBT_ATTRIBUTE_UNIT_GROUP . " WHERE name = %s", __('length', 'wpshop'));
             $length_unit_group_id = $wpdb->get_var($query);
             $wpdb->update(WPSHOP_DBT_ATTRIBUTE_UNIT, array('group_id' => $length_unit_group_id), array('unit' => 'cm'));
             return true;
             break;
         case '41':
             /**	Get distinct attribute set and delete doublons	*/
             $query = "SELECT DISTINCT( name ) AS name, MIN( id ) as min_id FROM " . WPSHOP_DBT_ATTRIBUTE_SET . " GROUP BY name HAVING COUNT(id) > 1";
             $list_of_set = $wpdb->get_results($query);
             foreach ($list_of_set as $set_infos) {
                 $query = $wpdb->prepare("DELETE FROM " . WPSHOP_DBT_ATTRIBUTE_SET . " WHERE name = %s AND id != %d", $set_infos->name, $set_infos->min_id);
                 $wpdb->query($query);
             }
             $wpdb->query("OPTIMIZE TABLE " . WPSHOP_DBT_ATTRIBUTE_SET);
             /**	Get and delete attribute set section	*/
             $query = "DELETE FROM " . WPSHOP_DBT_ATTRIBUTE_GROUP . " WHERE attribute_set_id NOT IN ( SELECT DISTINCT(id) FROM " . WPSHOP_DBT_ATTRIBUTE_SET . " )";
             $wpdb->query($query);
             $wpdb->query("OPTIMIZE TABLE " . WPSHOP_DBT_ATTRIBUTE_GROUP);
             /**	Get and delete attribute set details	*/
             $query = "DELETE FROM " . WPSHOP_DBT_ATTRIBUTE_DETAILS . " WHERE attribute_set_id NOT IN ( SELECT DISTINCT(id) FROM " . WPSHOP_DBT_ATTRIBUTE_SET . " ) OR attribute_group_id NOT IN ( SELECT DISTINCT(id) FROM " . WPSHOP_DBT_ATTRIBUTE_GROUP . " )";
             $wpdb->query($query);
             $wpdb->query("OPTIMIZE TABLE " . WPSHOP_DBT_ATTRIBUTE_DETAILS);
             $query = "SELECT attribute_set_id, attribute_group_id, attribute_id, MIN(id) as min_id FROM " . WPSHOP_DBT_ATTRIBUTE_DETAILS . " GROUP BY attribute_set_id, attribute_group_id, attribute_id HAVING COUNT(id) > 1";
             $affectation_list = $wpdb->get_results($query);
             foreach ($affectation_list as $affectation_to_treat) {
                 $query = $wpdb->prepare("DELETE FROM " . WPSHOP_DBT_ATTRIBUTE_DETAILS . " WHERE attribute_set_id = %d AND attribute_group_id = %d AND attribute_id = %d AND id != %d", $affectation_to_treat->attribute_set_id, $affectation_to_treat->attribute_group_id, $affectation_to_treat->attribute_id, $affectation_to_treat->min_id);
                 $wpdb->query($query);
             }
             $wpdb->query("OPTIMIZE TABLE " . WPSHOP_DBT_ATTRIBUTE_DETAILS);
             /**	Get and delete double unit	*/
             $query = "SELECT DISTINCT( unit ) AS unit, MIN( id ) as min_id FROM " . WPSHOP_DBT_ATTRIBUTE_UNIT . " GROUP BY unit HAVING COUNT(id) > 1";
             $list_of_set = $wpdb->get_results($query);
             foreach ($list_of_set as $set_infos) {
                 $query = $wpdb->prepare("DELETE FROM " . WPSHOP_DBT_ATTRIBUTE_UNIT . " WHERE unit = %s AND id != %d", $set_infos->unit, $set_infos->min_id);
                 $wpdb->query($query);
             }
             $wpdb->query("OPTIMIZE TABLE " . WPSHOP_DBT_ATTRIBUTE_UNIT);
             $query = "SELECT DISTINCT( name ) AS name, MIN( id ) as min_id FROM " . WPSHOP_DBT_ATTRIBUTE_UNIT_GROUP . " GROUP BY name HAVING COUNT(id) > 1";
             $list_of_set = $wpdb->get_results($query);
             foreach ($list_of_set as $set_infos) {
                 $query = $wpdb->prepare("DELETE FROM " . WPSHOP_DBT_ATTRIBUTE_UNIT_GROUP . " WHERE name = %s AND id != %d", $set_infos->name, $set_infos->min_id);
                 $wpdb->query($query);
             }
             $wpdb->query("OPTIMIZE TABLE " . WPSHOP_DBT_ATTRIBUTE_UNIT_GROUP);
             /**	Get and delete attribute set details	*/
             $query = "DELETE FROM " . WPSHOP_DBT_ATTRIBUTE_DETAILS . " WHERE attribute_set_id NOT IN ( SELECT DISTINCT(id) FROM " . WPSHOP_DBT_ATTRIBUTE_SET . " ) OR attribute_group_id NOT IN ( SELECT DISTINCT(id) FROM " . WPSHOP_DBT_ATTRIBUTE_GROUP . " )";
             $wpdb->query($query);
             $query = "SELECT GROUP_CONCAT( id ) AS list_id, MIN( id ) as min_id FROM " . WPSHOP_DBT_ATTRIBUTE_DETAILS . " GROUP BY attribute_set_id, attribute_group_id, attribute_id HAVING COUNT(id) > 1";
             $affectation_list = $wpdb->get_results($query);
             foreach ($affectation_list as $list) {
                 $query = $wpdb->prepare("DELETE FROM " . WPSHOP_DBT_ATTRIBUTE_DETAILS . " WHERE id IN (" . (substr($list->list_id, -1) == ',' ? substr($list->list_id, 0, -1) : $list->list_id) . ") AND id != %d", $list->min_id, '');
                 $wpdb->query($query);
             }
             $wpdb->query("OPTIMIZE TABLE " . WPSHOP_DBT_ATTRIBUTE_DETAILS);
             return true;
             break;
         case '42':
             $available_downloadable_product = get_option('WPSHOP_DOWNLOADABLE_FILE_IS_AVAILABLE');
             if (empty($available_downloadable_product)) {
                 wps_message_ctr::createMessage('WPSHOP_DOWNLOADABLE_FILE_IS_AVAILABLE');
             }
             return true;
             break;
         case '43':
             $available_downloadable_product = get_option('WPSHOP_ORDER_IS_CANCELED');
             if (empty($available_downloadable_product)) {
                 wps_message_ctr::createMessage('WPSHOP_ORDER_IS_CANCELED');
             }
             return true;
             break;
         case '44':
             $display_option = get_option('wpshop_display_option');
             if (!empty($display_option) && empty($display_option['latest_products_ordered'])) {
                 $display_option['latest_products_ordered'] = 3;
                 update_option('wpshop_display_option', $display_option);
             }
             /** Check messages for customization **/
             $messages = array('WPSHOP_SIGNUP_MESSAGE' => WPSHOP_SIGNUP_MESSAGE, 'WPSHOP_PAYPAL_PAYMENT_CONFIRMATION_MESSAGE' => WPSHOP_PAYPAL_PAYMENT_CONFIRMATION_MESSAGE, 'WPSHOP_OTHERS_PAYMENT_CONFIRMATION_MESSAGE' => WPSHOP_OTHERS_PAYMENT_CONFIRMATION_MESSAGE, 'WPSHOP_SHIPPING_CONFIRMATION_MESSAGE' => WPSHOP_SHIPPING_CONFIRMATION_MESSAGE, 'WPSHOP_ORDER_UPDATE_MESSAGE' => WPSHOP_ORDER_UPDATE_MESSAGE, 'WPSHOP_ORDER_UPDATE_PRIVATE_MESSAGE' => WPSHOP_ORDER_UPDATE_PRIVATE_MESSAGE, 'WPSHOP_NEW_ORDER_ADMIN_MESSAGE' => WPSHOP_NEW_ORDER_ADMIN_MESSAGE, 'WPSHOP_NEW_QUOTATION_ADMIN_MESSAGE' => WPSHOP_NEW_QUOTATION_ADMIN_MESSAGE, 'WPSHOP_QUOTATION_CONFIRMATION_MESSAGE' => WPSHOP_QUOTATION_CONFIRMATION_MESSAGE, 'WPSHOP_QUOTATION_UPDATE_MESSAGE' => WPSHOP_QUOTATION_UPDATE_MESSAGE, 'WPSHOP_DOWNLOADABLE_FILE_IS_AVAILABLE' => WPSHOP_DOWNLOADABLE_FILE_IS_AVAILABLE, 'WPSHOP_ORDER_IS_CANCELED' => WPSHOP_ORDER_IS_CANCELED);
             if (!empty($messages)) {
                 foreach ($messages as $key => $message) {
                     $message_option = get_option($key);
                     if (!empty($message_option)) {
                         $post_message = get_post($message_option);
                         $original_message = !empty($post_message) && !empty($post_message->post_content) ? $post_message->post_content : '';
                         $tags = array('<p>', '</p>');
                         if (str_replace($tags, '', $original_message) == str_replace($tags, '', __($message, 'wpshop'))) {
                             wp_update_post(array('ID' => $message_option, 'post_content' => wps_message_ctr::customize_message($original_message)));
                         }
                     }
                 }
             }
             return true;
             break;
         case '45':
             $shipping_mode_ctr = new wps_shipping_mode_ctr();
             $shipping_mode_ctr->migrate_default_shipping_mode();
             return true;
             break;
         case '46':
             wps_message_ctr::createMessage('WPSHOP_FORGOT_PASSWORD_MESSAGE');
             wps_message_ctr::customize_message(WPSHOP_FORGOT_PASSWORD_MESSAGE);
             return true;
             break;
         case '47':
             wps_payment_mode::migrate_payment_modes();
             return true;
             break;
         case '48':
             @ini_set('max_execution_time', '500');
             $count_products = wp_count_posts(WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT);
             $output_type_option = get_option('wpshop_display_option');
             $output_type = $output_type_option['wpshop_display_list_type'];
             for ($i = 0; $i <= $count_products->publish; $i += 20) {
                 $query = $wpdb->prepare('SELECT * FROM ' . $wpdb->posts . ' WHERE post_type = %s AND post_status = %s ORDER BY ID DESC LIMIT ' . $i . ', 20', WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT, 'publish');
                 $products = $wpdb->get_results($query);
                 if (!empty($products)) {
                     foreach ($products as $product) {
                         $p = wpshop_products::get_product_data($product->ID);
                         $price = wpshop_prices::get_product_price($p, 'just_price_infos', array('mini_output', $output_type));
                         update_post_meta($product->ID, '_wps_price_infos', $price);
                     }
                 }
             }
             return true;
             break;
         case '49':
             update_option('wpshop_send_invoice', true);
             return true;
             break;
         case '50':
             $price_display_option = get_option('wpshop_catalog_product_option');
             $price_display_option['price_display']['text_from'] = 'on';
             $price_display_option['price_display']['lower_price'] = 'on';
             update_option('wpshop_catalog_product_option', $price_display_option);
             self::wpshop_insert_default_pages();
             return true;
             break;
         case '51':
             /**	Insert new message for direct payment link	*/
             $direct_payment_link_message = get_option('WPSHOP_DIRECT_PAYMENT_LINK_MESSAGE');
             if (empty($direct_payment_link_message)) {
                 wps_message_ctr::createMessage('WPSHOP_DIRECT_PAYMENT_LINK_MESSAGE');
             }
             return true;
             break;
         case '52':
             $account_page_option = get_option('wpshop_myaccount_page_id');
             if (!empty($account_page_option)) {
                 $page_account = get_post($account_page_option);
                 $page_content = !empty($page_account) && !empty($page_account->post_content) ? str_replace('[wpshop_myaccount]', '[wps_account_dashboard]', $page_account->post_content) : '[wps_account_dashboard]';
                 wp_update_post(array('ID' => $account_page_option, 'post_content' => $page_content));
             }
             return true;
             break;
         case '53':
             $payment_modes_option = get_option('wps_payment_mode');
             if (!empty($payment_modes_option) && !empty($payment_modes_option['mode'])) {
                 $payment_modes_option['mode']['cash_on_delivery'] = array('name' => __('Cash on delivery', 'wpshop'), 'logo' => WPSHOP_TEMPLATES_URL . 'wpshop/cheque.png', 'description' => __('Pay your order on delivery', 'wpshop'));
                 update_option('wps_payment_mode', $payment_modes_option);
             }
             // Mass action on products to add a flag on variation definition
             $products = get_posts(array('posts_per_page' => -1, 'post_type' => WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT));
             if (!empty($products)) {
                 foreach ($products as $p) {
                     $post_id = $p->ID;
                     $check_product_have_variations = wpshop_products::get_variation($post_id);
                     if (!empty($check_product_have_variations)) {
                         $variation_flag = wpshop_products::check_variation_type($post_id);
                         $variation_defining = get_post_meta($post_id, '_wpshop_variation_defining', true);
                         $variation_defining['variation_type'] = $variation_flag;
                         update_post_meta($post_id, '_wpshop_variation_defining', $variation_defining);
                     }
                 }
             }
             return true;
             break;
         case '54':
             // Change shortcode of sign up page
             $signup_page_id = get_option('wpshop_signup_page_id');
             if (!empty($signup_page_id)) {
                 $signup_page = get_post($signup_page_id);
                 $signup_page_content = !empty($signup_page) && !empty($signup_page->post_content) ? str_replace('[wpshop_signup]', '[wps_account_dashboard]', $signup_page->post_content) : '[wps_account_dashboard]';
                 wp_update_post(array('ID' => $signup_page_id, 'post_content' => $signup_page_content));
             }
             // Change Terms of sale default content
             $terms_page_id = get_option('wpshop_terms_of_sale_page_id');
             if (!empty($terms_page_id)) {
                 $terms_sale_page = get_post($terms_page_id);
                 if (!empty($terms_sale_page) && !empty($terms_sale_page->post_content) && $terms_sale_page->post_content == '[wpshop_terms_of_sale]') {
                     $data = '<h1>' . __('Your terms of sale', 'wpshop') . '</h1>';
                     $data .= '<h3>' . __('Rule', 'wpshop') . ' 1</h3>';
                     $data .= '<p>Ut enim quisque sibi plurimum confidit et ut quisque maxime virtute et sapientia sic munitus est, ut nullo egeat suaque omnia in se ipso posita iudicet, ita in amicitiis expetendis colendisque maxime excellit.</p>';
                     $data .= '<h3>' . __('Rule', 'wpshop') . ' 2</h3>';
                     $data .= '<p>Ut enim quisque sibi plurimum confidit et ut quisque maxime virtute et sapientia sic munitus est, ut nullo egeat suaque omnia in se ipso posita iudicet, ita in amicitiis expetendis colendisque maxime excellit.</p>';
                     $data .= '<h3>' . __('Rule', 'wpshop') . ' 3</h3>';
                     $data .= '<p>Ut enim quisque sibi plurimum confidit et ut quisque maxime virtute et sapientia sic munitus est, ut nullo egeat suaque omnia in se ipso posita iudicet, ita in amicitiis expetendis colendisque maxime excellit.</p>';
                     $data .= '<h3>' . __('Credits', 'wpshop') . '</h3>';
                     $data .= sprintf(__('%s uses <a href="http://www.wpshop.fr/" target="_blank" title="%s uses WPShop e-commerce plug-in for Wordpress">WPShop e-commerce for Wordpress</a>', 'wpshop'), get_bloginfo('name'), get_bloginfo('name'));
                     wp_update_post(array('ID' => $terms_page_id, 'post_content' => $data));
                 }
             }
             return true;
             break;
         case '55':
             $checkout_page_id = get_option('wpshop_checkout_page_id');
             $checkout_page = get_post($checkout_page_id);
             $checkout_page_content = !empty($checkout_page) && !empty($checkout_page->post_content) ? str_replace('[wpshop_checkout]', '[wps_checkout]', $checkout_page->post_content) : '[wps_checkout]';
             wp_update_post(array('ID' => $checkout_page_id, 'post_content' => $checkout_page_content));
             // Update cart page id
             update_option('wpshop_cart_page_id', $checkout_page_id);
             return true;
             break;
         case '56':
             $wps_entities = new wpshop_entities();
             $customer_entity_id = $wps_entities->get_entity_identifier_from_code(WPSHOP_NEWTYPE_IDENTIFIER_CUSTOMERS);
             $query = $wpdb->prepare('SELECT * FROM ' . WPSHOP_DBT_ATTRIBUTE_SET . ' WHERE entity_id = %d ORDER BY id LIMIT 1', $customer_entity_id);
             $set = $wpdb->get_row($query);
             if (!empty($set)) {
                 $wpdb->update(WPSHOP_DBT_ATTRIBUTE_SET, array('default_set' => 'yes'), array('id' => $set->id));
             }
             // Update Opinions activation option
             update_option('wps_opinion', array('active' => 'on'));
             return true;
             break;
         case '57':
             $wpshop_cart_option = get_option('wpshop_cart_option');
             $wpshop_cart_option['display_newsletter']['site_subscription'][] = 'yes';
             $wpshop_cart_option['display_newsletter']['partner_subscription'][] = 'yes';
             update_option('wpshop_cart_option', $wpshop_cart_option);
             return true;
             break;
         case '58':
             /** Turn customers publish into draft **/
             $query = $wpdb->prepare("UPDATE {$wpdb->posts} SET post_status = %s WHERE post_type = %s", "draft", WPSHOP_NEWTYPE_IDENTIFIER_CUSTOMERS);
             $wpdb->query($query);
             $attribute_def = wpshop_attributes::getElement('tx_tva', "'valid'", 'code');
             /** Check if the 0% VAT Rate is not already created **/
             $query = $wpdb->prepare('SELECT id FROM ' . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . ' WHERE attribute_id = %d AND value = %s', $attribute_def->id, '0');
             $exist_vat_rate = $wpdb->get_results($query);
             if (empty($exist_vat_rate)) {
                 /** Get Max Position **/
                 $query = $wpdb->prepare('SELECT MAX(position) as max_position FROM ' . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . ' WHERE attribute_id = %d', $attribute_def->id);
                 $max_position = $wpdb->get_var($query);
                 if (!empty($attribute_def) && !empty($attribute_def->id)) {
                     $wpdb->insert(WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS, array('status' => 'valid', 'creation_date' => current_time('mysql', 0), 'attribute_id' => $attribute_def->id, 'position' => (int) $max_position + 1, 'value' => '0', 'label' => '0'));
                 }
             }
             return true;
             break;
         case '59':
             /** Move old images gallery to the new gallery, and remove old links **/
             $allowed = get_allowed_mime_types();
             $args = array('posts_per_page' => -1, 'post_type' => WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT, 'post_status' => array('publish', 'draft', 'trash'));
             $posts = get_posts($args);
             $result = array();
             foreach ($posts as $post) {
                 $array = array();
                 $array['Post'] = $post;
                 $array['PrincipalThumbnailID'] = get_post_meta($post->ID, '_thumbnail_id', true);
                 $array['Attachments'] = get_attached_media($allowed, $post->ID);
                 $array['TrueAttachmentsString'] = get_post_meta($post->ID, '_wps_product_media', true);
                 if (!empty($array['TrueAttachmentsString'])) {
                     $TrueAttachments_id = explode(',', $array['TrueAttachmentsString']);
                 }
                 $array['OldAttachmentsString'] = '';
                 foreach ($array['Attachments'] as $attachment) {
                     $filename = basename(get_attached_file($attachment->ID));
                     $pos_ext = strrpos($filename, '.');
                     $filename_no_ext = substr($filename, 0, $pos_ext);
                     if ((empty($TrueAttachments_id) || !in_array($attachment->ID, $TrueAttachments_id)) && !preg_match('#' . $filename_no_ext . '#', $post->post_content) && (empty($array['PrincipalThumbnailID']) || $attachment->ID != $array['PrincipalThumbnailID'])) {
                         $array['OldAttachmentsString'] .= $attachment->ID . ',';
                     }
                 }
                 unset($TrueAttachments_id);
                 $result[$post->ID] = $array['TrueAttachmentsString'] . $array['OldAttachmentsString'];
                 update_post_meta($post->ID, '_wps_product_media', $result[$post->ID]);
             }
             return true;
             break;
         case '60':
             /* Create default emails */
             wps_message_ctr::create_default_message();
             /** Update entries for quick add */
             $query = $wpdb->query('UPDATE ' . WPSHOP_DBT_ATTRIBUTE . ' SET is_required = "yes", is_used_in_quick_add_form = "yes" WHERE code = "barcode"');
             $query = $wpdb->query('UPDATE ' . WPSHOP_DBT_ATTRIBUTE . ' SET is_used_in_quick_add_form = "yes" WHERE code = "product_stock"');
             $query = $wpdb->query('UPDATE ' . WPSHOP_DBT_ATTRIBUTE . ' SET is_used_in_quick_add_form = "yes" WHERE code = "manage_stock"');
             switch (WPSHOP_PRODUCT_PRICE_PILOT) {
                 case 'HT':
                     $query = $wpdb->query('UPDATE ' . WPSHOP_DBT_ATTRIBUTE . ' SET is_used_in_quick_add_form = "yes", is_used_in_variation = "yes" WHERE code = "price_ht"');
                     $query = $wpdb->query('UPDATE ' . WPSHOP_DBT_ATTRIBUTE . ' SET is_used_in_quick_add_form = "no" WHERE code = "tx_tva"');
                     $query = $wpdb->query('UPDATE ' . WPSHOP_DBT_ATTRIBUTE . ' SET is_used_in_quick_add_form = "no", is_used_in_variation = "no" WHERE code = "product_price"');
                     break;
                 default:
                     $query = $wpdb->query('UPDATE ' . WPSHOP_DBT_ATTRIBUTE . ' SET is_used_in_quick_add_form = "yes", is_used_in_variation = "yes" WHERE code = "product_price"');
                     $query = $wpdb->query('UPDATE ' . WPSHOP_DBT_ATTRIBUTE . ' SET is_used_in_quick_add_form = "yes" WHERE code = "tx_tva"');
                     $query = $wpdb->query('UPDATE ' . WPSHOP_DBT_ATTRIBUTE . ' SET is_used_in_quick_add_form = "no", is_used_in_variation = "no" WHERE code = "price_ht"');
                     break;
             }
             /* Default country with WP language */
             $wpshop_country_default_choice_option = get_option('wpshop_country_default_choice');
             if (empty($wpshop_country_default_choice_option)) {
                 update_option('wpshop_country_default_choice', substr(get_bloginfo('language'), 3));
             }
             return true;
             break;
         case '61':
             /** Import the xml for guided tour */
             wpsBubble_ctr::import_xml();
             /* Hide admin bar */
             $wpshop_display_option = get_option('wpshop_display_option');
             if (!empty($wpshop_display_option) && empty($wpshop_display_option['wpshop_hide_admin_bar'])) {
                 $wpshop_display_option['wpshop_hide_admin_bar'] = 'on';
                 update_option('wpshop_display_option', $wpshop_display_option);
             }
             return true;
             break;
         case '62':
             /** Install user default for POS */
             wps_pos_addon::action_to_do_on_activation();
             return true;
             break;
         case '63':
             $data = get_option('wps_shipping_mode');
             if (empty($data['modes']['default_shipping_mode_for_pos'])) {
                 $data['modes']['default_shipping_mode_for_pos']['name'] = __('No Delivery', 'wpshop');
                 $data['modes']['default_shipping_mode_for_pos']['explanation'] = __('Delivery method for point of sale.', 'wpshop');
                 update_option('wps_shipping_mode', $data);
             }
             return true;
             break;
         case '64':
             $options = get_option('wpshop_catalog_product_option');
             if (!empty($options['wpshop_catalog_product_slug_with_category'])) {
                 unset($options['wpshop_catalog_product_slug_with_category']);
                 update_option('wpshop_catalog_product_option', $options);
             }
             return true;
             break;
             /*	Always add specific case before this bloc	*/
         /*	Always add specific case before this bloc	*/
         case 'dev':
             wp_cache_flush();
             // Newsletters options
             $wp_rewrite->flush_rules();
             return true;
             break;
         default:
             return true;
             break;
     }
 }
 /**
  * Display low stoclk alert message
  * @param string $args
  * @return string
  */
 function display_alert_stock_message($args)
 {
     $message = '';
     $post_ID = !empty($args) && !empty($args['id']) ? $args['id'] : '';
     $low_stock_alert_option = get_option('wpshop_low_stock_alert_options');
     if (!empty($low_stock_alert_option) && !empty($low_stock_alert_option['active']) && !empty($post_ID)) {
         $product = wpshop_products::get_product_data($post_ID);
         $product_stock = $product['product_stock'];
         $manage_product_stock = !empty($product['manage_stock']) && strtolower(__($product['manage_stock'], 'wpshop')) == strtolower(__('Yes', 'wpshop')) ? true : false;
         if ($product_stock > 0 && (empty($low_stock_alert_option['based_on_stock']) || ('no' == $low_stock_alert_option['based_on_stock'] || 'yes' == $low_stock_alert_option['based_on_stock'] && $low_stock_alert_option['alert_limit'] >= $product_stock))) {
             ob_start();
             require wpshop_tools::get_template_part(WPS_MARKETING_TOOLS_DIR, $this->template_dir, "frontend", "wps_low_stock_alert_message");
             $message .= ob_get_contents();
             ob_end_clean();
         }
     }
     return $message;
 }
示例#24
0
function ajax_wpshop_restart_the_order()
{
    global $wpshop_cart, $wpdb;
    $status = $add_to_cart_checking = $manage_stock_checking_bool = false;
    $add_to_cart_checking_message = '';
    $result = __('Error, you cannot restart this order', 'wpshop');
    $order_id = !empty($_POST['order_id']) ? wpshop_tools::varSanitizer($_POST['order_id']) : null;
    $is_make_order_again = !empty($_POST['make_order_again']) ? wpshop_tools::varSanitizer($_POST['make_order_again']) : null;
    if (!empty($order_id)) {
        $order_meta = get_post_meta($order_id, '_order_postmeta', true);
        $_SESSION['cart'] = array();
        $_SESSION['cart']['order_items'] = array();
        $wpshop_cart_type = $order_meta['cart_type'];
        if (!empty($order_meta) && !empty($order_meta['order_items'])) {
            $wpshop_cart_type = $order_meta['cart_type'];
            foreach ($order_meta['order_items'] as $item_key => $item) {
                $item_meta = get_post_meta($item['item_id'], '_wpshop_product_metadata', true);
                $stock = $item_meta['product_stock'];
                $qty = $item['item_qty'];
                $item_option = get_post_meta($item['item_id'], '_wpshop_product_options', true);
                if (!empty($item_meta['manage_stock'])) {
                    $query = $wpdb->prepare('SELECT label FROM ' . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . ' WHERE id = %d', $item_meta['manage_stock']);
                    $manage_stock_checking = $wpdb->get_var($query);
                    if (!empty($manage_stock_checking) && strtolower(__($manage_stock_checking, 'wpshop')) == strtolower(__('Yes', 'wpshop'))) {
                        $manage_stock_checking_bool = true;
                    }
                } else {
                    if (get_post_type($item['item_id']) == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION) {
                        $parent_product = wpshop_products::get_parent_variation($item['item_id']);
                        if (!empty($parent_product) && !empty($parent_product['parent_post_meta'])) {
                            $parent_metadata = $parent_product['parent_post_meta'];
                            if (!empty($parent_product['parent_post_meta']['manage_stock'])) {
                                $query = $wpdb->prepare('SELECT label FROM ' . WPSHOP_DBT_ATTRIBUTE_VALUES_OPTIONS . ' WHERE id = %d', $parent_product['parent_post_meta']['manage_stock']);
                                $manage_stock_checking = $wpdb->get_var($query);
                                if (!empty($manage_stock_checking) && strtolower(__($manage_stock_checking, 'wpshop')) == strtolower(__('Yes', 'wpshop'))) {
                                    $manage_stock_checking_bool = true;
                                    $stock = $parent_product['parent_post_meta']['product_stock'];
                                }
                            }
                        }
                    }
                }
                /** Checking stock **/
                if (empty($item_meta['manage_stock']) || !empty($item_meta['manage_stock']) && !$manage_stock_checking_bool || !empty($item_meta['manage_stock']) && $manage_stock_checking_bool && $stock >= $qty) {
                    $_SESSION['cart']['order_items'][$item_key] = $item;
                } else {
                    $add_to_cart_checking = true;
                    $add_to_cart_checking_message = __('Some products cannot be added to cart because they are out of stock', 'wpshop');
                }
            }
            $wps_cart_ctr = new wps_cart();
            $order = $wps_cart_ctr->calcul_cart_information(array());
            $order['cart_type'] = $wpshop_cart_type;
            $wps_cart_ctr->store_cart_in_session($order);
        }
        if (empty($is_make_order_again)) {
            $_SESSION['order_id'] = $order_id;
        }
        $status = true;
        $result = get_permalink(get_option('wpshop_cart_page_id'));
    }
    $response = array('status' => $status, 'response' => $result, 'add_to_cart_checking' => $add_to_cart_checking, 'add_to_cart_checking_message' => $add_to_cart_checking_message);
    echo json_encode($response);
    die;
}
 /**
  * AJAX - Save datas
  */
 function wps_save_product_quick_interface()
 {
     global $wpdb;
     $response = '';
     $status = false;
     $count_products_to_update = 0;
     $total_updated_products = 0;
     if (!empty($_REQUEST['wps_product_quick_save'])) {
         $count_products_to_update = count($_REQUEST['wps_product_quick_save']);
         foreach ($_REQUEST['wps_product_quick_save'] as $product_to_save) {
             $data_to_save = array();
             // Update post
             $updated_post = wp_update_post(array('ID' => $product_to_save, 'post_title' => $_REQUEST['wps_mass_interface'][$product_to_save]['post_title'], 'post_content' => $_REQUEST['wps_mass_interface'][$product_to_save]['post_content']));
             // Update attributes
             if (!empty($updated_post)) {
                 // Update Featured picture
                 if (!empty($_REQUEST['wps_mass_interface'][$product_to_save]['picture'])) {
                     $thumbnail_exist = get_post_meta($updated_post, '_thumbnail_id', true);
                     if ($_REQUEST['wps_mass_interface'][$product_to_save]['picture'] != 'deleted') {
                         wp_update_post(array('ID' => $_REQUEST['wps_mass_interface'][$product_to_save]['picture'], 'post_parent' => $updated_post));
                         update_post_meta($updated_post, '_thumbnail_id', $_REQUEST['wps_mass_interface'][$product_to_save]['picture']);
                     } elseif ($_REQUEST['wps_mass_interface'][$product_to_save]['picture'] == 'deleted' && !empty($thumbnail_exist)) {
                         delete_post_meta($updated_post, '_thumbnail_id');
                     }
                 }
                 // Update files datas
                 if (!empty($_REQUEST['wps_mass_interface'][$product_to_save]['files'])) {
                     $files_data = explode(',', $_REQUEST['wps_mass_interface'][$product_to_save]['files']);
                     if (!empty($files_data) && is_array($files_data)) {
                         foreach ($files_data as $file_id) {
                             if (!empty($file_id)) {
                                 wp_update_post(array('ID' => $file_id, 'post_parent' => $updated_post));
                             }
                         }
                     }
                 }
                 $data_to_save['post_ID'] = $data_to_save['product_id'] = intval($product_to_save);
                 $data_to_save['wpshop_product_attribute'] = !empty($_REQUEST['wpshop_product_attribute'][$product_to_save]) ? $_REQUEST['wpshop_product_attribute'][$product_to_save] : array();
                 if (empty($data_to_save['wpshop_product_attribute']['varchar']['barcode'])) {
                     // Get current barcode
                     $wps_product_mdl = new wps_product_mdl();
                     $attid = wpshop_attributes::getElement('barcode', "'valid'", 'code')->id;
                     $barcode_value = wpshop_attributes::wpshop_att_val_func(array('pid' => $data_to_save['post_ID'], 'attid' => $attid));
                     $data_to_save['wpshop_product_attribute']['varchar']['barcode'] = $barcode_value;
                 }
                 $data_to_save['user_ID'] = get_current_user_id();
                 $data_to_save['action'] = 'editpost';
                 if (!empty($_REQUEST['wps_mass_interface'][$product_to_save]['post_delete']) && $_REQUEST['wps_mass_interface'][$product_to_save]['post_delete'] == "true") {
                     wp_trash_post($product_to_save);
                 }
                 if (!empty($product_to_save) && !empty($data_to_save['user_ID'])) {
                     $product_class = new wpshop_products();
                     $product_class->save_product_custom_informations($product_to_save, $data_to_save);
                     $total_updated_products++;
                 }
             }
         }
     }
     // Checking status
     $status = $total_updated_products == $count_products_to_update ? true : false;
     if ($status) {
         $response = sprintf(__('%d products have been successfully updated', 'wpshop'), $total_updated_products);
     } else {
         if (!empty($total_updated_products)) {
             $response = sprintf(__('All selected products do not be updated. %d on %d products have been successfully updated', 'wpshop'), $total_updated_products, $count_products_to_update);
         } else {
             $response = __('No product have been updated', 'wpshop');
         }
     }
     echo json_encode(array('status' => $status, 'response' => $response));
     wp_die();
 }
 /**
  * Return the cart total weight
  * @param array $cart_items
  * @return number
  */
 function calcul_cart_weight($cart_items)
 {
     $cart_weight = 0;
     if (!empty($cart_items)) {
         foreach ($cart_items as $id_item => $cart_item) {
             $id_item = wpshop_products::get_id_variation($id_item);
             if (get_post_type($id_item) == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION) {
                 $product_data = get_post_meta($id_item, '_wpshop_product_metadata', true);
                 if (!empty($product_data) && !empty($product_data['product_weight'])) {
                     $cart_weight += $product_data['product_weight'] * $cart_item['item_qty'];
                 } else {
                     $parent_def = wpshop_products::get_parent_variation($id_item);
                     if (!empty($parent_def) && !empty($parent_def['parent_post_meta']) && !empty($parent_def['parent_post_meta']['product_weight'])) {
                         $cart_weight += $parent_def['parent_post_meta']['product_weight'] * $cart_item['item_qty'];
                     }
                 }
             } else {
                 $product_data = get_post_meta($cart_item['item_id'], '_wpshop_product_metadata', true);
                 if (!empty($product_data) && !empty($product_data['product_weight']) && !empty($cart_item['item_qty'])) {
                     $cart_weight += $product_data['product_weight'] * $cart_item['item_qty'];
                 }
             }
         }
     }
     return $cart_weight;
 }
 /**
  * AJAX - Load Product Variations in ThickBox on Add product to order action
  */
 function wps_order_load_product_variations()
 {
     $product_id = !empty($_GET['pid']) ? intval($_GET['pid']) : null;
     $order_id = !empty($_GET['oid']) ? intval($_GET['oid']) : null;
     $qty = !empty($_GET['qty']) ? intval($_GET['qty']) : 1;
     echo '<div class="wps-boxed"><span class="wps-h5">' . __('Select your variations', 'wpshop') . '</span>' . wpshop_products::wpshop_variation($product_id, true, $order_id, $qty) . '<a href="#" class="wps-bton-first-mini-rounded alignRight wps-orders-add_variation_product"><i class="wps-icon-basket"></i> ' . __('Add to cart', 'wpshop') . '</a>' . '</div>';
     wp_die();
 }
" >
	<a class="widget_category_title" href="<?php 
echo $link;
?>
" ><span><?php 
echo esc_html($category->name);
?>
</span></a>
<?php 
if ($category_state_class != 'wpshop_category_empty') {
    ?>
	<ul class="wpshop_categories_widget <?php 
    echo $category_class;
    ?>
" id="wpshop_categories_widget_<?php 
    echo $category->term_id;
    ?>
" >
<?php 
    echo wpshop_categories::category_tree_output($category->term_id, $instance);
    /*	Get the product of the current category	if the current category has no sub category*/
    global $category_has_sub_category;
    if (!$category_has_sub_category && $display_product == 'yes') {
        wpshop_products::get_product_of_category($category->slug, $category->term_id);
    }
    ?>
	</ul>
<?php 
}
?>
</li>
 public static function process_checkout($paymentMethod = 'paypal', $order_id = 0, $customer_id = 0, $customer_billing_address_id = 0, $customer_shipping_address_id = 0)
 {
     global $wpdb, $wpshop, $wpshop_cart;
     $wps_message = new wps_message_ctr();
     $shipping_address_option = get_option('wpshop_shipping_address_choice');
     if (is_user_logged_in()) {
         $user_id = get_current_user_id();
         if ($customer_id != 0) {
             $user_id = $customer_id;
         }
         // If the order is already created in the db
         if (!empty($order_id) && is_numeric($order_id)) {
             $order = get_post_meta($order_id, '_order_postmeta', true);
             if (!empty($order)) {
                 if ($order['customer_id'] == $user_id) {
                     $order['payment_method'] = $paymentMethod;
                     $_SESSION['order_id'] = wpshop_tools::varSanitizer($order_id);
                     // Store cart in session
                     //wpshop_cart::store_cart_in_session($order);
                     // Add a payment
                     $order['order_payment']['received'][] = array('method' => $paymentMethod, 'waited_amount' => $order['order_amount_to_pay_now'], 'status' => 'waiting_payment', 'author' => get_current_user_id());
                     // On enregistre la commande
                     update_post_meta($order_id, '_order_postmeta', $order);
                     update_post_meta($order_id, '_wpshop_order_customer_id', $user_id);
                 } else {
                     $wpshop->add_error(__('You don\'t own the order', 'wpshop'));
                 }
             } else {
                 $wpshop->add_error(__('The order doesn\'t exist.', 'wpshop'));
             }
         } else {
             $order_data = array('post_type' => WPSHOP_NEWTYPE_IDENTIFIER_ORDER, 'post_title' => sprintf(__('Order - %s', 'wpshop'), mysql2date('d M Y\\, H:i:s', current_time('mysql', 0), true)), 'post_status' => 'publish', 'post_excerpt' => !empty($_POST['wps-customer-comment']) ? $_POST['wps-customer-comment'] : '', 'post_author' => $user_id, 'comment_status' => 'closed');
             // Cart items
             $order_items = array();
             $order_tva = array();
             //$cart = (array)$wpshop_cart->cart;
             if (!empty($_SESSION['cart']) && !empty($_SESSION['cart']['shipping_method'])) {
                 $_SESSION['cart']['shipping_method'] = __('Standard shipping method', 'wpshop');
             }
             $cart = (array) $_SESSION['cart'];
             $download_codes = array();
             // Nouvelle commande
             $order_id = wp_insert_post($order_data);
             $_SESSION['order_id'] = $order_id;
             // Cr�ation des codes de t�l�chargement si il y a des produits t�l�chargeable dans le panier
             if (!empty($cart['order_items'])) {
                 foreach ($cart['order_items'] as $c) {
                     $product = wpshop_products::get_product_data($c['item_id']);
                     /** Check if it's a variation and check the parent product **/
                     if (get_post_type($c['item_id']) == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION) {
                         $parent_def = wpshop_products::get_parent_variation($c['item_id']);
                         if (!empty($parent_def) && !empty($parent_def['parent_post_meta']) && !empty($parent_def['parent_post_meta']['is_downloadable_'])) {
                             $product['is_downloadable_'] = $parent_def['parent_post_meta']['is_downloadable_'];
                         }
                     }
                     if (!empty($product['is_downloadable_'])) {
                         $download_codes[$c['item_id']] = array('item_id' => $c['item_id'], 'download_code' => uniqid('', true));
                     }
                 }
             }
             if (!empty($download_codes)) {
                 update_user_meta($user_id, '_order_download_codes_' . $order_id, $download_codes);
             }
             // Informations de commande � stocker
             $currency = wpshop_tools::wpshop_get_currency(true);
             $order = array_merge(array('order_key' => NULL, 'customer_id' => $user_id, 'order_status' => 'awaiting_payment', 'order_date' => current_time('mysql', 0), 'order_shipping_date' => null, 'order_invoice_ref' => '', 'order_currency' => $currency, 'order_payment' => array('customer_choice' => array('method' => $paymentMethod), 'received' => array('0' => array('method' => $paymentMethod, 'waited_amount' => $cart['order_amount_to_pay_now'], 'status' => 'waiting_payment', 'author' => $user_id)), 'shipping_method' => !empty($_SESSION['shipping_method']) ? wpshop_tools::varSanitizer($_SESSION['shipping_method']) : __('Standard shipping method', 'wpshop'))), $cart);
             // Si c'est un devis
             if ($paymentMethod == 'quotation') {
                 $order['order_temporary_key'] = wpshop_orders::get_new_pre_order_reference();
             } else {
                 $order['order_key'] = wpshop_orders::get_new_order_reference();
             }
             //Round final amount
             $order['order_grand_total'] = number_format(round($order['order_grand_total'], 2), 2, '.', '');
             $order['order_total_ttc'] = number_format(round($order['order_total_ttc'], 2), 2, '.', '');
             $order['order_amount_to_pay_now'] = number_format(round($order['order_amount_to_pay_now'], 2), 2, '.', '');
             /** On enregistre la commande	*/
             update_post_meta($order_id, '_order_postmeta', $order);
             update_post_meta($order_id, '_wpshop_order_customer_id', $order['customer_id']);
             update_post_meta($order_id, '_wpshop_order_shipping_date', $order['order_shipping_date']);
             update_post_meta($order_id, '_wpshop_order_status', $order['order_status']);
             do_action('wps_order_extra_save', $order_id);
             //Add an action to extra actions on order save
             $args = array('order_id' => $order_id, 'posted_data' => $_REQUEST);
             wpshop_tools::create_custom_hook('wps_order_extra_save_action', $args);
             /**	Set custmer information for the order	*/
             $shipping_address = !empty($shipping_address_option) && !empty($shipping_address_option['activate']) ? !empty($_SESSION['shipping_address']) ? wpshop_tools::varSanitizer($_SESSION['shipping_address']) : $customer_shipping_address_id : '';
             $billing_address = !empty($_SESSION['billing_address']) ? wpshop_tools::varSanitizer($_SESSION['billing_address']) : $customer_billing_address_id;
             if (!empty($billing_address)) {
                 wpshop_orders::set_order_customer_addresses($user_id, $order_id, $shipping_address, $billing_address);
             }
             if (!empty($_SESSION['shipping_address_to_save'])) {
                 $order_infos_postmeta = get_post_meta($order_id, '_order_info', true);
                 $order_infos_postmeta['shipping']['address'] = $_SESSION['shipping_address_to_save'];
                 $order_infos_postmeta['shipping']['address_id'] = '';
                 update_post_meta($order_id, '_order_info', $order_infos_postmeta);
                 unset($_SESSION['shipping_address_to_save']);
             }
             /** Save Coupon use **/
             if (!empty($_SESSION['cart']['coupon_id'])) {
                 $wps_coupon_mdl = new wps_coupon_model();
                 $wps_coupon_mdl->save_coupon_use($_SESSION['cart']['coupon_id']);
             }
             /**	Notify the customer as the case	*/
             $user_info = get_userdata($user_id);
             $email = $user_info->user_email;
             $first_name = $user_info->user_firstname;
             $last_name = $user_info->user_lastname;
             // Envoie du message de confirmation de commande au client
             $order_meta = get_post_meta($order_id, '_order_postmeta', true);
             $shipping_mode_option = get_option('wps_shipping_mode');
             $shipping_method = !empty($order_meta['order_payment']['shipping_method']) && !empty($shipping_mode_option) && !empty($shipping_mode_option['modes']) && is_array($shipping_mode_option['modes']) && array_key_exists($order_meta['order_payment']['shipping_method'], $shipping_mode_option['modes']) ? $shipping_mode_option['modes'][$order_meta['order_payment']['shipping_method']]['name'] : (!empty($order_meta['order_payment']['shipping_method']) ? $order_meta['order_payment']['shipping_method'] : '');
             if (!empty($order_meta) && !empty($order_meta['cart_type']) && $order_meta['cart_type'] == 'quotation' && empty($order_meta['order_key'])) {
                 $wps_message->wpshop_prepared_email($email, 'WPSHOP_QUOTATION_CONFIRMATION_MESSAGE', array('order_id' => $order_id, 'customer_first_name' => $first_name, 'customer_last_name' => $last_name, 'customer_email' => $email, 'order_date' => current_time('mysql', 0), 'order_content' => '', 'order_addresses' => '', 'order_customer_comments' => '', 'order_billing_address' => '', 'order_shipping_address' => '', 'order_shipping_method' => $shipping_method, 'order_personnal_informations' => ''));
             } else {
                 $email_option = get_option('wpshop_emails');
                 if (empty($email_option['send_confirmation_order_message'])) {
                     $payment_method_option = get_option('wps_payment_mode');
                     $order_payment_method = !empty($payment_method_option) && !empty($payment_method_option['mode']) && !empty($order_meta['order_payment']['customer_choice']['method']) && !empty($payment_method_option['mode'][$order_meta['order_payment']['customer_choice']['method']]) ? $payment_method_option['mode'][$order_meta['order_payment']['customer_choice']['method']]['name'] : $order_meta['order_payment']['customer_choice']['method'];
                     $wps_message->wpshop_prepared_email($email, 'WPSHOP_ORDER_CONFIRMATION_MESSAGE', array('order_id' => $order_id, 'customer_first_name' => $first_name, 'customer_last_name' => $last_name, 'customer_email' => $email, 'order_key' => !empty($order_meta['order_key']) ? $order_meta['order_key'] : '', 'order_date' => current_time('mysql', 0), 'order_payment_method' => $order_payment_method, 'order_content' => '', 'order_addresses' => '', 'order_customer_comments' => '', 'order_billing_address' => '', 'order_shipping_address' => '', 'order_shipping_method' => $shipping_method, 'order_personnal_informations' => ''));
                 }
             }
             if (empty($_SESSION['wps-pos-addon'])) {
                 $email_option = get_option('wpshop_emails');
                 if (empty($email_option) || !empty($email_option) && empty($email_option['send_confirmation_order_message'])) {
                     self::send_order_email_to_administrator($order_id, $user_info);
                 }
             }
             /** IF Order amount is 0, Finish the Order **/
             if ($cart['order_amount_to_pay_now'] == 0) {
                 $order_meta = get_post_meta($order_id, '_order_postmeta', true);
                 $payment_status = 'completed';
                 $params_array = array('method' => 'free', 'waited_amount' => $order_meta['order_amount_to_pay_now'], 'status' => 'payment_received', 'author' => $order_meta['customer_id'], 'payment_reference' => 'FREE_ORDER', 'date' => current_time('mysql', 0), 'received_amount' => $order_meta['order_amount_to_pay_now']);
                 wpshop_payment::check_order_payment_total_amount($order_id, $params_array, $payment_status);
             }
             apply_filters('wpshop_finish_order_extra_actions', $order_id);
         }
     }
     return $order_id;
 }
示例#30
-1
 /**
  * Generate output for an invoice
  *
  * @param integer $order_id
  * @param string $invoice_ref
  *
  * @return string The invoice output in case no error is found. The error in other case
  */
 public static function generate_html_invoice($order_id, $invoice_ref)
 {
     global $wpdb;
     $date_output_format = get_option('date_format') . ' ' . get_option('time_format');
     $count_products = 0;
     if (!empty($order_id)) {
         $order_postmeta = get_post_meta($order_id, '_order_postmeta', true);
         $discounts_exists = false;
         $is_quotation = empty($order_postmeta['order_key']) && !empty($order_postmeta['order_temporary_key']) ? true : false;
         /** Check if it's a partial payment bill **/
         $is_partial_payment = !empty($invoice_ref) && !empty($order_postmeta['order_invoice_ref']) && $order_postmeta['order_status'] == 'partially_paid' && !empty($order_postmeta['order_invoice_ref']) && $order_postmeta['order_invoice_ref'] != $invoice_ref || empty($invoice_ref) && $order_postmeta['order_status'] == 'partially_paid' || !empty($invoice_ref) && !empty($order_postmeta['order_invoice_ref']) && $order_postmeta['order_invoice_ref'] != $invoice_ref ? true : false;
         /** Check it is a shipping slip **/
         $bon_colisage = !empty($_GET['bon_colisage']) ? true : false;
         if (!empty($order_postmeta)) {
             $tpl_component = array();
             /** Billing Header **/
             //Logo
             $logo_options = get_option('wpshop_logo');
             $tpl_component['INVOICE_LOGO'] = !empty($logo_options) ? '<img src="' . $logo_options . '" alt="" />' : '';
             // Title
             $tpl_component['INVOICE_TITLE'] = $is_quotation ? __('Quotation', 'wpshop') : ($is_partial_payment ? __('Bill payment', 'wpshop') : __('Invoice', 'wpshop'));
             // 					if ( empty($order_postmeta['order_invoice_ref']) ) {
             // 						$tpl_component['INVOICE_TITLE'] = __('Bill payment', 'wpshop');
             // 						$is_partial_payment = true;
             // 					}
             if ($bon_colisage) {
                 $tpl_component['INVOICE_TITLE'] = __('Products List', 'wpshop');
             }
             $tpl_component['INVOICE_ORDER_INVOICE_REF'] = !empty($invoice_ref) ? $invoice_ref : (!empty($order_postmeta['order_invoice_ref']) ? $order_postmeta['order_invoice_ref'] : null);
             if ($bon_colisage) {
                 $tpl_component['INVOICE_ORDER_INVOICE_REF'] = '';
             }
             $tpl_component['INVOICE_ORDER_KEY_INDICATION'] = $is_quotation ? sprintf(__('Ref. %s', 'wpshop'), $order_postmeta['order_temporary_key']) : sprintf(__('Order n. %s', 'wpshop'), $order_postmeta['order_key']);
             $tpl_component['INVOICE_ORDER_DATE_INDICATION'] = $is_quotation ? sprintf(__('Quotation date %s', 'wpshop'), mysql2date($date_output_format, $order_postmeta['order_date'], true)) : sprintf(__('Order date %s', 'wpshop'), mysql2date($date_output_format, $order_postmeta['order_date'], true));
             /** Validate period for Quotation **/
             if ($is_quotation) {
                 $quotation_validate_period = self::quotation_validate_period($order_postmeta['order_date']);
             } else {
                 $tpl_component['INVOICE_VALIDATE_TIME'] = '';
             }
             $tpl_component['INVOICE_VALIDATE_TIME'] = empty($tpl_component['INVOICE_VALIDATE_TIME']) ? '' : $tpl_component['INVOICE_VALIDATE_TIME'];
             $tpl_component['AMOUNT_INFORMATION'] = !$bon_colisage ? sprintf(__('Amount are shown in %s', 'wpshop'), wpshop_tools::wpshop_get_currency(true)) : '';
             // Sender & receiver addresses
             $tpl_component['INVOICE_SENDER'] = self::generate_invoice_sender_part();
             $tpl_component['INVOICE_RECEIVER'] = self::generate_receiver_part($order_id, $bon_colisage);
             $tpl_component['INVOICE_TRACKING'] = '';
             $first = false;
             if (!empty($order_postmeta['order_trackingNumber'])) {
                 $tpl_component['INVOICE_TRACKING'] = __('Tracking : ', 'wpshop') . $order_postmeta['order_trackingNumber'];
                 $first = true;
             }
             if (!empty($order_postmeta['order_trackingLink'])) {
                 if (!$first) {
                     $tpl_component['INVOICE_TRACKING'] = __('Tracking : ', 'wpshop') . $order_postmeta['order_trackingLink'];
                 } else {
                     $tpl_component['INVOICE_TRACKING'] .= ' - ' . $order_postmeta['order_trackingLink'];
                 }
             }
             /** Items Tab **/
             $order_tva = array();
             if ($bon_colisage) {
                 $tpl_component['INVOICE_HEADER'] = wpshop_display::display_template_element('bon_colisage_row_header', array(), array(), 'common');
             } else {
                 $tpl_component['INVOICE_HEADER'] = wpshop_display::display_template_element('invoice_row_header', array(), array(), 'common');
                 if (!$is_quotation) {
                     /** Check if products have discounts **/
                     if (!empty($order_postmeta['order_items']) && !$is_partial_payment) {
                         foreach ($order_postmeta['order_items'] as $item_id => $item) {
                             if (!empty($item['item_global_discount_value']) || !empty($item['item_unit_discount_value'])) {
                                 $discounts_exists = true;
                             }
                         }
                     }
                     if ($discounts_exists) {
                         $tpl_component['INVOICE_HEADER'] = wpshop_display::display_template_element('invoice_row_header_with_discount', array(), array(), 'common');
                     }
                 }
             }
             $total_discounted = 0;
             $tpl_component['INVOICE_ROWS'] = '';
             if (!$is_partial_payment) {
                 if (!empty($order_postmeta['order_items'])) {
                     foreach ($order_postmeta['order_items'] as $item_id => $item) {
                         $sub_tpl_component = array();
                         $count_products++;
                         $barcode = get_post_meta($item['item_id'], '_barcode', true);
                         if (empty($barcode)) {
                             $product_metadata = get_post_meta($item['item_id'], '_wpshop_product_metadata', true);
                             $barcode = !empty($product_metadata) && !empty($product_metadata['barcode']) ? $product_metadata['barcode'] : '';
                             if (empty($barcode)) {
                                 $product_entity = wpshop_entities::get_entity_identifier_from_code(WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT);
                                 $att_def = wpshop_attributes::getElement('barcode', '"valid"', 'code');
                                 $query = $wpdb->prepare('SELECT value FROM ' . $wpdb->prefix . 'wpshop__attribute_value_' . $att_def->data_type . ' WHERE entity_type_id = %d AND attribute_id = %d AND entity_id = %d AND value != ""', $product_entity, $att_def->id, $item['item_id']);
                                 $barcode = $wpdb->get_var($query);
                             }
                         }
                         $sub_tpl_component['INVOICE_ROW_ITEM_BARCODE'] = !empty($barcode) ? $barcode : '-';
                         $sub_tpl_component['INVOICE_ROW_ITEM_REF'] = !empty($barcode) ? $barcode : $item['item_ref'];
                         /** Item name **/
                         $sub_tpl_component['INVOICE_ROW_ITEM_NAME'] = $item['item_name'];
                         /**	Get attribute order for current product	*/
                         $product_attribute_order_detail = wpshop_attributes_set::getAttributeSetDetails(get_post_meta($item['item_id'], WPSHOP_PRODUCT_ATTRIBUTE_SET_ID_META_KEY, true));
                         $output_order = array();
                         if (count($product_attribute_order_detail) > 0 && is_array($product_attribute_order_detail)) {
                             foreach ($product_attribute_order_detail as $product_attr_group_id => $product_attr_group_detail) {
                                 foreach ($product_attr_group_detail['attribut'] as $position => $attribute_def) {
                                     if (!empty($attribute_def->code)) {
                                         $output_order[$attribute_def->code] = $position;
                                     }
                                 }
                             }
                         }
                         $variation_attribute_ordered = wpshop_products::get_selected_variation_display($item['item_meta'], $output_order, 'invoice_print', 'common');
                         ksort($variation_attribute_ordered['attribute_list']);
                         $detail_tpl_component['CART_PRODUCT_MORE_INFO'] = '';
                         foreach ($variation_attribute_ordered['attribute_list'] as $attribute_variation_to_output) {
                             $detail_tpl_component['CART_PRODUCT_MORE_INFO'] .= $attribute_variation_to_output;
                         }
                         $sub_tpl_component['INVOICE_ROW_ITEM_DETAIL'] = !empty($detail_tpl_component['CART_PRODUCT_MORE_INFO']) ? wpshop_display::display_template_element('invoice_row_item_detail', $detail_tpl_component, array(), 'common') : '';
                         unset($detail_tpl_component);
                         $sub_tpl_component['INVOICE_ROW_ITEM_QTY'] = $item['item_qty'];
                         $sub_tpl_component['INVOICE_ROW_ITEM_PU_HT'] = !empty($item['item_pu_ht_before_discount']) ? number_format($item['item_pu_ht_before_discount'], 2, '.', '') : number_format($item['item_pu_ht'], 2, '.', '');
                         $sub_tpl_component['INVOICE_ROW_ITEM_DISCOUNT_AMOUNT'] = !empty($item['item_discount_value']) ? number_format($item['item_discount_value'], 2, '.', '') : number_format(0, 2, '.', '');
                         $sub_tpl_component['INVOICE_ROW_ITEM_TOTAL_HT'] = number_format($item['item_pu_ht'] * $item['item_qty'], 2, '.', '');
                         /** TVA **/
                         $sub_tpl_component['INVOICE_ROW_ITEM_TVA_TOTAL_AMOUNT'] = number_format($item['item_tva_total_amount'], 2, '.', '');
                         $sub_tpl_component['INVOICE_ROW_ITEM_TVA_RATE'] = $item['item_tva_rate'];
                         $sub_tpl_component['INVOICE_ROW_ITEM_TOTAL_TTC'] = number_format($item['item_total_ttc'], 2, '.', '');
                         /** Checking Rate amount **/
                         if (!$bon_colisage) {
                             $checking = self::check_product_price($item['item_total_ht'], $item['item_total_ttc'], $item['item_tva_total_amount'], $item['item_tva_rate'], $item['item_id'], $invoice_ref, $order_id);
                             if (!$checking) {
                                 return __('Invoice cannot be generate because an error was found. The website administrator has been warned.', 'wpshop');
                             }
                         }
                         if ($bon_colisage) {
                             $tpl_component['INVOICE_ROWS'] .= wpshop_display::display_template_element('bon_colisage_row', $sub_tpl_component, array(), 'common');
                         } else {
                             if ($discounts_exists) {
                                 $discounted_total_per_item = $item['item_total_ht'];
                                 /** Unit Discount **/
                                 if (!empty($item['item_unit_discount_amount']) && !empty($item['item_unit_discount_value'])) {
                                     $sub_tpl_component['INVOICE_ROW_ITEM_UNIT_DISCOUNT_AMOUNT'] = number_format($item['item_unit_discount_amount'], 2, '.', '');
                                     $sub_tpl_component['INVOICE_ROW_ITEM_UNIT_DISCOUNT_VALUE'] = number_format($item['item_unit_discount_value'], 2, '.', '');
                                     $discounted_total_per_item = $discounted_total_per_item - $item['item_unit_discount_amount'];
                                 } else {
                                     $sub_tpl_component['INVOICE_ROW_ITEM_UNIT_DISCOUNT_AMOUNT'] = number_format(0, 2, '.', '');
                                     $sub_tpl_component['INVOICE_ROW_ITEM_UNIT_DISCOUNT_VALUE'] = number_format(0, 2, '.', '');
                                 }
                                 /** Global Discount **/
                                 if (!empty($item['item_global_discount_amount']) && !empty($item['item_global_discount_value'])) {
                                     $sub_tpl_component['INVOICE_ROW_ITEM_GLOBAL_DISCOUNT_AMOUNT'] = number_format($item['item_global_discount_amount'], 2, '.', '');
                                     $sub_tpl_component['INVOICE_ROW_ITEM_GLOBAL_DISCOUNT_VALUE'] = number_format($item['item_global_discount_value'], 2, '.', '');
                                     $discounted_total_per_item = $discounted_total_per_item - $item['item_global_discount_amount'];
                                 } else {
                                     $sub_tpl_component['INVOICE_ROW_ITEM_GLOBAL_DISCOUNT_AMOUNT'] = number_format(0, 2, '.', '');
                                     $sub_tpl_component['INVOICE_ROW_ITEM_GLOBAL_DISCOUNT_VALUE'] = number_format(0, 2, '.', '');
                                 }
                                 $total_discounted += $discounted_total_per_item;
                                 /** Total HT Discounted **/
                                 $sub_tpl_component['INVOICE_ROW_ITEM_DISCOUNTED_HT_TOTAL'] = number_format($discounted_total_per_item, 2, '.', '');
                                 $tpl_component['INVOICE_ROWS'] .= wpshop_display::display_template_element('invoice_row_with_discount', $sub_tpl_component, array(), 'common');
                             } else {
                                 $tpl_component['INVOICE_ROWS'] .= wpshop_display::display_template_element('invoice_row', $sub_tpl_component, array(), 'common');
                             }
                         }
                         unset($sub_tpl_component);
                         /** Check TVA **/
                         if (empty($order_tva[$item['item_tva_rate']])) {
                             $order_tva[$item['item_tva_rate']] = $item['item_tva_total_amount'];
                         } else {
                             $order_tva[$item['item_tva_rate']] += $item['item_tva_total_amount'];
                         }
                     }
                 }
                 /** Display Partials payments **/
                 $total_partial_payment = 0;
                 $last_payment = 0;
                 $order_invoice_ref = !empty($order_postmeta['order_invoice_ref']) ? $order_postmeta['order_invoice_ref'] : '';
                 if (!empty($order_postmeta['order_payment']) && !empty($order_postmeta['order_payment']['received']) && !$bon_colisage) {
                     foreach ($order_postmeta['order_payment']['received'] as $received_payment) {
                         if (!empty($received_payment['invoice_ref']) && $received_payment['invoice_ref'] != $order_invoice_ref) {
                             if (intval(substr($received_payment['invoice_ref'], 2)) == intval(substr($tpl_component['INVOICE_ORDER_INVOICE_REF'], 2))) {
                                 $sub_tpl_component = array();
                                 $sub_tpl_component['INVOICE_ROW_ITEM_REF'] = $received_payment['invoice_ref'];
                                 /** Item name **/
                                 $sub_tpl_component['INVOICE_ROW_ITEM_NAME'] = sprintf(__('Partial payment on order %1$s', 'wpshop'), $order_postmeta['order_key'], __($received_payment['method'], 'wpshop'), $received_payment['payment_reference']);
                                 $sub_tpl_component['INVOICE_ROW_ITEM_DETAIL'] = '';
                                 $sub_tpl_component['INVOICE_ROW_ITEM_QTY'] = 1;
                                 $sub_tpl_component['INVOICE_ROW_ITEM_PU_HT'] = '-' . number_format($received_payment['received_amount'], 2, '.', '');
                                 $sub_tpl_component['INVOICE_ROW_ITEM_DISCOUNT_AMOUNT'] = number_format(0, 2, '.', '');
                                 $sub_tpl_component['INVOICE_ROW_ITEM_TOTAL_HT'] = '-' . number_format($received_payment['received_amount'], 2, '.', '');
                                 /** TVA **/
                                 $sub_tpl_component['INVOICE_ROW_ITEM_TVA_TOTAL_AMOUNT'] = number_format(0, 2, '.', '');
                                 $sub_tpl_component['INVOICE_ROW_ITEM_TVA_RATE'] = 0;
                                 $sub_tpl_component['INVOICE_ROW_ITEM_TOTAL_TTC'] = '-' . number_format($received_payment['received_amount'], 2, '.', '');
                                 if ($discounts_exists) {
                                     $sub_tpl_component['INVOICE_ROW_ITEM_DISCOUNTED_HT_TOTAL'] = '-' . number_format($received_payment['received_amount'], 2, '.', '');
                                     $sub_tpl_component['INVOICE_ROW_ITEM_UNIT_DISCOUNT_AMOUNT'] = number_format(0, 2, '.', '');
                                     $sub_tpl_component['INVOICE_ROW_ITEM_UNIT_DISCOUNT_VALUE'] = number_format(0, 2, '.', '');
                                     $sub_tpl_component['INVOICE_ROW_ITEM_GLOBAL_DISCOUNT_AMOUNT'] = number_format(0, 2, '.', '');
                                     $sub_tpl_component['INVOICE_ROW_ITEM_GLOBAL_DISCOUNT_VALUE'] = number_format(0, 2, '.', '');
                                     $tpl_component['INVOICE_ROWS'] .= wpshop_display::display_template_element('invoice_row_with_discount', $sub_tpl_component, array(), 'common');
                                 } else {
                                     $tpl_component['INVOICE_ROWS'] .= wpshop_display::display_template_element('invoice_row', $sub_tpl_component, array(), 'common');
                                 }
                             }
                             unset($sub_tpl_component);
                             $total_partial_payment += !empty($received_payment['received_amount']) ? $received_payment['received_amount'] : 0;
                         } else {
                             if ('payment_received' == $received_payment['status']) {
                                 $last_payment += !empty($received_payment['received_amount']) ? $received_payment['received_amount'] : 0;
                             }
                         }
                     }
                 }
             } else {
                 /** Display Partials payments **/
                 $total_partial_payment = 0;
                 $last_payment = 0;
                 if (!empty($order_postmeta['order_payment']) && !empty($order_postmeta['order_payment']['received']) && !$bon_colisage) {
                     foreach ($order_postmeta['order_payment']['received'] as $received_payment) {
                         if (!empty($received_payment['invoice_ref']) && !empty($invoice_ref) && $received_payment['invoice_ref'] == $invoice_ref) {
                             $sub_tpl_component = array();
                             $sub_tpl_component['INVOICE_ROW_ITEM_REF'] = $received_payment['invoice_ref'];
                             /** Item name **/
                             $sub_tpl_component['INVOICE_ROW_ITEM_NAME'] = sprintf(__('Partial payment on order %1$s', 'wpshop'), $order_postmeta['order_key'], __($received_payment['method'], 'wpshop'), $received_payment['payment_reference']);
                             $sub_tpl_component['INVOICE_ROW_ITEM_DETAIL'] = '';
                             $sub_tpl_component['INVOICE_ROW_ITEM_QTY'] = 1;
                             $sub_tpl_component['INVOICE_ROW_ITEM_PU_HT'] = number_format($received_payment['received_amount'], 2, '.', '');
                             $sub_tpl_component['INVOICE_ROW_ITEM_DISCOUNT_AMOUNT'] = number_format(0, 2, '.', '');
                             $sub_tpl_component['INVOICE_ROW_ITEM_TOTAL_HT'] = number_format($received_payment['received_amount'], 2, '.', '');
                             /** TVA **/
                             $sub_tpl_component['INVOICE_ROW_ITEM_TVA_TOTAL_AMOUNT'] = number_format(0, 2, '.', '');
                             $sub_tpl_component['INVOICE_ROW_ITEM_TVA_RATE'] = 0;
                             $sub_tpl_component['INVOICE_ROW_ITEM_TOTAL_TTC'] = number_format($received_payment['received_amount'], 2, '.', '');
                             $tpl_component['INVOICE_ROWS'] .= wpshop_display::display_template_element('invoice_row', $sub_tpl_component, array(), 'common');
                             unset($sub_tpl_component);
                             $total_partial_payment += $received_payment['received_amount'];
                         }
                     }
                 }
             }
             /** Summary of order **/
             $summary_tpl_component = array();
             $tpl_component['INVOICE_SUMMARY_PART'] = $summary_tpl_component['INVOICE_SUMMARY_TAXES'] = '';
             if (!$bon_colisage) {
                 if (!empty($order_tva)) {
                     foreach ($order_tva as $tax_rate => $tax_amount) {
                         if ($tax_amount > 0) {
                             $tax_rate = !empty($tax_rate) && $tax_rate == 'VAT_shipping_cost' ? __('on Shipping cost', 'wpshop') . ' ' . WPSHOP_VAT_ON_SHIPPING_COST : $tax_rate;
                             $sub_tpl_component['SUMMARY_ROW_TITLE'] = sprintf(__('Total taxes amount %1$s', 'wpshop'), $tax_rate . '%');
                             $sub_tpl_component['SUMMARY_ROW_VALUE'] = wpshop_display::format_field_output('wpshop_product_price', $tax_amount) . ' ' . wpshop_tools::wpshop_get_currency();
                             $summary_tpl_component['INVOICE_SUMMARY_TAXES'] .= wpshop_display::display_template_element('invoice_summary_row', $sub_tpl_component, array(), 'common');
                             unset($sub_tpl_component);
                         } elseif ($is_partial_payment) {
                             $tax_rate = 0;
                             $tax_amount = number_format(0, 2, ',', '') . ' ' . wpshop_tools::wpshop_get_currency();
                             $sub_tpl_component['SUMMARY_ROW_TITLE'] = sprintf(__('Total taxes amount %1$s', 'wpshop'), $tax_rate . '%');
                             $sub_tpl_component['SUMMARY_ROW_VALUE'] = wpshop_display::format_field_output('wpshop_product_price', $tax_amount) . ' ' . wpshop_tools::wpshop_get_currency();
                             $summary_tpl_component['INVOICE_SUMMARY_TAXES'] .= wpshop_display::display_template_element('invoice_summary_row', $sub_tpl_component, array(), 'common');
                             unset($sub_tpl_component);
                         }
                     }
                 }
                 /** If Discount Exist **/
                 if (!empty($total_discounted) && $discounts_exists) {
                     $sub_tpl_component['SUMMARY_ROW_TITLE'] = __('Discounted Total ET', 'wpshop');
                     $sub_tpl_component['SUMMARY_ROW_VALUE'] = number_format($total_discounted, 2, '.', '') . ' ' . wpshop_tools::wpshop_get_currency();
                     $summary_tpl_component['INVOICE_SUMMARY_TOTAL_DISCOUNTED'] = wpshop_display::display_template_element('invoice_summary_row', $sub_tpl_component, array(), 'common');
                     unset($sub_tpl_component);
                 } else {
                     $summary_tpl_component['INVOICE_SUMMARY_TOTAL_DISCOUNTED'] = '';
                 }
                 $shipping_et = 0;
                 if (!$is_partial_payment) {
                     if (!empty($order_postmeta['order_shipping_cost'])) {
                         $shipping_et = $order_postmeta['order_shipping_cost'];
                     }
                 }
                 $shipping_taxes = WPSHOP_VAT_ON_SHIPPING_COST / 100 * $shipping_et;
                 $summary_tpl_component['INVOICE_ORDER_SHIPPING_COST'] = number_format($shipping_et, 2, ',', '');
                 $summary_tpl_component['INVOICE_ORDER_SHIPPING_COST_TAXES'] = number_format($shipping_taxes, 2, ',', '');
                 //$summary_tpl_component['INVOICE_ORDER_SHIPPING_COST'] = ( $is_partial_payment ) ? number_format( 0, 2, ',', '') : number_format( ( (!empty($order_postmeta['order_shipping_cost']) ) ? $order_postmeta['order_shipping_cost'] : 0 ), 2, ',', '' );
                 $summary_tpl_component['INVOICE_ORDER_GRAND_TOTAL'] = $is_partial_payment ? number_format($total_partial_payment, 2, ',', '') : number_format($order_postmeta['order_grand_total'], 2, ',', '');
                 // - $total_partial_payment , 2, ',', '' );
                 $summary_tpl_component['INVOICE_ORDER_TOTAL_HT'] = $is_partial_payment ? number_format($total_partial_payment, 2, ',', '') : number_format($order_postmeta['order_total_ht'], 2, ',', '');
                 $summary_tpl_component['TOTAL_BEFORE_DISCOUNT'] = number_format($order_postmeta['order_grand_total_before_discount'], 2, ',', '');
                 $total_payment = 0;
                 /** Amount paid **/
                 if (empty($order_postmeta['order_invoice_ref'])) {
                     foreach ($order_postmeta['order_payment']['received'] as $key => $value) {
                         if (!empty($value['invoice_ref']) && $value['invoice_ref'] === $tpl_component['INVOICE_ORDER_INVOICE_REF']) {
                             $total_payment = number_format($value['received_amount'], 2, ',', '');
                         }
                     }
                 } else {
                     $total_payment = $total_partial_payment + $last_payment !== $order_postmeta['order_grand_total'] ? number_format($total_partial_payment + $last_payment, 2, ',', '') : $order_postmeta['order_grand_total'];
                 }
                 $sub_tpl_component['SUMMARY_ROW_TITLE'] = __('Amount already paid', 'wpshop');
                 $sub_tpl_component['SUMMARY_ROW_VALUE'] = $total_payment . ' ' . wpshop_tools::wpshop_get_currency();
                 //$sub_tpl_component['SUMMARY_ROW_VALUE'] = ( $is_partial_payment ) ?  number_format($total_partial_payment, 2, ',', '' ). ' ' . wpshop_tools::wpshop_get_currency() : number_format($order_postmeta['order_grand_total'], 2, ',', '') . ' ' . wpshop_tools::wpshop_get_currency();
                 $summary_tpl_component['INVOICE_SUMMARY_MORE'] = wpshop_display::display_template_element('invoice_summary_row', $sub_tpl_component, array(), 'common');
                 unset($sub_tpl_component);
                 $sub_tpl_component['SUMMARY_ROW_TITLE'] = __('Number of products', 'wpshop');
                 $sub_tpl_component['SUMMARY_ROW_VALUE'] = $count_products;
                 $summary_tpl_component['INVOICE_SUMMARY_MORE'] .= wpshop_display::display_template_element('invoice_summary_row', $sub_tpl_component, array(), 'common');
                 unset($sub_tpl_component);
                 /** If Discount Exist **/
                 if (!empty($order_postmeta['coupon_id']) && !empty($order_postmeta['order_discount_value'])) {
                     $tpl_discount_component = array();
                     $tpl_discount_component['DISCOUNT_VALUE'] = $order_postmeta['order_discount_type'] == 'percent' ? number_format($order_postmeta['order_discount_amount_total_cart'], 2, ',', '') : number_format($order_postmeta['order_discount_value'], 2, ',', '');
                     $tpl_discount_component['TOTAL_BEFORE_DISCOUNT'] = number_format($order_postmeta['order_grand_total_before_discount'], 2, ',', '');
                     $summary_tpl_component['INVOICE_ORDER_DISCOUNT'] = wpshop_display::display_template_element('invoice_discount_part', $tpl_discount_component, array(), 'common');
                     unset($tpl_discount_component);
                 } else {
                     $summary_tpl_component['INVOICE_ORDER_DISCOUNT'] = '';
                 }
                 $price_piloting = get_option('wpshop_shop_price_piloting', 'TTC');
                 $summary_tpl_component['PRICE_PILOTING'] = 'HT' == $price_piloting ? __('ET', 'wpshop') : __('ATI', 'wpshop');
                 $tpl_component['INVOICE_SUMMARY_PART'] = wpshop_display::display_template_element('invoice_summary_part', $summary_tpl_component, array(), 'common');
                 unset($summary_tpl_component);
             }
             /** IBAN Include on quotation **/
             if ($is_quotation) {
                 /** If admin want to include his IBAN to quotation */
                 $iban_options = get_option('wpshop_paymentMethod_options');
                 $payment_options = get_option('wps_payment_mode');
                 if (!empty($payment_options) && !empty($payment_options['mode']) && !empty($payment_options['mode']['banktransfer']) && !empty($payment_options['mode']['banktransfer']['active']) && $payment_options['mode']['banktransfer']['active'] == 'on') {
                     if (!empty($iban_options) && !empty($iban_options['banktransfer'])) {
                         $tpl_component['IBAN_INFOS'] = __('Payment by Bank Transfer on this bank account', 'wpshop') . ' : <br/>';
                         $tpl_component['IBAN_INFOS'] .= __('Bank name', 'wpshop') . ' : ' . (!empty($iban_options['banktransfer']['bank_name']) ? $iban_options['banktransfer']['bank_name'] : '') . '<br/>';
                         $tpl_component['IBAN_INFOS'] .= __('IBAN', 'wpshop') . ' : ' . (!empty($iban_options['banktransfer']['iban']) ? $iban_options['banktransfer']['iban'] : '') . '<br/>';
                         $tpl_component['IBAN_INFOS'] .= __('BIC/SWIFT', 'wpshop') . ' : ' . (!empty($iban_options['banktransfer']['bic']) ? $iban_options['banktransfer']['bic'] : '') . '<br/>';
                         $tpl_component['IBAN_INFOS'] .= __('Account owner name', 'wpshop') . ' : ' . (!empty($iban_options['banktransfer']['accountowner']) ? $iban_options['banktransfer']['accountowner'] : '') . '<br/>';
                     }
                 } else {
                     $tpl_component['IBAN_INFOS'] = '';
                 }
             } else {
                 $tpl_component['IBAN_INFOS'] = '';
             }
             /** Received payements **/
             if (!$is_partial_payment && !$bon_colisage && !empty($order_postmeta['order_invoice_ref'])) {
                 $tpl_component['RECEIVED_PAYMENT'] = self::generate_received_payment_part($order_id);
             } else {
                 $tpl_component['RECEIVED_PAYMENT'] = '';
             }
             /** Invoice footer **/
             $tpl_component['INVOICE_FOOTER'] = self::generate_footer_invoice();
             $output = wpshop_display::display_template_element('invoice_page_content', $tpl_component, array(), 'common');
         } else {
             $output = __('No order information has been found', 'wpshop');
         }
     } else {
         $output = __('You requested a page that does not exist anymore. Please verify your request or ask the site administrator', 'wpshop');
     }
     return $output;
 }