Skip to content

Instantly share code, notes, and snippets.

@lgedeon
Created May 21, 2012 16:09
Show Gist options
  • Save lgedeon/2763061 to your computer and use it in GitHub Desktop.
Save lgedeon/2763061 to your computer and use it in GitHub Desktop.
<?php
public function save_post( $post_id, $post ) {
// don't update on autosave (all our post types currently use page-based permissions)
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return;
// static variable prevents infinite loop when calling menu order update
static $skip_me = false;
if ( $skip_me ) return;
// save event / post relationship
if ( $post->post_type == 'post' && current_user_can( 'edit_post', $post_id ) && isset( $_POST['tc_event_relationship_nonce'] ) && wp_verify_nonce( $_POST['tc_event_relationship_nonce'], 'tc_event_relationship_noncename' ) ) {
empty( $_POST['_tc_event_relationship'] ) ? delete_post_meta( $post_id, '_tc_event_relationship' ) : update_post_meta( $post_id, '_tc_event_relationship', (int) $_POST['_tc_event_relationship'] );
return;
}
// all other relevant custom post types use page based capabilities
if ( ! current_user_can( 'edit_page', $post_id ) )
return;
// save event data
if ( $post->post_type == 'tc_events' ) {
//Update the order of our child pages
if ( isset( $_POST['_tc_event_children_nonce'] ) && wp_verify_nonce( $_POST['_tc_event_children_nonce'], 'tc_event_children_noncename' ) && ! wp_is_post_revision( $post_id ) ) {
$count = 1;
if ( $pages = array_map( 'intval', $_POST['tc_event_children'] ) ) {
update_post_meta( $post_id, '_tc_event_child_page_order', $pages );
/* deprecated - remove after 5/23/12
global $tc_permalinks;
$skip_me = true;
remove_action( 'save_post', array( $tc_permalinks, 'save_post' ) );
foreach ( $pages as $page ) {
wp_update_post( array( 'ID' => $page, 'menu_order' => $count ) );
$count++;
}
add_action( 'save_post', array( $tc_permalinks, 'save_post' ) );
$skip_me = false;
*/
}
}
if( ! $post->post_parent ) {
// event details
if ( isset( $_POST['_tc_events_info_nonce'] ) && wp_verify_nonce( $_POST['_tc_events_info_nonce'], 'tc_events_info_noncename' ) ) {
empty( $_POST['_tc_event_venue'] ) ? delete_post_meta( $post_id, '_tc_event_venue' ) : update_post_meta( $post_id, '_tc_event_venue', (int) $_POST['_tc_event_venue'] );
empty( $_POST['_tc_event_location'] ) ? delete_post_meta( $post_id, '_tc_event_location' ) : update_post_meta( $post_id, '_tc_event_location', sanitize_text_field( $_POST['_tc_event_location'] ) );
empty( $_POST['_tc_event_headline'] ) ? delete_post_meta( $post_id, '_tc_event_headline' ) : update_post_meta( $post_id, '_tc_event_headline', sanitize_text_field( $_POST['_tc_event_headline'] ) );
empty( $_POST['_tc_ticket_url'] ) ? delete_post_meta( $post_id, '_tc_ticket_url' ) : update_post_meta( $post_id, '_tc_ticket_url', esc_url( $_POST['_tc_ticket_url'], array('http','https') ) );
empty( $_POST['_tc_event_cost'] ) ? delete_post_meta( $post_id, '_tc_event_cost' ) : update_post_meta( $post_id, '_tc_event_cost', sanitize_text_field( $_POST['_tc_event_cost'] ) );
empty( $_POST['tc_events_twitter_search'] ) ? delete_post_meta( $post_id, '_tc_events_twitter_search' ) : update_post_meta( $post_id, '_tc_events_twitter_search', sanitize_text_field( $_POST['tc_events_twitter_search'] ) );
if ( empty( $_POST['tc_events_flickr_set'] ) )
delete_post_meta( $post_id, '_tc_events_flickr_set' );
else {
delete_transient( 'tc_event_' . $post_id . '_photos' );
$flickr_sets = array();
foreach ( $_POST['tc_events_flickr_set'] as $set ) {
if ( ! empty( $set ) ) {
$fixed = preg_replace( '/[^0-9]/', '', $set );
if( ! empty( $fixed ) )
array_push( $flickr_sets, $fixed );
}
}
if ( empty( $flickr_sets ) )
delete_post_meta( $post_id, '_tc_events_flickr_set' );
else
update_post_meta( $post_id, '_tc_events_flickr_set', $flickr_sets );
}
}
//event sponsors
if ( isset( $_POST['_tc_event_sponsorships_nonce'] ) && wp_verify_nonce( $_POST['_tc_event_sponsorships_nonce'], 'tc_event_sponsorships_noncename' ) ) {
if ( ! isset( $_POST['_tc_event_sponsorships'] ) || empty( $_POST['_tc_event_sponsorships'] ) || ! is_array( $_POST['_tc_event_sponsorships'] ) ) {
delete_post_meta( $post_id, '_tc_event_sponsorships' );
} else {
$sponsorships = $_POST['_tc_event_sponsorships'];
$count = 0;
$new_sponsorships = array();
$sponsor_arr = array();
foreach ( $sponsorships as $sponsorship ) {
$sponsorship_name = empty( $sponsorship['name'] ) ? '' : sanitize_text_field( $sponsorship['name'] );
if ( ! empty( $sponsorship['level'] ) && in_array( $sponsorship['level'], array( 'header', 'tier1', 'tier2', 'tier3', 'ads125' ) ) )
$sponsorship_level = $sponsorship['level'];
if ( ! empty( $sponsorship['sponsors'] ) )
$sponsor_arr = array_map( 'intval', $sponsorship['sponsors'] );
if ( ! empty( $sponsorship['panel_count'] ) )
$panel_count = (int) $sponsorship['panel_count'];
if ( ! empty( $sponsor_arr ) || ! empty( $sponsorship_name ) || ! empty( $sponsorship_level ) ) {
$new_sponsorships[$count]['name'] = $sponsorship_name;
$new_sponsorships[$count]['level'] = ( isset( $sponsorship_level ) ) ? $sponsorship_level : '';
$new_sponsorships[$count]['panel_count'] = ( isset( $panel_count ) ) ? $panel_count : 4;
$new_sponsorships[$count]['sponsors'] = $sponsor_arr;
$count++;
}
}
if ( empty( $new_sponsorships ) )
delete_post_meta( $post_id, '_tc_event_sponsorships' );
else
update_post_meta( $post_id, '_tc_event_sponsorships', $new_sponsorships );
}
}
// event dates
if ( isset( $_POST['_tc_event_dates_nonce'] ) && wp_verify_nonce( $_POST['_tc_event_dates_nonce'], 'tc_event_dates_noncename' ) ) {
// process event start date; if all 3 are empty, delete it; if all 3 are valid, save it; otherwise, let's just pretend nothing happened in case of accidental "fat fingering""...
if( empty( $_POST['_tc_start_month'] ) && empty( $_POST['_tc_start_day'] ) && empty( $_POST['_tc_start_year'] ) ) {
delete_post_meta( $post_id, '_tc_event_start' );
} elseif ( ! empty( $_POST['_tc_start_month'] ) && ! empty( $_POST['_tc_start_day'] ) && ! empty( $_POST['_tc_start_year'] ) ) {
if ( $start_date = mktime( 0, 0, 0, (int) $_POST['_tc_start_month'], (int) $_POST['_tc_start_day'], (int) $_POST['_tc_start_year'] ) )
update_post_meta( $post_id, '_tc_event_start', $start_date );
}
// process end date in same way
if( empty( $_POST['_tc_end_month'] ) && empty( $_POST['_tc_end_day'] ) && empty( $_POST['_tc_end_year'] ) ) {
delete_post_meta( $post_id, '_tc_event_end' );
} elseif ( ! empty( $_POST['_tc_end_month'] ) && ! empty( $_POST['_tc_end_day'] ) && ! empty( $_POST['_tc_end_year'] ) ) {
if ( $end_date = mktime( 0, 0, 0, (int) $_POST['_tc_end_month'], (int) $_POST['_tc_end_day'], (int) $_POST['_tc_end_year'] ) )
$meta = update_post_meta( $post_id, '_tc_event_end', mktime( 23, 59, 59, (int) $_POST['_tc_end_month'], (int) $_POST['_tc_end_day'], (int) $_POST['_tc_end_year'] ) );
}
// if no end date was provided, but a start date was, the end date is the last second of the start date (for comparisons)
if ( empty( $end_date ) && ! empty( $start_date ) ) {
$end_date = $start_date + 86399;
update_post_meta( $post_id, '_tc_event_end', $end_date );
}
}
} else {
// event page type
if ( isset( $_POST['_tc_event_page_types_nonce'] ) && wp_verify_nonce( $_POST['_tc_event_page_types_nonce'], 'tc_event_page_types_noncename' ) ) {
// must be either "coverage_page" or "video" -- for now
if ( ! empty( $_POST['tc_event_page_types'] ) && in_array( $_POST['tc_event_page_types'], array( 'coverage_page', 'video', 'sponsors_page', 'photos_page', 'info_page' ) ) )
update_post_meta( $post_id, '_tc_event_page_type', $_POST['tc_event_page_types'] );
else
delete_post_meta( $post_id, '_tc_event_page_type' );
}
}
return;
}
// save event venue details
if ( isset( $_POST['_tc_events_venues_info_nonce'] ) && wp_verify_nonce( $_POST['_tc_events_venues_info_nonce'], 'tc_venues_info_noncename' ) ) {
// a few elements that we would never independently query by will be serialized together
$street = array();
if ( ! empty( $_POST['_tc_venue_street'][0] ) )
$street[0] = sanitize_text_field( $_POST['_tc_venue_street'][0] ); // address line 1
if ( ! empty( $_POST['_tc_venue_street'][1] ) )
$street[1] = empty( $_POST['_tc_venue_street'][1] ) ? '' : sanitize_text_field( $_POST['_tc_venue_street'][1] ); // address line 2
empty( $street ) ? delete_post_meta( $post_id, '_tc_venue_street' ) : update_post_meta( $post_id, '_tc_venue_street', $street );
// individual elements
empty( $_POST['_tc_venue_city'] ) ? delete_post_meta( $post_id, '_tc_venue_city' ) : update_post_meta( $post_id, '_tc_venue_city', sanitize_text_field( $_POST['_tc_venue_city'] ) );
empty( $_POST['_tc_venue_state'] ) ? delete_post_meta( $post_id, '_tc_venue_state' ) : update_post_meta( $post_id, '_tc_venue_state', sanitize_text_field( $_POST['_tc_venue_state'] ) );
( empty( $_POST['_tc_venue_zip'] ) || ! preg_match( "/^([0-9]{5})(-[0-9]{4})?$/i", $_POST['_tc_venue_zip'] ) ) ? delete_post_meta( $post_id, '_tc_venue_zip' ) : update_post_meta( $post_id, '_tc_venue_zip', $_POST['_tc_venue_zip'] );
empty( $_POST['_tc_venue_country'] ) ? delete_post_meta( $post_id, '_tc_venue_country' ) : update_post_meta( $post_id, '_tc_venue_country', sanitize_text_field( $_POST['_tc_venue_country'] ) );
return;
}
// save event sponsors meta
if ( isset( $_POST['_tc_sponsor_display_name_nonce'] ) && wp_verify_nonce( $_POST['_tc_sponsor_display_name_nonce'], 'tc_sponsor_display_name_noncename' ) ) {
empty( $_POST['_tc_sponsor_display_name'] ) ? delete_post_meta( $post_id, '_tc_sponsor_display_name' ) : update_post_meta( $post_id, '_tc_sponsor_display_name', sanitize_text_field( $_POST['_tc_sponsor_display_name'] ) );
}
//If we are updating sponsors, let's cache the list for use in autocompletes
if ( $post->post_type == 'tc_event_sponsors' ) {
$sponsors = new WP_Query(
array(
'post_type' => 'tc_event_sponsors',
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC',
)
);
if ( $sponsors->have_posts() ) :
$sponsor_cache = array();
while ( $sponsors->have_posts() ) : $sponsors->the_post();
$sponsor_cache[get_the_ID()] = get_the_title();
endwhile;
if ( $current_list = get_option( 'tc_event_sponsor_autocomplete_cache' ) )
update_option( 'tc_event_sponsor_autocomplete_cache', $sponsor_cache );
else
add_option( 'tc_event_sponsor_autocomplete_cache', $sponsor_cache, '', 'no' );
endif;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment