/** * Standard modular run function. * * @return tempcode The result of execution. */ function run() { if (!addon_installed('calendar')) { return new ocp_tempcode(); } require_lang('calendar'); $bits = new ocp_tempcode(); if (get_option('calendar_show_stats_count_events', true) == '1') { $bits->attach(do_template('BLOCK_SIDE_STATS_SUBLINE', array('KEY' => do_lang_tempcode('EVENTS'), 'VALUE' => integer_format($GLOBALS['SITE_DB']->query_value('calendar_events', 'COUNT(*)'))))); } if (get_option('calendar_show_stats_count_events_this_week', true) == '1') { require_code('calendar'); $events = calendar_matches($GLOBALS['FORUM_DRIVER']->get_guest_id(), true, utctime_to_usertime(time()), utctime_to_usertime(time() + 60 * 60 * 24 * 7)); $bits->attach(do_template('BLOCK_SIDE_STATS_SUBLINE', array('KEY' => do_lang_tempcode('EVENTS_THIS_WEEK'), 'VALUE' => integer_format(count($events))))); } if (get_option('calendar_show_stats_count_events_this_month', true) == '1') { require_code('calendar'); $events = calendar_matches($GLOBALS['FORUM_DRIVER']->get_guest_id(), true, utctime_to_usertime(time()), utctime_to_usertime(time() + 60 * 60 * 24 * 31)); $bits->attach(do_template('BLOCK_SIDE_STATS_SUBLINE', array('KEY' => do_lang_tempcode('EVENTS_THIS_MONTH'), 'VALUE' => integer_format(count($events))))); } if (get_option('calendar_show_stats_count_events_this_year', true) == '1') { require_code('calendar'); $events = calendar_matches($GLOBALS['FORUM_DRIVER']->get_guest_id(), true, utctime_to_usertime(time()), utctime_to_usertime(time() + 60 * 60 * 24 * 365)); $bits->attach(do_template('BLOCK_SIDE_STATS_SUBLINE', array('KEY' => do_lang_tempcode('EVENTS_THIS_YEAR'), 'VALUE' => integer_format(count($events))))); } if ($bits->is_empty()) { return new ocp_tempcode(); } $section = do_template('BLOCK_SIDE_STATS_SECTION', array('SECTION' => do_lang_tempcode('CALENDAR'), 'CONTENT' => $bits)); return $section; }
/** * Standard modular run function for realtime-rain hooks. * * @param TIME Start of time range. * @param TIME End of time range. * @return array A list of template parameter sets for rendering a 'drop'. */ function run($from, $to) { $drops = array(); if (has_actual_page_access(get_member(), 'calendar')) { require_code('calendar'); $rows = calendar_matches(get_member(), true, $from, $to); // NOTE: We also show (automatically) any RSS items the user has overlayed onto the calendar foreach ($rows as $row) { $timestamp = $row[2]; $member_id = $row[1]['e_submitter']; $drops[] = rain_get_special_icons(NULL, $timestamp) + array('TYPE' => 'calendar', 'FROM_MEMBER_ID' => strval($member_id), 'TO_MEMBER_ID' => NULL, 'TITLE' => rain_truncate_for_title(get_translated_text($row[1]['e_title'])), 'IMAGE' => $row[1]['t_logo'], 'TIMESTAMP' => strval($timestamp), 'RELATIVE_TIMESTAMP' => strval($timestamp - $from), 'TICKER_TEXT' => NULL, 'URL' => build_url(array('page' => 'calendar', 'type' => 'event', 'id' => $row[1]['id']), '_SEARCH'), 'IS_POSITIVE' => false, 'IS_NEGATIVE' => false, 'FROM_ID' => 'member_' . strval($member_id), 'TO_ID' => NULL, 'GROUP_ID' => 'event_' . strval($row[1]['id'])); } } return $drops; }
/** * Standard modular run function for RSS hooks. * * @param string A list of categories we accept from * @param TIME Cutoff time, before which we do not show results from * @param string Prefix that represents the template set we use * @set RSS_ ATOM_ * @param string The standard format of date to use for the syndication type represented in the prefix * @param integer The maximum number of entries to return, ordering by date * @return ?array A pair: The main syndication section, and a title (NULL: error) */ function run($_filters, $cutoff, $prefix, $date_string, $max) { if (!addon_installed('calendar')) { return NULL; } if (!has_actual_page_access(get_member(), 'calendar')) { return NULL; } $filters = ocfilter_to_sqlfragment($_filters, 'c.id', 'calendar_types', NULL, 'e_type', 'id'); $content = new ocp_tempcode(); $_categories = $GLOBALS['SITE_DB']->query('SELECT c.id,c.t_title FROM ' . $GLOBALS['SITE_DB']->get_table_prefix() . 'calendar_types c WHERE ' . $filters, NULL, NULL, false, false, array('t_title')); foreach ($_categories as $i => $_category) { $_categories[$i]['text_original'] = get_translated_text($_category['t_title']); } $categories = collapse_2d_complexity('id', 'text_original', $_categories); //$rows=$GLOBALS['SITE_DB']->query('SELECT * FROM '.$GLOBALS['SITE_DB']->get_table_prefix().'calendar_events WHERE e_add_date>'.strval((integer)$cutoff).' ORDER BY e_add_date DESC',$max); $period_start = utctime_to_usertime($cutoff); $period_end = utctime_to_usertime(time() * 2 - $cutoff); if (is_float($period_end)) { $period_end = intval($period_end); } require_code('calendar'); $rows = calendar_matches(get_member(), true, $period_start, $period_end, NULL, false); $rows = array_reverse($rows); foreach ($rows as $i => $_row) { if ($i == $max) { break; } $row = $_row[1]; if (!array_key_exists('id', $row)) { continue; } // RSS event $id = strval($row['id']); $author = ''; // The "add" date'll be actually used for the event time //$_news_date=mktime($row['e_start_hour'],$row['e_start_minute'],0,$row['e_start_month'],$row['e_start_day'],$row['e_start_year']); $_news_date = $_row[2]; $news_date = date($date_string, usertime_to_utctime($_news_date)); // The edit date'll be the latest of add/edit $edit_date = is_null($row['e_edit_date']) ? date($date_string, $row['e_add_date']) : date($date_string, $row['e_edit_date']); $news_title = xmlentities(escape_html(get_translated_text($row['e_title']))); $_summary = get_translated_tempcode($row['e_content']); $summary = xmlentities($_summary->evaluate()); $news = ''; $category = array_key_exists($row['e_type'], $categories) ? $categories[$row['e_type']] : ''; $category_raw = strval($row['e_type']); $view_url = build_url(array('page' => 'calendar', 'type' => 'view', 'id' => $row['id']), get_module_zone('calendar'), NULL, false, false, true); if (!array_key_exists('allow_comments', $row)) { $row['allow_comments'] = 1; } if ($prefix == 'RSS_' && get_option('is_on_comments') == '1' && $row['allow_comments'] >= 1) { $if_comments = do_template('RSS_ENTRY_COMMENTS', array('_GUID' => '202a32693ce54d9ce960b72e66714df0', 'COMMENT_URL' => $view_url, 'ID' => strval($row['id']))); } else { $if_comments = new ocp_tempcode(); } $content->attach(do_template($prefix . 'ENTRY', array('VIEW_URL' => $view_url, 'SUMMARY' => $summary, 'EDIT_DATE' => $edit_date, 'IF_COMMENTS' => $if_comments, 'TITLE' => $news_title, 'CATEGORY_RAW' => $category_raw, 'CATEGORY' => $category, 'AUTHOR' => $author, 'ID' => $id, 'NEWS' => $news, 'DATE' => $news_date))); } require_lang('calendar'); return array($content, do_lang('CALENDAR')); }
/** * The calendar area view for viewing a single year. * * @param string The year we are viewing * @param string The day (Y-m-d) we are viewing * @param array List of components of our viewed ID * @param MEMBER The member ID we are viewing as * @param ?array The type filter (NULL: none) * @return tempcode The UI */ function view_calendar_view_year($view_id, $day, $explode, $member_id, $filter) { $period_start = mktime(0, 0, 0, 1, 1, intval($explode[0])); $period_end = mktime(0, 0, 0, 1, 0, intval($explode[0]) + 1); $happenings = calendar_matches($member_id, true, $period_start, $period_end, $filter); global $M_SORT_KEY; $M_SORT_KEY = 0; usort($happenings, 'multi_sort'); $months = ''; $month_rows = new ocp_tempcode(); for ($i = 1; $i <= 12; $i++) { $entries = array(); $priorities = array(); if (($i - 1) % 3 == 0 && $i != 1) { if ($i == 4) { list($month_a, $month_b, $month_c) = array(do_lang_tempcode('JANUARY'), do_lang_tempcode('FEBRUARY'), do_lang_tempcode('MARCH')); } if ($i == 7) { list($month_a, $month_b, $month_c) = array(do_lang_tempcode('APRIL'), do_lang_tempcode('MAY'), do_lang_tempcode('JUNE')); } if ($i == 10) { list($month_a, $month_b, $month_c) = array(do_lang_tempcode('JULY'), do_lang_tempcode('AUGUST'), do_lang_tempcode('SEPTEMBER')); } $map = array_merge($filter, array('page' => '_SELF', 'type' => 'misc', 'view' => 'month', 'id' => $explode[0] . '-' . strval($i - 3))); if (get_param_integer('member_id', get_member()) != get_member()) { $map['member_id'] = get_param_integer('member_id'); } $month_a_url = build_url($map, '_SELF'); $map = array_merge($filter, array('page' => '_SELF', 'type' => 'misc', 'view' => 'month', 'id' => $explode[0] . '-' . strval($i - 2))); if (get_param_integer('member_id', get_member()) != get_member()) { $map['member_id'] = get_param_integer('member_id'); } $month_b_url = build_url($map, '_SELF'); $map = array_merge($filter, array('page' => '_SELF', 'type' => 'misc', 'view' => 'month', 'id' => $explode[0] . '-' . strval($i - 1))); if (get_param_integer('member_id', get_member()) != get_member()) { $map['member_id'] = get_param_integer('member_id'); } $month_c_url = build_url($map, '_SELF'); $month_rows->attach(do_template('CALENDAR_YEAR_MONTH_ROW', array('_GUID' => 'cf4f7b66a32afee1c69b2e4338af8dd5', 'MONTHS' => $months, 'MONTH_A_URL' => $month_a_url, 'MONTH_B_URL' => $month_b_url, 'MONTH_C_URL' => $month_c_url, 'MONTH_A' => $month_a, 'MONTH_B' => $month_b, 'MONTH_C' => $month_c))); $months = ''; } foreach ($happenings as $happening) { list($e_id, $event, $from, $to, $real_from, $real_to, $utc_real_from) = $happening; $date = date('m', $from); if (intval($date) == $i) { if (is_numeric($e_id)) { $map = array_merge($filter, array('page' => '_SELF', 'type' => 'view', 'id' => $event['e_id'], 'day' => date('Y-m-d', $utc_real_from), 'date' => $view_id, 'back' => 'year')); if (get_param_integer('member_id', get_member()) != get_member()) { $map['member_id'] = get_param_integer('member_id'); } $url = build_url($map, '_SELF'); } else { $url = $e_id; } $icon = $event['t_logo']; $title = is_integer($event['e_title']) ? get_translated_text($event['e_title']) : $event['e_title']; $date = locale_filter(date(do_lang('calendar_date'), $real_from)); $_from = $from; do { $_day = intval(date('d', $_from)); if (!array_key_exists($_day, $entries)) { $entries[$_day] = array('ID' => is_string($event['e_id']) ? $event['e_id'] : strval($event['e_id']), 'T_TITLE' => array_key_exists('t_title', $event) ? is_string($event['t_title']) ? $event['t_title'] : get_translated_text($event['t_title']) : 'RSS', 'PRIORITY' => strval($event['e_priority']), 'ICON' => $icon, 'TIME' => $date, 'TITLE' => $title, 'URL' => $url); $priorities[$_day] = $event['e_priority']; } else { $entries[$_day] = is_array($entries[$_day]) ? 2 : $entries[$_day] + 1; $priorities[$_day] = min($priorities[$_day], $event['e_priority']); } // Maybe spanning multiple days of month if (!is_null($to)) { $_explode = explode('-', date('d-m', $to)); $continues = intval($_explode[0]) != $_day || intval($_explode[1]) != $i; if ($continues) { $_from = mktime(0, 0, 0, intval(date('m', $_from)), intval(date('d', $_from)) + 1, intval(date('Y', $_from))); if (intval(date('m', $_from)) != $i) { $continues = false; } // Don't let it roll to another month } } else { $continues = false; } } while ($continues); // Push to other months too if (!is_null($to)) { $date2 = date('m', $to); if (intval($date2) > $i) { $ntime = mktime(0, 0, 0, intval(date('m', $from)) + 1, 1, intval(date('Y', $from))); $happenings[] = array($e_id, $event, $ntime, $to, $real_from, $real_to, $utc_real_from); } } } } $_period_start = mktime(0, 0, 0, $i, 1, intval($explode[0])); $_period_end = mktime(0, 0, 0, $i + 1, 0, intval($explode[0])); $_days = intval(round(floatval($_period_end - $_period_start) / floatval(60 * 60 * 24))); $_entries = new ocp_tempcode(); $__entries = new ocp_tempcode(); $_dotw = date('D', $_period_start); if (get_option('ssw') == '0') { $ex_array = array('Mon' => 0, 'Tue' => 1, 'Wed' => 2, 'Thu' => 3, 'Fri' => 4, 'Sat' => 5, 'Sun' => 6); } else { $ex_array = array('Sun' => 0, 'Mon' => 1, 'Tue' => 2, 'Wed' => 3, 'Thu' => 4, 'Fri' => 5, 'Sat' => 6); } $dotw = $ex_array[$_dotw]; for ($j = 0; $j < $dotw; $j++) { $__entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_SPACER')); } for ($j = 1; $j <= $_days + 1; $j++) { $date = $explode[0] . '-' . str_pad(strval($i), 2, '0', STR_PAD_LEFT) . '-' . str_pad(strval($j), 2, '0', STR_PAD_LEFT); $date_formatted = locale_filter(date(do_lang('calendar_date'), mktime(0, 0, 0, $i, $j, intval($explode[0])))); $map = array_merge($filter, array('page' => '_SELF', 'type' => 'misc', 'view' => 'day', 'id' => $date)); if (get_param_integer('member_id', get_member()) != get_member()) { $map['member_id'] = get_param_integer('member_id'); } $day_url = build_url($map, '_SELF'); if (!array_key_exists($j, $entries)) { $class = 'free_time'; $__entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_FREE', array('_GUID' => 'cccf839895121ae14fd1948ed4024d4b', 'CURRENT' => date('Y-m-d') == $date, 'DAY_URL' => $day_url, 'DATE' => $date_formatted, 'DAY' => strval($j), 'CLASS' => $class))); } elseif (is_array($entries[$j])) { $class = 'single'; $events_and_priority_lang = do_lang_tempcode('TOTAL_EVENTS_AND_HIGHEST_PRIORITY', '1', do_lang_tempcode('PRIORITY_' . strval($priorities[$j]))); $__entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_ACTIVE', array_merge(array('CURRENT' => date('Y-m-d') == $date, 'DAY_URL' => $day_url, 'DATE' => $date_formatted, 'DAY' => strval($j), 'CLASS' => $class, 'COUNT' => '1', 'EVENTS_AND_PRIORITY_LANG' => $events_and_priority_lang), $entries[$j]))); } else { $class = 'multiple'; $e_count = integer_format($entries[$j]); $events_and_priority_lang = do_lang_tempcode('TOTAL_EVENTS_AND_HIGHEST_PRIORITY', make_string_tempcode($e_count), do_lang_tempcode('PRIORITY_' . strval($priorities[$j]))); $__entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_ACTIVE', array('_GUID' => '9f016773fce6402eca1a7a0afa6bb89f', 'CURRENT' => date('Y-m-d') == $date, 'DAY_URL' => $day_url, 'DATE' => $date_formatted, 'TITLE' => '', 'TIME' => '', 'URL' => '', 'ID' => '', 'PRIORITY' => strval($priorities[$j]), 'DAY' => strval($j), 'ICON' => '', 'COUNT' => $e_count, 'EVENTS_AND_PRIORITY_LANG' => $events_and_priority_lang))); } if ($dotw == 6) { $_entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_ROW', array('_GUID' => 'f0d29f0cf53ba119a7ab4351807a9f2f', 'ENTRIES' => $__entries))); $__entries = new ocp_tempcode(); $dotw = 0; } else { $dotw++; } } if (!$__entries->is_empty()) { for ($j = $dotw; $j < 7; $j++) { $__entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_SPACER')); } $_entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_ROW', array('_GUID' => '5c7fa5d50e1e9eb30f0a19cc7da03c4b', 'ENTRIES' => $__entries))); } $month = do_template('CALENDAR_YEAR_MONTH', array('_GUID' => '58c9f4cc04186dce6e7ea3dd8ec9269b', 'ENTRIES' => $_entries)); $months .= $month->evaluate(); } $map = array_merge($filter, array('page' => '_SELF', 'type' => 'misc', 'view' => 'month', 'id' => $explode[0] . '-' . strval($i - 3))); if (get_param_integer('member_id', get_member()) != get_member()) { $map['member_id'] = get_param_integer('member_id'); } $month_a_url = build_url($map, '_SELF'); $map = array_merge($filter, array('page' => '_SELF', 'type' => 'misc', 'view' => 'month', 'id' => $explode[0] . '-' . strval($i - 2))); if (get_param_integer('member_id', get_member()) != get_member()) { $map['member_id'] = get_param_integer('member_id'); } $month_b_url = build_url($map, '_SELF'); $map = array_merge($filter, array('page' => '_SELF', 'type' => 'misc', 'view' => 'month', 'id' => $explode[0] . '-' . strval($i - 1))); if (get_param_integer('member_id', get_member()) != get_member()) { $map['member_id'] = get_param_integer('member_id'); } $month_c_url = build_url($map, '_SELF'); list($month_a, $month_b, $month_c) = array(do_lang_tempcode('OCTOBER'), do_lang_tempcode('NOVEMBER'), do_lang_tempcode('DECEMBER')); $month_rows->attach(do_template('CALENDAR_YEAR_MONTH_ROW', array('_GUID' => 'd169c06319ca2c089faa6fbb92b39115', 'MONTHS' => $months, 'MONTH_A_URL' => $month_a_url, 'MONTH_B_URL' => $month_b_url, 'MONTH_C_URL' => $month_c_url, 'MONTH_A' => $month_a, 'MONTH_B' => $month_b, 'MONTH_C' => $month_c))); return do_template('CALENDAR_YEAR', array('_GUID' => 'ee8f09d406eff18637b37b762bad62cd', 'MONTH_ROWS' => $month_rows, 'PERIOD_START' => strval($period_start), 'PERIOD_END' => strval($period_end))); }
/** * Standard modular run function. * * @param array A map of parameters. * @return tempcode The result of execution. */ function run($map) { require_code('calendar'); require_lang('calendar'); require_lang('dates'); require_css('calendar'); $year = intval(date('Y', utctime_to_usertime())); $month = intval(date('m', utctime_to_usertime())); $day = intval(date('d', utctime_to_usertime())); $zone = array_key_exists('zone', $map) ? $map['zone'] : get_module_zone('calendar'); $filter_map = array_key_exists('filter', $map) ? explode(",", $map['filter']) : NULL; $filter = $this->get_filter($filter_map); //if(!is_null($filter_str)) $filter=explode(",",$filter_str):NULL; $box_title = array_key_exists('title', $map) ? $map['title'] : do_lang_tempcode('COMING_SOON'); $calendar_url = build_url($filter + array('page' => 'calendar', 'type' => 'misc', 'view' => 'month', 'id' => strval($year) . '-' . strval($month)), $zone); $member = $GLOBALS['FORUM_DRIVER']->get_guest_id(); $type = array_key_exists('param', $map) ? $map['param'] : 'year'; if ($type != 'listing') { $period_start = mktime(0, 0, 0, $month, 1, $year); $period_end = mktime(23, 59, 0, $month + 1, 0, $year); $happenings = calendar_matches($member, true, $period_start, $period_end, $filter); $entries = array(); $priorities = array(); for ($hap_i = 0; $hap_i < count($happenings); $hap_i++) { $happening = $happenings[$hap_i]; list($e_id, $event, $from, $to, $real_from, $real_to) = $happening; $view_id = date('Y-m', $real_from); if (is_numeric($e_id)) { $map2 = $filter + array('page' => 'calendar', 'type' => 'view', 'id' => $event['e_id'], 'day' => $day, 'date' => $view_id, 'back' => 'month'); $url = build_url($map2, $zone); } else { $url = $e_id; } $icon = $event['t_logo']; $title = is_integer($event['e_title']) ? get_translated_text($event['e_title']) : $event['e_title']; $date = locale_filter(date(do_lang('calendar_date'), $real_from)); $_day = intval(date('d', $from)); if (!array_key_exists($_day, $entries)) { $entries[$_day] = array('ID' => strval($event['e_id']), 'T_TITLE' => array_key_exists('t_title', $event) ? is_string($event['t_title']) ? $event['t_title'] : get_translated_text($event['t_title']) : 'RSS', 'PRIORITY' => strval($event['e_priority']), 'ICON' => $icon, 'TIME' => $date, 'TITLE' => $title, 'URL' => $url); $priorities[$_day] = $event['e_priority']; } else { $entries[$_day] = is_array($entries[$_day]) ? 2 : $entries[$_day] + 1; $priorities[$_day] = min($priorities[$_day], $event['e_priority']); } if (!is_null($to)) { $test = date('d', $to); $test2 = date('d', $from); if (intval($test) > intval($test2) || intval(date('m', $to)) != intval(date('m', $from)) || intval(date('Y', $to)) != intval(date('Y', $from))) { $ntime = mktime(0, 0, 0, intval(date('m', $from)), intval($test2) + 1, intval(date('Y', $from))); if ($ntime < $period_end) { $happenings[] = array($e_id, $event, $ntime, $to, $real_from, $real_to); } } } } $_period_start = mktime(0, 0, 0, $month, 1, $year); $_period_end = mktime(0, 0, 0, $month + 1, 0, $year); $_days = intval(round(floatval($_period_end - $_period_start) / floatval(60 * 60 * 24))); $_entries = new ocp_tempcode(); $__entries = new ocp_tempcode(); $_dotw = date('D', $_period_start); // date() does not use locale so this is safe if (get_option('ssw') == '0') { $ex_array = array('Mon' => 0, 'Tue' => 1, 'Wed' => 2, 'Thu' => 3, 'Fri' => 4, 'Sat' => 5, 'Sun' => 6); } else { $ex_array = array('Sun' => 0, 'Mon' => 1, 'Tue' => 2, 'Wed' => 3, 'Thu' => 4, 'Fri' => 5, 'Sat' => 6); } $dotw = $ex_array[$_dotw]; for ($j = 0; $j < $dotw; $j++) { $__entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_SPACER')); } for ($j = 1; $j <= $_days + 1; $j++) { $date = strval($year) . '-' . str_pad(strval($month), 2, '0', STR_PAD_LEFT) . '-' . str_pad(strval($j), 2, '0', STR_PAD_LEFT); $date_formatted = locale_filter(date(do_lang('calendar_date'), mktime(0, 0, 0, $month, $j, $year))); $map2 = $filter + array('page' => 'calendar', 'type' => 'misc', 'view' => 'day', 'id' => $date); $day_url = build_url($map2, $zone); if (!array_key_exists($j, $entries)) { $class = 'free_time'; $__entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_FREE', array('_GUID' => 'd9ac194adf9fef87f3ee0161f0582b88', 'CURRENT' => date('Y-m-d', utctime_to_usertime()) == $date, 'DAY_URL' => $day_url, 'DATE' => $date_formatted, 'DAY' => strval($j), 'CLASS' => $class))); } elseif (is_array($entries[$j])) { $class = 'single'; $events_and_priority_lang = do_lang_tempcode('TOTAL_EVENTS_AND_HIGHEST_PRIORITY', '1', do_lang_tempcode('PRIORITY_' . strval($priorities[$j]))); $__entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_ACTIVE', array_merge(array('CURRENT' => date('Y-m-d', utctime_to_usertime()) == $date, 'DAY_URL' => $day_url, 'DATE' => $date_formatted, 'DAY' => strval($j), 'CLASS' => $class, 'COUNT' => '1', 'EVENTS_AND_PRIORITY_LANG' => $events_and_priority_lang), $entries[$j]))); } else { $class = 'multiple'; $e_count = integer_format($entries[$j]); $events_and_priority_lang = do_lang_tempcode('TOTAL_EVENTS_AND_HIGHEST_PRIORITY', make_string_tempcode($e_count), do_lang_tempcode('PRIORITY_' . strval($priorities[$j]))); $__entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_ACTIVE', array('_GUID' => '2190cdba146d5d18c01033fd0d9a09a1', 'CURRENT' => date('Y-m-d', utctime_to_usertime()) == $date, 'DAY_URL' => $day_url, 'DATE' => $date_formatted, 'TITLE' => '', 'TIME' => '', 'URL' => '', 'ID' => '', 'PRIORITY' => strval($priorities[$j]), 'DAY' => strval($j), 'ICON' => '', 'COUNT' => $e_count, 'EVENTS_AND_PRIORITY_LANG' => $events_and_priority_lang))); } if ($dotw == 6) { $_entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_ROW', array('_GUID' => '4b4b1e5bcf541c66d1ba9a57c6521070', 'ENTRIES' => $__entries))); $__entries = new ocp_tempcode(); $dotw = 0; } else { $dotw++; } } if (!$__entries->is_empty()) { for ($j = $dotw; $j < 7; $j++) { $__entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_SPACER')); } $_entries->attach(do_template('CALENDAR_YEAR_MONTH_DAY_ROW', array('_GUID' => '262279cb164be0fa908ec57c27dd727b', 'ENTRIES' => $__entries))); } return do_template('BLOCK_SIDE_CALENDAR', array('_GUID' => '1324e98b4debf7ebd6d398fae65fe29f', 'CALENDAR_URL' => $calendar_url, 'ENTRIES' => $_entries, '_MONTH' => strval($_period_start), 'MONTH' => locale_filter(my_strftime(do_lang('calendar_month_in_year'), $_period_start)))); } // Listing mode $period_start = mktime(0, 0, 0, $month, $day, $year); $num_days = array_key_exists('days', $map) ? intval($map['days']) : 30; $period_end = $period_start + 60 * 60 * 24 * $num_days; $happenings = calendar_matches($member, true, $period_start - 100 * 60 * 60 * 24, $period_end, $filter); $days = array(); for ($hap_i = 0; $hap_i < count($happenings); $hap_i++) { $happening = $happenings[$hap_i]; list($e_id, $event, $from, $to, $real_from, $real_to) = $happening; if (!is_null($to) && $to < $period_start) { continue; } if ($real_from != $from) { continue; } // We won't render continuations // Because we looked 100 days before (to find stuff that might be doing a span), we need to do an extra check to see if stuff is actually in our true window $starts_within = $real_from >= $period_start && $real_from < $period_end; $ends_within = !is_null($to) && $real_to > $period_start && $real_to <= $period_end; $spans = !is_null($to) && $real_from < $period_start && $real_to > $period_end; if (!$starts_within && !$ends_within && !$spans) { continue; } $__day = date('Y-m-d', $from); $bits = explode('-', $__day); $day_start = mktime(12, 0, 0, intval($bits[1]), intval($bits[2]), intval($bits[0])); if (!array_key_exists($day_start, $days)) { $date_section = get_timezoned_date($day_start, false); // Must be rendered in user's timezone not GMT, as GMT day may be ahead of the user's timezoned day and hence render the wrong contextual date. if ($from < $period_start && $date_section != do_lang('YESTERDAY')) { $date_section = do_lang('DATE_IN_PAST', $date_section); } $days[$day_start] = array('TIMESTAMP' => strval($day_start), 'TIME' => $date_section, 'EVENTS' => array()); } $view_id = date('Y-m', $real_from); $icon = $event['t_logo']; $title = is_integer($event['e_title']) ? get_translated_text($event['e_title']) : $event['e_title']; if (is_numeric($e_id)) { $map2 = $filter + array('page' => 'calendar', 'type' => 'view', 'id' => $event['e_id'], 'day' => $__day, 'date' => $view_id, 'back' => 'month'); $view_url = build_url($map2, $zone); } else { $view_url = $e_id; } $days[$day_start]['EVENTS'][] = array('DESCRIPTION' => is_string($event['e_content']) ? protect_from_escaping($event['e_content']) : get_translated_tempcode($event['e_content']), 'TIMESTAMP' => strval($real_from), 'TIME' => $real_from != $from ? do_lang('EVENT_CONTINUES') : (is_null($event['e_start_hour']) ? do_lang_tempcode('ALL_DAY_EVENT') : make_string_tempcode(get_timezoned_time($real_from, false, NULL, true))), 'TIME_RAW' => strval($real_from), 'FROM_DAY' => get_timezoned_date($real_from, !is_null($event['e_start_hour']), false, true), 'TO_DAY' => is_null($real_to) ? NULL : get_timezoned_date($real_to, !is_null($event['e_end_hour']), false, true), 'TO_DAY_RAW' => is_null($real_to) ? '' : strval($real_to), 'TIME_VCAL' => date('Y-m-d', $real_from) . ' ' . date('H:i:s', $real_from), 'TO_TIME_VCAL' => is_null($real_to) ? NULL : date('Y-m-d', $real_to) . ' ' . date('H:i:s', $real_to), 'T_TITLE' => array_key_exists('t_title', $event) ? is_string($event['t_title']) ? $event['t_title'] : get_translated_text($event['t_title']) : 'RSS', 'TITLE' => is_string($event['e_title']) ? protect_from_escaping($title) : make_string_tempcode($title), 'VIEW_URL' => $view_url, 'ICON' => $icon); $test = date('d', $to); $test2 = date('d', $from); if (!is_null($to) && (intval($test) > intval($test2) || intval(date('m', $to)) != intval(date('m', $from)) || intval(date('Y', $to)) != intval(date('Y', $from)))) { $ntime = mktime(0, 0, 0, intval(date('m', $from)), intval($test2) + 1, intval(date('Y', $from))); if ($ntime < $period_end) { $happenings[] = array($e_id, $event, $ntime, $to, $real_from, $real_to); } } } return do_template('BLOCK_SIDE_CALENDAR_LISTING', array('_GUID' => '52afb27d866fa6b620a55d223e2fd3ae', 'DAYS' => $days, 'CALENDAR_URL' => $calendar_url, 'TITLE' => $box_title)); }