PluginProbe ʕ •ᴥ•ʔ
JetFormBuilder — Dynamic Blocks Form Builder / 3.2.1
JetFormBuilder — Dynamic Blocks Form Builder v3.2.1
3.6.3.1 3.6.3 3.6.2.2 3.6.2.1 3.6.2 3.6.1.1 3.6.1 3.6.0.1 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.1.0 2.1.1 2.1.10 2.1.11 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 3.0.0 3.0.0.1 3.0.0.2 3.0.0.3 3.0.1 3.0.1.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.0.1 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.3.2 3.3.3 3.3.3.1 3.3.4 3.3.4.1 3.3.4.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.5.1 3.4.5.2 3.4.6 3.4.7 3.4.7.1 3.5.0 3.5.1 3.5.1.1 3.5.1.2 3.5.2 3.5.2.1 3.5.3 3.5.4 3.5.5 3.5.6 3.5.6.1 3.5.6.2 3.5.6.3 3.6.0
jetformbuilder / includes / blocks / conditional-block / condition-manager.php
jetformbuilder / includes / blocks / conditional-block Last commit date
condition-types 2 years ago functions 2 years ago operators 2 years ago render-states 2 years ago rest-api 2 years ago condition-manager.php 2 years ago condition-response-object.php 2 years ago functions.php 2 years ago operators.php 2 years ago render-state.php 2 years ago render-states-collection.php 2 years ago
condition-manager.php
126 lines
1 <?php
2
3
4 namespace Jet_Form_Builder\Blocks\Conditional_Block;
5
6 use Jet_Form_Builder\Blocks\Conditional_Block\Condition_Types\Base_Condition_Type;
7 use Jet_Form_Builder\Blocks\Conditional_Block\Condition_Types\Condition_Field_Item;
8 use Jet_Form_Builder\Blocks\Conditional_Block\Condition_Types\Condition_Render_State_Item;
9 use Jet_Form_Builder\Blocks\Conditional_Block\Condition_Types\Or_Operator_Item;
10 use Jet_Form_Builder\Blocks\Conditional_Block\Rest_Api\Add_Render_State_Endpoint_Option;
11 use Jet_Form_Builder\Blocks\Conditional_Block\Rest_Api\Delete_Render_States_Endpoint;
12 use Jet_Form_Builder\Blocks\Exceptions\Condition_Exception;
13 use Jet_Form_Builder\Blocks\Exceptions\Render_Empty_Field;
14 use Jet_Form_Builder\Classes\Arrayable\Arrayable;
15 use Jet_Form_Builder\Classes\Instance_Trait;
16 use Jet_Form_Builder\Classes\Tools;
17 use Jet_Form_Builder\Exceptions\Repository_Exception;
18
19 // If this file is called directly, abort.
20 if ( ! defined( 'WPINC' ) ) {
21 die;
22 }
23
24 /**
25 * @method static Condition_Manager instance()
26 *
27 * Class Condition_Manager
28 * @package Jet_Form_Builder\Blocks\Conditional_Block
29 */
30 class Condition_Manager implements Arrayable {
31
32 use Instance_Trait;
33
34 private $operators;
35 private $functions;
36
37 /**
38 * @var Base_Condition_Type[]
39 */
40 private $types;
41
42 private function __construct() {
43 $this->operators = new Operators();
44 $this->functions = new Functions();
45
46 $this->types = apply_filters(
47 'jet-form-builder/conditional-block/types',
48 array(
49 new Condition_Render_State_Item(),
50 new Or_Operator_Item(),
51 new Condition_Field_Item(),
52 )
53 );
54 }
55
56 public function prepare( array $conditions ): array {
57 $response = array();
58
59 foreach ( $conditions as $condition ) {
60 try {
61 $item = $this->get_current_type( $condition );
62 } catch ( Repository_Exception $exception ) {
63 continue;
64 }
65
66 /**
67 * Catch Condition_Exception on this level,
68 * because in future we can implement "OR" operator
69 * between all conditions.
70 *
71 * Here we could access the global option
72 */
73 try {
74 $response[] = $item->to_array();
75 } catch ( Condition_Exception $exception ) {
76 /**
77 * This exception catches in
78 *
79 * @see \Jet_Form_Builder\Blocks\Types\Base::render_callback_field
80 */
81 throw new Render_Empty_Field( 'This is temporary.' );
82 }
83 }
84
85 return $response;
86 }
87
88 public function to_array(): array {
89 return array(
90 'functions' => Tools::with_placeholder( $this->get_functions()->to_array() ),
91 'operators' => Tools::with_placeholder( $this->get_operators()->to_array() ),
92 'render_states' => Render_State::instance()->to_array(),
93 'rest_add_state' => Add_Render_State_Endpoint_Option::get_endpoint(),
94 'rest_delete_state' => Delete_Render_States_Endpoint::get_endpoint(),
95 );
96 }
97
98 public function get_operators(): Operators {
99 return $this->operators;
100 }
101
102 public function get_functions(): Functions {
103 return $this->functions;
104 }
105
106 /**
107 * @param array $condition
108 *
109 * @return Base_Condition_Type
110 * @throws Repository_Exception
111 */
112 protected function get_current_type( array $condition ): Base_Condition_Type {
113 foreach ( $this->types as $type ) {
114 if ( ! $type->is_supported( $condition ) ) {
115 continue;
116 }
117 $type->init( $condition );
118
119 return $type;
120 }
121
122 throw new Repository_Exception( 'Undefined condition type' );
123 }
124
125 }
126