145 lines
3.7 KiB
PHP
145 lines
3.7 KiB
PHP
<?php
|
|
/**
|
|
* WooCommerce Square
|
|
*
|
|
* This source file is subject to the GNU General Public License v3.0
|
|
* that is bundled with this package in the file license.txt.
|
|
* It is also available through the world-wide-web at this URL:
|
|
* http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 or later
|
|
* If you did not receive a copy of the license and are unable to
|
|
* obtain it through the world-wide-web, please send an email
|
|
* to license@woocommerce.com so we can send you a copy immediately.
|
|
*
|
|
* DISCLAIMER
|
|
*
|
|
* Do not edit or add to this file if you wish to upgrade WooCommerce Square to newer
|
|
* versions in the future. If you wish to customize WooCommerce Square for your
|
|
* needs please refer to https://docs.woocommerce.com/document/woocommerce-square/
|
|
*
|
|
* @author WooCommerce
|
|
* @copyright Copyright: (c) 2019, Automattic, Inc.
|
|
* @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 or later
|
|
*/
|
|
|
|
namespace WooCommerce\Square\Sync;
|
|
use WooCommerce\Square\Handlers\Product;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Class to represent a single catalog item.
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
class Catalog_Item {
|
|
|
|
|
|
/** @var \WC_Product the product object */
|
|
protected $product;
|
|
|
|
/** @var \Square\Models\CatalogObjectBatch the batch object */
|
|
protected $batch;
|
|
|
|
/** @var int the total number of catalog objects in this batch */
|
|
protected $batch_object_count = 0;
|
|
|
|
/** @var bool whether or not this catalog item should be soft-deleted */
|
|
protected $soft_delete = false;
|
|
|
|
/**
|
|
* Constructs the catalog item.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @param int|false|\WC_Product $product the product ID or product object
|
|
* @param bool $is_soft_delete whether this catalog object should be soft-deleted
|
|
* @throws \Exception
|
|
*/
|
|
public function __construct( $product, $is_soft_delete = false ) {
|
|
|
|
$product = is_numeric( $product ) ? wc_get_product( $product ) : $product;
|
|
|
|
if ( ! $product instanceof \WC_Product ) {
|
|
|
|
throw new \Exception( 'Invalid product' );
|
|
}
|
|
|
|
$this->product = $product;
|
|
$this->soft_delete = $is_soft_delete;
|
|
}
|
|
|
|
|
|
/**
|
|
* Gets the object batch.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @param \Square\Models\CatalogObject|null $catalog_object existing catalog object or null to create a new one
|
|
* @return \Square\Models\CatalogObjectBatch
|
|
* @throws \Exception
|
|
*/
|
|
public function get_batch( \Square\Models\CatalogObject $catalog_object = null ) {
|
|
|
|
if ( ! $this->batch ) {
|
|
$this->create_batch( $catalog_object );
|
|
}
|
|
|
|
return $this->batch;
|
|
}
|
|
|
|
|
|
/**
|
|
* Gets the total number of objects in the batch.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @return int
|
|
*/
|
|
public function get_batch_object_count() {
|
|
|
|
return $this->batch_object_count;
|
|
}
|
|
|
|
|
|
/**
|
|
* Returns whether this catalog object should be soft-deleted.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @return bool
|
|
*/
|
|
protected function is_soft_delete() {
|
|
|
|
return true === $this->soft_delete;
|
|
}
|
|
|
|
|
|
/**
|
|
* Creates a batch containing this item and any variations.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @param \Square\Models\CatalogObject|null $catalog_object existing catalog object or null to create a new one
|
|
* @throws \Exception
|
|
*/
|
|
protected function create_batch( \Square\Models\CatalogObject $catalog_object = null ) {
|
|
|
|
if ( ! $catalog_object ) {
|
|
$catalog_id = Product\Woo_SOR::get_square_item_id( $this->product );
|
|
$catalog_object = new \Square\Models\CatalogObject( 'ITEM', '' );
|
|
}
|
|
|
|
// update the object data from the Woo product
|
|
$catalog_object = Product\Woo_SOR::update_catalog_item( $catalog_object, $this->product );
|
|
|
|
$batch_data = array( $catalog_object );
|
|
|
|
$this->batch = new \Square\Models\CatalogObjectBatch( $batch_data );
|
|
|
|
$variations = $catalog_object->getItemData()->getVariations() ?: array();
|
|
|
|
$this->batch_object_count = 1 + count( $variations );
|
|
}
|
|
|
|
|
|
}
|