/** * Save metaboxes */ public function save_post($post_id) { if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } if (!isset($_POST['pronamic_events_nonce_details'])) { return; } if (!wp_verify_nonce($_POST['pronamic_events_nonce_details'], 'pronamic_events_edit_details')) { return; } if (!current_user_can('edit_post', $post_id)) { return; } // Define timestamps $start_date = filter_input(INPUT_POST, 'pronamic_start_date', FILTER_SANITIZE_STRING); $start_time = filter_input(INPUT_POST, 'pronamic_start_time', FILTER_SANITIZE_STRING); $end_date = filter_input(INPUT_POST, 'pronamic_end_date', FILTER_SANITIZE_STRING); $end_time = filter_input(INPUT_POST, 'pronamic_end_time', FILTER_SANITIZE_STRING); $location = filter_input(INPUT_POST, 'pronamic_location', FILTER_SANITIZE_STRING); $url = filter_input(INPUT_POST, 'pronamic_event_url', FILTER_SANITIZE_STRING); $end_date = empty($end_date) ? $start_date : $end_date; $end_time = empty($end_time) ? $start_time : $end_time; $start_timestamp = strtotime($start_date . ' ' . $start_time); $end_timestamp = strtotime($end_date . ' ' . $end_time); $meta = array('_pronamic_location' => $location, '_pronamic_event_url' => $url); $meta = pronamic_events_get_start_date_meta($start_timestamp, $meta); $meta = pronamic_events_get_end_date_meta($end_timestamp, $meta); // Save meta data foreach ($meta as $key => $value) { update_post_meta($post_id, $key, $value); } // Status update $this->plugin->event_status_update($post_id); wp_clear_scheduled_hook('pronamic_event_status_update', array($post_id)); wp_schedule_single_event($end_timestamp, 'pronamic_event_status_update', array($post_id)); }
/** * Save repeats * * @param string $post_id */ public function save_repeats($post_id) { // Create repeated posts $post = get_post($post_id); $event = new Pronamic_WP_Event($post); $repeat_helper = new Pronamic_Events_RepeatEventHelper($event); $repeat_events = $repeat_helper->get_repeat_events(); $data = new ArrayIterator($repeat_helper->get_period_data()); $data = new LimitIterator($data, 0, Pronamic_Events_RepeatModule::MAX_REPEATS); if ($repeat_helper->is_repeat_enabled() && $data) { // Remove filters remove_filter('save_post', array($this->plugin->admin, 'save_post')); remove_filter('save_post', array($this, 'save_post')); remove_filter('save_post', array($this, 'save_repeats')); foreach ($data as $e) { $hash_code = $e->get_event_hash_code(); $post_data = array('post_title' => $post->post_title, 'post_content' => $post->post_content, 'post_author' => $post->post_author, 'post_parent' => $post->ID, 'post_status' => $post->post_status, 'post_type' => $post->post_type); if (isset($repeat_events[$hash_code])) { } else { $repeat_post_id = wp_insert_post($post_data); $start_timestamp = $e->get_start()->format('U'); $end_timestamp = $e->get_end()->format('U'); $meta = array(); $meta = pronamic_events_get_start_date_meta($start_timestamp, $meta); $meta = pronamic_events_get_end_date_meta($end_timestamp, $meta); // Save meta data foreach ($meta as $key => $value) { update_post_meta($repeat_post_id, $key, $value); } } } /* * Sync posts */ // Post $post_data = array('post_title' => $post->post_title, 'post_content' => $post->post_content, 'post_author' => $post->post_author, 'post_parent' => $post->ID, 'post_status' => $post->post_status, 'post_type' => $post->post_type); // Meta $ignore = array_flip(array('_edit_last', '_pronamic_start_date', '_pronamic_event_start_date', '_pronamic_event_start_date_gmt', '_pronamic_end_date', '_pronamic_event_end_date', '_pronamic_event_end_date_gmt', '_pronamic_event_repeat', '_pronamic_event_repeat_frequency', '_pronamic_event_repeat_interval', '_pronamic_event_ends_on', '_pronamic_event_ends_on_count', '_pronamic_event_ends_on_until', '_edit_lock')); $post_custom = get_post_custom($post->ID); $post_custom = array_diff_key($post_custom, $ignore); // Taxonomies $taxonomies = array(); $taxonomy_names = get_object_taxonomies($post); foreach ($taxonomy_names as $taxonomy) { $terms = wp_get_object_terms($post->ID, $taxonomy, array('fields' => 'ids')); $taxonomies[$taxonomy] = $terms; } // Posts $args = $repeat_helper->get_repeat_posts_query_args(array('fields' => 'ids')); $post_ids = get_posts($args); foreach ($post_ids as $post_id) { // Post $post_data['ID'] = $post_id; wp_update_post($post_data); // Meta foreach ($post_custom as $meta_key => $meta_values) { delete_post_meta($post_id, $meta_key); foreach ($meta_values as $meta_value) { add_post_meta($post_id, $meta_key, $meta_value); } } // Taxonomies foreach ($taxonomies as $taxonomy => $terms) { wp_set_object_terms($post_id, $terms, $taxonomy); } } // Add filters add_filter('save_post', array($this->plugin->admin, 'save_post')); add_filter('save_post', array($this, 'save_post')); add_filter('save_post', array($this, 'save_repeats')); } }
/** * Gravity Forms post data * * @param array $post_data * @param array $form * @param array $lead */ function pronamic_events_gform_post_data($post_data, $form, $lead) { $start_date = $end_date = null; // Init $start_date = array(); $start_time = array(); $end_date = array(); $end_time = array(); // Form fields foreach ($form['fields'] as $field) { if (isset($field['isEventStartDate'])) { $has_start_date = filter_var($field['isEventStartDate'], FILTER_VALIDATE_BOOLEAN); if ($has_start_date) { $start_date = pronamic_events_gform_parse_date($lead[$field['id']], $field['dateFormat']); } } if (isset($field['isEventStartTime'])) { $has_start_time = filter_var($field['isEventStartTime'], FILTER_VALIDATE_BOOLEAN); if ($has_start_time) { $start_time = pronamic_events_gform_parse_time($lead[$field['id']]); } } if (isset($field['isEventEndDate'])) { $has_end_date = filter_var($field['isEventEndDate'], FILTER_VALIDATE_BOOLEAN); if ($has_end_date) { $end_date = pronamic_events_gform_parse_date($lead[$field['id']], $field['dateFormat']); } } if (isset($field['isEventEndTime'])) { $has_end_time = filter_var($field['isEventEndTime'], FILTER_VALIDATE_BOOLEAN); if ($has_end_time) { $end_time = pronamic_events_gform_parse_time($lead[$field['id']]); } } } // Mapping if (!isset($post_data['post_custom_fields'])) { $post_data['post_custom_fields'] = array(); } $fields =& $post_data['post_custom_fields']; // Backwards compatibility if (true) { // Start date if (isset($fields['_pronamic_start_date_date'])) { $start_date = $fields['_pronamic_start_date_date']; if (isset($fields['_pronamic_start_date_time'])) { $start_date .= ' ' . $fields['_pronamic_start_date_time']; } $start_timestamp = strtotime($start_date); if (false !== $start_timestamp) { $fields['_pronamic_start_date'] = $start_timestamp; } } // End date if (isset($fields['_pronamic_end_date_date'])) { $end_date = $fields['_pronamic_end_date_date']; if (isset($fields['_pronamic_end_date_time'])) { $end_date .= ' ' . $fields['_pronamic_end_date_time']; } $end_timestamp = strtotime($end_date); if (false !== $end_timestamp) { $fields['_pronamic_end_date'] = $end_timestamp; } } } // Merge start and end dates togehter, magic! $start = array_merge($end_date, $end_time, $start_date, $start_time); $end = array_merge($start_date, $start_time, $end_date, $end_time); if (!empty($start) && !empty($end)) { // Merge missing date info with today's date info $today = date_parse('today'); $start = array_merge($today, $start); $end = array_merge($today, $end); $timestamp = mktime($start['hour'], $start['minute'], $start['second'], $start['month'], $start['day'], $start['year']); $fields = pronamic_events_get_start_date_meta($timestamp, $fields); $timestamp = mktime($end['hour'], $end['minute'], $end['second'], $end['month'], $end['day'], $end['year']); $fields = pronamic_events_get_end_date_meta($timestamp, $fields); } return $post_data; }