401 lines
10 KiB
PHP
401 lines
10 KiB
PHP
<?php
|
|
/**
|
|
* A trait to be included in entities to WP_Plans Class deprecated methods.
|
|
*
|
|
* @package WP_Ultimo
|
|
* @subpackage Deprecated
|
|
* @since 2.0.0
|
|
*/
|
|
|
|
namespace WP_Ultimo\Traits;
|
|
|
|
/**
|
|
* WP_Ultimo_Plan_Deprecated trait.
|
|
*/
|
|
trait WP_Ultimo_Plan_Deprecated {
|
|
|
|
/**
|
|
* Top deal equivalent.
|
|
*
|
|
* @since 2.0.0
|
|
* @var bool
|
|
*/
|
|
protected $featured_plan;
|
|
|
|
/**
|
|
* Magic getter to provide backwards compatibility for plans.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @throws \Exception Throws an exception when trying to get a key that is not available or back-compat.
|
|
* @param string $key Property to get.
|
|
* @return mixed
|
|
*/
|
|
public function __get($key) {
|
|
|
|
$value = null;
|
|
|
|
switch ($key) {
|
|
case 'title':
|
|
$value = $this->get_name();
|
|
break;
|
|
case 'id':
|
|
case 'ID':
|
|
$value = $this->get_id();
|
|
break;
|
|
case 'free':
|
|
$value = $this->get_pricing_type() === 'free';
|
|
break;
|
|
case 'price_1':
|
|
case 'price_3':
|
|
case 'price_12':
|
|
$value = 20;
|
|
break;
|
|
case 'top_deal':
|
|
$value = $this->is_featured_plan();
|
|
break;
|
|
case 'feature_list':
|
|
$value = $this->get_feature_list();
|
|
break;
|
|
case 'quotas':
|
|
$value = array(
|
|
// 'sites' => 300,
|
|
'upload' => 1024 * 1024 * 1024,
|
|
'visits' => 300,
|
|
);
|
|
break;
|
|
case 'post':
|
|
$value = (object) array(
|
|
'ID' => $this->get_id(),
|
|
'post_title' => $this->get_name(),
|
|
);
|
|
break;
|
|
default:
|
|
$value = $this->get_meta('wpu_' . $key, false, true);
|
|
break;
|
|
} // end switch;
|
|
|
|
/**
|
|
* Let developers know that this is not going to be supported in the future.
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
_doing_it_wrong($key, __('Product keys should not be accessed directly', 'wp-ultimo'), '2.0.0');
|
|
|
|
return $value;
|
|
|
|
} // end __get;
|
|
|
|
/**
|
|
* Get the featured status for this product.
|
|
*
|
|
* @since 2.0.0
|
|
* @return array
|
|
*/
|
|
public function is_featured_plan() {
|
|
|
|
if ($this->featured_plan === null) {
|
|
|
|
$this->featured_plan = $this->get_meta('featured_plan', false);
|
|
|
|
} // end if;
|
|
|
|
return (bool) $this->featured_plan;
|
|
|
|
} // end is_featured_plan;
|
|
|
|
/**
|
|
* Set the featured status for this product.
|
|
*
|
|
* @since 2.0.0
|
|
* @param array $featured_plan Feature list for pricing tables.
|
|
* @return void
|
|
*/
|
|
public function set_featured_plan($featured_plan) {
|
|
|
|
$this->meta['featured_plan'] = $featured_plan;
|
|
|
|
} // end set_featured_plan;
|
|
|
|
/**
|
|
* Deprecated: Checks if a given plan is a contact us plan.
|
|
*
|
|
* @since 1.9.0
|
|
* @deprecated 2.0.0
|
|
* @return boolean
|
|
*/
|
|
public function is_contact_us() {
|
|
|
|
_deprecated_function(__METHOD__, '2.0.0', 'get_pricing_type');
|
|
|
|
return $this->get_pricing_type() === 'contact_us';
|
|
|
|
} // end is_contact_us;
|
|
|
|
/**
|
|
* Get the pricing table lines to be displayed on the pricing tables
|
|
*
|
|
* @since 1.4.0
|
|
* @return array
|
|
*/
|
|
public function get_pricing_table_lines() {
|
|
|
|
$pricing_table_lines = array();
|
|
|
|
/*
|
|
* Setup Fee
|
|
* @since 1.7.0
|
|
*/
|
|
if ($this->should_display_quota_on_pricing_tables('setup_fee', true)) {
|
|
|
|
if ($this->get_pricing_type() === 'contact_us') {
|
|
|
|
$pricing_table_lines['wu_product_contact_us'] = __('Contact Us to know more', 'wp-ultimo');
|
|
|
|
} else {
|
|
|
|
$pricing_table_lines['wu_product_setup_fee'] = $this->has_setup_fee()
|
|
? sprintf(__('Setup Fee: %s', 'wp-ultimo'), "<strong class='pricing-table-setupfee' data-value='" . $this->get_setup_fee() . "'>" . wu_format_currency($this->get_setup_fee()) . '</strong>')
|
|
: __('No Setup Fee', 'wp-ultimo');
|
|
|
|
} // end if;
|
|
|
|
} // end if;
|
|
|
|
/**
|
|
*
|
|
* Post Type Lines
|
|
* Gets the post type lines to be displayed on the pricing table options
|
|
*/
|
|
$post_types = get_post_types(array('public' => true), 'objects');
|
|
$post_types = apply_filters('wu_get_post_types', $post_types);
|
|
|
|
foreach ($post_types as $pt_slug => $post_type) {
|
|
/*
|
|
* @since 1.1.3 Let users choose which post types to display on the pt
|
|
*/
|
|
if ($this->should_display_quota_on_pricing_tables($pt_slug)) {
|
|
/**
|
|
* Get if disabled
|
|
*/
|
|
if ($this->is_post_type_disabled($pt_slug)) {
|
|
|
|
// Translators: used as "No Posts" where a post type is disabled
|
|
$pricing_table_lines['wu_product_limit_post_type_' . $pt_slug] = sprintf(__('No %s', 'wp-ultimo'), $post_type->labels->name);
|
|
|
|
continue;
|
|
|
|
} // end if;
|
|
|
|
/**
|
|
* Get the values
|
|
*
|
|
* @var integer|string
|
|
*/
|
|
$is_unlimited = (int) $this->get_limitations()->post_types->{$pt_slug}->number === 0 || !$this->get_limitations()->post_types->is_enabled();
|
|
$value = $is_unlimited ? __('Unlimited', 'wp-ultimo') : $this->get_limitations()->post_types->{$pt_slug}->number;
|
|
|
|
// Add Line
|
|
$label = $value == 1 ? $post_type->labels->singular_name : $post_type->labels->name;
|
|
|
|
$pricing_table_lines['wu_product_limit_post_type_' . $pt_slug] = sprintf('%s %s', $value, $label);
|
|
|
|
} // end if;
|
|
|
|
} // end foreach;
|
|
|
|
/**
|
|
*
|
|
* Site, Disk Space and Trial
|
|
* Gets the Disk Space and Sites to be displayed on the pricing table options
|
|
*/
|
|
if (wu_get_setting('enable_multiple_sites') && $this->should_display_quota_on_pricing_tables('sites')) {
|
|
|
|
$is_unlimited = (int) $this->get_limitations()->sites->get_limit() === 0 || !$this->get_limitations()->sites->is_enabled();
|
|
$value = $is_unlimited ? __('Unlimited', 'wp-ultimo') : $this->get_limitations()->sites->get_limit();
|
|
|
|
// Add Line
|
|
$pricing_table_lines['wu_product_limit_sites'] = sprintf('<strong>%s %s</strong>', $value, _n('Site', 'Sites', $this->get_limitations()->sites->get_limit(), 'wp-ultimo'));
|
|
|
|
} // end if;
|
|
|
|
/**
|
|
* Display DiskSpace
|
|
*/
|
|
if ($this->should_display_quota_on_pricing_tables('upload')) {
|
|
|
|
$is_unlimited = (int) $this->get_limitations()->disk_space->get_limit() === 0 || !$this->get_limitations()->disk_space->is_enabled();
|
|
$disk_space = $is_unlimited ? __('Unlimited', 'wp-ultimo') : size_format(absint($this->get_limitations()->disk_space->get_limit()) * 1024 * 1024);
|
|
|
|
// Add Line
|
|
$pricing_table_lines['wu_product_limit_disk_space'] = !empty($disk_space) ? sprintf(__('%s <strong>Disk Space</strong>', 'wp-ultimo'), $disk_space) : false;
|
|
|
|
} // end if;
|
|
|
|
/**
|
|
* Visits
|
|
*
|
|
* @since 1.6.0
|
|
*/
|
|
if ($this->should_display_quota_on_pricing_tables('visits')) {
|
|
|
|
$is_unlimited = (int) $this->get_limitations()->visits->get_limit() === 0 || !$this->get_limitations()->visits->is_enabled();
|
|
$value = $is_unlimited ? __('Unlimited', 'wp-ultimo') : number_format($this->get_limitations()->visits->get_limit());
|
|
|
|
// Add Line
|
|
$pricing_table_lines['wu_product_limit_visits'] = sprintf('%s %s', $value, _n('Visit per month', 'Visits per month', $this->get_limitations()->visits->get_limit(), 'wp-ultimo'));
|
|
|
|
} // end if;
|
|
|
|
/**
|
|
* Display Trial, if some
|
|
*/
|
|
$trial_days = wu_get_setting('trial');
|
|
$trial_days_plan = $this->get_trial_duration();
|
|
|
|
if ($trial_days > 0 || $trial_days_plan) {
|
|
|
|
$trial_days = $trial_days_plan ? $trial_days_plan : $trial_days;
|
|
|
|
$pricing_table_lines['wu_product_trial'] = !$this->is_free() ? sprintf(__('%s day <strong>Free Trial</strong>', 'wp-ultimo'), $trial_days) : '-';
|
|
|
|
} // end if;
|
|
|
|
/**
|
|
*
|
|
* Site, Disk Space and Trial
|
|
* Gets the Disk Space and Sites to be displayed on the pricing table options
|
|
*/
|
|
|
|
/** Loop custom lines */
|
|
$custom_features = explode('<br />', nl2br($this->get_feature_list()));
|
|
|
|
foreach ($custom_features as $key => $custom_feature) {
|
|
|
|
if (trim($custom_feature) == '') {
|
|
|
|
continue;
|
|
|
|
} // end if;
|
|
|
|
$pricing_table_lines['wu_product_feature_' . $key] = sprintf('%s', trim($custom_feature));
|
|
|
|
} // end foreach;
|
|
|
|
/**
|
|
* Return Lines, filterable
|
|
*/
|
|
return apply_filters("wu_get_pricing_table_lines_$this->id", $pricing_table_lines, $this);
|
|
|
|
} // end get_pricing_table_lines;
|
|
|
|
/**
|
|
* Deprecated: A quota to get.
|
|
*
|
|
* @since 2.0.0
|
|
*
|
|
* @deprecated 2.0.0
|
|
* @param string $quota_name The quota name.
|
|
* @return mixed
|
|
*/
|
|
public function get_quota($quota_name) {
|
|
|
|
if ($quota_name === 'visits') {
|
|
|
|
$limit = (float) $this->get_limitations()->visits->get_limit();
|
|
|
|
} elseif ($quota_name === 'disk_space') {
|
|
|
|
$limit = (float) $this->get_limitations()->disk_space->get_limit();
|
|
|
|
} elseif ($quota_name === 'sites') {
|
|
|
|
$limit = (float) $this->get_limitations()->sites->get_limit();
|
|
|
|
} else {
|
|
|
|
$limit = (float) $this->get_limitations()->post_types->{$quota_name}->number;
|
|
|
|
} // end if;
|
|
|
|
return $limit;
|
|
|
|
} // end get_quota;
|
|
|
|
/**
|
|
* Returns wether or not we should display a given quota type in the Quotas and Limits widgets
|
|
*
|
|
* @since 1.5.4
|
|
* @param string $quota_type Post type to check.
|
|
* @param string $default Default value.
|
|
* @return bool
|
|
*/
|
|
public function should_display_quota_on_pricing_tables($quota_type, $default = false) {
|
|
/*
|
|
* @since 1.3.3 Only Show elements allowed on the plan settings
|
|
*/
|
|
$elements = array();
|
|
|
|
if (!$elements) {
|
|
|
|
return true;
|
|
|
|
} // end if;
|
|
|
|
if (!isset( $elements[$quota_type] ) && $default) {
|
|
|
|
return true;
|
|
|
|
} // end if;
|
|
|
|
return isset( $elements[$quota_type] ) && $elements[$quota_type];
|
|
|
|
} // end should_display_quota_on_pricing_tables;
|
|
|
|
/**
|
|
* Checks if this plan allows unlimited extra users
|
|
*
|
|
* @since 1.7.0
|
|
* @return boolean
|
|
*/
|
|
public function should_allow_unlimited_extra_users() {
|
|
|
|
return apply_filters('wu_plan_should_allow_unlimited_extra_users', (bool) $this->unlimited_extra_users, $this);
|
|
|
|
} // end should_allow_unlimited_extra_users;
|
|
|
|
/**
|
|
* Returns wether or not we should display a given quota type in the Quotas and Limits widgets
|
|
*
|
|
* @since 1.5.4
|
|
* @param string $post_type The post type.
|
|
* @return bool
|
|
*/
|
|
public function is_post_type_disabled($post_type) {
|
|
|
|
return !$this->get_limitations()->post_types->{$post_type}->enabled;
|
|
|
|
} // end is_post_type_disabled;
|
|
|
|
/**
|
|
* Returns the post_type quotas
|
|
*
|
|
* @since 1.7.0
|
|
* @return array
|
|
*/
|
|
public function get_post_type_quotas(): ?array {
|
|
|
|
$quotas = $this->quotas;
|
|
|
|
return array_filter($quotas, fn($quota_name) => !in_array($quota_name, array(
|
|
'sites',
|
|
'attachment',
|
|
'upload',
|
|
'users',
|
|
'visits',
|
|
), true), ARRAY_FILTER_USE_KEY);
|
|
|
|
} // end get_post_type_quotas;
|
|
|
|
} // end trait WP_Ultimo_Plan_Deprecated;
|