Current Path : /var/www/ooareogundevinitiative/wp-content/plugins/brizy/admin/rules/ |
Current File : /var/www/ooareogundevinitiative/wp-content/plugins/brizy/admin/rules/abstract-validator.php |
<?php abstract class Brizy_Admin_Rules_AbstractValidator implements Brizy_Admin_Rules_ValidatorInterface { /** * @var int */ private $postId; /** * @var Brizy_Admin_Rules_Manager */ protected $manager; /** * Brizy_Admin_Rules_TemplateRuleValidator constructor. * * @param int $postId * @param Brizy_Admin_Rules_Manager $manager */ public function __construct( $postId, Brizy_Admin_Rules_Manager $manager ) { $this->manager = $manager; $this->postId = (int) $postId; } /** * @param Brizy_Admin_Rule $rule * @param int $postId * * @return mixed */ abstract public function validateRuleForPostId( Brizy_Admin_Rule $rule, $postId ); /** * @param Brizy_Admin_Rule[] $rules * @param int $postId * * @return mixed */ abstract public function validateRulesForPostId( $rules, $postId ); /** * @param Brizy_Admin_Rule $rule * @param Brizy_Admin_RuleSet $targetRuleSet * * @return mixed * @throws Brizy_Admin_Rules_ValidationException */ public function validateRule( Brizy_Admin_Rule $rule, $targetRuleSet ) { foreach ( $targetRuleSet->getRules() as $arule ) { if ( $rule->isEqual( $arule ) ) { throw new Brizy_Admin_Rules_ValidationException( $arule->getId(), 'The rule is already used' ); } } return true; } /** * @param $rules * @param Brizy_Admin_RuleSet $targetRuleSet * * @return mixed * @throws Brizy_Admin_Rules_ValidationException */ public function validateRules( $rules, $targetRuleSet ) { $errors = array(); foreach ( $targetRuleSet->getRules() as $arule ) { foreach ( $rules as $newRule ) { if ( $newRule->isEqual( $arule ) ) { throw new Brizy_Admin_Rules_ValidationException( $arule->getId(), 'The rule is already used' ); } } } if ( count( $errors ) > 0 ) { return $errors; } return array(); } /** * @param array $args * * @return Brizy_Admin_RuleSet * @throws Exception */ protected function getRulesSetByWPQuery( $args = array() ) { $defaults = array( 'posts_per_page' => - 1, 'post_status' => array( 'publish', 'pending', 'draft', 'future', 'private', 'inherit' ) ); $r = wp_parse_args( $args, $defaults ); $templates = get_posts( $r ); $rules = array(); foreach ( $templates as $template ) { $tRules = $this->manager->getRules( $template->ID ); $rules = array_merge( $rules, $tRules ); } $rules = self::sortRules( $rules ); return new Brizy_Admin_RuleSet( $rules ); } /** * @param Brizy_Admin_Rule[] $rules * * @return mixed */ static public function sortRules( $rules ) { // sort the rules by how specific they are usort( $rules, function ( $a, $b ) { /** * @var Brizy_Admin_Rule $a ; * @var Brizy_Admin_Rule $b ; */ $la = $a->getRuleWeight([]); $lb = $b->getRuleWeight([]); if ( $lb == $la ) { return 0; } return $la < $lb ? 1 : - 1; } ); return $rules; } }