Initial Commit
This commit is contained in:
293
inc/functions/limitations.php
Normal file
293
inc/functions/limitations.php
Normal file
@ -0,0 +1,293 @@
|
||||
<?php
|
||||
/**
|
||||
* Limitations Functions
|
||||
*
|
||||
* @package WP_Ultimo\Functions
|
||||
* @since 2.0.0
|
||||
*/
|
||||
|
||||
// Exit if accessed directly
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
/**
|
||||
* Checks if the current site has a certain product associated to it.
|
||||
*
|
||||
* This is useful for controlling the display of certain info
|
||||
* based on the plans and other products attached to a membership -
|
||||
* and as a consequence - to a site.
|
||||
*
|
||||
* For example, to display something only to the customers of the
|
||||
* products with the "premium" slug, we'd have something like this:
|
||||
*
|
||||
* if (wu_has_product('premium')) {
|
||||
*
|
||||
* // premium content here.
|
||||
*
|
||||
* } else {
|
||||
*
|
||||
* // Content for non-members.
|
||||
*
|
||||
* }.
|
||||
*
|
||||
* One important things to keep in mind is that this function
|
||||
* does not check for the status of that site's membership by default.
|
||||
* If that's something that you need, pass the second param "blocking" as true.
|
||||
* If the blocking flag is set, the function only returns true if the site has
|
||||
* the product and if the membership is active.
|
||||
*
|
||||
* Another important note:
|
||||
* This function behaves differently when called in the context of
|
||||
* the main site or a regular site. In these cases, we loop through
|
||||
* all of the customer's memberships to try to find at least one
|
||||
* with the requested product. This makes this function useful
|
||||
* to control access to content on the main site, for example.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @see wu_is_membership_active()
|
||||
*
|
||||
* @todo Implement search algo for main site and regular site.
|
||||
* @param string|array $product_slug Product slug to check. Can also be an array of product slugs.
|
||||
* Will return true if ANY slug on the array is present.
|
||||
* @param bool $blocking When set to true, this flag also validates the active status of the membership.
|
||||
* @param string $site_id The site ID to test.
|
||||
* @return boolean
|
||||
*/
|
||||
function wu_has_product($product_slug, $blocking = false, $site_id = '') {
|
||||
|
||||
if (!is_array($product_slug)) {
|
||||
|
||||
$product_slug = array($product_slug);
|
||||
|
||||
} // end if;
|
||||
|
||||
if (empty($site_id)) {
|
||||
|
||||
$site_id = get_current_blog_id();
|
||||
|
||||
} // end if;
|
||||
|
||||
$site = wu_get_site($site_id);
|
||||
|
||||
if (empty($site)) {
|
||||
|
||||
return new \WP_Error('site-not-found', __('Invalid site ID', 'wp-ultimo'));
|
||||
|
||||
} // end if;
|
||||
|
||||
$membership = $site->get_membership();
|
||||
|
||||
if (empty($membership)) {
|
||||
|
||||
return true;
|
||||
|
||||
} // end if;
|
||||
|
||||
$applicable_products_slugs = $membership->get_applicable_product_slugs();
|
||||
|
||||
$contains_product = empty(array_intersect($product_slug, $applicable_products_slugs)) === false;
|
||||
|
||||
$active_status = true;
|
||||
|
||||
if ($blocking) {
|
||||
|
||||
$active_status = $membership->is_active();
|
||||
|
||||
} // end if;
|
||||
|
||||
return $contains_product && $active_status;
|
||||
|
||||
} // end wu_has_product;
|
||||
|
||||
/**
|
||||
* Checks if the membership associated with a site is active.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param string $site_id The site ID to test.
|
||||
* @return bool
|
||||
*/
|
||||
function wu_is_membership_active($site_id = '') {
|
||||
|
||||
if (empty($site_id)) {
|
||||
|
||||
$site_id = get_current_blog_id();
|
||||
|
||||
} // end if;
|
||||
|
||||
$site = wu_get_site($site_id);
|
||||
|
||||
if (empty($site)) {
|
||||
|
||||
return new \WP_Error('site-not-found', __('Invalid site ID', 'wp-ultimo'));
|
||||
|
||||
} // end if;
|
||||
|
||||
$membership = $site->get_membership();
|
||||
|
||||
if (empty($membership)) {
|
||||
|
||||
return true;
|
||||
|
||||
} // end if;
|
||||
|
||||
return $membership->is_active();
|
||||
|
||||
} // end wu_is_membership_active;
|
||||
|
||||
/**
|
||||
* Register a new Limitation module.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param string $id The id of the limitation module.
|
||||
* @param string $class_name The module class name.
|
||||
* @return void
|
||||
*/
|
||||
function wu_register_limit_module($id, $class_name) {
|
||||
|
||||
add_filter('wu_limit_classes', function($classes) use ($id, $class_name) {
|
||||
|
||||
$id = sanitize_title($id);
|
||||
|
||||
$classes[$id] = $class_name;
|
||||
|
||||
return $classes;
|
||||
|
||||
});
|
||||
|
||||
} // end wu_register_limit_module;
|
||||
|
||||
/**
|
||||
* Generate the modal link to search for an upgrade path.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param array $args The module and type of limit that needs upgrading.
|
||||
* @return string
|
||||
*/
|
||||
function wu_generate_upgrade_to_unlock_url($args) {
|
||||
|
||||
$args = wp_parse_args($args, array(
|
||||
'module' => false,
|
||||
'type' => false,
|
||||
));
|
||||
|
||||
$membership = wu_get_current_site()->get_membership();
|
||||
|
||||
if (!$membership) {
|
||||
|
||||
return '';
|
||||
|
||||
} // end if;
|
||||
|
||||
$upgrade_url = wu_get_membership_update_url($membership);
|
||||
|
||||
$url = add_query_arg($args, $upgrade_url);
|
||||
|
||||
/**
|
||||
* Allow developers to change the upgrade to unlock URL
|
||||
*
|
||||
* @param string $url The upgrade URL.
|
||||
* @param array $args The module and type of limit that needs upgrading.
|
||||
*/
|
||||
return apply_filters('wu_upgrade_to_unlock_url', $url, $args);
|
||||
|
||||
} // end wu_generate_upgrade_to_unlock_url;
|
||||
|
||||
/**
|
||||
* Generates a Unlock to Upgrade button for the upgrade modal.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param string $title The title of the modal and label of the button.
|
||||
* @param array $args The module and type of limit that needs upgrading.
|
||||
* @return string
|
||||
*/
|
||||
function wu_generate_upgrade_to_unlock_button($title, $args) {
|
||||
|
||||
$args = wp_parse_args($args, array(
|
||||
'module' => false,
|
||||
'type' => false,
|
||||
'classes' => '',
|
||||
));
|
||||
|
||||
$url = wu_generate_upgrade_to_unlock_url(array(
|
||||
'module' => $args['module'],
|
||||
'type' => $args['type'],
|
||||
));
|
||||
|
||||
$element = sprintf(
|
||||
'<a href="%s" title="%s" class="%s">%s</a>',
|
||||
$url,
|
||||
$title,
|
||||
$args['classes'],
|
||||
$title
|
||||
);
|
||||
|
||||
return $element;
|
||||
|
||||
} // end wu_generate_upgrade_to_unlock_button;
|
||||
|
||||
/**
|
||||
* Activate a plugin(s) via Job Queue.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param int $site_id The site ID.
|
||||
* @param string|array $plugins The plugin or list of plugins to activate.
|
||||
* @param boolean $network_wide If we want to activate it network-wide.
|
||||
* @param boolean $silent IF we should do the process silently - true by default.
|
||||
* @return void
|
||||
*/
|
||||
function wu_async_activate_plugins($site_id, $plugins, $network_wide = false, $silent = true) {
|
||||
|
||||
wu_enqueue_async_action('wu_async_handle_plugins', array(
|
||||
'action' => 'activate',
|
||||
'site_id' => $site_id,
|
||||
'plugins' => $plugins,
|
||||
'network_wide' => $network_wide,
|
||||
'silent' => $silent,
|
||||
));
|
||||
|
||||
} // end wu_async_activate_plugins;
|
||||
|
||||
/**
|
||||
* Deactivates a plugin(s) via Job Queue.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param int $site_id The site ID.
|
||||
* @param string|array $plugins The plugin or list of plugins to activate.
|
||||
* @param boolean $network_wide If we want to activate it network-wide.
|
||||
* @param boolean $silent IF we should do the process silently - true by default.
|
||||
* @return void
|
||||
*/
|
||||
function wu_async_deactivate_plugins($site_id, $plugins, $network_wide = false, $silent = true) {
|
||||
|
||||
wu_enqueue_async_action('wu_async_handle_plugins', array(
|
||||
'action' => 'deactivate',
|
||||
'site_id' => $site_id,
|
||||
'plugins' => $plugins,
|
||||
'network_wide' => $network_wide,
|
||||
'silent' => $silent,
|
||||
));
|
||||
|
||||
} // end wu_async_deactivate_plugins;
|
||||
|
||||
/**
|
||||
* Switch themes via Job Queue.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param int $site_id The site ID.
|
||||
* @param string $theme_stylesheet The theme stylesheet.
|
||||
* @return void
|
||||
*/
|
||||
function wu_async_switch_theme($site_id, $theme_stylesheet) {
|
||||
|
||||
wu_enqueue_async_action('wu_async_switch_theme', array(
|
||||
'site_id' => $site_id,
|
||||
'theme_stylesheet' => $theme_stylesheet,
|
||||
));
|
||||
|
||||
} // end wu_async_switch_theme;
|
Reference in New Issue
Block a user