Making WordPress.org


Ignore:
Timestamp:
01/28/2016 06:53:46 PM (11 years ago)
Author:
iandunn
Message:

WordCamp Post Type: Inform users which fields are required.

The required attribute wasn't added to the input fields, since the browser would have to know which status the post is moving towards, and there's already server-side validation for that.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordcamp.org/public_html/wp-content/plugins/wcpt/wcpt-wordcamp/wordcamp-admin.php

    r2152 r2401  
    627627                $min_site_id = apply_filters( 'wcpt_require_complete_meta_min_site_id', '2416297' );
    628628
    629                 $required_pending_fields = array( 'E-mail Address' );
    630 
    631                 $required_publish_fields = array(
     629                $required_pending_fields = $this->get_required_fields( 'pending' );
     630                $required_publish_fields = $this->get_required_fields( 'publish' );
     631
     632                // Check pending posts
     633                if ( 'pending' == $post_data['post_status'] && absint( $_POST['post_ID'] ) > $min_site_id ) {
     634                        foreach( $required_pending_fields as $field ) {
     635                                $value = $_POST[ wcpt_key_to_str( $field, 'wcpt_' ) ];
     636
     637                                if ( empty( $value ) || 'null' == $value ) {
     638                                        $post_data['post_status']     = 'draft';
     639                                        $this->active_admin_notices[] = 3;
     640                                        break;
     641                                }
     642                        }
     643                }
     644
     645                // Check published posts
     646                if ( 'publish' == $post_data['post_status'] && isset( $_POST['post_ID'] ) && absint( $_POST['post_ID'] ) > $min_site_id ) {
     647                        foreach( $required_publish_fields as $field ) {
     648                                $value = $_POST[ wcpt_key_to_str( $field, 'wcpt_' ) ];
     649
     650                                if ( empty( $value ) || 'null' == $value ) {
     651                                        $post_data['post_status']     = 'pending';
     652                                        $this->active_admin_notices[] = 1;
     653                                        break;
     654                                }
     655                        }
     656                }
     657
     658                return $post_data;
     659        }
     660
     661        /**
     662         * Get a list of fields required to move to a certain post status
     663         *
     664         * @param string $status 'pending' | 'publish' | 'any'
     665         *
     666         * @return array
     667         */
     668        public static function get_required_fields( $status ) {
     669                $pending = array( 'E-mail Address' );
     670
     671                $publish = array(
    632672                        // WordCamp
    633673                        'Start Date (YYYY-mm-dd)',
     
    650690                );
    651691
    652                 // Check pending posts
    653                 if ( 'pending' == $post_data['post_status'] && absint( $_POST['post_ID'] ) > $min_site_id ) {
    654                         foreach( $required_pending_fields as $field ) {
    655                                 $value = $_POST[ wcpt_key_to_str( $field, 'wcpt_' ) ];
    656 
    657                                 if ( empty( $value ) || 'null' == $value ) {
    658                                         $post_data['post_status']     = 'draft';
    659                                         $this->active_admin_notices[] = 3;
    660                                         break;
    661                                 }
    662                         }
    663                 }
    664 
    665                 // Check published posts
    666                 if ( 'publish' == $post_data['post_status'] && isset( $_POST['post_ID'] ) && absint( $_POST['post_ID'] ) > $min_site_id ) {
    667                         foreach( $required_publish_fields as $field ) {
    668                                 $value = $_POST[ wcpt_key_to_str( $field, 'wcpt_' ) ];
    669 
    670                                 if ( empty( $value ) || 'null' == $value ) {
    671                                         $post_data['post_status']     = 'pending';
    672                                         $this->active_admin_notices[] = 1;
    673                                         break;
    674                                 }
    675                         }
    676                 }
    677 
    678                 return $post_data;
     692                switch ( $status ) {
     693                        case 'pending':
     694                                $required_fields = $pending;
     695                                break;
     696
     697                        case 'publish':
     698                                $required_fields = $publish;
     699                                break;
     700
     701                        case 'any':
     702                        default:
     703                                $required_fields = array_merge( $pending, $publish );
     704                                break;
     705                }
     706
     707                return $required_fields;
    679708        }
    680709
     
    791820        global $post_id;
    792821
     822        $required_fields = WordCamp_Admin::get_required_fields( 'any' );
     823
    793824        // @todo When you refactor meta_keys() to support changing labels -- see note in meta_keys() -- also make it support these notes
    794825        $messages = array(
     
    799830        foreach ( $meta_keys as $key => $value ) :
    800831                $object_name = wcpt_key_to_str( $key, 'wcpt_' );
    801 
    802832        ?>
    803833
     
    814844                                <p>
    815845                                        <strong><?php echo $key; ?></strong>
     846                                        <?php if ( in_array( $key, $required_fields, true ) ) : ?>
     847                                                <span class="description"><?php _e( '(required)', 'wordcamporg' ); ?></span>
     848                                        <?php endif; ?>
    816849                                </p>
    817850
Note: See TracChangeset for help on using the changeset viewer.