function my_event_email($details, $event, $type, $time) { if (my_calendar_date_xcomp($event->occur_end, date('Y-m-d', current_time('timestamp')))) { $data = mc_create_tags($event); // this is just a sample template; you'd want to customize it. $details = jd_draw_template($data, '<h2>{title}</h2>{image}'); } return $details; }
function my_calendar_ical() { $p = isset($_GET['span']) ? 'year' : false; $y = isset($_GET['yr']) ? $_GET['yr'] : date('Y'); $m = isset($_GET['month']) ? $_GET['month'] : date('n'); $ny = isset($_GET['nyr']) ? $_GET['nyr'] : $y; $nm = isset($_GET['nmonth']) ? $_GET['nmonth'] : $m; if ($p) { $from = "{$y}-1-1"; $to = "{$y}-12-31"; } else { $d = date('t', mktime(0, 0, 0, $m, 1, $y)); $from = "{$y}-{$m}-1"; $to = "{$ny}-{$nm}-{$d}"; } $from = apply_filters('mc_ical_download_from', $from, $p); $to = apply_filters('mc_ical_download_to', $to, $p); $atts = array('category' => null, 'ltype' => '', 'lvalue' => '', 'source' => 'calendar', 'author' => null, 'host' => null); $atts = apply_filters('mc_ical_attributes', $atts); extract($atts); global $mc_version; // establish template $template = "BEGIN:VEVENT\nUID:{dateid}-{id}\nLOCATION:{ical_location}\nSUMMARY:{title}\nDTSTAMP:{ical_start}\nORGANIZER;CN={host}:MAILTO:{host_email}\nDTSTART:{ical_start}\nDTEND:{ical_end}\nURL;VALUE=URI:{link}\nDESCRIPTION:{ical_desc}\nCATEGORIES:{category}\nEND:VEVENT"; // add ICAL headers $output = 'BEGIN:VCALENDAR VERSION:2.0 METHOD:PUBLISH PRODID:-//Accessible Web Design//My Calendar//http://www.joedolson.com//v' . $mc_version . '//EN'; // to do : add support for other arguments $events = my_calendar_grab_events($from, $to); if (is_array($events) && !empty($events)) { foreach (array_keys($events) as $key) { $event =& $events[$key]; if (is_object($event)) { if (!($event->category_private == 1 && !is_user_logged_in())) { $array = mc_create_tags($event); $output .= "\n" . jd_draw_template($array, $template, 'ical'); } } } } $output .= "\nEND:VCALENDAR"; $output = html_entity_decode(preg_replace("~(?<!\r)\n~", "\r\n", $output)); if (!(isset($_GET['sync']) && $_GET['sync'] == 'true')) { header("Content-Type: text/calendar; charset=" . get_bloginfo('charset')); header("Pragma: no-cache"); header("Expires: 0"); header("Content-Disposition: inline; filename=my-calendar.ics"); } echo $output; }
function mc_format_rss($events) { $template = "\n<item>\n\t\t<title>{rss_title}</title>\n\t\t<link>{details_link}</link>\n\t\t<pubDate>{rssdate}</pubDate>\n\t\t<dc:creator>{author}</dc:creator> \t\n\t\t<description><![CDATA[{rss_description}]]></description>\n\t\t<date>{dtstart}</date>\n\t\t<dateSubmitted>{rssdate}</dateSubmitted>\n\t\t<content:encoded><![CDATA[<div class='vevent'>\n\t\t<h1 class='summary'>{rss_title}</h1>\n\t\t<div class='description'>{rss_description}</div>\n\t\t<p class='dtstart' title='{ical_start}'>Begins: {time} on {date}</p>\n\t\t<p class='dtend' title='{ical_end}'>Ends: {endtime} on {enddate}</p>\t\n\t\t<p>Recurrance: {recurs}</p>\n\t\t<p>Repetition: {repeats} times</p>\n\t\t<div class='location'>{rss_hcard}</div>\n\t\t{rss_link_title}\n\t\t</div>]]></content:encoded>\n\t\t<dc:format xmlns:dc='http://purl.org/dc/elements/1.1/'>text/html</dc:format>\n\t\t<dc:source xmlns:dc='http://purl.org/dc/elements/1.1/'>" . home_url() . "</dc:source>\t\n\t\t{guid}\n\t </item>\n"; $charset = get_bloginfo('charset'); $output = '<?xml version="1.0" encoding="' . $charset . '"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" > <channel> <title>' . get_bloginfo('name') . ' Calendar</title> <link>' . home_url() . '</link> <description>' . get_bloginfo('description') . ': My Calendar Events</description> <language>' . get_bloginfo('language') . '</language> <managingEditor>' . get_bloginfo('admin_email') . ' (' . get_bloginfo('name') . ' Admin)</managingEditor> <generator>My Calendar WordPress Plugin http://www.joedolson.com/articles/my-calendar/</generator> <lastBuildDate>' . mysql2date('D, d M Y H:i:s +0000', current_time('timestamp')) . '</lastBuildDate> <atom:link href="' . htmlentities(add_query_arg($_GET, mc_get_current_url())) . '" rel="self" type="application/rss+xml" />'; foreach ($events as $date) { foreach (array_keys($date) as $key) { $event =& $date[$key]; $array = mc_create_tags($event); $output .= jd_draw_template($array, $template, 'rss'); } } $output .= '</channel> </rss>'; return mc_strip_to_xml($output); }
function my_calendar_send_email($event) { $details = mc_create_tags($event); // shift to boolean $send_email_option = get_option('mc_event_mail') == 'true' ? true : false; $send_email = apply_filters('mc_send_notification', $send_email_option, $details); if ($send_email == true) { add_filter('wp_mail_content_type', create_function('', 'return "text/html";')); } if (get_option('mc_event_mail') == 'true') { $to = apply_filters('mc_event_mail_to', get_option('mc_event_mail_to'), $details); $from = get_option('mc_event_mail_from') == '' ? get_bloginfo('admin_email') : get_option('mc_event_mail_from'); $from = apply_filters('mc_event_mail_from', $from, $details); $from = "From: " . __('Event Notifications', 'my-calendar') . " <{$from}>"; $subject = jd_draw_template($details, get_option('mc_event_mail_subject')); $message = jd_draw_template($details, get_option('mc_event_mail_message')); $mail = wp_mail($to, $subject, $message, $from); } if (get_option('mc_html_email') == 'true') { remove_filter('wp_mail_content_type', create_function('', 'return "text/html";')); } }
function my_calendar_draw_event($event, $type = "calendar", $process_date, $time, $template = '') { // if event is not approved, return without processing if (get_option('mc_event_approve') == 'true' && (int) $event->event_approved !== 1) { return; } // if event ends at midnight today (e.g., very first thing of the day), exit without re-drawing if ($event->event_endtime == '00:00:00' && date('Y-m-d', strtotime($event->occur_end)) == $process_date && date('Y-m-d', strtotime($event->occur_begin)) != $process_date) { return; } global $wpdb; $url = plugin_dir_url(__FILE__); $mcdb = $wpdb; if (get_option('mc_remote') == 'true' && function_exists('mc_remote_db')) { $mcdb = mc_remote_db(); } if ($event->category_private == 1 && !is_user_logged_in()) { return; } // assign empty values to template sections $header = $address = $more = $author = $list_title = $title = $output = $container = $short = $description = $link = $vcal = $gcal = ''; $date_format = get_option('mc_date_format') != '' ? get_option('mc_date_format') : get_option('date_format'); $data = mc_create_tags($event); $details = apply_filters('mc_custom_template', false, $data, $event, $type, $process_date, $time, $template); $templates = get_option('mc_templates'); if ($details === false) { if ($template != '' && mc_file_exists(sanitize_file_name($template))) { $template = @file_get_contents(mc_get_file(sanitize_file_name($template))); $details = jd_draw_template($data, $template); } else { switch ($type) { case 'mini': $template = $templates['mini']; if (get_option('mc_use_mini_template') == 1) { $details = jd_draw_template($data, $template); } break; case 'list': $template = $templates['list']; if (get_option('mc_use_list_template') == 1) { $details = jd_draw_template($data, $template); } break; case 'single': $template = $templates['details']; if (get_option('mc_use_details_template') == 1) { $details = jd_draw_template($data, $template); } break; case 'calendar': default: $template = $templates['grid']; if (get_option('mc_use_grid_template') == 1) { $details = jd_draw_template($data, $template); } } } } $mc_display_author = get_option('mc_display_author'); $display_map = get_option('mc_show_map'); $display_address = get_option('mc_show_address'); $display_details = get_option('mc_details'); $uid = 'mc_' . $event->occur_id; $day_id = date('d', strtotime($process_date)); $mc_id = $event->occur_id; $this_category = $event->event_category; $image = mc_category_icon($event); $header .= "<div id='{$uid}-{$day_id}-{$type}' class='{$type}-event " . "mc_" . sanitize_title($event->category_name) . " vevent'>\n"; $title_template = $templates['title'] == '' ? '{title}' : $templates['title']; $event_title = jd_draw_template($data, $title_template); $event_title = $event_title == '' ? jd_draw_template($data, '{title}') : $event_title; //prevent empty titles if (strpos($event_title, 'http') === false && $type != 'mini' && $type != 'list') { if (get_option('mc_open_uri') == 'true') { $details_link = mc_get_details_link($event); $wrap = "<a href='{$details_link}'>"; $balance = "</a>"; } else { $wrap = "<a href='#{$uid}-{$day_id}-{$type}-details'>"; $balance = "</a>"; } } else { $wrap = $balance = ''; } $current_date = date_i18n(apply_filters('mc_date_format', $date_format, 'details'), strtotime($process_date)); $group_class = $event->event_span == 1 ? ' multidate group' . $event->event_group_id : ''; $heading_level = apply_filters('mc_heading_level_table', 'h3', $type, $time, $template); $header .= $type != 'single' && $type != 'list' ? "<{$heading_level} class='event-title summary{$group_class}'>{$wrap}{$image}{$event_title}{$balance}</{$heading_level}>\n" : ''; $event_title = $type == 'single' ? apply_filters('mc_single_event_title', $event_title, $event) : $event_title; $title = $type == 'single' && !is_singular('mc-events') ? "<h2 class='event-title summary'>{$image} {$event_title}</h2>\n" : ''; $title = apply_filters('mc_event_title', $title, $event, $event_title, $image); $header .= $title; if ($details === false) { $custom = false; // put together address information as vcard if ($display_address == 'true' || $display_map == 'true') { $address = mc_hcard($event, $display_address, $display_map); } // end vcard $close = $type == 'calendar' || $type == 'mini' ? "<a href=\"#{$uid}-{$day_id}-{$type}\" class='mc-toggle mc-close close'><img src=\"" . plugin_dir_url(__FILE__) . "images/event-close.png\" alt='" . __('Close', 'my-calendar') . "' /></a>" : ''; $time = mc_time_html($event, $type, $current_date); if ($type == "list") { $heading_level = apply_filters('mc_heading_level_list', 'h3', $type, $time, $template); $list_title = "<{$heading_level} class='event-title summary'>{$image}" . $event_title . "</{$heading_level}>\n"; } if ($mc_display_author == 'true') { if ($event->event_author != 0) { $e = get_userdata($event->event_author); $author = '<p class="event-author">' . __('Posted by', 'my-calendar') . ' <span class="author-name">' . $e->display_name . "</span></p>\n"; } } if ($display_details == 'true' && !isset($_GET['mc_id'])) { $details_label = mc_get_details_label($event, $data); $details_link = mc_get_details_link($event); $more = get_option('mc_uri') != '' ? "<p class='mc_details'><a href='{$details_link}'>{$details_label}</a></p>\n" : ''; } // handle link expiration $event_link = mc_event_link($event); if (function_exists('mc_google_cal') && get_option('mc_show_gcal') == 'true') { $gcal_link = "<p class='gcal'>" . jd_draw_template($data, '{gcal_link}') . "</p>"; $gcal = $gcal_link; } if (function_exists('my_calendar_generate_vcal') && get_option('mc_show_event_vcal') == 'true') { $nonce = wp_create_nonce('my-calendar-nonce'); $vcal_link = "<p class='ical'><a rel='nofollow' href='" . home_url() . "?vcal={$uid}" . "'>" . __('iCal', 'my-calendar') . "</a></p>\n"; $vcal = $vcal_link; } $default_size = apply_filters('mc_default_image_size', 'medium'); if (is_numeric($event->event_post) && $event->event_post != 0 && (isset($data[$default_size]) && $data[$default_size] != '')) { $atts = apply_filters('mc_post_thumbnail_atts', array('class' => 'mc-image')); $image = get_the_post_thumbnail($event->event_post, $default_size, $atts); } else { $image = $event->event_image != '' ? "<img src='{$event->event_image}' alt='' class='mc-image' />" : ''; } if (get_option('mc_desc') == 'true' || $type == 'single') { $description = get_option('mc_process_shortcodes') == 'true' ? apply_filters('the_content', stripcslashes($event->event_desc)) : wpautop(stripcslashes($event->event_desc), 1); $description = "<div class='longdesc'>{$description}</div>"; } if (get_option('mc_short') == 'true' && $type != 'single') { $short = get_option('mc_process_shortcodes') == 'true' ? apply_filters('the_content', stripcslashes($event->event_short)) : wpautop(stripcslashes($event->event_short), 1); $short = "<div class='shortdesc'>{$short}</div>"; } if (get_option('mc_event_registration') == 'true') { switch ($event->event_open) { case '0': $status = get_option('mc_event_closed'); break; case '1': $status = get_option('mc_event_open'); break; case '2': $status = ''; break; default: $status = ''; } } else { $status = ''; } // JCD TODO - this is really wonky. What was I thinking? // if the event is a member of a group of events, but not the first, note that. if ($event->event_group == 1) { $info = array(); $info[] = $event->event_id; update_option('mc_event_groups', $info); } if (is_array(get_option('mc_event_groups'))) { if (in_array($event->event_id, get_option('mc_event_groups'))) { if ($process_date != $event->event_begin) { $status = __("This event is in a series. Register for the first event in this series to attend.", 'my-calendar'); } } } $status = $status != '' ? "<p>{$status}</p>" : ''; $status = apply_filters('mc_registration_state', $status, $event); $return = $type == 'single' ? "<p><a href='" . get_option('mc_uri') . "'>" . __('View full calendar', 'my-calendar') . "</a></p>" : ''; if ($type == 'calendar' && get_option('mc_open_uri') == 'true' && $time != 'day') { $description = $short = $status = ''; } if (get_option('mc_gmap') == 'true') { $map = is_singular('mc-event') || $type == 'single' ? mc_generate_map($event) : ''; } else { $map = ''; } if ($event_link != '' && get_option('mc_event_link') != 'false') { $is_external = mc_external_link($event_link); $external_class = $is_external ? "class='{$type}-link external'" : "class='{$type}-link'"; $link_template = isset($templates['link']) ? $templates['link'] : '{title}'; $link_text = jd_draw_template($data, $link_template); $link = "<p><a href='{$event_link}' {$is_external}>" . $link_text . "</a></p>"; } $details = "\n" . $close . $time . $list_title . $image . "<div class='location'>" . $map . $address . "</div>" . $description . $short . $link . $status . $author . "<div class='sharing'>" . $vcal . $gcal . $more . "</div>" . $return; } else { $custom = true; // if a custom template is in use $toggle = $type == 'calendar' || $type == 'mini' ? "<a href=\"#{$uid}-{$day_id}-{$type}\" class='mc-toggle mc-close close'><img src=\"" . plugin_dir_url(__FILE__) . "images/event-close.png\" alt='" . __('Close', 'my-calendar') . "' /></a>" : ''; $details = $toggle . $details . "\n"; } $container = "<div id='{$uid}-{$day_id}-{$type}-details' class='details'>\n"; $container = apply_filters('mc_before_event', $container, $event, $type, $time); $details = $header . $container . $details; $details .= apply_filters('mc_after_event', '', $event, $type, $time); $details .= "</div><!--ends .details--></div>"; $details = apply_filters('mc_event_content', $details, $event, $type, $time); return $details; }
function my_calendar_events_now($category = 'default', $template = '<strong>{link_title}</strong> {timerange}') { global $wpdb; $mcdb = $wpdb; if (get_option('mc_remote') == 'true' && function_exists('mc_remote_db')) { $mcdb = mc_remote_db(); } $arr_events = array(); $limit_string = "event_flagged <> 1 AND event_approved = 1"; $select_category = $category != 'default' ? mc_select_category($category) : ''; // may add support for location/author/host later. $select_location = $select_author = $select_host = ''; $now = date('Y-m-d H:i:s', current_time('timestamp')); $event_query = "SELECT *, UNIX_TIMESTAMP(occur_begin) AS ts_occur_begin, UNIX_TIMESTAMP(occur_end) AS ts_occur_end\n\t\t\t\t\tFROM " . MY_CALENDAR_EVENTS_TABLE . " AS e \n\t\t\t\t\tJOIN " . MY_CALENDAR_TABLE . " AS t \n\t\t\t\t\tON (event_id=occur_event_id) \t\t\t\t\t\n\t\t\t\t\tJOIN " . MY_CALENDAR_CATEGORIES_TABLE . " AS c \n\t\t\t\t\tON (event_category=category_id) \n\t\t\t\t\tWHERE {$select_category} {$select_location} {$select_author} {$select_host} {$limit_string} \n\t\t\t\t\tAND ( CAST('{$now}' AS DATETIME) BETWEEN occur_begin AND occur_end ) \n\t\t\t\t\t\tORDER BY " . apply_filters('mc_primary_sort', 'occur_begin') . ", " . apply_filters('mc_secondary_sort', 'event_title ASC'); $events = $mcdb->get_results($event_query); if (!empty($events)) { foreach (array_keys($events) as $key) { $event =& $events[$key]; $arr_events[] = $event; } } if (!empty($arr_events)) { $event = mc_create_tags($arr_events[0]); $output = jd_draw_template($event, apply_filters('mc_happening_now_template', $template, $event)); return get_option('mc_process_shortcodes') == 'true' ? do_shortcode($output) : $output; } else { return ''; } }
function mc_instance_list($id, $occur = false, $template = '<h3>{title}</h3>{description}', $list = '<li>{date}, {time}</li>', $before = "<ul>", $after = "</ul>", $instance = false) { global $wpdb; $id = (int) $id; $output = ''; if ($instance == true) { $sql = "SELECT * FROM " . my_calendar_event_table() . " WHERE occur_id={$id}"; } else { $sql = "SELECT * FROM " . my_calendar_event_table() . " WHERE occur_event_id={$id}"; } $results = $wpdb->get_results($sql); if (is_array($results) && is_admin()) { foreach ($results as $result) { $begin = "<span id='occur_date_{$result->occur_id}'>" . date_i18n(get_option('mc_date_format'), strtotime($result->occur_begin)) . ', ' . date(get_option('mc_time_format'), strtotime($result->occur_begin)) . "</span>"; if ($result->occur_id == $occur) { $form_control = ''; $edit = "<em>" . __('Editing Now', 'my-calendar') . "</em>"; } else { $form_control = "{$begin}: <button class='delete_occurrence' type='button' data-value='{$result->occur_id}' aria-describedby='occur_date_{$result->occur_id}' />" . __('Delete', 'my-calendar') . "</button> "; $edit = "<a href='" . admin_url('admin.php?page=my-calendar') . "&mode=edit&event_id={$id}&date={$result->occur_id}' aria-describedby='occur_date_{$result->occur_id}'>" . __('Edit', 'my-calendar') . "</a>"; } $output .= "<li>{$form_control}{$edit}</li>"; } } else { $details = ''; foreach ($results as $result) { $event_id = $result->occur_id; $event = mc_get_event($event_id); $array = mc_create_tags($event); if (in_array($template, array('details', 'grid', 'list', 'mini')) || mc_key_exists($template)) { if (get_option('mc_use_' . $template . '_template') == 1) { $template = mc_get_template($template); } else { if (mc_key_exists($template)) { $template = mc_get_custom_template($template); } else { $details = my_calendar_draw_event($event, $type = "single", $event->event_begin, $event->event_time, ''); } } } $item = $list != '' ? jd_draw_template($array, $list) : ''; if ($details == '') { $details = $template != '' ? jd_draw_template($array, $template) : ''; } $output .= $item; if ($list == '') { break; } } $output = $details . $before . $output . $after; } return get_option('mc_process_shortcodes') == 'true' ? do_shortcode($output) : $output; }
function my_calendar_send_email($event) { $details = mc_create_tags($event); $headers = array(); // shift to boolean $send_email_option = get_option('mc_event_mail') == 'true' ? true : false; $send_email = apply_filters('mc_send_notification', $send_email_option, $details); if ($send_email == true) { add_filter('wp_mail_content_type', create_function('', 'return "text/html";')); } if (get_option('mc_event_mail') == 'true') { $to = apply_filters('mc_event_mail_to', get_option('mc_event_mail_to'), $details); $from = get_option('mc_event_mail_from') == '' ? get_bloginfo('admin_email') : get_option('mc_event_mail_from'); $from = apply_filters('mc_event_mail_from', $from, $details); $headers[] = "From: " . __('Event Notifications', 'my-calendar') . " <{$from}>"; $bcc = apply_filters('mc_event_mail_bcc', get_option('mc_event_mail_bcc'), $details); if ($bcc) { $bcc = explode(PHP_EOL, $bcc); foreach ($bcc as $b) { $b = trim($b); if (is_email($b)) { $headers[] = "Bcc: {$b}"; } } } $headers = apply_filters('mc_customize_email_headers', $headers, $event); $subject = jd_draw_template($details, get_option('mc_event_mail_subject')); $message = jd_draw_template($details, get_option('mc_event_mail_message')); wp_mail($to, $subject, $message, $headers); } if (get_option('mc_html_email') == 'true') { remove_filter('wp_mail_content_type', create_function('', 'return "text/html";')); } }
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_todays_events($category = 'default', $template = 'default', $substitute = '', $author = 'all', $host = 'all') { $caching = apply_filters('mc_cache_enabled', false); $todays_cache = $caching ? get_transient('mc_todays_cache') : ''; if ($caching && is_array($todays_cache) && @$todays_cache[$category]) { return @$todays_cache[$category]; } global $default_template; $output = ''; $defaults = get_option('mc_widget_defaults'); $template = $template == 'default' ? $defaults['today']['template'] : $template; if ($template == '') { $template = "{$default_template}"; } $category = $category == 'default' ? $defaults['today']['category'] : $category; $no_event_text = $substitute == '' ? $defaults['today']['text'] : $substitute; $from = $to = date('Y-m-d', current_time('timestamp')); $events = my_calendar_events($from, $to, $category, '', '', 'upcoming', $author, $host); $today = isset($events[$from]) ? $events[$from] : false; $header = "<ul id='todays-events'>"; $footer = "</ul>"; $groups = $todays_events = array(); // quick loop through all events today to check for holidays if (is_array($today)) { foreach ($today as $e) { if ($e->category_private == 1 && !is_user_logged_in()) { } else { if (!in_array($e->event_group_id, $groups)) { $event_details = mc_create_tags($e); $ts = $e->ts_occur_begin; if (get_option('mc_event_approve') == 'true') { if ($e->event_approved != 0) { $todays_events[$ts][] = "<li>" . jd_draw_template($event_details, $template) . "</li>"; } } else { $todays_events[$ts][] = "<li>" . jd_draw_template($event_details, $template) . "</li>"; } } } } $todays_events = apply_filters('mc_event_today', $todays_events, $events); foreach ($todays_events as $k => $t) { foreach ($t as $now) { $output .= $now; } } if (count($events) != 0) { $return = $header . $output . $footer; } else { $return = stripcslashes($no_event_text); } $time = strtotime(date('Y-m-d H:m:s', current_time('timestamp'))) - strtotime(date('Y-m-d', current_time('timestamp'))); $time_remaining = 24 * 60 * 60 - $time; $todays_cache[$category] = $caching ? $return : ''; if ($caching) { set_transient('mc_todays_cache', $todays_cache, $time_remaining); } } else { $return = stripcslashes($no_event_text); } return $return; }
function my_event_post($action, $data, $new_event) { if (!get_option('mcs_create_post') == 'true') { return; } // if the event save was successful. $options = get_option('mcs_event_post'); switch ($options['content']) { case 'event': $content = "[my_calendar_event event='{$new_event}' template='details' list='']"; break; case 'custom': $content = isset($_POST['mcs_custom_content']) ? $_POST['mcs_custom_content'] : ''; break; default: $content = $data['event_desc']; break; } if ($options['content'] == 'custom') { $event = mc_get_first_event($new_event); $details = mc_create_tags($event); $content = jd_draw_template($details, apply_filters('mcs_new_post_template', $content, $event)); } switch ($options['title']) { case 'custom': $title = sprintf($options['custom_title'], $data['event_title']); break; default: $title = $data['event_title']; } switch ($options['author']) { case 'host': $auth = $data['event_host']; break; default: $auth = $data['event_author']; } switch ($options['excerpt']) { case 'event_short': $excerpt = $data['event_short']; break; case 'auto': $excerpt = wp_trim_words($data['event_desc']); break; case 'custom': $excerpt = isset($_POST['mcs_custom_content']) ? $_POST['mcs_custom_content'] : ''; break; default: $excerpt = $data['event_short']; } if ($options['excerpt'] == 'custom') { $event = mc_get_first_event($new_event); $details = mc_create_tags($event); $excerpt = jd_draw_template($details, apply_filters('mcs_new_post_template', $excerpt, $event)); } $status = isset($options['status']) ? $options['status'] : 'publish'; switch ($options['timestamp']) { case 'event': $date = strtotime($data['event_begin'] . ' ' . $data['event_time']); break; case 'custom': if ($options['custom_time'] < 0) { $date = strtotime($data['event_begin'] . ' ' . $data['event_time']) - intval($options['custom_time']); } else { $date = current_time('timestamp') + intval($options['custom_time']); } break; default: $date = current_time('timestamp'); } $type = isset($options['post_type']) ? $options['post_type'] : 'post'; if ($action == 'add' && !(isset($_POST['event_source']) && $_POST['event_source'] == 'post')) { $my_post = array('post_title' => $title, 'post_content' => $content, 'post_excerpt' => $excerpt, 'post_status' => $status, 'post_author' => $auth, 'post_name' => sanitize_title($title), 'post_date' => date('Y-m-d H:i:s', $date), 'post_type' => $type); $post_id = wp_insert_post($my_post); $attachment_id = isset($_POST['event_image_id']) && is_numeric($_POST['event_image_id']) ? $_POST['event_image_id'] : false; if ($attachment_id) { set_post_thumbnail($post_id, $attachment_id); } $category = mc_get_category_detail($data['event_category'], 'category_name'); $taxonomy = 'category'; wp_set_post_tags($post_id, $category); wp_set_post_terms($post_id, $category, $taxonomy); add_post_meta($post_id, '_mc_event_id', $new_event); $event = mc_get_first_event($new_event); $event_id = $event->event_post; add_post_meta($event_id, '_mc_related_post', $post_id); do_action('mcp_post_published', $post_id, $event); wp_publish_post($post_id); } }
function my_calendar_todays_events($category = 'default', $template = 'default', $substitute = '', $author = 'all', $host = 'all', $date = false, $site = false) { if ($site) { $site = $site == 'global' ? BLOG_ID_CURRENT_SITE : $site; switch_to_blog($site); } $caching = apply_filters('mc_cache_enabled', false); $todays_cache = $caching ? get_transient('mc_todays_cache') : ''; if ($caching && is_array($todays_cache) && @$todays_cache[$category]) { return @$todays_cache[$category]; } $args = array('category' => $category, 'template' => $template, 'substitute' => $substitute, 'author' => $author, 'host' => $host, 'date' => $date); $hash = md5(implode(',', $args)); global $default_template; $output = ''; // allow reference by file to external template. if ($template != '' && mc_file_exists(sanitize_file_name($template))) { $template = @file_get_contents(mc_get_file(sanitize_file_name($template))); } $defaults = get_option('mc_widget_defaults'); $template = $template == 'default' ? $defaults['today']['template'] : $template; $template = $template == '' ? $default_template : $template; if (mc_key_exists($template)) { $template = mc_get_custom_template($template); } $category = $category == 'default' ? $defaults['today']['category'] : $category; $no_event_text = $substitute == '' ? $defaults['today']['text'] : $substitute; if ($date) { $from = $to = date('Y-m-d', strtotime($date)); } else { $from = $to = date('Y-m-d', current_time('timestamp')); } $events = my_calendar_events($from, $to, $category, '', '', 'upcoming', $author, $host, '', $site); $today = isset($events[$from]) ? $events[$from] : false; $header = "<ul id='todays-events-{$hash}' class='todays-events'>"; $footer = "</ul>"; $groups = $todays_events = array(); // quick loop through all events today to check for holidays if (is_array($today)) { foreach ($today as $e) { if ($e->category_private == 1 && !is_user_logged_in()) { } else { if (!in_array($e->event_group_id, $groups)) { $event_details = mc_create_tags($e); $ts = $e->ts_occur_begin; $end = $e->ts_occur_end; $now = current_time('timestamp'); $category = 'mc_' . sanitize_title($e->category_name); if ($ts < $now && $end > $now) { $class = 'on-now'; } else { if ($now < $ts) { $class = 'future-event'; } else { if ($now > $ts) { $class = 'past-event'; } } } $prepend = apply_filters('mc_todays_events_before', "<li class='{$class} {$category}'>", $class, $category); $append = apply_filters('mc_todays_events_after', "</li>"); if (get_option('mc_event_approve') == 'true') { if ($e->event_approved != 0) { $todays_events[$ts][] = $prepend . jd_draw_template($event_details, $template) . $append; } } else { $todays_events[$ts][] = $prepend . jd_draw_template($event_details, $template) . $append; } } } } $todays_events = apply_filters('mc_event_today', $todays_events, $events); foreach ($todays_events as $k => $t) { foreach ($t as $now) { $output .= $now; } } if (count($events) != 0) { $return = apply_filters('mc_todays_events_header', $header) . $output . apply_filters('mc_todays_events_footer', $footer); } else { $return = stripcslashes($no_event_text); } $time = strtotime(date('Y-m-d H:m:s', current_time('timestamp'))) - strtotime(date('Y-m-d', current_time('timestamp'))); $time_remaining = 24 * 60 * 60 - $time; $todays_cache[$category] = $caching ? $return : ''; if ($caching) { set_transient('mc_todays_cache', $todays_cache, $time_remaining); } } else { $return = stripcslashes($no_event_text); } if ($site) { restore_current_blog(); } return get_option('mc_process_shortcodes') == 'true' ? do_shortcode($return) : $return; }
function my_calendar_draw_event($event, $type = "calendar", $process_date, $time, $template = '') { // if event is not approved, return without processing if (get_option('mc_event_approve') == 'true' && (int) $event->event_approved !== 1) { return ''; } // if event ends at midnight today (e.g., very first thing of the day), exit without re-drawing // or if event started yesterday & has event_hide_end checked. $ends_at_midnight = $event->event_endtime == '00:00:00' && date('Y-m-d', strtotime($event->occur_end)) == $process_date && date('Y-m-d', strtotime($event->occur_begin)) != $process_date ? true : false; // hides events if hiding end time & not first day. $hide_day_two = apply_filters('mc_hide_additional_days', false, $event) && date('Y-m-d', strtotime($event->occur_begin)) != date('Y-m-d', strtotime($process_date)) ? true : false; if ($ends_at_midnight || $hide_day_two) { return ''; } if ($event->category_private == 1 && !is_user_logged_in()) { return ''; } // assign empty values to template sections $header = $address = $more = $author = $list_title = $title = $output = $container = $short = $description = $link = $vcal = $gcal = ''; $date_format = get_option('mc_date_format') != '' ? get_option('mc_date_format') : get_option('date_format'); $data = mc_create_tags($event); $details = ''; if (mc_show_details($time, $type)) { $details = apply_filters('mc_custom_template', false, $data, $event, $type, $process_date, $time, $template); $template = apply_filters('mc_use_custom_template', $template, $data, $event, $type, $process_date, $time); if ($details === false) { if ($template != '' && mc_file_exists(sanitize_file_name($template))) { $template = @file_get_contents(mc_get_file(sanitize_file_name($template))); $details = jd_draw_template($data, $template); } else { if ($template != '' && mc_key_exists($template)) { $template = mc_get_custom_template($template); $details = jd_draw_template($data, $template); } else { switch ($type) { case 'mini': $template = mc_get_template('mini'); if (get_option('mc_use_mini_template') == 1) { $details = jd_draw_template($data, $template); } break; case 'list': $template = mc_get_template('list'); if (get_option('mc_use_list_template') == 1) { $details = jd_draw_template($data, $template); } break; case 'single': $template = mc_get_template('details'); if (get_option('mc_use_details_template') == 1) { $details = jd_draw_template($data, $template); } break; case 'calendar': default: $template = mc_get_template('grid'); if (get_option('mc_use_grid_template') == 1) { $details = jd_draw_template($data, $template); } } } } } } $mc_display_author = get_option('mc_display_author'); $display_map = get_option('mc_show_map'); $display_address = get_option('mc_show_address'); $mc_display_more = get_option('mc_display_more'); $uid = 'mc_' . $event->occur_id; $day_id = date('d', strtotime($process_date)); $image = mc_category_icon($event); $has_image = $image != '' ? ' has-image' : ''; $event_classes = mc_event_classes($event, $day_id, $type); $header .= "<div id='{$uid}-{$day_id}-{$type}' class='{$event_classes}'>\n"; switch ($type) { case 'calendar': $title_template = mc_get_template('title') == '' ? '{title}' : mc_get_template('title'); break; case 'list': $title_template = mc_get_template('title_list') == '' ? '{title}' : mc_get_template('title_list'); break; case 'single': $title_template = mc_get_template('title_solo') == '' ? '{title}' : mc_get_template('title_solo'); break; default: $title_template = mc_get_template('title') == '' ? '{title}' : mc_get_template('title'); } $event_title = jd_draw_template($data, $title_template); $event_title = $event_title == '' ? jd_draw_template($data, '{title}') : mc_kses_post($event_title); //prevent empty titles if (strpos($event_title, 'href') === false && $type != 'mini' && $type != 'list') { if (get_option('mc_open_uri') == 'true') { $details_link = esc_url(mc_get_details_link($event)); $wrap = "<a href='{$details_link}' class='url summary{$has_image}'>"; $balance = "</a>"; } else { $wrap = "<a href='#{$uid}-{$day_id}-{$type}-details' class='url summary{$has_image}'>"; $balance = "</a>"; } } else { $wrap = $balance = ''; } $current_date = date_i18n(apply_filters('mc_date_format', $date_format, 'details'), strtotime($process_date)); $group_class = $event->event_span == 1 ? ' multidate group' . $event->event_group_id : ''; $heading_level = apply_filters('mc_heading_level_table', 'h3', $type, $time, $template); $inner_heading = apply_filters('mc_heading_inner_title', $wrap . $image . trim($event_title) . $balance, $event_title, $event); $header .= $type != 'single' && $type != 'list' ? "<{$heading_level} class='event-title summary{$group_class}' id='{$uid}-{$day_id}-{$type}-title'>{$inner_heading}</{$heading_level}>\n" : ''; $event_title = $type == 'single' ? apply_filters('mc_single_event_title', $event_title, $event) : $event_title; $title = $type == 'single' && !is_singular('mc-events') ? "<h2 class='event-title summary'>{$image} {$event_title}</h2>\n" : '<span class="summary screen-reader-text">' . $event_title . '</span>'; $title = apply_filters('mc_event_title', $title, $event, $event_title, $image); $header .= '<span class="summary">' . $title . '</span>'; $close_image = apply_filters('mc_close_button', "<img src=\"" . plugin_dir_url(__FILE__) . "images/event-close.png\" alt='" . __('Close', 'my-calendar') . "' />"); $close_button = "<button type='button' aria-controls='{$uid}-{$day_id}-{$type}-details' class='mc-toggle close'>{$close_image}</button>"; if (mc_show_details($time, $type)) { $close = $type == 'calendar' || $type == 'mini' ? $close_button : ''; if ($details === false) { // put together address information as vcard if ($display_address == 'true' || $display_map == 'true') { $address = mc_hcard($event, $display_address, $display_map); } // end vcard $time_html = mc_time_html($event, $type, $current_date); if ($type == "list") { $heading_level = apply_filters('mc_heading_level_list', 'h3', $type, $time, $template); $list_title = "<{$heading_level} class='event-title summary' id='{$uid}-{$day_id}-{$type}-title'>{$image}" . $event_title . "</{$heading_level}>\n"; } if ($mc_display_author == 'true') { if ($event->event_author != 0) { $e = get_userdata($event->event_author); $author = '<p class="event-author">' . __('Posted by', 'my-calendar') . ' <span class="author-name">' . $e->display_name . "</span></p>\n"; } } if ($mc_display_more != 'false' && !isset($_GET['mc_id'])) { $details_label = mc_get_details_label($event, $data); $details_link = mc_get_details_link($event); if (_mc_is_url($details_link)) { $more = "<p class='mc_details'><a href='" . esc_url($details_link) . "'>{$details_label}</a></p>\n"; } else { $more = ''; } } $more = apply_filters('mc_details_grid_link', $more, $event); // handle link expiration $event_link = mc_event_link($event); if (function_exists('mc_google_cal') && get_option('mc_show_gcal') == 'true') { $gcal_link = "<p class='gcal'>" . jd_draw_template($data, '{gcal_link}') . "</p>"; $gcal = $gcal_link; } if (function_exists('my_calendar_generate_vcal') && get_option('mc_show_event_vcal') == 'true') { $url = add_query_arg('vcal', $uid, home_url()); $vcal_link = "<p class='ical'><a rel='nofollow' href='" . esc_url($url) . "'>" . __('iCal', 'my-calendar') . "</a></p>\n"; $vcal = $vcal_link; } $sizes = get_intermediate_image_sizes(); if (in_array('medium', $sizes)) { $default_size = 'medium'; } else { $default_size = 'thumbnail'; } $default_size = apply_filters('mc_default_image_size', $default_size); if (is_numeric($event->event_post) && $event->event_post != 0 && (isset($data[$default_size]) && $data[$default_size] != '')) { $atts = apply_filters('mc_post_thumbnail_atts', array('class' => 'mc-image photo')); $image = get_the_post_thumbnail($event->event_post, $default_size, $atts); } else { $image = $event->event_image != '' ? "<img src='{$event->event_image}' alt='' class='mc-image photo' />" : ''; } if (get_option('mc_desc') == 'true' || $type == 'single') { $description = wpautop(stripcslashes(mc_kses_post($event->event_desc)), 1); $description = "<div class='longdesc description'>{$description}</div>"; } if (get_option('mc_short') == 'true' && $type != 'single') { $short = wpautop(stripcslashes(mc_kses_post($event->event_short)), 1); $short = "<div class='shortdesc'>{$short}</div>"; } if (get_option('mc_event_registration') == 'true') { switch ($event->event_open) { case '0': $status = mc_kses_post(get_option('mc_event_closed')); break; case '1': $status = mc_kses_post(get_option('mc_event_open')); break; case '2': $status = ''; break; default: $status = ''; } } else { $status = ''; } $status = $status != '' ? "<p>{$status}</p>" : ''; $status = apply_filters('mc_registration_state', $status, $event); $return_url = apply_filters('mc_return_uri', get_option('mc_uri')); $return = $type == 'single' ? "<p class='view-full'><a href='{$return_url}'>" . __('View full calendar', 'my-calendar') . "</a></p>" : ''; if (!mc_show_details($time, $type)) { $description = $short = $status = ''; } if (get_option('mc_gmap') == 'true') { $map = is_singular('mc-events') || $type == 'single' ? mc_generate_map($event) : ''; } else { $map = ''; } if ($event_link != '' && get_option('mc_event_link') != 'false') { $is_external = mc_external_link($event_link); $external_class = $is_external ? "class='{$type}-link external url'" : "class='{$type}-link url'"; $link_template = mc_get_template('link') != '' ? mc_get_template('link') : '{title}'; $link_text = jd_draw_template($data, $link_template); $link = "<p><a href='" . esc_url($event_link) . "' {$external_class}>" . $link_text . "</a></p>"; } $details = "\n" . $close . $time_html . $list_title . $image . "<div class='location'>" . $map . $address . "</div>" . $description . $short . $link . $status . $author . "<div class='sharing'>" . $vcal . $gcal . $more . "</div>" . $return; } else { // if a custom template is in use $toggle = $type == 'calendar' || $type == 'mini' ? $close_button : ''; $details = $toggle . $details . "\n"; } $img_class = $image != '' ? ' has-image' : ' no-image'; $container = "<div id='{$uid}-{$day_id}-{$type}-details' class='details{$img_class}' role='alert' aria-labelledby='{$uid}-{$day_id}-{$type}-title'>\n"; $container = apply_filters('mc_before_event', $container, $event, $type, $time); $details = $header . $container . apply_filters('mc_inner_content', $details, $event, $type, $time); $details .= apply_filters('mc_after_event', '', $event, $type, $time); $details .= $close; // second close button $details .= "</div><!--ends .details--></div>"; $details = apply_filters('mc_event_content', $details, $event, $type, $time); } else { $details = apply_filters('mc_before_event_no_details', $container, $event, $type, $time) . $header . apply_filters('mc_after_event_no_details', '', $event, $type, $time) . "</div>"; } return $details; }
function mc_instance_list($id, $occur = false, $template = '<h3>{title}</h3>{description}', $list = '<li>{date}, {time}</li>', $before = "<ul>", $after = "</ul>") { global $wpdb; $id = (int) $id; $output = ''; $sql = "SELECT * FROM " . my_calendar_event_table() . " WHERE occur_event_id={$id}"; $results = $wpdb->get_results($sql); if (is_array($results) && is_admin()) { foreach ($results as $result) { if ($result->occur_id == $occur) { $form_control = ''; $current = "<em>" . __('Editing: ', 'my-calendar') . "</em>"; $end = ''; } else { $form_control = "<input type='checkbox' name='delete_occurrences[]' id='delete_{$result->occur_id}' value='{$result->occur_id}' aria-labelledby='occur_label occur_date' /> <label id='occur_label' for='delete_{$result->occur_id}'>Delete</label> "; $current = "<a href='" . admin_url('admin.php?page=my-calendar') . "&mode=edit&event_id={$id}&date={$result->occur_id}'>"; $end = "</a>"; } $begin = "<span id='occur_date'>" . date_i18n(get_option('mc_date_format'), strtotime($result->occur_begin)) . ', ' . date(get_option('mc_time_format'), strtotime($result->occur_begin)) . "</span>"; $output .= "<li>{$form_control}{$current}{$begin}{$end}</li>"; } } else { $details = ''; foreach ($results as $result) { $event_id = $result->occur_id; $event = mc_get_event($event_id); $array = mc_create_tags($event); if (in_array($template, array('details', 'grid', 'list', 'mini'))) { if (get_option('mc_use_' . $template . '_template') == 1) { $template = mc_get_template($template); } else { $template = false; $details = my_calendar_draw_event($event, $type = "single", $event->event_begin, $event->event_time, ''); } } $item = $list != '' ? jd_draw_template($array, $list) : ''; if ($details == '') { $details = $template != '' ? jd_draw_template($array, $template) : ''; } $output .= $item; } $output = $details . $before . $output . $after; } return $output; }