function widget($args, $instance)
 {
     extract($args, EXTR_SKIP);
     echo $before_widget . $before_title;
     echo ec3_widget_title($instance['title'], 'Upcoming Events');
     echo $after_title;
     if (ec3_check_installed(__('Upcoming Events', 'ec3'))) {
         // Parse $limit:
         //  NUMBER      - limits number of posts
         //  NUMBER days - next NUMBER of days
         $limit = $instance['limit'];
         $num = intval($limit);
         $query = new WP_Query();
         if (preg_match('/^ *([0-9]+) *d(ays?)?/', $limit, $matches)) {
             $query->query('ec3_days=' . intval($matches[1]));
         } elseif ($num > 0) {
             $query->query('ec3_after=today&posts_per_page=' . $num);
         } elseif ($num < 0) {
             $query->query('ec3_before=today&order=asc&posts_per_page=' . abs($num));
         } else {
             $query->query('ec3_after=today&posts_per_page=5');
         }
         echo "<ul class='ec3_events'>";
         echo '<!-- Generated by Event-Calendar v' . ec3_get_version() . ' -->' . "\n";
         if ($query->have_posts()) {
             $current_date = false;
             for ($evt = ec3_iter_all_events_q($query); $evt->valid(); $evt->next()) {
                 // Date changed?
                 $date = ec3_get_date();
                 if (!$current_date || $current_date != $date) {
                     if ($current_date) {
                         echo "</ul></li>\n";
                     }
                     echo "<li class='ec3_list ec3_list_day'>{$date}:\n<ul>\n";
                     $current_date = $date;
                 }
                 // Print the event.
                 echo ' <li><a href="' . get_permalink() . '">' . get_the_title() . ' (' . ec3_get_start_time() . ')</a></li>' . "\n";
             }
             if ($current_date) {
                 echo "</ul></li>\n";
             }
         } else {
             echo "<li>" . __('No events.', 'ec3') . "</li>\n";
         }
         echo "</ul>\n";
     }
     echo $after_widget;
 }
/** Template function, for backwards compatibility.
 *  Call this from your template to insert a list of forthcoming events.
 *  Available template variables are:
 *   - template_day: %DATE% %SINCE% (only with Time Since plugin)
 *   - template_event: %DATE% %TIME% %LINK% %TITLE% %AUTHOR%
 */
function ec3_get_events($limit, $template_event = EC3_DEFAULT_TEMPLATE_EVENT, $template_day = EC3_DEFAULT_TEMPLATE_DAY, $date_format = EC3_DEFAULT_DATE_FORMAT, $template_month = EC3_DEFAULT_TEMPLATE_MONTH, $month_format = EC3_DEFAULT_MONTH_FORMAT)
{
    if (!ec3_check_installed(__('Upcoming Events', 'ec3'))) {
        return;
    }
    // Parse $limit:
    //  NUMBER      - limits number of posts
    //  NUMBER days - next NUMBER of days
    $query = new WP_Query();
    if (preg_match('/^ *([0-9]+) *d(ays?)?/', $limit, $matches)) {
        $query->query('ec3_listing=event&ec3_days=' . intval($matches[1]));
    } elseif (intval($limit) > 0) {
        $query->query('ec3_after=today&posts_per_page=' . intval($limit));
    } elseif (intval($limit) < 0) {
        $query->query('ec3_before=today&order=asc&posts_per_page=' . abs(intval($limit)));
    } else {
        $query->query('ec3_after=today&posts_per_page=5');
    }
    echo "<ul class='ec3_events'>";
    echo '<!-- Generated by Event-Calendar v' . ec3_get_version() . ' -->' . "\n";
    if ($query->have_posts()) {
        $current_month = false;
        $current_date = false;
        $data = array();
        for ($evt = ec3_iter_all_events_q($query); $evt->valid(); $evt->next()) {
            $data['SINCE'] = ec3_get_since();
            // Month changed?
            $data['MONTH'] = ec3_get_month($month_format);
            if ((!$current_month || $current_month != $data['MONTH']) && $template_month) {
                if ($current_date) {
                    echo "</ul></li>\n";
                }
                if ($current_month) {
                    echo "</ul></li>\n";
                }
                echo "<li class='ec3_list ec3_list_month'>" . ec3_format_str($template_month, $data) . "\n<ul>\n";
                $current_month = $data['MONTH'];
                $current_date = false;
            }
            // Date changed?
            $data['DATE'] = ec3_get_date($date_format);
            if ((!$current_date || $current_date != $data['DATE']) && $template_day) {
                if ($current_date) {
                    echo "</ul></li>\n";
                }
                echo "<li class='ec3_list ec3_list_day'>" . ec3_format_str($template_day, $data) . "\n<ul>\n";
                $current_date = $data['DATE'];
            }
            $data['TIME'] = ec3_get_start_time();
            $data['TITLE'] = get_the_title();
            $data['LINK'] = get_permalink();
            $data['AUTHOR'] = get_the_author();
            echo " <li>" . ec3_format_str($template_event, $data) . "</li>\n";
        }
        if ($current_date) {
            echo "</ul></li>\n";
        }
        if ($current_month) {
            echo "</ul></li>\n";
        }
    } else {
        echo "<li>" . __('No events.', 'ec3') . "</li>\n";
    }
    echo "</ul>\n";
}