Example #1
0
/**
 * Retrieve all events for the given days, independently of the users offset.
 *
 * What it does:
 * - cache callback function used to retrieve the birthdays, holidays, and events between now and now + days_to_index.
 * - widens the search range by an extra 24 hours to support time offset shifts.
 * - used by the cache_getRecentEvents function to get the information needed to calculate the events taking the users time offset into account.
 *
 * @package Calendar
 * @param int $days_to_index
 * @return array
 */
function cache_getOffsetIndependentEvents($days_to_index)
{
    $low_date = strftime('%Y-%m-%d', forum_time(false) - 24 * 3600);
    $high_date = strftime('%Y-%m-%d', forum_time(false) + $days_to_index * 24 * 3600);
    return array('data' => array('holidays' => getHolidayRange($low_date, $high_date), 'birthdays' => getBirthdayRange($low_date, $high_date), 'events' => getEventRange($low_date, $high_date, false)), 'refresh_eval' => 'return \'' . strftime('%Y%m%d', forum_time(false)) . '\' != strftime(\'%Y%m%d\', forum_time(false)) || (!empty($modSettings[\'calendar_updated\']) && ' . time() . ' < $modSettings[\'calendar_updated\']);', 'expires' => time() + 3600);
}
 /**
  * InitContent.
  * Checks the cache status and create the content.
  */
 function pmxc_InitContent()
 {
     global $sourcedir, $pmxCacheFunc, $options;
     // if visible init the content
     if ($this->visible) {
         $this->today = array('day' => (int) strftime('%d', forum_time()), 'month' => (int) strftime('%m', forum_time()), 'year' => (int) strftime('%Y', forum_time()), 'date' => strftime('%Y-%m-%d', forum_time()));
         $this->cal_startday = isset($options['calendar_start_day']) ? $options['calendar_start_day'] : $this->cfg['config']['settings']['firstday'];
         $this->cache_key .= '-' . $this->cal_startday;
         $cachedata = null;
         if (!empty($this->cfg['cache'])) {
             if (($cachedata = $pmxCacheFunc['get']($this->cache_key, $this->cache_mode)) !== null) {
                 list($curday, $this->calgrid, $this->calbirthdays, $this->calholidays, $this->calevents) = $cachedata;
                 if ($curday != $this->today['date']) {
                     $pmxCacheFunc['clear']($this->cache_key, $this->cache_mode);
                     $cachedata = null;
                 }
             }
         }
         if (empty($cachedata)) {
             include_once $sourcedir . '/Subs-Calendar.php';
             $calendarOptions = array('start_day' => $this->cal_startday, 'show_birthdays' => false, 'show_events' => false, 'show_holidays' => false, 'show_week_num' => false, 'short_day_titles' => true, 'show_next_prev' => false, 'show_week_links' => false, 'size' => 'small');
             $this->calgrid = getCalendarGrid($this->today['month'], $this->today['year'], $calendarOptions);
             $this->calbirthdays = array();
             if (!empty($this->cfg['config']['settings']['birthdays']['show'])) {
                 $start_data = isset($this->cfg['config']['settings']['birthdays']['before']) ? date('Y-m-d', time() - 86400 * intval($this->cfg['config']['settings']['birthdays']['after'])) : date('Y-m-d');
                 $end_data = isset($this->cfg['config']['settings']['birthdays']['after']) ? date('Y-m-d', time() + 86400 * intval($this->cfg['config']['settings']['birthdays']['before'])) : date('Y-m-d');
                 $temp = getBirthdayRange($start_data, $end_data);
                 foreach ($temp as $key => $val) {
                     $mnt = intval(substr($key, 5, 2));
                     if (in_array($mnt, array(11, 12)) && in_array($this->today['month'], array(1, 12))) {
                         $nkey = strval($this->today['year'] - 1) . substr($key, 4);
                     } else {
                         $nkey = strval($this->today['year']) . substr($key, 4);
                     }
                     $this->calbirthdays[$nkey] = $val;
                 }
                 ksort($this->calbirthdays);
             }
             $this->calholidays = array();
             if (!empty($this->cfg['config']['settings']['holidays']['show'])) {
                 $start_data = isset($this->cfg['config']['settings']['holidays']['before']) ? date('Y-m-d', time() - 86400 * intval($this->cfg['config']['settings']['holidays']['after'])) : date('Y-m-d');
                 $end_data = isset($this->cfg['config']['settings']['holidays']['after']) ? date('Y-m-d', time() + 86400 * intval($this->cfg['config']['settings']['holidays']['before'])) : date('Y-m-d');
                 $this->calholidays = getHolidayRange($start_data, $end_data);
                 ksort($this->calholidays);
             }
             $this->calevents = array();
             if (!empty($this->cfg['config']['settings']['events']['show'])) {
                 $start_data = isset($this->cfg['config']['settings']['events']['before']) ? date('Y-m-d', time() - 86400 * intval($this->cfg['config']['settings']['events']['after'])) : date('Y-m-d');
                 $end_data = isset($this->cfg['config']['settings']['events']['after']) ? date('Y-m-d', time() + 86400 * intval($this->cfg['config']['settings']['events']['before'])) : date('Y-m-d');
                 $events = getEventRange($start_data, $end_data);
                 ksort($events);
                 foreach ($events as $event) {
                     foreach ($event as $data) {
                         if (!array_key_exists($data['id'], $this->calevents)) {
                             $this->calevents[$data['id']] = $data;
                         }
                     }
                 }
             }
             if (!empty($this->cfg['cache'])) {
                 $cachedata = array($this->today['date'], $this->calgrid, $this->calbirthdays, $this->calholidays, $this->calevents);
                 $pmxCacheFunc['put']($this->cache_key, $cachedata, $this->cache_time, $this->cache_mode);
                 unset($cachedata);
             }
         }
     }
     return $this->visible;
 }
Example #3
0
/**
 * Show the most recent events.
 *
 * @param int $max_events
 * @param string $output_method = 'echo'
 */
function ssi_recentEvents($max_events = 7, $output_method = 'echo')
{
    global $modSettings, $txt;
    if (empty($modSettings['cal_enabled']) || !allowedTo('calendar_view')) {
        return;
    }
    require_once SUBSDIR . '/Calendar.subs.php';
    // Find all events which are happening in the near future that the member can see.
    $date = strftime('%Y-%m-%d', forum_time(false));
    $events = getEventRange($date, $date, true, $max_events);
    $return = array();
    $duplicates = array();
    foreach ($events as $date => $day_events) {
        foreach ($day_events as $row) {
            // Check if we've already come by an event linked to this same topic with the same title... and don't display it if we have.
            if (!empty($duplicates[$row['title'] . $row['id_topic']])) {
                continue;
            }
            $return[$date][] = $row;
            // Let's not show this one again, huh?
            $duplicates[$row['title'] . $row['id_topic']] = true;
        }
    }
    foreach ($return as $mday => $array) {
        $return[$mday][count($array) - 1]['is_last'] = true;
    }
    if ($output_method != 'echo' || empty($return)) {
        return $return;
    }
    // Well the output method is echo.
    echo '
			<span class="event">' . $txt['events'] . '</span> ';
    foreach ($return as $mday => $array) {
        foreach ($array as $event) {
            if ($event['can_edit']) {
                echo '
				<a href="' . $event['modify_href'] . '" style="color: #ff0000;">*</a> ';
            }
            echo '
				' . $event['link'] . (!$event['is_last'] ? ', ' : '');
        }
    }
}