File "registry.php"
Full Path: /home/romayxjt/public_html/wp-content/plugins/vikbooking/admin/helpers/src/config/registry.php
File size: 6.66 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* @package VikBooking
* @subpackage core
* @author E4J s.r.l.
* @copyright Copyright (C) 2021 E4J s.r.l. All Rights Reserved.
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
* @link https://vikwp.com
*/
// No direct access
defined('ABSPATH') or die('No script kiddies please!');
/**
* Utility class working with an abstract configuration.
*
* @method integer getInt() getInt($name, $default = null) Get a signed integer.
* @method integer getUint() getUint($name, $default = null) Get an unsigned integer.
* @method float getFloat() getFloat($name, $default = null) Get a floating-point number.
* @method float getDouble() getDouble($name, $default = null) Get a floating-point number.
* @method boolean getBool() getBool($name, $default = null) Get a boolean.
* @method string getString() getString($name, $default = null) Get a string.
* @method array getArray() getArray($name, $default = null) Decode a JSON string and get an array.
* @method mixed getObject() getObject($name, $default = null) Decode a JSON string and get an object.
* @method mixed getJson() getJson($name, $default = null) Decode a JSON string and get an object.
*
* @since 1.5
*/
abstract class VBOConfigRegistry
{
/**
* The map containing all the settings retrieved.
*
* @var array
*/
private $pool = [];
/**
* An array of options.
*
* @var array
*/
protected $options;
/**
* Class constructor.
*
* @param array $options An array of options.
*/
public function __construct(array $options = [])
{
if (!isset($options['debug']))
{
$options['debug'] = false;
}
$this->options = $options;
}
/**
* Returns the value of the specified setting.
*
* @param string $key Name of the setting.
* @param mixed $default Default value in case the setting is empty.
* @param string $filter Filter to apply to the value (string by default).
*
* @return mixed The filtered value of the setting.
*/
final public function get($key, $default = null, $filter = 'string')
{
// if the setting is alread loaded
if (!array_key_exists($key, $this->pool))
{
// otherwise read it from the apposite handler
$value = $this->retrieve($key);
// if the returned value is false
if ($value === false)
{
// raise an exception if the setting doesn't exist (only in DEBUGGING mode)
if ($this->options['debug'])
{
throw new Exception(sprintf('The setting [%s] does not exist.', $k), 404);
}
// return the default specified value
return $default;
}
// register the value into the pool
$this->pool[$key] = $value;
}
// always filter the value.
return $this->clean($this->pool[$key], $filter);
}
/**
* Magic method to get filtered input data.
*
* @param string $name The name of the function. The string next to "get" word will be used as filter.
* For example, getInt will use a "int" filter.
* @param array $arguments Array containing arguments to retrieve the setting.
* Contains name of the key and the default value.
*
* @return mixed The filtered value of the setting.
*/
public function __call($name, $arguments)
{
// check if the method is prefixed with 'get' word
if (substr($name, 0, 3) == 'get')
{
$key = '';
$default = null;
$filter = substr($name, 3);
// check if setting key is set
if (isset($arguments[0]))
{
$key = $arguments[0];
}
// check if default value is set
if (isset($arguments[1]))
{
$default = $arguments[1];
}
return $this->get($key, $default, $filter);
}
throw new RuntimeException('Call to undefined method ' . __CLASS__ . '::' . $name . '()');
}
/**
* Custom filter implementation.
*
* @param mixed $value The value to clean.
* @param string $filter The type of the value.
*
* @return mixed The filtered value.
*/
protected function clean($value, $filter)
{
switch (strtolower($filter))
{
case 'int':
$value = intval($value);
break;
case 'uint':
$value = abs(intval($value));
break;
case 'float':
case 'double':
$value = floatval($value);
break;
case 'bool':
$value = (empty($value) === false);
break;
case 'array':
$value = (is_array($value) ? $value : (is_string($value) && strlen($value) ? (array) json_decode($value, true) : array()));
break;
case 'json':
case 'object':
$value = (is_object($value) ? $value : (is_string($value) && strlen($value) ? json_decode($value) : new stdClass));
break;
default:
$value = (string) $value;
}
return $value;
}
/**
* Store the value of the specified setting.
*
* @param string $key The name of the setting.
* @param mixed $val The value of the setting.
*
* @return self This object to support chaining.
*/
final public function set($key, $val)
{
// if the registration of the setting went fine
if ($this->register($key, $val))
{
// overwrite/push the value of the setting
$this->pool[$key] = $val;
}
return $this;
}
/**
* Checks if the specified property exists.
*
* @param string $key The name of the setting.
*
* @return boolean True if exists, otherwise false.
*/
final public function has($key)
{
return array_key_exists($key, $this->pool) || $this->retrieve($key) !== false;
}
/**
* Removes the specified property.
*
* @param string $key The name of the setting.
*
* @return self This object to support chaining.
*
* @since 1.16.0 (J) - 1.6.0 (WP)
*/
final public function remove($key)
{
// if the deletion of the setting went fine
if ($this->delete($key))
{
// unset the value of the setting
unset($this->pool[$key]);
}
return $this;
}
/**
* Retrieve the value of the setting from the instance in which it is stored.
*
* @param string $key The name of the setting.
*
* @return mixed The value of the setting if exists, otherwise false.
*/
abstract protected function retrieve($key);
/**
* Register the value of the setting into the instance in which should be stored.
*
* @param string $key The name of the setting.
* @param mixed $val The value of the setting.
*
* @return boolean True in case of success, otherwise false.
*/
abstract protected function register($key, $val);
/**
* Delete the setting from the instance where it's stored.
*
* @param string $key The name of the setting.
*
* @return boolean True in case of success, otherwise false.
*
* @since 1.16.0 (J) - 1.6.0 (WP)
*/
abstract protected function delete($key);
}