attributes-trait.php
4 years ago
condition-helper.php
4 years ago
curl-helper.php
4 years ago
factory.php
4 years ago
gallery.php
4 years ago
get-icon-trait.php
4 years ago
get-template-trait.php
4 years ago
instance-trait.php
4 years ago
listing-filter-manager.php
4 years ago
listing-filter.php
4 years ago
messages-helper-trait.php
4 years ago
tools.php
4 years ago
condition-helper.php
96 lines
| 1 | <?php |
| 2 | |
| 3 | |
| 4 | namespace Jet_Form_Builder\Classes; |
| 5 | |
| 6 | |
| 7 | use Jet_Form_Builder\Actions\Action_Handler; |
| 8 | use Jet_Form_Builder\Actions\Types\Base; |
| 9 | use Jet_Form_Builder\Exceptions\Condition_Exception; |
| 10 | use Jet_Form_Builder\Presets\Types\Dynamic_Preset; |
| 11 | |
| 12 | class Condition_Helper { |
| 13 | |
| 14 | private $conditions; |
| 15 | private $action_handler; |
| 16 | |
| 17 | public function __construct( Base $action, Action_Handler $action_handler ) { |
| 18 | $this->conditions = $action->conditions; |
| 19 | $this->action_handler = $action_handler; |
| 20 | |
| 21 | $this->check_all(); |
| 22 | } |
| 23 | |
| 24 | public function check_all() { |
| 25 | $request = $this->action_handler->request_data; |
| 26 | |
| 27 | foreach ( $this->conditions as $condition ) { |
| 28 | if ( ( $condition['execute'] && ! $this->check( $condition ) ) |
| 29 | || ( ! $condition['execute'] && $this->check( $condition ) ) |
| 30 | ) { |
| 31 | throw new Condition_Exception( '', array( |
| 32 | 'condition' => $condition, |
| 33 | 'field' => isset( $request[ $condition['field'] ] ) ? $request[ $condition['field'] ] : null, |
| 34 | ) ); |
| 35 | } |
| 36 | } |
| 37 | } |
| 38 | |
| 39 | public function check( $condition ) { |
| 40 | $request = $this->action_handler->request_data; |
| 41 | $compare = $this->get_parsed_value( $condition ); |
| 42 | |
| 43 | switch ( $condition['operator'] ) { |
| 44 | case 'equal': |
| 45 | if ( isset( $request[ $condition['field'] ] ) ) { |
| 46 | return $request[ $condition['field'] ] == $compare; |
| 47 | } |
| 48 | break; |
| 49 | case 'greater': |
| 50 | if ( isset( $request[ $condition['field'] ] ) ) { |
| 51 | return $request[ $condition['field'] ] > $compare; |
| 52 | } |
| 53 | break; |
| 54 | case 'less': |
| 55 | if ( isset( $request[ $condition['field'] ] ) ) { |
| 56 | return $request[ $condition['field'] ] < $compare; |
| 57 | } |
| 58 | break; |
| 59 | case 'between': |
| 60 | if ( isset( $request[ $condition['field'] ] ) ) { |
| 61 | $compare_values = array_map( 'trim', explode( ',', $compare ) ); |
| 62 | |
| 63 | if ( count( $compare_values ) != 2 ) { |
| 64 | return false; |
| 65 | } |
| 66 | |
| 67 | return ( $compare_values[0] < $request[ $condition['field'] ] && $compare_values[1] > $request[ $condition['field'] ] ); |
| 68 | } |
| 69 | break; |
| 70 | case 'one_of': |
| 71 | if ( isset( $request[ $condition['field'] ] ) ) { |
| 72 | $compare_values = array_map( 'trim', explode( ',', $compare ) ); |
| 73 | |
| 74 | if ( ! is_array( $compare_values ) ) { |
| 75 | return false; |
| 76 | } |
| 77 | |
| 78 | return ( in_array( $request[ $condition['field'] ], $compare_values ) ); |
| 79 | } |
| 80 | break; |
| 81 | case 'contain': |
| 82 | if ( isset( $request[ $condition['field'] ] ) ) { |
| 83 | return ( strpos( $request[ $condition['field'] ], $compare ) !== false ); |
| 84 | } |
| 85 | break; |
| 86 | } |
| 87 | |
| 88 | return false; |
| 89 | } |
| 90 | |
| 91 | private function get_parsed_value( $condition ) { |
| 92 | return ( new Dynamic_Preset )->parse_value( $condition ); |
| 93 | } |
| 94 | |
| 95 | |
| 96 | } |