112 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Control condition check.
 | |
|  *
 | |
|  * @package visual-portfolio
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Visual_Portfolio_Control_Condition_Check
 | |
|  */
 | |
| class Visual_Portfolio_Control_Condition_Check {
 | |
| 	/**
 | |
| 	 * Compare 2 values
 | |
| 	 *
 | |
| 	 * @param mixed  $left Left value.
 | |
| 	 * @param string $operator Operator.
 | |
| 	 * @param mixed  $right Right value.
 | |
| 	 *
 | |
| 	 * @return boolean
 | |
| 	 */
 | |
| 	public static function compare( $left, $operator, $right ) {
 | |
| 		$check_result = true;
 | |
| 
 | |
| 		switch ( $operator ) {
 | |
| 			case '==':
 | |
|                 // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
 | |
| 				$check_result = $left == $right;
 | |
| 				break;
 | |
| 			case '===':
 | |
| 				$check_result = $left === $right;
 | |
| 				break;
 | |
| 			case '!=':
 | |
|                 // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
 | |
| 				$check_result = $left != $right;
 | |
| 				break;
 | |
| 			case '!==':
 | |
| 				$check_result = $left !== $right;
 | |
| 				break;
 | |
| 			case '*=':
 | |
| 				$check_result = strpos( $left, $right ) !== false;
 | |
| 				break;
 | |
| 			case '>=':
 | |
| 				$check_result = $left >= $right;
 | |
| 				break;
 | |
| 			case '<=':
 | |
| 				$check_result = $left <= $right;
 | |
| 				break;
 | |
| 			case '>':
 | |
| 				$check_result = $left > $right;
 | |
| 				break;
 | |
| 			case '<':
 | |
| 				$check_result = $left < $right;
 | |
| 				break;
 | |
| 			case '&&':
 | |
| 			case 'AND':
 | |
| 				$check_result = $left && $right;
 | |
| 				break;
 | |
| 			case '||':
 | |
| 			case 'OR':
 | |
| 				$check_result = $left || $right;
 | |
| 				break;
 | |
| 			default:
 | |
| 				$check_result = $left;
 | |
| 				break;
 | |
| 		}
 | |
| 
 | |
| 		return $check_result;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Conditions check for controls.
 | |
| 	 *
 | |
| 	 * @param array  $condition - condition params.
 | |
| 	 * @param array  $attributes - block attributes.
 | |
| 	 * @param string $relation - Can be one of 'AND' or 'OR'.
 | |
| 	 *
 | |
| 	 * @return boolean is check pass.
 | |
| 	 */
 | |
| 	public static function check( $condition, $attributes, $relation = 'AND' ) {
 | |
| 		// by default result will be TRUE for relation AND
 | |
| 		// and FALSE for relation OR.
 | |
| 		$result         = 'AND' === $relation;
 | |
| 		$child_relation = $result ? 'OR' : 'AND';
 | |
| 
 | |
| 		foreach ( $condition as $data ) {
 | |
| 			if ( is_array( $data ) && ! isset( $data['control'] ) ) {
 | |
| 				$result = self::compare( $result, $relation, self::check( $data, $attributes, $child_relation ) );
 | |
| 			} elseif ( isset( $data['control'] ) ) {
 | |
| 				$left     = Visual_Portfolio_Control_Get_Value::get( $data['control'], $attributes );
 | |
| 				$operator = isset( $data['operator'] ) ? $data['operator'] : '==';
 | |
| 				$right    = isset( $data['value'] ) ? $data['value'] : 'true';
 | |
| 
 | |
| 				if ( 'true' === $left ) {
 | |
| 					$left = true;
 | |
| 				} elseif ( 'false' === $left ) {
 | |
| 					$left = false;
 | |
| 				}
 | |
| 
 | |
| 				if ( 'true' === $right ) {
 | |
| 					$right = true;
 | |
| 				} elseif ( 'false' === $right ) {
 | |
| 					$right = false;
 | |
| 				}
 | |
| 
 | |
| 				$result = self::compare( $result, $relation, self::compare( $left, $operator, $right ) );
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return $result;
 | |
| 	}
 | |
| }
 |