first commit
This commit is contained in:
139
wp-content/plugins/brizy/admin/rules/abstract-validator.php
Normal file
139
wp-content/plugins/brizy/admin/rules/abstract-validator.php
Normal file
@@ -0,0 +1,139 @@
|
||||
<?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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user