mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-18 11:30:55 +01:00
9f3cde4db7
Test Plan: None. Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: epriestley Differential Revision: https://secure.phabricator.com/D17377
90 lines
2.6 KiB
PHP
90 lines
2.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* This class is useful for generating various time objects, relative to the
|
|
* user and their timezone.
|
|
*
|
|
* For now, the class exposes two sets of static methods for the two main
|
|
* calendar views - one for the conpherence calendar widget and one for the
|
|
* user profile calendar view. These have slight differences such as
|
|
* conpherence showing both a three day "today 'til 2 days from now" *and*
|
|
* a Sunday -> Saturday list, whilest the profile view shows a more simple
|
|
* seven day rolling list of events.
|
|
*/
|
|
final class CalendarTimeUtil extends Phobject {
|
|
|
|
public static function getCalendarEventEpochs(
|
|
PhabricatorUser $user,
|
|
$start_day_str = 'Sunday',
|
|
$days = 9) {
|
|
|
|
$objects = self::getStartDateTimeObjects($user, $start_day_str);
|
|
$start_day = $objects['start_day'];
|
|
$end_day = clone $start_day;
|
|
$end_day->modify('+'.$days.' days');
|
|
|
|
return array(
|
|
'start_epoch' => $start_day->format('U'),
|
|
'end_epoch' => $end_day->format('U'),
|
|
);
|
|
}
|
|
|
|
public static function getCalendarWeekTimestamps(
|
|
PhabricatorUser $user) {
|
|
return self::getTimestamps($user, 'Today', 7);
|
|
}
|
|
|
|
public static function getCalendarWidgetTimestamps(
|
|
PhabricatorUser $user) {
|
|
return self::getTimestamps($user, 'Sunday', 9);
|
|
}
|
|
|
|
/**
|
|
* Public for testing purposes only. You should probably use one of the
|
|
* functions above.
|
|
*/
|
|
public static function getTimestamps(
|
|
PhabricatorUser $user,
|
|
$start_day_str,
|
|
$days) {
|
|
|
|
$objects = self::getStartDateTimeObjects($user, $start_day_str);
|
|
$start_day = $objects['start_day'];
|
|
$timestamps = array();
|
|
for ($day = 0; $day < $days; $day++) {
|
|
$timestamp = clone $start_day;
|
|
$timestamp->modify(sprintf('+%d days', $day));
|
|
$timestamps[] = $timestamp;
|
|
}
|
|
return array(
|
|
'today' => $objects['today'],
|
|
'epoch_stamps' => $timestamps,
|
|
);
|
|
}
|
|
|
|
private static function getStartDateTimeObjects(
|
|
PhabricatorUser $user,
|
|
$start_day_str) {
|
|
$timezone = new DateTimeZone($user->getTimezoneIdentifier());
|
|
|
|
$today_epoch = PhabricatorTime::parseLocalTime('today', $user);
|
|
$today = new DateTime('@'.$today_epoch);
|
|
$today->setTimezone($timezone);
|
|
|
|
if (strtolower($start_day_str) == 'today' ||
|
|
$today->format('l') == $start_day_str) {
|
|
$start_day = clone $today;
|
|
} else {
|
|
$start_epoch = PhabricatorTime::parseLocalTime(
|
|
'last '.$start_day_str,
|
|
$user);
|
|
$start_day = new DateTime('@'.$start_epoch);
|
|
$start_day->setTimezone($timezone);
|
|
}
|
|
return array(
|
|
'today' => $today,
|
|
'start_day' => $start_day,
|
|
);
|
|
}
|
|
|
|
}
|