opt = $opt; // TODO: Add more platforms beside AccessTrade $this->token = $opt[AFFILIATE_PROMOTIONS_AT_PREFIX.'token']; $this->api_options = array( 'timeout' => 10, 'headers' => array( 'Content-Type' =>'application/json', 'Authorization' =>'Token '.$this->token, ) ); // Because there're tons of them every time $this->offer_limit = $opt[AFFILIATE_PROMOTIONS_AT_PREFIX.'offer_limit'] ? $opt[AFFILIATE_PROMOTIONS_AT_PREFIX.'offer_limit'] : 30 ; $this->offer_limit = max($this->offer_limit,30); $this->offer_vendors = $opt[AFFILIATE_PROMOTIONS_AT_PREFIX.'offer_vendor'] ? $opt[AFFILIATE_PROMOTIONS_AT_PREFIX.'offer_vendor'] : '' ; $this->offer_categories = $opt[AFFILIATE_PROMOTIONS_AT_PREFIX.'offer_category'] ? $opt[AFFILIATE_PROMOTIONS_AT_PREFIX.'offer_category'] : '' ; } public static function add_feature_image_to_post($image_url,$post_id){ require_once(ABSPATH . 'wp-admin/includes/media.php'); $image_id = media_sideload_image($image_url, $post_id,null,'id'); set_post_thumbnail($post_id,$image_id); add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'promotion_image',$image_id); } public function run_full_update() { $this->sync_vendors_with_local(); $this->sync_promotions_with_local(); $this->sync_offers_with_local(); } private function admin_notice($mess,$type='success'){ add_action( 'admin_notices', function() use ($mess,$type) { ?>

api_options); return ( is_wp_error( $resp ) ) ? false : json_decode($resp['body']); } //---- Vendor public function sync_vendors_with_local() { $data = $this->fetch_api(AFFILIATE_PROMOTIONS_ACCESSTRADE_GET_VENDOR_API); if ( ! $data ) { return; } foreach ($data->data as $vendor){ $this->process_vendor_data($vendor); } } public static function process_vendor_data($vendor) { global $wpdb; $post_type = AFFILIATE_PROMOTIONS_PREFIX.'vendor'; $vendor_id = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE (post_title = '{$vendor->merchant}' and post_type = '{$post_type}') ;"); if( $vendor_id == null ){ $vendor_id = wp_insert_post(array( 'post_title' => $vendor->merchant, 'post_name' => $vendor->merchant, 'post_status' => "publish", 'post_author' => get_current_user_id(), 'post_type' => $post_type, )); add_post_meta($vendor_id ,AFFILIATE_PROMOTIONS_PREFIX .'vendor_url',$vendor->url); if (isset($vendor->category)) add_post_meta($vendor_id ,AFFILIATE_PROMOTIONS_PREFIX .'vendor_category',$vendor->category); } return $vendor_id; } //---- End Vendor //---- Promotion public function sync_promotions_with_local() { $data = $this->fetch_api(AFFILIATE_PROMOTIONS_ACCESSTRADE_GET_PROMOTION_API,array( 'status' =>1, )); if ( ! $data ) { $this->admin_notice(__('Connection error when update promotions ',AFFILIATE_PROMOTIONS_PLUG),'danger'); return; } foreach ($data->data as $promotion){ $this->process_promotion_data($promotion); } if( count($data->data) > 0){ $this->admin_notice(__('Updated '.count($data->data).' promotion(s)',AFFILIATE_PROMOTIONS_PLUG)); } } public static function process_promotion_data($promotions){ global $wpdb; $meta_id_name = AFFILIATE_PROMOTIONS_PREFIX .'promotion_id'; $meta_id = AFFILIATE_PROMOTIONS_AT_PREFIX .$promotions->id; $post_id = $wpdb->get_var( "SELECT * FROM $wpdb->postmeta WHERE (meta_key = '{$meta_id_name}' and meta_value = '{$meta_id}' );"); if ($post_id !== null){ return $post_id; } $post_type = AFFILIATE_PROMOTIONS_PREFIX.'promotion'; $post_id = wp_insert_post(array( 'post_title' => $promotions->name, 'post_status' => "publish", 'post_content' => $promotions->content, 'post_type' => $post_type, )); AccessTrade_Api::add_feature_image_to_post($promotions->image,$post_id); $vendor_id = AccessTrade_Api::process_vendor_data((object) array( 'merchant' =>$promotions->merchant, 'url' =>$promotions->domain, )); if( empty($promotions->coupons) ){ wp_set_object_terms($post_id, 'Promotion' ,AFFILIATE_PROMOTIONS_PREFIX.'promotion_type'); }else{ wp_set_object_terms($post_id, 'Coupon' ,AFFILIATE_PROMOTIONS_PREFIX.'promotion_type'); foreach ($promotions->coupons as $coupon){ $coupon_code[] = $coupon->coupon_code; $coupon_save[] = $coupon->coupon_save; } add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'promotion_code', implode($coupon_code,',') ); add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'promotion_discount', implode($coupon_save,',') ); } foreach ($promotions->categories as $category){ $cate_id = AccessTrade_Api::process_categories_data($category); wp_set_object_terms( $post_id, $cate_id, AFFILIATE_PROMOTIONS_PREFIX . 'category' ); } add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'promotion_vendor',$vendor_id); add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'promotion_url',$promotions->link); add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'promotion_title',$promotions->name); add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'promotion_valid_from', DateTime::createFromFormat("Y-m-d", $promotions->start_time)->getTimestamp()); add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'promotion_valid_until', DateTime::createFromFormat("Y-m-d", $promotions->end_time)->getTimestamp()); add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'promotion_description',$promotions->content); add_post_meta($post_id,$meta_id_name,$meta_id); return $post_id; } //---- End Promotion //---- Category public static function process_categories_data($category){ $term_id = get_term_by('slug', $category->category_name, AFFILIATE_PROMOTIONS_PREFIX.'category' ); if( $term_id ) return $term_id->term_id; return wp_insert_term ($category->category_name_show,AFFILIATE_PROMOTIONS_PREFIX.'category', array( 'slug' => $category->category_name ) ); } //---- End Category //---- Offers public function sync_offers_with_local() { $params = array( 'limit' =>$this->offer_limit, 'campaign' =>$this->offer_vendors, 'cate' =>$this->offer_categories, ); $data = $this->fetch_api(AFFILIATE_PROMOTIONS_ACCESSTRADE_GET_OFFER_API,$params); if ( ! $data ) { $this->admin_notice(__('Connection error when update offers ',AFFILIATE_PROMOTIONS_PLUG),'danger'); return; } foreach ($data->data as $offer){ AccessTrade_Api::process_offer_data($offer); } if( count($data->data) > 0){ $this->admin_notice(__('Updated '.count($data->data).' offer(s)',AFFILIATE_PROMOTIONS_PLUG)); } } public static function process_offer_data($offer) { global $wpdb; $meta_id_name = AFFILIATE_PROMOTIONS_PREFIX .'offer_id'; $meta_id = AFFILIATE_PROMOTIONS_AT_PREFIX .$offer->sku; $post_id = $wpdb->get_var( "SELECT * FROM $wpdb->postmeta WHERE (meta_key = '{$meta_id_name}' and meta_value = '{$meta_id}' );"); if ($post_id !== null){ return $post_id; } $post_type = AFFILIATE_PROMOTIONS_PREFIX.'offer'; $post_id = wp_insert_post(array( 'post_title' => $offer->name, 'post_status' => "publish", 'post_content' => $offer->desc ? $offer->desc : '', 'post_type' => $post_type, )); AccessTrade_Api::add_feature_image_to_post($offer->image,$post_id); $vendor_id = AccessTrade_Api::process_vendor_data((object) array( 'merchant' =>$offer->merchant, 'url' =>$offer->domain, )); $cate_id = AccessTrade_Api::process_categories_data((object) array( 'category_name_show'=>$offer->cate, 'category_name' =>$offer->cate, )); wp_set_object_terms( $post_id, $cate_id, AFFILIATE_PROMOTIONS_PREFIX . 'category' ); add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'offer_vendor',$vendor_id); add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'offer_url',$offer->url); add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'offer_title',$offer->name); add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'offer_price',$offer->price); add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'offer_price_sale',$offer->discount); add_post_meta($post_id,AFFILIATE_PROMOTIONS_PREFIX .'offer_description',$offer->desc); add_post_meta($post_id,$meta_id_name,$meta_id); return $post_id; } //---- End Offers } }