예제 #1
0
}
$entity = get_entity($guid);
if (!$entity instanceof Calendar) {
    forward('', '404');
}
$owner = $entity->getOwnerEntity();
elgg_set_page_owner_guid($owner->guid);
//elgg_push_breadcrumb(elgg_echo('events:calendar'), "calendar/all");
elgg_push_breadcrumb($owner->name, "calendar/owner/{$owner->username}");
elgg_push_breadcrumb($entity->getDisplayName());
$start = (int) get_input('start', time());
$start = (int) Util::getMonthStart($start);
$end = (int) Util::getMonthEnd($start);
$timezone = Util::getClientTimezone();
$start_local = $start - Util::getOffset($start, Util::UTC, $timezone);
$end_local = $end - Util::getOffset($end, Util::UTC, $timezone);
$events = $entity->getAllEventInstances($start_local, $end_local);
if (!$is_logged_in) {
    logout();
}
elgg_register_menu_item('title', array('name' => 'calendar_view', 'href' => elgg_http_add_url_query_elements("calendar/view/{$entity->guid}", array('start' => $start, 'end' => $end)), 'text' => elgg_echo('events:view:calendar'), 'title' => elgg_echo('events:view:calendar:switch'), 'link_class' => 'elgg-button elgg-button-action'));
elgg_register_menu_item('title', array('name' => 'ical_view', 'href' => $entity->getIcalURL("calendar/ical/{$entity->guid}/calendar{$entity->guid}.ics", array()), 'text' => elgg_echo('events:view:ical'), 'title' => elgg_echo('events:view:ical'), 'link_class' => 'elgg-button elgg-button-action js-events-ui-ical-modal-trigger'));
$dt = new DateTime(null, new DateTimeZone(Util::UTC));
$prev_start = $dt->setTimestamp($start)->modify('-1 month')->getTimestamp();
$next_start = $dt->setTimestamp($start)->modify('+1 month')->getTimestamp();
elgg_register_menu_item('title', array('name' => 'prev_month', 'text' => "« " . $dt->setTimestamp($prev_start)->format('F'), 'href' => elgg_http_add_url_query_elements("calendar/feed/{$entity->guid}", array('start' => $prev_start)), 'link_class' => 'elgg-button elgg-button-action mlm', 'priority' => 100));
elgg_register_menu_item('title', array('name' => 'next_month', 'text' => $dt->setTimestamp($next_start)->format('F') . " »", 'href' => elgg_http_add_url_query_elements("calendar/feed/{$entity->guid}", array('start' => $next_start)), 'link_class' => 'elgg-button elgg-button-action', 'priority' => 101));
$title = elgg_echo('events:feed:month', array($dt->setTimestamp($start)->format('F')));
$content = elgg_view('events_ui/feed', array('events' => $events));
$layout = elgg_view_layout('content', array('title' => $title, 'content' => $content, 'sidebar' => false, 'filter' => false, 'entity' => $entity));
echo elgg_view_page($title, $layout, 'default', array('entity' => $entity));
예제 #2
0
 /**
  * @dataProvider providerTestConvert
  */
 public function testGetOffset($ts, $timezone, $target_timezone, $expected)
 {
     $this->assertEquals($expected, $this->util->getOffset($ts, $timezone, $target_timezone));
 }
예제 #3
0
 /**
  * Calculates the end (or start) timestamp of the last event in a sequence of occurrences
  *
  * @param int  $occurrences    Max number of occurrences
  * @param int  $from_timestamp Initial time to calculate from (defaults to event start time)
  * @param bool $at_event_end   If true, will return the timestamp of the event end, otherwise event start
  * @return int
  */
 public function calculateEndAfterTimestamp($occurrences = 1, $from_timestamp = null, $at_event_end = true)
 {
     $occurrences = (int) $occurrences;
     $start_timestamp = $this->getStartTimestamp();
     $start_day = $start_timestamp;
     $test_day = $start_timestamp > $from_timestamp ? $start_timestamp : $from_timestamp;
     while ($occurrences > 0) {
         $shows = false;
         $offset_on_test_day = Util::getOffset($test_day, Util::UTC, $this->getTimezone());
         // next increment
         $next_test_day = $test_day + Util::SECONDS_IN_A_DAY;
         switch ($this->repeat_frequency) {
             default:
                 $occurrences = 0;
                 break;
             case Util::FREQUENCY_DAILY:
                 $shows = true;
                 break;
             case Util::FREQUENCY_WEEKDAY:
                 $repeat_weekly_days = array(Util::SATURDAY, Util::SUNDAY);
                 foreach ($repeat_weekly_days as $key => $day) {
                     $repeat_weekly_days[$key] = Util::getDayOfWeek(strtotime($day, $test_day) - $offset_on_test_day);
                 }
                 $D = Util::getDayOfWeek($test_day);
                 $shows = !in_array($D, $repeat_weekly_days);
                 break;
             case Util::FREQUENCY_WEEKDAY_ODD:
                 $repeat_weekly_days = array(Util::MONDAY, Util::WEDNESDAY, Util::FRIDAY);
                 foreach ($repeat_weekly_days as $key => $day) {
                     $repeat_weekly_days[$key] = Util::getDayOfWeek(strtotime($day, $test_day) - $offset_on_test_day);
                 }
                 $D = Util::getDayOfWeek($test_day);
                 $shows = in_array($D, $repeat_weekly_days);
                 break;
             case Util::FREQUENCY_WEEKDAY_EVEN:
                 $repeat_weekly_days = array(Util::TUESDAY, Util::THURSDAY);
                 foreach ($repeat_weekly_days as $key => $day) {
                     $repeat_weekly_days[$key] = Util::getDayOfWeek(strtotime($day, $test_day) - $offset_on_test_day);
                 }
                 $D = Util::getDayOfWeek($test_day);
                 $shows = in_array($D, $repeat_weekly_days);
                 break;
             case Util::FREQUENCY_WEEKLY:
                 $repeat_weekly_days = $this->repeat_weekly_days;
                 if (!$repeat_weekly_days) {
                     $repeat_weekly_days = Util::getDayOfWeek($this->getStartTimestamp());
                 }
                 if (!is_array($repeat_weekly_days)) {
                     $repeat_weekly_days = array($repeat_weekly_days);
                 }
                 $D = Util::getDayOfWeek($test_day);
                 foreach ($repeat_weekly_days as $key => $day) {
                     // use offsets
                     // Monday in Sydney can still be Sunday at UTC
                     $repeat_weekly_days[$key] = Util::getDayOfWeek(strtotime($day, $test_day) - $offset_on_test_day);
                 }
                 $shows = in_array($D, $repeat_weekly_days);
                 break;
             case Util::FREQUENCY_MONTHLY:
                 if ($this->repeat_monthly_by == Util::REPEAT_MONTHLY_BY_DAY_OF_WEEK) {
                     $shows = Util::isOnSameWeekDayOfMonth($test_day, $this->getStartTimestamp());
                     if ($shows) {
                         // we can skip 4 weeks
                         $next_test_day = strtotime('+28 days', $test_day);
                     }
                 } else {
                     $shows = Util::isOnSameDayOfMonth($test_day, $this->getStartTimestamp());
                     if ($shows) {
                         // we can skip a month
                         $next_test_day = strtotime('+1 month', $test_day);
                     }
                 }
                 break;
             case Util::FREQUENCY_YEARLY:
                 $shows = Util::isOnSameDayOfYear($test_day, $this->getStartTimestamp());
                 if ($shows) {
                     // we can skip a year
                     $next_test_day = strtotime('+1 year', $test_day);
                 }
                 break;
         }
         if ($shows) {
             $occurrences--;
             $start_timestamp = (int) Util::getTimeOfDay($this->getStartTimestamp(), $test_day);
         }
         $test_day = $next_test_day;
     }
     return $at_event_end ? $start_timestamp + $this->end_delta : $start_timestamp;
 }