listid = 0; $this->productid = 0; $this->asin = ''; $this->parentasin = ''; $this->ean = ''; $this->shopid = ''; $this->isbn = ''; $this->mpn = ''; $this->brand = ''; $this->productgroup = ''; $this->releasedate = ''; $this->addtocarturl = ''; $this->producturl = ''; $this->customerreviewurl = ''; $this->smallimageurl = ''; $this->mediumimageurl = ''; $this->largeimageurl = ''; $this->manufacturer = ''; $this->author = ''; $this->numberofpages = 0; $this->features = ''; //$this->thumbimagesurl =''; //$this->imagesurl =''; $this->images = array(); $this->offers = array(); $this->refreshreviewinforegulary = ''; $this->refreshpriceinforegulary = ''; $this->refreshproducturlregulary = ''; $this->refreshmoreoffersregulary = false; $this->isownreview = ''; $this->rating = 0; $this->reviewcount = 0; $this->reviewsurl = ''; //interne postid $this->productid = ''; $this->title = ''; $this->description = ''; $this->listprice = ''; $this->amountsaved = ''; $this->saleprice = ''; $this->listpricefloat = (float) 0; $this->amountsavedfloat = (float) 0; $this->percentagesaved = ''; $this->salepricefloat = (float) 0; $this->shippingfloat = (float) 0; $this->availability = ''; $this->shipping = ''; $this->isprime = 0; //wird nicht verwendet: $this->lowestnewprice = ''; $this->totalnew = 0; $this->disablehoverlink = 0; $this->predicate = ''; $this->testresult = ''; $this->pro = ''; $this->contra = ''; $this->postids = ''; $this->outputashtml = false; $this->customfields = array(); $this->variations = array(); $this->variationname = ''; } public static function get_mainimage($productid, $type = 'largetosmall') { if(!is_a($productid, 'atkp_product')) { $product = atkp_product::load( $productid ); } else $product = $productid; $imageurl = ''; $overridemainimage = $product->productid == '' ? '' : ATKPTools::get_post_setting( $product->productid, ATKP_PRODUCT_POSTTYPE . '_overridemainimage' ); if($overridemainimage != '') { $newimages = atkp_product_image::load_images( $product->productid ); $idx = 1; foreach ( $newimages as $newimage ) { if ( $idx == $overridemainimage ) { switch($type) { default: case 'largetosmall': if($imageurl == '') $imageurl = $newimage->largeimageurl; if($imageurl == '') $imageurl = $newimage->mediumimageurl; if($imageurl == '') $imageurl = $newimage->smallimageurl; break; case 'smalltolarge': if($imageurl == '') $imageurl = $newimage->smallimageurl; if($imageurl == '') $imageurl = $newimage->mediumimageurl; if($imageurl == '') $imageurl = $newimage->largeimageurl; break; case 'mediumtolarge': if($imageurl == '') $imageurl = $newimage->mediumimageurl; if($imageurl == '') $imageurl = $newimage->smallimageurl; if($imageurl == '') $imageurl = $newimage->largeimageurl; break; } break; } $idx++; } } switch($type) { default: case 'largetosmall': if($imageurl == '') $imageurl = $product->largeimageurl; if($imageurl == '') $imageurl = $product->mediumimageurl; if($imageurl == '') $imageurl = $product->smallimageurl; break; case 'smalltolarge': if($imageurl == '') $imageurl = $product->smallimageurl; if($imageurl == '') $imageurl = $product->mediumimageurl; if($imageurl == '') $imageurl = $product->largeimageurl; break; case 'mediumtolarge': if($imageurl == '') $imageurl = $product->mediumimageurl; if($imageurl == '') $imageurl = $product->smallimageurl; if($imageurl == '') $imageurl = $product->largeimageurl; break; } return $imageurl; } public static function get_product_from_woo($wooid) { $product = null; $eanfield = atkp_options::$loader->get_woo_ean_field(); $keytype = atkp_options::$loader->get_woo_keytype(); if($eanfield == '' || $eanfield == 'sku') $ean = ATKPTools::get_post_setting( $wooid, '_sku'); else $ean = ATKPTools::get_post_setting( $wooid, $eanfield); if($keytype == 'id') { $exists = atkp_product::exists($ean); if($exists) $product = $ean; } else $product = atkp_product::idbyean($ean); return $product; } public static function get_woo_product( $productid ) { $product = atkp_product::load( $productid ); $keytype = atkp_options::$loader->get_woo_keytype(); $woo_product = null; $eans = array(); if ( $keytype == 'id' ) { array_push( $eans, $productid ); } else { $eans = explode( ',', $product->ean ); if ( $product->ean == '' ) { return null; } } if ( ATKPLog::$logenabled ) { ATKPLog::LogDebug( 'export_product woo productid: ' . $productid ); ATKPLog::LogDebug( 'export_product woo ean exists: ' . ( ! ( $product->ean == '' || count( $eans ) == 0 ) ) ); } if ( count( $eans ) == 0 ) { return null; } $eanfield = atkp_options::$loader->get_woo_ean_field(); foreach ( $eans as $ean ) { $meta_key = $eanfield; if ( $eanfield == '' || $eanfield == 'sku' ) { $meta_key = '_sku'; } $args = array( 'post_type' => array( 'product' ), 'post_status' => array( 'draft', 'publish' ), 'meta_key' => $meta_key, 'meta_value' => $ean, 'meta_compare' => '=', ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) { $the_query->the_post(); $woo_product = $the_query->post; } wp_reset_postdata(); }; return $woo_product; } public static function loadbyasin( $asin ) { /* * 'publish' - a published post or page * 'pending' - post is pending review * 'draft' - a post in draft status * 'auto-draft' - a newly created post, with no content * 'future' - a post to publish in the future * 'private' - not visible to users who are not logged in * 'inherit' - a revision. see get_children. * 'trash' - post is in trashbin. added with Version 2.9. */ $args = array( 'meta_key' => ATKP_PRODUCT_POSTTYPE . '_asin', 'meta_value' => $asin, 'post_type' => ATKP_PRODUCT_POSTTYPE, 'post_status' => array( 'publish', 'draft' ), 'posts_per_page' => - 1 ); $posts = get_posts( $args ); if ( count( $posts ) == 0 ) { return null; } else { return atkp_product::load( $posts[0]->ID ); } } public static function idbyasin( $asin ) { /* * 'publish' - a published post or page * 'pending' - post is pending review * 'draft' - a post in draft status * 'auto-draft' - a newly created post, with no content * 'future' - a post to publish in the future * 'private' - not visible to users who are not logged in * 'inherit' - a revision. see get_children. * 'trash' - post is in trashbin. added with Version 2.9. */ $args = array( 'meta_key' => ATKP_PRODUCT_POSTTYPE . '_asin', 'meta_value' => $asin, 'post_type' => ATKP_PRODUCT_POSTTYPE, 'post_status' => array( 'publish', 'draft' ), 'posts_per_page' => - 1 ); $posts = get_posts( $args ); if ( count( $posts ) == 0 ) { return null; } else { return $posts[0]->ID; } } public static function idbyean( $asin ) { /* * 'publish' - a published post or page * 'pending' - post is pending review * 'draft' - a post in draft status * 'auto-draft' - a newly created post, with no content * 'future' - a post to publish in the future * 'private' - not visible to users who are not logged in * 'inherit' - a revision. see get_children. * 'trash' - post is in trashbin. added with Version 2.9. */ $args = array( 'meta_key' => ATKP_PRODUCT_POSTTYPE . '_ean', 'meta_value' => $asin, 'meta_compare' => 'LIKE', 'post_type' => ATKP_PRODUCT_POSTTYPE, 'post_status' => array( 'publish', 'draft' ), 'posts_per_page' => - 1 ); $posts = get_posts( $args ); if ( count( $posts ) == 0 ) { return null; } else { return $posts[0]->ID; } } public static function idbyname( $name ) { /* * 'publish' - a published post or page * 'pending' - post is pending review * 'draft' - a post in draft status * 'auto-draft' - a newly created post, with no content * 'future' - a post to publish in the future * 'private' - not visible to users who are not logged in * 'inherit' - a revision. see get_children. * 'trash' - post is in trashbin. added with Version 2.9. */ $args = array( 'title' => $name, 'post_type' => ATKP_PRODUCT_POSTTYPE, 'post_status' => array( 'publish', 'draft' ), 'posts_per_page' => 2 ); $posts = get_posts( $args ); if ( count( $posts ) == 0 ) { return null; } else { return $posts[0]->ID; } } public static function exists( $post_id ) { $product = get_post( $post_id ); if ( ! isset( $product ) || $product == null ) { return false; } if ( $product->post_type != ATKP_PRODUCT_POSTTYPE ) { return false; } if ( $product->post_status == 'publish' || $product->post_status == 'draft' ) { return true; } return false; } private $metafields = array(); public function get_metavalue($name) { $value = isset($this->metafields[$name]) ? $this->metafields[$name] : null; if ( isset( $value ) && is_array( $value ) && count( $value ) > 0 ) { return $value[0]; } else { return ''; } } public static function load( $post_id ) { $product = get_post( $post_id ); if ( ! isset( $product ) || $product == null ) { throw new Exception( 'product not found: ' . $post_id ); } if ( $product->post_type != ATKP_PRODUCT_POSTTYPE ) { throw new Exception( 'invalid post_type: ' . $product->post_type . ', $post_id: ' . $post_id ); } $prd = new atkp_product(); $prd->metafields = get_post_meta($post_id); //$prd->title = $product->post_title; //$prd->description = $product->post_content; $prd->productid = $post_id; $prd->shopid = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_shopid' ); if($prd->shopid != '') $prd->shop = atkp_shop::load($prd->shopid, true); $prd->title = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_title' ); $prd->description = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_description' ); $prd->productid = $post_id; //ATKP_PRODUCT_POSTTYPE.'_updatedon' $prd->updatedon = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_updatedon' ); $prd->predicate = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_predicate' ); $prd->pro = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_pro' ); $prd->contra = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_contra' ); $prd->testresult = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_testresult' ); $prd->testrating = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_testrating' ); $prd->testdate = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_testdate' ); $prd->asin = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_asin' ); $prd->ean = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_ean' ); $prd->isbn = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_isbn' ); $prd->brand = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_brand' ); $prd->productgroup = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_productgroup' ); $prd->releasedate = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_releasedate' ); $prd->disablehoverlink = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_disablehoverlink' ); $prd->addtocarturl = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_addtocarturl' ); $prd->producturl = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_producturl' ); $prd->customerreviewurl = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_customerreviewsurl' ); $prd->smallimageurl = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_smallimageurl' ); $prd->mediumimageurl = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_mediumimageurl' ); $prd->largeimageurl = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_largeimageurl' ); $prd->manufacturer = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_manufacturer' ); $prd->author = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_author' ); $prd->numberofpages = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_numberofpages' ); $prd->features = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_features' ); $prd->images = atkp_product_image::load_images( $post_id ); $prd->offers = atkp_product_offer::load_offers( $post_id ); //$prd->imagesurl = ATKPTools::get_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE.'_imagesurl'); //$prd->thumbimagesurl = ATKPTools::get_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE.'_thumbimagesurl'); $variations = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_variations' ); $prd->variations = $variations == '' ? null : unserialize($variations); $prd->refreshreviewinforegulary = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_refreshreviewinforegulary' ); $prd->refreshpriceinforegulary = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_refreshpriceinforegulary' ); $prd->refreshproducturlregulary = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_refreshproducturlregulary' ); $prd->isownreview = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_isownreview' ); $prd->rating = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_rating' ); $prd->reviewcount = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_reviewcount' ); $prd->reviewsurl = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_reviewsurl' ); $prd->listprice = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_listprice' ); $prd->amountsaved = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_amountsaved' ); $prd->percentagesaved = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_percentagesaved' ); $prd->saleprice = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_saleprice' ); $prd->availability = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_availability' ); $prd->shipping = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_shipping' ); $prd->isprime = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_isprime' ); $prd->listpricefloat = (float) $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_listpricefloat' ); $prd->amountsavedfloat = (float) $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_amountsavedfloat' ); $prd->salepricefloat = (float) $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_salepricefloat' ); $prd->shippingfloat = (float) $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_shippingfloat' ); $prd->refreshmoreoffersregulary = $prd->get_metavalue( ATKP_PRODUCT_POSTTYPE . '_refreshmoreoffersregulary' ); $postid = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_postid' ); $prd->postids = $postid == '' ? null : unserialize($postid); $prd->outputashtml = $prd->get_metavalue(ATKP_PRODUCT_POSTTYPE . '_outputashtml' ); $prd->load_displayfields(); return $prd; } public function get_pricehistory() { return atkp_product_pricehistory::load_history($this->productid); } public function load_displayfields() { if ( ATKP_PLUGIN_VERSION < 30 ) return ; $this->load_fields(); $this->load_fieldgroups(); if( atkp_options::$loader->get_acfenabled() ) { $this->load_acf_fields(); } //load acf fields } private function load_acf_fields() { $acffields = get_fields($this->productid); if($acffields) foreach( $acffields as $name => $value ) { $this->displayfields['acf_'. $name] = (string)$value; } } private function load_fields() { $newfields = atkp_udfield::load_fields(); foreach ( $newfields as $newfield ) { $fieldname = 'customfield_' . $newfield->name; $this->displayfields[ $fieldname ] = ''; if ( $this->productid == '' || $this->productid == '0' ) { continue; } $newfield->isnewfield = false; $this->displayfields[ $fieldname ] = $newfield; } $taxonomies = atkp_udtaxonomy::load_taxonomies(); if ( $taxonomies != null ) { foreach ( $taxonomies as $taxonomy ) { if ( ! $taxonomy->issystemfield ) { if ( $taxonomy->isnewtax ) { $fieldname = 'ct_' . $taxonomy->name; } else { $fieldname = 'customtaxonomy_' . $taxonomy->name; } } else { if ( $taxonomy->ismanufacturer ) { $fieldname = 'manufacturer'; } else if ( $taxonomy->isauthor ) { $fieldname = 'author'; } else if ( $taxonomy->isbrand ) { $fieldname = 'brand'; } else if ( $taxonomy->isproductcategory ) { $fieldname = 'productcategory'; } else { $fieldname = $taxonomy->name; } } if ( $this->productid != '' ) { $this->displayfields[ $fieldname ] = $taxonomy; } } } } private function load_fieldgroups($prefix = 'cf_') { if ( ! get_option( ATKP_PLUGIN_PREFIX . '_fieldgroups_enabled', false ) ) { return; } $groups = ATKPTools::get_fieldgroups_by_productid( $this->productid ); foreach ( $groups as $group ) { $fields = ATKPTools::get_post_setting( $group->ID, ATKP_FIELDGROUP_POSTTYPE . '_fields' ); if ( $fields != null ) { foreach ( $fields as $field ) { $field->isnewfield = true; if ( $field->type != 6 ) { $this->displayfields[ $prefix . $field->name ] = $field; } } } } } /** * Function wird aufgerufen wenn eine Liste geladen wird * Hier können notwendige Infos an das Produkt übergeben werden. * @param $list_id */ public function init_list($list_id, $shop_id) { $this->listid = $list_id; if($this->productid != '') return; $this->offers = atkp_product_offer::load_offers_by_listid( $list_id, $this->asin ); if($shop_id != '' && $shop_id != 0) { $this->shopid = $shop_id; $this->shop = atkp_shop::load($shop_id, true); } } public function __get( $member ) { if ( isset( $this->data[ $member ] ) ) { return $this->data[ $member ]; } } public function __set( $member, $value ) { // if (isset($this->data[$member])) { $this->data[ $member ] = $value; //} } protected static function price_to_float( $s ) { return ATKPTools::price_to_float($s); // $s = str_replace( ',', '.', $s ); // remove everything except numbers and dot "." // $s = preg_replace( "/[^0-9\.]/", "", $s ); // remove all seperators from first part and keep the end // $s = str_replace( '.', '', substr( $s, 0, - 3 ) ) . substr( $s, - 3 ); // return float // return round( (float) $s, 2 ); } } ?>