File "conditional_rule.php"
Full Path: /home/romayxjt/public_html/wp-content/plugins/vikbooking/admin/helpers/conditional_rule.php
File size: 8.11 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* @package VikBooking
* @subpackage com_vikbooking
* @author Alessio Gaggii - e4j - Extensionsforjoomla.com
* @copyright Copyright (C) 2018 e4j - Extensionsforjoomla.com. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
* @link https://vikwp.com
*/
defined('ABSPATH') or die('No script kiddies please!');
/**
* Conditional Rule parent Class of all sub-classes.
*
* @since 1.4.0
*/
abstract class VikBookingConditionalRule
{
/**
* The name of the rule.
*
* @var string
*/
protected $ruleName = null;
/**
* The description of the rule.
*
* @var string
*/
protected $ruleDescr = '';
/**
* The rule identifier.
*
* @var string
*/
protected $ruleId = null;
/**
* The rule params.
*
* @var mixed
*/
protected $ruleParams = null;
/**
* The booking array.
*
* @var array
*/
protected $booking = null;
/**
* The rooms array.
*
* @var array
*/
protected $rooms = null;
/**
* The rates array.
*
* @var array
*/
protected $rates = null;
/**
* The options array.
*
* @var array
*/
protected $options = null;
/**
* An extra data array.
*
* @var array
*/
protected $extra_data = null;
/**
* The VBO application object.
*
* @var object
*/
protected $vbo_app = null;
/**
* The date format with wildcards.
*
* @var string
*/
protected $wdf = '';
/**
* The date format.
*
* @var string
*/
protected $df = '';
/**
* The date separator.
*
* @var string
*/
protected $datesep = '';
/**
* Class constructors should define some vars for the rule in use.
*/
public function __construct()
{
$this->vbo_app = VikBooking::getVboApplication();
$this->wdf = VikBooking::getDateFormat(true);
if ($this->wdf == "%d/%m/%Y") {
$this->df = 'd/m/Y';
} elseif ($this->wdf == "%m/%d/%Y") {
$this->df = 'm/d/Y';
} else {
$this->df = 'Y/m/d';
}
$this->datesep = VikBooking::getDateSeparator(true);
$this->booking = array();
$this->rooms = array();
$this->rates = array();
$this->options = array();
$this->extra_data = array();
}
/**
* Gets the name of the current rule.
*
* @return string the rule name.
*/
public function getName()
{
return $this->ruleName;
}
/**
* Gets the description for the current rule.
*
* @return string the rule description.
*/
public function getDescription()
{
return $this->ruleDescr;
}
/**
* Gets the identifier of the current rule.
*
* @return string the rule identifier.
*/
public function getIdentifier()
{
return $this->ruleId;
}
/**
* Sets the rule params.
*
* @param mixed $params the current params of the rule.
*
* @return self
*/
public function setParams($params = null)
{
$this->ruleParams = $params;
return $this;
}
/**
* Returns the rule params.
*
* @return mixed the current params of the rule.
*/
public function getParams()
{
return $this->ruleParams;
}
/**
* Gets the requested param.
*
* @param string $key the param's property.
* @param mixed $def the default value to return.
*
* @return mixed the requested param value.
*/
public function getParam($key, $def = null)
{
if (is_null($this->ruleParams)) {
return $def;
}
if (is_object($this->ruleParams) && isset($this->ruleParams->{$key})) {
return $this->ruleParams->{$key};
}
if (is_array($this->ruleParams) && isset($this->ruleParams[$key])) {
return $this->ruleParams[$key];
}
return $def;
}
/**
* Sets a param value.
*
* @param string $key the param's property.
* @param string $val the param's value.
*
* @return self
*/
public function setParam($key, $val)
{
if (is_null($this->ruleParams)) {
$this->ruleParams = new stdClass;
}
if (is_object($this->ruleParams)) {
$this->ruleParams->{$key} = $val;
}
if (is_array($this->ruleParams)) {
$this->ruleParams[$key] = $val;
}
return $this;
}
/**
* Builds a unique input field name for the rule.
*
* @param string $name the param property (input) name.
* @param bool $multi whether the param is an array.
*
* @return string the name of the input field to use.
*/
public function inputName($name, $multi = false)
{
return basename($this->getIdentifier(), '.php') . "[{$name}]" . ($multi ? '[]' : '');
}
/**
* Builds a unique input field ID for the rule.
*
* @param string $name the param property (input) name/id.
*
* @return string the name of the input field to use.
*/
public function inputID($name)
{
return basename($this->getIdentifier(), '.php') . "_{$name}";
}
/**
* Sets the booking information array.
*
* @param mixed $data the booking information array or booking ID.
*
* @return self
*/
public function setBooking($data)
{
if (!is_scalar($data) && !is_array($data)) {
$data = (array)$data;
}
if (is_scalar($data)) {
// booking ID expected, fetch the booking information
$data = VikBooking::getBookingInfoFromID($data);
}
if (!is_array($data)) {
$data = array();
}
$this->booking = $data;
return $this;
}
/**
* Helper method to populate internal properties.
*
* @param mixed $key the key or array of keys to set.
* @param mixed $val the value or array of values to set.
*
* @return self
*/
public function setProperties($key, $val = null)
{
if (!is_string($key) && !is_array($key)) {
return $this;
}
if (is_string($key)) {
$key = array($key);
}
if (!is_array($val)) {
$val = array($val);
}
foreach ($key as $i => $prop) {
if (!isset($val[$i])) {
continue;
}
if (property_exists($this, $prop)) {
$this->{$prop} = $val[$i];
}
$this->extra_data[$prop] = $val[$i];
}
return $this;
}
/**
* Gets the requested property.
*
* @param string $key the param's property.
* @param mixed $def the default value to return.
*
* @return mixed the requested param value.
*/
public function getProperty($key, $def = null)
{
if (property_exists($this, $key)) {
return $this->{$key};
}
if (is_array($this->extra_data) && isset($this->extra_data[$key])) {
return $this->extra_data[$key];
}
return $def;
}
/**
* Gets the requested property value.
* Like $this->booking['ts'] for getting the timestamp.
*
* @param string $key the param's property.
* @param string $val the property value.
* @param mixed $def the default value to return.
*
* @return mixed the requested param value.
*/
public function getPropVal($key, $val, $def = null)
{
$prop = $this->getProperty($key, $def);
if ($prop === $def) {
return $def;
}
if (is_array($prop) && isset($prop[$val])) {
return $prop[$val];
}
if (is_object($prop) && isset($prop->{$val})) {
return $prop->{$val};
}
return $def;
}
/**
* Checks whether the installation files of Vik Channel Manager are available.
*
* @return bool true if VCM is installed, false otherwise.
*
* @since 1.15.0 (J) - 1.5.0 (WP)
*/
protected function isChannelManagerAvailable()
{
return is_file(VCM_SITE_PATH . DIRECTORY_SEPARATOR . 'helpers' . DIRECTORY_SEPARATOR . 'lib.vikchannelmanager.php');
}
/**
* Extending Classes should define this method
* to render the params of the rule.
*
* @return void
*/
abstract public function renderParams();
/**
* Extending Classes should define this method
* to tell whether the rule is compliant.
*
* @return bool True on success, false otherwise.
*/
abstract public function isCompliant();
/**
* Extending Classes could implement this method
* to override it, and to execute some actions.
* By default, rules that do not override this method
* will produce no actions, they will serve as filters.
*
* @return void
*/
public function callbackAction()
{
return;
}
/**
* Extending Classes could implement this method
* to override it, and to manipulate the message.
*
* @param string $msg the conditional text message.
*
* @return string
*
* @since 1.15.5 (J) - 1.5.11 (WP)
*/
public function manipulateMessage($msg)
{
return $msg;
}
}