Example #1
0
/**
 * Saves the event data posted from the event metabox.
 * Hooked to the 'save_post' action
 * 
 * @since 1.0.0
 *
 * @param int $post_id the event post ID
 * @return int $post_id the event post ID
 */
function eventorganiser_details_save($post_id)
{
    //make sure data came from our meta box
    if (!isset($_POST['_eononce']) || !wp_verify_nonce($_POST['_eononce'], 'eventorganiser_event_update_' . $post_id . '_' . get_current_blog_id())) {
        return;
    }
    //verify this is not an auto save routine.
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    //authentication checks
    if (!current_user_can('edit_event', $post_id)) {
        return;
    }
    //Collect raw data
    $raw_data = isset($_POST['eo_input']) ? $_POST['eo_input'] : array();
    $raw_data = wp_parse_args($raw_data, array('StartDate' => '', 'EndDate' => '', 'StartTime' => '00:00', 'FinishTime' => '23:59', 'schedule' => 'once', 'event_frequency' => 1, 'schedule_end' => '', 'allday' => 0, 'schedule_meta' => '', 'days' => array(), 'include' => '', 'exclude' => ''));
    //Update venue
    $venue_id = !empty($raw_data['event-venue']) ? intval($raw_data['event-venue']) : null;
    //Maybe create a new venue
    if (empty($venue_id) && !empty($_POST['eo_venue']) && current_user_can('manage_venues')) {
        $venue = $_POST['eo_venue'];
        if (!empty($venue['name'])) {
            $new_venue = eo_insert_venue($venue['name'], $venue);
            if (!is_wp_error($new_venue)) {
                $venue_id = $new_venue['term_id'];
            } else {
                if ($new_venue->get_error_code() == 'term_exists') {
                    $venue_id = eo_get_venue($event_id);
                }
            }
        }
    }
    //Set venue
    $r = wp_set_post_terms($post_id, array($venue_id), 'event-venue', false);
    //If reocurring, but not editing occurrences, can abort here, but trigger hook.
    if (eo_reoccurs($post_id) && (!isset($raw_data['AlterRe']) || 'yes' != $raw_data['AlterRe'])) {
        /**
         * Triggered after an event has been updated.
         *
         * @param int $post_id The ID of the event
         */
        do_action('eventorganiser_save_event', $post_id);
        //Need this to update cache
        return;
    }
    //Check dates
    $date_format = eventorganiser_get_option('dateformat');
    $is24 = eventorganiser_blog_is_24();
    $time_format = $is24 ? 'H:i' : 'g:ia';
    $datetime_format = $date_format . ' ' . $time_format;
    //Set times for all day events
    $all_day = intval($raw_data['allday']);
    if ($all_day) {
        $raw_data['StartTime'] = $is24 ? '00:00' : '12:00am';
        $raw_data['FinishTime'] = $is24 ? '23:59' : '11:59pm';
    }
    $start = eo_check_datetime($datetime_format, trim($raw_data['StartDate']) . ' ' . trim($raw_data['StartTime']));
    $end = eo_check_datetime($datetime_format, trim($raw_data['EndDate']) . ' ' . trim($raw_data['FinishTime']));
    $until = eo_check_datetime($datetime_format, trim($raw_data['schedule_end']) . ' ' . trim($raw_data['StartTime']));
    //Collect schedule meta
    $schedule = $raw_data['schedule'];
    if ('weekly' == $schedule) {
        $schedule_meta = $raw_data['days'];
        $occurs_by = '';
    } elseif ('monthly' == $schedule) {
        $schedule_meta = $raw_data['schedule_meta'];
        $occurs_by = trim($schedule_meta, '=');
    } else {
        $schedule_meta = '';
        $occurs_by = '';
    }
    //Collect include/exclude
    $in_ex = array();
    $orig_schedule = eo_get_event_schedule($post_id);
    foreach (array('include', 'exclude') as $key) {
        $in_ex[$key] = array();
        $arr = explode(',', sanitize_text_field($raw_data[$key]));
        if (!empty($arr)) {
            foreach ($arr as $date) {
                if ($date_obj = eo_check_datetime('Y-m-d', trim($date))) {
                    $date_obj->setTime($start->format('H'), $start->format('i'));
                    $in_ex[$key][] = $date_obj;
                }
            }
            /* see https://github.com/stephenharris/Event-Organiser/issues/260
            			if( $orig = array_uintersect( $orig_schedule[$key], $in_ex[$key], '_eventorganiser_compare_dates' ) ){
            				$in_ex[$key] = array_merge( $orig, $in_ex[$key] );
            				$in_ex[$key] = _eventorganiser_remove_duplicates( $in_ex[$key] );
            			}*/
        }
    }
    $event_data = array('start' => $start, 'end' => $end, 'all_day' => $all_day, 'schedule' => $schedule, 'frequency' => (int) $raw_data['event_frequency'], 'until' => $until, 'schedule_meta' => $schedule_meta, 'occurs_by' => $occurs_by, 'include' => $in_ex['include'], 'exclude' => $in_ex['exclude']);
    $response = eo_update_event($post_id, $event_data);
    if (is_wp_error($response)) {
        global $EO_Errors;
        $code = $response->get_error_code();
        $message = $response->get_error_message($code);
        $errors[$post_id][] = __('Event dates were not saved.', 'eventorganiser');
        $errors[$post_id][] = $message;
        $EO_Errors->add('eo_error', $message);
        update_option('eo_notice', $errors);
    }
    return;
}
/**
 * Queues up the javascript / style scripts for Events custom page type 
 * Hooked onto admin_enqueue_scripts
 *
 * @since 1.0.0
 * @ignore
 * @access private
 */
function eventorganiser_add_admin_scripts($hook)
{
    global $post, $current_screen, $wp_locale;
    if ($hook == 'post-new.php' || $hook == 'post.php') {
        if ($post->post_type == 'event') {
            wp_enqueue_script('eo-edit-event-controller');
            wp_localize_script('eo_event', 'EO_Ajax_Event', array('ajaxurl' => admin_url('admin-ajax.php'), 'wpversion' => get_bloginfo('version'), 'startday' => intval(get_option('start_of_week')), 'format' => eventorganiser_php2jquerydate(eventorganiser_get_option('dateformat')), 'current_user_can' => array('manage_venues' => current_user_can('manage_venues')), 'is24hour' => eventorganiser_blog_is_24(), 'location' => get_option('timezone_string'), 'locale' => array('isrtl' => $wp_locale->is_rtl(), 'monthNames' => array_values($wp_locale->month), 'monthAbbrev' => array_values($wp_locale->month_abbrev), 'dayAbbrev' => array_values($wp_locale->weekday_abbrev), 'showDates' => __('Show dates', 'eventorganiser'), 'hideDates' => __('Hide dates', 'eventorganiser'), 'weekDay' => $wp_locale->weekday, 'meridian' => array($wp_locale->get_meridiem('am'), $wp_locale->get_meridiem('pm')), 'hour' => __('Hour', 'eventorganiser'), 'minute' => __('Minute', 'eventorganiser'), 'day' => __('day', 'eventorganiser'), 'days' => __('days', 'eventorganiser'), 'week' => __('week', 'eventorganiser'), 'weeks' => __('weeks', 'eventorganiser'), 'month' => __('month', 'eventorganiser'), 'months' => __('months', 'eventorganiser'), 'year' => __('year', 'eventorganiser'), 'years' => __('years', 'eventorganiser'), 'daySingle' => __('every day', 'eventorganiser'), 'dayPlural' => __('every %d days', 'eventorganiser'), 'weekSingle' => __('every week on', 'eventorganiser'), 'weekPlural' => __('every %d weeks on', 'eventorganiser'), 'monthSingle' => __('every month on the', 'eventorganiser'), 'monthPlural' => __('every %d months on the', 'eventorganiser'), 'yearSingle' => __('every year on the', 'eventorganiser'), 'yearPlural' => __('every %d years on the', 'eventorganiser'), 'summary' => __('This event will repeat', 'eventorganiser'), 'until' => __('until', 'eventorganiser'), 'occurrence' => array(__('first', 'eventorganiser'), __('second', 'eventorganiser'), __('third', 'eventorganiser'), __('fourth', 'eventorganiser'), __('last', 'eventorganiser')))));
            wp_enqueue_script('eo_venue');
            wp_enqueue_style('eventorganiser-style');
        }
    } elseif ($current_screen->id == 'edit-event') {
        wp_enqueue_style('eventorganiser-style');
    }
}
Example #3
0
 function page_actions()
 {
     //Add screen option
     $user = wp_get_current_user();
     $is12hour = get_user_meta($user->ID, 'eofc_time_format', true);
     if ('' === $is12hour) {
         $is12hour = eventorganiser_blog_is_24() ? 0 : 1;
     }
     add_screen_option('eofc_time_format', array('value' => $is12hour));
     add_filter('screen_settings', array($this, 'screen_options'), 10, 2);
     //Check action
     if (!empty($_REQUEST['save']) || !empty($_REQUEST['publish'])) {
         //Check nonce
         check_admin_referer('eventorganiser_calendar_save');
         //authentication checks
         if (!current_user_can('edit_events')) {
             wp_die(__('You do not have sufficient permissions to create events. ', 'eventorganiser'));
         }
         $input = $_REQUEST['eo_event'];
         //Retrieve input from posted data
         //Set the status of the new event
         if (!empty($_REQUEST['save'])) {
             $status = 'draft';
         } else {
             $status = current_user_can('publish_events') ? 'publish' : 'pending';
         }
         //Set post and event details
         $venue = (int) $input['venue_id'];
         $post_input = array('post_title' => $input['event_title'], 'post_status' => $status, 'post_content' => $input['event_content'], 'post_type' => 'event', 'tax_input' => array('event-venue' => array($venue)));
         $tz = eo_get_blog_timezone();
         $event_data = array('schedule' => 'once', 'all_day' => $input['allday'], 'start' => new DateTime($input['StartDate'] . ' ' . $input['StartTime'], $tz), 'end' => new DateTime($input['EndDate'] . ' ' . $input['FinishTime'], $tz));
         //Insert event
         $post_id = eo_insert_event($post_input, $event_data);
         if ($post_id) {
             //If event was successfully inserted, redirect and display appropriate message
             $redirect = get_edit_post_link($post_id, '');
             if ($status == 'publish') {
                 $redirect = add_query_arg('message', 6, $redirect);
             } else {
                 $redirect = add_query_arg('message', 7, $redirect);
             }
             //Redirect to event admin page & exit
             wp_redirect(esc_url_raw($redirect));
             exit;
         }
     } elseif (isset($_REQUEST['action']) && ($_REQUEST['action'] == 'delete_occurrence' || $_REQUEST['action'] == 'break_series') && isset($_REQUEST['series']) && isset($_REQUEST['event'])) {
         $post_id = intval($_REQUEST['series']);
         $event_id = intval($_REQUEST['event']);
         $action = $_REQUEST['action'];
         if ($action == 'break_series') {
             //Check nonce
             check_admin_referer('eventorganiser_break_series_' . $event_id);
             //Check permissions
             if (!current_user_can('edit_event', $post_id) || !current_user_can('delete_event', $post_id)) {
                 wp_die(__('You do not have sufficient permissions to edit this event. ', 'eventorganiser'));
             }
             $new_event_id = eo_break_occurrence($post_id, $event_id);
             //Redirect to prevent resubmisson
             $redirect = get_edit_post_link($new_event_id, '');
             $redirect = add_query_arg('message', 20, $redirect);
             wp_redirect(esc_url_raw($redirect));
             exit;
         } elseif ($action == 'delete_occurrence') {
             global $EO_Errors;
             //Check nonce
             check_admin_referer('eventorganiser_delete_occurrence_' . $event_id);
             //Check permissions
             if (!current_user_can('delete_event', $post_id)) {
                 wp_die(__('You do not have sufficient permissions to delete this event. ', 'eventorganiser'));
             }
             $response = _eventorganiser_remove_occurrence($post_id, $event_id);
             //Break Cache!
             _eventorganiser_delete_calendar_cache();
             if (is_wp_error($response)) {
                 $EO_Errors = $response;
             } else {
                 $EO_Errors = new WP_Error('eo_notice', '<strong>' . __('Occurrence deleted.', 'eventorganiser') . '</strong>');
                 /**
                  * Triggered when occurrence is delete via the admin calendar. 
                  * If you use this, send a message here: wp-event-organiser.com/contact. It may be removed.
                  * @ignore
                  */
                 do_action('eventorganiser_admin_calendar_occurrence_deleted', $post_id, $event_id);
             }
         }
     }
 }
/**
 * Saves the event data posted from the event metabox.
 * Hooked to the 'save_post' action
 * 
 * @since 1.0.0
 *
 * @param int $post_id the event post ID
 * @return int $post_id the event post ID
 */
function eventorganiser_details_save($post_id)
{
    //make sure data came from our meta box
    if (!isset($_POST['_eononce']) || !wp_verify_nonce($_POST['_eononce'], 'eventorganiser_event_update_' . $post_id)) {
        return;
    }
    // verify this is not an auto save routine.
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    //authentication checks
    if (!current_user_can('edit_event', $post_id)) {
        return;
    }
    //Collect raw data
    $raw_data = isset($_POST['eo_input']) ? $_POST['eo_input'] : array();
    $raw_data = wp_parse_args($raw_data, array('StartDate' => '', 'EndDate' => '', 'StartTime' => '00:00', 'FinishTime' => '23:59', 'schedule' => 'once', 'event_frequency' => 1, 'schedule_end' => '', 'allday' => 0, 'schedule_meta' => '', 'days' => array(), 'include' => '', 'exclude' => ''));
    //Update venue
    $venue_id = !empty($raw_data['event-venue']) ? intval($raw_data['event-venue']) : null;
    //Maybe create a new venue
    if (empty($venue_id) && !empty($_POST['eo_venue']) && current_user_can('manage_venues')) {
        $venue = $_POST['eo_venue'];
        if (!empty($venue['name'])) {
            $new_venue = eo_insert_venue($venue['name'], $venue);
            if (!is_wp_error($new_venue)) {
                $venue_id = $new_venue['term_id'];
            }
        }
    }
    //Set venue
    $r = wp_set_post_terms($post_id, array($venue_id), 'event-venue', false);
    //If reocurring, but not editing occurrences, can abort here, but trigger hook.
    if (eo_reoccurs($post_id) && (!isset($raw_data['AlterRe']) || 'yes' != $raw_data['AlterRe'])) {
        do_action('eventorganiser_save_event', $post_id);
        //Need this to update cache
        return;
    }
    //Set times for all day events
    $all_day = intval($raw_data['allday']);
    if ($all_day) {
        $raw_data['StartTime'] = '00:00';
        $raw_data['FinishTime'] = '23:59';
    } elseif (!eventorganiser_blog_is_24()) {
        //Potentially need to parse 24
        //TODO incorproate into _eventorganiser_check_datetime
        $raw_data['StartTime'] = date("H:i", strtotime($raw_data['StartTime']));
        $raw_data['FinishTime'] = date("H:i", strtotime($raw_data['FinishTime']));
    }
    //Check dates
    $start = _eventorganiser_check_datetime(trim($raw_data['StartDate']) . ' ' . trim($raw_data['StartTime']));
    $end = _eventorganiser_check_datetime(trim($raw_data['EndDate']) . ' ' . trim($raw_data['FinishTime']));
    $schedule_last = _eventorganiser_check_datetime(trim($raw_data['schedule_end']) . ' ' . trim($raw_data['StartTime']));
    //Collect schedule meta
    $schedule = $raw_data['schedule'];
    if ('weekly' == $schedule) {
        $schedule_meta = $raw_data['days'];
        $occurs_by = '';
    } elseif ('monthly' == $schedule) {
        $schedule_meta = $raw_data['schedule_meta'];
        $occurs_by = trim($schedule_meta, '=');
    } else {
        $schedule_meta = '';
        $occurs_by = '';
    }
    //Collect include/exclude
    $in_ex = array();
    foreach (array('include', 'exclude') as $key) {
        $in_ex[$key] = array();
        $arr = explode(',', sanitize_text_field($raw_data[$key]));
        if (!empty($arr)) {
            foreach ($arr as $date) {
                $date_obj = _eventorganiser_check_datetime($date . ' ' . $raw_data['StartTime'], 'Y-m-d');
                if ($date_obj) {
                    $in_ex[$key][] = $date_obj;
                }
            }
        }
    }
    $event_data = array('start' => $start, 'end' => $end, 'all_day' => $all_day, 'schedule' => $schedule, 'frequency' => (int) $raw_data['event_frequency'], 'schedule_last' => $schedule_last, 'schedule_meta' => $schedule_meta, 'occurs_by' => $occurs_by, 'include' => $in_ex['include'], 'exclude' => $in_ex['exclude']);
    $response = eo_update_event($post_id, $event_data);
    if (is_wp_error($response)) {
        global $EO_Errors;
        $code = $response->get_error_code();
        $message = $response->get_error_message($code);
        $errors[$post_id][] = __('Event dates were not saved.', 'eventorganiser');
        $errors[$post_id][] = $message;
        $EO_Errors->add('eo_error', $message);
        update_option('eo_notice', $errors);
    }
    return;
}