Initial Commit
This commit is contained in:
130
inc/helpers/validation-rules/class-site-template.php
Normal file
130
inc/helpers/validation-rules/class-site-template.php
Normal file
@ -0,0 +1,130 @@
|
||||
<?php
|
||||
/**
|
||||
* Adds a validation rules that allows us to check if a given parameter is unique.
|
||||
*
|
||||
* @package WP_Ultimo
|
||||
* @subpackage Helpers/Validation_Rules
|
||||
* @since 2.0.4
|
||||
*/
|
||||
|
||||
namespace WP_Ultimo\Helpers\Validation_Rules;
|
||||
|
||||
use \WP_Ultimo\Dependencies\Rakit\Validation\Rule;
|
||||
use \WP_Ultimo\Checkout\Checkout;
|
||||
use \WP_Ultimo\Database\Sites\Site_Type;
|
||||
|
||||
// Exit if accessed directly
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
/**
|
||||
* Validates template sites.
|
||||
*
|
||||
* @since 2.0.4
|
||||
*/
|
||||
class Site_Template extends Rule {
|
||||
|
||||
/**
|
||||
* Error message to be returned when this value has been used.
|
||||
*
|
||||
* @since 2.0.4
|
||||
* @var string
|
||||
*/
|
||||
protected $message = '';
|
||||
|
||||
/**
|
||||
* Parameters that this rule accepts.
|
||||
*
|
||||
* @since 2.0.4
|
||||
* @var array
|
||||
*/
|
||||
protected $fillableParams = array(); // phpcs:ignore
|
||||
/**
|
||||
* Performs the actual check.
|
||||
*
|
||||
* @since 2.0.4
|
||||
*
|
||||
* @param mixed $template_id Value being checked.
|
||||
*/
|
||||
public function check($template_id) : bool { // phpcs:ignore
|
||||
|
||||
$template_id = absint($template_id);
|
||||
|
||||
if (!$template_id) {
|
||||
|
||||
return true;
|
||||
|
||||
} // end if;
|
||||
|
||||
$site = wu_get_site($template_id);
|
||||
|
||||
if (!$site || ($site->get_type() !== Site_Type::SITE_TEMPLATE && $site->get_type() !== Site_Type::CUSTOMER_OWNED)) {
|
||||
|
||||
$this->message = __('The Template ID does not correspond to a valid Template', 'wp-ultimo');
|
||||
|
||||
return false;
|
||||
|
||||
} // end if;
|
||||
|
||||
if ($site->get_type() === Site_Type::CUSTOMER_OWNED) {
|
||||
|
||||
if (!wu_get_setting('allow_own_site_as_template')) {
|
||||
|
||||
$this->message = __('You can not use your sites as template', 'wp-ultimo');
|
||||
|
||||
return false;
|
||||
|
||||
} // end if;
|
||||
|
||||
$customer = wu_get_current_customer();
|
||||
|
||||
if (!$customer || $site->get_customer_id() !== $customer->get_id()) {
|
||||
|
||||
$this->message = __('The selected template is not available.', 'wp-ultimo');
|
||||
|
||||
return false;
|
||||
|
||||
} // end if;
|
||||
|
||||
return true;
|
||||
|
||||
} // end if;
|
||||
|
||||
$allowed_templates = false;
|
||||
|
||||
$product_ids_or_slugs = Checkout::get_instance()->request_or_session('products', array());
|
||||
|
||||
$product_ids_or_slugs = array_unique($product_ids_or_slugs);
|
||||
|
||||
if ($product_ids_or_slugs) {
|
||||
|
||||
$products = array_map('wu_get_product', $product_ids_or_slugs);
|
||||
|
||||
$limits = new \WP_Ultimo\Objects\Limitations();
|
||||
|
||||
list($plan, $additional_products) = wu_segregate_products($products);
|
||||
|
||||
$products = array_merge(array($plan), $additional_products);
|
||||
|
||||
foreach ($products as $product) {
|
||||
|
||||
$limits = $limits->merge($product->get_limitations());
|
||||
|
||||
} // end foreach;
|
||||
|
||||
$allowed_templates = $limits->site_templates->get_available_site_templates();
|
||||
|
||||
} // end if;
|
||||
|
||||
if (is_array($allowed_templates) && !in_array($template_id, $allowed_templates)) { // phpcs:ignore
|
||||
|
||||
$this->message = __('The selected template is not available for this product.', 'wp-ultimo');
|
||||
|
||||
return false;
|
||||
|
||||
} // end if;
|
||||
|
||||
return true;
|
||||
|
||||
} // end check;
|
||||
|
||||
} // end class Site_Template;
|
Reference in New Issue
Block a user