From 071c54972658927198a13e64a54bb3b8e15577f2 Mon Sep 17 00:00:00 2001 From: Nedim Uka Date: Wed, 10 Oct 2018 14:09:31 +0200 Subject: [PATCH 1/3] Impleneted search by country, and added mesurment unit --- .../admin/class-wiaas-admin-product.php | 123 ++++++++++++++++++ .../class-wiaas-admin-simple-product.php | 13 ++ ...ss-wiaas-admin-product-additional-info.php | 91 +++++++++++++ .../wiaas/includes/class-wiaas-admin.php | 3 + .../wiaas/includes/class-wiaas-countries.php | 15 ++- .../wiaas/includes/class-wiaas-db-update.php | 2 + .../data/wiaas-ui-field-general.json | 86 ++++++++++++ .../wiaas-ui-field-product-properties.json | 113 ++++++++++++++++ .../db-updates/wiaas-db-update-ui-fields.php | 20 ++- .../product/class-wiaas-product-supplier.php | 1 + .../class-wiaas-template-category.php | 1 + .../wiaas-class-measurement-units.php | 83 ++++++++++++ backend/app/plugins/wiaas/wiaas.php | 2 + 13 files changed, 551 insertions(+), 2 deletions(-) create mode 100644 backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-product.php create mode 100644 backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-simple-product.php create mode 100644 backend/app/plugins/wiaas/includes/admin/simple-product/class-wiaas-admin-product-additional-info.php create mode 100644 backend/app/plugins/wiaas/includes/db-updates/data/wiaas-ui-field-general.json create mode 100644 backend/app/plugins/wiaas/includes/db-updates/data/wiaas-ui-field-product-properties.json create mode 100644 backend/app/plugins/wiaas/includes/wiaas-class-measurement-units.php diff --git a/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-product.php b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-product.php new file mode 100644 index 0000000..1aecf51 --- /dev/null +++ b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-product.php @@ -0,0 +1,123 @@ + _x('No Country', 'Product status', 'wiaas'), + 'public' => false, + 'exclude_from_search' => false, + 'show_in_admin_all_list' => false, + 'show_in_admin_status_list' => false, + )); + } + + + public static function wiaas_render_field($field) { + + if ($field['_name'] === '_wiaas_product_country') { + ?> +
+ +
+ id : ''; + + if ($screen_id !== 'product') { + return; + } + global $post; + + $post_id = $post->ID; + + if ($post_id === 0 || + ($post->post_status !== 'publish' && !(Wiaas_Countries::get_package_country(wc_get_product($post_id))))) { + + remove_meta_box('woocommerce-product-data', 'product', 'normal'); + remove_meta_box('submitdiv', 'product', 'side'); + remove_meta_box('slugdiv', 'product', 'normal'); + remove_meta_box('wiaas_upload_and_link_document', 'product', 'normal'); + remove_meta_box('postexcerpt', 'product', 'normal'); + remove_meta_box('template_product_meta_box', 'product', 'normal'); + remove_meta_box('postimagediv', 'product', 'normal'); + remove_meta_box('woocommerce-product-images', 'product', 'normal'); + remove_meta_box('wc-jetpack-product_by_user_role', 'product', 'normal'); + + + remove_meta_box('groups-permissions', 'product', 'side'); + remove_meta_box('tagsdiv-product_tag', 'product', 'side'); + remove_meta_box('tagsdiv-template_category', 'product', 'side'); + remove_meta_box('tagsdiv-supplier', 'product', 'side'); + remove_meta_box('postimagediv', 'product', 'side'); + remove_meta_box('woocommerce-product-images', 'product', 'side'); + remove_meta_box('submitdiv', 'product', 'side'); + remove_meta_box('wiaas_upload_and_link_document', 'product', 'side'); + remove_meta_box('radio-tagsdiv-product_country', 'product', 'side'); + remove_meta_box('tagsdiv-_wiaas_shop_prices', 'product', 'side'); + remove_meta_box('tagsdiv-wiaas_units', 'product', 'side'); + } + + //Always hide product category, it is added wit advanced custom fields plugin for simple product + remove_meta_box('radio-product_catdiv', 'product', 'side'); + + } + + public static function wiaas_maybe_set_no_country_status($data, $postarr) { + if ($postarr['post_type'] === 'product' && (!isset($postarr['ID']) || !$postarr['ID'])) { + $data['post_status'] = '_wiaas_no_country'; + } + return $data; + } + + public static function wiaas_my_save_post($post_id) { + + $value = get_field('_wiaas_product_country', $post_id, true); + $type = get_field('_wiaas_product_type', $post_id, true); + + + if (!empty($value)) { + + wp_set_object_terms($post_id, $value, 'product_country', true); + wp_set_object_terms($post_id, $type, 'product_type', true); + + wp_update_post(array( + 'ID' => $post_id, + 'post_status' => 'draft' + )); + + } else { + + wp_update_post(array( + 'ID' => $post_id, + 'post_status' => '_wiaas_no_country' + )); + } + + } + +} + +Wiaas_Admin_Product::init(); \ No newline at end of file diff --git a/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-simple-product.php b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-simple-product.php new file mode 100644 index 0000000..2c878e8 --- /dev/null +++ b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-simple-product.php @@ -0,0 +1,13 @@ +ID ); + + if ($product->get_type() === 'simple') { + + echo '
'; + + woocommerce_wp_text_input( + array( + 'id' => '_manufacturer_product_no', + 'label' => __('Manufacturer product number', 'woocommerce'), + 'type' => 'text' + ) + ); + + woocommerce_wp_text_input( + array( + 'id' => '_supplier_product_no', + 'label' => __('Supplier product number', 'woocommerce'), + 'type' => 'text' + ) + ); + + echo '
'; + } + } + + public static function filter_product_by_country($search_results) { + + $url = wp_get_referer(); + + if (strpos($url, 'post') === false) { + return $search_results; + } + + $post_param = explode("&", parse_url($url, PHP_URL_QUERY))[0]; + $post_id = explode("=", $post_param)[1]; + $country_id = wp_get_post_terms($post_id, 'product_country', array('fields' => 'ids'))[0]; + + if (!empty($search_results)) { + $search_result_objects = array_map('wc_get_product', array_keys($search_results)); + + foreach ($search_result_objects as $result_id => $producta) { + if (Wiaas_Countries::get_product_country_term_id($producta) !== $country_id) { + unset($search_results[$producta->get_id()]); + } + } + } + + return $search_results; + } + + + /** + * Save Manufacturer product and Supplier product number fields to + * Simple product meta data + * + */ + public static function save_additional_fields($post_id) { + + $manufacturer_product_no = $_POST['_manufacturer_product_no']; + if (!empty($manufacturer_product_no)) + update_post_meta($post_id, '_manufacturer_product_no', esc_attr($manufacturer_product_no)); + + $supplier_product_no = $_POST['_supplier_product_no']; + if (!empty($supplier_product_no)) + update_post_meta($post_id, '_supplier_product_no', esc_attr($supplier_product_no)); + + } +} + +Wiaas_Admin_Product_Additional_Info::init(); \ No newline at end of file diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-admin.php b/backend/app/plugins/wiaas/includes/class-wiaas-admin.php index 096f2e4..c67c1ee 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-admin.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-admin.php @@ -12,6 +12,7 @@ class Wiaas_Admin { require_once dirname(__FILE__) . '/admin/template/class-wiaas-admin-template-selection.php'; require_once dirname(__FILE__) . '/admin/template/class-wiaas-template-products.php'; require_once dirname(__FILE__) . '/admin/template/class-wiaas-template-admin-ajax.php'; + require_once dirname(__FILE__) . '/admin/class-wiaas-admin-simple-product.php'; // Admin order projects interface require_once dirname(__FILE__) . '/admin/class-wiaas-admin-order-projects.php'; @@ -22,6 +23,8 @@ class Wiaas_Admin { require_once dirname(__FILE__) . '/admin/class-wiaas-admin-cl.php'; + require_once dirname(__FILE__) . '/admin/class-wiaas-admin-product.php'; + add_action( 'admin_enqueue_scripts', array(__CLASS__, 'enqueue_scripts'), 100 ); } diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-countries.php b/backend/app/plugins/wiaas/includes/class-wiaas-countries.php index 368f4c7..2e42185 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-countries.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-countries.php @@ -114,12 +114,25 @@ class Wiaas_Countries { * * @return array|null */ - public static function get_product_country($product) { + public static function get_product_country($product) { $product_country = get_the_terms($product->get_id(), 'product_country'); return is_array($product_country) && isset($product_country[0]) ? self::$available_countries[$product_country[0]->name] : null; } + + /** + * Retrieves country term id from db for provided product + * @param $product + * + * @return int|null + */ + public static function get_product_country_term_id($product) { + $product_country = get_the_terms($product->get_id(), 'product_country'); + return is_array($product_country) && isset($product_country[0]) ? + $product_country[0]->term_id : + null; + } } Wiaas_Countries::init(); diff --git a/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php b/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php index b38d109..7bbfe24 100644 --- a/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php +++ b/backend/app/plugins/wiaas/includes/class-wiaas-db-update.php @@ -22,6 +22,8 @@ class Wiaas_DB_Update { '201810180444700' => 'wiaas_db_setup_create_customer_commercial_lead_table', '201810180544702' => 'wiaas_db_update_update_commercial_lead_capabilities', '201810180644703' => 'wiaas_db_update_add_organization_info_ui_fields', + '201910190145700' => 'wiaas_db_update_add_general_ui_fields', + '201910190146700' => 'wiaas_db_update_add_product_properties_ui_fields' ); public static function execute() { diff --git a/backend/app/plugins/wiaas/includes/db-updates/data/wiaas-ui-field-general.json b/backend/app/plugins/wiaas/includes/db-updates/data/wiaas-ui-field-general.json new file mode 100644 index 0000000..c5ad7b7 --- /dev/null +++ b/backend/app/plugins/wiaas/includes/db-updates/data/wiaas-ui-field-general.json @@ -0,0 +1,86 @@ +[ + { + "key": "group_5bbf694106e34", + "title": "General", + "fields": [ + { + "key": "field_5bc0965a35406", + "label": "Type", + "name": "_wiaas_product_type", + "type": "select", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "choices": { + "simple": "Simple", + "bundle": "Bundle", + "wiaastemplate": "Template" + }, + "default_value": [], + "allow_null": 0, + "multiple": 0, + "ui": 1, + "ajax": 0, + "return_format": "value", + "placeholder": "" + }, + { + "key": "field_5bbf899bba1af", + "label": "Country", + "name": "_wiaas_product_country", + "type": "taxonomy", + "instructions": "", + "required": 0, + "conditional_logic": [ + [ + { + "field": "field_5bc0965a35406", + "operator": "!=", + "value": "wiaastemplate" + } + ] + ], + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "taxonomy": "product_country", + "field_type": "select", + "allow_null": 0, + "add_term": 0, + "save_terms": 1, + "load_terms": 1, + "return_format": "id", + "multiple": 0 + } + ], + "location": [ + [ + { + "param": "post_type", + "operator": "==", + "value": "product" + }, + { + "param": "post_status", + "operator": "==", + "value": "_wiaas_no_country" + } + ] + ], + "menu_order": 0, + "position": "acf_after_title", + "style": "default", + "label_placement": "top", + "instruction_placement": "label", + "hide_on_screen": "", + "active": 1, + "description": "" + } +] \ No newline at end of file diff --git a/backend/app/plugins/wiaas/includes/db-updates/data/wiaas-ui-field-product-properties.json b/backend/app/plugins/wiaas/includes/db-updates/data/wiaas-ui-field-product-properties.json new file mode 100644 index 0000000..5abf18b --- /dev/null +++ b/backend/app/plugins/wiaas/includes/db-updates/data/wiaas-ui-field-product-properties.json @@ -0,0 +1,113 @@ +[ + { + "key": "group_5bc864b78434b", + "title": "Product properties", + "fields": [ + { + "key": "field_5bc8653baeafb", + "label": "Supplier", + "name": "supplier", + "type": "taxonomy", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "taxonomy": "category", + "field_type": "select", + "allow_null": 0, + "add_term": 1, + "save_terms": 1, + "load_terms": 1, + "return_format": "id", + "multiple": 0 + }, + { + "key": "field_5bc86761aeafc", + "label": "Unit", + "name": "unit", + "type": "taxonomy", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "taxonomy": "wiaas_units", + "field_type": "select", + "allow_null": 0, + "add_term": 1, + "save_terms": 1, + "load_terms": 1, + "return_format": "id", + "multiple": 0 + }, + { + "key": "field_5bc867c3aeafd", + "label": "Product category", + "name": "category", + "type": "taxonomy", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "taxonomy": "product_cat", + "field_type": "select", + "allow_null": 0, + "add_term": 1, + "save_terms": 1, + "load_terms": 1, + "return_format": "id", + "multiple": 0 + }, + { + "key": "field_5bc8743b099a8", + "label": "Template category", + "name": "template_category", + "type": "taxonomy", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "taxonomy": "template_category", + "field_type": "select", + "allow_null": 0, + "add_term": 1, + "save_terms": 1, + "load_terms": 1, + "return_format": "id", + "multiple": 0 + } + ], + "location": [ + [ + { + "param": "post_taxonomy", + "operator": "==", + "value": "product_type:simple" + } + ] + ], + "menu_order": 0, + "position": "side", + "style": "default", + "label_placement": "top", + "instruction_placement": "label", + "hide_on_screen": "", + "active": 1, + "description": "" + } +] \ No newline at end of file diff --git a/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-ui-fields.php b/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-ui-fields.php index 81192c0..3de15ad 100644 --- a/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-ui-fields.php +++ b/backend/app/plugins/wiaas/includes/db-updates/wiaas-db-update-ui-fields.php @@ -99,4 +99,22 @@ function _wiaas_import_field_group($json) { acf_import_field_group( $field_group ); } -} \ No newline at end of file +} + +function wiaas_db_update_add_general_ui_fields() { + + $ui_json = file_get_contents( dirname( __FILE__ ) . '/data/wiaas-ui-field-general.json' ); + + $ui_json = json_decode( $ui_json, true ); + + acf_import_field_group($ui_json[0]); +} + +function wiaas_db_update_add_product_properties_ui_fields() { + + $ui_json = file_get_contents( dirname( __FILE__ ) . '/data/wiaas-ui-field-product-properties.json' ); + + $ui_json = json_decode( $ui_json, true ); + + acf_import_field_group($ui_json[0]); +} diff --git a/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php b/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php index ecffddb..68957f8 100644 --- a/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php +++ b/backend/app/plugins/wiaas/includes/product/class-wiaas-product-supplier.php @@ -33,6 +33,7 @@ class Wiaas_Product_Supplier { 'labels' => $labels, 'show_ui' => true, 'show_admin_column' => true, + 'meta_box_cb' => false, 'query_var' => true, 'rewrite' => array('slug' => 'template_category'), ); diff --git a/backend/app/plugins/wiaas/includes/templates/class-wiaas-template-category.php b/backend/app/plugins/wiaas/includes/templates/class-wiaas-template-category.php index 575f5e5..d913a1a 100644 --- a/backend/app/plugins/wiaas/includes/templates/class-wiaas-template-category.php +++ b/backend/app/plugins/wiaas/includes/templates/class-wiaas-template-category.php @@ -41,6 +41,7 @@ class Wiaas_Template_Category { 'labels' => $labels, 'show_ui' => true, 'show_admin_column' => true, + 'meta_box_cb' => false, 'query_var' => true, 'rewrite' => array( 'slug' => 'template_category' ), ); diff --git a/backend/app/plugins/wiaas/includes/wiaas-class-measurement-units.php b/backend/app/plugins/wiaas/includes/wiaas-class-measurement-units.php new file mode 100644 index 0000000..1cb765f --- /dev/null +++ b/backend/app/plugins/wiaas/includes/wiaas-class-measurement-units.php @@ -0,0 +1,83 @@ + array( + 'id' => 1, + 'name' => 'piece', + 'unit' => 'piece', + ), + 'Meter' => array( + 'id' => 1, + 'name' => 'meter', + 'unit' => 'm', + ), + 'Square' => array( + 'id' => 1, + 'name' => 'square_meter', + 'unit' => 'm2', + ), + 'Centimeter' => array( + 'id' => 1, + 'name' => 'centimeter', + 'unit' => 'cm', + ), + ); + + /** + * Registers product taxonomy for avaiable countries + */ + public static function register_measurement_units_taxonomy() { + + $labels = array( + 'name' => _x('Unit', 'taxonomy general name', 'wiaas'), + 'singular_name' => _x('Unit', 'taxonomy singular name', 'wiaas'), + 'menu_name' => _x('Unit', 'Admin menu name', 'wiaas'), + 'search_items' => __('Search Units', 'wiaas'), + 'all_items' => __('All Units', 'wiaas'), + 'parent_item' => __('Parent Unit', 'wiaas'), + 'parent_item_colon' => __('Parent Unit:', 'wiaas'), + 'edit_item' => __('Edit Unit', 'wiaas'), + 'update_item' => __('Update Unit', 'wiaas'), + 'add_new_item' => __('Add New Unit', 'wiaas'), + 'new_item_name' => __('New Unit Name', 'wiaas'), + ); + + $args = array( + 'hierarchical' => false, + 'label' => __('Units', 'wiaas'), + 'labels' => $labels, + 'show_ui' => true, + 'show_admin_column' => true, + 'meta_box_cb' => false, + 'query_var' => true, + 'rewrite' => array('slug' => 'wiaas_units'), + ); + + register_taxonomy('wiaas_units', array('product'), $args); + + foreach (self::$available_units as $available_unit) { + if (!term_exists($available_unit, 'wiaas_units')) { + wp_insert_term($available_unit['unit'], 'wiaas_units'); + } + } + } +} + +Wiaas_Measurement_Units::init(); diff --git a/backend/app/plugins/wiaas/wiaas.php b/backend/app/plugins/wiaas/wiaas.php index 1a9ffa5..5bafd13 100644 --- a/backend/app/plugins/wiaas/wiaas.php +++ b/backend/app/plugins/wiaas/wiaas.php @@ -57,6 +57,8 @@ include_once WIAAS_DIR . '/includes/class-wiaas-api.php'; include_once WIAAS_DIR . '/includes/class-wiass-templates.php'; +include_once WIAAS_DIR . '/includes/wiaas-class-measurement-units.php'; + function wiaas_redirect_to_login() { wp_safe_redirect(get_site_url('', 'wp-login.php')); } From 00e853ae6bb6e804f7dc99d6bd5aebc8fc0601c7 Mon Sep 17 00:00:00 2001 From: Nedim Uka Date: Thu, 18 Oct 2018 17:28:31 +0200 Subject: [PATCH 2/3] Fixed product status issue --- .../includes/admin/class-wiaas-admin-product.php | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-product.php b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-product.php index 1aecf51..0ec02f6 100644 --- a/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-product.php +++ b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-product.php @@ -94,11 +94,17 @@ class Wiaas_Admin_Product { public static function wiaas_my_save_post($post_id) { + global $post; + $status = get_post_status( $post->ID); + $value = get_field('_wiaas_product_country', $post_id, true); $type = get_field('_wiaas_product_type', $post_id, true); + error_log($status); + error_log($value); - if (!empty($value)) { + + if (!empty($value) && $status === '_wiaas_no_country' ) { wp_set_object_terms($post_id, $value, 'product_country', true); wp_set_object_terms($post_id, $type, 'product_type', true); @@ -108,14 +114,7 @@ class Wiaas_Admin_Product { 'post_status' => 'draft' )); - } else { - - wp_update_post(array( - 'ID' => $post_id, - 'post_status' => '_wiaas_no_country' - )); } - } } From c4cddf8ace31cd3e3f725461e157461b836f6f97 Mon Sep 17 00:00:00 2001 From: Nedim Uka Date: Thu, 18 Oct 2018 17:30:42 +0200 Subject: [PATCH 3/3] Added comment to save post method --- .../wiaas/includes/admin/class-wiaas-admin-product.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-product.php b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-product.php index 0ec02f6..9e9a047 100644 --- a/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-product.php +++ b/backend/app/plugins/wiaas/includes/admin/class-wiaas-admin-product.php @@ -92,6 +92,13 @@ class Wiaas_Admin_Product { return $data; } + /** + * Check for post status and and if there is country available + * Set post status to draft if the country is added + * + * @param $post_id + */ + public static function wiaas_my_save_post($post_id) { global $post;