<?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;