ravinderk /
Give
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, WordImpress |
||
| 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() { |
||
| 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'] ); |
||
| 56 | |||
| 57 | // Tab ID. |
||
| 58 | $this->id = $this->current_tab; |
||
| 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 |
||
|
0 ignored issues
–
show
|
|||
| 90 | */ |
||
| 91 | function set_default_setting_tab( $setting_tab ) { |
||
| 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 ) { |
||
| 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 ) { |
||
| 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 ) { |
||
| 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() ) { |
||
| 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, 2 ); |
||
| 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() ) { |
||
| 295 | global $wp_filter; |
||
|
0 ignored issues
–
show
Compatibility
Best Practice
introduced
by
Use of
global functionality is not recommended; it makes your code harder to test, and less reusable.
Instead of relying on 1. Pass all data via parametersfunction myFunction($a, $b) {
// Do something
}
2. Create a class that maintains your stateclass MyClass {
private $a;
private $b;
public function __construct($a, $b) {
$this->a = $a;
$this->b = $b;
}
public function myFunction() {
// Do something
}
}
Loading history...
|
|||
| 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 | if ( ! empty( $field['row_classes'] ) ) { |
||
| 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(). |
||
|
0 ignored issues
–
show
Unused Code
Comprehensibility
introduced
by
43% of this comment could be valid code. Did you maybe forget this after debugging?
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it. The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production. This check looks for comments that seem to be mostly valid code and reports them. Loading history...
|
|||
| 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() ) { |
||
| 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(). |
||
|
0 ignored issues
–
show
Unused Code
Comprehensibility
introduced
by
43% of this comment could be valid code. Did you maybe forget this after debugging?
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it. The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production. This check looks for comments that seem to be mostly valid code and reports them. Loading history...
|
|||
| 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 ) { |
||
| 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 ) { |
||
| 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; ?>"> |
||
| 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> |
||
| 552 | </th> |
||
| 553 | <?php $colspan = ''; ?> |
||
| 554 | <?php endif; ?> |
||
| 555 | <td class="give-forminp" <?php echo $colspan; ?>> |
||
| 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() { |
||
| 600 | global $wp_filter; |
||
|
0 ignored issues
–
show
Compatibility
Best Practice
introduced
by
Use of
global functionality is not recommended; it makes your code harder to test, and less reusable.
Instead of relying on 1. Pass all data via parametersfunction myFunction($a, $b) {
// Do something
}
2. Create a class that maintains your stateclass MyClass {
private $a;
private $b;
public function __construct($a, $b) {
$this->a = $a;
$this->b = $b;
}
public function myFunction() {
// Do something
}
}
Loading history...
|
|||
| 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>'; |
||
| 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="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>'; |
||
| 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 |
This check compares the return type specified in the
@returnannotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.