コード例 #1
0
 public function process_product_meta_variable($post_id)
 {
     WPLA()->logger->info('process_product_meta_variable() - ' . $post_id);
     if (!isset($_POST['variable_sku'])) {
         return;
     }
     $variable_post_id = $_POST['variable_post_id'];
     $variable_amazon_product_id = $_POST['variable_amazon_product_id'];
     $variable_amazon_id_type = $_POST['variable_amazon_id_type'];
     $variable_amazon_asin = $_POST['variable_amazon_asin'];
     $variable_sku = $_POST['variable_sku'];
     $variable_amazon_price = isset($_POST['variable_amazon_price']) ? $_POST['variable_amazon_price'] : '';
     $variable_amazon_minimum_price = isset($_POST['variable_amazon_minimum_price']) ? $_POST['variable_amazon_minimum_price'] : '';
     $variable_amazon_maximum_price = isset($_POST['variable_amazon_maximum_price']) ? $_POST['variable_amazon_maximum_price'] : '';
     $variable_amazon_condition_type = isset($_POST['variable_amazon_condition_type']) ? $_POST['variable_amazon_condition_type'] : '';
     $variable_amazon_condition_note = isset($_POST['variable_amazon_condition_note']) ? $_POST['variable_amazon_condition_note'] : '';
     $variable_amazon_is_disabled = isset($_POST['variable_amazon_is_disabled']) ? $_POST['variable_amazon_is_disabled'] : '';
     // convert decimal comma for all price fields
     $variable_amazon_price = str_replace(',', '.', $variable_amazon_price);
     $variable_amazon_minimum_price = str_replace(',', '.', $variable_amazon_minimum_price);
     $variable_amazon_maximum_price = str_replace(',', '.', $variable_amazon_maximum_price);
     $lm = new WPLA_ListingsModel();
     $all_variations_with_SKU = array();
     $all_variations_with_ASIN = array();
     $max_loop = max(array_keys($_POST['variable_post_id']));
     for ($i = 0; $i <= $max_loop; $i++) {
         if (!isset($variable_post_id[$i])) {
             continue;
         }
         $variation_id = (int) $variable_post_id[$i];
         // Update post meta
         update_post_meta($variation_id, '_amazon_product_id', trim($variable_amazon_product_id[$i]));
         update_post_meta($variation_id, '_amazon_id_type', $variable_amazon_id_type[$i]);
         update_post_meta($variation_id, '_wpla_asin', trim($variable_amazon_asin[$i]));
         update_post_meta($variation_id, '_amazon_price', isset($variable_amazon_price[$i]) ? trim($variable_amazon_price[$i]) : '');
         update_post_meta($variation_id, '_amazon_minimum_price', isset($variable_amazon_minimum_price[$i]) ? trim($variable_amazon_minimum_price[$i]) : '');
         update_post_meta($variation_id, '_amazon_maximum_price', isset($variable_amazon_maximum_price[$i]) ? trim($variable_amazon_maximum_price[$i]) : '');
         update_post_meta($variation_id, '_amazon_condition_type', isset($variable_amazon_condition_type[$i]) ? trim($variable_amazon_condition_type[$i]) : '');
         update_post_meta($variation_id, '_amazon_condition_note', isset($variable_amazon_condition_note[$i]) ? trim($variable_amazon_condition_note[$i]) : '');
         update_post_meta($variation_id, '_amazon_is_disabled', isset($variable_amazon_is_disabled[$i]) ? $variable_amazon_is_disabled[$i] : '');
         // if ( $variable_amazon_product_id[$i] !== 'parent' )
         //     update_post_meta( $variation_id, '_amazon_product_id', $variable_amazon_product_id[$i] );
         // else
         //     delete_post_meta( $variation_id, '_amazon_product_id' );
         // update min/max prices in listings table
         if (isset($_POST['variable_amazon_minimum_price'])) {
             $min_price = isset($variable_amazon_minimum_price[$i]) ? $variable_amazon_minimum_price[$i] : '';
             $max_price = isset($variable_amazon_maximum_price[$i]) ? $variable_amazon_maximum_price[$i] : '';
             $data = array();
             if ($min_price || $max_price) {
                 if ($listing = $lm->getItemByPostID($variation_id)) {
                     if ($min_price != $listing->min_price) {
                         $data['min_price'] = $min_price;
                         $data['pnq_status'] = 1;
                         // mark as changed
                     }
                     if ($max_price != $listing->max_price) {
                         $data['max_price'] = $max_price;
                         $data['pnq_status'] = 1;
                         // mark as changed
                     }
                     // update listing
                     if (!empty($data)) {
                         $lm->updateWhere(array('id' => $listing->id), $data);
                     }
                 }
             }
         }
         // collect (matched) variations with ASIN
         if ($variable_amazon_asin[$i]) {
             $all_variations_with_ASIN[$variation_id] = $variable_amazon_asin[$i];
         }
         // collect all variations with SKU
         if ($variable_sku[$i]) {
             $all_variations_with_SKU[$variation_id] = $variable_sku[$i];
         }
     }
     // each variation
     WPLA()->logger->info('Variations with ASIN: ' . print_r($all_variations_with_ASIN, 1));
     WPLA()->logger->info('Variations with SKU : ' . print_r($all_variations_with_SKU, 1));
     // process matched variations
     // check all variations with ASIN and add missing ones to listings table
     if (!empty($all_variations_with_ASIN)) {
         $lm = new WPLA_ListingsModel();
         $default_account_id = get_option('wpla_default_account_id', 1);
         if (!$default_account_id) {
             return;
         }
         // ***
         foreach ($all_variations_with_ASIN as $variation_id => $asin) {
             // check if this ASIN / ID already exist - skip if it does
             WPLA()->logger->info("searching for existing listing for #{$variation_id} / {$asin}");
             if ($lm->getItemByASIN($asin, false)) {
                 continue;
             }
             if ($lm->getItemByPostID($variation_id)) {
                 continue;
             }
             WPLA()->logger->info("no listing found for variation #{$variation_id} / {$asin}");
             // skip hidden variations
             if (get_post_meta($variation_id, '_amazon_is_disabled', true) == 'on') {
                 continue;
             }
             // insert matched listing
             $success = $lm->insertMatchedProduct($variation_id, $asin, $default_account_id);
             $error_msg = isset($lm->lastError) ? $lm->lastError : '';
             if ($success) {
                 // TODO: use persistent admin message
                 WPLA()->logger->info("Matched variation #{$variation_id} / {$asin} - {$error_msg}");
             } else {
                 echo "Failed to match variation #{$variation_id} - please report this to support: {$error_msg}";
                 WPLA()->logger->error("Failed to match variation #{$variation_id} / {$asin} - {$error_msg}");
             }
         }
         // each matched variation
     }
     // if $all_variations_with_ASIN
     // add missing variations
     // if the parent product has a listing item, then check for and add missing variation listings
     $lm = new WPLA_ListingsModel();
     $parent_listing = $lm->getItemByPostID($post_id);
     if ($parent_listing) {
         // get account from parent listing
         $account = WPLA_AmazonAccount::getAccount($parent_listing->account_id);
         if (!$account) {
             return;
         }
         foreach ($all_variations_with_SKU as $variation_id => $sku) {
             // check if this SKU / ID already exist - skip if it does
             if ($lm->getItemBySKU($sku, false)) {
                 continue;
             }
             if ($lm->getItemByPostID($variation_id)) {
                 continue;
             }
             WPLA()->logger->info("no listing found for missing variation #{$variation_id} / {$sku}");
             // check if this variation has a UPC/EAN set - skip if empty (unless brand registry is enabled)
             $_amazon_product_id = get_post_meta($variation_id, '_amazon_product_id', true);
             if (!$_amazon_product_id && !$account->is_reg_brand) {
                 continue;
             }
             // skip hidden variations
             if (get_post_meta($variation_id, '_amazon_is_disabled', true) == 'on') {
                 continue;
             }
             // insert variation listing
             $success = $lm->insertMissingVariation($variation_id, $sku, $parent_listing);
             $error_msg = isset($lm->lastError) ? $lm->lastError : '';
             if ($success) {
                 // TODO: use persistent admin message
                 WPLA()->logger->info("Matched missing variation #{$variation_id} / {$sku} - {$error_msg}");
             } else {
                 echo "Failed to match missing variation #{$variation_id} - please report this to support: {$error_msg}";
                 WPLA()->logger->error("Failed to match missing variation #{$variation_id} / {$sku} - {$error_msg}");
             }
         }
         // each variation
     }
     // if parent listing exists
 }
コード例 #2
0
 public function matchAllUnlistedWithASIN()
 {
     global $wpdb;
     $items = $wpdb->get_results("\n            SELECT \n            \tpm.meta_value as ASIN,\n            \tp.ID, p.post_title, p.post_type, p.post_modified,\n            \ta.sku, a.id\n            FROM {$wpdb->postmeta} pm\n            LEFT JOIN {$wpdb->posts}                 p ON pm.post_id = p.ID\n            LEFT JOIN {$wpdb->prefix}amazon_listings a ON pm.post_id = a.post_id\n\n            WHERE p.ID IS NOT NULL\n\t\t\t  AND ( p.post_type = 'product' OR p.post_type = 'product_variation' )\n\t\t\t  AND pm.meta_key = '_wpla_asin'\n\t\t\t  AND pm.meta_value <> ''\n\t\t\t  AND a.id IS NULL\n\n            ORDER BY pm.post_id\n            LIMIT 1000\n\t\t");
     // echo "<pre>";print_r($items);echo"</pre>";#die();
     $mode = isset($_REQUEST['mode']) ? $_REQUEST['mode'] : false;
     if ($mode == 'create_listings') {
         $lm = new WPLA_ListingsModel();
         $msg = '';
         foreach ($items as $product) {
             $asin = $product->ASIN;
             $post_id = $product->ID;
             $default_account_id = get_option('wpla_default_account_id', 1);
             $lm->lastError = null;
             // $lm->last_insert_id = null;
             $success = $lm->insertMatchedProduct($post_id, $asin, $default_account_id);
             if ($success) {
                 // $msg .= "Listing {$lm->last_insert_id} was created for ASIN $asin (#$post_id) <br>";
                 // if ( $lm->lastError ) $msg .= "{$lm->lastError} <br>";
                 $msg .= "{$lm->lastError} <br>";
             } else {
                 $msg .= "<b>Failed to match product: {$lm->lastError} </b><br>";
             }
         }
         wpla_show_message($msg);
         return;
     }
     // if create_listings
     if (!empty($items)) {
         $nonce = wp_create_nonce('wpla_tools_page');
         $btn_import = '<a href="admin.php?page=wpla-tools&tab=developer&action=wpla_match_all_unlisted_with_asin&mode=create_listings&_wpnonce=' . $nonce . '" class="button button-small button-primary"  >' . 'Create listings' . '</a>';
         $buttons = ' &nbsp; ' . $btn_import;
         wpla_show_message('There are ' . sizeof($items) . ' products(s) that can be matched automatically.' . $buttons, 'info');
     } else {
         wpla_show_message('No products found. All products with ASINs already exist in WP-Lister.');
     }
 }
コード例 #3
0
 public function ajax_wpla_match_product()
 {
     // TODO: check nonce
     if (isset($_REQUEST['post_id']) && isset($_REQUEST['asin'])) {
         $asin = $_REQUEST['asin'];
         $post_id = $_REQUEST['post_id'];
         $default_account_id = get_option('wpla_default_account_id', 1);
         $lm = new WPLA_ListingsModel();
         $success = $lm->insertMatchedProduct($post_id, $asin, $default_account_id);
         // $amazon_listing = WPLA_AmazonMarket::getMarket( $_REQUEST['amazon_listing_id'] );
         // $amazon_listing = new WPLA_AmazonMarket( $_REQUEST['amazon_listing_id'] );
         // echo "<pre>";print_r($amazon_listing);echo"</pre>";
         if ($success) {
             // store ASIN as product meta
             update_post_meta($post_id, '_wpla_asin', $asin);
             // build response
             $response = new stdClass();
             $response->post_id = $post_id;
             $response->listing_id = isset($lm->last_insert_id) ? $lm->last_insert_id : false;
             $response->error_msg = isset($lm->lastError) ? $lm->lastError : false;
             $response->url = 'http://www.amazon.com/dp/' . $asin;
             $response->success = true;
             $this->returnJSON($response);
             exit;
         } else {
             if (isset($lm->lastError)) {
                 echo $lm->lastError . "\n";
             }
             echo "Failed to match product!";
         }
     }
 }