Files
wp-multisite-waas/inc/database/engine/class-enum.php
2024-11-30 18:24:12 -07:00

282 lines
5.8 KiB
PHP

<?php
/**
* WP Ultimo ENUM base class.
*
* @package WP_Ultimo
* @subpackage WP_Ultimo\Database\Engine
* @since 2.0.0
*/
namespace WP_Ultimo\Database\Engine;
// Exit if accessed directly
defined('ABSPATH') || exit;
/**
* WP Ultimo ENUM base class.
*
* @since 2.0.0
*/
abstract class Enum
{
/**
* The default value.
*/
const __default = false;
// phpcs:ignore
/**
* The options available.
*
* @since 2.0.0
* @var array
*/
static $options = array();
/**
* @var string
*/
private $value = '';
/**
* Constructor method. Takes the value you want to set.
*
* @since 2.0.0
*
* @param string $value The value to be set.
*/
public function __construct($value = '')
{
$this->value = $value;
}
// end __construct;
// Needs to be Implemented
/**
* Returns an array with values => CSS Classes.
*
* @since 2.0.0
* @return array
*/
abstract protected function classes();
/**
* Returns an array with values => labels.
*
* @since 2.0.0
* @return void
*/
abstract protected function labels();
/**
* Returns an array with values => labels.
*
* @since 2.0.0
* @return void
*/
protected function icon_classes() {
return array();
}
// end icon_classes;
/**
* Returns the options available as constants.
*
* @since 2.0.0
* @return array
*/
public static function get_options() {
$hook = static::get_hook_name();
if (!isset(static::$options[$hook])) {
$reflector = new \ReflectionClass(static::class);
static::$options[$hook] = apply_filters("wu_available_{$hook}_options", $reflector->getConstants());
} // end if;
return static::$options[$hook];
}
// end get_options;
public static function get_allowed_list($string = false) {
$options = array_unique(self::get_options());
return $string ? implode(',', $options) : $options;
}
// end get_allowed_list;
/**
* Returns the value loaded here.
*
* This runs through is_valid and returns the
* default value if a invalid value is passed on.
*
* @since 2.0.0
* @return string
*/
public function get_value() {
if ($this->is_valid($this->value)) {
return $this->value;
} // end if;
return static::__default;
}
// end get_value;
/**
* Check for the the validity of the value passed.
*
* @since 2.0.0
*
* @param string $value The string.
* @return boolean
*/
public function is_valid($value) {
$options = static::get_options();
return in_array($value, $options, true);
}
// end is_valid;
/**
* Returns the label of a given value.
*
* @since 2.0.0
* @return string
*/
public function get_label() {
$hook = static::get_hook_name();
$labels = apply_filters("wu_available_{$hook}_labels", $this->labels());
return $this->exists_or_default($labels, $this->get_value());
}
// end get_label;
/**
* Returns the classes of a given value.
*
* @since 2.0.0
* @return string
*/
public function get_classes() {
$hook = static::get_hook_name();
$classes = apply_filters("wu_available_{$hook}_classes", $this->classes());
return $this->exists_or_default($classes, $this->get_value());
}
// end get_classes;
/**
* Returns the classes of a given value.
*
* @since 2.0.0
* @return string
*/
public function get_icon_classes() {
$hook = static::get_hook_name();
$classes = apply_filters("wu_available_{$hook}_icon_classes", $this->icon_classes());
return $this->exists_or_default($classes, $this->get_value());
}
// end get_icon_classes;
/**
* Returns an array of options.
*
* @since 2.0.0
* @return void
*/
public static function to_array() {
static $instance;
if ($instance === null) {
$instance = new static;
} // end if;
$hook = $instance::get_hook_name();
$labels = apply_filters("wu_{$hook}_to_array", $instance->labels());
return $labels;
}
// end to_array;
/**
* Get the hook name for this class, so we can add filters.
*
* @since 2.0.0
* @return string
*/
public static function get_hook_name() {
$class_name = (new \ReflectionClass(static::class))->getShortName();
return strtolower($class_name);
}
// end get_hook_name;
/**
* Checks if a key exists on an array, otherwise returns a default value.
*
* @since 2.0.0
*
* @param array $array The array to check.
* @param string $key The key to check.
* @param string $default The default value.
* @return string
*/
public function exists_or_default($array, $key, $default = '') {
if (empty($default)) {
$default = isset($array[static::__default]) ? $array[static::__default] : '';
} // end if;
return isset($array[$key]) ? $array[$key] : $default;
}
// end exists_or_default;
/**
* Converts this to string.
*
* @since 2.0.0
* @return string
*/
public function __toString(): string {
return $this->get_value();
}
// end __toString;
/**
* Magic method to allow for constants to be called.
*
* @since 2.0.0
*
* @param string $name The name of the constants.
* @param array $arguments The list of arguments. Not really needed here.
* @return string
*/
public static function __callStatic($name, $arguments) {
$class_name = static::class;
return constant("$class_name::$name");
}
// end __callStatic;
} // end class Enum;