· 4 years ago · Apr 12, 2021, 03:38 AM
1<?php
2set_time_limit(120);
3include "json.php";
4ini_set('memory_limit', '1500M');
5
6/**
7 *
8 * The framework's functions and definitions
9 *
10 */
11
12/**
13 * ------------------------------------------------------------------------------------------------
14 * Define constants.
15 * ------------------------------------------------------------------------------------------------
16 */
17define( 'WOODMART_THEME_DIR', get_template_directory_uri() );
18define( 'WOODMART_THEMEROOT', get_template_directory() );
19define( 'WOODMART_IMAGES', WOODMART_THEME_DIR . '/images' );
20define( 'WOODMART_SCRIPTS', WOODMART_THEME_DIR . '/js' );
21define( 'WOODMART_STYLES', WOODMART_THEME_DIR . '/css' );
22define( 'WOODMART_FRAMEWORK', '/inc' );
23define( 'WOODMART_DUMMY', WOODMART_THEME_DIR . '/inc/dummy-content' );
24define( 'WOODMART_CLASSES', WOODMART_THEMEROOT . '/inc/classes' );
25define( 'WOODMART_CONFIGS', WOODMART_THEMEROOT . '/inc/configs' );
26define( 'WOODMART_HEADER_BUILDER', WOODMART_THEME_DIR . '/inc/header-builder' );
27define( 'WOODMART_ASSETS', WOODMART_THEME_DIR . '/inc/admin/assets' );
28define( 'WOODMART_ASSETS_IMAGES', WOODMART_ASSETS . '/images' );
29define( 'WOODMART_API_URL', 'https://xtemos.com/licenses/api/' );
30define( 'WOODMART_DEMO_URL', 'https://woodmart.xtemos.com/' );
31define( 'WOODMART_PLUGINS_URL', WOODMART_DEMO_URL . 'plugins/');
32define( 'WOODMART_DUMMY_URL', WOODMART_DEMO_URL . 'dummy-content/');
33define( 'WOODMART_SLUG', 'woodmart' );
34define( 'WOODMART_CORE_VERSION', '1.0.18' );
35
36
37/**
38 * ------------------------------------------------------------------------------------------------
39 * Load all CORE Classes and files
40 * ------------------------------------------------------------------------------------------------
41 */
42
43if( ! function_exists( 'woodmart_autoload' ) ) {
44 function woodmart_autoload($className) {
45 $className = ltrim($className, '\\');
46 $fileName = '';
47 $namespace = '';
48 if ($lastNsPos = strripos($className, '\\')) {
49 $namespace = substr($className, 0, $lastNsPos);
50 $className = substr($className, $lastNsPos + 1);
51 $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
52 }
53 $className = str_replace('WOODMART_', '', $className);
54 $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
55 $fileName = WOODMART_CLASSES . DIRECTORY_SEPARATOR . $fileName;
56 if( file_exists( $fileName )) {
57 require $fileName;
58 }
59 }
60
61 spl_autoload_register('woodmart_autoload');
62}
63
64$woodmart_theme = new WOODMART_Theme();
65
66/**
67 * ------------------------------------------------------------------------------------------------
68 * Enqueue styles
69 * ------------------------------------------------------------------------------------------------
70 */
71if( ! function_exists( 'woodmart_enqueue_styles' ) ) {
72 add_action( 'wp_enqueue_scripts', 'woodmart_enqueue_styles', 10000 );
73
74 function woodmart_enqueue_styles() {
75 $version = woodmart_get_theme_info( 'Version' );
76 $minified = woodmart_get_opt( 'minified_css' ) ? '.min' : '';
77 $is_rtl = is_rtl() ? '-rtl' : '';
78 $style_url = WOODMART_THEME_DIR . '/style' . $minified . '.css';
79 if ( woodmart_woocommerce_installed() && is_rtl() ) {
80 $style_url = WOODMART_STYLES . '/style-rtl' . $minified . '.css';
81 } elseif ( ! woodmart_woocommerce_installed() ) {
82 $style_url = WOODMART_STYLES . '/base' . $is_rtl . $minified . '.css';
83 }
84
85 // Custom CSS generated from the dashboard
86
87 $file = get_option('woodmart-generated-css-file');
88 if( ! empty( $file ) && ! empty( $file['url'] ) ) {
89 $style_url = $file['url'];
90 }
91
92 wp_deregister_style( 'dokan-fontawesome' );
93 wp_dequeue_style( 'dokan-fontawesome' );
94
95 wp_deregister_style( 'font-awesome' );
96 wp_dequeue_style( 'font-awesome' );
97
98 wp_dequeue_style( 'vc_pageable_owl-carousel-css' );
99 wp_dequeue_style( 'vc_pageable_owl-carousel-css-theme' );
100
101 if ( ! woodmart_get_opt( 'disable_font_awesome_theme_css' ) ) {
102 wp_enqueue_style('font-awesome-css', WOODMART_STYLES . '/font-awesome.min.css', array(), $version);
103 }
104
105 wp_enqueue_style( 'bootstrap', WOODMART_STYLES . '/bootstrap.min.css', array(), $version );
106 wp_enqueue_style( 'woodmart-style', $style_url, array( 'bootstrap' ), $version );
107
108 wp_enqueue_style( 'js_composer_front', false, array(), $version );
109
110 // load typekit fonts
111 $typekit_id = woodmart_get_opt( 'typekit_id' );
112
113 if ( $typekit_id ) {
114 wp_enqueue_style( 'woodmart-typekit', 'https://use.typekit.net/' . esc_attr ( $typekit_id ) . '.css', array(), $version );
115 }
116
117 remove_action('wp_head', 'print_emoji_detection_script', 7);
118 remove_action('wp_print_styles', 'print_emoji_styles');
119
120 wp_register_style( 'woodmart-inline-css', false );
121 }
122}
123
124/**
125 * ------------------------------------------------------------------------------------------------
126 * Enqueue scripts
127 * ------------------------------------------------------------------------------------------------
128 */
129
130if( ! function_exists( 'woodmart_enqueue_scripts' ) ) {
131 add_action( 'wp_enqueue_scripts', 'woodmart_enqueue_scripts', 10000 );
132
133 function woodmart_enqueue_scripts() {
134
135 $version = woodmart_get_theme_info( 'Version' );
136 /*
137 * Adds JavaScript to pages with the comment form to support
138 * sites with threaded comments (when in use).
139 */
140 if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
141 wp_enqueue_script( 'comment-reply', false, array(), $version );
142 }
143 if( ! woodmart_woocommerce_installed() ) {
144 wp_register_script( 'js-cookie', woodmart_get_script_url( 'js.cookie' ), array( 'jquery' ), $version, true );
145 }
146
147 wp_dequeue_script( 'flexslider' );
148 wp_dequeue_script( 'photoswipe-ui-default' );
149 wp_dequeue_script( 'prettyPhoto-init' );
150 wp_dequeue_script( 'prettyPhoto' );
151 wp_dequeue_style( 'photoswipe-default-skin' );
152 if( woodmart_get_opt( 'image_action' ) != 'zoom' ) {
153 wp_dequeue_script( 'zoom' );
154 }
155
156 wp_enqueue_script( 'wpb_composer_front_js', false, array(), $version );
157 wp_enqueue_script( 'imagesloaded', false, array(), $version );
158
159 if( woodmart_get_opt( 'combined_js' ) ) {
160 wp_enqueue_script( 'isotope', woodmart_get_script_url( 'isotope.pkgd' ), array(), $version, true );
161 wp_enqueue_script( 'woodmart-theme', WOODMART_SCRIPTS . '/theme.min.js', array( 'jquery', 'js-cookie' ), $version, true );
162 } else {
163 wp_enqueue_script( 'woodmart-owl-carousel', woodmart_get_script_url( 'owl.carousel' ), array(), $version, true );
164 wp_enqueue_script( 'woodmart-tooltips', woodmart_get_script_url( 'jquery.tooltips' ), array(), $version, true );
165 wp_enqueue_script( 'woodmart-magnific-popup', woodmart_get_script_url( 'jquery.magnific-popup' ), array(), $version, true );
166 wp_enqueue_script( 'woodmart-device', woodmart_get_script_url( 'device' ), array( 'jquery' ), $version, true );
167 wp_enqueue_script( 'woodmart-waypoints', woodmart_get_script_url( 'waypoints' ), array( 'jquery' ), $version, true );
168
169 if ( woodmart_get_opt( 'disable_nanoscroller' ) != 'disable' ) {
170 wp_enqueue_script( 'woodmart-nanoscroller', woodmart_get_script_url( 'jquery.nanoscroller' ), array(), $version, true );
171 }
172
173 $minified = woodmart_get_opt( 'minified_js' ) ? '.min' : '';
174 $base = ! woodmart_woocommerce_installed() ? '-base' : '';
175 wp_enqueue_script( 'woodmart-theme', WOODMART_SCRIPTS . '/functions' . $base . $minified . '.js', array( 'js-cookie' ), $version, true );
176 if ( woodmart_get_opt( 'ajax_shop' ) && woodmart_woocommerce_installed() && ( is_shop() || is_product_category() || is_product_tag() || is_product_taxonomy() ) ) {
177 wp_enqueue_script( 'woodmart-pjax', woodmart_get_script_url( 'jquery.pjax' ), array(), $version, true );
178 }
179 }
180 wp_add_inline_script( 'woodmart-theme', woodmart_settings_js(), 'after' );
181
182 wp_register_script( 'woodmart-panr-parallax', woodmart_get_script_url( 'panr-parallax' ), array(), $version, true );
183 wp_register_script( 'woodmart-photoswipe', woodmart_get_script_url( 'photoswipe-bundle' ), array(), $version, true );
184 wp_register_script( 'woodmart-slick', woodmart_get_script_url( 'slick' ), array(), $version, true );
185 wp_register_script( 'woodmart-countdown', woodmart_get_script_url( 'countdown' ), array(), $version, true );
186 wp_register_script( 'woodmart-packery-mode', woodmart_get_script_url( 'packery-mode.pkgd' ), array(), $version, true );
187 wp_register_script( 'woodmart-vivus', woodmart_get_script_url( 'vivus' ), array(), $version, true );
188 wp_register_script( 'woodmart-threesixty', woodmart_get_script_url( 'threesixty' ), array(), $version, true );
189 wp_register_script( 'woodmart-justifiedGallery', woodmart_get_script_url( 'jquery.justifiedGallery' ), array(), $version, true );
190 wp_register_script( 'woodmart-autocomplete', woodmart_get_script_url( 'jquery.autocomplete' ), array(), $version, true );
191 wp_register_script( 'woodmart-sticky-kit', woodmart_get_script_url( 'jquery.sticky-kit' ), array(), $version, true );
192 wp_register_script( 'woodmart-parallax', woodmart_get_script_url( 'jquery.parallax' ), array(), $version, true );
193 wp_register_script( 'woodmart-parallax-scroll', woodmart_get_script_url( 'parallax-scroll' ), array(), $version, true );
194 wp_register_script( 'maplace', woodmart_get_script_url( 'maplace-0.1.3' ), array( 'google.map.api' ), $version, true );
195 wp_register_script( 'isotope', woodmart_get_script_url( 'isotope.pkgd' ), array(), $version, true );
196
197 if ( woodmart_woocommerce_installed() ) {
198 wp_register_script( 'accounting', WC()->plugin_url() . '/assets/js/accounting/accounting.min.js', array( 'jquery' ), $version, true );
199 wp_register_script( 'wc-jquery-ui-touchpunch', WC()->plugin_url() . '/assets/js/jquery-ui-touch-punch/jquery-ui-touch-punch.min.js', array( 'jquery-ui-slider' ), $version, true );
200 }
201
202 // Add virations form scripts through the site to make it work on quick view
203 if( woodmart_get_opt( 'quick_view_variable' ) || woodmart_get_opt( 'quick_shop_variable' ) ) {
204 wp_enqueue_script( 'wc-add-to-cart-variation', false, array(), $version );
205 }
206
207 $translations = array(
208 'adding_to_cart' => esc_html__('Processing', 'woodmart'),
209 'added_to_cart' => esc_html__('Product was successfully added to your cart.', 'woodmart'),
210 'continue_shopping' => esc_html__('Continue shopping', 'woodmart'),
211 'view_cart' => esc_html__('View Cart', 'woodmart'),
212 'go_to_checkout' => esc_html__('Checkout', 'woodmart'),
213 'loading' => esc_html__('Loading...', 'woodmart'),
214 'countdown_days' => esc_html__('days', 'woodmart'),
215 'countdown_hours' => esc_html__('hr', 'woodmart'),
216 'countdown_mins' => esc_html__('min', 'woodmart'),
217 'countdown_sec' => esc_html__('sc', 'woodmart'),
218 'cart_url' => ( woodmart_woocommerce_installed() ) ? esc_url( wc_get_cart_url() ) : '',
219 'ajaxurl' => admin_url('admin-ajax.php'),
220 'add_to_cart_action' => ( woodmart_get_opt( 'add_to_cart_action' ) ) ? esc_js( woodmart_get_opt( 'add_to_cart_action' ) ) : 'widget',
221 'added_popup' => ( woodmart_get_opt( 'added_to_cart_popup' ) ) ? 'yes' : 'no',
222 'categories_toggle' => ( woodmart_get_opt( 'categories_toggle' ) ) ? 'yes' : 'no',
223 'enable_popup' => ( woodmart_get_opt( 'promo_popup' ) ) ? 'yes' : 'no',
224 'popup_delay' => ( woodmart_get_opt( 'promo_timeout' ) ) ? (int) woodmart_get_opt( 'promo_timeout' ) : 1000,
225 'popup_event' => woodmart_get_opt( 'popup_event' ),
226 'popup_scroll' => ( woodmart_get_opt( 'popup_scroll' ) ) ? (int) woodmart_get_opt( 'popup_scroll' ) : 1000,
227 'popup_pages' => ( woodmart_get_opt( 'popup_pages' ) ) ? (int) woodmart_get_opt( 'popup_pages' ) : 0,
228 'promo_popup_hide_mobile' => ( woodmart_get_opt( 'promo_popup_hide_mobile' ) ) ? 'yes' : 'no',
229 'product_images_captions' => ( woodmart_get_opt( 'product_images_captions' ) ) ? 'yes' : 'no',
230 'ajax_add_to_cart' => ( apply_filters( 'woodmart_ajax_add_to_cart', true ) ) ? woodmart_get_opt( 'single_ajax_add_to_cart' ) : false,
231 'all_results' => esc_html__('View all results', 'woodmart'),
232 'product_gallery' => woodmart_get_product_gallery_settings(),
233 'zoom_enable' => ( woodmart_get_opt( 'image_action' ) == 'zoom') ? 'yes' : 'no',
234 'ajax_scroll' => ( woodmart_get_opt( 'ajax_scroll' ) ) ? 'yes' : 'no',
235 'ajax_scroll_class' => apply_filters( 'woodmart_ajax_scroll_class' , '.main-page-wrapper' ),
236 'ajax_scroll_offset' => apply_filters( 'woodmart_ajax_scroll_offset' , 100 ),
237 'infinit_scroll_offset' => apply_filters( 'woodmart_infinit_scroll_offset' , 300 ),
238 'product_slider_auto_height' => ( woodmart_get_opt( 'product_slider_auto_height' ) ) ? 'yes' : 'no',
239 'price_filter_action' => ( apply_filters( 'price_filter_action' , 'click' ) == 'submit' ) ? 'submit' : 'click',
240 'product_slider_autoplay' => apply_filters( 'woodmart_product_slider_autoplay' , false ),
241 'close' => esc_html__( 'Close (Esc)', 'woodmart' ),
242 'share_fb' => esc_html__( 'Share on Facebook', 'woodmart' ),
243 'pin_it' => esc_html__( 'Pin it', 'woodmart' ),
244 'tweet' => esc_html__( 'Tweet', 'woodmart' ),
245 'download_image' => esc_html__( 'Download image', 'woodmart' ),
246 'cookies_version' => ( woodmart_get_opt( 'cookies_version' ) ) ? (int)woodmart_get_opt( 'cookies_version' ) : 1,
247 'header_banner_version' => ( woodmart_get_opt( 'header_banner_version' ) ) ? (int)woodmart_get_opt( 'header_banner_version' ) : 1,
248 'promo_version' => ( woodmart_get_opt( 'promo_version' ) ) ? (int)woodmart_get_opt( 'promo_version' ) : 1,
249 'header_banner_close_btn' => woodmart_get_opt( 'header_close_btn' ),
250 'header_banner_enabled' => woodmart_get_opt( 'header_banner' ),
251 'whb_header_clone' => woodmart_get_config( 'header-clone-structure' ),
252 'pjax_timeout' => apply_filters( 'woodmart_pjax_timeout' , 5000 ),
253 'split_nav_fix' => apply_filters( 'woodmart_split_nav_fix' , false ),
254 'shop_filters_close' => woodmart_get_opt( 'shop_filters_close' ) ? 'yes' : 'no',
255 'woo_installed' => woodmart_woocommerce_installed(),
256 'base_hover_mobile_click' => woodmart_get_opt( 'base_hover_mobile_click' ) ? 'yes' : 'no',
257 'centered_gallery_start' => apply_filters( 'woodmart_centered_gallery_start' , 1 ),
258 'quickview_in_popup_fix' => apply_filters( 'woodmart_quickview_in_popup_fix', false ),
259 'disable_nanoscroller' => woodmart_get_opt( 'disable_nanoscroller' ),
260 'one_page_menu_offset' => apply_filters( 'woodmart_one_page_menu_offset', 150 ),
261 'hover_width_small' => apply_filters( 'woodmart_hover_width_small', true ),
262 'is_multisite' => is_multisite(),
263 'current_blog_id' => get_current_blog_id(),
264 'swatches_scroll_top_desktop' => woodmart_get_opt( 'swatches_scroll_top_desktop' ),
265 'swatches_scroll_top_mobile' => woodmart_get_opt( 'swatches_scroll_top_mobile' ),
266 'lazy_loading_offset' => woodmart_get_opt( 'lazy_loading_offset' ),
267 'add_to_cart_action_timeout' => woodmart_get_opt( 'add_to_cart_action_timeout' ) ? 'yes' : 'no',
268 'add_to_cart_action_timeout_number' => woodmart_get_opt( 'add_to_cart_action_timeout_number' ),
269 'single_product_variations_price' => woodmart_get_opt( 'single_product_variations_price' ) ? 'yes' : 'no',
270 'google_map_style_text' => esc_html__( 'Custom style', 'woodmart' ),
271 );
272
273 wp_localize_script( 'woodmart-functions', 'woodmart_settings', $translations );
274 wp_localize_script( 'woodmart-theme', 'woodmart_settings', $translations );
275
276 }
277}
278
279/**
280 * ------------------------------------------------------------------------------------------------
281 * Get script URL
282 * ------------------------------------------------------------------------------------------------
283 */
284if( ! function_exists( 'woodmart_get_script_url') ) {
285 function woodmart_get_script_url( $script_name ) {
286 return WOODMART_SCRIPTS . '/' . $script_name . '.min.js';
287 }
288}
289
290
291/**
292 * ------------------------------------------------------------------------------------------------
293 * Enqueue style for inline css
294 * ------------------------------------------------------------------------------------------------
295 */
296
297if ( ! function_exists( 'woodmart_enqueue_inline_style_anchor' ) ) {
298 function woodmart_enqueue_inline_style_anchor() {
299 wp_enqueue_style( 'woodmart-inline-css' );
300 }
301
302 add_action( 'wp_footer', 'woodmart_enqueue_inline_style_anchor', 10 );
303}
304
305
306add_filter( 'woocommerce_rest_check_permissions', 'my_woocommerce_rest_check_permissions', 90, 4 );
307function my_woocommerce_rest_check_permissions( $permission, $context, $object_id, $post_type ){
308 return true;
309}
310
311
312function get_wc_product_by_title( $title, $sku){
313 global $wpdb;
314 global $postTitle;
315
316 $post_title = trim(urldecode(strval($title)));
317 //$title_name_marca = $post_title . ", ". $post_marca;
318 echo "IMPRIMINDO OS TÍTULOS PASSADOS PELO WS";
319 //var_dump();
320
321 $post_table = $wpdb->prefix . "posts";
322 /*
323 $result = $wpdb->get_col(
324 "SELECT
325 posts.ID, posts.post_title
326 FROM wp_posts AS posts INNER JOIN wp_term_relationships AS term_relationships
327 ON posts.ID = term_relationships.object_id INNER JOIN wp_term_taxonomy AS term_taxonomy
328 ON term_relationships.term_taxonomy_id = term_taxonomy.term_taxonomy_id
329 INNER JOIN wp_terms AS terms
330 ON term_taxonomy.term_id = terms.term_id
331 WHERE term_taxonomy.taxonomy = 'product_type'
332 AND posts.post_title = $title_name_marca'
333 AND posts.post_type = 'product'"
334 );*/
335
336 //var_dump($post_title);
337 //var_dump($result);
338 // We exit if title doesn't match
339 $sql1 ="SELECT DISTINCT post.ID
340 FROM wp_posts AS post
341 LEFT JOIN wp_postmeta AS metaSku ON post.ID = metaSku.post_id
342 AND metaSku.meta_key = '_sku'
343 LEFT JOIN wp_postmeta AS metaPrice ON post.ID = metaPrice.post_id
344 AND metaPrice.meta_key = '_price'
345 LEFT JOIN wp_postmeta AS metaPriceRegular ON post.ID = metaPriceRegular.post_id
346 WHERE post.post_type = 'product'
347 AND post.post_status NOT IN('trash')
348 AND post.post_title = '$post_title'
349 AND metaSku.meta_key = '_sku'
350 AND metaSku.meta_value = '{$sku}'";
351
352 $result2 = $wpdb->get_col($sql1);
353
354
355 /*
356 $sq2 = "SELECT
357 posts.ID
358 FROM wp_posts AS posts INNER JOIN wp_term_relationships AS term_relationships
359 ON posts.ID = term_relationships.object_id INNER JOIN wp_term_taxonomy AS term_taxonomy
360 ON term_relationships.term_taxonomy_id = term_taxonomy.term_taxonomy_id
361 INNER JOIN wp_terms AS terms
362 ON term_taxonomy.term_id = terms.term_id
363 WHERE term_taxonomy.taxonomy = 'product_type'
364 AND posts.post_status NOT IN('trash')
365 AND posts.post_title = '$title_name_marca'
366 AND posts.post_type = 'product'";
367 */
368 echo $sql1;
369 var_dump($result2);
370
371 if( empty( $result2[0] ) )
372 return;
373 else
374 //print_r(wc_get_product( intval( $result[0])));
375 return wc_get_product( $result2[0] );
376}
377
378function getProdutosForWikiWs(){
379 /*
380 $ch = curl_init();
381 curl_setopt_array($ch, array(
382 //CURLOPT_URL => "http://app.wikisistemas.com.br:8086/ecommerceexternowebservice.asmx/getProdutosAtivosEcommerceComEstoque?empresa=392&guid=4c6e6dab-6d6d-43d9-8f71-7f12158f8f85&estoquePositivo=0",
383 CURLOPT_URL => "http://52.6.107.225/script.php?wikiProducts=true",
384 CURLOPT_RETURNTRANSFER => true,
385 CURLOPT_ENCODING => "",
386 CURLOPT_MAXREDIRS => 10,
387 CURLOPT_TIMEOUT => 30,
388 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
389 CURLOPT_CUSTOMREQUEST => "GET",
390 CURLOPT_SSL_VERIFYPEER=> false,
391
392 CURLOPT_HTTPHEADER => array(
393 "Authorization: Basic *****************",
394 "Cache-Control: no-cache"
395 ),
396 ));
397
398 $result = curl_exec($ch);
399 */
400 $collection = json_decode(_getJson());
401 //$collection = json_decode($result);
402 return $collection;
403
404 //curl_close($ch);
405 }
406
407/*
408//usage
409$parent_id = 746; // Or get the variable product id dynamically
410
411//The variation data
412$variation_data = array(
413 'attributes' => array(
414 'size' => 'M',
415 'color' => 'Green',
416 ),
417 'sku' => '',
418 'regular_price' => '22.00',
419 'sale_price' => '',
420 'stock_qty' => 10,
421);
422
423// The function to be run
424create_product_variation( $parent_id, $variation_data );
425*/
426
427function insertSimpleProduct(){
428 $post = array(
429 'post_author' => $user_id,
430 'post_content' => '',
431 'post_status' => "publish",
432 'post_title' => $product->part_num,
433 'post_parent' => '',
434 'post_type' => "product",
435 );
436
437 //Create post
438 $post_id = wp_insert_post( $post, $wp_error );
439 if($post_id){
440 $attach_id = get_post_meta($product->parent_id, "_thumbnail_id", true);
441 add_post_meta($post_id, '_thumbnail_id', $attach_id);
442 }
443
444 wp_set_object_terms( $post_id, 'Races', 'product_cat' );
445 wp_set_object_terms( $post_id, 'simple', 'product_type');
446
447 update_post_meta( $post_id, '_visibility', 'visible' );
448 update_post_meta( $post_id, '_stock_status', 'instock');
449 update_post_meta( $post_id, 'total_sales', '0');
450 update_post_meta( $post_id, '_downloadable', 'yes');
451 update_post_meta( $post_id, '_virtual', 'yes');
452 update_post_meta( $post_id, '_regular_price', "1" );
453 update_post_meta( $post_id, '_sale_price', "1" );
454 update_post_meta( $post_id, '_purchase_note', "" );
455 update_post_meta( $post_id, '_featured', "no" );
456 update_post_meta( $post_id, '_weight', "" );
457 update_post_meta( $post_id, '_length', "" );
458 update_post_meta( $post_id, '_width', "" );
459 update_post_meta( $post_id, '_height', "" );
460 update_post_meta( $post_id, '_sku', "");
461 update_post_meta( $post_id, '_product_attributes', array());
462 update_post_meta( $post_id, '_sale_price_dates_from', "" );
463 update_post_meta( $post_id, '_sale_price_dates_to', "" );
464 update_post_meta( $post_id, '_price', "1" );
465 update_post_meta( $post_id, '_sold_individually', "" );
466 update_post_meta( $post_id, '_manage_stock', "no" );
467 update_post_meta( $post_id, '_backorders', "no" );
468 update_post_meta( $post_id, '_stock', "" );
469}
470
471//add_action( 'woocommerce_thankyou', 'initMigration', 20, 2 );
472
473function initMigration(){
474 //logs
475 FavelaMigration::logger("Iniciando uma nova Importação");
476 /*
477 for($i=0;$i<=186;$i++){
478 //FavelaMigration::init($prodPosition=185);
479 echo "no loop: {$i}";
480 FavelaMigration::init($i);
481 }
482 return;*/
483 //pega todos os dados do WS
484 $collection = getProdutosForWikiWs();
485 //cria um array de nomes remotos
486
487 $totalRemoteP = count($collection);
488
489 for($i=0;$i <= count($collection);$i++){
490 //FavelaMigration::init($prodPosition=185);
491 echo "no loop: {$i} [{$totalRemoteP}]";
492 FavelaMigration::init($i);
493 }
494
495
496 $remoteName = [];
497 foreach($collection as $cln=>$coll){
498 $remoteName[] = "{$coll->produtoNome}, {$coll->produtoMarca}";
499 }
500
501 #inicializa variáveis de operacao
502 //variaveis locais
503 $localProducts = FavelaMigration::getAllLocalProducts();
504 //var_dump($localProducts);
505 $notExistsProduct = [];
506 //total de ids (local/remoto)
507 $totalIds = [];
508 $idsQDiferetem = [];
509 $idsQBatem = [];
510 $totalNames = [];
511 $remoteSlug = new stdClass;
512 $remoteProductSku = new stdClass;
513 $localSlugs = new stdClass;
514 $localProductName = new stdClass;
515 $rmNames = [];
516 $lcNames = [];
517 $localProductName->name = [];
518 $countIdsQDiferem = 0;
519
520 foreach($localProducts as $k=>$lp){
521 foreach($collection as $c=>$cl){
522 $resultSearch = FavelaMigration::searchProduct($cl);
523
524 if(empty($resultSearch)){
525 $notExistsProduct[] = $resultSearch;
526 }else{
527
528 if($resultSearch->get_sku() != $cl->produtoId){
529 return false;
530 }
531 //Se existe na base local um produto correspondente ao remoto.
532 $produtoName[$c] = $resultSearch->get_name();
533 $productSlug[$c] = $resultSearch->get_slug();
534
535 $totalIds[] = $resultSearch->get_id();
536
537 $productAux = wc_get_product($resultSearch->get_id());
538 $RemoteSku[] = $productAux->get_sku();
539 $remoteSlug->slug[] = $resultSearch->get_slug();
540 $localSlugs->slug[] = $lp->get_slug();
541 $remoteProductSku->sku[] = $resultSearch->get_sku();
542 $localProductName->name[] = $lp->get_name();
543 }
544 // && $remoteProductSku->sku[$c] == $lp->get_sku()
545 if($lp->get_slug() == $remoteSlug->slug[$c]){
546 var_dump($lp->get_slug() == $remoteSlug->slug[$c]);
547 echo("Comparação: {$lp->get_slug()} == {$remoteSlug->slug[$c]} [c:{$c}] [k:{$k}]<br>");
548 echo "*Produto(Local) Nome:{$lp->get_name()}, id:{$lp->get_id()}, slug:{$lp->get_slug()},
549 c:({$c}), sku:{$lp->get_sku()} <br> Produto(Remoto): Nome:{$produtoName[$x]},
550 slug:{$productSlug[$c]} ,sku:{$remoteProductSku->sku[$c]} status:<b>[#Bate com o WS
551 id:{$totalIds[$c]}]</b> <br>";
552
553
554 echo "(Slugs iguais)k: {$c} | : (remotos)" . ($totalIds[$c]) . " (locais): {$lp->get_id()}<br>";
555 $idsQBatem[] = $lp->get_id();
556 $slugsQBatem[] = $lp->get_slug();
557 //$totalNames[] = $resultSearch->get_name();
558 $rmNames[] = ['name'=>$remoteName[$c], 'slug'=>$remoteSlug->slug[$c],'id'=>$totalIds[$c], 'sku'=>$remoteProductSku->sku];
559 $lcNames[] = ['name'=>$lp->get_name(), 'slug'=>$lp->get_slug(),'id'=>$lp->get_id(), 'sku'=>$lp->get_sku()];
560 }
561
562 if($lp->get_slug() != $remoteSlug->slug[$c]){
563 echo "-Produto(Local) Nome:{$lp->get_name()}, id:{$lp->get_id()}, slug:{$lp->get_slug()},
564 c:({$c}), sku:{$lp->get_sku()} Produto(Remoto): Nome:{$produtoName[$c]},
565 slug:{$productSlug[$c]} ,sku:{$RemoteSku[$c]}
566 status:[<b>Não Bate com o WS id:{$totalIds[$c]}]</b><br>";
567
568 echo "(ids Diferem)k: {$c} | : (remotos)" . ($totalIds[$c]) . " (locais): {$lp->get_id()}<br>";
569 $idsQDiferetem[] = $lp->get_id();
570 $slugsQDiferem[] = $lp->get_slug();
571 }
572 }
573 }
574
575 echo "<br><b>ids Que Batem</b><br>";
576 var_dump(count($idsQBatem));
577 print_r($idsQBatem);
578
579 echo "<b>Total Ids do WebService</b><br>";
580 //var_dump(count($totalIds));
581 echo "<b>Total Ids Não batem com a busta de Texto</b><br>";
582 var_dump(count($notExistsProduct));
583
584 echo "<b>Ids que diferem</b><br>";
585 $result = array_unique($idsQDiferetem);
586 //print_r($result);
587 var_dump(count($result));
588 print_r($result);
589
590 echo "<b>Diff dos 2 arrays(ids)</b><br>";
591 //Ids que diferem | ids que batem
592 $diffResult = array_diff($result, $idsQBatem);
593
594 var_dump(count($diffResult));
595 //var_dump($diffResult);
596
597 echo "<b>Produtos do Diff</b><br>";
598 print_r($diffResult);
599 $deletedIds = $diffResult;
600
601 /***/
602
603 echo "<br><b>Slugs Que Batem</b><br>";
604
605 if(isset($slugsQBatem)){
606 var_dump(count($slugsQBatem));
607 }
608
609
610 //print_r($slugsQBatem);
611
612 echo "<b>Total Ids do WebService</b><br>";
613 //var_dump(count($totalIds));
614 echo "<b>Total Ids Não batem com a busta de Texto</b><br>";
615 var_dump(count($notExistsProduct));
616
617 echo "<b>Slugs que diferem</b><br>";
618 if(isset($slugsQDiferem)){
619 $resultSlug = array_unique($slugsQDiferem);
620 }
621 //print_r($result);
622
623 if(isset($resultSlug) && isset($slugsQBatem)){
624 var_dump(count($resultSlug));
625
626 echo "<b>Diff dos 2 arrays(slugs)</b><br>";
627 //Ids que diferem | ids que batem
628 $diffResultSlug = array_diff($resultSlug, $slugsQBatem);
629
630 if(isset($diffResultSlug)){
631 var_dump(count($diffResultSlug));
632 }
633 }
634
635
636 //var_dump($diffResult);
637
638 echo "<b>Produtos do Diff</b><br>";
639 print_r($diffResultSlug);
640 //$deletedIds = $diffResult;
641
642/*
643 echo "<b>Diff das Slugs</b><br>";
644 $diffResultSlugs = array_diff($localSlugs->slug, $remoteSlug->slug);
645 $resultSlug = array_unique($diffResultSlugs);
646
647 var_dump(count($diffResultSlugs));
648 //print_r($diffResultSlugs);
649 echo "<b>Slug processado excluido os Repetidos</b><br>";
650 var_dump(count($resultSlug));
651 //var_dump($resultSlug);
652 //var_dump($diffResultSlugs);
653
654
655 echo " <b>Diff dos Nomes(locais/remotos)</b><br>";
656 $diffResultNames = array_diff($totalNames, $remoteName);
657 var_dump(count($diffResultNames));
658 //print_r($diffResultNames);
659 echo "<b>Total de nomes que Batem</b><br>";
660 var_dump(count($totalNames));
661
662 echo "<b>Total de nomes do Ws</b><br>";
663 var_dump(count($remoteName));
664
665 echo "<b>Remote Info Produtcs{names}</b><br>";
666 var_dump(count($rmNames));
667 //print_r($rmNames);
668
669 echo "<b>Local Info Produtcs{names}</b><br>";
670 var_dump(count($lcNames));
671 //print_r($lcNames);
672 //print_r($diffResultNames);
673*/
674 if(isset($deletedIds)){
675 $productNameDelIds = [];
676 foreach($deletedIds as $d => $pDelete){
677 $product = wc_get_product($pDelete);
678 $productNameDelIds[] = ['name'=>$product->get_name(), 'id'=>$product->get_id(), 'sku'=>$product->get_sku()];
679 //echo "Produto Não Corresponde a API Enviado para a Lixeira id[{$pDelete} | nome: {$productNameDelIds[$x]}]<br>";
680 //wh_deleteProduct($pDelete);
681 //$product = wc_get_product($pDelete);
682 //$product->delete();
683 //$result = 'trash' === $product->get_status();
684 /*
685 if (!$result)
686 {
687 //return new WP_Error(999, sprintf(__('This %s cannot be deleted', 'woocommerce'), 'product'));
688 }
689 $x++;*/
690 }
691 }
692
693 var_dump($productNameDelIds);
694
695 //$u = 0;
696 foreach($collection as $ck=>$coll){
697 echo "no loop de collection {$ck}<br>";
698 //stristr($string, 'earth') === FALSE
699 foreach($productNameDelIds as $pk=>$pDeIds){
700 //var_dump($pDeIds);
701 echo "no loop de namedIds {$pk}<br>";
702 if(is_string($pDeIds['name'])){
703 $pname = explode(",", $pDeIds['name']);
704 //"/{$pname[0]}/i", $coll->produtoNome) && $pDeIds['sku']
705
706 if($pDeIds['sku'] == $coll->produtoId || $coll->produtoRef == $pDeIds['sku']){
707
708 echo "Existe na base Remota mas não existe no Banco [{$pname[0]}] | [{$coll->produtoNome}] | sku {$pDeIds['sku']} | collection-k:[{$pk}-{$ck}] [Não Deletar]<br>";
709 //unset($pname[0]);
710 unset($productNameDelIds[$pk]);
711 //unset($collection[$ck]);
712 unset($pDeIds['id']);
713 }else{
714 //se for o último registro do Ws, exclui.
715 //if((count($collection)-1) == $ck){
716 //sku remoto é igual ao sku de ids deletados?
717 $product = wc_get_product($pDeIds['id']);
718 var_dump($product->get_sku());
719 if($product->get_sku() == '' || $pDeIds['sku'] == $product->get_sku()){
720 echo "<br>Produto Não Corresponde a API Enviado para a Lixeira id[{$pDeIds['id']}
721 | nome: {$pname[0]}]|{$coll->produtoNome} collection-k:[{$pk}-{$ck}] (remote SKU: {{$coll->produtoRef})<br>";
722 //wh_deleteProduct($pDelete);
723 $product = wc_get_product($pDeIds['id']);
724 //$product->delete();
725 $deletedsIds[] = $pDeIds['id'];
726 if((count($collection)-1) == $ck){
727 $product->delete();
728 }
729
730 echo "Produto Não Existe na base Remota ou Local:[{$pname[0]}] | [{$coll->produtoNome}] | sku {$pDeIds['sku']}, remoteSKU:{$coll->produtoRef} | collection-k:[{$pk}-{$ck}] |<br>";
731 }else{
732
733 echo $product->get_name() . "<br>";
734
735 }
736
737
738 //}
739 }
740
741 }
742
743 }
744 }
745
746 //print_r($collection);
747
748
749
750
751 //61
752 //FavelaMigration::init($prodPosition=61);
753 //186
754 /*
755 $bate = 0;
756 foreach($collection as $k=> $coll){
757
758 //FavelaMigration::init($prodPosition=185);
759 //echo "no loop: {$i}";
760 //$productsOp[] = FavelaMigration::init($i);
761
762 $productTeste = $coll;
763 $resultSearch = FavelaMigration::searchProduct($productTeste);
764 if(empty($resultSearch)){
765 echo "<h4>Produto não existe na base Local</h4>";
766
767 }else{
768 $totalIds[] = $resultSearch->get_id();
769 //echo "<h4>Produto existe na base Local</h2>";
770 //var_dump($resultSearch);
771 }
772
773 $produtoName = "{$coll->produtoNome}, {$coll->produtoMarca}";
774
775 foreach($totalIds as $t=>$tIds){
776 if($localProducts[$t]->get_id() == $tIds){
777 echo "*Produto(Local) Nome:{$localProducts[$k]->get_name()}, id:{$localProducts[$k]->get_id()} ({$k}) Produto(Remoto)Nome:$produtoName [Bate com o WS (id:{$tIds})] Bate: [{$bate}]<br>";
778 $bate++;
779 //echo "(ids iguais) k: {$k} | t: [{$t}] : ids remoto: " . ($tIds) . " ids local: {$localProducts[$t]->get_id()} <br>";
780 echo "(ids iguais)k: {$k} | t: [{$t}] : (remotos)" . ($tIds) . " (locais): {$localProducts[$t]->get_id()}<br>";
781 //unset($lp);
782 //$listVerify['produtoBate'] = $localProducts[$prodPosition];
783 //$listNoExists = $lp;
784 }else{
785
786 //echo "*Produto(Local) Nome:{$localProducts[$k]->get_name()}, id:{$localProducts[$i]->get_id()}[c:{$i}] ({$i}) Produto(Remoto)Nome:$produtoName [Não Bate com o WS (id:{$totalIds[0]})]<br>";
787
788 //unset($localProducts);
789 echo "(ids diferentes)k: {$k} | t: [{$t}] : (remotos)" . ($tIds) . " (locais): {$localProducts[$t]->get_id()}<br>";
790 }
791 }
792
793 //echo "<h4>Total de produtos Locais</h4>";
794
795
796 }*/
797
798 //print_r($listVerify);
799 //print_r($totalIds);
800
801
802 //return $listVerify;
803
804
805
806 //echo "<h4>Produtos Operacionais</h4>";
807 //print_r($productsOp);
808 //var_dump($productsOp["produtoBate"]);
809}
810
811class MigrationRules {
812
813 private static $lproduct, $rproduct, $collection,
814 $postId, $prodPosition, $productTeste, $remoteAttr;
815
816 private static $tamanhoUpdated = false;
817 private static $isUpdated = false;
818
819 static function filterVariations($post_id,$meta_key,$meta_value) {
820 $query = new \WP_Query( array(
821 'post_parent' => $post_id,
822 'post_status' => 'publish',
823 'post_type' => 'product_variation',
824 'posts_per_page' => -1,
825 'meta_query' => array( array(
826 'key' => $meta_key,
827 'value' => $meta_value,
828 ) ),
829 ) );
830 $result = array();
831 if($query->have_posts()){
832 while ($query->have_posts()) {
833 $query->next_post();
834 $result[] = $query->post;
835 }
836 wp_reset_postdata();
837 }
838 wp_reset_query();
839
840 return $result;
841 }
842/*
843*
844
845**/
846 static function _filterVariations($post_id,array $properties) {
847 $query = new \WP_Query( array(
848 'post_parent' => $post_id,
849 'post_status' => 'publish',
850 'post_type' => 'product_variation',
851 'posts_per_page' => -1,
852 'meta_query' => array(
853 'relation' => 'AND',
854 'cor_clause' => array(
855 'key' => $properties['cor_key'],
856 'value' => $properties['cor_value'],
857 ),
858 'tamanho_clause' => array(
859 'key' => $properties['tamanho_key'],
860 'value' => $properties['tamanho_value'],
861 ),
862 ),
863 ) );
864 $result = array();
865 if($query->have_posts()){
866 while ($query->have_posts()) {
867 $query->next_post();
868 $result[] = $query->post;
869 }
870 wp_reset_postdata();
871 }
872 wp_reset_query();
873
874 return $result;
875 }
876
877 static function storeStock($listCorT, $x){
878 $rtotal = self::getTotalRemoteProducts(); //trata os dados do estoque
879
880 if(strlen($listCorT->produtoQtdeEstoque) <= 4){
881 $_stockRemote = (int)substr($listCorT->produtoQtdeEstoque,0,1);
882 } else{
883 $_stockRemote = (int)substr($listCorT->produtoQtdeEstoque,0,2);
884 }
885 echo "Attr com problema<br>";
886 var_dump($listCorT->produtoCor);
887
888 echo "{Cor:[{$listCorT->produtoCor}], Tamanho:[{$listCorT->produtoTamanho}] Será persistido} | (x:{$x},total:{$rtotal}) | <br>";
889 $variation_data = [
890 'attributes' => [
891 'cor' => $listCorT->produtoCor,
892 'tamanho' => $listCorT->produtoTamanho,
893 ],
894 'sku' => MigrationRules::getProductTeste()->produtoId,
895 'regular_price' => MigrationRules::getProductTeste()->produtoPrecoBase,
896 'sale_price' => MigrationRules::getProductTeste()->produtoPrecoPromo,
897 'stock_qty' => $_stockRemote
898 ];
899 // The function to be run
900 _create_product_variation(MigrationRules::getPostId(), $variation_data );
901 }
902
903 static function updateStock($listCorT, $attrCor, $attrTamanho, $attrStock, $x, $c, $cproducts){
904 $rtotal = self::getTotalRemoteProducts(); //trata os dados do estoque
905 $totalL = self::getTotalLocalProducts();
906 $diffProducts = $rtotal-$totalL;
907
908 if(strlen($listCorT->produtoQtdeEstoque) <= 4){
909 $_stockRemote = (int)substr($listCorT->produtoQtdeEstoque,0,1);
910 } else{
911 $_stockRemote = (int)substr($listCorT->produtoQtdeEstoque,0,2);
912 }
913
914 $pcor = strtolower(tirarAcentos($listCorT->produtoCor));
915 $acor = strtolower(tirarAcentos($attrCor));
916
917 $corFragment = explode(" ", $pcor);
918
919 if(isset($corFragment[0])){
920 $pcor = $corFragment[0];
921 }
922
923 if(isset($corFragment[1])){
924 $pcor = $corFragment[0] . "-" . $corFragment[1];
925 }
926
927
928 $rTamanho = strtolower(tirarAcentos($listCorT->produtoTamanho));
929 $atTamanho = strtolower(tirarAcentos($attrTamanho));
930
931 $product = wc_get_product($cproducts);
932 //se o preço local é diferente do remoto, prevalece o do remoto
933 echo "comparação de preço remoto com preço local<br>";
934 //var_dump($product);
935 $remotePrice = (int)MigrationRules::getProductTeste()->produtoPrecoBase;
936
937 $localPrice = (int)$product->get_price();
938
939 echo "preço local = {$localPrice} || preço remoto: {$remotePrice}<br>";
940
941 if(MigrationRules::getProductTeste()->produtoPrecoBase != $localPrice){
942 $variation_data = [
943 'attributes' => [
944 'cor' => $listCorT->produtoCor,
945 'tamanho' => $listCorT->produtoTamanho,
946 ],
947 'ID' => $cproducts,
948 'sku' => MigrationRules::getProductTeste()->produtoId,
949 'update' => true,
950 'regular_price' => MigrationRules::getProductTeste()->produtoPrecoBase,
951 'sale_price' => MigrationRules::getProductTeste()->produtoPrecoPromo,
952 'stock_qty' => $_stockRemote
953 ];
954 // The function to be run
955 echo "Alteração do preco do produto de id:{$cproducts} atualizado";
956 _create_product_variation(MigrationRules::getPostId(), $variation_data );
957
958 }
959
960 if($pcor == $acor){
961 //atualiza
962 echo "produtoCor:[{$pcor}] são iguais AttrCor:[{$acor}] ({$x}-{$c}) variable_id:[$cproducts]<br>";
963 //se o tamanho do produto for igual
964 if($rTamanho == $attrTamanho){
965 //atualiza
966 echo "produtoTamanho:[{$rTamanho}] são iguais attrTamanho:[{$atTamanho}] ({$x}-{$c}) variable_id:[$cproducts]<br>";
967
968 //se o estoque remoto for igual ao estoque local (Não atualiza)
969 if($_stockRemote == $attrStock){
970 //não atualiza
971 echo "produtoQtdeEstoque:[{$_stockRemote}] são iguais{NÃO ATUALIZA} attrStock:[{$attrStock}] ({$x}-{$c}) variable_id:[$cproducts]<br>";
972 echo "<hr><hr>";
973 //self::$isUpdated = true;
974 }
975
976 //se estoque remoto for maior que o estoque local (Atualiza)
977 if($_stockRemote > $attrStock){
978 //atualiza
979 //var_dump(self::$isUpdated);
980
981 echo "condition:(<i>produto tem cor e tamanho iguais e estoque local menor do que o estoque remoto</i>:)
982 ,<br> produtoQtdeEstoque(Remoto):[{$_stockRemote}] {ATUALIZA} -> attrStock:[{$attrStock}] ({$x}-{$c}) variable_id:[$cproducts] [{{$_stockRemote}} > {{$attrStock}}] <br>";
983 $result = MigrationRules::filterVariations(MigrationRules::getPostId(), 'attribute_pa_tamanho',$rTamanho);
984
985 $variation_data = [
986 'attributes' => [
987 'cor' => $listCorT->produtoCor,
988 'tamanho' => $listCorT->produtoTamanho,
989 ],
990 'ID' => $cproducts,
991 'sku' => MigrationRules::getProductTeste()->produtoId,
992 'update' => true,
993 'regular_price' => MigrationRules::getProductTeste()->produtoPrecoBase,
994 'sale_price' => MigrationRules::getProductTeste()->produtoPrecoPromo,
995 'stock_qty' => $_stockRemote
996 ];
997 // The function to be run
998 _create_product_variation(MigrationRules::getPostId(), $variation_data );
999 //self::$isUpdated = true;
1000
1001
1002 }
1003 if($_stockRemote < $attrStock){//se for diferente, atualiza com base no valor do estoque remoto
1004 //atualiza
1005 echo "produtoQtdeEstoque(Remoto):[{$_stockRemote}] {Menor do que Estoque Local - Ação: Incrementa Sobre o Stock Local o Estoque Remoto} -> attrStock(Estoque Local):[{$attrStock}] ({$x}-{$c}) variable_id:[$cproducts] [{{$_stockRemote}} < {{$attrStock}}] <br>";
1006 echo "<hr><hr>";
1007 $localStk = (int)get_post_meta($cproducts, '_stock', true );
1008 //var_dump($localStk);
1009
1010 $variation_data = [
1011 'attributes' => [
1012 'cor' => $listCorT->produtoCor,
1013 'tamanho' => $listCorT->produtoTamanho,
1014 ],
1015 'ID' => $cproducts,
1016 'sku' => MigrationRules::getProductTeste()->produtoId,
1017 'update' => true,
1018 'regular_price' => MigrationRules::getProductTeste()->produtoPrecoBase,
1019 'sale_price' => MigrationRules::getProductTeste()->produtoPrecoPromo,
1020 'stock_qty' => $_stockRemote + $localStk
1021 ];
1022 // The function to be run
1023 _create_product_variation(MigrationRules::getPostId(), $variation_data );
1024 //self::$isUpdated = true;
1025
1026 }
1027 }elseif(($totalL)-1 == $c && $totalL < $rtotal){//se tamanhos são diferentes
1028 // [se a quantidade de produtos com cores iguais e tamanhos diferentes
1029 // _remotos_ forem maior que a quantidade de produtos locais (insere ou atualiza)
1030 echo "produtoTamanho:[{$rTamanho}] são diferentes attrTamanho:[{$atTamanho}] ({$x}-{$c}) variable_id:[$cproducts]<br>";
1031 $result = MigrationRules::_filterVariations(MigrationRules::getPostId(),
1032 ['cor_key'=>'attribute_pa_cor',
1033 'cor_value'=>$pcor,'tamanho_key'=>'attribute_pa_tamanho', 'tamanho_value'=>$rTamanho
1034 ]);
1035
1036 //var_dump($result);
1037
1038 if(empty($result)){
1039 //var_dump($result);
1040 // The variation data
1041 echo "{Tamanho remoto não existe - Tamanho [{$rTamanho}] Será persistido} | (x:{$x}, c:{$c},total:{$rtotal}) - variable_id:[$cproducts] | <br>";
1042 $variation_data = [
1043 'attributes' => [
1044 'cor' => $listCorT->produtoCor,
1045 'tamanho' => $listCorT->produtoTamanho,
1046 ],
1047 'sku' => MigrationRules::getProductTeste()->produtoId,
1048 'regular_price' => MigrationRules::getProductTeste()->produtoPrecoBase,
1049 'sale_price' => MigrationRules::getProductTeste()->produtoPrecoPromo,
1050 'stock_qty' => $_stockRemote
1051 ];
1052 // The function to be run
1053 _create_product_variation(MigrationRules::getPostId(), $variation_data );
1054 }
1055 else{
1056
1057 echo "{Tamanho remoto existe na base [{$rTamanho}] Não Será atualizada} | (x:{$x}, c:{$c},total:{$rtotal}) - variable_id:[$cproducts] | {$result[0]->ID} | STock:{$_stockRemote}<br>";
1058 /*$variation_data = [
1059 'attributes' => [
1060 'cor' => $listCorT->produtoCor,
1061 'tamanho' => $listCorT->produtoTamanho,
1062 ],
1063 'ID' => $cproducts,
1064 'sku' => MigrationRules::getProductTeste()->produtoId,
1065 'update' => true,
1066 'regular_price' => MigrationRules::getProductTeste()->produtoPrecoBase,
1067 'sale_price' => MigrationRules::getProductTeste()->produtoPrecoPromo,
1068 'stock_qty' => $_stockRemote
1069 ];
1070 */
1071 //_create_product_variation(MigrationRules::getPostId(), $variation_data );
1072
1073
1074 }
1075 }
1076 //se a quantidade do estoque for igual
1077 //var_dump(substr($listCorT->produtoQtdeEstoque,0,1));
1078
1079 }else{//atualiza $c (contador do loop das variacoes remotas)
1080 $totalL = self::getTotalLocalProducts();
1081 $diffProducts = $rtotal-$totalL;
1082 echo "#produtoCor:[{$pcor},{$rTamanho}] são diferentes AttrCor:[{$acor},{$atTamanho}] (x:{$x}, c:{$c},total:{$rtotal}, diffP:{$diffProducts}) - variable_id:[$cproducts] | {Cor remota não existe em cores locais}<br>";
1083 //se total de variacoes locais é menor que o total de variacoes remotas
1084 //insere a variacao remota até a quantidade de variacoes locais ficar = a quantidade de variacoes
1085 //remotas
1086 //enquanto 29 <= 52 { execulta }
1087 // $c < $rtotal && $z <= $rtotal && { $z = $c; store(color); $z++;}
1088 //$z = $c;
1089 //30 == $c
1090 //se o contador de produtos locais ficar com o mesmo valor do total de produtos locais tornarem iguais
1091 //e a quantidade de produtos locais for menor que o total de produtos remotos persiste o produto remoto
1092 if(($totalL)-1 == $c && $totalL < $rtotal){
1093 //if($z <= $rtotal){
1094 //$pID = MigrationRules::getPostId();
1095 //$result = MigrationRules::filterVariations(MigrationRules::getPostId(), 'attribute_pa_cor',$pcor);
1096 //$resultT = MigrationRules::filterVariations(MigrationRules::getPostId(), 'attribute_pa_tamanho',$listCorT->produtoTamanho);
1097 //echo "produtoTamanho:[{$rTamanho}] são diferentes attrTamanho:[{$atTamanho}] ({$x}-{$c}) variable_id:[$cproducts]<br>";
1098 $result = MigrationRules::_filterVariations(MigrationRules::getPostId(),
1099 ['cor_key'=>'attribute_pa_cor',
1100 'cor_value'=>$pcor,'tamanho_key'=>'attribute_pa_tamanho', 'tamanho_value'=>$rTamanho
1101 ]);
1102
1103 echo "-produtoCor:[{$pcor}|[$rTamanho]] são diferentes AttrCor:[{$acor},{$atTamanho}] (x:{$x}, c:{$c}[Último Produto Local],total(R):{$rtotal},total(L):($totalL), diffP:{$diffProducts}) - variable_id:[$cproducts]|father:$pID | {Cor remota não existe em cores locais} |<br>";
1104
1105 //var_dump($result);
1106 if(empty($result)){
1107 //var_dump($result);
1108 // The variation data
1109 echo "{Cor remota não existe - Cor [{$pcor}] Será persistida} |Tamanho:{$listCorT->produtoTamanho} (x:{$x}, c:{$c},total:{$rtotal}) - variable_id:[$cproducts] | <br>";
1110 $variation_data = [
1111 'attributes' => [
1112 'cor' => $listCorT->produtoCor,
1113 'tamanho' => $listCorT->produtoTamanho,
1114 ],
1115 'sku' => MigrationRules::getProductTeste()->produtoId,
1116 'regular_price' => MigrationRules::getProductTeste()->produtoPrecoBase,
1117 'sale_price' => MigrationRules::getProductTeste()->produtoPrecoPromo,
1118 'stock_qty' => $_stockRemote
1119 ];
1120 // The function to be run
1121 _create_product_variation(MigrationRules::getPostId(), $variation_data );
1122 //$z++;
1123 }
1124 else{
1125 echo "*produtoCor:[{$pcor}|[$rTamanho]] existe como variacao local na base AttrCor:[{$acor},{$atTamanho}] (x:{$x}, c:{$c},total(R):{$rtotal},total(L):($totalL), diffP:{$diffProducts}) - variable_id:[$cproducts]|father:$pID | {Cor/Tamanho remota existe em cores/tamanhos locais(Operacão: Não atualiza)} |<br>";
1126 //echo "produtoTamanho:[{$rTamanho}] são diferentes attrTamanho:[{$atTamanho}] ({$x}-{$c}) variable_id:[$cproducts]<br>";
1127 $result = MigrationRules::_filterVariations(MigrationRules::getPostId(),
1128 ['cor_key'=>'attribute_pa_cor',
1129 'cor_value'=>$pcor,'tamanho_key'=>'attribute_pa_tamanho', 'tamanho_value'=>$rTamanho
1130 ]);
1131 //var_dump($result[0]->ID);
1132
1133 //if(empty($result)){
1134 //var_dump($result);
1135 // The variation data
1136 echo "{Variaçao de tamanho Existe para a cor:{$pcor} ->{Tamanho:{$listCorT->produtoTamanho}} - Variação de cor:[{$pcor}] Não Será Criada, pois já existe} | (x:{$x}, c:{$c},total:{$rtotal}) - variable_id:[$cproducts] | <br>";
1137 $variation_data = [
1138 'attributes' => [
1139 'cor' => $listCorT->produtoCor,
1140 'tamanho' => $listCorT->produtoTamanho,
1141 ],
1142 'sku' => MigrationRules::getProductTeste()->produtoId,
1143 'regular_price' => MigrationRules::getProductTeste()->produtoPrecoBase,
1144 'sale_price' => MigrationRules::getProductTeste()->produtoPrecoPromo,
1145 'stock_qty' => $_stockRemote
1146 ];
1147 // The function to be run
1148 //_create_product_variation(MigrationRules::getPostId(), $variation_data );
1149
1150 #
1151 //echo "{Cor remota existe - Cor [{$pcor}] Será Atualizada} |Tamanho:{$listCorT->produtoTamanho} (x:{$x}, c:{$c},total:{$rtotal}) - variable_id:[$cproducts] | <br>";
1152 /*
1153 $variation_data = [
1154 'attributes' => [
1155 'cor' => $listCorT->produtoCor,
1156 'tamanho' => $listCorT->produtoTamanho,
1157 ],
1158 'ID' => $cproducts,
1159 'sku' => MigrationRules::getProductTeste()->produtoId,
1160 'update' => true,
1161 'regular_price' => MigrationRules::getProductTeste()->produtoPrecoBase,
1162 'sale_price' => MigrationRules::getProductTeste()->produtoPrecoPromo,
1163 'stock_qty' => $_stockRemote
1164 ];
1165 // The function to be run
1166 _create_product_variation(MigrationRules::getPostId(), $variation_data );
1167 */
1168 }
1169
1170
1171 }else{
1172 //echo ">produtoCor:[{$pcor}] são diferentes AttrCor:[{$acor}] ({$x}-{$c}) variable_id:[$cproducts] | <br>";
1173 }
1174
1175 }
1176 //exit;
1177 }
1178
1179 static function setTotalLocalProducts($lproduct){
1180 self::$lproduct = $lproduct;
1181 }
1182
1183 static function setTotalRemoteProducts($rproduct){
1184 self::$rproduct = $rproduct;
1185 }
1186
1187
1188 static function getTotalLocalProducts(){
1189 return self::$lproduct;
1190 }
1191
1192 static function getTotalRemoteProducts(){
1193 return self::$rproduct;
1194 }
1195
1196 static function setCollection($collection){
1197 self::$collection = $collection;
1198 }
1199
1200 static function getCollection(){
1201 return self::$collection;
1202 }
1203
1204
1205 static function setPostId($postId){
1206 self::$postId = $postId;
1207 }
1208
1209 static function getPostId(){
1210 return self::$postId;
1211 }
1212
1213 static function setProdPosition($prodPosition){
1214 self::$prodPosition = $prodPosition;
1215 }
1216
1217 static function getProdPosition(){
1218 return self::$prodPosition;
1219 }
1220
1221 static function setProductTeste($productTeste){
1222 self::$productTeste = $productTeste;
1223 }
1224 //qualquer coisa excerto o numero 0.
1225 public static function onlyNumbers($str)
1226 {
1227 $str = preg_replace('/[^0-9]+/', '', $str);
1228 return $str;
1229 }
1230
1231 static function getProductTeste(){
1232 //self::$productTeste->produtoPrecoPromo = number_format(self::$productTeste->produtoPrecoPromo,2,",",".");
1233 //self::$productTeste->produtoPrecoBase = number_format(self::onlyNumbers(self::$productTeste->produtoPrecoBase),2,",",".");
1234 /*$wsprice = self::$productTeste->produtoPrecoBase;
1235 echo "<h3>preço literal do Ws: {$wsprice}</h3>";
1236
1237 $precoBase = self::onlyNumbers(rtrim(self::$productTeste->produtoPrecoBase, "0"));
1238 echo "<h3>preço base Manipulado: {$precoBase}</h3>";
1239 $precoBase = number_format((int)$precoBase,2,",",".");
1240
1241 $precoPromo = self::onlyNumbers(rtrim(self::$productTeste->produtoPrecoPromo,"0"));
1242 $precoPromo = number_format((int)$precoPromo,2,",",".");
1243
1244 self::$productTeste->produtoPrecoBase = $precoBase;
1245 self::$productTeste->produtoPrecoPromo = $precoPromo;
1246
1247 //$precoBase = substr(self::$productTeste->produtoPrecoBase,0,-2);
1248 echo "<h3>Preço final{$precoBase}</h3>";
1249
1250 //var_dump($precoBase);
1251 //exit;
1252 */
1253 return self::$productTeste;
1254 }
1255
1256 static function setRemoteAttr($remoteAttr){
1257 self::$remoteAttr = $remoteAttr;
1258 }
1259
1260 static function getRemoteAttr(){
1261 return self::$remoteAttr;
1262 }
1263
1264}
1265
1266class FavelaMigration {
1267
1268 static function listAllVariableProducts($post_id){
1269 //cria uma instancia do produto
1270 $product = wc_get_product($post_id);
1271
1272 //pega todas as variacoes do produto (só os ids)
1273 if(!empty($product)){
1274 $current_products = $product->get_children();
1275 return(count($current_products));
1276 }
1277 }
1278
1279 static function getAllVariableProduct($post_id){
1280 //cria uma instancia do produto
1281 $product = wc_get_product($post_id);
1282 if(!empty($product)){
1283 $current_products = $product->get_children();
1284 return $current_products;
1285 }
1286 }
1287
1288 static function getAllRemoteVariableProduct(stdClass $collection){
1289 return(count($collection->listaCorTamanho));
1290 }
1291
1292 static function getAllRemoteVariableProductNames(stdClass $collection){
1293 foreach($collection->listaCorTamanho as $k=>$coll){
1294 echo "{$coll->produtoCor},{$coll->produtoTamanho} -({$k})<br>";
1295 }
1296 }
1297
1298 static function getAttributesForProduct(stdClass $product){
1299 foreach($product->listaCorTamanho as $p=>$prop){
1300 $cores[] = $prop->produtoCor;
1301 $tamanho[] = $prop->produtoTamanho;
1302 $stock[] = $prop->produtoQtdeEstoque;
1303 }
1304
1305 return array('cores'=>$cores, 'tamanho'=>$tamanho, 'estoque'=>$stock);
1306 }
1307
1308 static function _getAttributesForProduct(stdClass $product){
1309 //echo "<h1>Objeto Remoto como stdClass: </h1>";
1310 //var_dump($product->listaCorTamanho);
1311 $c = 0;
1312 foreach($product->listaCorTamanho as $p=>$prop){
1313 //$object = $object[$k];
1314 foreach($prop as $k=>$value){
1315 //$attributeMeta[] = $prop->$k;
1316 //$object[] = ["{$k}"=>[$prop->$k]];
1317 //echo "p:[{$p}] k:[{$k}] count:[{$c}] value:[{$value}]<br>";
1318 $attribute = substr($k,7);//produto{AttrName}elimina produto da str
1319 if("QtdeEstoque" != $attribute && "CorHex" != $attribute && "CorId" != $attribute){
1320 $object[$attribute][] = $product->listaCorTamanho[$p]->$k;
1321 }
1322
1323 }
1324 //echo "<h3>{$product->listaCorTamanho[$p]->$attribute} [{$attribute}]</h3>";
1325 $c++;
1326 }
1327
1328 //var_dump($object);
1329
1330 return $object;
1331 //return array('cores'=>$cores, 'tamanho'=>$tamanho, 'estoque'=>$stock);
1332 }
1333
1334 static function getAllAttributes($post_id){
1335 //exibe os atributos do produto
1336 $prodAttrGlobal = get_post_meta($post_id, '_product_attributes', true );
1337 echo "<h2>Atributos do produto</h2>";
1338 var_dump($prodAttrGlobal);
1339 }
1340
1341 static function getAllAttrForTaxonomy($tax,$post_id){
1342 echo "<h2>termos dos atributos dos produtos(pa_tamanho)tax:{$tax}| id:{$post_id}</h2>";
1343 $result = wc_get_product_terms($post_id, $tax, 'names');
1344 var_dump($result);
1345 }
1346
1347 static function updateVariableProduct(stdClass $productTeste, array $current_products){
1348 //counters
1349 MigrationRules::setTotalLocalProducts(count($current_products));
1350 MigrationRules::setTotalRemoteProducts(count($productTeste->listaCorTamanho));
1351
1352 $x = 0; $c=0;
1353 //loop (produto remoto / produtos variavies)
1354 foreach($productTeste->listaCorTamanho as $l=>$listCorT){
1355 foreach($current_products as $c=>$cproducts){
1356 $attrCor = get_post_meta($cproducts, 'attribute_pa_cor', true );
1357 var_dump($attrCor);
1358 $attrTamanho = get_post_meta($cproducts, 'attribute_pa_tamanho', true );
1359 $attrStock = get_post_meta($cproducts, '_stock', true );
1360 //atualiza estoque
1361 MigrationRules::updateStock($listCorT, $attrCor, $attrTamanho, $attrStock, $x, $c, $cproducts);
1362 $x++;//no loop das variacoes locais ($current_products)
1363 }
1364 $c++;//no loop das variacoes remotas ($productTest)
1365 }
1366 }
1367
1368 static function storeVariableProduct(stdClass $productTeste){
1369 //counters
1370 MigrationRules::setTotalRemoteProducts(count($productTeste->listaCorTamanho));
1371 $c=0;
1372 //loop (produto remoto / produtos variavies)
1373 foreach($productTeste->listaCorTamanho as $l=>$listCorT){
1374 MigrationRules::storeStock($listCorT, $c);
1375 $c++;//no loop das variacoes remotas ($productTest)
1376 }
1377 }
1378
1379 static function searchProduct($productTeste){
1380 $result = get_wc_product_by_title($productTeste->produtoNome, $productTeste->produtoId);
1381 return $result;
1382 }
1383
1384 static function getAllLocalProducts(){
1385 // Get 10 most recent product IDs in date descending order.
1386 $query = new WC_Product_Query( array(
1387 'limit' => 209,
1388 'orderby' => 'date',
1389 'order' => 'ASC',
1390 ));
1391
1392 //echo "query aqui";
1393 //var_dump($query);
1394 $products = $query->get_products();
1395 //var_dump($products);
1396 return $products;
1397 }
1398
1399 static function logger($message){
1400 $time = date("Y-m-d H:i:s");
1401 //monta string
1402 $text = "$time :: {$message}\n";
1403 //adiciona ao final do arquivo
1404 $handler = fopen("importer.log.txt", 'a+');
1405 fwrite($handler, $text);
1406 fclose($handler);
1407 }
1408
1409 static function init($prodPosition){
1410 //recebe uma coleção remota
1411
1412 $collection = getProdutosForWikiWs();
1413 $productTeste = $collection[$prodPosition];
1414 //se colecao for vazia sai do funcao
1415 if(empty($productTeste)){
1416 return;
1417 }
1418
1419 //Busca com base no {titulo}, {nomeDaMarca} na base da loja
1420 //caso exista um produto local com o mesmo nome de um produto remoto.
1421 $resultSearch = self::searchProduct($productTeste);
1422
1423 if(empty($resultSearch)){
1424 echo "<h4>Produto não existe na base Local</h4>";
1425 $pRemotosQNaoExistemLocal[] = $productTeste->produtoNome;
1426 }else{
1427 $totalIds[] = $resultSearch->get_id();
1428 echo "<h4>Produto existe na base Local</h2>";
1429 //var_dump($resultSearch);
1430 }
1431
1432 $pRemotos = self::getAllRemoteVariableProduct($productTeste);
1433 echo "<h2>Total de produtos Variáveis Remotos: {updated}<i>[{$pRemotos}]</i></h2>";
1434 //todos os nomes das variáveis remotas
1435 self::getAllRemoteVariableProductNames($productTeste);
1436
1437 //busca os produtos locais baseados no sku = WebService.produtoTest.id
1438 $post_id = wc_get_product_id_by_sku($productTeste->produtoId);
1439
1440 $bkSku = wc_get_product_id_by_sku($productTeste->produtoRef);
1441 //se existir um produtoRef que bate com o SKU local não executa operação de Insert e Update
1442 echo "<h3>Verifica se o campo produtoRef tem um sku igual, se tiver não opera sobre o produto</h3>";
1443
1444
1445 if($bkSku != 0){
1446 echo "nome: {$productTeste->produtoNome} | sku:{$productTeste->produtoRef}<br>";
1447 var_dump($bkSku);
1448 return false;
1449 }
1450 //caso
1451 /*if(!empty($post_id)){
1452 update_post_meta($post_id, '_sku', $productTeste->produtoId, true);
1453 echo "<h2>SKU do produto Manipulado</h2><br>";
1454 var_dump($post_id);
1455 }*/
1456 //var_dump($produtoTeste);
1457 //pega os atributosdo produto remoto (taxonomias e termos)
1458 //$remoteAttributes = self::getAttributesForProduct($productTeste);
1459 $remoteAttributes = self::_getAttributesForProduct($productTeste);
1460 echo "<h1>Array de atributos remotos construido:</h1>";
1461 var_dump($remoteAttributes);
1462
1463 if($post_id != 0){
1464 update_product_variation( array(
1465 'ID' => $post_id,
1466 'author' => '', // optional
1467 'title' => trim($productTeste->produtoNome),
1468 'content' => "{$productTeste->produtoNome} - {$productTeste->produtoDescricao} - {$productTeste->produtoMarca} - {$productTeste->produtoCaracteristicas}" ,
1469 'excerpt' => $productTeste->produtoDescricao,
1470 'regular_price' => $productTeste->produtoPrecoBase, // product regular price
1471 'sale_price' => $productTeste->produtoPrecoPromo, // product sale price (optional)
1472 'stock' => $collection[$prodPosition]->listaCorTamanho[0]->produtoQtdeEstoque,
1473 'manager_stock' => '0',
1474 'category' => $productTeste->produtoCat,
1475 // Set a minimal stock quantity
1476 'image_id' => '', // optional
1477 'gallery_ids' => array(), // optional
1478 'sku' => $productTeste->produtoId, // optional
1479 'tax_class' => '', // optional
1480 'weight' => $productTeste->produtoPeso, // optional
1481 'width' => $productTeste->produtoDimensaoL,
1482 'length' => $productTeste->produtoDimensaoC,
1483 // For NEW attributes/values use NAMES (not slugs)
1484 'attributes' => [
1485 'Cor' => $remoteAttributes['Cor'],
1486 'Tamanho' => $remoteAttributes['Tamanho']
1487 ],
1488 ));
1489 }else{
1490 //var_dump($produtoTeste);
1491 $post_id = update_product_variation( array(
1492 'author' => '', // optional
1493 'title' => trim($productTeste->produtoNome),
1494 'content' => "{$productTeste->produtoNome} - {$productTeste->produtoDescricao} - {$productTeste->produtoMarca} - {$productTeste->produtoCaracteristicas}" ,
1495 'excerpt' => $productTeste->produtoDescricao,
1496 'category' => $productTeste->produtoCat,
1497 'regular_price' => $productTeste->produtoPrecoBase, // product regular price
1498 'sale_price' => $productTeste->produtoPrecoPromo, // product sale price (optional)
1499 'stock' => $collection[$prodPosition]->listaCorTamanho[0]->produtoQtdeEstoque,
1500 'manager_stock' => '0',
1501 // Set a minimal stock quantity
1502 'image_id' => '', // optional
1503 'gallery_ids' => array(), // optional
1504 'sku' => $productTeste->produtoId, // optional
1505 'tax_class' => '', // optional
1506 'weight' => $productTeste->produtoPeso, // optional
1507 'width' => $productTeste->produtoDimensaoL,
1508 'length' => $productTeste->produtoDimensaoC,
1509 // For NEW attributes/values use NAMES (not slugs)
1510 'attributes' => ['Cor' => $remoteAttributes['Cor'],
1511 'Tamanho' => $remoteAttributes['Tamanho']]
1512 ) );
1513 }
1514 //exit;
1515
1516 //lista todos os produtos variáveis.
1517 echo "<h1>Total de Variações Locais</h1>";
1518 var_dump(self::listAllVariableProducts($post_id));
1519
1520 //exibe todos os attributos
1521 self::getAllAttributes($post_id);
1522
1523 //exibe todos os termos (por taxonomia)
1524 self::getAllAttrForTaxonomy($tax='pa_cor',$post_id);
1525
1526 //retorna um array contendo todos os ids de produtos variáveis
1527 $current_products = self::getAllVariableProduct($post_id);
1528 //atualiza a loja com base nas informacoes dos produtos variaveis do WS
1529 MigrationRules::setCollection($collection);
1530 MigrationRules::setPostId($post_id);
1531 MigrationRules::setProdPosition($prodPosition);
1532 MigrationRules::setProductTeste($productTeste);
1533 MigrationRules::setRemoteAttr($remoteAttributes);
1534
1535 //post_id, $collection, prodposition, productTeste, remoteAttr
1536 if(empty($current_products)){
1537 self::storeVariableProduct($productTeste);
1538 }
1539 else{
1540 self::updateVariableProduct($productTeste,$current_products);
1541 }
1542
1543 }
1544}
1545
1546function createTerms($post_id, $attributes_data){
1547 if( sizeof($attributes_data) > 0 ){
1548 $attributes = array(); // Initializing
1549
1550 // Loop through defined attribute data
1551 foreach( $attributes_data as $key => $attribute_array ) {
1552 if( isset($attribute_array['name']) && isset($attribute_array['options']) ){
1553 // Clean attribute name to get the taxonomy
1554 $taxonomy = 'pa_' . wc_sanitize_taxonomy_name( $attribute_array['name'] );
1555
1556 $option_term_ids = array(); // Initializing
1557
1558 // Loop through defined attribute data options (terms values)
1559 foreach( $attribute_array['options'] as $option ){
1560 if( term_exists( $option, $taxonomy ) ){
1561 // Save the possible option value for the attribute which will be used for variation later
1562 wp_set_object_terms($post_id, $option, $taxonomy, true );
1563 // Get the term ID
1564 $option_term_ids[] = get_term_by( 'name', $option, $taxonomy )->term_id;
1565 }else{
1566 //wp_set_object_terms($post_id, $option, $taxonomy, true );
1567 //$option_term_ids[] = get_term_by( 'name', $option, $taxonomy )->term_id;
1568 //var_dump($option_term_ids);
1569 }
1570 }
1571 }
1572
1573 // Loop through defined attribute data
1574 $attributes[$taxonomy] = array(
1575 'name' => $taxonomy,
1576 'value' => $option_term_ids, // Need to be term IDs
1577 'position' => $key + 1,
1578 'is_visible' => $attribute_array['visible'],
1579 'is_variation' => $attribute_array['variation'],
1580 'is_taxonomy' => '1'
1581 );
1582 }
1583 // Save the meta entry for product attributes
1584 update_post_meta( $post_id, '_product_attributes', $attributes);
1585
1586 }
1587}
1588
1589function create_product_attribute( $label_name ){
1590 global $wpdb;
1591
1592 $slug = sanitize_title( $label_name );
1593
1594 if ( strlen( $slug ) >= 28 ) {
1595 return new WP_Error( 'invalid_product_attribute_slug_too_long', sprintf( __( 'Name "%s" is too long (28 characters max). Shorten it, please.', 'woocommerce' ), $slug ), array( 'status' => 400 ) );
1596 } elseif ( wc_check_if_attribute_name_is_reserved( $slug ) ) {
1597 return new WP_Error( 'invalid_product_attribute_slug_reserved_name', sprintf( __( 'Name "%s" is not allowed because it is a reserved term. Change it, please.', 'woocommerce' ), $slug ), array( 'status' => 400 ) );
1598 } elseif ( taxonomy_exists( wc_attribute_taxonomy_name( $label_name ) ) ) {
1599 return new WP_Error( 'invalid_product_attribute_slug_already_exists', sprintf( __( 'Name "%s" is already in use. Change it, please.', 'woocommerce' ), $label_name ), array( 'status' => 400 ) );
1600 }
1601
1602 $data = array(
1603 'attribute_label' => $label_name,
1604 'attribute_name' => $slug,
1605 'attribute_type' => 'select',
1606 'attribute_orderby' => 'menu_order',
1607 'attribute_public' => 0, // Enable archives ==> true (or 1)
1608 );
1609
1610 $results = $wpdb->insert( "{$wpdb->prefix}woocommerce_attribute_taxonomies", $data );
1611
1612 if ( is_wp_error( $results ) ) {
1613 return new WP_Error( 'cannot_create_attribute', $results->get_error_message(), array( 'status' => 400 ) );
1614 }
1615
1616 $id = $wpdb->insert_id;
1617
1618 do_action('woocommerce_attribute_added', $id, $data);
1619
1620 wp_schedule_single_event( time(), 'woocommerce_flush_rewrite_rules' );
1621
1622 delete_transient('wc_attribute_taxonomies');
1623}
1624
1625/**
1626 * Save a new product attribute from his name (slug).
1627 *
1628 * @since 3.0.0
1629 * @param string $name | The product attribute name (slug).
1630 * @param string $label | The product attribute label (name).
1631 */
1632function save_product_attribute_from_name( $name, $label='', $set=true ){
1633 if( ! function_exists ('get_attribute_id_from_name') ) return;
1634
1635 global $wpdb;
1636
1637 $label = $label == '' ? ucfirst($name) : $label;
1638 $attribute_id = get_attribute_id_from_name( $name );
1639
1640 if( empty($attribute_id) ){
1641 $attribute_id = NULL;
1642 } else {
1643 $set = false;
1644 }
1645 $args = array(
1646 'attribute_id' => $attribute_id,
1647 'attribute_name' => $name,
1648 'attribute_label' => $label,
1649 'attribute_type' => 'select',
1650 'attribute_orderby' => 'menu_order',
1651 'attribute_public' => 0,
1652 );
1653
1654 if( empty($attribute_id) ) {
1655 $wpdb->insert( "{$wpdb->prefix}woocommerce_attribute_taxonomies", $args );
1656 set_transient( 'wc_attribute_taxonomies', false );
1657 }
1658
1659 if( $set ){
1660 $attributes = wc_get_attribute_taxonomies();
1661 $args['attribute_id'] = get_attribute_id_from_name( $name );
1662 $attributes[] = (object) $args;
1663 //print_r($attributes);
1664 set_transient( 'wc_attribute_taxonomies', $attributes );
1665 } else {
1666 return;
1667 }
1668}
1669
1670/**
1671 * Get the product attribute ID from the name.
1672 *
1673 * @since 3.0.0
1674 * @param string $name | The name (slug).
1675 */
1676function get_attribute_id_from_name( $name ){
1677 global $wpdb;
1678 $attribute_id = $wpdb->get_col("SELECT attribute_id
1679 FROM {$wpdb->prefix}woocommerce_attribute_taxonomies
1680 WHERE attribute_name LIKE '$name'");
1681 return reset($attribute_id);
1682}
1683
1684/**
1685 * Create a new variable product (with new attributes if they are).
1686 * (Needed functions:
1687 *
1688 * @since 3.0.0
1689 * @param array $data | The data to insert in the product.
1690 */
1691
1692function create_product_variation( $data ){
1693 if( ! function_exists ('save_product_attribute_from_name') ) return;
1694
1695 $postname = sanitize_title( $data['title'] );
1696 $author = empty( $data['author'] ) ? '1' : $data['author'];
1697
1698 $post_data = array(
1699 'post_author' => $author,
1700 'post_name' => $postname,
1701 'post_title' => $data['title'],
1702 'post_content' => $data['content'],
1703 'post_excerpt' => $data['excerpt'],
1704 'post_status' => 'publish',
1705 'ping_status' => 'closed',
1706 'post_type' => 'product_variation',
1707 'post_parent' => $data['parent_id'],
1708 'guid' => home_url( '/product/'.$postname.'/' ),
1709 );
1710
1711 // Creating the product (post data)
1712 //$product_id = wp_insert_post( );
1713 $result = wp_insert_post( $post_data );
1714
1715 if ( $result && ! is_wp_error( $result ) ) {
1716 $product_id = $result;
1717 // Do something else
1718 var_dump($result);
1719 echo "sucesso";
1720 }else{
1721 echo "erro ao gravar produto variavel";
1722 var_dump($result);
1723 }
1724 // Get an instance of the WC_Product_Variable object and save it
1725 $product = new WC_Product_Variation( $product_id );
1726
1727 ## ---------------------- Other optional data ---------------------- ##
1728 ## (see WC_Product and WC_Product_Variable setters methods)
1729
1730 // THE PRICES (No prices yet as we need to create product variations)
1731
1732 // IMAGES GALLERY
1733 // Prices
1734 if( empty( $data['sale_price'] ) ){
1735 $product->set_price( $data['regular_price'] );
1736 } else {
1737 $product->set_price($data['sale_price'] );
1738 $product->set_sale_price($data['sale_price'] );
1739 }
1740 $variation->set_regular_price($data['regular_price'] );
1741
1742 if( ! empty( $data['gallery_ids'] ) && count( $data['gallery_ids'] ) > 0 )
1743 $product->set_gallery_image_ids( $data['gallery_ids'] );
1744
1745 // SKU/*
1746// if( ! empty( $data['sku'] ) )
1747 // $product->set_sku( $data['sku'] );
1748
1749
1750 // STOCK (stock will be managed in variations)
1751 $product->set_stock_quantity($data['stock']); // Set a minimal stock quantity
1752 if($data['manager_stock'] == '0'){
1753 $product->set_manage_stock(false);
1754 }else{
1755 $product->set_manage_stock(true);
1756 }
1757
1758 $product->set_stock_status('');
1759
1760 // Tax class
1761 if( empty( $data['tax_class'] ) )
1762 $product->set_tax_class( $data['tax_class'] );
1763
1764 // WEIGHT
1765 if( ! empty($data['weight']) )
1766 $product->set_weight(''); // weight (reseting)
1767 else
1768 $product->set_weight($data['weight']);
1769
1770 $product->validate_props(); // Check validation
1771
1772 ## ---------------------- VARIATION ATTRIBUTES ---------------------- ##
1773
1774 $product_attributes = array();
1775
1776 foreach( $data['attributes'] as $key => $terms ){
1777 $taxonomy = wc_attribute_taxonomy_name($key); // The taxonomy slug
1778 $attr_label = ucfirst($key); // attribute label name
1779 $attr_name = ( wc_sanitize_taxonomy_name($key)); // attribute slug
1780
1781 // NEW Attributes: Register and save them
1782 if( ! taxonomy_exists( $taxonomy ) )
1783
1784 var_dump(save_product_attribute_from_name( $attr_name, $attr_label ));
1785
1786 $product_attributes[$taxonomy] = array (
1787 'name' => $taxonomy,
1788 'value' => '',
1789 'position' => '',
1790 'is_visible' => 0,
1791 'is_variation' => 1,
1792 'is_taxonomy' => 1
1793 );
1794
1795 foreach( $terms as $value ){
1796 $term_name = ucfirst($value);
1797 $term_slug = sanitize_title($value);
1798
1799 // Check if the Term name exist and if not we create it.
1800 if( ! term_exists( $value, $taxonomy ) )
1801 wp_insert_term( $term_name, $taxonomy, array('slug' => $term_slug ) ); // Create the term
1802
1803 // Set attribute values
1804 wp_set_post_terms( $product_id, $term_name, $taxonomy, true );
1805 }
1806 }
1807
1808 update_post_meta( $product_id, '_product_attributes', $product_attributes );
1809 $product->save(); // Save the data
1810}
1811
1812function get_product_category($catname){
1813 if($catname == ''){
1814 $catname = "CAMISAS";
1815 }else{
1816 $catnamesub = $catname;
1817 $slug = $catnamesub;
1818 //var_dump($slug);
1819 $productCategory = get_term_by( 'name', $slug, 'product_cat' );
1820
1821 //echo "termo Id";
1822 //var_dump($productCategory->term_id);
1823 if($productCategory){
1824 $cat_id = get_term_by('id',$productCategory->term_id , 'product_cat' );
1825 }else{
1826 return false;
1827 }
1828 //$cat_id = get_category($productCategory->term_id);
1829 //echo "cat_id";
1830 //var_dump($cat_id);
1831 }
1832
1833 if(empty($cat_id)) {
1834 //echo "insere um termo se não existir a categoria<br>";
1835 //var_dump($cat_id);
1836 $arg = array( 'description' => $slug, 'parent' => 0 );
1837 $cat_id = wp_insert_term($slug, "product_cat", $arg);
1838 //echo "id inserido da categoria criada<br>";
1839 //var_dump($cat_id);
1840 return $cat_id['term_id'];
1841 }else{
1842 //var_dump("retornando resultado existindo uma categoria correspondente");
1843 return $cat_id->term_id;
1844 }
1845}
1846/**
1847 * Update a new variable product (with new attributes if they are).
1848 * (Needed functions:
1849 *
1850 * @since 3.0.0
1851 * @param array $data | The data to insert in the product.
1852 */
1853function update_product_variation($data){
1854 if( ! function_exists ('save_product_attribute_from_name') ) return;
1855
1856 $category_id = get_product_category($data['category']);
1857 $postname = sanitize_title( $data['title'] );
1858 $author = empty( $data['author'] ) ? '1' : $data['author'];
1859
1860 if(empty($data['excerpt'])){
1861 $data['excerpt'] = $postname;
1862 }
1863
1864
1865 if(empty($data['ID'])){
1866
1867 $post_data = array(
1868 //'post_author' => $author,
1869 'post_name' => $postname,
1870 'post_title' => $data['title'],
1871 'post_content' => $data['content'],
1872 'post_excerpt' => $data['excerpt'],
1873 'post_status' => 'publish',
1874 'ping_status' => 'closed',
1875 'post_type' => 'product',
1876 'guid' => home_url( '/product/'.$postname.'/'),
1877 //'tax_input' => ['product_cat' => $category_id]
1878 );
1879
1880 $product_id = wp_insert_post( $post_data );
1881 //wp_set_post_terms($product_id, get_term()->slug,'product_cat',true);
1882 }else{
1883
1884 if(!isset($data['insert_variable_product_unique'])){
1885 $post_data = array(
1886 'ID' => $data['ID'],
1887 'post_name' => $postname,
1888 'post_title' => $data['title'],
1889 'ping_status' => 'closed',
1890 'post_type' => 'product',
1891 'guid' => home_url( '/product/'.$postname.'/' )
1892 );
1893 $product_id = wp_update_post( $post_data );
1894 }
1895
1896 }
1897
1898 $product = new WC_Product_Variable( $product_id );
1899 $product->save();
1900
1901 ## ---------------------- Other optional data ---------------------- ##
1902 ## (see WC_Product and WC_Product_Variable setters methods)
1903
1904 //THE PRICES (No prices yet as we need to create product variations)
1905 //IMAGES GALLERY
1906 if( ! empty( $data['gallery_ids'] ) && count( $data['gallery_ids'] ) > 0 )
1907 $product->set_gallery_image_ids( $data['gallery_ids'] );
1908
1909 //SKU
1910 if( ! empty( $data['sku'] ) )
1911 $product->set_sku( $data['sku'] );
1912
1913 // STOCK (stock will be managed in variations)
1914 $product->set_stock_quantity( $data['stock'] ); // Set a minimal stock quantity
1915 if($data['manager_stock'] == '0'){
1916 $product->set_manage_stock(false);
1917 }else{
1918 $product->set_manage_stock(true);
1919 }
1920
1921 $product->set_stock_status('');
1922
1923 // Tax class
1924 if( empty( $data['tax_class'] ) )
1925 $product->set_tax_class( $data['tax_class'] );
1926
1927 // WEIGHT
1928 if( ! empty($data['weight']) )
1929 $product->set_weight(''); // weight (reseting)
1930 else
1931 $product->set_weight($data['weight']);
1932
1933 //length
1934 if( ! empty($data['length']) )
1935 $product->set_length(''); // length (reseting)
1936 else
1937 $product->set_length($data['length']);
1938
1939 $product->validate_props(); // Check validation
1940
1941 //WIDTH
1942 if( ! empty($data['width']) )
1943 $product->set_width(""); // weight (reseting)
1944else
1945 $product->set_width($data['width']);
1946
1947 ## ---------------------- VARIATION ATTRIBUTES ---------------------- ##
1948
1949 $product_attributes = array();
1950 echo "Atributes da persistência do Objeto (não da variação)";
1951 var_dump($data['attributes']);
1952
1953 foreach( $data['attributes'] as $key => $terms ){
1954 $taxonomy = wc_attribute_taxonomy_name($key); // The taxonomy slug
1955 $attr_label = ucfirst($key); // attribute label name
1956 $attr_name = ( wc_sanitize_taxonomy_name($key)); // attribute slug
1957
1958 // NEW Attributes: Register and save them
1959 if( ! taxonomy_exists( $taxonomy ) )
1960 echo "salvando taxonomia: name:{$attr_name}, label:{$attr_label}, tax:{$taxonomy} <br>";
1961 var_dump(save_product_attribute_from_name( $attr_name, $attr_label ));
1962 //$slug = 'pa_' . strtolower($attribute->name);
1963
1964 $attribute_id = wc_create_attribute( array(
1965 'name' => $attr_label,
1966 'slug' => $attr_name,
1967 'type' => 'product',
1968 'order_by' => 'menu_order',
1969 'has_archives' => false,
1970 ) );
1971
1972
1973
1974 var_dump($attribute_id);
1975 //Register it as a wordpress taxonomy for just this session. Later on this will be loaded from the woocommerce taxonomy table.
1976 /*register_taxonomy(
1977 $taxonomy,
1978 apply_filters( 'woocommerce_taxonomy_objects_' . $taxonomy, array( 'product' ) ),
1979 apply_filters( 'woocommerce_taxonomy_args_' . $taxonomy, array(
1980 'labels' => array(
1981 'name' => $attr_label,
1982 ),
1983 'hierarchical' => true,
1984 'show_ui' => false,
1985 'query_var' => true,
1986 'rewrite' => false,
1987 ) )
1988 );*/
1989
1990
1991 $product_attributes[$taxonomy] = array (
1992 'name' => $taxonomy,
1993 'value' => '',
1994 'position' => '',
1995 'is_visible' => 0,
1996 'is_variation' => 1,
1997 'is_taxonomy' => 1
1998 );
1999
2000 foreach( $terms as $value ){
2001 $term_name = ucfirst($value);
2002 $term_slug = sanitize_title($value);
2003
2004 // Check if the Term name exist and if not we create it.
2005 if( ! term_exists( $value, $taxonomy ) )
2006 echo "salvando termo: term_name:{$term_name} | tax:{$taxonomy} | slug:{$term_slug}<br>";
2007 var_dump(wp_insert_term( $term_name, $taxonomy, array('slug' => $term_slug ) )); // Create the term
2008
2009 // Set attribute values
2010 if(isset($data['insert_variable_product_unique'])){
2011 echo "setando valores dos atributos: id:{$data['ID']}(atualizando), tax:{$taxonomy}, term_name:{$term_name}<br>";
2012 var_dump(wp_set_post_terms( $data['ID'], $term_name, $taxonomy, true ));
2013 }else{
2014 echo "setando valores dos atributos: id:{$product_id}(inserindo), tax:{$taxonomy}, term_name:{$term_name}<br>";
2015 var_dump(wp_set_post_terms( $product_id, $term_name, $taxonomy, true ));
2016 }
2017
2018 }
2019 }
2020 //print_r($product);
2021 if(isset($data['insert_variable_product_unique'])){
2022 echo "atualizando: product Attrb: {$product_attributes}<br>";
2023 update_post_meta( $data['ID'], '_product_attributes', $product_attributes );
2024 }else{
2025 echo "inserindo: product Attrb:<br>";
2026 var_dump($product_attributes);
2027 update_post_meta( $product_id, '_product_attributes', $product_attributes );
2028 }
2029 //var_dump($product);
2030 //exit;
2031 $product->save(); // Save the data
2032 return $product_id;
2033}
2034/*
2035*
2036$parent_id = 746; // Or get the variable product id dynamically
2037
2038// The variation data
2039$variation_data = array(
2040 'attributes' => array(
2041 'size' => 'M',
2042 'color' => 'Green',
2043 ),
2044 'sku' => '',
2045 'regular_price' => '22.00',
2046 'sale_price' => '',
2047 'stock_qty' => 10,
2048);
2049
2050// The function to be run
2051create_product_variation( $parent_id, $variation_data );
2052*/
2053/**
2054 * Create a product variation for a defined variable product ID.
2055 *
2056 * @since 3.0.0
2057 * @param int $product_id | Post ID of the product parent variable product.
2058 * @param array $variation_data | The data to insert in the product.
2059 */
2060
2061function _create_product_variation( $product_id, $variation_data ){
2062 // Get the Variable product object (parent)
2063 $product = wc_get_product($product_id);
2064
2065 // Creating the product variation
2066 if(empty($variation_data['update'])){
2067 //var_dump($variation_data);
2068 $variation_post = array(
2069 'post_title' => MigrationRules::getProductTeste()->produtoNome,
2070 'post_name' => 'product-'. MigrationRules::getPostId() .'-variation',
2071 'post_status' => 'publish',
2072 'post_parent' => MigrationRules::getPostId(),
2073 'post_type' => 'product_variation',
2074 'guid' => site_url() . "/" . MigrationRules::getPostId()
2075 );
2076
2077 $variation_id = wp_insert_post( $variation_post );
2078 }else{
2079
2080 $variation_post = array(
2081 'ID' => $variation_data['ID'],
2082 'post_title' => $product->get_name(),
2083 'post_name' => 'product-'.$product_id.'-variation',
2084 'post_status' => 'publish',
2085 'post_parent' => $product_id,
2086 'post_type' => 'product_variation',
2087 'guid' => $product->get_permalink()
2088 );
2089
2090 $variation_id = wp_update_post( $variation_post );
2091 }
2092
2093
2094
2095 // Get an instance of the WC_Product_Variation object
2096 $variation = new WC_Product_Variation( $variation_id );
2097 //var_dump($variation_id);
2098 //exit;
2099 echo "Registrando taxonomia<br>";
2100 var_dump($variation_data['attributes']);
2101
2102 foreach ($variation_data['attributes'] as $attribute => $term_name )
2103 {
2104
2105 $taxonomy = 'pa_'.$attribute; // The attribute taxonomy
2106
2107 echo "taxonomia problemática: {$taxonomy}<br>";
2108
2109 // If taxonomy doesn't exists we create it (Thanks to Carl F. Corneil)
2110 if( ! taxonomy_exists( $taxonomy ) ){
2111 echo "Registrando taxonomia : {$attribute}<br>";
2112 register_taxonomy(
2113 $taxonomy,
2114 'product_variation',
2115 array(
2116 'hierarchical' => false,
2117 'label' => ucfirst( $attribute ),
2118 'query_var' => true,
2119 'rewrite' => array( 'slug' => sanitize_title($attribute) ), // The base slug
2120 )
2121 );
2122 }
2123
2124 $ntax = ucfirst( $attribute );
2125 echo "taxonomia com ucfirst: {$ntax}<br>";
2126 echo "nome do termo";
2127 var_dump($term_name);
2128
2129 // Check if the Term name exist and if not we create it.
2130 if( ! term_exists( $term_name, $taxonomy ) )
2131 echo "TERMO INSERIDO {$term_name}<br> ";
2132 var_dump(wp_insert_term( $term_name, $taxonomy )); // Create the term
2133
2134 $term_slug = get_term_by('name', $term_name, $taxonomy )->slug; // Get the term slug
2135
2136 // Get the post Terms names from the parent variable product.
2137 $post_term_names = wp_get_post_terms( $product_id, $taxonomy, array('fields' => 'names') );
2138
2139 // Check if the post term exist and if not we set it in the parent variable product.
2140 if( ! in_array( $term_name, $post_term_names ) )
2141 echo "wp_set_post_terms: nome do slug {$term_slug} | productId:{$product_id} | term_name:{$term_name} | tax:{$taxonomy}<br>";
2142 var_dump(wp_set_post_terms( $product_id, $term_name, $taxonomy, true ));
2143
2144 //var_dump($term_slug);
2145 // Set/save the attribute data in the product variation
2146 echo "update_post_meta: variation_id: [{$variation_id}] - " . 'attribute_'.$taxonomy . "<br>";
2147 var_dump(update_post_meta( $variation_id, 'attribute_'.$taxonomy, $term_slug, true));
2148 }
2149
2150 ## Set/save all other data
2151
2152
2153 // SKU
2154 //if( ! empty( $variation_data['sku'] ) )
2155 // $variation->set_sku( $variation_data['sku'] );
2156
2157 // Prices
2158// Prices
2159echo "<h4>valores do preço promocional</h4><br>";
2160var_dump($variation_data['sale_price'] == "0,00");
2161var_dump($variation_data['sale_price']);
2162
2163if( empty( $variation_data['sale_price'] ) ){
2164
2165 $variation->set_price( $variation_data['regular_price'] );
2166} else {
2167 if(!$variation_data['sale_price'] == "0,00"){
2168 $variation->set_sale_price( $variation_data['sale_price']);
2169 }
2170 $variation->set_price($variation_data['regular_price']);
2171}
2172$variation->set_regular_price( $variation_data['regular_price'] );
2173
2174 // Stock
2175 var_dump($variation_data['stock_qty']);
2176 if( ! empty($variation_data['stock_qty']) ){
2177 $variation->set_stock_quantity( $variation_data['stock_qty'] );
2178 $variation->set_manage_stock(true);
2179 $variation->set_stock_status('');
2180 } else {
2181 //$variation->set_manage_stock(true);
2182 $variation->set_manage_stock(false);
2183 $variation->set_stock_status('outofstock');
2184 }
2185
2186 if($variation_data['stock_qty'] == 0){
2187 $variation->set_manage_stock(false);
2188 $variation->set_stock_status('outofstock');
2189 }
2190 $variation->set_weight(''); // weight (reseting)
2191 //var_dump( $variation_data['ID']);
2192 $variation->save(); // Save the data
2193 //var_dump($variation->get_stock_quantity());
2194 //exit;
2195}
2196
2197function tirarAcentos($string){
2198 return preg_replace(array("/(á|à|ã|â|ä)/","/(Á|À|Ã|Â|Ä)/","/(é|è|ê|ë)/","/(É|È|Ê|Ë)/","/(í|ì|î|ï)/","/(Í|Ì|Î|Ï)/","/(ó|ò|õ|ô|ö)/","/(Ó|Ò|Õ|Ô|Ö)/","/(ú|ù|û|ü)/","/(Ú|Ù|Û|Ü)/","/(ñ)/","/(Ñ)/"),explode(" ","a A e E i I o O u U n N"),$string);
2199}
2200
2201/**
2202 * Method to delete Woo Product
2203 *
2204 * @param int $id the product ID.
2205 * @param bool $force true to permanently delete product, false to move to trash.
2206 * @return \WP_Error|boolean
2207 */
2208function wh_deleteProduct($id, $force = FALSE)
2209{
2210 $product = wc_get_product($id);
2211
2212 if(empty($product))
2213 return new WP_Error(999, sprintf(__('No %s is associated with #%d', 'woocommerce'), 'product', $id));
2214
2215 // If we're forcing, then delete permanently.
2216 if ($force)
2217 {
2218 if ($product->is_type('variable'))
2219 {
2220 foreach ($product->get_children() as $child_id)
2221 {
2222 $child = wc_get_product($child_id);
2223 $child->delete(true);
2224 }
2225 }
2226 elseif ($product->is_type('grouped'))
2227 {
2228 foreach ($product->get_children() as $child_id)
2229 {
2230 $child = wc_get_product($child_id);
2231 $child->set_parent_id(0);
2232 $child->save();
2233 }
2234 }
2235
2236 $product->delete(true);
2237 $result = $product->get_id() > 0 ? false : true;
2238 }
2239 else
2240 {
2241 $product->delete();
2242 $result = 'trash' === $product->get_status();
2243 }
2244
2245 if (!$result)
2246 {
2247 return new WP_Error(999, sprintf(__('This %s cannot be deleted', 'woocommerce'), 'product'));
2248 }
2249
2250 // Delete parent product transients.
2251 if ($parent_id = wp_get_post_parent_id($id))
2252 {
2253 wc_delete_product_transients($parent_id);
2254 }
2255 return true;
2256}
2257
2258/**
2259 * Add a widget to the dashboard.
2260 *
2261 * This function is hooked into the 'wp_dashboard_setup' action below.
2262 */
2263function wporg_add_dashboard_widgets() {
2264 wp_add_dashboard_widget(
2265 'wporg_dashboard_widget', // Widget slug.
2266 esc_html__( 'Wiki Importer', 'wporg' ), // Title.
2267 'wporg_dashboard_widget_render' // Display function.
2268 );
2269}
2270add_action( 'wp_dashboard_setup', 'wporg_add_dashboard_widgets' );
2271
2272/**
2273 * Create the function to output the content of our Dashboard Widget.
2274 */
2275function wporg_dashboard_widget_render() {
2276 // Display whatever you want to show.
2277
2278 $html = '<h2>Clique <span style="color:#0099FF" id="importData"><b>aqui</b></span> para importar Dados do ERP Wiki</h2>
2279 <p id="link_produtos">Visualizar Produtos -> <a href="edit.php?post_type=product">aqui</a> </p>
2280 <div id="importBlock">
2281 <img id="importLogo" width="450" height="368" src="https://lindabrand.com.br/wp-content/uploads/importLogo.png"/>
2282 </div>';
2283
2284 $html .= '<script>
2285 jQuery("#link_produtos").hide();
2286 jQuery("#importData").click(function(){
2287
2288 jQuery.ajax({
2289 type: "GET",
2290 url: "admin.php?action=executeWikiImport",
2291 beforeSend: function(){
2292 jQuery("#importLogo").hide();
2293 var img = jQuery("<img />", {
2294 id: "importGif",
2295 src: "https://lindabrand.com.br/wp-content/uploads/import.gif",
2296 width: "420px",
2297 height: "368",
2298 alt: "import"
2299 });
2300
2301 img.appendTo(jQuery("#importBlock"));
2302 },
2303 success: function(){
2304 alert("Dados Importados com sucesso");
2305 jQuery("#importGif").hide();
2306 jQuery("#importLogo").show();
2307 jQuery("#link_produtos").show();
2308 }
2309 });
2310 });
2311
2312 </script>';
2313
2314 echo $html;
2315}
2316
2317
2318
2319//add_action( 'importInitializer', 'executeWikiImport', 10,0);
2320//add_action("after_setup_theme",function(){
2321// do_action('importInitializer');
2322//});
2323
2324add_action( 'init', 'executeWikiImportHome' );
2325function executeWikiImportHome(){
2326 if(isset($_GET['action']) && $_GET['action']=="executeWikiImport" && is_home()){
2327 echo "<h1>No contexto da action [init]</h1>";
2328 initMigration();
2329 //initMigration();
2330 //create curl resource
2331 //$ch = curl_init();
2332 //curl_setopt($ch, CURLOPT_URL, "http://localhost/favelachick/checkout/order-received/19606/?key=wc_order_1TMRfz22JXnYf");
2333 //curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
2334 //$output = curl_exec($ch);
2335 //curl_close($ch);
2336 }
2337}
2338
2339add_action( 'admin_init', 'executeWikiImport' );
2340function executeWikiImport(){
2341 if(isset($_GET['action']) && $_GET['action']=="executeWikiImport"){
2342 echo "<h1>No contexto da action [admin_init]</h1>";
2343 initMigration();
2344 //initMigration();
2345 //create curl resource
2346 //$ch = curl_init();
2347 //curl_setopt($ch, CURLOPT_URL, "http://localhost/favelachick/checkout/order-received/19606/?key=wc_order_1TMRfz22JXnYf");
2348 //curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
2349 //$output = curl_exec($ch);
2350 //curl_close($ch);
2351 }
2352}
2353
2354
2355add_action('woocommerce_thankyou', 'MyPersistRemoteObject3', 20, 2 );
2356function MyPersistRemoteObject3($order_id){
2357
2358 $ch = curl_init();
2359 curl_setopt_array($ch, array(
2360 CURLOPT_URL => "https://lindabrand.com.br/wp-json/wc/v3/orders/" . $order_id . "/?consumer_key=ck_9e747cfe973b52e14180a7c0c84aac41c8e960ec&consumer_secret=cs_225e4823dd0664b95f6030600dfebf8209ded416",
2361 CURLOPT_RETURNTRANSFER => true,
2362 CURLOPT_ENCODING => "",
2363 CURLOPT_MAXREDIRS => 10,
2364 CURLOPT_TIMEOUT => 30,
2365 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
2366 CURLOPT_CUSTOMREQUEST => "GET",
2367 CURLOPT_SSL_VERIFYPEER=> false,
2368
2369 CURLOPT_HTTPHEADER => array(
2370 "Authorization: Basic *****************",
2371 "Cache-Control: no-cache"
2372 ),
2373 ));
2374
2375 $result = curl_exec($ch);
2376
2377 $jsonResult = json_decode($result);
2378 foreach($jsonResult->meta_data as $k=>$meta){
2379 if($meta->key == "Tipo de pagamento" && $meta->value == "Boleto"){
2380 $bolVencimento = new stdClass;
2381 $bolVencimento->key = "Boleto Vencimento";
2382 $order = new WC_Order($order_id);
2383 $order_date = $order->order_date;
2384 $date = new DateTime($order_date);
2385 $date->modify("+3 day");
2386 $bolVencimento->value = $date->format("d-m-Y");
2387 $jsonResult->meta_data[] = $bolVencimento;
2388 }
2389 }
2390
2391 $replaced_result = substr_replace(json_encode($jsonResult), '"empresa":460, "guid":"9351c4b5-8c8a-4657-8244-56cb46e5e5d8",', 12,0);
2392
2393 //print_r($replaced_result);
2394 //echo " ";
2395 //print_r(base64_encode($replaced_result));
2396/* $opts = [
2397 'http' => [
2398 'method' => 'GET'
2399 ]
2400 ];*/
2401
2402 //$context = stream_context_create($opts);
2403 //$result = file_get_contents('http://app.wikisistemas.com.br:8086/EcommerceExternoWebservice.asmx/RecebePedidoWooCommerce?json=' . base64_encode($replaced_result), false, $context);
2404 //var_dump($result);
2405
2406 //
2407 //print_r($replaced_result);
2408 $ch2 = curl_init();
2409 curl_setopt_array($ch2, array(
2410 CURLOPT_URL => 'http://52.6.107.225/script.php?pedido=' . base64_encode($replaced_result),
2411 CURLOPT_RETURNTRANSFER => true,
2412 CURLOPT_ENCODING => "",
2413 CURLOPT_MAXREDIRS => 10,
2414 CURLOPT_TIMEOUT => 30,
2415 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
2416 CURLOPT_CUSTOMREQUEST => "GET",
2417 CURLOPT_SSL_VERIFYPEER=> false,
2418
2419 CURLOPT_HTTPHEADER => array(
2420 "Authorization: Basic *****************",
2421 "Cache-Control: no-cache"
2422 ),
2423 ));
2424
2425 $result2 = curl_exec($ch2);
2426 //echo "retorno do WS<br>";
2427 //var_dump($result2);
2428
2429 //echo "pedido base64<br>";
2430 //var_dump($replaced_result);
2431
2432
2433 }
2434
2435
2436add_filter( 'woocommerce_variation_is_active', 'grey_out_variations_when_out_of_stock', 10, 2 );
2437function grey_out_variations_when_out_of_stock( $grey_out, $variation ){
2438if ( ! $variation->is_in_stock() ){
2439 return false;
2440 }else{
2441 return true;
2442 }
2443}
2444////*/5 * * * * /opt/bitnami/php/bin/php ~/apps/wordpress/htdocs/cron-importer.php
2445//venda somente a partir de 2 produtos
2446/*add_filter( 'woocommerce_add_to_cart_validation', 'only_six_items_allowed_add_to_cart', 10, 3 );
2447function only_six_items_allowed_add_to_cart( $passed, $product_id, $quantity ) {
2448
2449 $cart_items_count = WC()->cart->get_cart_contents_count();
2450 $total_count = $cart_items_count + $quantity;
2451
2452 if( $cart_items_count > 2 || $total_count > 2 ){
2453 // Set to false
2454 $passed = true;
2455 // Display a message
2456
2457 }
2458 else{
2459 wc_add_notice( __( "You can’t have more than 6 items in cart", "woocommerce" ), "error" );
2460 }
2461 return $passed;
2462}
2463
2464// Checking and validating when updating cart item quantities when products are added to cart
2465add_filter( 'woocommerce_update_cart_validation', 'only_six_items_allowed_cart_update', 10, 4 );
2466function only_six_items_allowed_cart_update( $passed, $cart_item_key, $values, $updated_quantity ) {
2467
2468 $cart_items_count = WC()->cart->get_cart_contents_count();
2469 $original_quantity = $values['quantity'];
2470 $total_count = $cart_items_count - $original_quantity + $updated_quantity;
2471
2472 if( $cart_items_count > 2 || $total_count > 2 ){
2473 // Set to false
2474 $passed = true;
2475 // Display a message
2476
2477 }else{
2478 wc_add_notice( __( "You can’t have more than 6 items in cart", "woocommerce" ), "error" );
2479 }
2480 return $passed;
2481}
2482
2483/**
2484 * When an item is added to the cart, check total cart quantity
2485 *//*
2486function so_21363268_limit_cart_quantity( $valid, $product_id, $quantity ) {
2487
2488 $max_allowed = 6;
2489 $current_cart_count = WC()->cart->get_cart_contents_count();
2490
2491 if( ( $current_cart_count > $max_allowed || $current_cart_count + $quantity > $max_allowed ) && $valid ){
2492 wc_add_notice( sprint( __( 'Whoa hold up. You can only have %d items in your cart', 'your-plugin-textdomain' ), $max ), 'error' );
2493 $valid = false;
2494 }
2495
2496 return $valid;
2497
2498}
2499add_filter( 'woocommerce_add_to_cart_validation', 'so_21363268_limit_cart_quantity', 10, 3 );*/
2500
2501
2502// On single product pages
2503//add_filter( 'woocommerce_quantity_input_args', 'min_qty_filter_callback', 20, 2 );
2504/*
2505add_action( 'woocommerce_check_cart_items', 'wc_min_item_required_qty' );
2506function wc_min_item_required_qty() {
2507 $categories = array('OUTLET'); // The targeted product category
2508 $min_item_qty = 2; // Minimum Qty required (for each item)
2509 $display_error = false; // Initializing
2510
2511 // Loop through cart items
2512 foreach(WC()->cart->get_cart() as $cart_item ) {
2513 $item_quantity = $cart_item['quantity']; // Cart item quantity
2514 $product_id = $cart_item['product_id']; // The product ID
2515
2516 // For cart items remaining to "Noten" producct category
2517 if( has_term( $categories, 'product_cat', $product_id ) && $item_quantity < $min_item_qty ) {
2518 wc_clear_notices(); // Clear all other notices
2519
2520 // Add an error notice (and avoid checkout).
2521 wc_add_notice( sprintf( 'Bitte beachte die Mindestbestellmenge. Du brauchst mindestens %s Notenexemplare pro Arrangement. Aktuell hast du %s Stück in deinem Warenkorb.', $min_item_qty , $item_quantity ), 'error' );
2522 break; // Stop the loop
2523 }
2524 }
2525}*/