/**
 * Allows event-venue terms to be sorted by address, city, state, country, or postcode (on venue admin table)
 * Hooked onto terms_clauses
 *
 * @ignore
 * @access private
 * @since 1.5
 */
function eventorganiser_join_venue_meta($pieces, $taxonomies, $args)
{
    global $wpdb;
    if (!in_array('event-venue', $taxonomies)) {
        return $pieces;
    }
    /* Order by */
    $address_keys = array_keys(_eventorganiser_get_venue_address_fields());
    if (in_array('_' . $args['orderby'], $address_keys)) {
        $meta_key = '_' . $args['orderby'];
    } else {
        $meta_key = false;
    }
    if (false === $meta_key) {
        return $pieces;
    }
    $sql = get_meta_sql(array(array('key' => $meta_key)), 'eo_venue', 't', 'term_id');
    $pieces['join'] .= $sql['join'];
    $pieces['where'] .= $sql['where'];
    $pieces['orderby'] = "ORDER BY {$wpdb->eo_venuemeta}.meta_value";
    return $pieces;
}
function eventorganiser_venue_admin_columns($columns)
{
    $tax = get_taxonomy('event-venue');
    $columns = array('cb' => '<input type="checkbox" />', 'name' => esc_html($tax->labels->singular_name));
    $address_columns = _eventorganiser_get_venue_address_fields();
    foreach ($address_columns as $key => $label) {
        $columns['venue' . $key] = $label;
    }
    $columns += array('venue_slug' => __('Slug'), 'posts' => __('Events', 'eventorganiser'));
    return $columns;
}
/**
 * Sanitizes (or validates) the metadata (expects raw) before being inserted into the databse.
 * 
 * @since 1.4.0
 * @access private
 * @ignore
 * @param string The key of the meta data
 * @param mixed The meta data being validated.
 * @return mixed The validated value. False if the key is not recognised.
 */
function eventorganiser_sanitize_meta($key, $value)
{
    switch ($key) {
        case '_description':
            $value = wp_filter_post_kses($value);
            break;
        case '_lat':
        case '_lng':
            //Cast as float and then string: make sure string uses . not , for decimal point
            $value = floatval($value);
            $value = number_format($value, 6);
            break;
        default:
            $address_keys = _eventorganiser_get_venue_address_fields();
            if (isset($address_keys[$key])) {
                $value = sanitize_text_field($value);
            } else {
                $value = false;
            }
    }
    return $value;
}
Exemple #4
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 https://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
    /**
     * Filters the notice at the top of the event details metabox.
     * 
     * @param string  $notices The message text.
     * @param WP_Post $post    The corresponding event (post).
     */
    $notices = apply_filters('eventorganiser_event_metabox_notice', $notices, $post);
    if ($notices) {
        echo '<div class="updated below-h2"><p>' . $notices . '</p></div>';
    }
    ?>
	<div class="<?php 
    echo $sche_once ? 'onetime' : 'reoccurence';
    ?>
">
		<p>
		<?php 
    if ($is24) {
        printf(__('Ensure dates are entered in %1$s format and times in 24 hour format', 'eventorganiser'), '<strong>' . $format . '</strong>');
    } else {
        printf(__('Ensure dates are entered in %1$s format and times in 12 hour format', 'eventorganiser'), '<strong>' . $format . '</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 $until->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>
				<?php 
    $tax = get_taxonomy('event-venue');
    if (taxonomy_exists('event-venue')) {
        ?>
		
					
						<tr valign="top" class="eo-venue-combobox-select">
							<td class="eo-label"> <?php 
        echo esc_html($tax->labels->singular_name_colon);
        ?>
 </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>
				<?php 
    }
    //endif venue's supported
    ?>
			</table>
		</div>
	<?php 
    // create a custom nonce for submit verification later
    wp_nonce_field('eventorganiser_event_update_' . get_the_ID() . '_' . get_current_blog_id(), '_eononce');
}
function eventorganiser_venue_admin_columns($columns)
{
    $columns = array('cb' => '<input type="checkbox" />', 'name' => __('Venue', 'eventorganiser'));
    $address_columns = _eventorganiser_get_venue_address_fields();
    foreach ($address_columns as $key => $label) {
        $columns['venue' . $key] = $label;
    }
    $columns += array('venue_slug' => __('Slug'), 'posts' => __('Events', 'eventorganiser'));
    return $columns;
}