<?php
/**
 * Event List system.
 */
 
/**
 * Sets up our Events custom post type.
 */
function pbd_events_init() {
    
// Labels.
    
$labels = array(
        
'name' => 'Events',
        
'singular_name' => 'Event',
        
'add_new' => 'Add New',
        
'add_new_item' => 'Add New Event',
        
'edit_item' => 'Edit Event',
        
'new_item' => 'New Event',
        
'view_item' => 'View Event',
        
'search_items' => 'Search Events',
        
'not_found' => 'No events found.',
        
'not_found_in_trash' => 'No events found in Trash.'
    
);
    
    
// Register the post type.
    
register_post_type('events', array(
        
'labels' => $labels,
        
'public' => true,
        
'supports' => array('title''editor''custom-fields''comments'),
        
'has_archive' => true
    
));
    
    
// Event tag labels.
    
$eventLabels = array(
        
'name' => 'Event Tags',
        
'singular_name' => 'Event Tag',
        
'search_items' => 'Search Event Tags',
        
'popular_items' => 'Popular Event Tags',
        
'all_items' => 'All Event Tags',
        
'edit_item' => 'Edit Event Tag',
        
'update_item' => 'Update Event Tag',
        
'add_new_item' => 'Add New Event Tag',
        
'new_item_name' => 'New Event Tag Name'
    
);
    
    
// Event tags.
    
register_taxonomy('event_tags''events', array(
        
'label' => 'Event Tags',
        
'labels' => $eventLabels
    
));
}
add_action('init''pbd_events_init');

/**
 * Add Event Date before the description on single post pages.
 */
function pbd_add_event_info($content) {
    if ( 
'events' == get_post_type() ) :
    
        
// Get the date of the event in a nicer-to-read format.
        
global $post;
        
$date get_post_meta($post->ID'Date'true);
        
$date date_create($date);
        
$date date_format($date'jS F, Y');
        
        
// Add the message before the post.
        
$content '<p class="events-info"><strong>Event Date</strong>: '$date .'</p>' $content;
    endif;
    
    return 
$content;
}
add_filter('the_content''pbd_add_event_info');


/**
 * Register meta box
 *
 * Adds a metabox to Event post types, allowing users to easily enter the date of an event.
 */
function pbd_events_meta_box() {
    
add_meta_box('pbd-events-meta-box''Event Date''pbd_events_create_meta_box''events''normal''high');
}
add_action('add_meta_boxes''pbd_events_meta_box');

/**
 * Creates the HTML for the meta box.
 */
function pbd_events_create_meta_box($post) { 
    
// Get already-entered date.
    
$date get_post_meta($post->ID'Date'true);
    
    
// Nonce for verification.
    
wp_nonce_fieldplugin_basename(__FILE__), 'pbd_events_nonce');
    
?>
    
    <p>Date (mm/dd/yy): <input type="text" name="pbd-event-date" id="pbd-event-date" value="<?php echo $date?>" /></p>
<?php }

/**
 * Saves the meta box value when the post is saved.
 */
function pbd_events_save_meta_box($post_id) {

    
// Verification check.
    
if ( !wp_verify_nonce$_POST['pbd_events_nonce'], plugin_basename(__FILE__) ) )
          return;
          
    
// And they're of the right level?
    
if(!current_user_can('edit_posts') )
        return;
    
    
// Has the field been used?
    
$date trim$_POST['pbd-event-date'] );
    if( empty(
$date) )
        return;
        
    
// Validate that what was entered is of the form: 00/00/00
    
if(preg_match('(^\d{1,2}\/\d{1,2}\/\d{2}$)'$date) ) {
        
update_post_meta($post_id'Date'$date);
    }
}
add_action('save_post''pbd_events_save_meta_box');


/**
 * Adds a jQuery datepicker script to Event pages.
 * http://jqueryui.com/demos/datepicker/
 */
function pbd_events_jquery_datepicker() {
    
wp_enqueue_script(
        
'jquery-ui-datepicker',
        
get_bloginfo('template_directory') . '/jquery-ui-datepicker/jquery-ui-1.8.11.custom.min.js',
        array(
'jquery')
    );
    
    
wp_enqueue_script(
        
'pbd-datepicker',
        
get_bloginfo('template_directory') . '/jquery-ui-datepicker/pbd-datepicker.js',
        array(
'jquery''jquery-ui-datepicker')
    );
}
add_action('admin_print_scripts-post-new.php''pbd_events_jquery_datepicker');
add_action('admin_print_scripts-post.php''pbd_events_jquery_datepicker');

/**
 * Adds CSS for the jQuery datepicker script to Event pages.
 * http://jqueryui.com/demos/datepicker/
 */
function pbd_events_jquery_datepicker_css() {
    
wp_enqueue_style(
        
'jquery-ui-datepicker',
        
get_bloginfo('template_directory') . '/jquery-ui-datepicker/css/smoothness/jquery-ui-1.8.11.custom.css'
    
);
}
add_action('admin_print_styles-post-new.php''pbd_events_jquery_datepicker_css');
add_action('admin_print_styles-post.php''pbd_events_jquery_datepicker_css');

?>