/**
  * Archive shortcode handler.
  */
 function process_archive_shortcode($args = array(), $content = false)
 {
     $args = $this->_preparse_arguments($args, array('network' => false, 'date' => false, 'relative_date' => false, 'lookahead' => false, 'weeks' => false, 'category' => false, 'categories' => false, 'limit' => false, 'order' => false, 'paged' => false, 'page' => 1, 'class' => false, 'template' => 'get_shortcode_archive_output', 'override_styles' => false, 'override_scripts' => false));
     if ($args['paged']) {
         $requested_page = get_query_var('page');
         $requested_page = $requested_page ? $requested_page : get_query_var('paged');
         $args['page'] = $requested_page ? $requested_page : $args['page'];
     }
     $events = array();
     if (is_multisite() && $args['network']) {
         $events = Eab_Network::get_upcoming_events(30);
     } else {
         $query = $this->_to_query_args($args);
         $order_method = $args['order'] ? create_function('', 'return "' . $args['order'] . '";') : false;
         if ($order_method) {
             add_filter('eab-collection-date_ordering_direction', $order_method);
         }
         // Lookahead - depending on presence, use regular upcoming query, or poll week count
         if ($args['lookahead']) {
             $method = $args['weeks'] ? create_function('', 'return ' . $args['weeks'] . ';') : false;
             if ($method) {
                 add_filter('eab-collection-upcoming_weeks-week_number', $method);
             }
             $events = Eab_CollectionFactory::get_upcoming_weeks_events($args['date'], $query);
             if ($method) {
                 remove_filter('eab-collection-upcoming_weeks-week_number', $method);
             }
         } else {
             // No lookahead, get the full month only
             $events = Eab_CollectionFactory::get_upcoming_events($args['date'], $query);
         }
         if ($order_method) {
             remove_filter('eab-collection-date_ordering_direction', $order_method);
         }
     }
     $output = Eab_Template::util_apply_shortcode_template($events, $args);
     if ($output) {
         if ($args['paged'] && !(is_multisite() && $args['network'])) {
             if ($method) {
                 add_filter('eab-collection-upcoming_weeks-week_number', $method);
             }
             $events_query = $args['lookahead'] ? Eab_CollectionFactory::get_upcoming_weeks($args['date'], $query) : Eab_CollectionFactory::get_upcoming($args['date'], $query);
             if ($method) {
                 remove_filter('eab-collection-upcoming_weeks-week_number', $method);
             }
             $output .= eab_call_template('get_shortcode_paging', $events_query, $args);
         }
     } else {
         $output = $content;
     }
     if (!$args['override_styles']) {
         wp_enqueue_style('eab_front');
     }
     if (!$args['override_scripts']) {
         wp_enqueue_script('eab_event_js');
         do_action('eab-javascript-do_enqueue_api_scripts');
     }
     return $output;
 }
 public function get_weekly_calendar($timestamp = false, $id = '', $class = '')
 {
     $options = Eab_Options::get_instance();
     if (!is_object($options)) {
         $options = new Eab_Options();
     }
     $timestamp = $timestamp ? $timestamp : $this->get_local_time();
     $year = date("Y", $timestamp);
     $month = date("m", $timestamp);
     //$query = Eab_CollectionFactory::get_upcoming(strtotime("{$year}-{$month}-01 00:00"));
     $query = Eab_CollectionFactory::get_upcoming_weeks(strtotime("{$year}-{$month}-01 00:00"));
     $this->_events = $query->posts;
     $date = $timestamp ? $timestamp : $this->get_local_time();
     $sunday = $this->sunday($date);
     // Timestamp of first Sunday of any date
     if (!($start = $this->_data->get_option('weekly_calendar_start')) or $start > 23) {
         $start = 10;
     }
     // Set a default working time start
     $first = $start * 3600 + $sunday;
     // Timestamp of the first cell of first Sunday
     if (!($end = $this->_data->get_option('weekly_calendar_end')) or $end < 1) {
         $end = 24;
     }
     // Set a default working time end
     $last = $end * 3600 + $sunday;
     // Timestamp of the last cell of first Sunday
     if (!($interval = $this->_data->get_option('weekly_calendar_interval')) or $interval < 10 or $interval > 60 * 12) {
         $interval = 120;
     }
     // Set a default interval in minutes
     $step = $interval * 60;
     // Timestamp increase interval to one cell below
     $days = $this->arrange(array(0, 1, 2, 3, 4, 5, 6), -1);
     // Arrange days acc. to start of week
     $post_info = array();
     foreach ($this->_events as $event) {
         $post_info[] = $this->_get_item_data($event);
     }
     $tbl_id = $id;
     $tbl_id = $tbl_id ? "id='{$tbl_id}'" : '';
     $tbl_class = $class;
     $tbl_class = $tbl_class ? "class='{$tbl_class}'" : '';
     $ret = '';
     $ret .= "<table width='100%' {$tbl_id} {$tbl_class}>";
     $ret .= $this->_get_table_meta_row('thead');
     $ret .= '<tbody>';
     $ret .= $this->_get_first_row();
     $todays_no = date("w", $this->get_local_time());
     // Number of today
     for ($t = $first; $t < $last; $t = $t + $step) {
         foreach ($days as $key => $i) {
             // Not sure if it's current fix, but it works!
             if ($i == 0) {
                 $i = 7;
             }
             if ($i == -1) {
                 $from = $this->secs2hours($t - $sunday);
                 $to = $this->secs2hours($t - $sunday + $step);
                 $ret .= "<td class='wpmudevevents-weekly-calendar-hours-mins'>" . $from . " - " . $to . "</td>";
             } else {
                 $current_cell_start = $t + $i * 86400;
                 $current_cell_end = $current_cell_start + $step;
                 $this->reset_event_info_storage();
                 foreach ($post_info as $ipost) {
                     $count = count($ipost['event_starts']);
                     for ($k = 0; $k < $count; $k++) {
                         $start = strtotime($ipost['event_starts'][$k]);
                         $end = strtotime($ipost['event_ends'][$k]);
                         if ($start < $current_cell_end && $end > $current_cell_start) {
                             if ($options->get_option('weekly_calendar_display')) {
                                 $this->set_event_info_author(array('start' => $start, 'end' => $end), array('start' => $current_cell_start, 'end' => $current_cell_end), $ipost);
                             } else {
                                 $this->set_event_info(array('start' => $start, 'end' => $end), array('start' => $current_cell_start, 'end' => $current_cell_end), $ipost);
                             }
                         }
                     }
                 }
                 $activity = $this->get_event_info_as_string($i);
                 $now = $todays_no == $i ? 'class="today"' : '';
                 if ($this->get_local_time() < $current_cell_end && $this->get_local_time() > $current_cell_start) {
                     $now = 'class="now"';
                 }
                 $ret .= "<td {$now}>{$activity}</td>";
             }
         }
         $ret .= '</tr><tr>';
         // Close the last day of the week
     }
     $ret .= $this->_get_last_row();
     $ret .= '</tbody>';
     $ret .= $this->_get_table_meta_row('tfoot');
     $ret .= '</table>';
     return $ret;
 }