This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | /** |
||
3 | * Give CMB2 settings backward compatibility. |
||
4 | * |
||
5 | * @package Give |
||
6 | * @subpackage Classes/Give_CMB2_Settings_Loader |
||
7 | * @copyright Copyright (c) 2016, GiveWP |
||
8 | * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License |
||
9 | * @since 1.8 |
||
10 | */ |
||
11 | |||
12 | if ( ! class_exists( 'Give_CMB2_Settings_Loader' ) ) : |
||
13 | |||
14 | /** |
||
15 | * This class loads the cmb2 settings. |
||
16 | * |
||
17 | * @since 1.8 |
||
18 | */ |
||
19 | class Give_CMB2_Settings_Loader { |
||
20 | |||
21 | /** |
||
22 | * @since 1.8 |
||
23 | * @var Give_Plugin_Settings $prev_settings Previous setting class object. |
||
24 | */ |
||
25 | private $id; |
||
26 | |||
27 | /** |
||
28 | * @since 1.8 |
||
29 | * @var Give_Plugin_Settings $prev_settings Previous setting class object. |
||
30 | */ |
||
31 | private $prev_settings; |
||
32 | |||
33 | /** |
||
34 | * @since 1.8 |
||
35 | * @var string $current_tab Current setting section. |
||
36 | */ |
||
37 | protected $current_tab; |
||
38 | |||
39 | /** |
||
40 | * @since 1.8 |
||
41 | * @var string $current_tab Current setting section. |
||
42 | */ |
||
43 | private $current_section; |
||
44 | |||
45 | |||
46 | /** |
||
47 | * Give_CMB2_Settings_Loader constructor. |
||
48 | */ |
||
49 | function __construct() { |
||
0 ignored issues
–
show
|
|||
50 | // Get previous setting class object. |
||
51 | $this->prev_settings = new Give_Plugin_Settings(); |
||
52 | |||
53 | // Get current tab. |
||
54 | $this->current_tab = give_get_current_setting_tab(); |
||
55 | $this->current_section = empty( $_REQUEST['section'] ) ? ( current( array_keys( $this->get_sections() ) ) ) : sanitize_title( $_REQUEST['section'] ); |
||
0 ignored issues
–
show
|
|||
56 | |||
57 | // Tab ID. |
||
58 | $this->id = $this->current_tab; |
||
0 ignored issues
–
show
It seems like
$this->current_tab of type string is incompatible with the declared type object<Give_Plugin_Settings> of property $id .
Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property. Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property.. ![]() |
|||
59 | |||
60 | // Add addon tabs. |
||
61 | add_filter( 'give-settings_tabs_array', array( $this, 'add_addon_settings_page' ), 999999 ); |
||
62 | |||
63 | // Add save hook to addons. |
||
64 | add_action( 'give-settings_get_settings_pages', array( $this, 'setup_addon_save_hook' ), 999999 ); |
||
65 | |||
66 | // Add backward compatibility filters plugin settings. |
||
67 | $setting_tabs = array( 'general', 'gateways', 'display', 'emails', 'addons', 'licenses' ); |
||
68 | |||
69 | // Filter Payment Gateways settings. |
||
70 | if ( in_array( $this->current_tab, $setting_tabs ) ) { |
||
71 | add_filter( "give_get_settings_{$this->current_tab}", array( |
||
72 | $this, |
||
73 | 'get_filtered_addon_settings', |
||
74 | ), 999999, 1 ); |
||
75 | add_filter( "give_get_sections_{$this->current_tab}", array( |
||
76 | $this, |
||
77 | 'get_filtered_addon_sections', |
||
78 | ), 999999, 1 ); |
||
79 | } |
||
80 | } |
||
81 | |||
82 | /** |
||
83 | * Default setting tab. |
||
84 | * |
||
85 | * @since 1.8 |
||
86 | * |
||
87 | * @param $setting_tab |
||
88 | * |
||
89 | * @return string |
||
90 | */ |
||
91 | View Code Duplication | function set_default_setting_tab( $setting_tab ) { |
|
0 ignored issues
–
show
This method seems to be duplicated in 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. ![]() |
|||
92 | $default_tab = ''; |
||
93 | |||
94 | // Set default tab to first setting tab. |
||
95 | if ( $sections = array_keys( $this->get_sections() ) ) { |
||
96 | $default_tab = current( $sections ); |
||
97 | } |
||
98 | |||
99 | return $default_tab; |
||
100 | } |
||
101 | |||
102 | /** |
||
103 | * Add addon setting pages. |
||
104 | * |
||
105 | * @since 1.8 |
||
106 | * |
||
107 | * @param $pages |
||
108 | * |
||
109 | * @return mixed |
||
110 | */ |
||
111 | function add_addon_settings_page( $pages ) { |
||
0 ignored issues
–
show
|
|||
112 | // Previous setting page. |
||
113 | $previous_pages = $this->prev_settings->give_get_settings_tabs(); |
||
114 | |||
115 | // API and System Info setting tab merge to Tools setting tab, so remove them from tabs. |
||
116 | unset( $previous_pages['api'] ); |
||
117 | unset( $previous_pages['system_info'] ); |
||
118 | |||
119 | // Tab is not register. |
||
120 | $pages_diff = array_keys( array_diff( $previous_pages, $pages ) ); |
||
121 | |||
122 | // Merge old settings with new settings. |
||
123 | $pages = array_merge( $pages, $previous_pages ); |
||
124 | |||
125 | if ( in_array( $this->current_tab, $pages_diff ) ) { |
||
126 | // Filter & actions. |
||
127 | add_filter( "give_default_setting_tab_section_{$this->current_tab}", array( |
||
128 | $this, |
||
129 | 'set_default_setting_tab', |
||
130 | ), 10 ); |
||
131 | add_action( "give-settings_sections_{$this->current_tab}_page", array( $this, 'output_sections' ) ); |
||
132 | add_action( "give-settings_settings_{$this->current_tab}_page", array( $this, 'output' ), 10 ); |
||
133 | add_action( "give-settings_save_{$this->current_tab}", array( $this, 'save' ) ); |
||
134 | } |
||
135 | |||
136 | return $pages; |
||
137 | } |
||
138 | |||
139 | |||
140 | /** |
||
141 | * Setup save addon data hook. |
||
142 | * |
||
143 | * @since 1.8 |
||
144 | * |
||
145 | * @param $pages |
||
146 | * |
||
147 | * @return mixed |
||
148 | */ |
||
149 | function setup_addon_save_hook( $pages ) { |
||
0 ignored issues
–
show
|
|||
150 | $page_ids = array(); |
||
151 | |||
152 | foreach ( $pages as $page ) { |
||
153 | $page_ids = $page->add_settings_page( $page_ids ); |
||
154 | } |
||
155 | |||
156 | // Previous setting page. |
||
157 | $previous_pages = $this->prev_settings->give_get_settings_tabs(); |
||
158 | |||
159 | // API and System Info setting tab merge to Tools setting tab, so remove them from tabs. |
||
160 | unset( $previous_pages['api'] ); |
||
161 | unset( $previous_pages['system_info'] ); |
||
162 | |||
163 | // Tab is not register. |
||
164 | $pages_diff = array_keys( array_diff( $previous_pages, $page_ids ) ); |
||
165 | |||
166 | // Merge old settings with new settings. |
||
167 | // $pages = array_merge( $page_ids, $previous_pages ); |
||
168 | |||
169 | if ( in_array( $this->current_tab, $pages_diff ) ) { |
||
170 | // Filter & actions. |
||
171 | add_action( "give-settings_save_{$this->current_tab}", array( $this, 'save' ) ); |
||
172 | } |
||
173 | |||
174 | return $pages; |
||
175 | } |
||
176 | |||
177 | /** |
||
178 | * Get section name from section title |
||
179 | * |
||
180 | * @since 1.8 |
||
181 | * |
||
182 | * @param $field_name |
||
183 | * |
||
184 | * @return string |
||
185 | */ |
||
186 | function get_section_name( $field_name ) { |
||
0 ignored issues
–
show
|
|||
187 | // Bailout. |
||
188 | if ( empty( $field_name ) ) { |
||
189 | return $field_name; |
||
190 | } |
||
191 | |||
192 | $section_name = explode( ' ', $field_name ); |
||
193 | |||
194 | // Output. |
||
195 | return strip_tags( implode( ' ', $section_name ) ); |
||
196 | } |
||
197 | |||
198 | |||
199 | /** |
||
200 | * Do not translate string |
||
201 | * |
||
202 | * @since 1.0 |
||
203 | * @access public |
||
204 | * |
||
205 | * @param $translation |
||
206 | * @param $text |
||
207 | * |
||
208 | * @return mixed |
||
209 | */ |
||
210 | public function en_translation( $translation, $text ) { |
||
211 | return $text; |
||
212 | } |
||
213 | |||
214 | |||
215 | /** |
||
216 | * Get addon sections. |
||
217 | * |
||
218 | * @since 1.8 |
||
219 | * |
||
220 | * @param array $sections Array of setting fields (Optional). |
||
221 | * |
||
222 | * @return mixed |
||
223 | */ |
||
224 | function get_filtered_addon_sections( $sections = array() ) { |
||
0 ignored issues
–
show
|
|||
225 | // New sections. |
||
226 | $new_sections = array(); |
||
227 | $sections_ID = array_keys( $sections ); |
||
228 | $setting_fields = $this->prev_settings->give_settings( $this->current_tab ); |
||
229 | |||
230 | // We need untranslated settings for backward compatibility. |
||
231 | add_filter( 'gettext', array( $this, 'en_translation' ), 10, 2 ); |
||
232 | $en_setting_fields = $this->prev_settings->give_settings( $this->current_tab ); |
||
233 | remove_filter( 'gettext', array( $this, 'en_translation' ), 10 ); |
||
234 | |||
235 | if ( ! empty( $setting_fields ) && ! empty( $setting_fields['fields'] ) ) { |
||
236 | |||
237 | foreach ( $setting_fields['fields'] as $index => $field ) { |
||
238 | // Collect new sections from addons. |
||
239 | if ( 'give_title' !== $field['type'] ) { |
||
240 | continue; |
||
241 | } |
||
242 | |||
243 | // Untranslated setting name. |
||
244 | $en_setting_field_name = isset( $en_setting_fields['fields'][ $index ]['name'] ) ? $en_setting_fields['fields'][ $index ]['name'] : ''; |
||
245 | |||
246 | // Section name. |
||
247 | $field['name'] = isset( $field['name'] ) ? $field['name'] : ''; |
||
248 | $section_name = $this->get_section_name( $field['name'] ); |
||
249 | |||
250 | // Check if section name exit and section title array is not empty. |
||
251 | if ( ! empty( $sections ) && ! empty( $en_setting_field_name ) ) { |
||
252 | |||
253 | // Bailout: Do not load section if it is already exist. |
||
254 | if ( |
||
255 | in_array( sanitize_title( $en_setting_field_name ), $sections_ID ) // Check section id. |
||
256 | || in_array( $section_name, $sections ) // Check section name. |
||
257 | ) { |
||
258 | continue; |
||
259 | } |
||
260 | } |
||
261 | |||
262 | // Collect new sections from addons. |
||
263 | $new_sections[ sanitize_title( $field['name'] ) ] = $section_name; |
||
264 | } |
||
265 | } |
||
266 | |||
267 | // Add new section. |
||
268 | if ( ! empty( $new_sections ) ) { |
||
269 | $sections = array_merge( $sections, $new_sections ); |
||
270 | } |
||
271 | |||
272 | // Remove section tab conditionally. |
||
273 | switch ( give_get_current_setting_tab() ) { |
||
274 | case 'emails': |
||
275 | // unset( $sections['donation-receipt'] ); |
||
276 | unset( $sections['new-donation-notification'] ); |
||
277 | } |
||
278 | |||
279 | // Output. |
||
280 | return $sections; |
||
281 | } |
||
282 | |||
283 | |||
284 | /** |
||
285 | * Get setting fields. |
||
286 | * |
||
287 | * @since 1.8 |
||
288 | * |
||
289 | * @param array $settings List of settings. |
||
290 | * @param array $setting_fields Main tab settings data. |
||
291 | * |
||
292 | * @return array |
||
293 | */ |
||
294 | function get_filtered_addon_settings( $settings, $setting_fields = array() ) { |
||
0 ignored issues
–
show
|
|||
295 | global $wp_filter; |
||
296 | |||
297 | $new_setting_fields = array(); |
||
298 | |||
299 | if ( ! empty( $settings ) ) { |
||
300 | // Bailout: If setting array contain first element of type title then it means it is already created with new setting api (skip this section ). |
||
301 | if ( isset( $settings[0]['type'] ) && 'title' == $settings[0]['type'] ) { |
||
302 | $last_sectionend_pos = 0; |
||
303 | foreach ( $settings as $index => $setting ) { |
||
304 | // We need setting till last section end. |
||
305 | if ( 'sectionend' === $setting['type'] ) { |
||
306 | $last_sectionend_pos = ++ $index; |
||
307 | } |
||
308 | } |
||
309 | |||
310 | $settings = array_slice( $settings, 0, $last_sectionend_pos ); |
||
311 | |||
312 | return $settings; |
||
313 | } |
||
314 | |||
315 | // Store title field id. |
||
316 | $prev_title_field_id = ''; |
||
317 | |||
318 | // Create new setting fields. |
||
319 | foreach ( $settings as $index => $field ) { |
||
320 | |||
321 | // Bailout: Must need field type to process. |
||
322 | if ( ! isset( $field['type'] ) ) { |
||
323 | continue; |
||
324 | } |
||
325 | |||
326 | // Set wrapper class if any. |
||
327 | View Code Duplication | if ( ! empty( $field['row_classes'] ) ) { |
|
0 ignored issues
–
show
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. ![]() |
|||
328 | $field['wrapper_class'] = $field['row_classes']; |
||
329 | unset( $field['row_classes'] ); |
||
330 | } |
||
331 | |||
332 | $field['name'] = ! isset( $field['name'] ) ? '' : $field['name']; |
||
333 | $field['desc'] = ! isset( $field['desc'] ) ? '' : $field['desc']; |
||
334 | |||
335 | // Modify cmb2 setting fields. |
||
336 | switch ( $field['type'] ) { |
||
337 | case 'text' : |
||
338 | case 'file' : |
||
339 | $field['css'] = 'width:25em;'; |
||
340 | break; |
||
341 | |||
342 | case 'text_small' : |
||
343 | $field['type'] = 'text'; |
||
344 | break; |
||
345 | |||
346 | case 'text_email' : |
||
347 | $field['type'] = 'email'; |
||
348 | $field['css'] = 'width:25em;'; |
||
349 | break; |
||
350 | |||
351 | case 'radio_inline' : |
||
352 | $field['type'] = 'radio'; |
||
353 | $field['class'] = 'give-radio-inline'; |
||
354 | break; |
||
355 | |||
356 | case 'give_title' : |
||
357 | $field['type'] = 'title'; |
||
358 | |||
359 | // Since we are showing sections, so there now ned to show horizontal rules. |
||
360 | if ( '<hr>' === $field['desc'] ) { |
||
361 | $field['desc'] = ''; |
||
362 | } |
||
363 | |||
364 | break; |
||
365 | } |
||
366 | |||
367 | if ( 'title' === $field['type'] ) { |
||
368 | |||
369 | // If we do not have first element as title then these field will be skip from frontend |
||
370 | // because there are not belong to any section, so put all abandon fields under first section. |
||
371 | if ( $index && empty( $prev_title_field_id ) ) { |
||
372 | array_unshift( |
||
373 | $new_setting_fields, |
||
374 | array( |
||
375 | 'title' => $field['name'], |
||
376 | 'type' => $field['type'], |
||
377 | 'desc' => $field['desc'], |
||
378 | 'id' => $field['id'], |
||
379 | ) |
||
380 | ); |
||
381 | |||
382 | $prev_title_field_id = $field['id']; |
||
383 | |||
384 | continue; |
||
385 | } elseif ( $index ) { |
||
386 | // Section end. |
||
387 | $new_setting_fields[] = array( |
||
388 | 'type' => 'sectionend', |
||
389 | 'id' => $prev_title_field_id, |
||
390 | ); |
||
391 | } |
||
392 | |||
393 | // Section start. |
||
394 | $new_setting_fields[] = array( |
||
395 | 'title' => $field['name'], |
||
396 | 'type' => $field['type'], |
||
397 | 'desc' => $field['desc'], |
||
398 | 'id' => $field['id'], |
||
399 | ); |
||
400 | |||
401 | $prev_title_field_id = $field['id']; |
||
402 | } else { |
||
403 | |||
404 | // setting fields |
||
405 | $new_setting_fields[] = $field; |
||
406 | }// End if(). |
||
407 | }// End foreach(). |
||
408 | |||
409 | // Section end. |
||
410 | $new_setting_fields[] = array( |
||
411 | 'type' => 'sectionend', |
||
412 | 'id' => $prev_title_field_id, |
||
413 | ); |
||
414 | |||
415 | // Check if setting page has title section or not. |
||
416 | // If setting page does not have title section then add title section to it and fix section end array id. |
||
417 | if ( 'title' !== $new_setting_fields[0]['type'] ) { |
||
418 | array_unshift( |
||
419 | $new_setting_fields, |
||
420 | array( |
||
421 | 'title' => ( isset( $settings['give_title'] ) ? $settings['give_title'] : '' ), |
||
422 | 'type' => 'title', |
||
423 | 'desc' => ! empty( $setting_fields['desc'] ) ? $setting_fields['desc'] : '', |
||
424 | 'id' => ( isset( $settings['id'] ) ? $settings['id'] : '' ), |
||
425 | ) |
||
426 | ); |
||
427 | |||
428 | // Update id in section end array if does not contain. |
||
429 | if ( empty( $new_setting_fields[ count( $new_setting_fields ) - 1 ]['id'] ) ) { |
||
430 | $new_setting_fields[ count( $new_setting_fields ) - 1 ]['id'] = ( isset( $settings['id'] ) ? $settings['id'] : '' ); |
||
431 | } |
||
432 | } |
||
433 | |||
434 | // Return only section related settings. |
||
435 | if ( $sections = $this->get_filtered_addon_sections() ) { |
||
0 ignored issues
–
show
$sections is not used, you could remove the assignment.
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently. $myVar = 'Value';
$higher = false;
if (rand(1, 6) > 3) {
$higher = true;
} else {
$higher = false;
}
Both the ![]() |
|||
436 | $new_setting_fields = $this->get_section_settings( $new_setting_fields ); |
||
437 | } |
||
438 | |||
439 | // Third party plugin backward compatibility. |
||
440 | $wp_filter_keys = array_keys( $wp_filter ); |
||
441 | foreach ( $new_setting_fields as $index => $field ) { |
||
442 | if ( ! isset( $field['type'] ) || in_array( $field['type'], array( 'title', 'sectionend' ) ) ) { |
||
443 | continue; |
||
444 | } |
||
445 | |||
446 | $cmb2_filter_name = "cmb2_render_{$field['type']}"; |
||
447 | |||
448 | if ( in_array( $cmb2_filter_name, $wp_filter_keys ) ) { |
||
449 | |||
450 | if ( 0 >= version_compare( 4.7, get_bloginfo( 'version' ) ) && ! empty( $wp_filter[ $cmb2_filter_name ]->callbacks ) ) { |
||
451 | $cmb2_filter_arr = current( $wp_filter[ $cmb2_filter_name ]->callbacks ); |
||
452 | } else { |
||
453 | $cmb2_filter_arr = current( $wp_filter[ $cmb2_filter_name ] ); |
||
454 | } |
||
455 | |||
456 | if ( ! empty( $cmb2_filter_arr ) ) { |
||
457 | // Note: function can be called either globally or with class object, it depends on how developer invoke it. |
||
458 | $new_setting_fields[ $index ]['func'] = current( $cmb2_filter_arr ); |
||
459 | add_action( "give_admin_field_{$field['type']}", array( |
||
460 | $this, |
||
461 | 'addon_setting_field', |
||
462 | ), 10, 2 ); |
||
463 | } |
||
464 | } |
||
465 | } |
||
466 | |||
467 | return $new_setting_fields; |
||
468 | }// End if(). |
||
469 | |||
470 | return $settings; |
||
471 | } |
||
472 | |||
473 | |||
474 | /** |
||
475 | * Get section related setting. |
||
476 | * |
||
477 | * @since 1.8 |
||
478 | * |
||
479 | * @param $tab_settings |
||
480 | * |
||
481 | * @return array |
||
482 | */ |
||
483 | function get_section_settings( $tab_settings ) { |
||
0 ignored issues
–
show
|
|||
484 | $current_section = give_get_current_setting_section(); |
||
485 | |||
486 | // Note: If we are opening default tab for addon setting then it is possible that we will get empty string as current section |
||
487 | // because default section filter added after save hook fire, so we will always get problem to save first section [default] or if there are only on section |
||
488 | // This is hack to fix this. |
||
489 | if ( empty( $current_section ) ) { |
||
490 | $current_section = $this->set_default_setting_tab( $current_section ); |
||
491 | } |
||
492 | |||
493 | $section_start = false; |
||
494 | $section_end = false; |
||
495 | $section_only_setting_fields = array(); |
||
496 | |||
497 | foreach ( $tab_settings as $field ) { |
||
498 | if ( 'title' == $field['type'] && $current_section == sanitize_title( $field['title'] ) ) { |
||
499 | $section_start = true; |
||
500 | } |
||
501 | |||
502 | if ( ! $section_start || $section_end ) { |
||
503 | continue; |
||
504 | } |
||
505 | |||
506 | if ( $section_start && ! $section_end ) { |
||
507 | if ( 'sectionend' == $field['type'] ) { |
||
508 | $section_end = true; |
||
509 | } |
||
510 | $section_only_setting_fields[] = $field; |
||
511 | } |
||
512 | } |
||
513 | |||
514 | // Remove title from setting, prevent it from render in setting tab. |
||
515 | $section_only_setting_fields[0]['title'] = ''; |
||
516 | |||
517 | return apply_filters( "give_get_settings_{$this->current_tab}_{$current_section}", $section_only_setting_fields, $tab_settings ); |
||
518 | } |
||
519 | |||
520 | |||
521 | /** |
||
522 | * CMB2 addon setting fields backward compatibility. |
||
523 | * |
||
524 | * @since 1.8 |
||
525 | * |
||
526 | * @param array $field |
||
527 | * @param mixed $saved_value |
||
528 | * |
||
529 | * @return void |
||
530 | */ |
||
531 | function addon_setting_field( $field, $saved_value ) { |
||
0 ignored issues
–
show
|
|||
532 | // Create object for cmb2 function callback backward compatibility. |
||
533 | // Note: Do not call any cmb2 function on these objects |
||
534 | $field_obj = (object) array( 'args' => $field ); |
||
535 | $field_type_obj = (object) array( 'field' => $field_obj ); |
||
536 | |||
537 | switch ( $this->current_tab ) : |
||
538 | case 'licenses': |
||
539 | ?> |
||
540 | <div class="give-settings-wrap give-settings-wrap-<?php echo $this->current_tab; ?>"> |
||
0 ignored issues
–
show
|
|||
541 | <?php $field['func']['function']( $field_obj, $saved_value, '', '', $field_type_obj ); ?> |
||
542 | </div> |
||
543 | <?php break; |
||
544 | |||
545 | default : |
||
546 | $colspan = 'colspan="2"'; |
||
547 | ?> |
||
548 | <tr valign="top"> |
||
549 | <?php if ( ! empty( $field['name'] ) && ! in_array( $field['name'], array( ' ' ) ) ) : ?> |
||
550 | <th scope="row" class="titledesc"> |
||
551 | <label for="<?php echo esc_attr( $field['name'] ); ?>"><?php echo $field['title']; ?></label> |
||
0 ignored issues
–
show
|
|||
552 | </th> |
||
553 | <?php $colspan = ''; ?> |
||
554 | <?php endif; ?> |
||
555 | <td class="give-forminp" <?php echo $colspan; ?>> |
||
0 ignored issues
–
show
|
|||
556 | <?php |
||
557 | if ( is_array( $field['func']['function'] ) ) { |
||
558 | $classname = $field['func']['function'][0]; |
||
559 | $function_name = $field['func']['function'][1]; |
||
560 | $classname->$function_name( $field_obj, $saved_value, '', '', $field_type_obj ); |
||
561 | } else { |
||
562 | $function_name = $field['func']['function']; |
||
563 | $function_name( $field_obj, $saved_value, '', '', $field_type_obj ); |
||
564 | } |
||
565 | ?> |
||
566 | </td> |
||
567 | </tr> |
||
568 | <?php |
||
569 | endswitch; |
||
570 | } |
||
571 | |||
572 | /** |
||
573 | * Get sections. |
||
574 | * |
||
575 | * @since 1.8 |
||
576 | * @return array |
||
577 | */ |
||
578 | public function get_sections() { |
||
579 | $sections = array(); |
||
580 | |||
581 | if ( ( $setting_fields = $this->prev_settings->give_settings( $this->current_tab ) ) && ! empty( $setting_fields['fields'] ) ) { |
||
582 | foreach ( $setting_fields['fields'] as $field ) { |
||
583 | if ( 'give_title' == $field['type'] ) { |
||
584 | $sections[ sanitize_title( $field['name'] ) ] = $this->get_section_name( $field['name'] ); |
||
585 | } |
||
586 | } |
||
587 | } |
||
588 | |||
589 | return $sections; |
||
590 | } |
||
591 | |||
592 | |||
593 | /** |
||
594 | * Get setting fields. |
||
595 | * |
||
596 | * @since 1.8 |
||
597 | * @return array |
||
598 | */ |
||
599 | function get_settings() { |
||
0 ignored issues
–
show
|
|||
600 | global $wp_filter; |
||
601 | |||
602 | $new_setting_fields = array(); |
||
603 | |||
604 | if ( $setting_fields = $this->prev_settings->give_settings( $this->current_tab ) ) { |
||
605 | if ( isset( $setting_fields['fields'] ) ) { |
||
606 | |||
607 | $tab_data = array( |
||
608 | 'id' => $setting_fields['id'], |
||
609 | 'give_title' => $setting_fields['give_title'], |
||
610 | 'desc' => ( isset( $setting_fields['desc'] ) ? $setting_fields['desc'] : '' ), |
||
611 | ); |
||
612 | |||
613 | $new_setting_fields = $this->get_filtered_addon_settings( $setting_fields['fields'], $tab_data ); |
||
614 | } |
||
615 | } |
||
616 | |||
617 | return $new_setting_fields; |
||
618 | } |
||
619 | |||
620 | /** |
||
621 | * Output sections. |
||
622 | * |
||
623 | * @since 1.8 |
||
624 | * @return void |
||
625 | */ |
||
626 | public function output_sections() { |
||
627 | $sections = $this->get_sections(); |
||
628 | |||
629 | // Show section settings only if setting section exist. |
||
630 | if ( $this->current_section && ! in_array( $this->current_section, array_keys( $sections ) ) ) { |
||
631 | echo '<div class="error"><p>' . __( 'Oops, this settings page does not exist.', 'give' ) . '</p></div>'; |
||
0 ignored issues
–
show
|
|||
632 | $GLOBALS['give_hide_save_button'] = true; |
||
633 | |||
634 | return; |
||
635 | } |
||
636 | |||
637 | // Bailout. |
||
638 | if ( empty( $sections ) ) { |
||
639 | return; |
||
640 | } |
||
641 | |||
642 | echo '<ul class="give-subsubsub">'; |
||
643 | |||
644 | $array_keys = array_keys( $sections ); |
||
645 | |||
646 | foreach ( $sections as $id => $label ) { |
||
647 | echo '<li><a href="' . admin_url( 'edit.php?post_type=give_forms&page=give-settings&tab=' . $this->current_tab . '§ion=' . sanitize_title( $id ) ) . '" class="' . ( $this->current_section == $id ? 'current' : '' ) . '">' . strip_tags( $label ) . '</a> ' . ( end( $array_keys ) == $id ? '' : '|' ) . ' </li>'; |
||
0 ignored issues
–
show
|
|||
648 | } |
||
649 | |||
650 | echo '</ul><br class="clear" /><hr>'; |
||
651 | } |
||
652 | |||
653 | /** |
||
654 | * Output the settings. |
||
655 | * |
||
656 | * @since 1.8 |
||
657 | * @return void |
||
658 | */ |
||
659 | public function output() { |
||
660 | $settings = $this->get_settings(); |
||
661 | |||
662 | Give_Admin_Settings::output_fields( $settings, 'give_settings' ); |
||
663 | } |
||
664 | |||
665 | /** |
||
666 | * Save settings. |
||
667 | * |
||
668 | * @since 1.8 |
||
669 | * @return void |
||
670 | */ |
||
671 | public function save() { |
||
672 | $settings = $this->get_settings(); |
||
673 | |||
674 | Give_Admin_Settings::save_fields( $settings, 'give_settings' ); |
||
675 | } |
||
676 | } |
||
677 | endif; |
||
678 | |||
679 | new Give_CMB2_Settings_Loader(); |
||
680 |
Adding explicit visibility (
private
,protected
, orpublic
) is generally recommend to communicate to other developers how, and from where this method is intended to be used.