Changeset 654
- Timestamp:
- 06/03/2014 12:56:53 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordcamp.org/public_html/wp-content/plugins/wcpt/wcpt-wordcamp/wordcamp-admin.php
r652 r654 12 12 */ 13 13 class WordCamp_Admin { 14 protected $active_admin_notices; 14 15 15 16 /** … … 19 20 */ 20 21 function WordCamp_Admin () { 22 $this->active_admin_notices = array(); 21 23 22 24 // Add some general styling to the admin area … … 33 35 add_action( 'admin_menu', array( $this, 'metabox' ) ); 34 36 add_action( 'save_post', array( $this, 'metabox_save' ) ); 35 37 36 38 // Scripts and CSS 37 39 add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) ); … … 42 44 add_action( 'transition_post_status', array( $this, 'add_organizer_to_central' ), 10, 3 ); 43 45 add_action( 'transition_post_status', array( $this, 'notify_mes_sponsors_when_wordcamp_scheduled' ), 10, 3 ); 46 add_action( 'wp_insert_post_data', array( $this, 'require_complete_meta_to_publish_wordcamp' ), 10, 2 ); 47 48 // Admin notices 49 add_action( 'admin_notices', array( $this, 'print_admin_notices' ) ); 50 add_filter( 'redirect_post_location', array( $this, 'add_admin_notices_to_redirect_url' ), 10, 2 ); 44 51 } 45 52 … … 546 553 } 547 554 } 555 556 /** 557 * Prevent WordCamp posts from being published until all the required fields are completed. 558 * 559 * @param array $post_data 560 * @param array $post_data_raw 561 * @return array 562 */ 563 public function require_complete_meta_to_publish_wordcamp( $post_data, $post_data_raw ) { 564 // The ID of the last site that was created before this rule went into effect, so that we don't apply the rule retroactively. 565 $min_site_id = apply_filters( 'wcpt_require_complete_meta_min_site_id', '2416297' ); 566 567 $required_fields = array( 568 // WordCamp 569 'Start Date (YYYY-mm-dd)', 570 'Location', 571 'URL', 572 'E-mail Address', 573 'Twitter', 574 'WordCamp Hashtag', 575 'Number of Anticipated Attendees', 576 'Multi-Event Sponsor Region', 577 578 // Organizing Team 579 'Organizer Name', 580 'WordPress.org Username', 581 'Email Address', 582 'Mailing Address', 583 'Sponsor Wrangler Name', 584 'Sponsor Wrangler E-mail Address', 585 'Budget Wrangler Name', 586 'Budget Wrangler E-mail Address', 587 588 // Venue 589 'Venue Name', 590 'Physical Address', 591 'Website URL', 592 ); 593 594 if ( WCPT_POST_TYPE_ID == $post_data['post_type'] && 'publish' == $post_data['post_status'] && absint( $_POST['post_ID'] ) > $min_site_id ) { 595 foreach( $required_fields as $field ) { 596 if ( empty( $_POST[ wcpt_key_to_str( $field, 'wcpt_' ) ] ) ) { 597 $post_data['post_status'] = 'pending'; 598 $this->active_admin_notices[] = 1; 599 break; 600 } 601 } 602 } 603 604 return $post_data; 605 } 606 607 /** 608 * Add our custom admin notice keys to the redirect URL. 609 * 610 * Any member can add a key to $this->active_admin_notices to signify that the corresponding message should 611 * be shown when the redirect finished. When it does, print_admin_notices() will examine the URL and create 612 * a notice with the message that corresponds to the key. 613 * 614 * @param $location 615 * @param $post_id 616 * @return string 617 */ 618 public function add_admin_notices_to_redirect_url( $location, $post_id ) { 619 if ( $this->active_admin_notices ) { 620 $location = add_query_arg( 'wcpt_messages', implode( ',', $this->active_admin_notices ), $location ); 621 } 622 623 // Don't show conflicting messages like 'Post submitted.' 624 if ( in_array( 1, $this->active_admin_notices ) && false !== strpos( $location, 'message=8' ) ) { 625 $location = remove_query_arg( 'message', $location ); 626 } 627 628 return $location; 629 } 630 631 /** 632 * Create admin notices for messages that were passed in the URL. 633 * 634 * Any member can add a key to $this->active_admin_notices to signify that the corresponding message should 635 * be shown when the redirect finished. add_admin_notices_to_redirect_url() adds those keys to the redirect 636 * url, and this function examines the URL and create a notice with the message that corresponds to the key. 637 * 638 * $notices[key]['type'] should equal 'error' or 'updated'. 639 */ 640 public function print_admin_notices() { 641 global $post; 642 643 if ( empty( $post->post_type ) || WCPT_POST_TYPE_ID != $post->post_type ) { 644 return; 645 } 646 647 $notices = array( 648 1 => array( 649 'type' => 'error', 650 'notice' => __( 'This WordCamp cannot be published until all of its required metadata is filled in.', 'wordcamporg' ), 651 ), 652 ); 653 654 if ( ! empty( $_REQUEST['wcpt_messages'] ) ) { 655 $active_notices = explode( ',', $_REQUEST['wcpt_messages'] ); 656 657 foreach ( $active_notices as $notice_key ) { 658 if ( isset( $notices[ $notice_key ] ) ) { 659 ?> 660 661 <div class="<?php echo esc_attr( $notices[ $notice_key ]['type'] ); ?>"> 662 <p><?php echo wp_kses( $notices[ $notice_key ]['notice'], wp_kses_allowed_html( 'post' ) ); ?></p> 663 </div> 664 665 <?php 666 } 667 } 668 } 669 } 548 670 } 549 671 endif; // class_exists check
Note: See TracChangeset
for help on using the changeset viewer.