rousnay /
lighthouse
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | /* |
||
| 4 | * ACF Admin Field Group Class |
||
| 5 | * |
||
| 6 | * All the logic for editing a field group |
||
| 7 | * |
||
| 8 | * @class acf_admin_field_group |
||
| 9 | * @package ACF |
||
| 10 | * @subpackage Admin |
||
| 11 | */ |
||
| 12 | |||
| 13 | if( ! class_exists('acf_admin_field_group') ) : |
||
| 14 | |||
| 15 | class acf_admin_field_group { |
||
| 16 | |||
| 17 | |||
| 18 | /* |
||
| 19 | * __construct |
||
| 20 | * |
||
| 21 | * This function will setup the class functionality |
||
| 22 | * |
||
| 23 | * @type function |
||
| 24 | * @date 5/03/2014 |
||
| 25 | * @since 5.0.0 |
||
| 26 | * |
||
| 27 | * @param n/a |
||
| 28 | * @return n/a |
||
| 29 | */ |
||
| 30 | |||
| 31 | function __construct() { |
||
| 32 | |||
| 33 | // actions |
||
| 34 | add_action('current_screen', array($this, 'current_screen')); |
||
| 35 | add_action('save_post', array($this, 'save_post'), 10, 2); |
||
| 36 | |||
| 37 | |||
| 38 | // ajax |
||
| 39 | add_action('wp_ajax_acf/field_group/render_field_settings', array($this, 'ajax_render_field_settings')); |
||
| 40 | add_action('wp_ajax_acf/field_group/render_location_value', array($this, 'ajax_render_location_value')); |
||
| 41 | add_action('wp_ajax_acf/field_group/move_field', array($this, 'ajax_move_field')); |
||
| 42 | |||
| 43 | |||
| 44 | // filters |
||
| 45 | add_filter('post_updated_messages', array($this, 'post_updated_messages')); |
||
| 46 | |||
| 47 | } |
||
| 48 | |||
| 49 | |||
| 50 | /* |
||
| 51 | * post_updated_messages |
||
| 52 | * |
||
| 53 | * This function will customize the message shown when editing a field group |
||
| 54 | * |
||
| 55 | * @type action (post_updated_messages) |
||
| 56 | * @date 30/04/2014 |
||
| 57 | * @since 5.0.0 |
||
| 58 | * |
||
| 59 | * @param $messages (array) |
||
| 60 | * @return $messages |
||
| 61 | */ |
||
| 62 | |||
| 63 | function post_updated_messages( $messages ) { |
||
| 64 | |||
| 65 | // append to messages |
||
| 66 | $messages['acf-field-group'] = array( |
||
| 67 | 0 => '', // Unused. Messages start at index 1. |
||
| 68 | 1 => __('Field group updated.', 'acf'), |
||
| 69 | 2 => __('Field group updated.', 'acf'), |
||
| 70 | 3 => __('Field group deleted.', 'acf'), |
||
| 71 | 4 => __('Field group updated.', 'acf'), |
||
| 72 | 5 => false, // field group does not support revisions |
||
| 73 | 6 => __('Field group published.', 'acf'), |
||
| 74 | 7 => __('Field group saved.', 'acf'), |
||
| 75 | 8 => __('Field group submitted.', 'acf'), |
||
| 76 | 9 => __('Field group scheduled for.', 'acf'), |
||
| 77 | 10 => __('Field group draft updated.', 'acf') |
||
| 78 | ); |
||
| 79 | |||
| 80 | |||
| 81 | // return |
||
| 82 | return $messages; |
||
| 83 | } |
||
| 84 | |||
| 85 | |||
| 86 | /* |
||
| 87 | * current_screen |
||
| 88 | * |
||
| 89 | * This function is fired when loading the admin page before HTML has been rendered. |
||
| 90 | * |
||
| 91 | * @type action (current_screen) |
||
| 92 | * @date 21/07/2014 |
||
| 93 | * @since 5.0.0 |
||
| 94 | * |
||
| 95 | * @param n/a |
||
| 96 | * @return n/a |
||
| 97 | */ |
||
| 98 | |||
| 99 | function current_screen() { |
||
| 100 | |||
| 101 | // validate screen |
||
| 102 | if( !acf_is_screen('acf-field-group') ) { |
||
| 103 | |||
| 104 | return; |
||
| 105 | |||
| 106 | } |
||
| 107 | |||
| 108 | |||
| 109 | // disable JSON to avoid conflicts between DB and JSON |
||
| 110 | acf_disable_local(); |
||
| 111 | |||
| 112 | |||
| 113 | // actions |
||
| 114 | add_action('admin_enqueue_scripts', array($this,'admin_enqueue_scripts'), 20); |
||
| 115 | add_action('admin_head', array($this,'admin_head'), 20); |
||
| 116 | add_action('admin_footer', array($this,'admin_footer'), 20); |
||
| 117 | |||
| 118 | } |
||
| 119 | |||
| 120 | |||
| 121 | /* |
||
| 122 | * admin_enqueue_scripts |
||
| 123 | * |
||
| 124 | * This action is run after post query but before any admin script / head actions. |
||
| 125 | * It is a good place to register all actions. |
||
| 126 | * |
||
| 127 | * @type action (admin_enqueue_scripts) |
||
| 128 | * @date 30/06/2014 |
||
| 129 | * @since 5.0.0 |
||
| 130 | * |
||
| 131 | * @param n/a |
||
| 132 | * @return n/a |
||
| 133 | */ |
||
| 134 | |||
| 135 | function admin_enqueue_scripts() { |
||
| 136 | |||
| 137 | // no autosave |
||
| 138 | wp_dequeue_script('autosave'); |
||
| 139 | |||
| 140 | |||
| 141 | // custom scripts |
||
| 142 | wp_enqueue_style('acf-field-group'); |
||
| 143 | wp_enqueue_script('acf-field-group'); |
||
| 144 | |||
| 145 | |||
| 146 | // 3rd party hook |
||
| 147 | do_action('acf/field_group/admin_enqueue_scripts'); |
||
| 148 | |||
| 149 | } |
||
| 150 | |||
| 151 | |||
| 152 | /* |
||
| 153 | * admin_head |
||
| 154 | * |
||
| 155 | * This function will setup all functionality for the field group edit page to work |
||
| 156 | * |
||
| 157 | * @type action (admin_head) |
||
| 158 | * @date 23/06/12 |
||
| 159 | * @since 3.1.8 |
||
| 160 | * |
||
| 161 | * @param $post_id (int) |
||
| 162 | * @return $post_id (int) |
||
| 163 | */ |
||
| 164 | |||
| 165 | function admin_head() { |
||
| 166 | |||
| 167 | // global |
||
| 168 | global $post, $field_group; |
||
| 169 | |||
| 170 | |||
| 171 | // set global var |
||
| 172 | $field_group = acf_get_field_group( $post ); |
||
| 173 | |||
| 174 | |||
| 175 | // metaboxes |
||
| 176 | add_meta_box('acf-field-group-fields', __("Fields",'acf'), array($this, 'mb_fields'), 'acf-field-group', 'normal', 'high'); |
||
| 177 | add_meta_box('acf-field-group-locations', __("Location",'acf'), array($this, 'mb_locations'), 'acf-field-group', 'normal', 'high'); |
||
| 178 | add_meta_box('acf-field-group-options', __("Settings",'acf'), array($this, 'mb_options'), 'acf-field-group', 'normal', 'high'); |
||
| 179 | |||
| 180 | |||
| 181 | // actions |
||
| 182 | add_action('post_submitbox_misc_actions', array($this, 'post_submitbox_misc_actions'), 10, 0); |
||
| 183 | add_action('edit_form_after_title', array($this, 'edit_form_after_title'), 10, 0); |
||
| 184 | |||
| 185 | |||
| 186 | // filters |
||
| 187 | add_filter('screen_settings', array($this, 'screen_settings'), 10, 1); |
||
| 188 | |||
| 189 | |||
| 190 | // action for 3rd party customisation |
||
| 191 | do_action('acf/field_group/admin_head'); |
||
| 192 | |||
| 193 | } |
||
| 194 | |||
| 195 | |||
| 196 | /* |
||
| 197 | * admin_footer |
||
| 198 | * |
||
| 199 | * description |
||
| 200 | * |
||
| 201 | * @type function |
||
| 202 | * @date 11/01/2016 |
||
| 203 | * @since 5.3.2 |
||
| 204 | * |
||
| 205 | * @param $post_id (int) |
||
| 206 | * @return $post_id (int) |
||
| 207 | */ |
||
| 208 | |||
| 209 | function admin_footer() { |
||
| 210 | |||
| 211 | // global |
||
| 212 | global $post; |
||
| 213 | |||
| 214 | |||
| 215 | // vars |
||
| 216 | $l10n = apply_filters('acf/field_group/admin_l10n', array( |
||
| 217 | 'move_to_trash' => __("Move to trash. Are you sure?",'acf'), |
||
| 218 | 'checked' => __("checked",'acf'), |
||
| 219 | 'no_fields' => __("No toggle fields available",'acf'), |
||
| 220 | 'title_is_required' => __("Field group title is required",'acf'), |
||
| 221 | 'copy' => __("copy",'acf'), |
||
| 222 | 'or' => __("or",'acf'), |
||
| 223 | 'fields' => __("Fields",'acf'), |
||
| 224 | 'parent_fields' => __("Parent fields",'acf'), |
||
| 225 | 'sibling_fields' => __("Sibling fields",'acf'), |
||
| 226 | 'move_field' => __("Move Custom Field",'acf'), |
||
| 227 | 'move_field_warning' => __("This field cannot be moved until its changes have been saved",'acf'), |
||
| 228 | 'null' => __("Null",'acf'), |
||
| 229 | 'unload' => __('The changes you made will be lost if you navigate away from this page','acf'), |
||
| 230 | 'field_name_start' => __('The string "field_" may not be used at the start of a field name','acf'), |
||
| 231 | )); |
||
| 232 | |||
| 233 | $o = array( |
||
| 234 | 'post_id' => $post->ID, |
||
| 235 | 'nonce' => wp_create_nonce( 'acf_nonce' ), |
||
| 236 | 'admin_url' => admin_url(), |
||
| 237 | 'ajaxurl' => admin_url( 'admin-ajax.php' ), |
||
| 238 | 'validation' => 0, |
||
| 239 | ); |
||
| 240 | |||
| 241 | |||
| 242 | ?> |
||
| 243 | <script type="text/javascript"> |
||
| 244 | /* <![CDATA[ */ |
||
| 245 | if( typeof acf !== 'undefined' ) { |
||
| 246 | |||
| 247 | acf.o = <?php echo json_encode($o); ?>; |
||
| 248 | acf.l10n = <?php echo json_encode($l10n); ?>; |
||
| 249 | <?php do_action('acf/field_group/admin_footer_js'); ?> |
||
| 250 | |||
| 251 | acf.do_action('prepare'); |
||
| 252 | |||
| 253 | } |
||
| 254 | /* ]]> */ |
||
| 255 | </script> |
||
| 256 | <?php |
||
| 257 | |||
| 258 | |||
| 259 | // action for 3rd party customisation |
||
| 260 | do_action('acf/field_group/admin_footer'); |
||
| 261 | |||
| 262 | } |
||
| 263 | |||
| 264 | |||
| 265 | /* |
||
| 266 | * screen_settings |
||
| 267 | * |
||
| 268 | * description |
||
| 269 | * |
||
| 270 | * @type function |
||
| 271 | * @date 26/01/13 |
||
| 272 | * @since 3.6.0 |
||
| 273 | * |
||
| 274 | * @param $current (string) |
||
| 275 | * @return $current |
||
| 276 | */ |
||
| 277 | |||
| 278 | function screen_settings( $html ) { |
||
| 279 | |||
| 280 | // vars |
||
| 281 | $checked = acf_get_user_setting('show_field_keys') ? 'checked="checked"' : ''; |
||
| 282 | |||
| 283 | |||
| 284 | // append |
||
| 285 | $html .= '<div id="acf-append-show-on-screen" class="acf-hidden">'; |
||
| 286 | $html .= '<label for="acf-field-key-hide"><input id="acf-field-key-hide" type="checkbox" value="1" name="show_field_keys" ' . $checked . ' /> ' . __('Field Keys','acf') . '</label>'; |
||
| 287 | $html .= '</div>'; |
||
| 288 | |||
| 289 | |||
| 290 | // return |
||
| 291 | return $html; |
||
| 292 | |||
| 293 | } |
||
| 294 | |||
| 295 | |||
| 296 | /* |
||
| 297 | * post_submitbox_misc_actions |
||
| 298 | * |
||
| 299 | * This function will customize the publish metabox |
||
| 300 | * |
||
| 301 | * @type function |
||
| 302 | * @date 17/07/2015 |
||
| 303 | * @since 5.2.9 |
||
| 304 | * |
||
| 305 | * @param n/a |
||
| 306 | * @return n/a |
||
| 307 | */ |
||
| 308 | |||
| 309 | function post_submitbox_misc_actions() { |
||
| 310 | |||
| 311 | // global |
||
| 312 | global $field_group; |
||
| 313 | |||
| 314 | |||
| 315 | // vars |
||
| 316 | $status = $field_group['active'] ? __("Active",'acf') : __("Disabled",'acf'); |
||
| 317 | |||
| 318 | ?> |
||
| 319 | <script type="text/javascript"> |
||
| 320 | (function($) { |
||
| 321 | |||
| 322 | // modify status |
||
| 323 | $('#post-status-display').html('<?php echo $status; ?>'); |
||
| 324 | |||
| 325 | |||
| 326 | // remove edit links |
||
| 327 | $('#misc-publishing-actions a').remove(); |
||
| 328 | |||
| 329 | |||
| 330 | // remove editables (fixes status text changing on submit) |
||
| 331 | $('#misc-publishing-actions .hide-if-js').remove(); |
||
| 332 | |||
| 333 | })(jQuery); |
||
| 334 | </script> |
||
| 335 | <?php |
||
| 336 | |||
| 337 | } |
||
| 338 | |||
| 339 | |||
| 340 | /* |
||
| 341 | * edit_form_after_title |
||
| 342 | * |
||
| 343 | * This action will allow ACF to render metaboxes after the title |
||
| 344 | * |
||
| 345 | * @type action |
||
| 346 | * @date 17/08/13 |
||
| 347 | * |
||
| 348 | * @param n/a |
||
| 349 | * @return n/a |
||
| 350 | */ |
||
| 351 | |||
| 352 | function edit_form_after_title() { |
||
| 353 | |||
| 354 | ?> |
||
| 355 | <div id="acf-form-data" class="acf-hidden"> |
||
| 356 | <input type="hidden" name="_acfnonce" value="<?php echo wp_create_nonce( 'field_group' ); ?>" /> |
||
| 357 | <input type="hidden" name="_acf_delete_fields" value="0" id="input-delete-fields" /> |
||
| 358 | <?php do_action('acf/field_group/form_data'); ?> |
||
| 359 | </div> |
||
| 360 | <?php |
||
| 361 | |||
| 362 | } |
||
| 363 | |||
| 364 | |||
| 365 | /* |
||
| 366 | * save_post |
||
| 367 | * |
||
| 368 | * This function will save all the field group data |
||
| 369 | * |
||
| 370 | * @type function |
||
| 371 | * @date 23/06/12 |
||
| 372 | * @since 1.0.0 |
||
| 373 | * |
||
| 374 | * @param $post_id (int) |
||
| 375 | * @return $post_id (int) |
||
| 376 | */ |
||
| 377 | |||
| 378 | function save_post( $post_id, $post ) { |
||
| 379 | |||
| 380 | // do not save if this is an auto save routine |
||
| 381 | if( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) { |
||
| 382 | |||
| 383 | return $post_id; |
||
| 384 | |||
| 385 | } |
||
| 386 | |||
| 387 | |||
| 388 | // bail early if not acf-field-group |
||
| 389 | if( $post->post_type !== 'acf-field-group' ) { |
||
| 390 | |||
| 391 | return $post_id; |
||
| 392 | |||
| 393 | } |
||
| 394 | |||
| 395 | |||
| 396 | // only save once! WordPress save's a revision as well. |
||
| 397 | if( wp_is_post_revision($post_id) ) { |
||
| 398 | |||
| 399 | return $post_id; |
||
| 400 | |||
| 401 | } |
||
| 402 | |||
| 403 | |||
| 404 | // verify nonce |
||
| 405 | if( !acf_verify_nonce('field_group') ) { |
||
| 406 | |||
| 407 | return $post_id; |
||
| 408 | |||
| 409 | } |
||
| 410 | |||
| 411 | |||
| 412 | // disable local to avoid conflicts between DB and local |
||
| 413 | acf_disable_local(); |
||
| 414 | |||
| 415 | |||
| 416 | // save fields |
||
| 417 | unset( $_POST['acf_fields']['acfcloneindex'] ); |
||
| 418 | |||
| 419 | if( !empty($_POST['acf_fields']) ) { |
||
| 420 | |||
| 421 | foreach( $_POST['acf_fields'] as $field ) { |
||
| 422 | |||
| 423 | // vars |
||
| 424 | $specific = false; |
||
| 425 | $save = acf_extract_var( $field, 'save' ); |
||
| 426 | |||
| 427 | |||
| 428 | // only saved field if has changed |
||
| 429 | if( $save == 'meta' ) { |
||
| 430 | |||
| 431 | $specific = array( |
||
| 432 | 'menu_order', |
||
| 433 | 'post_parent', |
||
| 434 | ); |
||
| 435 | |||
| 436 | } |
||
| 437 | |||
| 438 | |||
| 439 | // set field parent |
||
| 440 | if( empty($field['parent']) ) { |
||
| 441 | |||
| 442 | $field['parent'] = $post_id; |
||
| 443 | |||
| 444 | } |
||
| 445 | |||
| 446 | |||
| 447 | // save field |
||
| 448 | acf_update_field( $field, $specific ); |
||
| 449 | |||
| 450 | } |
||
| 451 | |||
| 452 | } |
||
| 453 | |||
| 454 | |||
| 455 | // delete fields |
||
| 456 | if( $_POST['_acf_delete_fields'] ) { |
||
| 457 | |||
| 458 | $ids = explode('|', $_POST['_acf_delete_fields']); |
||
| 459 | $ids = array_map( 'intval', $ids ); |
||
| 460 | |||
| 461 | foreach( $ids as $id ) { |
||
| 462 | |||
| 463 | if( $id != 0 ) { |
||
| 464 | |||
| 465 | acf_delete_field( $id ); |
||
| 466 | |||
| 467 | } |
||
| 468 | |||
| 469 | } |
||
| 470 | |||
| 471 | } |
||
| 472 | |||
| 473 | |||
| 474 | // add args |
||
| 475 | $_POST['acf_field_group']['ID'] = $post_id; |
||
| 476 | $_POST['acf_field_group']['title'] = $_POST['post_title']; |
||
| 477 | |||
| 478 | |||
| 479 | // save field group |
||
| 480 | acf_update_field_group( $_POST['acf_field_group'] ); |
||
| 481 | |||
| 482 | |||
| 483 | // return |
||
| 484 | return $post_id; |
||
| 485 | } |
||
| 486 | |||
| 487 | |||
| 488 | /* |
||
| 489 | * mb_fields |
||
| 490 | * |
||
| 491 | * This function will render the HTML for the medtabox 'acf-field-group-fields' |
||
| 492 | * |
||
| 493 | * @type function |
||
| 494 | * @date 28/09/13 |
||
| 495 | * @since 5.0.0 |
||
| 496 | * |
||
| 497 | * @param N/A |
||
| 498 | * @return N/A |
||
| 499 | */ |
||
| 500 | |||
| 501 | function mb_fields() { |
||
| 502 | |||
| 503 | // global |
||
| 504 | global $field_group; |
||
| 505 | |||
| 506 | |||
| 507 | // get fields |
||
| 508 | $view = array( |
||
| 509 | 'fields' => acf_get_fields_by_id( $field_group['ID'] ) |
||
| 510 | ); |
||
| 511 | |||
| 512 | |||
| 513 | // load view |
||
| 514 | acf_get_view('field-group-fields', $view); |
||
| 515 | |||
| 516 | } |
||
| 517 | |||
| 518 | |||
| 519 | /* |
||
| 520 | * mb_options |
||
| 521 | * |
||
| 522 | * This function will render the HTML for the medtabox 'acf-field-group-options' |
||
| 523 | * |
||
| 524 | * @type function |
||
| 525 | * @date 28/09/13 |
||
| 526 | * @since 5.0.0 |
||
| 527 | * |
||
| 528 | * @param N/A |
||
| 529 | * @return N/A |
||
| 530 | */ |
||
| 531 | |||
| 532 | function mb_options() { |
||
| 533 | |||
| 534 | // global |
||
| 535 | global $field_group; |
||
| 536 | |||
| 537 | |||
| 538 | // field key (leave in for compatibility) |
||
| 539 | if( !acf_is_field_group_key( $field_group['key']) ) { |
||
| 540 | |||
| 541 | $field_group['key'] = uniqid('group_'); |
||
| 542 | |||
| 543 | } |
||
| 544 | |||
| 545 | |||
| 546 | // don't use view because we need access to $this context |
||
| 547 | include( acf_get_path('admin/views/field-group-options.php') ); |
||
| 548 | |||
| 549 | } |
||
| 550 | |||
| 551 | |||
| 552 | /* |
||
| 553 | * mb_locations |
||
| 554 | * |
||
| 555 | * This function will render the HTML for the medtabox 'acf-field-group-locations' |
||
| 556 | * |
||
| 557 | * @type function |
||
| 558 | * @date 28/09/13 |
||
| 559 | * @since 5.0.0 |
||
| 560 | * |
||
| 561 | * @param N/A |
||
| 562 | * @return N/A |
||
| 563 | */ |
||
| 564 | |||
| 565 | function mb_locations() { |
||
| 566 | |||
| 567 | // global |
||
| 568 | global $field_group; |
||
| 569 | |||
| 570 | |||
| 571 | // UI needs at lease 1 location rule |
||
| 572 | if( empty($field_group['location']) ) { |
||
| 573 | |||
| 574 | $field_group['location'] = array( |
||
| 575 | |||
| 576 | // group 0 |
||
| 577 | array( |
||
| 578 | |||
| 579 | // rule 0 |
||
| 580 | array( |
||
| 581 | 'param' => 'post_type', |
||
| 582 | 'operator' => '==', |
||
| 583 | 'value' => 'post', |
||
| 584 | ) |
||
| 585 | ) |
||
| 586 | |||
| 587 | ); |
||
| 588 | } |
||
| 589 | |||
| 590 | |||
| 591 | // don't use view because we need access to $this context |
||
| 592 | include( acf_get_path('admin/views/field-group-locations.php') ); |
||
| 593 | |||
| 594 | } |
||
| 595 | |||
| 596 | |||
| 597 | /* |
||
| 598 | * render_location_value |
||
| 599 | * |
||
| 600 | * This function will render out an input containing location rule values for the given args |
||
| 601 | * |
||
| 602 | * @type function |
||
| 603 | * @date 30/09/13 |
||
| 604 | * @since 5.0.0 |
||
| 605 | * |
||
| 606 | * @param $options (array) |
||
| 607 | * @return N/A |
||
| 608 | */ |
||
| 609 | |||
| 610 | function render_location_value( $options ) { |
||
| 611 | |||
| 612 | // vars |
||
| 613 | $options = wp_parse_args( $options, array( |
||
| 614 | 'group_id' => 0, |
||
| 615 | 'rule_id' => 0, |
||
| 616 | 'value' => null, |
||
| 617 | 'param' => null, |
||
| 618 | )); |
||
| 619 | |||
| 620 | |||
| 621 | // vars |
||
| 622 | $choices = array(); |
||
| 623 | |||
| 624 | |||
| 625 | // some case's have the same outcome |
||
| 626 | if( $options['param'] == "page_parent" ) { |
||
| 627 | |||
| 628 | $options['param'] = "page"; |
||
| 629 | |||
| 630 | } |
||
| 631 | |||
| 632 | |||
| 633 | switch( $options['param'] ) { |
||
| 634 | |||
| 635 | |||
| 636 | /* |
||
| 637 | * Post |
||
| 638 | */ |
||
| 639 | |||
| 640 | case "post_type" : |
||
|
0 ignored issues
–
show
|
|||
| 641 | |||
| 642 | // all post types except attachment |
||
| 643 | $exclude = array('attachment'); |
||
| 644 | $choices = acf_get_post_types( $exclude ); |
||
| 645 | $choices = acf_get_pretty_post_types( $choices ); |
||
| 646 | |||
| 647 | break; |
||
| 648 | |||
| 649 | |||
| 650 | case "post" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 651 | |||
| 652 | // get post types |
||
| 653 | $exclude = array('page', 'attachment'); |
||
| 654 | $post_types = acf_get_post_types( $exclude ); |
||
| 655 | |||
| 656 | |||
| 657 | // get posts grouped by post type |
||
| 658 | $groups = acf_get_grouped_posts(array( |
||
| 659 | 'post_type' => $post_types |
||
| 660 | )); |
||
| 661 | |||
| 662 | |||
| 663 | View Code Duplication | if( !empty($groups) ) { |
|
| 664 | |||
| 665 | foreach( array_keys($groups) as $group_title ) { |
||
| 666 | |||
| 667 | // vars |
||
| 668 | $posts = acf_extract_var( $groups, $group_title ); |
||
| 669 | |||
| 670 | |||
| 671 | // override post data |
||
| 672 | foreach( array_keys($posts) as $post_id ) { |
||
| 673 | |||
| 674 | // update |
||
| 675 | $posts[ $post_id ] = acf_get_post_title( $posts[ $post_id ] ); |
||
| 676 | |||
| 677 | }; |
||
| 678 | |||
| 679 | |||
| 680 | // append to $choices |
||
| 681 | $choices[ $group_title ] = $posts; |
||
| 682 | |||
| 683 | } |
||
| 684 | |||
| 685 | } |
||
| 686 | |||
| 687 | break; |
||
| 688 | |||
| 689 | |||
| 690 | case "post_category" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 691 | |||
| 692 | $terms = acf_get_taxonomy_terms( 'category' ); |
||
| 693 | |||
| 694 | if( !empty($terms) ) { |
||
| 695 | |||
| 696 | $choices = array_pop($terms); |
||
| 697 | |||
| 698 | } |
||
| 699 | |||
| 700 | break; |
||
| 701 | |||
| 702 | |||
| 703 | case "post_format" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 704 | |||
| 705 | $choices = get_post_format_strings(); |
||
| 706 | |||
| 707 | break; |
||
| 708 | |||
| 709 | |||
| 710 | case "post_status" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 711 | |||
| 712 | global $wp_post_statuses; |
||
| 713 | |||
| 714 | if( !empty($wp_post_statuses) ) { |
||
| 715 | |||
| 716 | foreach( $wp_post_statuses as $status ) { |
||
| 717 | |||
| 718 | $choices[ $status->name ] = $status->label; |
||
| 719 | |||
| 720 | } |
||
| 721 | |||
| 722 | } |
||
| 723 | |||
| 724 | break; |
||
| 725 | |||
| 726 | |||
| 727 | case "post_taxonomy" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 728 | |||
| 729 | $choices = acf_get_taxonomy_terms(); |
||
| 730 | |||
| 731 | // unset post_format |
||
| 732 | if( isset($choices['post_format']) ) { |
||
| 733 | |||
| 734 | unset( $choices['post_format']) ; |
||
| 735 | |||
| 736 | } |
||
| 737 | |||
| 738 | break; |
||
| 739 | |||
| 740 | |||
| 741 | /* |
||
| 742 | * Page |
||
| 743 | */ |
||
| 744 | |||
| 745 | case "page" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 746 | |||
| 747 | |||
| 748 | // get posts grouped by post type |
||
| 749 | $groups = acf_get_grouped_posts(array( |
||
| 750 | 'post_type' => 'page' |
||
| 751 | )); |
||
| 752 | |||
| 753 | |||
| 754 | View Code Duplication | if( !empty($groups) ) { |
|
| 755 | |||
| 756 | foreach( array_keys($groups) as $group_title ) { |
||
| 757 | |||
| 758 | // vars |
||
| 759 | $posts = acf_extract_var( $groups, $group_title ); |
||
| 760 | |||
| 761 | |||
| 762 | // override post data |
||
| 763 | foreach( array_keys($posts) as $post_id ) { |
||
| 764 | |||
| 765 | // update |
||
| 766 | $posts[ $post_id ] = acf_get_post_title( $posts[ $post_id ] ); |
||
| 767 | |||
| 768 | }; |
||
| 769 | |||
| 770 | |||
| 771 | // append to $choices |
||
| 772 | $choices = $posts; |
||
| 773 | |||
| 774 | } |
||
| 775 | |||
| 776 | } |
||
| 777 | |||
| 778 | |||
| 779 | break; |
||
| 780 | |||
| 781 | |||
| 782 | case "page_type" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 783 | |||
| 784 | $choices = array( |
||
| 785 | 'front_page' => __("Front Page",'acf'), |
||
| 786 | 'posts_page' => __("Posts Page",'acf'), |
||
| 787 | 'top_level' => __("Top Level Page (no parent)",'acf'), |
||
| 788 | 'parent' => __("Parent Page (has children)",'acf'), |
||
| 789 | 'child' => __("Child Page (has parent)",'acf'), |
||
| 790 | ); |
||
| 791 | |||
| 792 | break; |
||
| 793 | |||
| 794 | |||
| 795 | case "page_parent" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 796 | |||
| 797 | // refer to "page" |
||
| 798 | |||
| 799 | break; |
||
| 800 | |||
| 801 | |||
| 802 | case "page_template" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 803 | |||
| 804 | $choices = array( |
||
| 805 | 'default' => __("Default Template",'acf'), |
||
| 806 | ); |
||
| 807 | |||
| 808 | $templates = get_page_templates(); |
||
| 809 | |||
| 810 | foreach( $templates as $k => $v ) { |
||
| 811 | |||
| 812 | $choices[ $v ] = $k; |
||
| 813 | |||
| 814 | } |
||
| 815 | |||
| 816 | break; |
||
| 817 | |||
| 818 | |||
| 819 | /* |
||
| 820 | * User |
||
| 821 | */ |
||
| 822 | |||
| 823 | case "current_user" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 824 | |||
| 825 | // viewing |
||
| 826 | $choices = array( |
||
| 827 | 'logged_in' => __('Logged in', 'acf'), |
||
| 828 | 'viewing_front' => __('Viewing front end', 'acf'), |
||
| 829 | 'viewing_back' => __('Viewing back end', 'acf') |
||
| 830 | ); |
||
| 831 | |||
| 832 | break; |
||
| 833 | |||
| 834 | case "current_user_role" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 835 | |||
| 836 | // global |
||
| 837 | global $wp_roles; |
||
| 838 | |||
| 839 | |||
| 840 | // specific roles |
||
| 841 | $choices = $wp_roles->get_names(); |
||
| 842 | |||
| 843 | |||
| 844 | // multi-site |
||
| 845 | if( is_multisite() ) { |
||
| 846 | |||
| 847 | $choices = array_merge(array( |
||
| 848 | 'super_admin' => __('Super Admin', 'acf') |
||
| 849 | ), $choices); |
||
| 850 | |||
| 851 | } |
||
| 852 | |||
| 853 | break; |
||
| 854 | |||
| 855 | case "user_role" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 856 | |||
| 857 | global $wp_roles; |
||
| 858 | |||
| 859 | $choices = array_merge( array('all' => __('All', 'acf')), $wp_roles->get_names() ); |
||
| 860 | |||
| 861 | break; |
||
| 862 | |||
| 863 | |||
| 864 | case "user_form" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 865 | |||
| 866 | $choices = array( |
||
| 867 | 'all' => __('All', 'acf'), |
||
| 868 | 'edit' => __('Add / Edit', 'acf'), |
||
| 869 | 'register' => __('Register', 'acf') |
||
| 870 | ); |
||
| 871 | |||
| 872 | break; |
||
| 873 | |||
| 874 | |||
| 875 | /* |
||
| 876 | * Forms |
||
| 877 | */ |
||
| 878 | |||
| 879 | case "attachment" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 880 | |||
| 881 | $choices = array('all' => __('All', 'acf')); |
||
| 882 | |||
| 883 | break; |
||
| 884 | |||
| 885 | |||
| 886 | case "taxonomy" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 887 | |||
| 888 | $choices = array_merge( array('all' => __('All', 'acf')), acf_get_taxonomies() ); |
||
| 889 | |||
| 890 | |||
| 891 | // unset post_format |
||
| 892 | if( isset($choices['post_format']) ) { |
||
| 893 | |||
| 894 | unset( $choices['post_format']); |
||
| 895 | |||
| 896 | } |
||
| 897 | |||
| 898 | break; |
||
| 899 | |||
| 900 | |||
| 901 | case "comment" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 902 | |||
| 903 | $choices = array('all' => __('All', 'acf')); |
||
| 904 | |||
| 905 | break; |
||
| 906 | |||
| 907 | |||
| 908 | case "widget" : |
||
|
0 ignored issues
–
show
The case body in a switch statement must start on the line following the statement.
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement. switch ($expr) {
case "A":
doSomething(); //right
break;
case "B":
doSomethingElse(); //wrong
break;
} To learn more about the PSR-2 coding standard, please refer to the PHP-Fig. Loading history...
|
|||
| 909 | |||
| 910 | global $wp_widget_factory; |
||
| 911 | |||
| 912 | $choices = array( |
||
| 913 | 'all' => __('All', 'acf'), |
||
| 914 | ); |
||
| 915 | |||
| 916 | |||
| 917 | if( !empty( $wp_widget_factory->widgets ) ) { |
||
| 918 | |||
| 919 | foreach( $wp_widget_factory->widgets as $widget ) { |
||
| 920 | |||
| 921 | $choices[ $widget->id_base ] = $widget->name; |
||
| 922 | |||
| 923 | } |
||
| 924 | |||
| 925 | } |
||
| 926 | |||
| 927 | break; |
||
| 928 | } |
||
| 929 | |||
| 930 | |||
| 931 | // allow custom location rules |
||
| 932 | $choices = apply_filters( 'acf/location/rule_values/' . $options['param'], $choices ); |
||
| 933 | |||
| 934 | |||
| 935 | // create field |
||
| 936 | acf_render_field(array( |
||
| 937 | 'type' => 'select', |
||
| 938 | 'prefix' => "acf_field_group[location][{$options['group_id']}][{$options['rule_id']}]", |
||
| 939 | 'name' => 'value', |
||
| 940 | 'value' => $options['value'], |
||
| 941 | 'choices' => $choices, |
||
| 942 | )); |
||
| 943 | |||
| 944 | } |
||
| 945 | |||
| 946 | |||
| 947 | /* |
||
| 948 | * ajax_render_location_value |
||
| 949 | * |
||
| 950 | * This function can be accessed via an AJAX action and will return the result from the render_location_value function |
||
| 951 | * |
||
| 952 | * @type function (ajax) |
||
| 953 | * @date 30/09/13 |
||
| 954 | * @since 5.0.0 |
||
| 955 | * |
||
| 956 | * @param n/a |
||
| 957 | * @return n/a |
||
| 958 | */ |
||
| 959 | |||
| 960 | function ajax_render_location_value() { |
||
| 961 | |||
| 962 | // validate |
||
| 963 | if( !acf_verify_ajax() ) { |
||
| 964 | |||
| 965 | die(); |
||
| 966 | |||
| 967 | } |
||
| 968 | |||
| 969 | |||
| 970 | // call function |
||
| 971 | $this->render_location_value( $_POST ); |
||
| 972 | |||
| 973 | |||
| 974 | // die |
||
| 975 | die(); |
||
| 976 | |||
| 977 | } |
||
| 978 | |||
| 979 | |||
| 980 | /* |
||
| 981 | * ajax_render_field_settings |
||
| 982 | * |
||
| 983 | * This function will return HTML containing the field's settings based on it's new type |
||
| 984 | * |
||
| 985 | * @type function (ajax) |
||
| 986 | * @date 30/09/13 |
||
| 987 | * @since 5.0.0 |
||
| 988 | * |
||
| 989 | * @param n/a |
||
| 990 | * @return n/a |
||
| 991 | */ |
||
| 992 | |||
| 993 | function ajax_render_field_settings() { |
||
| 994 | |||
| 995 | // vars |
||
| 996 | $options = array( |
||
| 997 | 'nonce' => '', |
||
| 998 | 'parent' => 0, |
||
| 999 | 'field_group' => 0, |
||
| 1000 | 'prefix' => '', |
||
| 1001 | 'type' => '', |
||
| 1002 | ); |
||
| 1003 | |||
| 1004 | |||
| 1005 | // load post options |
||
| 1006 | $options = wp_parse_args($_POST, $options); |
||
| 1007 | |||
| 1008 | |||
| 1009 | // verify nonce |
||
| 1010 | if( !wp_verify_nonce($options['nonce'], 'acf_nonce') ) { |
||
| 1011 | |||
| 1012 | die(0); |
||
| 1013 | |||
| 1014 | } |
||
| 1015 | |||
| 1016 | |||
| 1017 | // required |
||
| 1018 | if( !$options['type'] ) { |
||
| 1019 | |||
| 1020 | die(0); |
||
| 1021 | |||
| 1022 | } |
||
| 1023 | |||
| 1024 | |||
| 1025 | // render options |
||
| 1026 | $field = acf_get_valid_field(array( |
||
| 1027 | 'type' => $options['type'], |
||
| 1028 | 'name' => 'temp', |
||
| 1029 | 'prefix' => $options['prefix'], |
||
| 1030 | 'parent' => $options['parent'], |
||
| 1031 | 'field_group' => $options['field_group'], |
||
| 1032 | )); |
||
| 1033 | |||
| 1034 | |||
| 1035 | // render |
||
| 1036 | do_action("acf/render_field_settings/type={$field['type']}", $field); |
||
| 1037 | |||
| 1038 | |||
| 1039 | // die |
||
| 1040 | die(); |
||
| 1041 | |||
| 1042 | } |
||
| 1043 | |||
| 1044 | /* |
||
| 1045 | * ajax_move_field |
||
| 1046 | * |
||
| 1047 | * description |
||
| 1048 | * |
||
| 1049 | * @type function |
||
| 1050 | * @date 20/01/2014 |
||
| 1051 | * @since 5.0.0 |
||
| 1052 | * |
||
| 1053 | * @param $post_id (int) |
||
| 1054 | * @return $post_id (int) |
||
| 1055 | */ |
||
| 1056 | |||
| 1057 | function ajax_move_field() { |
||
| 1058 | |||
| 1059 | // disable JSON to avoid conflicts between DB and JSON |
||
| 1060 | acf_disable_local(); |
||
| 1061 | |||
| 1062 | |||
| 1063 | $args = acf_parse_args($_POST, array( |
||
| 1064 | 'nonce' => '', |
||
| 1065 | 'field_id' => 0, |
||
| 1066 | 'field_group_id' => 0 |
||
| 1067 | )); |
||
| 1068 | |||
| 1069 | |||
| 1070 | // verify nonce |
||
| 1071 | if( ! wp_verify_nonce($args['nonce'], 'acf_nonce') ) { |
||
| 1072 | |||
| 1073 | die(); |
||
| 1074 | |||
| 1075 | } |
||
| 1076 | |||
| 1077 | |||
| 1078 | // confirm? |
||
| 1079 | if( $args['field_id'] && $args['field_group_id'] ) { |
||
| 1080 | |||
| 1081 | // vars |
||
| 1082 | $field = acf_get_field($args['field_id']); |
||
| 1083 | $field_group = acf_get_field_group($args['field_group_id']); |
||
| 1084 | |||
| 1085 | |||
| 1086 | // update parent |
||
| 1087 | $field['parent'] = $field_group['ID']; |
||
| 1088 | |||
| 1089 | |||
| 1090 | // remove conditional logic |
||
| 1091 | $field['conditional_logic'] = 0; |
||
| 1092 | |||
| 1093 | |||
| 1094 | // update field |
||
| 1095 | acf_update_field($field); |
||
| 1096 | |||
| 1097 | $v1 = $field['label']; |
||
| 1098 | $v2 = '<a href="' . admin_url("post.php?post={$field_group['ID']}&action=edit") . '" target="_blank">' . $field_group['title'] . '</a>'; |
||
| 1099 | |||
| 1100 | echo '<p><strong>' . __('Move Complete.', 'acf') . '</strong></p>'; |
||
| 1101 | echo '<p>' . sprintf( __('The %s field can now be found in the %s field group', 'acf'), $v1, $v2 ). '</p>'; |
||
| 1102 | |||
| 1103 | echo '<a href="#" class="acf-button blue acf-close-popup">' . __("Close Window",'acf') . '</a>'; |
||
| 1104 | |||
| 1105 | die(); |
||
| 1106 | |||
| 1107 | } |
||
| 1108 | |||
| 1109 | |||
| 1110 | // get all field groups |
||
| 1111 | $field_groups = acf_get_field_groups(); |
||
| 1112 | $choices = array(); |
||
| 1113 | |||
| 1114 | |||
| 1115 | if( !empty($field_groups) ) { |
||
| 1116 | |||
| 1117 | foreach( $field_groups as $field_group ) { |
||
| 1118 | |||
| 1119 | if( $field_group['ID'] ) { |
||
| 1120 | |||
| 1121 | $choices[ $field_group['ID'] ] = $field_group['title']; |
||
| 1122 | |||
| 1123 | } |
||
| 1124 | |||
| 1125 | } |
||
| 1126 | |||
| 1127 | } |
||
| 1128 | |||
| 1129 | |||
| 1130 | // render options |
||
| 1131 | $field = acf_get_valid_field(array( |
||
| 1132 | 'type' => 'select', |
||
| 1133 | 'name' => 'acf_field_group', |
||
| 1134 | 'choices' => $choices |
||
| 1135 | )); |
||
| 1136 | |||
| 1137 | |||
| 1138 | echo '<p>' . __('Please select the destination for this field', 'acf') . '</p>'; |
||
| 1139 | |||
| 1140 | echo '<form id="acf-move-field-form">'; |
||
| 1141 | |||
| 1142 | // render |
||
| 1143 | acf_render_field_wrap( $field ); |
||
| 1144 | |||
| 1145 | echo '<button type="submit" class="acf-button blue">' . __("Move Field",'acf') . '</button>'; |
||
| 1146 | |||
| 1147 | echo '</form>'; |
||
| 1148 | |||
| 1149 | |||
| 1150 | // die |
||
| 1151 | die(); |
||
| 1152 | |||
| 1153 | } |
||
| 1154 | |||
| 1155 | } |
||
| 1156 | |||
| 1157 | // initialize |
||
| 1158 | new acf_admin_field_group(); |
||
| 1159 | |||
| 1160 | endif; |
||
| 1161 | |||
| 1162 | ?> |
||
| 1163 |
According to the PSR-2, the body of a case statement must start on the line immediately following the case statement.
}
To learn more about the PSR-2 coding standard, please refer to the PHP-Fig.