Initial Commit
This commit is contained in:
219
inc/functions/product.php
Normal file
219
inc/functions/product.php
Normal file
@ -0,0 +1,219 @@
|
||||
<?php
|
||||
/**
|
||||
* Product Functions
|
||||
*
|
||||
* @package WP_Ultimo\Functions
|
||||
* @since 2.0.0
|
||||
*/
|
||||
|
||||
// Exit if accessed directly
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
use \WP_Ultimo\Models\Product;
|
||||
|
||||
/**
|
||||
* Returns a product.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param null|int|string $product_id_or_slug The ID or slug of the product.
|
||||
* @return Product|false
|
||||
*/
|
||||
function wu_get_product($product_id_or_slug) {
|
||||
|
||||
if (is_numeric($product_id_or_slug) === false) {
|
||||
|
||||
return wu_get_product_by_slug($product_id_or_slug);
|
||||
|
||||
} // end if;
|
||||
|
||||
return Product::get_by_id($product_id_or_slug);
|
||||
|
||||
} // end wu_get_product;
|
||||
|
||||
/**
|
||||
* Queries products.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param array $query Query arguments.
|
||||
* @return Product[]
|
||||
*/
|
||||
function wu_get_products($query = array()) {
|
||||
|
||||
return Product::query($query);
|
||||
|
||||
} // end wu_get_products;
|
||||
|
||||
/**
|
||||
* Queries plans.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param array $query Query arguments.
|
||||
* @return Product[]
|
||||
*/
|
||||
function wu_get_plans($query = array()) {
|
||||
|
||||
$query['type'] = 'plan';
|
||||
|
||||
/*
|
||||
* Fixes the order.
|
||||
*/
|
||||
$query['order'] = 'ASC';
|
||||
$query['orderby'] = 'list_order';
|
||||
|
||||
return Product::query($query);
|
||||
|
||||
} // end wu_get_plans;
|
||||
|
||||
/**
|
||||
* Returns the list of plans as ID -> Name.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return array
|
||||
*/
|
||||
function wu_get_plans_as_options() {
|
||||
|
||||
$options = array();
|
||||
|
||||
foreach (wu_get_plans() as $plan) {
|
||||
|
||||
$options[$plan->get_id()] = $plan->get_name();
|
||||
|
||||
} // end foreach;
|
||||
|
||||
return $options;
|
||||
|
||||
} // end wu_get_plans_as_options;
|
||||
|
||||
/**
|
||||
* Returns a product based on slug.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param string $product_slug The slug of the product.
|
||||
* @return Product|false
|
||||
*/
|
||||
function wu_get_product_by_slug($product_slug) {
|
||||
|
||||
return Product::get_by('slug', $product_slug);
|
||||
|
||||
} // end wu_get_product_by_slug;
|
||||
/**
|
||||
* Returns a single product defined by a particular column and value.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param string $column The column name.
|
||||
* @param mixed $value The column value.
|
||||
* @return \WP_Ultimo\Models\Product|false
|
||||
*/
|
||||
function wu_get_product_by($column, $value) {
|
||||
|
||||
return Product::get_by($column, $value);
|
||||
|
||||
} // end wu_get_product_by;
|
||||
|
||||
/**
|
||||
* Creates a new product.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param array $product_data Product data.
|
||||
* @return Product|\WP_Error
|
||||
*/
|
||||
function wu_create_product($product_data) {
|
||||
|
||||
$product_data = wp_parse_args($product_data, array(
|
||||
'name' => false,
|
||||
'description' => false,
|
||||
'currency' => false,
|
||||
'pricing_type' => false,
|
||||
'setup_fee' => false,
|
||||
'parent_id' => 0,
|
||||
'slug' => false,
|
||||
'recurring' => false,
|
||||
'trial_duration' => 0,
|
||||
'trial_duration_unit' => 'day',
|
||||
'duration' => 1,
|
||||
'duration_unit' => 'day',
|
||||
'amount' => false,
|
||||
'billing_cycles' => false,
|
||||
'active' => false,
|
||||
'type' => false,
|
||||
'featured_image_id' => 0,
|
||||
'list_order' => 0,
|
||||
'date_created' => wu_get_current_time('mysql', true),
|
||||
'date_modified' => wu_get_current_time('mysql', true),
|
||||
'migrated_from_id' => 0,
|
||||
'meta' => array(),
|
||||
'available_addons' => array(),
|
||||
'group' => '',
|
||||
));
|
||||
|
||||
$product = new Product($product_data);
|
||||
|
||||
$saved = $product->save();
|
||||
|
||||
return is_wp_error($saved) ? $saved : $product;
|
||||
|
||||
} // end wu_create_product;
|
||||
/**
|
||||
* Returns a list of available product groups.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*/
|
||||
function wu_get_product_groups(): array {
|
||||
|
||||
global $wpdb;
|
||||
|
||||
$query = "SELECT DISTINCT `product_group` FROM {$wpdb->base_prefix}wu_products WHERE `product_group` <> ''";
|
||||
|
||||
$results = array_column($wpdb->get_results($query, ARRAY_A), 'product_group'); // phpcs:ignore
|
||||
|
||||
return array_combine($results, $results);
|
||||
|
||||
} // end wu_get_product_groups;
|
||||
|
||||
/**
|
||||
* Takes a list of product objects and separates them into plan and addons.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param Product[] $products List of products.
|
||||
* @return array first element is the first plan found, the second is an array with all the other products.
|
||||
*/
|
||||
function wu_segregate_products($products) {
|
||||
|
||||
$results = array(false, array());
|
||||
|
||||
foreach ($products as $product) {
|
||||
|
||||
if (is_a($product, Product::class) === false) {
|
||||
|
||||
$product = wu_get_product($product);
|
||||
|
||||
if (!$product) {
|
||||
|
||||
continue;
|
||||
|
||||
} // end if;
|
||||
|
||||
} // end if;
|
||||
|
||||
if ($product->get_type() === 'plan' && $results[0] === false) {
|
||||
|
||||
$results[0] = $product;
|
||||
|
||||
} else {
|
||||
|
||||
$results[1][] = $product;
|
||||
|
||||
} // end if;
|
||||
|
||||
} // end foreach;
|
||||
|
||||
return $results;
|
||||
|
||||
} // end wu_segregate_products;
|
Reference in New Issue
Block a user