Initial Commit
This commit is contained in:
213
inc/limitations/class-limit-themes.php
Normal file
213
inc/limitations/class-limit-themes.php
Normal file
@ -0,0 +1,213 @@
|
||||
<?php
|
||||
/**
|
||||
* Themes Limit Module.
|
||||
*
|
||||
* @package WP_Ultimo
|
||||
* @subpackage Limitations
|
||||
* @since 2.0.0
|
||||
*/
|
||||
|
||||
namespace WP_Ultimo\Limitations;
|
||||
|
||||
// Exit if accessed directly
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
/**
|
||||
* Themes Limit Module.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*/
|
||||
class Limit_Themes extends Limit {
|
||||
|
||||
/**
|
||||
* The module id.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @var string
|
||||
*/
|
||||
protected $id = 'themes';
|
||||
|
||||
/**
|
||||
* The theme being currently forced for this site.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @var null|false|string Null when first initialized, false when no theme is forced or the theme name.
|
||||
*/
|
||||
protected $forced_active_theme;
|
||||
|
||||
/**
|
||||
* The check method is what gets called when allowed is called.
|
||||
*
|
||||
* Each module needs to implement a check method, that returns a boolean.
|
||||
* This check can take any form the developer wants.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param mixed $value_to_check Value to check.
|
||||
* @param mixed $limit The list of limits in this modules.
|
||||
* @param string $type Type for sub-checking.
|
||||
* @return bool
|
||||
*/
|
||||
public function check($value_to_check, $limit, $type = '') {
|
||||
|
||||
$theme = (object) $this->{$value_to_check};
|
||||
|
||||
$types = array(
|
||||
'visible' => $theme->visibility === 'visible',
|
||||
'hidden' => $theme->visibility === 'hidden',
|
||||
'available' => $theme->behavior === 'available',
|
||||
'not_available' => $theme->behavior === 'not_available',
|
||||
);
|
||||
|
||||
return wu_get_isset($types, $type, false);
|
||||
|
||||
} // end check;
|
||||
|
||||
/**
|
||||
* Adds a magic getter for themes.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param string $theme_name The theme name.
|
||||
* @return object
|
||||
*/
|
||||
public function __get($theme_name) {
|
||||
|
||||
$theme = (object) wu_get_isset($this->get_limit(), $theme_name, $this->get_default_permissions($theme_name));
|
||||
|
||||
return (object) wp_parse_args($theme, $this->get_default_permissions($theme_name));
|
||||
|
||||
} // end __get;
|
||||
|
||||
/**
|
||||
* Returns default permissions.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param string $type Type for sub-checking.
|
||||
* @return array
|
||||
*/
|
||||
public function get_default_permissions($type) {
|
||||
|
||||
return array(
|
||||
'visibility' => 'visible',
|
||||
'behavior' => 'available',
|
||||
);
|
||||
|
||||
} // end get_default_permissions;
|
||||
|
||||
/**
|
||||
* Checks if a theme exists on the current module.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param string $theme_name The theme name.
|
||||
* @return bool
|
||||
*/
|
||||
public function exists($theme_name) {
|
||||
|
||||
$results = wu_get_isset($this->get_limit(), $theme_name, array());
|
||||
|
||||
return wu_get_isset($results, 'visibility', 'not-set') !== 'not-set' || wu_get_isset($results, 'behavior', 'not-set') !== 'not-set';
|
||||
|
||||
} // end exists;
|
||||
|
||||
/**
|
||||
* Get all themes.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return array List of theme stylesheets.
|
||||
*/
|
||||
public function get_all_themes() {
|
||||
|
||||
$themes = (array) $this->get_limit();
|
||||
|
||||
return array_keys($themes);
|
||||
|
||||
} // end get_all_themes;
|
||||
|
||||
/**
|
||||
* Get available themes.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return array
|
||||
*/
|
||||
public function get_available_themes() {
|
||||
|
||||
$limits = $this->get_limit();
|
||||
|
||||
$available = array();
|
||||
|
||||
foreach ($limits as $theme_slug => $theme_settings) {
|
||||
|
||||
$theme_settings = (object) $theme_settings;
|
||||
|
||||
if ($theme_settings->behavior === 'available') {
|
||||
|
||||
$available[] = $theme_slug;
|
||||
|
||||
} // end if;
|
||||
|
||||
} // end foreach;
|
||||
|
||||
return $available;
|
||||
|
||||
} // end get_available_themes;
|
||||
|
||||
/**
|
||||
* Get the forced active theme for the current limitations.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @return string
|
||||
*/
|
||||
public function get_forced_active_theme() {
|
||||
|
||||
$active_theme = false;
|
||||
|
||||
$limits = $this->get_limit();
|
||||
|
||||
if (empty($limits)) {
|
||||
|
||||
return $active_theme;
|
||||
|
||||
} // end if;
|
||||
|
||||
if ($this->forced_active_theme !== null) {
|
||||
|
||||
return $this->forced_active_theme;
|
||||
|
||||
} // end if;
|
||||
|
||||
foreach ($limits as $theme_slug => $theme_settings) {
|
||||
|
||||
$theme_settings = (object) $theme_settings;
|
||||
|
||||
if ($theme_settings->behavior === 'force_active') {
|
||||
|
||||
$active_theme = $theme_slug;
|
||||
|
||||
} // end if;
|
||||
|
||||
} // end foreach;
|
||||
|
||||
$this->forced_active_theme = $active_theme;
|
||||
|
||||
return $this->forced_active_theme;
|
||||
|
||||
} // end get_forced_active_theme;
|
||||
|
||||
/**
|
||||
* Checks if the module is enabled.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*
|
||||
* @param string $type Type for sub-checking.
|
||||
* @return boolean
|
||||
*/
|
||||
public function is_enabled($type = '') {
|
||||
|
||||
return true;
|
||||
|
||||
} // end is_enabled;
|
||||
|
||||
} // end class Limit_Themes;
|
Reference in New Issue
Block a user