<?php // phpcs:disable /** * Adds a validation rules that allows us to check if a given parameter is unique. * * @package WP_Ultimo * @subpackage Helpers/Validation_Rules * @since 2.0.0 */ namespace WP_Ultimo\Helpers\Validation_Rules; use WP_Ultimo\Dependencies\Rakit\Validation\Rule; // Exit if accessed directly defined('ABSPATH') || exit; /** * Adds a validation rules that allows us to check if a given parameter is unique. * * @since 2.0.0 */ class Price_Variations extends Rule { /** * Error message to be returned when this value has been used. * * @since 2.0.0 * @var string */ protected $message = ':attribute is wrongly setup.'; /** * Parameters that this rule accepts. * * @since 2.0.0 * @var array */ protected $fillableParams = array('duration', 'duration_unit'); // phpcs:ignore /** * Performs the actual check. * * @since 2.0.0 * * @param mixed $value Value being checked. */ public function check($value) : bool { if (is_string($value)) { $value = maybe_unserialize($value); } // end if; if (!is_array($value)) { return false; } // end if; foreach ($value as $price_variation) { /** * Validation Duration */ $duration = wu_get_isset($price_variation, 'duration', false); if (!is_numeric($duration) || (int) $duration <= 0) { return false; } // end if; /** * Validation Unit */ $unit = wu_get_isset($price_variation, 'duration_unit', false); $allowed_units = array( 'day', 'week', 'month', 'year', ); if (!in_array($unit, $allowed_units, true)) { return false; } // end if; /** * Check if it is the same as the main duration */ if ($this->parameter('duration') == $duration && $this->parameter('duration_unit') === $unit) { $this->message = 'This product cannot have a price variation for the same duration and duration unit values as the product itself.'; return false; } // end if; /** * Validation Amount */ $amount = wu_get_isset($price_variation, 'amount', false); if ($amount) { $amount = wu_to_float($amount); } // end if; if (!is_numeric($amount)) { return false; } // end if; } // end foreach; return true; } // end check; } // end class Price_Variations;