Completed
Push — development ( bb7ea5...cbb24d )
by
unknown
03:17
created

Container_Condition_Provider::install_conditions()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 143
Code Lines 98

Duplication

Lines 40
Ratio 27.97 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 98
nc 1
nop 1
dl 40
loc 143
rs 8.2857
c 1
b 0
f 1
ccs 0
cts 103
cp 0
crap 2

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace Carbon_Fields\Provider;
4
5
use Carbon_Fields\Pimple\Container as PimpleContainer;
6
use Carbon_Fields\Pimple\ServiceProviderInterface;
7
use Carbon_Fields\Container\Condition\Factory as ConditionFactory;
8
use Carbon_Fields\Container\Fulfillable\Fulfillable_Collection;
9
10
class Container_Condition_Provider implements ServiceProviderInterface {
11
12
	/**
13
	 * Install dependencies in IoC container
14
	 *
15
	 * @param  PimpleContainer $ioc
16
	 */
17
	public function register( PimpleContainer $ioc ) {
18
		$this->install_conditions( $ioc );
19
		$this->install_comparers( $ioc );
20
		$this->install_translators( $ioc );
21
		$this->install_container_conditions( $ioc );
22
	}
23
24
	/**
25
	 * Install all codition types and the condition factory
26
	 *
27
	 * @param  PimpleContainer $ioc
28
	 */
29
	protected function install_conditions( $ioc ) {
30
		$ioc['container_condition_factory'] = function( $ioc ) {
31
			return new ConditionFactory( $ioc['container_conditions'] );
32
		};
33
34
		$ioc['container_condition_fulfillable_collection'] = $ioc->factory( function( $ioc ) {
35
			return new Fulfillable_Collection( $ioc['container_condition_factory'], $ioc['container_condition_translator_array'] );
36
		} );
37
38
		$ioc['container_conditions'] = function() {
39
			return new PimpleContainer();
40
		};
41
42
		$cc_ioc = $ioc['container_conditions'];
43
44
		$cc_ioc['boolean'] = $cc_ioc->factory( function() use ( $ioc ) {
45
			$condition = new \Carbon_Fields\Container\Condition\Boolean_Condition();
46
			$condition->set_comparers( array(
47
				$ioc['container_condition_comparers']['equality'],
48
			) );
49
			return $condition;
50
		} );
51
52
		$cc_ioc['post_id'] = $cc_ioc->factory( function() use ( $ioc ) {
53
			$condition = new \Carbon_Fields\Container\Condition\Post_ID_Condition();
54
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['generic'] );
55
			return $condition;
56
		} );
57
		$cc_ioc['post_parent_id'] = $cc_ioc->factory( function() use ( $ioc ) {
58
			$condition = new \Carbon_Fields\Container\Condition\Post_Parent_ID_Condition();
59
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['generic'] );
60
			return $condition;
61
		} );
62
		$cc_ioc['post_ancestor_id'] = $cc_ioc->factory( function() use ( $ioc ) {
63
			$condition = new \Carbon_Fields\Container\Condition\Post_Ancestor_ID_Condition();
64
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['array'] );
65
			return $condition;
66
		} );
67
		$cc_ioc['post_type'] = $cc_ioc->factory( function() use ( $ioc ) {
68
			$condition = new \Carbon_Fields\Container\Condition\Post_Type_Condition();
69
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['nonscalar'] );
70
			return $condition;
71
		} );
72
		$cc_ioc['post_format'] = $cc_ioc->factory( function() use ( $ioc ) {
73
			$condition = new \Carbon_Fields\Container\Condition\Post_Format_Condition();
74
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['nonscalar'] );
75
			return $condition;
76
		} );
77
		$cc_ioc['post_level'] = $cc_ioc->factory( function() use ( $ioc ) {
78
			$condition = new \Carbon_Fields\Container\Condition\Post_Level_Condition();
79
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['generic'] );
80
			return $condition;
81
		} );
82
		$cc_ioc['post_template'] = $cc_ioc->factory( function() use ( $ioc ) {
83
			$condition = new \Carbon_Fields\Container\Condition\Post_Template_Condition();
84
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['nonscalar'] );
85
			return $condition;
86
		} );
87 View Code Duplication
		$cc_ioc['post_term'] = $cc_ioc->factory( function() use ( $ioc ) {
88
			$condition = new \Carbon_Fields\Container\Condition\Post_Term_Condition( $ioc['wp_toolset'] );
89
			$condition->set_comparers( array(
90
				// Only support the custom comparer as this condition has it's own comparison methods
91
				$ioc['container_condition_comparers']['custom'],
92
			) );
93
			return $condition;
94
		} );
95
96 View Code Duplication
		$cc_ioc['term'] = $cc_ioc->factory( function() use ( $ioc ) {
1 ignored issue
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
97
			$condition = new \Carbon_Fields\Container\Condition\Term_Condition( $ioc['wp_toolset'] );
98
			$condition->set_comparers( array(
99
				// Only support the custom comparer as this condition has it's own comparison methods
100
				$ioc['container_condition_comparers']['custom'],
101
			) );
102
			return $condition;
103
		} );
104
		$cc_ioc['term_taxonomy'] = $cc_ioc->factory( function() use ( $ioc ) {
105
			$condition = new \Carbon_Fields\Container\Condition\Term_Taxonomy_Condition();
106
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['nonscalar'] );
107
			return $condition;
108
		} );
109
		$cc_ioc['term_level'] = $cc_ioc->factory( function() use ( $ioc ) {
110
			$condition = new \Carbon_Fields\Container\Condition\Term_Level_Condition();
111
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['generic'] );
112
			return $condition;
113
		} );
114
		$cc_ioc['term_parent'] = $cc_ioc->factory( function() use ( $ioc ) {
115
			$condition = new \Carbon_Fields\Container\Condition\Term_Parent_Condition( $ioc['wp_toolset'] );
116
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['generic'] );
117
			return $condition;
118
		} );
119
		$cc_ioc['term_ancestor'] = $cc_ioc->factory( function() use ( $ioc ) {
120
			$condition = new \Carbon_Fields\Container\Condition\Term_Ancestor_Condition( $ioc['wp_toolset'] );
121
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['array'] );
122
			return $condition;
123
		} );
124
125
		$cc_ioc['user_id'] = $cc_ioc->factory( function() use ( $ioc ) {
126
			$condition = new \Carbon_Fields\Container\Condition\User_ID_Condition();
127
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['generic'] );
128
			return $condition;
129
		} );
130
		$cc_ioc['user_role'] = $cc_ioc->factory( function() use ( $ioc ) {
131
			$condition = new \Carbon_Fields\Container\Condition\User_Role_Condition();
132
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['array'] );
133
			return $condition;
134
		} );
135 View Code Duplication
		$cc_ioc['user_capabiltiy'] = $cc_ioc->factory( function() use ( $ioc ) {
136
			$condition = new \Carbon_Fields\Container\Condition\User_Capability_Condition();
137
			$condition->set_comparers( array(
138
				// Only support the custom comparer as this condition has it's own comparison methods
139
				$ioc['container_condition_comparers']['custom'],
140
			) );
141
			return $condition;
142
		} );
143
144
		$cc_ioc['blog_id'] = $cc_ioc->factory( function() use ( $ioc ) {
145
			$condition = new \Carbon_Fields\Container\Condition\Blog_ID_Condition();
146
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['generic'] );
147
			return $condition;
148
		} );
149
150
		$cc_ioc['current_user_id'] = $cc_ioc->factory( function() use ( $ioc ) {
151
			$condition = new \Carbon_Fields\Container\Condition\Current_User_ID_Condition();
152
			$condition->set_comparers( $ioc['container_condition_comparer_collections']['generic'] );
153
			return $condition;
154
		} );
155 View Code Duplication
		$cc_ioc['current_user_role'] = $cc_ioc->factory( function() use ( $ioc ) {
156
			$condition = new \Carbon_Fields\Container\Condition\Current_User_Role_Condition();
157
			$condition->set_comparers( array(
158
				// Only support the custom comparer as this condition has it's own comparison methods
159
				$ioc['container_condition_comparers']['custom'],
160
			) );
161
			return $condition;
162
		} );
163 View Code Duplication
		$cc_ioc['current_user_capability'] = $cc_ioc->factory( function() use ( $ioc ) {
164
			$condition = new \Carbon_Fields\Container\Condition\Current_User_Capability_Condition();
165
			$condition->set_comparers( array(
166
				// Only support the custom comparer as this condition has it's own comparison methods
167
				$ioc['container_condition_comparers']['custom'],
168
			) );
169
			return $condition;
170
		} );
171
	}
172
173
	/**
174
	 * Install all condition comparers
175
	 *
176
	 * @param  PimpleContainer $ioc
177
	 */
178
	protected function install_comparers( $ioc ) {
179
		$ioc['container_condition_comparers'] = function() {
180
			return new PimpleContainer();
181
		};
182
183
		$ioc['container_condition_comparers']['equality'] = function() {
184
			return new \Carbon_Fields\Container\Condition\Comparer\Equality_Comparer();
185
		};
186
187
		$ioc['container_condition_comparers']['any_equality'] = function() {
188
			return new \Carbon_Fields\Container\Condition\Comparer\Any_Equality_Comparer();
189
		};
190
191
		$ioc['container_condition_comparers']['contain'] = function() {
192
			return new \Carbon_Fields\Container\Condition\Comparer\Contain_Comparer();
193
		};
194
195
		$ioc['container_condition_comparers']['any_contain'] = function() {
196
			return new \Carbon_Fields\Container\Condition\Comparer\Any_Contain_Comparer();
197
		};
198
199
		$ioc['container_condition_comparers']['scalar'] = function() {
200
			return new \Carbon_Fields\Container\Condition\Comparer\Scalar_Comparer();
201
		};
202
203
		$ioc['container_condition_comparers']['custom'] = function() {
204
			return new \Carbon_Fields\Container\Condition\Comparer\Custom_Comparer();
205
		};
206
207
		$ioc['container_condition_comparer_collections'] = function() {
208
			return new PimpleContainer();
209
		};
210
211
		$ioc['container_condition_comparer_collections']['generic'] = function() use ( $ioc ) {
212
			return array(
213
				$ioc['container_condition_comparers']['equality'],
214
				$ioc['container_condition_comparers']['contain'],
215
				$ioc['container_condition_comparers']['scalar'],
216
				$ioc['container_condition_comparers']['custom'],
217
			);
218
		};
219
		$ioc['container_condition_comparer_collections']['nonscalar'] = function() use ( $ioc ) {
220
			return array(
221
				$ioc['container_condition_comparers']['equality'],
222
				$ioc['container_condition_comparers']['contain'],
223
				$ioc['container_condition_comparers']['custom'],
224
			);
225
		};
226
		$ioc['container_condition_comparer_collections']['array'] = function() use ( $ioc ) {
227
			return array(
228
				$ioc['container_condition_comparers']['any_equality'],
229
				$ioc['container_condition_comparers']['any_contain'],
230
				$ioc['container_condition_comparers']['custom'],
231
			);
232
		};
233
	}
234
235
	/**
236
	 * Install all codition translators
237
	 *
238
	 * @param  PimpleContainer $ioc
239
	 */
240
	protected static function install_translators( $ioc ) {
241
		$ioc['container_condition_translator_array'] = function( $ioc ) {
242
			return new \Carbon_Fields\Container\Fulfillable\Translator\Array_Translator( $ioc['container_condition_factory'] );
243
		};
244
245
		$ioc['container_condition_translator_json'] = function( $ioc ) {
246
			return new \Carbon_Fields\Container\Fulfillable\Translator\Json_Translator( $ioc['container_condition_factory'] );
247
		};
248
	}
249
250
	/**
251
	 * Install all container coditions
252
	 *
253
	 * @param  PimpleContainer $ioc
254
	 */
255
	protected function install_container_conditions( $ioc ) {
256
		// add current_user_* static condition types to all containers
257
		add_filter( 'carbon_fields_container_static_condition_types', function( $condition_types, $container_type, $container ) {
258
			return array_merge(
259
				$condition_types,
260
				array( 'current_user_id', 'current_user_role', 'current_user_capability' )
261
			);
262
		}, 10, 3 );
263
264
		// add container-specific conditions
265
		add_filter( 'carbon_fields_post_meta_container_static_condition_types', array( $this, 'filter_post_meta_container_static_condition_types' ), 10, 3 );
266
		add_filter( 'carbon_fields_post_meta_container_dynamic_condition_types', array( $this, 'filter_post_meta_container_dynamic_condition_types' ), 10, 3 );
267
268
		add_filter( 'carbon_fields_term_meta_container_static_condition_types', array( $this, 'filter_term_meta_container_static_condition_types' ), 10, 3 );
269
		add_filter( 'carbon_fields_term_meta_container_dynamic_condition_types', array( $this, 'filter_term_meta_container_dynamic_condition_types' ), 10, 3 );
270
271
		add_filter( 'carbon_fields_user_meta_container_static_condition_types', array( $this, 'filter_user_meta_container_static_condition_types' ), 10, 3 );
272
		add_filter( 'carbon_fields_user_meta_container_dynamic_condition_types', array( $this, 'filter_user_meta_container_dynamic_condition_types' ), 10, 3 );
273
274
		add_filter( 'carbon_fields_theme_options_container_static_condition_types', array( $this, 'filter_theme_options_container_static_condition_types' ), 10, 3 );
275
	}
276
277
	/**
278
	 * Filter the Post_Meta_Container static condition types
279
	 *
280
	 * @param  array<string>                     $condition_types
281
	 * @param  Carbon_Fields\Container\Container $container
282
	 * @return array<string>
283
	 */
284
	public function filter_post_meta_container_static_condition_types( $condition_types, $container_type, $container ) {
285
		return array_merge(
286
			$condition_types,
287
			array( 'post_id', 'post_type' )
288
		);
289
	}
290
291
	/**
292
	 * Filter the Post_Meta_Container dynamic condition types
293
	 *
294
	 * @param  array<string>                     $condition_types
295
	 * @param  Carbon_Fields\Container\Container $container
296
	 * @return array<string>
297
	 */
298
	public function filter_post_meta_container_dynamic_condition_types( $condition_types, $container_type, $container ) {
299
		return array_merge(
300
			$condition_types,
301
			array( 'post_parent_id', 'post_ancestor_id', 'post_format', 'post_level', 'post_template', 'post_term' )
302
		);
303
	}
304
305
	/**
306
	 * Filter the Term_Meta_Container static condition types
307
	 *
308
	 * @param  array<string>                     $condition_types
309
	 * @param  Carbon_Fields\Container\Container $container
310
	 * @return array<string>
311
	 */
312
	public function filter_term_meta_container_static_condition_types( $condition_types, $container_type, $container ) {
313
		return array_merge(
314
			$condition_types,
315
			array( 'term', 'term_taxonomy' )
316
		);
317
	}
318
319
	/**
320
	 * Filter the Term_Meta_Container dynamic condition types
321
	 *
322
	 * @param  array<string>                     $condition_types
323
	 * @param  Carbon_Fields\Container\Container $container
324
	 * @return array<string>
325
	 */
326
	public function filter_term_meta_container_dynamic_condition_types( $condition_types, $container_type, $container ) {
327
		return array_merge(
328
			$condition_types,
329
			array( 'term_level', 'term_parent', 'term_ancestor' )
330
		);
331
	}
332
333
	/**
334
	 * Filter the User_Meta_Container static condition types
335
	 *
336
	 * @param  array<string>                     $condition_types
337
	 * @param  Carbon_Fields\Container\Container $container
338
	 * @return array<string>
339
	 */
340
	public function filter_user_meta_container_static_condition_types( $condition_types, $container_type, $container ) {
341
		return array_merge(
342
			$condition_types,
343
			array( 'user_id', 'user_capability' )
344
		);
345
	}
346
347
	/**
348
	 * Filter the User_Meta_Container dynamic condition types
349
	 *
350
	 * @param  array<string>                     $condition_types
351
	 * @param  Carbon_Fields\Container\Container $container
352
	 * @return array<string>
353
	 */
354
	public function filter_user_meta_container_dynamic_condition_types( $condition_types, $container_type, $container ) {
355
		return array_merge(
356
			$condition_types,
357
			array( 'user_role' )
358
		);
359
	}
360
361
	/**
362
	 * Filter the Theme_Options_Container static condition types
363
	 *
364
	 * @param  array<string>                     $condition_types
365
	 * @param  Carbon_Fields\Container\Container $container
366
	 * @return array<string>
367
	 */
368
	public function filter_theme_options_container_static_condition_types( $condition_types, $container_type, $container ) {
369
		return array_merge(
370
			$condition_types,
371
			array( 'blog_id' )
372
		);
373
	}
374
}
375