/** * Creates the filter and pagination bar in the overview * @param $filter * @param $part * @param $page * @param $epp * @param $count * @param $bl * @return unknown_type */ function printNavigationBar($filter = array(), $part = 1, $page = 1, $epp = 20, $count = 0, $bl = '') { global $wpdb; global $fsCalendar; ?> <div class="tablenav"> <div class="alignleft actions"> <select name="action<?php echo $part == 2 ? '2' : ''; ?> "> <option selected="selected" value=""><?php _e('Choose action', fsCalendar::$plugin_textdom); ?> </option> <option value="delete"><?php _e('Delete', fsCalendar::$plugin_textdom); ?> </option> <?php if ($fsCalendar->userCanPublishEvents()) { echo '<option value="publish">' . __('Publish', fsCalendar::$plugin_textdom) . '</option>'; } ?> <?php if ($fsCalendar->userCanEditEvents()) { echo '<option value="draft">' . __('Set to Draft', fsCalendar::$plugin_textdom) . '</option>'; } ?> </select> <input id="doaction<?php echo $part; ?> " class="button-secondary action" type="submit" name="doaction" value="<?php _e('Apply', fsCalendar::$plugin_textdom); ?> " /> <?php if ($part == 1) { ?> <select name="event_start"> <option value="-1"<?php echo !isset($filter['datefrom']) ? ' selected="selected"' : ''; ?> ><?php _e('Show all dates', fsCalendar::$plugin_textdom); ?> </option> <option value="0"<?php echo isset($filter['datefrom']) && !isset($filter['dateto']) ? ' selected="selected"' : ''; ?> ><?php _e('Show future dates only', fsCalendar::$plugin_textdom); ?> </option> <?php $min = $wpdb->get_var('SELECT MIN(tsfrom) AS min FROM ' . $wpdb->prefix . 'fsevents'); $max = $wpdb->get_var('SELECT MAX(tsto) AS max FROM ' . $wpdb->prefix . 'fsevents'); if ($min != NULL && $max != NULL) { $ms = fsCalendar::date('m', $min); $ys = fsCalendar::date('Y', $min); $me = fsCalendar::date('m', $max); $ye = fsCalendar::date('Y', $max); while ($ys <= $ye) { while ($ms <= 12 && ($ys < $ye || $ms <= $me)) { $time = mktime(0, 0, 0, $ms, 1, $ys); echo '<option value="' . $time . '"' . ($time == $filter['datefrom'] ? ' selected="selected"' : '') . '>' . fsCalendar::date_i18n('F Y', $time) . '</option>'; $ms++; } $ms = 1; $ys++; } } ?> </select> <?php $dropdown_options = array('show_option_all' => __('View all categories'), 'hide_empty' => 0, 'hierarchical' => 1, 'show_count' => 0, 'name' => 'event_category', 'orderby' => 'name'); if (isset($filter['categories'][0])) { $dropdown_options['selected'] = $filter['categories'][0]; } wp_dropdown_categories($dropdown_options); ?> <input id="event-query-submit" class="button-secondary" type="submit" value="<?php _e('Filter', fsCalendar::$plugin_textdom); ?> " /> <?php } ?> </div> <?php if ($count > $epp) { $evon = ($page - 1) * $epp + 1; $ebis = $page * $epp; $pages = ceil($count / $epp); ?> <div class="tablenav-pages"> <span class="displaying-num"><?php printf('Showing %d-%d of %d', $evon, $ebis, $count); ?> </span> <?php if ($page > 1) { echo '<a class="prev page-numbers" href="' . $bl . 'paged=1">«</a>'; } for ($i = 1; $i <= $pages; $i++) { if ($i == $page) { echo '<span class="page-numbers current">' . $i . '</span>'; } else { echo '<a class="page-numbers" href="' . $bl . 'paged=' . $i . '">' . $i . '</a>'; } } if ($page < $pages) { echo '<a class="next page-numbers" href="' . $bl . 'paged=' . $pages . '">»</a>'; } ?> </div> <?php } ?> </div> <?php }
</div> <div class="misc-pub-section"> <?php _e('Published by', fsCalendar::$plugin_textdom); ?> : <span id="post-status-display"> <?php echo empty($evt->publishauthor_t) ? '-' : esc_attr($evt->publishauthor_t); ?> </span> </div> <div class="misc-pub-section"> <?php _e('Published', fsCalendar::$plugin_textdom); ?> : <span id="post-status-display"> <?php echo !empty($evt->publishdate) ? fsCalendar::date_i18n($evt->date_time_format, $evt->publishdate) : '-'; ?> </span> </div> <?php if ($action != 'view' && $evt->updatedbypost == true) { echo '<div class="misc-pub-section">'; echo sprintf(__('This event is synchronized with <a href="post.php?post=%d&action=edit">this post</a>. Click ' . "<a class=\"hide-if-no-js\" href=\"\" onClick=\"document.forms['event'].jsaction.value='nosync'; document.forms['event'].submit(); return false;\"'>" . 'here</a> to disable the synchronization.', fsCalendar::$plugin_textdom), $evt->postid); echo '</div>'; } ?> </div> <div class="clear"/></div> </div> <?php
/** * Filters all {event*} tags * @param $content Content to filter * @param $evt Event Object (optional) * @return String Filtered content */ function filterContent($content, $evt = NULL) { // Match all tags, but make sure that no escaped {} are selected! preg_match_all('/[^\\\\]?(\\{event[s]?_(.+?[^\\\\])\\})/is', $content, $matches, PREG_SET_ORDER); foreach ($matches as $k => $m) { $matches[$k][0] = $m[1]; $matches[$k][1] = $m[2]; unset($matches[$k][2]); } if (count($matches) == 0) { return $content; } // Get Page url if any $page_id = intval(get_option('fse_page')); if (!empty($page_id)) { $page_url = get_permalink($page_id); if (!empty($page_url)) { if (strpos($page_url, '?') === false) { $page_url .= '?event='; } else { $page_url .= '&event='; } } } $showenddate = get_option('fse_show_enddate') == true ? true : false; $hideifallday = get_option('fse_allday_hide_time') == true ? true : false; if (!empty($evt)) { // We just create an event object, if it does no exist, all var are empty! } elseif (isset($_GET['event'])) { $evt = new fsEvent(intval($_GET['event']), 'publish'); } else { // Load an empty event, to get all attributes in the correct format $evt = new fsEvent(-1); } // Calculate duration $start = floor($evt->tsfrom / 60); $end = floor($evt->tsto / 60); $diff = $end - $start; if ($evt->allday == true) { $dur_days = floor($diff / 1440) + 1; // Add 1 day } else { $dur_days = floor($diff / 1440); $diff -= $dur_days * 1440; $dur_hours = floor($diff / 60); $diff -= $dur_hours * 60; $dur_minutes = $diff; } foreach ($matches as $m) { //$token = explode(';', $m[1]); $token = array(); $qopen = false; $esc = false; $temp = ''; // Covert URL Encodings $m[1] = html_entity_decode($m[1]); $m[1] = str_replace(array('”', '″', '“'), array('"', '"', '"'), $m[1]); /*$m[1] = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $m[1]); $m[1] = preg_replace('~&#([0-9]+);~e', 'chr("\\1")', $m[1]);*/ for ($i = 0; $i < strlen($m[1]); $i++) { if ($m[1][$i] == '"' && $esc == false) { $qopen = !$qopen; $esc = false; $temp .= '"'; } elseif ($m[1][$i] == "\\") { // Maybe already escaped, just add it as well if ($esc == true) { $temp .= '\\'; // Make 2! $esc = false; } else { $esc = true; } } elseif ($m[1][$i] == ';' && $qopen == false) { $token[] = trim($temp); $temp = ''; $esc = false; } else { $temp .= $m[1][$i]; $esc = false; } } if (!empty($temp)) { $token[] = $temp; } $opts = array(); $opts_orig = array(); if (count($token) > 1) { for ($i = 1; $i < count($token); $i++) { list($opt_orig, $val) = explode('=', $token[$i], 2); $val = trim($val); $opt_orig = trim($opt_orig); $opt = strtolower($opt_orig); // Remove " " preg_match('/^"(.*)"$/s', $val, $matches); if (count($matches) > 0) { $val = $matches[1]; } $opts[$opt] = $val; $opts_orig[$opt_orig] = $val; } } $tag = strtolower(trim($token[0])); // Reset! $rep = ''; switch ($tag) { case 'id': if (isset($opts['id'])) { unset($evt); $evt = new fsEvent(intval($opts['id']), 'publish'); $rep = ''; } else { $rep = $evt->eventid; } break; case 'subject': if (empty($evt->subject)) { $rep = __('Event not found'); } else { $rep = $evt->subject; } break; case 'location': $rep = $evt->location; break; case 'description': $rep = $evt->getDescription(); break; case 'author': $rep = $evt->author_t; break; case 'publisher': $rep = $evt->publishauthor_t; break; case 'authorid': $rep = $evt->author; break; case 'publisherid': $rep = $evt->publishauthor; break; case 'startdate': if (!empty($evt->tsfrom)) { if (isset($opts['fmt'])) { $rep = $evt->getStart($opts['fmt'], 2); } else { $rep = $evt->getStart('', 2); } } else { $rep = ''; } break; case 'enddate': if (!empty($evt->tsto)) { if (isset($opts['alwaysshowenddate'])) { $l_sed = $opts['alwaysshowenddate'] == true ? true : false; } else { $l_sed = $showenddate; } // Do not display if date AND time is the same if ($l_sed == false && (fsCalendar::date('d', $evt->tsto) == fsCalendar::date('d', $evt->tsfrom) && fsCalendar::date('m', $evt->tsto) == fsCalendar::date('m', $evt->tsfrom) && fsCalendar::date('Y', $evt->tsto) == fsCalendar::date('Y', $evt->tsfrom))) { $rep = ''; } else { if (isset($opts['before'])) { $rep = $opts['before']; } else { $rep = ''; } if (isset($opts['fmt'])) { $rep .= $evt->getEnd($opts['fmt'], 2); } else { $rep .= $evt->getEnd('', 2); } } } else { $rep = ''; } break; case 'starttime': if (!empty($evt->tsfrom)) { if (isset($opts['hideifallday'])) { $l_hide = $opts['hideifallday'] == true ? true : false; } else { $l_hide = $hideifallday; } if ($evt->allday == true && $l_hide == true) { $rep = ''; } else { // Do not display if date AND time is the same if (isset($opts['fmt'])) { $rep = $evt->getStart($opts['fmt'], 3); } else { $rep = $evt->getStart('', 3); } } } else { $rep = ''; } break; case 'endtime': if (!empty($evt->tsto)) { if (isset($opts['hideifallday'])) { $l_hide = $opts['hideifallday'] == true ? true : false; } else { $l_hide = $hideifallday; } // Do not display if date AND time is the same if (isset($opts['alwaysshowenddate'])) { $l_sed = $opts['alwaysshowenddate'] == true ? true : false; } else { $l_sed = $showenddate; } if ($evt->allday == true && $l_hide == true || $l_sed == false && $evt->tsfrom == $evt->tsto) { $rep = ''; } else { if (isset($opts['before'])) { $rep = $opts['before']; } else { $rep = ''; } if (isset($opts['fmt'])) { $rep .= $evt->getEnd($opts['fmt'], 3); } else { $rep .= $evt->getEnd('', 3); } } } else { $rep = ''; } break; case 'duration': $t = $opts['type']; $a = $opts['suffix']; $e = isset($opts['empty']) ? $opts['empty'] : 0; if (in_array($t, array('d', 'h', 'm'))) { if ($evt->allday == true) { if ($t == 'd') { $rep = $dur_days . $a; } else { $rep = ''; } } else { switch ($t) { case 'd': $rep = $dur_days; break; case 'h': $rep = $dur_hours; break; case 'm': $rep = $dur_minutes; break; } if (empty($rep) && $e != 1) { $rep = ''; } else { $rep .= $a; } } } else { $rep = ''; } break; case 'allday': if ($evt->allday == true && isset($opts['text'])) { $rep = $opts['text']; } else { $rep = ''; } break; case 'publishdate': if (!empty($evt->publishdate)) { if (isset($opts['fmt'])) { $rep = fsCalendar::date_i18n($opts['fmt'], $evt->publishdate); } else { $rep = fsCalendar::date_i18n('d.m.Y', $evt->publishdate); } } else { $rep = ''; } break; case 'publishtime': if (!empty($evt->publishdate)) { if (isset($opts['fmt'])) { $rep = fsCalendar::date_i18n($opts['fmt'], $evt->publishdate); } else { $rep = fsCalendar::date_i18n('H:i', $evt->publishdate); } } else { $rep = ''; } break; case 'categories': $excl = array(); if (isset($opts['exclude'])) { $excl = explode(',', $opts['exclude']); } if (isset($opts['sep'])) { $sep = $opts['sep']; } else { $sep = ', '; } $rep = ''; $first = true; foreach ($evt->categories_t as $k => $c) { if (!in_array($k, $excl)) { if ($first == true) { $first = false; } else { if ($sep != 'list') { $rep .= $sep; } } if ($sep == 'list') { $rep .= '<li>' . $c . '</li>'; } else { $rep .= $c; } } } if ($sep == 'list') { $rep = '<ul class="eventcategories">' . $rep . '</ul>'; } break; case 'url': if ($opts['linktopost'] == true && !empty($evt->postid)) { $rep = get_permalink($evt->postid); } elseif (!empty($page_url) && !empty($evt->eventid)) { $rep = $page_url . $evt->eventid; } else { $rep = ''; } break; case 'print': $opts['echo'] = false; // No echo! $rep = $this->printEvents($opts); break; case 'printlist': $opts['echo'] = false; // No echo! $rep = $this->printEventsList($opts); break; case 'calendar': $uniqueId = substr(uniqid('fscal-'), 0, 12); $rep = '<div id="' . $uniqueId . '"></div>'; $rep .= "<script type=\"text/javascript\">jQuery(document).ready(function() {jQuery('#{$uniqueId}').fullCalendar({"; // Convert hierarchical options if (is_array($opts_orig)) { foreach ($opts_orig as $key => $val) { $keys = explode('->', $key); // Process from the last to the second for ($i = count($keys) - 1; $i > 0; $i--) { $tmp[trim($keys[$i])] = $val; $val = $tmp; } if (trim($keys[0]) != $key) { unset($opts_orig[$key]); } $opts_orig[trim($keys[0])] = $val; } } // First day of week if (!isset($opts_orig['firstDay'])) { if (get_option('fse_ws_wp') == true) { $weekstart = get_option('start_of_week'); } else { $weekstart = get_option('fse_ws'); } $rep .= "firstDay: {$weekstart},"; } // Date formats if (!isset($opts_orig['timeFormat'])) { $fmt = $this->convertDateFmt(get_option('time_format')); $rep .= "timeFormat: \"{$fmt}\","; } // Translation of month and day names if (!isset($opts_orig['monthNames'])) { $rep .= 'monthNames: ["' . implode('","', $GLOBALS['month']) . '"],'; } if (!isset($opts_orig['monthNamesShort'])) { $rep .= 'monthNamesShort: ["' . implode('","', $GLOBALS['month_abbrev']) . '"],'; } if (!isset($opts_orig['dayNames'])) { $rep .= 'dayNames: ["' . implode('","', $GLOBALS['weekday']) . '"],'; } if (!isset($opts_orig['dayNamesShort'])) { $rep .= 'dayNamesShort: ["' . implode('","', $GLOBALS['weekday_abbrev']) . '"],'; } if (!isset($opts_orig['titleFormat'])) { $rep .= 'titleFormat: {' . 'month: "' . addslashes($this->convertDateFmt(get_option('fse_fc_tit_month_fmt'))) . '",' . 'week: "' . addslashes($this->convertDateFmt(get_option('fse_fc_tit_week_fmt'))) . '",' . 'day: "' . addslashes($this->convertDateFmt(get_option('fse_fc_tit_day_fmt'))) . '"' . '},'; } if (!isset($opts_orig['columnFormat'])) { $rep .= 'columnFormat: {' . "month: '" . addslashes($this->convertDateFmt(get_option('fse_fc_col_month_fmt'))) . "'," . "week: '" . addslashes($this->convertDateFmt(get_option('fse_fc_col_week_fmt'))) . "'," . "day: '" . addslashes($this->convertDateFmt(get_option('fse_fc_col_day_fmt'))) . "'" . '},'; } // Button Texts if (!isset($opts_orig['buttonText'])) { $rep .= 'buttonText: {' . "prev: '" . __(' ◄ ', self::$plugin_textdom) . "'," . "next: '" . __(' ► ', self::$plugin_textdom) . "'," . "prevYear: '" . __(' << ', self::$plugin_textdom) . "'," . "nextYear: '" . __(' >> ', self::$plugin_textdom) . "'," . "today: '" . __('today', self::$plugin_textdom) . "'," . "month: '" . __('month', self::$plugin_textdom) . "'," . "week: '" . __('week', self::$plugin_textdom) . "'," . "day: '" . __('day', self::$plugin_textdom) . "'},"; } //Add all original options if (is_array($opts_orig)) { foreach ($opts_orig as $key => $val) { $rep .= $this->filterContentProcessCalOpts($key, $val); } } // Link Click $postlink = isset($opts_orig['linktopost']) && $opts_orig['linktopost'] == true; if ($postlink || isset($page_url)) { $rep .= "eventClick: function(calEvent, jsEvent, view) {"; if ($postlink) { $rep .= "if (calEvent.post_url != '') { document.location.href=calEvent.post_url; return; }"; } if (!empty($page_url)) { $rep .= "document.location.href='{$page_url}'+calEvent.id;"; } $rep .= "},"; } $rep .= "events: function(start, end, callback) {\n\t\t\t\t\t \tjQuery.post(\n\t\t\t\t\t \t\tWPCalendar.ajaxUrl,\n\t\t\t\t\t \t\t{\n\t\t\t\t\t \t\t\taction: 'wpcal-getevents',\n\t\t\t\t\t start: Math.round(start.getTime() / 1000),\n\t\t\t\t\t end: Math.round(end.getTime() / 1000)" . (isset($opts['include']) ? ",include:'" . $opts['include'] . "'" : '') . (isset($opts['exclude']) ? ",exclude:'" . $opts['exclude'] . "'" : '') . (isset($opts['categories']) ? ",categories:'" . $opts['categories'] . "'" : '') . (isset($opts['state']) ? ",state:'" . $opts['state'] . "'" : '') . (isset($opts['author']) ? ",author:'" . $opts['author'] . "'" : '') . "},\n\t\t\t\t\t \t\tfunction(events) {\n\t\t\t\t\t \t\t\tvar evt = eval(events);\n\t\t\t\t\t \t\t\tcallback(evt);\n\t\t\t\t\t \t\t}\n\t\t\t\t\t \t);\n\t\t\t\t\t },"; if ($rep[strlen($rep) - 1] == ',') { $rep = substr($rep, 0, strlen($rep) - 1); } $rep .= '})});'; $rep .= '</script>'; break; } $content = preg_replace('/' . preg_quote($m[0], '/') . '/', str_replace('$', '\\$', $rep), $content, 1); } return $content; }
/** * Returns the formatted end date/time string * @param $fmt Format (See PHP function date()) * @param $mode Mode (1=Date+Time, 2=Date only, 3=Time only) * @return String Formatted date string */ function getEnd($fmt = '', $mode = 1) { if (empty($this->tsto)) { return ''; } if (empty($fmt)) { switch ($mode) { case 1: $fmt = $this->date_format . ' ' . $this->time_format; break; case 2: $fmt = $this->date_format; break; case 3: $fmt = $this->time_format; break; } } return fsCalendar::date_i18n($fmt, $this->tsto); }