Created
May 21, 2012 16:09
-
-
Save lgedeon/2763061 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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