function my_calendar($name, $format, $category, $time = 'month', $ltype = '', $lvalue = '', $id = 'jd-calendar', $template = '', $content = '', $author = null, $host = null, $above = '', $below = '') { check_my_calendar(); apply_filters("debug", "my_calendar( {$name} ) draw"); $mc_toporder = array('nav', 'toggle', 'jump', 'print', 'timeframe'); $mc_bottomorder = array('key', 'feeds'); if ($above != '' || $below != '') { $aboves = $above == 'none' ? array() : array_map('trim', explode(',', $above)); $belows = $below == 'none' ? array() : array_map('trim', explode(',', $below)); } else { $aboves = $mc_toporder; $belows = $mc_bottomorder; } $used = array_merge($aboves, $belows); if (isset($_GET['format']) && in_array($_GET['format'], array('list', 'mini'))) { $format = esc_attr($_GET['format']); } else { $format = esc_attr($format); } if (isset($_GET['time']) && in_array($_GET['time'], array('day', 'week', 'month')) && $format != 'mini') { $time = esc_attr($_GET['time']); } else { $time = esc_attr($time); } global $wpdb; $mcdb = $wpdb; $offset = 60 * 60 * get_option('gmt_offset'); if (get_option('mc_remote') == 'true' && function_exists('mc_remote_db')) { $mcdb = mc_remote_db(); } $my_calendar_body = ''; /* filter */ if ($time == 'day') { $format = 'list'; } $args = array('name' => $name, 'format' => $format, 'category' => $category, 'above' => $above, 'below' => $below, 'time' => $time, 'ltype' => $ltype, 'lvalue' => $lvalue, 'author' => $author, 'id' => $id); $my_calendar_body .= apply_filters('mc_before_calendar', '', $args); $main_class = $name != '' ? sanitize_title($name) : 'all'; $cid = isset($_GET['cid']) ? esc_attr(strip_tags($_GET['cid'])) : $main_class; // mc body wrapper $mc_wrapper = "<div id=\"{$id}\" class=\"mc-main {$format} {$time} {$main_class}\" aria-live='assertive' aria-atomic='true'>"; $mc_closer = "</div>"; if (get_option('mc_convert') == 'true') { $format = mc_is_mobile() ? 'list' : $format; } $format = apply_filters('mc_display_format', $format, $args); $date_format = get_option('mc_date_format') != '' ? get_option('mc_date_format') : get_option('date_format'); if (isset($_GET['mc_id']) && $format != 'mini') { // single event, main calendar only. $mc_id = (int) $_GET['mc_id']; $my_calendar_body .= mc_get_event($mc_id, 'html'); } else { if ($category == "") { $category = null; } // Deal with the week not starting on a monday $name_days = array(__('<abbr title="Sunday">Sun</abbr>', 'my-calendar'), __('<abbr title="Monday">Mon</abbr>', 'my-calendar'), __('<abbr title="Tuesday">Tues</abbr>', 'my-calendar'), __('<abbr title="Wednesday">Wed</abbr>', 'my-calendar'), __('<abbr title="Thursday">Thur</abbr>', 'my-calendar'), __('<abbr title="Friday">Fri</abbr>', 'my-calendar'), __('<abbr title="Saturday">Sat</abbr>', 'my-calendar')); $abbrevs = array('sun', 'mon', 'tues', 'wed', 'thur', 'fri', 'sat'); if ($format == "mini") { $name_days = array(__('<abbr title="Sunday">S</abbr>', 'my-calendar'), __('<abbr title="Monday">M</abbr>', 'my-calendar'), __('<abbr title="Tuesday">T</abbr>', 'my-calendar'), __('<abbr title="Wednesday">W</abbr>', 'my-calendar'), __('<abbr title="Thursday">T</abbr>', 'my-calendar'), __('<abbr title="Friday">F</abbr>', 'my-calendar'), __('<abbr title="Saturday">S</abbr>', 'my-calendar')); } $start_of_week = get_option('start_of_week') == 1 ? 1 : 7; // convert start of week to ISO 8601 (Monday/Sunday) $end_of_week = $start_of_week == 1 ? 7 : 6; $start_of_week = get_option('mc_show_weekends') == 'true' ? $start_of_week : 1; //$start_of_week = ( $start_of_week==1||$start_of_week==0)?$start_of_week:0; if ($start_of_week == '1') { $first = array_shift($name_days); $afirst = array_shift($abbrevs); $name_days[] = $first; $abbrevs[] = $afirst; } // If we don't pass arguments we want a calendar that is relevant to today (current time period) $c_m = 0; if (isset($_GET['dy']) && $main_class == $cid && ($time == 'day' || $time == 'week')) { // $c_day = (int) $_GET['dy']; } else { if ($time == 'week') { $dm = first_day_of_week(); $c_day = $dm[0]; $c_m = $dm[1]; } else { if ($time == 'day') { $c_day = date("d", time() + $offset); } else { $c_day = 1; } } } if (isset($_GET['month']) && $main_class == $cid) { $c_month = (int) $_GET['month']; if (!isset($_GET['dy'])) { $c_day = 1; } } else { $xnow = date('Y-m-d', time() + $offset); $c_month = $c_m == 0 ? date("m", time() + $offset) : date("m", strtotime($xnow . ' -1 month')); } $is_start_of_week = date('N', current_time('timestamp')) == get_option('start_of_week') ? true : false; if (isset($_GET['yr']) && $main_class == $cid) { $c_year = (int) $_GET['yr']; } else { // weeks suck. seriously. if (date("Y", current_time('timestamp')) == date("Y", strtotime(date('Y-m-d', current_time('timestamp')) . '- 6 days')) || $is_start_of_week) { $c_year = date("Y", current_time('timestamp')); } else { $c_year = date("Y", current_time('timestamp')) - 1; } } // Years get funny if we exceed 3000, so we use this check if (!($c_year <= 3000 && $c_year >= 0)) { // No valid year causes the calendar to default to today $c_year = date("Y", time() + $offset); $c_month = date("m", time() + $offset); $c_day = date("d", time() + $offset); } if (!(isset($_GET['yr']) || isset($_GET['month']) || isset($_GET['dy']))) { $c_year = apply_filters('mc_filter_year', $c_year, $args); $c_month = apply_filters('mc_filter_month', $c_month, $args); $c_day = apply_filters('mc_filter_day', $c_day, $args); } $c_day = $c_day == 0 ? 1 : $c_day; // c_day can't equal 0. $n_month = $c_month + 1 > 12 ? 1 : $c_month + 1; $p_month = $c_month - 1 < 1 ? 12 : $c_month - 1; $current_date = mktime(0, 0, 0, $c_month, $c_day, $c_year); $c_month = str_pad($c_month, 2, '0', STR_PAD_LEFT); $n_month = str_pad($n_month, 2, '0', STR_PAD_LEFT); $p_month = str_pad($p_month, 2, '0', STR_PAD_LEFT); //echo "<p>Debug:<br />Day: $c_day<br />Month: $c_month<br />Year: $c_year<br />Date: ".date('Y-m-d',$current_date)."</p>"; $num = get_option('mc_show_months') - 1; // the value is total months to show; need additional months to show. if ($format == "list" && $time != 'week') { // grid calendar can't show multiple months if ($num > 0 && $time != 'day' && $time != 'week') { $from = date('Y-m-d', mktime(0, 0, 0, $c_month, 1, $c_year)); $next = strtotime("+{$num} months", mktime(0, 0, 0, $c_month, 1, $c_year)); $last = date('t', $next); $to = date('Y-m', $next) . '-' . $last; } else { $from = date('Y-m-d', mktime(0, 0, 0, $c_month, 1, $c_year)); $to = date('Y-m-d', mktime(0, 0, 0, $c_month, date('t', mktime(0, 0, 0, $c_month, 1, $c_year)), $c_year)); } $this_dates = array('from' => $from, 'to' => $to); } else { $this_dates = mc_date_array($current_date, $time, $num); } $from = $this_dates['from']; $to = $this_dates['to']; //echo "<pre>$num $from, $to ($c_month,$c_day,$c_year)</pre>"; apply_filters("debug", "my_calendar( {$name} ) pre get events"); $event_array = my_calendar_events($from, $to, $category, $ltype, $lvalue, 'calendar', $author, $host); $no_events = empty($event_array) ? true : false; apply_filters("debug", "my_calendar( {$name} ) post get events"); // define navigation element strings $timeframe = $nav = $feeds = $jump = $mc_topnav = $mc_bottomnav = ''; // setup print link $add = array('time' => $time, 'ltype' => $ltype, 'lvalue' => $lvalue, 'mcat' => $category, 'yr' => $c_year, 'month' => $c_month, 'dy' => $c_day, 'cid' => 'print'); $subtract = array(); if ($ltype == '') { $subtract[] = 'ltype'; unset($add['ltype']); } if ($lvalue == '') { $subtract[] = 'lvalue'; unset($add['lvalue']); } if ($category == 'all') { $subtract[] = 'mcat'; unset($add['mcat']); } $mc_print_url = mc_build_url($add, $subtract, mc_feed_base() . 'my-calendar-print'); $print = "<div class='mc-print'><a href='{$mc_print_url}'>" . __('Print View', 'my-calendar') . "</a></div>"; // set up format toggle $toggle = in_array('toggle', $used) ? mc_format_toggle($format, 'yes') : ''; // set up time toggle if (in_array('timeframe', $used)) { // if dy parameter not set, use today's date instead of first day of month. if (isset($_GET['dy'])) { $weeks_day = first_day_of_week($current_date); } else { $weeks_day = first_day_of_week(current_time('timestamp')); } $day = $weeks_day[0]; if (isset($_GET['time']) && $_GET['time'] == 'day') { // don't adjust day if viewing day format } else { if ($day > 20) { $day = date('j', strtotime("{$from} + 1 week")); } } $timeframe = mc_time_toggle($format, $time, 'yes', $day, $c_month, $c_year); } // set up category key $key = in_array('key', $used) ? my_category_key($category) : ''; // set up navigation links if (in_array('nav', $used)) { $pLink = my_calendar_prev_link($c_year, $c_month, $c_day, $format, $time); $nLink = my_calendar_next_link($c_year, $c_month, $c_day, $format, $time); $prevLink = mc_build_url(array('yr' => $pLink['yr'], 'month' => $pLink['month'], 'dy' => $pLink['day'], 'cid' => $main_class), array()); $nextLink = mc_build_url(array('yr' => $nLink['yr'], 'month' => $nLink['month'], 'dy' => $nLink['day'], 'cid' => $main_class), array()); $previous_link = apply_filters('mc_previous_link', ' <li class="my-calendar-prev"><a href="' . $prevLink . '" rel="' . $id . '">' . $pLink['label'] . '</a></li>', $pLink); $next_link = apply_filters('mc_next_link', ' <li class="my-calendar-next"><a href="' . $nextLink . '" rel="' . $id . '">' . $nLink['label'] . '</a></li>', $nLink); $nav = ' <div class="my-calendar-nav"> <ul> ' . $previous_link . ' ' . $next_link . ' </ul> </div>'; } // set up rss feeds if ($format != 'mini') { $ical_m = isset($_GET['month']) ? (int) $_GET['month'] : date('n'); $ical_y = isset($_GET['yr']) ? (int) $_GET['yr'] : date('Y'); $feeds = mc_rss_links($ical_y, $ical_m, $nLink); } // set up date switcher if (in_array('jump', $used)) { $jump = $time != 'week' && $time != 'day' ? mc_build_date_switcher($format, $main_class) : ''; } // set up above-calendar order of fields if (get_option('mc_topnav') != '') { $mc_toporder = explode(',', get_option('mc_topnav')); } if ($above != '') { $mc_toporder = explode(',', $above); } foreach ($mc_toporder as $value) { if ($value != 'none') { $value = trim($value); $mc_topnav .= ${$value}; } } if ($mc_topnav != '') { $mc_topnav = '<div class="my-calendar-header">' . $mc_topnav . '</div>'; } if (get_option('mc_bottomnav') != '') { $mc_bottomorder = explode(',', get_option('mc_bottomnav')); } if ($below != '') { $mc_bottomorder = explode(',', $below); } foreach ($mc_bottomorder as $value) { if ($value != 'none' && $value != 'stop') { $value = trim($value); $mc_bottomnav .= ${$value}; } } if ($mc_bottomnav != '') { $mc_bottomnav = "<div class='mc_bottomnav'>{$mc_bottomnav}</div>"; } if ($time == 'day') { apply_filters("debug", "my_calendar( {$name} ) pre single-day parsing"); $my_calendar_body .= "<div class='mc-main {$format} {$time}'>" . $mc_topnav; // single day uses independent cycling. $dayclass = strtolower(date_i18n('D', mktime(0, 0, 0, $c_month, $c_day, $c_year))); $from = $to = "{$c_year}-{$c_month}-{$c_day}"; //echo "<p>Debug: $from, $to, $category, $ltype, $lvalue, $author</p>"; $events = my_calendar_grab_events($from, $to, $category, $ltype, $lvalue, 'calendar', $author, $host); if (!get_option('mc_skip_holidays_category') || get_option('mc_skip_holidays_category') == '') { $holidays = array(); } else { $holidays = my_calendar_grab_events($from, $to, get_option('mc_skip_holidays_category'), $ltype, $lvalue, 'calendar', $author, $host, 'holidays'); } //echo "<pre>".print_r($events,1)."</pre>"; $events_class = mc_events_class($events); $dateclass = mc_dateclass(time() + $offset, mktime(0, 0, 0, $c_month, $c_day, $c_year)); $mc_events = ''; if (is_array($events) && count($events) > 0) { if (is_array($holidays) && count($holidays) > 0) { $mc_events .= my_calendar_draw_events($holidays, $format, $from, $time, $template); } else { $mc_events .= my_calendar_draw_events($events, $format, $from, $time, $template); } } else { $mc_events .= __('No events scheduled for today!', 'my-calendar'); } $heading_level = apply_filters('mc_heading_level', 'h3', $format, $time, $template); $my_calendar_body .= "\n\t\t\t\t<{$heading_level} class='mc-single'>" . date_i18n(apply_filters('mc_date_format', $date_format, 'grid'), strtotime("{$c_year}-{$c_month}-{$c_day}")) . "</{$heading_level}>" . ' <div id="mc-day" class="' . $dayclass . ' ' . $dateclass . ' ' . $events_class . '">' . "{$mc_events}\n</div>\n\t\t\t</div>"; apply_filters("debug", "my_calendar( {$name} ) post single-day parsing"); } else { apply_filters("debug", "my_calendar( {$name} ) pre full parsing"); // if showing multiple months, figure out how far we're going. $num_months = $time == 'week' ? 1 : get_option('mc_show_months'); $through_date = mktime(0, 0, 0, $c_month + ($num_months - 1), $c_day, $c_year); $month_format = get_option('mc_month_format') == '' ? 'F Y' : get_option('mc_month_format'); $current_date_header = date_i18n($month_format, $current_date); $current_month_header = date('Y', $current_date) == date('Y', $through_date) ? date_i18n('F', $current_date) : date_i18n('F Y', $current_date); $through_month_header = date_i18n($month_format, $through_date); // Adjust the days of the week if week start is not Monday $and = __("and", 'my-calendar'); $category_label = $category != "" && $category != "all" ? str_replace("|", " {$and} ", $category) . ' ' : ''; // Add the calendar table and heading $caption_text = ' ' . stripslashes(trim(get_option('mc_caption'))); // this option should be replaced JCD TODO $my_calendar_body .= $mc_topnav; if ($format == "calendar" || $format == "mini") { $my_calendar_body .= "\n<table class=\"my-calendar-table\">\n"; $values = array('date' => date('Y-m-d', $current_date)); $week_template = get_option('mc_week_caption') != '' ? get_option('mc_week_caption') : 'Week of {date format="M jS"}'; $week_caption = jd_draw_template($values, stripslashes($week_template)); $caption_heading = $time != 'week' ? $current_date_header . $caption_text : $week_caption . $caption_text; $my_calendar_body .= "<caption class=\"my-calendar-{$time}\">" . $caption_heading . "</caption>\n"; } else { // determine which header text to show depending on number of months displayed; if ($time != 'week' && $time != 'day') { $list_heading = $num_months <= 1 ? __('Events in', 'my-calendar') . ' ' . $current_date_header . $caption_text . "\n" : $current_month_header . '–' . $through_month_header . $caption_text; } else { $values = array('date' => date('Y-m-d', $current_date)); $list_heading = jd_draw_template($values, stripslashes(get_option('mc_week_caption'))); } $my_calendar_body .= "<h3 class=\"my-calendar-{$time}\">{$list_heading}</h3>\n"; } // If not a valid time or layout format, skip. if (in_array($format, array('calendar', 'mini', 'list')) && in_array($time, array('day', 'week', 'month'))) { // If in a calendar format, print the headings of the days of the week if ($format == "list") { if ($id == 'jd-calendar') { $list_id = 'calendar-list'; } else { $list_id = "list-{$id}"; } $my_calendar_body .= "<ul id='{$list_id}' class='mc-list'>"; } else { $my_calendar_body .= "<thead>\n<tr>\n"; for ($i = 0; $i <= 6; $i++) { if ($start_of_week == 0) { $class = $i < 6 && $i > 0 ? 'day-heading' : 'weekend-heading'; } else { $class = $i < 5 ? 'day-heading' : 'weekend-heading'; } $dayclass = strtolower(strip_tags($abbrevs[$i])); if ($class == 'weekend-heading' && get_option('mc_show_weekends') == 'true' || $class != 'weekend-heading') { $my_calendar_body .= "<th scope='col' class='{$class} {$dayclass}'>" . $name_days[$i] . "</th>\n"; } } $my_calendar_body .= "\n</tr>\n</thead>\n<tbody>"; } $odd = 'odd'; // get and display all the events $show_all = false; // show all dates in list format. if ($no_events && $format == "list" && $show_all == false) { // if there are no events in list format, just display that info. $no_events = $content == '' ? __('There are no events scheduled during this period.', 'my-calendar') : $content; $my_calendar_body .= "<li class='no-events'>{$no_events}</li>"; } else { $start = strtotime($from); $end = strtotime($to); do { $date = date('Y-m-d', $start); $enddate = date('Y-m-d', $end); $is_weekend = date('N', $start) < 6 ? false : true; if (get_option('mc_show_weekends') == 'true' || get_option('mc_show_weekends') != 'true' && !$is_weekend) { if (date('N', $start) == $start_of_week && $format != "list") { $my_calendar_body .= "<tr>"; } // date-based classes $monthclass = date('n', $start) == $c_month || $time != 'month' ? '' : 'nextmonth'; $dateclass = mc_dateclass(time() + $offset, $start); $dayclass = strtolower(date_i18n('D', $start)); $week_format = get_option('mc_week_format') == '' ? 'M j, \'y' : get_option('mc_week_format'); $week_date_format = date_i18n($week_format, $start); $thisday_heading = $time == 'week' ? "<small>{$week_date_format}</small>" : date('j', $start); $events = isset($event_array[$date]) ? $event_array[$date] : array(); if (!empty($events)) { $event_output = my_calendar_draw_events($events, $format, $date, $time, $template); if ($event_output === true) { $event_output = ' '; } $events_class = $event_output != '' ? mc_events_class($events) : 'no-events'; if ($format == 'mini' && $event_output != '') { if (get_option('mc_open_day_uri') == 'true' || get_option('mc_open_day_uri') == 'false') { // yes, this is weird. it's from some old settings... $target = array('yr' => date('Y', $start), 'month' => date('m', $start), 'dy' => date('j', $start), 'time' => 'day'); if ($category != '') { $target['mcat'] = $category; } $day_url = mc_build_url($target, array('month', 'dy', 'yr', 'ltype', 'loc', 'mcat', 'cid', 'mc_id'), apply_filters('mc_modify_day_uri', get_option('mc_uri'))); $link = get_option('mc_uri') != '' && !is_numeric(get_option('mc_uri')) ? $day_url : '#'; } else { $atype = str_replace('anchor', '', get_option('mc_open_day_uri')); $ad = str_pad(date('j', $start), 2, '0', STR_PAD_LEFT); // need to match format in ID $am = str_pad($c_month, 2, '0', STR_PAD_LEFT); $date_url = mc_build_url(array('yr' => $c_year, 'month' => $c_month, 'dy' => date('j', $start)), array('month', 'dy', 'yr', 'ltype', 'loc', 'mcat', 'cid', 'mc_id'), get_option('mc_mini_uri')); $link = get_option('mc_mini_uri') != '' ? $date_url . '#' . $atype . '-' . $c_year . '-' . $am . '-' . $ad : '#'; } $element = "a href='{$link}'"; $close = 'a'; $trigger = 'trigger'; } else { $element = 'span'; $close = 'span'; $trigger = ''; } // set up events if ($is_weekend && get_option('mc_show_weekends') == 'true' || !$is_weekend) { $weekend_class = $is_weekend ? 'weekend' : ''; if ($format == "list") { if (get_option('mc_list_javascript') != 1) { $is_anchor = "<a href='#'>"; $is_close_anchor = "</a>"; } else { $is_anchor = $is_close_anchor = ""; } if (get_option('mc_show_list_info') == 'true') { $title = ' - ' . $is_anchor . mc_list_title($events) . $is_close_anchor; } else { $title = ''; } //if ( $monthclass != 'nextmonth' ) { // only show current month in list view. if ($event_output != '') { $my_calendar_body .= "\n\t\t\t\t\t\t\t\t\t\t\t\t<li id='{$format}-{$date}' class='mc-events {$dayclass} {$dateclass} {$events_class} {$odd}'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<strong class=\"event-date\">{$is_anchor}" . date_i18n(apply_filters('mc_date_format', $date_format, 'list'), $start) . "{$is_close_anchor}" . "{$title}</strong>" . $event_output . "\n\t\t\t\t\t\t\t\t\t\t\t\t</li>"; $odd = $odd == 'odd' ? 'even' : 'odd'; } //} } else { $my_calendar_body .= "\n\t\t\t\t\t\t\t\t\t\t\t\t<td id='{$format}-{$date}' class='{$dayclass} {$dateclass} {$weekend_class} {$monthclass} {$events_class} day-with-date'>" . "\n\t\t\t\t\t\t\t\t\t\t\t\t\t<{$element} class='mc-date {$trigger}'>{$thisday_heading}</{$close}>" . $event_output . "\n\t\t\t\t\t\t\t\t\t\t\t\t</td>\n"; } } } else { // set up no events if ($format != "list") { $weekend_class = $is_weekend ? 'weekend' : ''; $my_calendar_body .= "\n\t\t\t\t\t\t\t\t\t\t\t\t<td class='no-events {$dayclass} {$dateclass} {$weekend_class} {$monthclass} day-with-date'>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class='mc-date no-events'>{$thisday_heading}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</td>\n"; } else { if ($show_all == true) { $my_calendar_body .= "\n\t\t\t\t\t\t\t\t\t\t\t<li id='{$format}-{$date}' class='no-events {$dayclass} {$dateclass} {$events_class} {$odd}'>\n\t\t\t\t\t\t\t\t\t\t\t\t<strong class=\"event-date\">{$is_anchor}" . date_i18n($date_format, $start) . "{$is_close_anchor}</strong></li>"; $odd = $odd == 'odd' ? 'even' : 'odd'; } } } if (date('N', $start) == $end_of_week && $format != "list") { $my_calendar_body .= "</tr>\n"; // end of 'is beginning of week' } } $start = strtotime("+1 day", $start); } while ($start <= $end); } $my_calendar_body .= $format == "list" ? "\n</ul>" : "\n</tbody>\n</table>"; } else { if (!in_array($format, array('list', 'calendar', 'mini'))) { $my_calendar_body .= "<p class='mc-error-format'>" . __("Unrecognized calendar format. Please use one of 'list', 'calendar', or 'mini'.", 'my-calendar') . "</p>"; } if (!in_array($time, array('day', 'week', 'month'))) { $my_calendar_body .= "<p class='mc-error-time'>" . __("Unrecognized calendar time period. Please use one of 'day', 'week', or 'month'.", 'my-calendar') . "</p>"; } } $my_calendar_body .= $mc_bottomnav; apply_filters("debug", "my_calendar( {$name} ) post full parsing"); } } // The actual printing is done by the shortcode function. $my_calendar_body .= apply_filters('mc_after_calendar', '', $args); apply_filters("debug", "my_calendar( {$name} ) draw completed"); return $mc_wrapper . apply_filters('my_calendar_body', $my_calendar_body) . $mc_closer; }
function my_calendar_generate_vcal($event_id) { global $mc_version; $mc_id = (int) str_replace('mc_', '', $_GET['vcal']); $event = mc_get_event($mc_id, 'object'); // need to modify date values to match real values using date above $array = mc_create_tags($event); $template = "BEGIN:VCALENDAR\nVERSION:2.0\nMETHOD:PUBLISH\nPRODID:-//Accessible Web Design//My Calendar//http://www.joedolson.com//v{$mc_version}//EN';\nBEGIN:VEVENT\nUID:{dateid}-{id}\nLOCATION:{ical_location}\nSUMMARY:{title}\nDTSTAMP:{ical_start}\nORGANIZER;CN={host}:MAILTO:{host_email}\nDTSTART:{ical_start}\nDTEND:{ical_end}\nCATEGORIES:{category}\nURL;VALUE=URI:{link}\nDESCRIPTION;ENCODING=QUOTED-PRINTABLE:{ical_desc}\nEND:VEVENT\nEND:VCALENDAR"; $template = apply_filters('mc_single_ical_template', $template, $array); $output = jd_draw_template($array, $template); return $output; }
function mc_standard_datetime_input($form, $has_data, $data, $instance, $context = 'admin') { if ($has_data) { $event_begin = esc_attr($data->event_begin); $event_end = esc_attr($data->event_end); if (isset($_GET['date'])) { $event = mc_get_event((int) $_GET['date']); $event_begin = date('Y-m-d', strtotime($event->occur_begin)); $event_end = date('Y-m-d', strtotime($event->occur_end)); if ($event_begin == $event_end) { $event_end = ''; } } $starttime = mc_is_all_day($data) ? '' : date("h:i A", strtotime($data->event_time)); $endtime = mc_is_all_day($data) ? '' : date("h:i A", strtotime($data->event_endtime)); } else { $event_begin = date("Y-m-d"); $event_end = $starttime = $endtime = ''; } $allday = $hide = ''; if ($has_data && mc_is_all_day($data)) { $allday = " checked=\"checked\""; } if ($has_data && $data->event_hide_end == '1') { $hide = " checked=\"checked\""; } if ($has_data) { $allday_label = mc_notime_label($data); } else { $allday_label = get_option('mc_notime_text'); } $form .= '<p> <label for="e_begin" id="eblabel">' . __('Date (YYYY-MM-DD)', 'my-calendar') . '</label> <input type="text" id="e_begin" class="mc-datepicker" name="event_begin[]" size="10" value="" data-value="' . esc_attr($event_begin) . '" /> <label for="e_time">' . __('From', 'my-calendar') . '</label> <input type="text" id="e_time" class="mc-timepicker" name="event_time[]" size="8" value="' . esc_attr($starttime) . '" /> <label for="e_endtime">' . __('To', 'my-calendar') . '</label> <input type="text" id="e_endtime" class="mc-timepicker" name="event_endtime[]" size="8" value="' . esc_attr($endtime) . '" /> </p> <ul> <li><input type="checkbox" value="1" id="e_allday" name="event_allday"' . $allday . ' /> <label for="e_allday">' . __('All day event', 'my-calendar') . '</label> <span class="event_time_label"><label for="e_time_label">' . __('Time label:', 'my-calendar') . '</label> <input type="text" name="event_time_label" id="e_time_label" value="' . esc_attr($allday_label) . '" /> </li> <li><input type="checkbox" value="1" id="e_hide_end" name="event_hide_end"' . $hide . ' /> <label for="e_hide_end">' . __('Hide end time', 'my-calendar') . '</label></li> </ul> <p> <label for="e_end" id="eelabel"><em>' . __('End Date (YYYY-MM-DD, optional)', 'my-calendar') . '</em></label> <input type="text" name="event_end[]" id="e_end" class="mc-datepicker" size="10" value="" data-value="' . esc_attr($event_end) . '" /> </p>'; return $form; }
function mc_get_details_link($event) { if (is_numeric($event)) { $event = mc_get_event($event); } // if available, and not querying remotely, use permalink. $permalinks = apply_filters('mc_use_permalinks', get_option('mc_use_permalinks')); $permalinks = $permalinks === 1 || $permalinks === true || $permalinks === 'true' ? true : false; $details_link = mc_event_link($event); if ($event->event_post != 0 && get_option('mc_remote') != 'true' && $permalinks) { $details_link = add_query_arg('mc_id', $event->occur_id, get_permalink($event->event_post)); } else { if (get_option('mc_uri') != '' && _mc_is_url(get_option('mc_uri'))) { $details_link = mc_build_url(array('mc_id' => $event->occur_id), array('month', 'dy', 'yr', 'ltype', 'loc', 'mcat', 'format', 'feed', 'page_id', 'p', 'mcs', 'time', 'page'), get_option('mc_uri')); } } return apply_filters('mc_customize_details_link', $details_link, $event); }
function mc_event_filter($title, $sep = ' | ', $seplocation = 'right') { if (isset($_GET['mc_id'])) { $id = (int) $_GET['mc_id']; $event = mc_get_event($id); $array = mc_create_tags($event); $left_sep = $seplocation != 'right' ? ' ' . $sep . ' ' : ''; $right_sep = $seplocation != 'right' ? '' : ' ' . $sep . ' '; $template = get_option('mc_event_title_template') != '' ? stripslashes(get_option('mc_event_title_template')) : "{$left_sep} {title} {$sep} {date} {$right_sep} "; return strip_tags(jd_draw_template($array, $template)); } else { return $title; } }
function my_calendar($name, $format, $category, $time = 'month', $ltype = '', $lvalue = '', $id = '', $template = '', $content = '', $author = null, $host = null, $above = '', $below = '', $syear = false, $smonth = false, $sday = false, $source = 'shortcode', $site = false) { if ($site) { $site = $site == 'global' ? BLOG_ID_CURRENT_SITE : $site; switch_to_blog($site); } check_my_calendar(); // category key needs to receive the original category settings. $original_category = $category; $category = isset($_GET['mcat']) ? (int) $_GET['mcat'] : $category; $mc_toporder = array('nav', 'toggle', 'jump', 'print', 'timeframe'); $mc_bottomorder = array('key', 'feeds'); if ($above != '' || $below != '') { $aboves = $above == 'none' ? array() : array_map('trim', explode(',', $above)); $belows = $below == 'none' ? array() : array_map('trim', explode(',', $below)); } else { $aboves = $mc_toporder; $belows = $mc_bottomorder; } $used = array_merge($aboves, $belows); if (isset($_GET['format']) && in_array($_GET['format'], array('list', 'mini')) && $format != 'mini') { $format = esc_attr($_GET['format']); } else { $format = esc_attr($format); } if (isset($_GET['time']) && in_array($_GET['time'], array('day', 'week', 'month', 'month+1')) && $format != 'mini') { $time = esc_attr($_GET['time']); } else { $time = esc_attr($time); } $offset = 60 * 60 * get_option('gmt_offset'); $my_calendar_body = ''; /* filter */ if ($time == 'day') { $format = 'list'; } $args = array('name' => $name, 'format' => $format, 'category' => $category, 'above' => $above, 'below' => $below, 'time' => $time, 'ltype' => $ltype, 'lvalue' => $lvalue, 'author' => $author, 'id' => $id, 'above' => $above, 'below' => $below, 'host' => $host, 'syear' => $syear, 'smonth' => $smonth, 'sday' => $sday); // args used in Md5 hash cannot include 'time' or 'format', since those can be changed by navigation. $hash_args = array('name' => $name, 'category' => $category, 'above' => $above, 'below' => $below, 'ltype' => $ltype, 'lvalue' => $lvalue, 'author' => $author, 'id' => $id, 'above' => $above, 'below' => $below, 'host' => $host, 'syear' => $syear, 'smonth' => $smonth, 'sday' => $sday); $hash = md5(implode(',', $hash_args)); $my_calendar_body .= apply_filters('mc_before_calendar', '', $args); $id = !$id ? "mc-{$hash}" : $id; $main_class = $id != '' ? sanitize_title($id) : 'all'; $cid = isset($_GET['cid']) ? esc_attr(strip_tags($_GET['cid'])) : $main_class; if (get_option('mc_convert') == 'true') { $format = mc_is_mobile() && $format == 'calendar' ? 'list' : $format; } else { if (get_option('mc_convert') == 'mini') { $format = mc_is_mobile() ? 'mini' : $format; } } $format = apply_filters('mc_display_format', $format, $args); // mc body wrapper $mc_wrapper = "<div id=\"{$id}\" class=\"mc-main {$format} {$time} {$main_class}\" aria-live='assertive' aria-atomic='true'>"; $mc_closer = "</div>"; $date_format = get_option('mc_date_format') != '' ? get_option('mc_date_format') : get_option('date_format'); if (isset($_GET['mc_id']) && $source != 'widget') { // single event, main calendar only. $mc_id = is_numeric($_GET['mc_id']) ? $_GET['mc_id'] : false; if ($mc_id) { $my_calendar_body .= mc_get_event($mc_id, 'html'); } } else { if ($category == "") { $category = 'all'; } // Deal with the week not starting on a monday $name_days = array("<abbr title='" . date_i18n('l', strtotime('Sunday')) . "' aria-hidden='true'>" . date_i18n('D', strtotime('Sunday')) . "</abbr><span class='screen-reader-text'>" . date_i18n('l', strtotime('Sunday')) . "</span>", "<abbr title='" . date_i18n('l', strtotime('Monday')) . "' aria-hidden='true'>" . date_i18n('D', strtotime('Monday')) . "</abbr><span class='screen-reader-text'>" . date_i18n('l', strtotime('Monday')) . "</span>", "<abbr title='" . date_i18n('l', strtotime('Tuesday')) . "' aria-hidden='true'>" . date_i18n('D', strtotime('Tuesday')) . "</abbr><span class='screen-reader-text'>" . date_i18n('l', strtotime('Tuesday')) . "</span>", "<abbr title='" . date_i18n('l', strtotime('Wednesday')) . "' aria-hidden='true'>" . date_i18n('D', strtotime('Wednesday')) . "</abbr><span class='screen-reader-text'>" . date_i18n('l', strtotime('Wednesday')) . "</span>", "<abbr title='" . date_i18n('l', strtotime('Thursday')) . "' aria-hidden='true'>" . date_i18n('D', strtotime('Thursday')) . "</abbr><span class='screen-reader-text'>" . date_i18n('l', strtotime('Thursday')) . "</span>", "<abbr title='" . date_i18n('l', strtotime('Friday')) . "' aria-hidden='true'>" . date_i18n('D', strtotime('Friday')) . "</abbr><span class='screen-reader-text'>" . date_i18n('l', strtotime('Friday')) . "</span>", "<abbr title='" . date_i18n('l', strtotime('Saturday')) . "' aria-hidden='true'>" . date_i18n('D', strtotime('Saturday')) . "</abbr><span class='screen-reader-text'>" . date_i18n('l', strtotime('Saturday')) . "</span>"); $abbrevs = array('sun', 'mon', 'tues', 'wed', 'thur', 'fri', 'sat'); if ($format == 'mini') { // PHP doesn't have a single letter abbreviation, so this has to be a translatable. $name_days = array("<span aria-hidden='true'>" . __('<abbr title="Sunday">S</abbr>', 'my-calendar') . "</span><span class='screen-reader-text'>" . date_i18n('l', strtotime('Sunday')) . "</span>", "<span aria-hidden='true'>" . __('<abbr title="Monday">M</abbr>', 'my-calendar') . "</span><span class='screen-reader-text'>" . date_i18n('l', strtotime('Monday')) . "</span>", "<span aria-hidden='true'>" . __('<abbr title="Tuesday">T</abbr>', 'my-calendar') . "</span><span class='screen-reader-text'>" . date_i18n('l', strtotime('Tuesday')) . "</span>", "<span aria-hidden='true'>" . __('<abbr title="Wednesday">W</abbr>', 'my-calendar') . "</span><span class='screen-reader-text'>" . date_i18n('l', strtotime('Wednesday')) . "</span>", "<span aria-hidden='true'>" . __('<abbr title="Thursday">T</abbr>', 'my-calendar') . "</span><span class='screen-reader-text'>" . date_i18n('l', strtotime('Thursday')) . "</span>", "<span aria-hidden='true'>" . __('<abbr title="Friday">F</abbr>', 'my-calendar') . "</span><span class='screen-reader-text'>" . date_i18n('l', strtotime('Friday')) . "</span>", "<span aria-hidden='true'>" . __('<abbr title="Saturday">S</abbr>', 'my-calendar') . "</span><span class='screen-reader-text'>" . date_i18n('l', strtotime('Saturday')) . "</span>"); } $start_of_week = get_option('start_of_week') == 1 ? 1 : 7; // convert start of week to ISO 8601 (Monday/Sunday) $end_of_week = $start_of_week == 1 ? 7 : 6; $start_of_week = get_option('mc_show_weekends') == 'true' ? $start_of_week : 1; //$start_of_week = ( $start_of_week==1||$start_of_week==0)?$start_of_week:0; if ($start_of_week == '1') { $first = array_shift($name_days); $afirst = array_shift($abbrevs); $name_days[] = $first; $abbrevs[] = $afirst; } // If we don't pass arguments we want a calendar that is relevant to today (current time period) $c_m = 0; if (isset($_GET['dy']) && $main_class == $cid && ($time == 'day' || $time == 'week')) { // $c_day = (int) $_GET['dy']; } else { if ($time == 'week') { $dm = first_day_of_week(); $c_day = $dm[0]; $c_m = $dm[1]; } else { if ($time == 'day') { $c_day = date("d", time() + $offset); } else { $c_day = 1; } } } if (isset($_GET['month']) && $main_class == $cid) { $c_month = (int) $_GET['month']; if (!isset($_GET['dy'])) { $c_day = 1; } } else { $xnow = date('Y-m-d', time() + $offset); $c_month = $c_m == 0 ? date("m", time() + $offset) : date("m", strtotime($xnow . ' -1 month')); } $is_start_of_week = date('N', current_time('timestamp')) == get_option('start_of_week') ? true : false; if (isset($_GET['yr']) && $main_class == $cid) { $c_year = (int) $_GET['yr']; } else { // weeks suck. seriously. if ($time == 'week' && !isset($_GET['dy'])) { if ($is_start_of_week) { $c_year = date("Y", current_time('timestamp')); } else { $current_year = date('Y', current_time('timestamp')); $c_year = $dm[1] == 0 ? $current_year : false; if (!$c_year) { $c_year = date('Y', strtotime('-1 month')) == $current_year ? $current_year : $current_year - 1; } } } else { $c_year = date("Y", current_time('timestamp')); } } // Years get funny if we exceed 3000, so we use this check if (!($c_year <= 3000 && $c_year >= 0)) { // No valid year causes the calendar to default to today $c_year = date("Y", time() + $offset); $c_month = date("m", time() + $offset); $c_day = date("d", time() + $offset); } if (!(isset($_GET['yr']) || isset($_GET['month']) || isset($_GET['dy']))) { // month/year based on shortcode $shortcode_month = $smonth != false ? $smonth : $c_month; $shortcode_year = $syear != false ? $syear : $c_year; $shortcode_day = $sday != false ? $sday : $c_day; // override with filters $c_year = apply_filters('mc_filter_year', $shortcode_year, $args); $c_month = apply_filters('mc_filter_month', $shortcode_month, $args); $c_day = apply_filters('mc_filter_day', $shortcode_day, $args); } $c_day = $c_day == 0 ? 1 : $c_day; // c_day can't equal 0. $current_date = mktime(0, 0, 0, $c_month, $c_day, $c_year); $c_month = str_pad($c_month, 2, '0', STR_PAD_LEFT); $mc_show_months = apply_filters('mc_show_months', get_option('mc_show_months'), $args); $num = $mc_show_months - 1; // the value is total months to show; need additional months to show. if ($format == "list" && $time != 'week') { // grid calendar can't show multiple months if ($num > 0 && $time != 'day' && $time != 'week') { // grid calendar date calculation if ($time == 'month+1') { $from = date('Y-m-d', strtotime('+1 month', mktime(0, 0, 0, $c_month, 1, $c_year))); $next = strtotime("+{$num} months", strtotime('+1 month', mktime(0, 0, 0, $c_month, 1, $c_year))); } else { $from = date('Y-m-d', mktime(0, 0, 0, $c_month, 1, $c_year)); $next = strtotime("+{$num} months", mktime(0, 0, 0, $c_month, 1, $c_year)); } $last = date('t', $next); $to = date('Y-m', $next) . '-' . $last; } else { $from = date('Y-m-d', mktime(0, 0, 0, $c_month, 1, $c_year)); $to = date('Y-m-d', mktime(0, 0, 0, $c_month, date('t', mktime(0, 0, 0, $c_month, 1, $c_year)), $c_year)); } $this_dates = array('from' => $from, 'to' => $to); } else { $this_dates = mc_date_array($current_date, $time); } $from = apply_filters('mc_from_date', $this_dates['from']); $to = apply_filters('mc_to_date', $this_dates['to']); $event_array = my_calendar_events($from, $to, $category, $ltype, $lvalue, 'calendar', $author, $host, '', $site); $no_events = empty($event_array) ? true : false; // define navigation element strings // These variables are used by reference {$value} $timeframe = $print = $toggle = $nav = $feeds = $jump = $mc_topnav = $mc_bottomnav = ''; // setup print link $add = array('time' => $time, 'ltype' => $ltype, 'lvalue' => $lvalue, 'mcat' => $category, 'yr' => $c_year, 'month' => $c_month, 'dy' => $c_day, 'href' => urlencode(mc_get_current_url())); $subtract = array(); if ($ltype == '') { $subtract[] = 'ltype'; unset($add['ltype']); } if ($lvalue == '') { $subtract[] = 'lvalue'; unset($add['lvalue']); } if ($category == 'all') { $subtract[] = 'mcat'; unset($add['mcat']); } $print_add = array_merge($add, array('cid' => 'mc-print-view')); $mc_print_url = mc_build_url($print_add, $subtract, home_url()); $print = "<div class='mc-print'><a href='{$mc_print_url}'>" . __('Print<span class="maybe-hide"> View</span>', 'my-calendar') . "</a></div>"; // set up format toggle $toggle = in_array('toggle', $used) ? mc_format_toggle($format, 'yes', $time) : ''; // set up time toggle if (in_array('timeframe', $used)) { // if dy parameter not set, use today's date instead of first day of month. if (isset($_GET['dy'])) { $current_day = absint($_GET['dy']); $current_set = mktime(0, 0, 0, $c_month, $current_day, $c_year); if (date('N', $current_set) == $start_of_week) { $weeks_day = first_day_of_week($current_set); } else { $weeks_day = first_day_of_week($current_date); } } else { $weeks_day = first_day_of_week(current_time('timestamp')); } $day = $weeks_day[0]; if (isset($_GET['time']) && $_GET['time'] == 'day') { // don't adjust day if viewing day format } else { if (!isset($_GET['dy']) && $day > 20) { $day = date('j', strtotime("{$from} + 1 week")); } } $timeframe = mc_time_toggle($format, $time, 'yes', $day, $c_month, $c_year); } // set up category key $key = in_array('key', $used) ? my_category_key($original_category) : ''; // set up navigation links if (in_array('nav', $used)) { $pLink = my_calendar_prev_link($c_year, $c_month, $c_day, $format, $time, $mc_show_months); $nLink = my_calendar_next_link($c_year, $c_month, $c_day, $format, $time, $mc_show_months); $prevLink = mc_build_url(array('yr' => $pLink['yr'], 'month' => $pLink['month'], 'dy' => $pLink['day'], 'cid' => $main_class), array()); $nextLink = mc_build_url(array('yr' => $nLink['yr'], 'month' => $nLink['month'], 'dy' => $nLink['day'], 'cid' => $main_class), array()); $previous_link = apply_filters('mc_previous_link', '<li class="my-calendar-prev"><a href="' . $prevLink . '" rel="nofollow" data-rel="' . $id . '">' . $pLink['label'] . '</a></li>', $pLink); $next_link = apply_filters('mc_next_link', '<li class="my-calendar-next"><a href="' . $nextLink . '" rel="nofollow" data-rel="' . $id . '">' . $nLink['label'] . '</a></li>', $nLink); $nav = ' <div class="my-calendar-nav"> <ul> ' . $previous_link . $next_link . ' </ul> </div>'; } // set up rss feeds if (in_array('feeds', $used)) { $ical_m = isset($_GET['month']) ? (int) $_GET['month'] : date('n'); $ical_y = isset($_GET['yr']) ? (int) $_GET['yr'] : date('Y'); if (!isset($nLink)) { $nLink = my_calendar_next_link($c_year, $c_month, $c_day, $format, $time, $mc_show_months); } $feeds = mc_rss_links($ical_y, $ical_m, $nLink, $add, $subtract); } // set up date switcher if (in_array('jump', $used)) { $jump = $time != 'week' ? mc_build_date_switcher($format, $main_class, $time) : ''; } // set up above-calendar order of fields if (get_option('mc_topnav') != '') { $mc_toporder = explode(',', get_option('mc_topnav')); } if ($above != '') { $mc_toporder = explode(',', $above); } foreach ($mc_toporder as $value) { if ($value != 'none' && in_array($value, $used)) { $value = trim($value); $mc_topnav .= @${$value}; } } if ($mc_topnav != '') { $mc_topnav = '<div class="my-calendar-header">' . $mc_topnav . '</div>'; } if (get_option('mc_bottomnav') != '') { $mc_bottomorder = explode(',', get_option('mc_bottomnav')); } if ($below != '') { $mc_bottomorder = explode(',', $below); } foreach ($mc_bottomorder as $value) { if ($value != 'none' && $value != 'stop' && in_array($value, $used)) { $value = trim($value); $mc_bottomnav .= @${$value}; } } if ($mc_bottomnav != '') { $mc_bottomnav = "<div class='mc_bottomnav'>{$mc_bottomnav}</div>"; } if ($time == 'day') { $my_calendar_body .= "<div class='mc-main {$format} {$time}'>" . $mc_topnav; // single day uses independent cycling. $dayclass = strtolower(date('D', mktime(0, 0, 0, $c_month, $c_day, $c_year))); $from = $to = "{$c_year}-{$c_month}-{$c_day}"; //echo "<p>Debug: $from, $to, $category, $ltype, $lvalue, $author</p>"; $events = my_calendar_grab_events($from, $to, $category, $ltype, $lvalue, 'calendar', $author, $host, null, '', $site); if (!get_option('mc_skip_holidays_category') || get_option('mc_skip_holidays_category') == '') { $holidays = array(); } else { $holidays = my_calendar_grab_events($from, $to, get_option('mc_skip_holidays_category'), $ltype, $lvalue, 'calendar', $author, $host, 'holidays', '', $site); } $events_class = mc_events_class($events, $from); $dateclass = mc_dateclass(time() + $offset, mktime(0, 0, 0, $c_month, $c_day, $c_year)); $mc_events = ''; if (is_array($events) && count($events) > 0) { if (is_array($holidays) && count($holidays) > 0) { $mc_events .= my_calendar_draw_events($holidays, $format, $from, $time, $template); } else { $mc_events .= my_calendar_draw_events($events, $format, $from, $time, $template); } } else { $mc_events .= __('No events scheduled for today!', 'my-calendar'); } $hl = apply_filters('mc_heading_level', 'h3', $format, $time, $template); $datetime = date_i18n(apply_filters('mc_date_format', $date_format, $format, $time), strtotime("{$c_year}-{$c_month}-{$c_day}")); $my_calendar_body .= "\r\n\t\t\t\t<{$hl} class='mc-single'>" . apply_filters('mc_heading', $datetime, $format, $time) . "</{$hl}>" . ' <div id="mc-day" class="' . esc_attr($dayclass . ' ' . $dateclass . ' ' . $events_class) . '">' . "{$mc_events}\n</div>\r\n\t\t\t</div>"; } else { // if showing multiple months, figure out how far we're going. $num_months = $time == 'week' ? 1 : $mc_show_months; $through_date = mktime(0, 0, 0, $c_month + ($num_months - 1), $c_day, $c_year); $month_format = get_option('mc_month_format') == '' ? 'F Y' : get_option('mc_month_format'); if ($time == 'month+1') { $current_date_header = date_i18n($month_format, strtotime('+1 month', $current_date)); } else { $current_date_header = date_i18n($month_format, $current_date); } $current_month_header = date('Y', $current_date) == date('Y', $through_date) ? date_i18n('F', $current_date) : date_i18n('F Y', $current_date); $through_month_header = date_i18n($month_format, $through_date); $values = array('date' => date('Y-m-d', $current_date)); // Add the calendar table and heading $caption_text = ' ' . stripslashes(trim(get_option('mc_caption'))); $my_calendar_body .= $mc_topnav; if ($format == "calendar" || $format == "mini") { $table = apply_filters('mc_grid_wrapper', 'table', $format); $my_calendar_body .= "\n<{$table} class=\"my-calendar-table\">\n"; $week_template = get_option('mc_week_caption') != '' ? get_option('mc_week_caption') : 'Week of {date format="M jS"}'; $week_caption = jd_draw_template($values, stripslashes($week_template)); $caption_heading = $time != 'week' ? $current_date_header . $caption_text : $week_caption . $caption_text; $caption = apply_filters('mc_grid_caption', 'caption', $format); $my_calendar_body .= "<{$caption} class=\"heading my-calendar-{$time}\">" . $caption_heading . "</{$caption}>\n"; } else { // determine which header text to show depending on number of months displayed; if ($time != 'week' && $time != 'day') { $list_heading = $num_months <= 1 ? $current_date_header . $caption_text . "\n" : $current_month_header . '–' . $through_month_header . $caption_text; $list_heading = sprintf(__('Events in %s', 'my-calendar'), $list_heading); } else { $list_heading = jd_draw_template($values, stripslashes(get_option('mc_week_caption'))); } $h2 = apply_filters('mc_list_header_level', 'h2'); $my_calendar_body .= "<{$h2} class=\"heading my-calendar-{$time}\">{$list_heading}</{$h2}>\n"; } // If not a valid time or layout format, skip. if (in_array($format, array('calendar', 'mini', 'list')) && in_array($time, array('day', 'week', 'month', 'month+1'))) { $tr = apply_filters('mc_grid_week_wrapper', 'tr', $format); $th = apply_filters('mc_grid_header_wrapper', 'th', $format); $close_th = $th == 'th' ? 'th' : $th; $th .= $th == 'th' ? ' scope="col"' : ''; // If in a calendar format, print the headings of the days of the week if ($format == "list") { $my_calendar_body .= "<ul id='list-{$id}' class='mc-list'>"; } else { $my_calendar_body .= $tr == 'tr' ? "<thead>\n" : '<div class="mc-table-body">'; $my_calendar_body .= "<{$tr} class='mc-row'>\n"; for ($i = 0; $i <= 6; $i++) { if ($start_of_week == 0) { $class = $i < 6 && $i > 0 ? 'day-heading' : 'weekend-heading'; } else { $class = $i < 5 ? 'day-heading' : 'weekend-heading'; } $dayclass = strtolower(strip_tags($abbrevs[$i])); if ($class == 'weekend-heading' && get_option('mc_show_weekends') == 'true' || $class != 'weekend-heading') { $my_calendar_body .= "<{$th} class='{$class} {$dayclass}'>" . $name_days[$i] . "</{$close_th}>\n"; } } $my_calendar_body .= "\n</{$tr}>\n"; $my_calendar_body .= $tr == 'tr' ? "</thead>\n<tbody>" : ''; } $odd = 'odd'; // get and display all the events $show_all = false; // show all dates in list format. if ($no_events && $format == "list" && $show_all == false) { // if there are no events in list format, just display that info. $no_events = $content == '' ? __('There are no events scheduled during this period.', 'my-calendar') : $content; $my_calendar_body .= "<li class='mc-events no-events'>{$no_events}</li>"; } else { $start = strtotime($from); $end = strtotime($to); do { $date = date('Y-m-d', $start); $is_weekend = date('N', $start) < 6 ? false : true; if (get_option('mc_show_weekends') == 'true' || get_option('mc_show_weekends') != 'true' && !$is_weekend) { if (date('N', $start) == $start_of_week && $format != "list") { $my_calendar_body .= "<{$tr} class='mc-row'>"; } // date-based classes $monthclass = date('n', $start) == $c_month || $time != 'month' ? '' : 'nextmonth'; $dateclass = mc_dateclass(time() + $offset, $start); $dayclass = strtolower(date_i18n('D', $start)); $week_format = get_option('mc_week_format') == '' ? 'M j, \'y' : get_option('mc_week_format'); $week_date_format = date_i18n($week_format, $start); $thisday_heading = $time == 'week' ? "<small>{$week_date_format}</small>" : date('j', $start); $events = isset($event_array[$date]) ? $event_array[$date] : array(); $events_class = mc_events_class($events, $date); if (get_option('mc_list_javascript') != 1) { $is_anchor = "<button type='button' class='mc-text-button'>"; $is_close_anchor = "</button>"; } else { $is_anchor = $is_close_anchor = ""; } $td = apply_filters('mc_grid_day_wrapper', 'td', $format); if (!empty($events)) { $hide_nextmonth = apply_filters('mc_hide_nextmonth', false); if ($hide_nextmonth == true && $monthclass == 'nextmonth') { $event_output = ' '; } else { $event_output = my_calendar_draw_events($events, $format, $date, $time, $template); } if ($event_output === true) { $event_output = ' '; } if ($format == 'mini' && $event_output != '') { if (get_option('mc_open_day_uri') == 'true' || get_option('mc_open_day_uri') == 'false') { // yes, this is weird. it's from some old settings... $target = array('yr' => date('Y', $start), 'month' => date('m', $start), 'dy' => date('j', $start), 'time' => 'day'); if ($category != '') { $target['mcat'] = $category; } $day_url = mc_build_url($target, array('month', 'dy', 'yr', 'ltype', 'loc', 'mcat', 'cid', 'mc_id'), apply_filters('mc_modify_day_uri', get_option('mc_uri'))); $link = get_option('mc_uri') != '' && !is_numeric(get_option('mc_uri')) ? $day_url : '#'; } else { $atype = str_replace('anchor', '', get_option('mc_open_day_uri')); $ad = str_pad(date('j', $start), 2, '0', STR_PAD_LEFT); // need to match format in ID $am = str_pad($c_month, 2, '0', STR_PAD_LEFT); $date_url = mc_build_url(array('yr' => $c_year, 'month' => $c_month, 'dy' => date('j', $start)), array('month', 'dy', 'yr', 'ltype', 'loc', 'mcat', 'cid', 'mc_id'), get_option('mc_mini_uri')); $link = esc_url(get_option('mc_mini_uri') != '' ? $date_url . '#' . $atype . '-' . $c_year . '-' . $am . '-' . $ad : '#'); } $element = "a href='{$link}'"; $close = 'a'; $trigger = 'trigger'; } else { $element = 'span'; $close = 'span'; $trigger = ''; } // set up events if ($is_weekend && get_option('mc_show_weekends') == 'true' || !$is_weekend) { $weekend_class = $is_weekend ? 'weekend' : ''; if ($format == "list") { if (get_option('mc_show_list_info') == 'true') { $title = ' - ' . $is_anchor . "<span class='mc-list-details'>" . mc_list_title($events) . "</span>" . $is_close_anchor; } else { $title = ''; } if ($event_output != '') { $my_calendar_body .= "\r\n\t\t\t\t\t\t\t\t\t\t\t\t<li id='{$format}-{$date}' class='mc-events " . esc_attr("{$dayclass} {$dateclass} {$events_class} {$odd}") . "'>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<strong class=\"event-date\">{$is_anchor}" . date_i18n(apply_filters('mc_date_format', $date_format, 'list'), $start) . "{$is_close_anchor}" . "{$title}</strong>" . $event_output . "\r\n\t\t\t\t\t\t\t\t\t\t\t\t</li>"; $odd = $odd == 'odd' ? 'even' : 'odd'; } } else { $my_calendar_body .= "\r\n\t\t\t\t\t\t\t\t\t\t\t\t<{$td} id='{$format}-{$date}' class='" . esc_attr("{$dayclass} {$dateclass} {$weekend_class} {$monthclass} {$events_class}") . " day-with-date'>" . "\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<{$element} class='mc-date {$trigger}'><span aria-hidden='true'>{$thisday_heading}</span><span class='screen-reader-text'>" . date_i18n(get_option('mc_date_format'), strtotime($date)) . "</span></{$close}>" . $event_output . "\r\n\t\t\t\t\t\t\t\t\t\t\t\t</{$td}>\n"; } } } else { // set up no events if ($format != "list") { $weekend_class = $is_weekend ? 'weekend' : ''; $my_calendar_body .= "\r\n\t\t\t\t\t\t\t\t\t\t\t\t<{$td} class='no-events {$dayclass} {$dateclass} {$weekend_class} {$monthclass} day-with-date'>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class='mc-date no-events'><span aria-hidden='true'>{$thisday_heading}</span><span class='screen-reader-text'>" . date_i18n(get_option('mc_date_format'), strtotime($date)) . "</span></span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</{$td}>\n"; } else { if ($show_all == true) { $my_calendar_body .= "\r\n\t\t\t\t\t\t\t\t\t\t\t<li id='{$format}-{$date}' class='no-events {$dayclass} {$dateclass} {$events_class} {$odd}'>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<strong class=\"event-date\">{$is_anchor}" . date_i18n($date_format, $start) . "{$is_close_anchor}</strong></li>"; $odd = $odd == 'odd' ? 'even' : 'odd'; } } } if (date('N', $start) == $end_of_week && $format != "list") { $my_calendar_body .= "</{$tr}>\n"; // end of 'is beginning of week' } } $start = strtotime("+1 day", $start); } while ($start <= $end); } $table = apply_filters('mc_grid_wrapper', 'table', $format); $end = $table == 'table' ? "\n</tbody>\n</table>" : "</div></{$table}>"; $my_calendar_body .= $format == "list" ? "\n</ul>" : $end; } else { // only show error message if user has permissions if (current_user_can('manage_options')) { if (!in_array($format, array('list', 'calendar', 'mini'))) { $yours = sprintf(esc_html__("Your format: %s", 'my-calendar'), $format); $my_calendar_body .= "<p class='mc-error-format'>" . __("Unrecognized calendar format. Please use one of 'list', 'calendar', or 'mini'.", 'my-calendar') . "{$yours}</p>"; } if (!in_array($time, array('day', 'week', 'month', 'month+1'))) { $yours = sprintf(esc_html__("Your time period: %s", 'my-calendar'), $time); $my_calendar_body .= "<p class='mc-error-time'>" . __("Unrecognized calendar time period. Please use one of 'day', 'week', or 'month'.", 'my-calendar') . "{$yours}</p>"; } } } $my_calendar_body .= $mc_bottomnav; } } // The actual printing is done by the shortcode function. $my_calendar_body .= apply_filters('mc_after_calendar', '', $args); if ($site) { restore_current_blog(); } return $mc_wrapper . apply_filters('my_calendar_body', $my_calendar_body) . $mc_closer; }
function mc_standard_datetime_input($form, $has_data, $data, $instance, $context = 'admin') { if ($has_data) { $event_begin = esc_attr($data->event_begin); $event_end = esc_attr($data->event_end); if (isset($_GET['date'])) { $event = mc_get_event((int) $_GET['date']); $event_begin = date('Y-m-d', strtotime($event->occur_begin)); $event_end = date('Y-m-d', strtotime($event->occur_end)); if ($event_begin == $event_end) { $event_end = ''; } } $starttime = $data->event_time == "00:00:00" && $data->event_endtime == "00:00:00" ? '' : date("h:i A", strtotime($data->event_time)); $endtime = $data->event_endtime == "00:00:00" && $data->event_time == "00:00:00" ? '' : date("h:i A", strtotime($data->event_endtime)); } else { $event_begin = date("Y-m-d"); $event_end = $starttime = $endtime = ''; } $allday = $hide = ''; if ($has_data && ($data->event_time == '00:00:00' && $data->event_endtime == '00:00:00')) { $allday = " checked=\"checked\""; } if ($has_data && $data->event_hide_end == '1') { $hide = " checked=\"checked\""; } $scripting = ' <script type="text/javascript"> //<![CDATA[ jQuery(document).ready(function($) { $("#e_time").pickatime({ interval: 15, format: "' . apply_filters('mc_time_format', 'h:i A') . '", editable: true }); $("#e_endtime").pickatime({ interval: 15, format: "' . apply_filters('mc_time_format', 'h:i A') . '", editable: true }); }); //]]> </script>'; $form .= $scripting; $form .= '<p> <label for="e_begin" id="eblabel">' . __('Date (YYYY-MM-DD)', 'my-calendar') . '</label> <input type="text" id="e_begin" name="event_begin[]" size="10" value="" data-value="' . $event_begin . '" /> <label for="e_time">' . __('From', 'my-calendar') . '</label> <input type="text" id="e_time" name="event_time[]" size="8" value="' . $starttime . '" /> <label for="e_endtime">' . __('To', 'my-calendar') . '</label> <input type="text" id="e_endtime" name="event_endtime[]" size="8" value="' . $endtime . '" /> </p> <ul> <li><input type="checkbox" value="1" id="e_allday" name="event_allday"' . $allday . ' /> <label for="e_allday">' . __('All day event', 'my-calendar') . '</label> </li> <li><input type="checkbox" value="1" id="e_hide_end" name="event_hide_end"' . $hide . ' /> <label for="e_hide_end">' . __('Hide end time', 'my-calendar') . '</label></li> </ul> <p> <label for="e_end" id="eelabel"><em>' . __('End Date (YYYY-MM-DD, optional)', 'my-calendar') . '</em></label> <input type="text" name="event_end[]" id="e_end" size="10" value="" data-value="' . $event_end . '" /> </p>'; return $form; }