/**
  * Parses a shortcode, returning the appropriate event information
  * Much of this code is 'borrowed' from WordPress' own shortcode handling stuff!
  */
 protected function process_shortcode($m)
 {
     if ('[' == $m[1] && ']' == $m[6]) {
         return substr($m[0], 1, -1);
     }
     //Extract any attributes contained in the shortcode
     extract(shortcode_atts(array('format' => '', 'limit' => '0', 'size' => 'post-thumbnail', 'link' => 'false', 'cond' => ''), shortcode_parse_atts($m[3])));
     //Sanitize the attributes
     $format = esc_attr($format);
     $cond = esc_attr($cond);
     $size = esc_attr($size);
     $limit = absint($limit);
     $link = 'true' === $link;
     // Do the appropriate stuff depending on which shortcode we're looking at.
     // See valid shortcode list (above) for explanation of each shortcode
     switch ($m[2]) {
         case 'event-title':
             $title = esc_html(trim(get_the_title()));
             //If a word limit has been set, trim the title to the required length
             if (0 != $limit) {
                 preg_match('/([\\S]+\\s*){0,' . $limit . '}/', $title, $title);
                 $title = trim($title[0]);
             }
             if ($link) {
                 return $m[1] . '<a href="' . get_permalink() . '">' . $title . '</a>' . $m[6];
             } else {
                 return $m[1] . $title . $m[6];
             }
         case 'thumbnail':
             $thumbnail = get_the_post_thumbnail(get_the_ID(), $size);
             return $m[1] . $thumbnail . $m[6];
         case 'content':
             $content = get_the_content();
             //If a word limit has been set, trim the title to the required length
             if (0 != $limit) {
                 preg_match('/([\\S]+\\s*){0,' . $limit . '}/', $content, $content);
                 $content = trim($content[0]);
             }
             return $m[1] . $content . $m[6];
         case 'permalink':
             return $m[1] . get_permalink() . $m[6];
         case 'excerpt':
             $excerpt = get_the_excerpt();
             if (0 != $limit) {
                 preg_match('/([\\S]+\\s*){0,' . $limit . '}/', $excerpt, $excerpt);
                 $excerpt = trim($excerpt[0]);
             }
             return $m[1] . get_the_excerpt() . $m[6];
         case 'event-category':
             $categoryArray = am_get_the_event_category();
             if (count($categoryArray) > 0) {
                 if ($link) {
                     return $m[1] . '<a href="' . get_term_link($categoryArray[0]) . '">' . $categoryArray[0]->name . '</a>' . $m[6];
                 } else {
                     return $m[1] . $categoryArray[0]->name . $m[6];
                 }
             } else {
                 return '-';
             }
         case 'event-venue':
             $venueArray = am_get_the_venue();
             if (count($venueArray) > 0) {
                 if ($link) {
                     return $m[1] . '<a href="' . get_term_link($venueArray[0]) . '">' . $venueArray[0]->name . '</a>' . $m[6];
                 } else {
                     return $m[1] . $venueArray[0]->name . $m[6];
                 }
             } else {
                 return '-';
             }
         case 'start-date':
             $startdate = am_get_the_startdate();
             $format = $format === '' ? "m/d/Y H:i" : $format;
             return $m[1] . date_i18n($format, strtotime($startdate)) . $m[6];
         case 'end-date':
             $enddate = am_get_the_enddate();
             $format = $format === '' ? "m/d/Y H:i" : $format;
             return $m[1] . date_i18n($format, strtotime($enddate)) . $m[6];
         case 'if':
             switch ($cond) {
                 case 'startdate-not-enddate':
                     $result = am_get_the_startdate() !== am_get_the_enddate() ? $m[1] . $m[5] . $m[6] : '';
                     return $this->parse_event($result);
                 case 'startday-not-endday':
                     $start_day = date('mdY', strtotime(am_get_the_startdate()));
                     $end_day = date('mdY', strtotime(am_get_the_enddate()));
                     $result = $start_day !== $end_day ? $m[1] . $m[5] . $m[6] : '';
                     return $this->parse_event($result);
                 case 'startdate-is-enddate':
                     $result = am_get_the_startdate() === am_get_the_enddate() ? $m[1] . $m[5] . $m[6] : '';
                     return $this->parse_event($result);
                 case 'startday-is-endday':
                     $start_day = date('mdY', strtotime(am_get_the_startdate()));
                     $end_day = date('mdY', strtotime(am_get_the_enddate()));
                     $result = $start_day === $end_day ? $m[1] . $m[5] . $m[6] : '';
                     return $this->parse_event($result);
                 default:
                     return $this->parse_event($m[1] . $m[5] . $m[6]);
             }
     }
 }
/**
 * Retrieve event category list in either HTML list or custom format.
 *
 * @since 1.3.0
 *
 * @param string $separator Optional, default is empty string. Separator for between the categories.
 * @param string $parents Optional. How to display the parents.
 * @param int $post_id Optional. Event post ID to retrieve categories.
 * @return string
 */
function am_get_the_event_category_list($separator = '', $parents = '', $post_id = false)
{
    global $wp_rewrite;
    if (!is_object_in_taxonomy(get_post_type($post_id), 'am_event_categories')) {
        return apply_filters('am_the_event_category', '', $separator, $parents);
    }
    $categories = am_get_the_event_category($post_id);
    if (empty($categories)) {
        return apply_filters('am_the_event_category', __('Uncategorized'), $separator, $parents);
    }
    $rel = is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ? 'rel="category tag"' : 'rel="category"';
    $thelist = '';
    if ('' == $separator) {
        $thelist .= '<ul class="event-categories">';
        foreach ($categories as $category) {
            $thelist .= "\n\t<li>";
            switch (strtolower($parents)) {
                case 'multiple':
                    if ($category->parent) {
                        $thelist .= get_category_parents($category->parent, true, $separator);
                    }
                    $thelist .= '<a href="' . esc_url(get_category_link($category->term_id)) . '" title="' . esc_attr(sprintf(_x("View all events in %s", "Category", "am-events"), $category->name)) . '" ' . $rel . '>' . $category->name . '</a></li>';
                    break;
                case 'single':
                    $thelist .= '<a href="' . esc_url(get_category_link($category->term_id)) . '" title="' . esc_attr(sprintf(_x("View all events in %s", "Category", "am-events"), $category->name)) . '" ' . $rel . '>';
                    if ($category->parent) {
                        $thelist .= get_category_parents($category->parent, false, $separator);
                    }
                    $thelist .= $category->name . '</a></li>';
                    break;
                case '':
                default:
                    $thelist .= '<a href="' . esc_url(get_category_link($category->term_id)) . '" title="' . esc_attr(sprintf(_x("View all events in %s", "Category", "am-events"), $category->name)) . '" ' . $rel . '>' . $category->name . '</a></li>';
            }
        }
        $thelist .= '</ul>';
    } else {
        $i = 0;
        foreach ($categories as $category) {
            if (0 < $i) {
                $thelist .= $separator;
            }
            switch (strtolower($parents)) {
                case 'multiple':
                    if ($category->parent) {
                        $thelist .= get_category_parents($category->parent, true, $separator);
                    }
                    $thelist .= '<a href="' . esc_url(get_category_link($category->term_id)) . '" title="' . esc_attr(sprintf(_x("View all events in %s", "Category", "am-events"), $category->name)) . '" ' . $rel . '>' . $category->name . '</a>';
                    break;
                case 'single':
                    $thelist .= '<a href="' . esc_url(get_category_link($category->term_id)) . '" title="' . esc_attr(sprintf(_x("View all events in %s", "Category", "am-events"), $category->name)) . '" ' . $rel . '>';
                    if ($category->parent) {
                        $thelist .= get_category_parents($category->parent, false, $separator);
                    }
                    $thelist .= "{$category->name}</a>";
                    break;
                case '':
                default:
                    $thelist .= '<a href="' . esc_url(get_category_link($category->term_id)) . '" title="' . esc_attr(sprintf(_x("View all events in %s", "Category", "am-events"), $category->name)) . '" ' . $rel . '>' . $category->name . '</a>';
            }
            ++$i;
        }
    }
    return apply_filters('am_the_event_category', $thelist, $separator, $parents);
}