/**
  * Registers the widget with the WordPress Widget API.
  *
  * @return void.
  */
 public static function register()
 {
     $supports = eventorganiser_get_option('supports');
     if (in_array('event-venue', $supports)) {
         register_widget(__CLASS__);
     }
 }
 /**
  * Enqueues the page's scripts and styles, and localises them.
  */
 function page_scripts()
 {
     global $wp_locale;
     wp_enqueue_script('eo_calendar');
     //wp_enqueue_script( 'eo_event' );
     wp_localize_script('eo_event', 'EO_Ajax_Event', array('ajaxurl' => admin_url('admin-ajax.php'), 'startday' => intval(get_option('start_of_week')), 'format' => eventorganiser_php2jquerydate(eventorganiser_get_option('dateformat'))));
     wp_localize_script('eo_calendar', 'EO_Ajax', array('ajaxurl' => admin_url('admin-ajax.php'), 'startday' => intval(get_option('start_of_week')), 'format' => eventorganiser_php2jquerydate(eventorganiser_get_option('dateformat')), 'timeFormat' => get_current_screen()->get_option('eofc_time_format', 'value') ? 'h:mmtt' : 'HH:mm', 'perm_edit' => current_user_can('edit_events'), 'categories' => get_terms('event-category', array('hide_empty' => 0)), 'venues' => get_terms('event-venue', array('hide_empty' => 0)), 'locale' => array('isrtl' => $wp_locale->is_rtl(), 'monthNames' => array_values($wp_locale->month), 'monthAbbrev' => array_values($wp_locale->month_abbrev), 'dayNames' => array_values($wp_locale->weekday), 'dayAbbrev' => array_values($wp_locale->weekday_abbrev), 'today' => __('today', 'eventorganiser'), 'day' => __('day', 'eventorganiser'), 'week' => __('week', 'eventorganiser'), 'month' => __('month', 'eventorganiser'), 'gotodate' => __('go to date', 'eventorganiser'), 'cat' => __('View all categories', 'eventorganiser'), 'venue' => __('View all venues', 'eventorganiser'))));
 }
Пример #3
0
 public function testOndateSlug()
 {
     global $wp_rewrite;
     update_option('permalink_structure', '/%year%/%monthnum%/%day%/%postname%/');
     $options = eventorganiser_get_option(false);
     $options['url_on'] = 'events-on';
     update_option('eventorganiser_options', $options);
     eventorganiser_cpt_register();
     $GLOBALS['wp_rewrite']->init();
     flush_rewrite_rules();
     $this->go_to(eo_get_event_archive_link(2014, 03));
     $this->assertTrue(eo_is_event_archive('month'));
     $this->assertEquals('2014-03-01', eo_get_event_archive_date('Y-m-d'));
     $this->assertEquals('http://example.org/events/event/events-on/2014/03', eo_get_event_archive_link(2014, 03));
 }
Пример #4
0
 /**
  * Enqueues the page's scripts and styles, and localises them.
  */
 function page_scripts()
 {
     global $wp_locale;
     wp_enqueue_script('eo_calendar');
     $edittime = defined('EVENT_ORGANISER_BETA_FEATURES') && EVENT_ORGANISER_BETA_FEATURES;
     $venues = $categories = $all_cats = $all_venues = false;
     if ($category_tax = get_taxonomy('event-category')) {
         $categories = get_terms('event-category', array('hide_empty' => 0));
         $all_cats = $category_tax->labels->view_all_items;
     }
     if ($venue_tax = get_taxonomy('event-venue')) {
         $venues = get_terms('event-venue', array('hide_empty' => 0));
         $all_venues = $venue_tax->labels->view_all_items;
     }
     wp_localize_script('eo_calendar', 'EO_Ajax', array('ajaxurl' => admin_url('admin-ajax.php'), 'startday' => intval(get_option('start_of_week')), 'format' => eventorganiser_php2jquerydate(eventorganiser_get_option('dateformat')), 'timeFormat' => get_current_screen()->get_option('eofc_time_format', 'value') ? 'h:mmtt' : 'HH:mm', 'perm_edit' => current_user_can('edit_events'), 'edit_time' => $edittime ? current_user_can('edit_events') : false, 'edit_nonce' => wp_create_nonce('edit_events'), 'categories' => $categories, 'venues' => $venues, 'locale' => array('isrtl' => $wp_locale->is_rtl(), 'monthNames' => array_values($wp_locale->month), 'monthAbbrev' => array_values($wp_locale->month_abbrev), 'dayNames' => array_values($wp_locale->weekday), 'dayAbbrev' => array_values($wp_locale->weekday_abbrev), 'today' => __('today', 'eventorganiser'), 'day' => __('day', 'eventorganiser'), 'week' => __('week', 'eventorganiser'), 'month' => __('month', 'eventorganiser'), 'gotodate' => __('go to date', 'eventorganiser'), 'cat' => $all_cats, 'venue' => $all_venues)));
 }
 public function __construct()
 {
     global $pagenow, $EO_Errors;
     if (!isset($EO_Errors)) {
         $EO_Errors = new WP_Error();
     }
     if (is_feed('eo-events') && eventorganiser_get_option('feed')) {
         $this->get_export_file();
     }
     //If importing / exporting events make sure we a logged in and check nonces.
     if (is_admin() && !empty($_POST['eventorganiser_download_events']) && check_admin_referer('eventorganiser_download_events') && current_user_can('manage_options')) {
         //Exporting events
         //mmm... maybe finally a legitimate use of query_posts
         query_posts(array('post_type' => 'event', 'showpastevents' => true, 'group_events_by' => 'series', 'posts_per_page' => -1));
         $this->get_export_file();
     } elseif (is_admin() && !empty($_POST['eventorganiser_import_events']) && check_admin_referer('eventorganiser_import_events') && current_user_can('manage_options')) {
         //Importing events
         //Perform checks on file:
         if (in_array($_FILES["ics"]["type"], array("text/calendar", "application/octet-stream")) && $_FILES["ics"]["size"] < 2097152) {
             if ($_FILES["ics"]["error"] > 0) {
                 $EO_Errors = new WP_Error('eo_error', sprintf(__("File Error encountered: %d", 'eventorganiser'), $_FILES["ics"]["error"]));
             } else {
                 //Import file
                 $this->import_file($_FILES['ics']['tmp_name']);
             }
         } elseif (!isset($_FILES) || empty($_FILES['ics']['name'])) {
             $EO_Errors = new WP_Error('eo_error', __("No file detected.", 'eventorganiser'));
         } else {
             $EO_Errors = new WP_Error('eo_error', __("Invalid file uploaded. The file must be a ics calendar file of type 'text/calendar', no larger than 2MB.", 'eventorganiser'));
             $size = size_format($_FILES["ics"]["size"], 2);
             $details = sprintf(__('File size: %s. File type: %s', 'eventorganiser'), $size, $_FILES["ics"]["type"]);
             $EO_Errors->add('eo_error', $details);
         }
     }
     add_action('eventorganiser_event_settings_imexport', array($this, 'get_im_export_markup'));
 }
Пример #6
0
/**
 * If a menu isn't being used the above won't work. They're using wp_list_pages, so the
 * best we can do is append a link to the end of the list.
 * Hooked onto wp_list_pages
 *
 * @ignore
 * @access private
 * @since 1.0
 */
function eventorganiser_menu_link($items)
{
    if (eventorganiser_get_option('addtomenu') != '1') {
        return $items;
    }
    $class = 'menu-item menu-item-type-event';
    if (is_post_type_archive('event') || is_singular('event') || eo_is_event_taxonomy()) {
        $class = 'current_page_item';
    }
    $items .= sprintf('<li class="%s"><a href="%s" > %s </a></li>', $class, get_post_type_archive_link('event'), esc_html(eventorganiser_get_option('navtitle')));
    return $items;
}
    function display()
    {
        $plugins = get_plugins();
        $plugin = $plugins['event-organiser/event-organiser.php'];
        ?>
		<div class="wrap">  
			
			<h2> <?php 
        esc_html_e('Event Organiser Extensions', 'eventorganiser');
        ?>
</h2>

			<div class="eo-addon-text">
				<?php 
        echo '<p>' . __('Event Organiser offers a range of extension which add additional features to the plug-in.', 'eventorganiser') . '</p>';
        $settings_link = esc_url(admin_url('options-general.php?page=event-settings'));
        ?>
				<label><input type="checkbox" id="eo-submenu-toggle" <?php 
        checked(eventorganiser_get_option('hide_addon_page'), 1);
        ?>
/>
					<small>Hide this page from the admin menu. You can still access it from <a href="<?php 
        echo $settings_link;
        ?>
"><em><small>Settings > Event Organiser</small></em></a>.</small> 
				</label>
			</div>

			<hr style="color:#CCC;background-color:#CCC;border:0;border-bottom:1px solid #CCC;">
			<?php 
        $addons = self::get_addons();
        if ($addons && !is_wp_error($addons)) {
            echo '<div id="eo-addons-wrap">';
            foreach ($addons as $addon) {
                if (!isset($addon['status']) || !in_array($addon['status'], array('available', 'coming-soon'))) {
                    continue;
                }
                self::print_addon($addon);
            }
            echo '</div>';
        } else {
            ?>
				<div class="error"><p>There was an error retrieving the add-on list from the server. Please try again later.</p></div>
				<?php 
        }
        ?>
			
			<div style="clear:both"></div>

			<p>
			<strong><a href="http://wp-event-organiser.com/extensions?aid=7"><?php 
        _e('Find out more &hellip;', 'eventorganiser');
        ?>
</a></strong>
			</p>
			
		</div><!-- .wrap -->
<?php 
    }
/**
 * Parses event queries and alters the WP_Query object appropriately
 *
 * Parse's the query, and sets date range and other event specific query variables.
 * If query is for 'event' post type - the posts_* filters are added.
 *
 * Hooked onto pre_get_posts
 * @since 1.0.0
 * @access private
 * @ignore
 *
 * @param WP_Query $query The query
 */
function eventorganiser_pre_get_posts($query)
{
    //Deprecated, use event-venue instead.
    if (!empty($query->query_vars['venue'])) {
        $venue = $query->get('venue');
        $query->set('event-venue', $venue);
        $query->set('post_type', 'event');
    }
    //If the query is for eo-events feed, set post type
    if ($query->is_feed('eo-events')) {
        $query->set('post_type', 'event');
    }
    //If querying for all events starting on given date, set the date parameters
    if (!empty($query->query_vars['ondate'])) {
        $ondate_start = str_replace('/', '-', $query->query_vars['ondate']);
        $ondate_end = str_replace('/', '-', $query->query_vars['ondate']);
        $parts = count(explode('-', $ondate_start));
        if ($parts == 1 && is_numeric($ondate_start)) {
            //Numeric - interpret as year
            $ondate_start .= '-01-01';
            $ondate_end .= '-12-31';
        } elseif ($parts == 2) {
            // 2012-01 format: interpret as month
            $ondate_start .= '-01';
            try {
                $end = new DateTime($ondate_start);
                $ondate_end = $end->format('Y-m-t');
            } catch (Exception $e) {
                $query->set('ondate', false);
                break;
            }
        }
        $query->set('post_type', 'event');
        $query->set('event_start_before', $ondate_end);
        $query->set('event_end_after', $ondate_start);
    }
    //If not on event, stop here.
    if (!eventorganiser_is_event_query($query, true)) {
        return $query;
    }
    $blog_now = new DateTime(null, eo_get_blog_timezone());
    //Determine whether or not to show past events and each occurrence. //If not set, use options
    if (!is_admin() && !is_single() && !$query->is_feed('eo-events') && !isset($query->query_vars['showpastevents'])) {
        //If showpastevents is not set - use options (except for admin / single pages.
        $query->set('showpastevents', eventorganiser_get_option('showpast'));
    }
    //Deprecated: showrepeats - use group_events_by instead
    if (isset($query->query_vars['showrepeats']) && !isset($query->query_vars['group_events_by'])) {
        if (!$query->query_vars['showrepeats']) {
            $query->set('group_events_by', 'series');
        }
    }
    //Determine how to group events: by series or show each occurrence
    if (!isset($query->query_vars['group_events_by'])) {
        //Group by isn't set - default depends on context:
        if ($query->is_main_query() && (is_admin() || is_single() || $query->is_feed('eo-events'))) {
            //If in admin or single page - we probably don't want to see duplicates of (recurrent) events - unless specified otherwise.
            $query->set('group_events_by', 'series');
        } elseif (eventorganiser_get_option('group_events') == 'series') {
            //In other instances (archives, shortcode listing) if showrepeats option is false display only the next event.
            $query->set('group_events_by', 'series');
        } else {
            $query->set('group_events_by', 'occurrence');
        }
    }
    //Parse user input as date-time objects
    $date_objs = array('event_start_after' => '', 'event_start_before' => '', 'event_end_after' => '', 'event_end_before' => '');
    foreach ($date_objs as $prop => $value) {
        $date = $query->get($prop);
        try {
            $date = empty($date) ? false : new DateTime($date, eo_get_blog_timezone());
        } catch (Exception $e) {
            $date = false;
        }
        $date_objs[$prop] = $date;
        $query->set($prop, $date);
    }
    //If eo_interval is set, determine date ranges
    if (!empty($query->query_vars['eo_interval'])) {
        switch ($query->get('eo_interval')) {
            case 'expired':
                $meta_query = (array) $query->get('meta_query');
                $meta_query[] = array('key' => '_eventorganiser_schedule_last_finish', 'value' => $blog_now->format('Y-m-d H:i:s'), 'compare' => '<=');
                $query->set('meta_query', $meta_query);
                break;
            case 'future':
                $meta_query = $query->get('meta_query');
                $meta_query = empty($meta_query) ? array() : $meta_query;
                $meta_query[] = array('key' => '_eventorganiser_schedule_last_start', 'value' => $blog_now->format('Y-m-d H:i:s'), 'compare' => '>=');
                $query->set('meta_query', $meta_query);
                break;
            case 'P1D':
            case 'P1W':
            case 'P1M':
            case 'P6M':
            case 'P1Y':
                //I hate you php5.2
                $intervals = array('P1D' => '+1 day', 'P1W' => '+1 week', 'P1M' => '+1 month', 'P6M' => '+6 month', 'P1Y' => '+1 Year');
                $cutoff = clone $blog_now;
                $cutoff->modify($intervals[$query->query_vars['eo_interval']]);
                if (is_admin() && 'series' == $query->get('group_events_by')) {
                    //On admin we want to show the **first** occurrence of a recurring event which has an occurrence in the interval
                    global $wpdb;
                    $post_ids = $wpdb->get_results($wpdb->prepare("SELECT DISTINCT post_id FROM {$wpdb->eo_events}\n\t\t\t\t\t\tWHERE {$wpdb->eo_events}.StartDate <= %s\n\t\t\t\t\t\tAND {$wpdb->eo_events}.EndDate >= %s", $cutoff->format('Y-m-d'), $blog_now->format('Y-m-d')));
                    if ($post_ids) {
                        $query->set('post__in', wp_list_pluck($post_ids, 'post_id'));
                    }
                } else {
                    if (empty($date_objs['event_start_before']) || $cutoff < $date_objs['event_start_before']) {
                        $date_objs['event_start_before'] = $cutoff;
                    }
                    if (empty($date_objs['event_end_after']) || $blog_now > $date_objs['event_end_after']) {
                        $date_objs['event_end_after'] = $blog_now;
                    }
                }
        }
    }
    //Endif interval set
    $running_event_is_past = eventorganiser_get_option('runningisnotpast') ? true : false;
    //Set date range according to whether we show past events
    if (isset($query->query_vars['showpastevents']) && !$query->query_vars['showpastevents']) {
        //Showing only future events
        //Running event is past - Get events which start in the future
        //A current event is not past - Get events which finish in the future
        $key = $running_event_is_past ? 'event_start_after' : 'event_end_after';
        //If current queried date is not set or before now, set the queried date to now
        $date_objs[$key] = empty($date_objs[$key]) || $blog_now > $date_objs[$key] ? $blog_now : $date_objs[$key];
    }
    //Set event dates to 'Y-m-d H:i:s' format.
    foreach ($date_objs as $prop => $datetime) {
        if (!empty($datetime)) {
            $query->set($prop, $datetime->format('Y-m-d H:i:s'));
        }
    }
    if ($query->is_feed('eo-events')) {
        //Posts per page for feeds bug http://core.trac.wordpress.org/ticket/17853
        add_filter('post_limits', 'wp17853_eventorganiser_workaround');
        $query->set('posts_per_page', -1);
    }
    //Add the posts_* filters to modify the query
    add_filter('posts_fields', 'eventorganiser_event_fields', 10, 2);
    add_filter('posts_join', 'eventorganiser_join_tables', 10, 2);
    add_filter('posts_where', 'eventorganiser_events_where', 10, 2);
    add_filter('posts_orderby', 'eventorganiser_sort_events', 10, 2);
    add_filter('posts_groupby', 'eventorganiser_event_groupby', 10, 2);
}
Пример #9
0
/**
 * Toggle visibility of extensionpage.
 *
 *@since 2.3
 *@access private
 *@ignore
*/
function eventorganiser_ajax_toggle_addon_page()
{
    if (!isset($_POST['hide_addon_page']) || !current_user_can('manage_options')) {
        exit;
    }
    $hide = (int) (strtolower($_POST['hide_addon_page']) == 'true');
    $options = eventorganiser_get_option(false);
    $options['hide_addon_page'] = $hide;
    update_option('eventorganiser_options', $options);
    exit(1);
}
Пример #10
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;
}
Пример #11
0
function eventorganiser_posterboard_shortcode_handler($atts = array())
{
    $defaults = array('filters' => '');
    $query = array_diff_key((array) $atts, $defaults);
    $atts = shortcode_atts($defaults, $atts);
    $query = array_merge(array('posts_per_page' => 10), $query);
    //Get template
    ob_start();
    eo_locate_template('single-event-board-item.html', true, false);
    $template = ob_get_contents();
    ob_end_clean();
    //Load & 'localize' script
    if (!eventorganiser_get_option('disable_css')) {
        wp_enqueue_style('eo_posterboard');
    }
    wp_enqueue_script('eo_posterboard');
    wp_localize_script('eo_posterboard', 'eventorganiser_posterboard', array('url' => admin_url('admin-ajax.php'), 'loading' => __('Loading...', 'event-organiser-posterboard'), 'load_more' => __('Load more', 'event-organiser-posterboard'), 'template' => $template, 'query' => $query));
    //Handle filters
    $filters = explode(',', $atts['filters']);
    $filers_markup = '';
    $venues = eo_get_venues();
    $cats = get_terms(array('event-category'), array('hide_empty' => false));
    //'state'/'country'/'city' functions only available in Pro
    $is_pro_active = in_array('event-organiser-pro/event-organiser-pro.php', (array) get_option('active_plugins', array()));
    if ($filters) {
        foreach ($filters as $filter) {
            $filter = strtolower(trim($filter));
            switch ($filter) {
                case 'venue':
                    if ($venues) {
                        foreach ($venues as $venue) {
                            $filers_markup .= sprintf('<a href="#" class="eo-eb-filter eo-eb-filter-venue eo-eb-filter-venue-%1$d" data-filter-type="venue" data-venue="%1$d" data-filter-on="false">%2$s</a>', $venue->term_id, $venue->name);
                        }
                    }
                    break;
                case 'category':
                    if ($cats) {
                        foreach ($cats as $cat) {
                            $filers_markup .= sprintf('<a href="#" class="eo-eb-filter eo-eb-filter-category eo-eb-filter-category-%1$d" data-filter-type="category" data-category="%1$d" data-filter-on="false">%2$s</a>', $cat->term_id, $cat->name);
                        }
                    }
                    $filers_markup .= sprintf('<a href="#" class="eo-eb-filter eo-eb-filter-category eo-eb-filter-category-%1$d" data-filter-type="category" data-category="%1$d" data-filter-on="false">%2$s</a>', 0, __('Uncategorised', 'event-organiser-posterboard'));
                    break;
                case 'city':
                case 'state':
                case 'country':
                    //If Pro isn't active, this won't work
                    if (!$is_pro_active) {
                        break;
                    }
                    if ('city' == $filter) {
                        $terms = eo_get_venue_cities();
                    } elseif ('state' == $filter) {
                        $terms = eo_get_venue_states();
                    } else {
                        $terms = eo_get_venue_countries();
                    }
                    if ($terms) {
                        foreach ($terms as $term) {
                            $filers_markup .= sprintf('<a href="#" class="eo-eb-filter eo-eb-filter-%1$s eo-eb-filter-%1$s-%2$s" data-filter-type="%1$s" data-%1$s="%2$s" data-filter-on="false">%2$s</a>', $filter, $term);
                        }
                    }
                    break;
            }
        }
    }
    return '<div id="event-board">' . '<div id="event-board-filters" data-filters="">' . $filers_markup . '</div>' . '<div id="event-board-items"></div>' . '<div id="event-board-more"></div>' . '</div>';
}
Пример #12
0
/**
 * (Private) Utility function checks a date-time string is formatted correctly (according to the options) 
 * @access private
 * @ignore
 * @since 1.0.0
 * @param datetime_string - a datetime string 
 * @param string $format - Format of the datetime string. One of 'd-m-Y H:i', 'm-d-Y H:i' and 'Y-m-d H:i'.
 * @return int DateTime| false - the parsed datetime string as a DateTime object or false on error (incorrectly formatted for example)
 */
function _eventorganiser_check_datetime($datetime_string = '', $format = null)
{
    if (is_null($format)) {
        $format = eventorganiser_get_option('dateformat');
    }
    //Backwards compatible - can probably remove 2.1+
    if (is_bool($format)) {
        _deprecated_argument('_eventorganiser_check_datetime', '1.8', 'This function no longer accepts a boolean, pass the format of the passed date-time string.');
        if (true === $format) {
            $format = 'Y-m-d';
        } else {
            $format = eventorganiser_get_option('dateformat');
        }
    }
    //Get regular expression.
    if ($format == 'Y-m-d') {
        $reg_exp = "/(?P<year>\\d{4})[-.\\/](?P<month>\\d{1,})[-.\\/](?P<day>\\d{1,}) (?P<hour>\\d{2}):(?P<minute>\\d{2})/";
    } elseif ($format == 'd-m-Y') {
        $reg_exp = "/(?P<day>\\d{1,})[-.\\/](?P<month>\\d{1,})[-.\\/](?P<year>\\d{4}) (?P<hour>\\d{2}):(?P<minute>\\d{2})/";
    } else {
        $reg_exp = "/(?P<month>\\d{1,})[-.\\/](?P<day>\\d{1,})[-.\\/](?P<year>\\d{4}) (?P<hour>\\d{2}):(?P<minute>\\d{2})/";
    }
    if (!preg_match($reg_exp, $datetime_string, $matches)) {
        return false;
    }
    extract(array_map('intval', $matches));
    if (!checkdate($month, $day, $year) || $hour < 0 || $hour > 23 || $minute < 0 || $minute > 59) {
        return false;
    }
    $datetime = new DateTime(null, eo_get_blog_timezone());
    $datetime->setDate($year, $month, $day);
    $datetime->setTime($hour, $minute);
    return $datetime;
}
 public function download_debug_info()
 {
     global $wpdb;
     $installed = get_plugins();
     $active_plugins = array();
     foreach ($installed as $plugin_slug => $plugin_data) {
         if (!is_plugin_active($plugin_slug)) {
             continue;
         }
         $active_plugins[] = $plugin_slug;
     }
     $theme = wp_get_theme();
     $db_tables = array();
     if ($this->db_tables) {
         foreach ($this->db_tables as $db_table) {
             if ($this->table_exists($db_table)) {
                 $db_table = "**" . $db_table . "**";
             }
             $db_tables[] = $db_table;
         }
     }
     $options = array();
     $options['event-organiser'] = eventorganiser_get_option(false);
     /**
      * Settings to include in an export.
      * 
      * These options are included in both the settings export on the settings
      * page and the also printed in the system information file. By default
      * they inlude Event Organiser's options, but others can be added.
      * 
      * The filtered value should be a (2+ dimensional) array, indexed by plugin/
      * extension name.
      * 
      * @param array $options Array of user settings, indexed by plug-in/extension.
      */
     $options = apply_filters('eventorganiser_export_settings', $options);
     $filename = 'event-organiser-system-info-' . get_bloginfo('name') . '.md';
     $filename = sanitize_file_name($filename);
     header("Content-type: text/plain");
     header('Content-disposition: attachment; filename=' . $filename);
     echo '## Event Organiser Sytem Informaton ##' . "\n";
     echo "\n";
     echo "\n";
     echo '### Site Information ###' . "\n";
     echo "\n";
     echo 'Site url' . "\t\t\t" . site_url() . "\n";
     echo 'Home url' . "\t\t\t" . home_url() . "\n";
     echo 'Multisite' . "\t\t\t" . (is_multisite() ? 'Yes' : 'No') . "\n";
     echo 'Permalink' . "\t\t\t" . get_option('permalink_structure') . "\n";
     echo "\n";
     echo "\n";
     echo '### Versions ###' . "\n";
     echo "\n";
     echo 'Event Organiser' . "\t\t" . EVENT_ORGANISER_VER . "\n";
     if ($this->jquery_version) {
         echo 'jQuery Version' . "\t\t" . $this->jquery_version . "\n";
     }
     echo 'WordPress' . "\t\t\t" . get_bloginfo('version') . "\n";
     echo 'PHP Version' . "\t\t\t" . PHP_VERSION . "\n";
     global $wpdb;
     $ver = empty($wpdb->use_mysqli) ? mysql_get_server_info() : mysqli_get_server_info($wpdb->dbh);
     echo 'MySQL Version' . "\t\t" . $ver . "\n";
     echo "\n";
     echo "\n";
     echo '### Server Information ###' . "\n";
     echo "\n";
     echo 'Web Server' . "\t\t\t" . $_SERVER['SERVER_SOFTWARE'] . "\n";
     echo 'PHP Memory Usage' . "\t" . $this->get_memory_usage('percent') . '%' . "\n";
     echo 'PHP Memory Limit' . "\t" . ini_get('memory_limit') . "\n";
     echo 'PHP Upload Max Size' . "\t" . ini_get('post_max_size') . "\n";
     echo 'PHP FSOCKOPEN support' . "\t" . (function_exists('fsockopen') ? 'Yes' : 'No') . "\n";
     echo 'PHP cURL support' . "\t" . (function_exists('curl_init') ? 'Yes' : 'No') . "\n";
     echo 'PHP openSSL support' . "\t" . (function_exists('openssl_verify') ? 'Yes' : 'No') . "\n";
     echo "\n";
     echo "\n";
     echo '### Plug-ins & Themes ###' . "\n";
     echo "\n";
     echo 'Active Plug-ins' . "\n\t-\t" . implode("\n\t-\t", $active_plugins) . "\n";
     echo 'Theme' . "\n\t-\t" . $theme->get('Name') . ' (' . $theme->get('Version') . ')' . "\n";
     echo "\n";
     echo "\n";
     echo '### Database ###' . "\n";
     echo "\n";
     echo "Database Prefix" . "\t\t\t" . $wpdb->prefix . "\n";
     echo "Database tables" . "\t\t\t" . implode(', ', $db_tables) . "\n";
     echo "Database character set" . "\t" . ($this->database_charset_check() ? DB_CHARSET : "**" . DB_CHARSET . "**") . "\n";
     echo "\n";
     echo "\n";
     echo '### Site Settings ###' . "\n";
     echo 'Timezone' . "\t\t\t" . eo_get_blog_timezone()->getName() . sprintf(' ( %s / %s ) ', get_option('gmt_offset'), get_option('timezone_string')) . "\n";
     echo 'WP Cron' . "\t\t\t" . ($this->get_cron_status() == 0 ? 'Disabled' : ($this->get_cron_status() == 1 ? 'Enabled' : 'Alternative ')) . "\n";
     echo 'WP Lang' . "\t\t\t" . (defined('WP_LANG') && WP_LANG ? WP_LANG : 'en_us') . "\n";
     echo 'Date format' . "\t\t" . get_option('date_format') . "\n";
     echo 'Time format' . "\t\t" . get_option('time_format');
     echo "\n";
     echo "\n";
     echo '### Event Organiser Settings ###' . "\n";
     foreach ($options['event-organiser'] as $option => $value) {
         if (is_array($value)) {
             $value = implode(', ', $value);
         }
         echo "\n\t-\t**" . esc_html($option) . ":**\t " . $value;
     }
     echo "\n";
     echo "\n";
     echo '### Debug Mode ###' . "\n";
     echo "\n";
     echo 'Debug mode' . "\t\t\t" . (defined('WP_DEBUG') && WP_DEBUG ? 'Enabled' : 'Disabled') . "\n";
     echo 'Script mode' . "\t\t\t" . (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? 'Enabled' : 'Disabled') . "\n";
     exit;
 }
Пример #14
0
/**
* Sets up the event data metabox
* This allows user to enter date / time, reoccurrence and venue data for the event
* @ignore
* @since 1.0.0
*/
function _eventorganiser_details_metabox($post)
{
    global $wp_locale;
    //Sets the format as php understands it, and textual.
    $phpFormat = eventorganiser_get_option('dateformat');
    if ('d-m-Y' == $phpFormat) {
        $format = 'dd-mm-yyyy';
        //Human form
    } elseif ('Y-m-d' == $phpFormat) {
        $format = 'yyyy-mm-dd';
        //Human form
    } else {
        $format = 'mm-dd-yyyy';
        //Human form
    }
    $is24 = eventorganiser_blog_is_24();
    $time_format = $is24 ? 'H:i' : 'g:ia';
    //Get the starting day of the week
    $start_day = intval(get_option('start_of_week'));
    $ical_days = array('SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA');
    //Retrieve event details
    extract(eo_get_event_schedule($post->ID));
    $venues = eo_get_venues();
    $venue_id = (int) eo_get_venue($post->ID);
    //$sche_once is used to disable date editing unless the user specifically requests it.
    //But a new event might be recurring (via filter), and we don't want to 'lock' new events.
    //See http://wordpress.org/support/topic/wrong-default-in-input-element
    $sche_once = $schedule == 'once' || !empty(get_current_screen()->action);
    if (!$sche_once) {
        $notices = '<strong>' . __('This is a reoccurring event', 'eventorganiser') . '</strong>. ' . __('Check to edit this event and its reoccurrences', 'eventorganiser') . ' <input type="checkbox" id="HWSEvent_rec" name="eo_input[AlterRe]" value="yes">';
    } else {
        $notices = '';
    }
    //Start of meta box
    if ($notices = apply_filters('eventorganiser_event_metabox_notice', $notices, $post)) {
        echo '<div class="updated below-h2"><p>' . $notices . '</p></div>';
    }
    ?>
	<div class="<?php 
    echo $sche_once ? 'onetime' : 'reoccurence';
    ?>
">
		<p><?php 
    printf(__('Ensure dates are entered in %1$s format and times in %2$s (24 hour) format', 'eventorganiser'), '<strong>' . $format . '</strong>', ' <strong>hh:mm</strong>');
    ?>
 </p>

		<table id="eventorganiser_event_detail" class="form-table">
				<tr valign="top"  class="event-date">
					<td class="eo-label"><?php 
    echo __('Start Date/Time', 'eventorganiser') . ':';
    ?>
 </td>
					<td> 
						<input class="ui-widget-content ui-corner-all" name="eo_input[StartDate]" size="10" maxlength="10" id="from_date" <?php 
    disabled(!$sche_once);
    ?>
 value="<?php 
    echo $start->format($phpFormat);
    ?>
"/>
						<?php 
    printf('<input name="eo_input[StartTime]" class="eo_time ui-widget-content ui-corner-all" size="6" maxlength="8" id="HWSEvent_time" %s value="%s"/>', disabled(!$sche_once || $all_day, true, false), eo_format_datetime($start, $time_format));
    ?>
						

					</td>
				</tr>

				<tr valign="top"  class="event-date">
					<td class="eo-label"><?php 
    echo __('End Date/Time', 'eventorganiser') . ':';
    ?>
 </td>
					<td> 
						<input class="ui-widget-content ui-corner-all" name="eo_input[EndDate]" size="10" maxlength="10" id="to_date" <?php 
    disabled(!$sche_once);
    ?>
  value="<?php 
    echo $end->format($phpFormat);
    ?>
"/>
					
						<?php 
    printf('<input name="eo_input[FinishTime]" class="eo_time ui-widget-content ui-corner-all" size="6" maxlength="8" id="HWSEvent_time2" %s value="%s"/>', disabled(!$sche_once || $all_day, true, false), eo_format_datetime($end, $time_format));
    ?>
	

					<label>
					<input type="checkbox" id="eo_allday"  <?php 
    checked($all_day);
    ?>
 name="eo_input[allday]"  <?php 
    disabled(!$sche_once);
    ?>
 value="1"/>
						<?php 
    _e('All day', 'eventorganiser');
    ?>
					 </label>
			
					</td>
				</tr>

				<tr class="event-date">
					<td class="eo-label"><?php 
    _e('Reoccurence:', 'eventorganiser');
    ?>
 </td>
					<td> 
					<?php 
    $reoccurrence_schedules = array('once' => __('once', 'eventorganiser'), 'daily' => __('daily', 'eventorganiser'), 'weekly' => __('weekly', 'eventorganiser'), 'monthly' => __('monthly', 'eventorganiser'), 'yearly' => __('yearly', 'eventorganiser'), 'custom' => __('custom', 'eventorganiser'));
    ?>

					<select id="HWSEventInput_Req" name="eo_input[schedule]">
						<?php 
    foreach ($reoccurrence_schedules as $index => $val) {
        ?>
							<option value="<?php 
        echo $index;
        ?>
" <?php 
        selected($schedule, $index);
        ?>
><?php 
        echo $val;
        ?>
</option>
						<?php 
    }
    //End foreach $allowed_reoccurs
    ?>
					</select>
					</td>
				</tr>

				<tr valign="top"  class="event-date reocurrence_row">
					<td></td>
					<td>
						<p><?php 
    _e('Repeat every', 'eventorganiser');
    ?>
 
						<input <?php 
    disabled(!$sche_once || $all_day);
    ?>
 class="ui-widget-content ui-corner-all" name="eo_input[event_frequency]" id="HWSEvent_freq" type="number" min="1" max="365" maxlength="4" size="4" disabled="disabled" value="<?php 
    echo $frequency;
    ?>
" /> 
						<span id="recpan" >  </span>				
						</p>

						<p id="dayofweekrepeat">
						<?php 
    _e('on', 'eventorganiser');
    ?>
	
						<?php 
    for ($i = 0; $i <= 6; $i++) {
        $d = ($start_day + $i) % 7;
        $ical_d = $ical_days[$d];
        $day = $wp_locale->weekday_abbrev[$wp_locale->weekday[$d]];
        $schedule_days = is_array($schedule_meta) ? $schedule_meta : array();
        ?>
							<input type="checkbox" id="day-<?php 
        echo $day;
        ?>
"  <?php 
        checked(in_array($ical_d, $schedule_days), true);
        ?>
  value="<?php 
        echo esc_attr($ical_d);
        ?>
" class="daysofweek" name="eo_input[days][]" disabled="disabled" />
							<label for="day-<?php 
        echo $day;
        ?>
" > <?php 
        echo $day;
        ?>
</label>
						<?php 
    }
    ?>
						</p>

						<p id="dayofmonthrepeat">
						<label for="bymonthday" >	
							<input type="radio" id="bymonthday" disabled="disabled" name="eo_input[schedule_meta]" <?php 
    checked($occurs_by, 'BYMONTHDAY');
    ?>
 value="BYMONTHDAY=" /> 
							<?php 
    _e('day of month', 'eventorganiser');
    ?>
						</label>
						<label for="byday" >
							<input type="radio" id="byday" disabled="disabled" name="eo_input[schedule_meta]"  <?php 
    checked($occurs_by != 'BYMONTHDAY', true);
    ?>
 value="BYDAY=" /> 
							<?php 
    _e('day of week', 'eventorganiser');
    ?>
						</label>
						</p>

						<p class="reoccurrence_label">
						<?php 
    _e('until', 'eventorganiser');
    ?>
 
						<input <?php 
    disabled(!$sche_once || $all_day);
    ?>
 class="ui-widget-content ui-corner-all" name="eo_input[schedule_end]" id="recend" size="10" maxlength="10" disabled="disabled" value="<?php 
    echo $schedule_last->format($phpFormat);
    ?>
"/>
						</p>

						<p id="event_summary"> </p>
					</td>
				</tr>

				<tr valign="top" id="eo_occurrence_picker_row" class="event-date">
					<td class="eo-label">	
						<?php 
    esc_html_e('Include/Exclude occurrences', 'eventorganiser');
    ?>
					</td>
					<td>
						<?php 
    submit_button(__('Show dates', 'eventorganiser'), 'hide-if-no-js eo_occurrence_toggle button small', 'eo_date_toggle', false);
    ?>
						
						<div id="eo_occurrence_datepicker"></div>
						<?php 
    //var_dump($include);
    if (!empty($include)) {
        $include_str = array_map('eo_format_datetime', $include, array_fill(0, count($include), 'Y-m-d'));
        $include_str = esc_textarea(sanitize_text_field(implode(',', $include_str)));
    } else {
        $include_str = '';
    }
    ?>
						<textarea style="display:none;" name="eo_input[include]" id="eo_occurrence_includes"><?php 
    echo $include_str;
    ?>
</textarea>

						<?php 
    if (!empty($exclude)) {
        $exclude_str = array_map('eo_format_datetime', $exclude, array_fill(0, count($exclude), 'Y-m-d'));
        $exclude_str = esc_textarea(sanitize_text_field(implode(',', $exclude_str)));
    } else {
        $exclude_str = '';
    }
    ?>
						<textarea style="display:none;" name="eo_input[exclude]" id="eo_occurrence_excludes"><?php 
    echo $exclude_str;
    ?>
</textarea>

					</td>
				</tr>
				<tr valign="top" class="eo-venue-combobox-select">
					<td class="eo-label"> <?php 
    _e('Venue', 'eventorganiser');
    ?>
: </td>
					<td> 	
						<select size="50" id="venue_select" name="eo_input[event-venue]">
							<option><?php 
    _e('Select a venue', 'eventorganiser');
    ?>
</option>
							<?php 
    foreach ($venues as $venue) {
        ?>
								<option <?php 
        selected($venue->term_id, $venue_id);
        ?>
 value="<?php 
        echo intval($venue->term_id);
        ?>
"><?php 
        echo esc_html($venue->name);
        ?>
</option>
							<?php 
    }
    ?>
						</select>
					</td>
				</tr>
		
				<!-- Add New Venue --> 
				<tr valign="top" class="eo-add-new-venue">
					<td class="eo-label"><label><?php 
    _e('Venue Name', 'eventorganiser');
    ?>
:</label></td>
					<td><input type="text" name="eo_venue[name]" id="eo_venue_name"  value=""/></td>
				</tr>
			<?php 
    $address_fields = _eventorganiser_get_venue_address_fields();
    foreach ($address_fields as $key => $label) {
        printf('<tr valign="top" class="eo-add-new-venue">
								<td class="eo-label"><label>%1$s:</label></td>
								<td><input type="text" name="eo_venue[%2$s]" class="eo_addressInput" id="eo_venue_add"  value=""/></td>
							</tr>', $label, esc_attr(trim($key, '_')));
    }
    ?>
				<tr valign="top" class="eo-add-new-venue" >
					<td class="eo-label"></td>
					<td>
						<a class="button eo-add-new-venue-cancel" href="#"><?php 
    esc_html_e('Cancel', 'eventorganiser');
    ?>
 </a>
					</td>
				</tr>

				<!-- Venue Map --> 
				<tr valign="top"  class="venue_row <?php 
    if (!$venue_id) {
        echo 'novenue';
    }
    ?>
" >
					<td class="eo-label"></td>
					<td>
						<div id="eventorganiser_venue_meta" style="display:none;">
							<input type="hidden" id="eo_venue_Lat" name="eo_venue[latitude]" value="<?php 
    eo_venue_lat($venue_id);
    ?>
" />
							<input type="hidden" id="eo_venue_Lng" name="eo_venue[longtitude]" value="<?php 
    eo_venue_lng($venue_id);
    ?>
" />
						</div>
						<div id="venuemap" class="ui-widget-content ui-corner-all gmap3"></div>
						<div class="clear"></div>
					</td>
				</tr>
			</table>
		</div>
	<?php 
    // create a custom nonce for submit verification later
    wp_nonce_field('eventorganiser_event_update_' . get_the_ID(), '_eononce');
}
/**
* Returns an array of classes associated with an event. Adds the following classes
* 
*  * `eo-event-venue-[venue slug]` - if the event has a venue
*  * `eo-event-cat-[category slug]` - for each event category the event belongs to. 
*  * `eo-event-[future|past|running]` - depending on occurrence
* 
* Applies filter {@see `eventorganiser_event_classes`} so you can add/remove classes.
* 
* @since 1.6
* @param int $post_id The event (post) ID. Uses current event if empty.
* @param int $occurrence_id The occurrence ID. Uses current event if empty.
* @return array Array of classes
*/
function eo_get_event_classes($post_id = 0, $occurrence_id = 0)
{
    global $post;
    $post_id = (int) (empty($post_id) ? get_the_ID() : $post_id);
    $occurrence_id = (int) (empty($occurrence_id) && isset($post->occurrence_id) ? $post->occurrence_id : $occurrence_id);
    $event_classes = array();
    //Add venue class
    if ($venue_slug = eo_get_venue_slug($post_id)) {
        $event_classes[] = 'eo-event-venue-' . $venue_slug;
    }
    //Add category classes
    $cats = get_the_terms($post_id, 'event-category');
    if ($cats && !is_wp_error($cats)) {
        foreach ($cats as $cat) {
            $event_classes[] = 'eo-event-cat-' . $cat->slug;
        }
    }
    //Event tags
    if (eventorganiser_get_option('eventtag')) {
        $terms = get_the_terms($post_id, 'event-tag');
        if ($terms && !is_wp_error($terms)) {
            foreach ($terms as $term) {
                $event_classes[] = 'eo-event-tag-' . $term->slug;
            }
        }
    }
    //Add 'time' class
    $start = eo_get_the_start(DATETIMEOBJ, $post_id, null, $occurrence_id);
    $end = eo_get_the_end(DATETIMEOBJ, $post_id, null, $occurrence_id);
    $now = new DateTime('now', eo_get_blog_timezone());
    if ($start > $now) {
        $event_classes[] = 'eo-event-future';
    } elseif ($end < $now) {
        $event_classes[] = 'eo-event-past';
    } else {
        $event_classes[] = 'eo-event-running';
    }
    //Add class if event starts and ends on different days
    if ($start instanceof DateTime && $end instanceof DateTime) {
        if ($start->format('Y-m-d') != $end->format('Y-m-d')) {
            $event_classes[] = 'eo-multi-day';
        }
    }
    if (eo_is_all_day($post_id)) {
        $event_classes[] = 'eo-all-day';
    }
    /**
     * Filters an array of classes for specified event (occurrence) 
     *
     * @param array $event_classes An array of class pertaining to this occurrence
     * @param int $post_id The ID of the event
     * @param into $occurrence_id The ID of the occurrence
     */
    $event_classes = apply_filters('eventorganiser_event_classes', $event_classes, $post_id, $occurrence_id);
    $event_classes = array_unique($event_classes);
    $event_classes = array_map('sanitize_html_class', $event_classes);
    $event_classes = array_filter($event_classes);
    return $event_classes;
}
/**
 * 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');
    }
}
    function widget($args, $instance)
    {
        global $wp_locale;
        wp_enqueue_script('eo_front');
        if (!eventorganiser_get_option('disable_css')) {
            wp_enqueue_style('eo_front');
        }
        extract($args, EXTR_SKIP);
        add_action('wp_footer', array(__CLASS__, 'add_options_to_script'));
        $id = esc_attr($args['widget_id']) . '_container';
        self::$agendas[$id] = array('id' => esc_attr($args['widget_id']), 'number' => $this->number, 'mode' => isset($instance['mode']) ? $instance['mode'] : 'day', 'add_to_google' => $instance['add_to_google']);
        //Echo widget
        echo $before_widget;
        $widget_title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base);
        if ($widget_title) {
            echo $before_title . esc_html($widget_title) . $after_title;
        }
        echo "<div style='width:100%' id='{$id}' class='eo-agenda-widget'>";
        ?>
	<div class='agenda-nav'>
		<span class="next button ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only" role="button" title="">
			<span class="ui-button-icon-primary ui-icon ui-icon-carat-1-e"></span><span class="ui-button-text"></span>
		</span>
		<span class="prev button ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only" role="button" title="">
			<span class="ui-button-icon-primary ui-icon ui-icon-carat-1-w"></span><span class="ui-button-text"></span>
		</span>
	</div>
<?php 
        echo "<ul class='dates'>";
        echo '</ul>';
        //End dates
        echo "</div>";
        echo $after_widget;
    }
    function menu_option()
    {
        $menus = get_terms('nav_menu');
        ?>
			<select  name="eventorganiser_options[addtomenu]">
				<option  <?php 
        selected(0, eventorganiser_get_option('addtomenu'));
        ?>
 value="0"><?php 
        _e('Do not add to menu', 'eventorganiser');
        ?>
 </option>
			<?php 
        foreach ($menus as $menu) {
            ?>
				<option  <?php 
            selected($menu->slug, eventorganiser_get_option('addtomenu'));
            ?>
 value="<?php 
            echo $menu->slug;
            ?>
"><?php 
            echo $menu->name;
            ?>
 </option>
			<?php 
        }
        ?>
				<option  <?php 
        selected(1, eventorganiser_get_option('addtomenu'));
        ?>
 value="1"><?php 
        _e('Page list (fallback)', 'eventorganiser');
        ?>
</option>
			</select>

			<?php 
        printf('<input type="hidden" name ="eventorganiser_options[menu_item_db_id]" value="%d" />', eventorganiser_get_option('menu_item_db_id'));
        ?>
			<?php 
        printf('<input type="text" name="eventorganiser_options[navtitle]" value="%s" />', eventorganiser_get_option('navtitle'));
    }
/**
 * Checks to see if appropriate templates are present in active template directory.
 * Otherwises uses templates present in plugin's template directory.
 * Hooked onto template_include'
 *
 * @ignore
 * @since 1.0.0
 * @param string $template Absolute path to template
 * @return string Absolute path to template
 */
function eventorganiser_set_template($template)
{
    //Has EO template handling been turned off?
    if (!eventorganiser_get_option('templates') || get_theme_support('event-organiser')) {
        return $template;
    }
    //If WordPress couldn't find an 'event' template use plug-in instead:
    if (is_post_type_archive('event') && !eventorganiser_is_event_template($template, 'archive')) {
        $template = EVENT_ORGANISER_DIR . 'templates/archive-event.php';
    }
    if ((is_tax('event-venue') || eo_is_venue()) && !eventorganiser_is_event_template($template, 'event-venue')) {
        $template = EVENT_ORGANISER_DIR . 'templates/taxonomy-event-venue.php';
    }
    if (is_tax('event-category') && !eventorganiser_is_event_template($template, 'event-category')) {
        $template = EVENT_ORGANISER_DIR . 'templates/taxonomy-event-category.php';
    }
    if (is_tax('event-tag') && eventorganiser_get_option('eventtag') && !eventorganiser_is_event_template($template, 'event-tag')) {
        $template = EVENT_ORGANISER_DIR . 'templates/taxonomy-event-tag.php';
    }
    /*
     * In view of theme compatibility, if an event template isn't found
     * rather than using our own single-event.php, we use ordinary single.php and
     * add content in via the_content
     */
    if (is_singular('event') && !eventorganiser_is_event_template($template, 'event')) {
        //Viewing a single event
        //Hide next/previous post link
        add_filter("next_post_link", '__return_false');
        add_filter("previous_post_link", '__return_false');
        //Prepend our event details
        add_filter('the_content', '_eventorganiser_single_event_content');
    }
    return $template;
}
 static function print_script()
 {
     if (!self::$add_script) {
         return;
     }
     $terms = get_terms('event-category', array('hide_empty' => 0));
     $fullcal = empty(self::$calendars) ? array() : array('firstDay' => intval(get_option('start_of_week')), 'venues' => get_terms('event-venue', array('hide_empty' => 0)), 'categories' => $terms, 'tags' => get_terms('event-tag', array('hide_empty' => 1)));
     eo_localize_script('eo_front', array('ajaxurl' => admin_url('admin-ajax.php'), 'calendars' => self::$calendars, 'widget_calendars' => self::$widget_calendars, 'fullcal' => $fullcal, 'map' => self::$map));
     if (!empty(self::$calendars) || !empty(self::$map) || !empty(self::$widget_calendars)) {
         wp_enqueue_script('eo_qtip2');
         wp_enqueue_script('eo_front');
         if (!eventorganiser_get_option('disable_css')) {
             wp_enqueue_style('eo_front');
             wp_enqueue_style('eo_calendar-style');
         }
     }
     if (!empty(self::$map)) {
         wp_enqueue_script('eo_GoogleMap');
     }
 }