Making WordPress.org

Changeset 968

Timestamp:
11/07/2014 07:27:05 PM (10 years ago)
Author:
iandunn
Message:

WordCamp Post Types: Add a datepicker and time dropdowns for Sessions.

This is a much better UX than asking users to type out Y-m-d H:i:s.

Fixes #205
props nvwd

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordcamp.org/public_html/wp-content/plugins/wc-post-types/wc-post-types.php

    r935 r968  
    2121        add_action( 'admin_print_styles', array( $this, 'admin_css' ) );
    2222        add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
     23
    2324        add_action( 'wp_enqueue_scripts', array( $this, 'wp_enqueue_scripts' ) );
    2425
     
    194195
    195196    function admin_enqueue_scripts() {
     197
    196198        wp_enqueue_style( 'campicons', plugins_url( 'fonts/campicons.css', __FILE__ ), array(), 1 );
    197     }
    198    
     199
     200        // Enqueues scripts and styles for session admin page
     201        if ( 'wcb_session' == $post_type ) {
     202            wp_enqueue_script( 'jquery-ui-datepicker' );
     203            wp_enqueue_style( 'jquery-ui' );
     204            wp_enqueue_style( 'wp-datepicker-skins' );
     205        }
     206    }
     207
     208    /*
     209     * Print our JavaScript
     210     */
     211    function admin_print_scripts() {
     212        global $post_type;
     213
     214        // DatePicker for Session posts
     215        if ( 'wcb_session' == $post_type ) :
     216            ?>
     217
     218            <script type="text/javascript">
     219                jQuery( document ).ready( function( $ ) {
     220                    $( '#wcpt-session-date' ).datepicker( {
     221                        dateFormat:  'yy-mm-dd',
     222                        changeMonth: true,
     223                        changeYear:  true
     224                    } );
     225                } );
     226            </script>
     227
     228            <?php
     229        endif;
     230    }
     231
    199232    function wp_enqueue_scripts() {
    200233        wp_enqueue_style( 'wcb_shortcodes', plugins_url( 'css/shortcodes.css', __FILE__ ), array(), 2 );
     
    10171050                <?php while ( $sponsors->have_posts() ) : $sponsors->the_post(); ?>
    10181051                <?php $website = get_post_meta( get_the_ID(), '_wcpt_sponsor_website', true ); ?>
    1019                    
     1052
    10201053                <div id="wcorg-sponsor-<?php the_ID(); ?>" class="wcorg-sponsor">
    10211054                    <?php if ( 'website' == $attr['link'] && $website ) : ?>
     
    10241057                        <h3><?php the_title(); ?></h3>
    10251058                    <?php endif; ?>
    1026                    
     1059
    10271060                    <div class="wcorg-sponsor-description">
    10281061                        <?php if ( 'website' == $attr['link'] && $website ) : ?>
     
    10311064                            <?php the_post_thumbnail(); ?>
    10321065                        <?php endif; ?>
    1033                        
     1066
    10341067                        <?php the_content(); ?>
    10351068                    </div>
     
    13301363        $post = get_post();
    13311364        $session_time = absint( get_post_meta( $post->ID, '_wcpt_session_time', true ) );
    1332         $session_time = ( $session_time ) ? date( 'Y-m-d H:i:s', $session_time ) : '';
     1365        $session_date     = ( $session_time ) ? date( 'Y-m-d', $session_time ) : date( 'Y-m-d' );
     1366        $session_hours    = ( $session_time ) ? date( 'g', $session_time )     : date( 'g' );
     1367        $session_minutes  = ( $session_time ) ? date( 'i', $session_time )     : '00';
     1368        $session_meridiem = ( $session_time ) ? date( 'a', $session_time )     : 'am';
    13331369        $session_type = get_post_meta( $post->ID, '_wcpt_session_type', true );
    13341370        ?>
    13351371        <?php wp_nonce_field( 'edit-session-info', 'wcpt-meta-session-info' ); ?>
    13361372        <p>
    1337             <label for="wcpt-session-time"><?php _e( 'When:', 'wordcamporg' ); ?></label>
    1338             <input type="text" class="widefat" id="wcpt-session-time" name="wcpt-session-time" value="<?php echo esc_attr( $session_time ); ?>" />
    1339             <span style="display: block; margin-top: 4px;" class="description">For example: <?php echo date( 'Y-m-d H:i:s' ); ?></span>
     1373            <label for="wcpt-session-date"><?php _e( 'Date:', 'wordcamporg' ); ?></label>
     1374            <input type="text" id="wcpt-session-date" data-date="<?php echo esc_attr( $session_date ); ?>" name="wcpt-session-date" value="<?php echo esc_attr( $session_date ); ?>" /><br />
     1375            <label><?php _e( 'Time:', 'wordcamporg' ); ?></label>
     1376
     1377            <select name="wcpt-session-hour" aria-label="<?php _e( 'Session Start Hour', 'wordcamporg' ); ?>">
     1378                <?php for ( $i = 1; $i <= 12; $i++ ) : ?>
     1379                    <option value="<?php echo esc_attr( $i ); ?>" <?php selected( $i, $session_hours ) ?>>
     1380                        <?php echo esc_html( $i ); ?>
     1381                    </option>
     1382                <?php endfor; ?>
     1383            </select> :
     1384
     1385            <select name="wcpt-session-minutes" aria-label="<?php _e( 'Session Start Minutes', 'wordcamporg' ); ?>">
     1386                <?php for ( $i = '00'; (int) $i <= 55; $i = sprintf( '%02d', (int) $i + 5 ) ) : ?>
     1387                    <option value="<?php echo esc_attr( $i ); ?>" <?php selected( $i, $session_minutes ) ?>>
     1388                        <?php echo esc_html( $i ); ?>
     1389                    </option>
     1390                <?php endfor; ?>
     1391            </select>
     1392
     1393            <select name="wcpt-session-meridiem" aria-label="<?php _e( 'Session Meridiem', 'wordcamporg' ); ?>">
     1394                <option value="am" <?php selected( 'am', $session_meridiem ) ?>>am</option>
     1395                <option value="pm" <?php selected( 'pm', $session_meridiem ) ?>>pm</option>
     1396            </select>
    13401397        </p>
     1398
    13411399        <p>
    13421400            <label for="wcpt-session-type"><?php _e( 'Type:', 'wordcamporg' ); ?></label>
     
    13551413        $website = get_post_meta( $sponsor->ID, '_wcpt_sponsor_website', true );
    13561414        wp_nonce_field( 'edit-sponsor-info', 'wcpt-meta-sponsor-info' );
    1357        
     1415
    13581416        ?>
    1359        
     1417
    13601418        <p>
    13611419            <label for="_wcpt_sponsor_website"><?php _e( 'Website:', 'wordcampbase' ); ?></label>
    13621420            <input type="text" class="widefat" id="_wcpt_sponsor_website" name="_wcpt_sponsor_website" value="<?php echo esc_attr( esc_url( $website ) ); ?>" />
    13631421        </p>
    1364        
     1422
    13651423        <?php
    13661424    }
     
    14391497        // Update session time.
    14401498        if ( isset( $_POST['wcpt-meta-session-info'] ) && wp_verify_nonce( $_POST['wcpt-meta-session-info'], 'edit-session-info' ) ) {
    1441             $session_time = sanitize_text_field( $_POST['wcpt-session-time'] );
    1442             $session_time = strtotime( $session_time );
     1499            $session_time = strtotime( sprintf(
     1500                '%s %d:%02d %s',
     1501                sanitize_text_field( $_POST['wcpt-session-date'] ),
     1502                absint( $_POST['wcpt-session-hour'] ),
     1503                absint( $_POST['wcpt-session-minutes'] ),
     1504                'am' == $_POST['wcpt-session-meridiem'] ? 'am' : 'pm'
     1505            ) );
    14431506            update_post_meta( $post_id, '_wcpt_session_time', $session_time );
    14441507
     
    14831546        foreach ( $speaker_ids as $speaker_id )
    14841547            add_post_meta( $post_id, '_wcpt_speaker_id', $speaker_id );
    1485        
     1548
    14861549        // Set the speaker as the author of the session post, so the single
    14871550        // view doesn't confuse users who see "posted by [organizer name]"
     
    14891552            $wporg_user_id = get_post_meta( $speaker_post, '_wcpt_user_id', true );
    14901553            $user = get_user_by( 'id', $wporg_user_id );
    1491            
     1554
    14921555            if ( $user ) {
    14931556                remove_action( 'save_post', array( $this, 'save_post_session' ), 10, 2 );   // avoid infinite recursion
     
    14971560                ) );
    14981561                add_action( 'save_post', array( $this, 'save_post_session' ), 10, 2 );
    1499                
     1562
    15001563                break;
    15011564            }
     
    15131576        if ( isset( $_POST['wcpt-meta-sponsor-info'] ) && wp_verify_nonce( $_POST['wcpt-meta-sponsor-info'], 'edit-sponsor-info' ) ) {
    15141577            $website = esc_url_raw( $_POST['_wcpt_sponsor_website'] );
    1515            
     1578
    15161579            // TODO: maybe only allows links to home page, depending on outcome of http://make.wordpress.org/community/2013/12/31/irs-rules-for-corporate-sponsorship-of-wordcamp/
    15171580
Note: See TracChangeset for help on using the changeset viewer.