Page MenuHomePhabricator

D15851.id38188.diff
No OneTemporary

D15851.id38188.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1566,6 +1566,7 @@
'PHUICalendarDayView' => 'view/phui/calendar/PHUICalendarDayView.php',
'PHUICalendarListView' => 'view/phui/calendar/PHUICalendarListView.php',
'PHUICalendarMonthView' => 'view/phui/calendar/PHUICalendarMonthView.php',
+ 'PHUICalendarWeekView' => 'view/phui/calendar/PHUICalendarWeekView.php',
'PHUICalendarWidgetView' => 'view/phui/calendar/PHUICalendarWidgetView.php',
'PHUIColorPalletteExample' => 'applications/uiexample/examples/PHUIColorPalletteExample.php',
'PHUICrumbView' => 'view/phui/PHUICrumbView.php',
@@ -5957,6 +5958,7 @@
'PHUICalendarDayView' => 'AphrontView',
'PHUICalendarListView' => 'AphrontTagView',
'PHUICalendarMonthView' => 'AphrontView',
+ 'PHUICalendarWeekView' => 'AphrontView',
'PHUICalendarWidgetView' => 'AphrontTagView',
'PHUIColorPalletteExample' => 'PhabricatorUIExample',
'PHUICrumbView' => 'AphrontView',
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php
--- a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php
@@ -59,6 +59,7 @@
$projects = $this->buildProjectsView($user);
$badges = $this->buildBadgesView($user);
+ $calendar = $this->buildCalendarDayView($user);
require_celerity_resource('project-view-css');
$home = id(new PHUITwoColumnView())
@@ -73,6 +74,7 @@
array(
$projects,
$badges,
+ $calendar,
));
$nav = $this->getProfileMenu();
@@ -172,6 +174,72 @@
return $box;
}
+ private function buildCalendarDayView(PhabricatorUser $user) {
+ $viewer = $this->getViewer();
+ $class = 'PhabricatorCalendarApplication';
+
+ if (!PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) {
+ return null;
+ }
+
+ $midnight = PhabricatorTime::getTodayMidnightDateTime($viewer);
+ $week_end = clone $midnight;
+ $week_end = $week_end->modify('+3 days');
+
+ $range_start = $midnight->format('U');
+ $range_end = $week_end->format('U');
+
+ $query = id(new PhabricatorCalendarEventQuery())
+ ->setViewer($viewer)
+ ->withDateRange($range_start, $range_end)
+ ->withInvitedPHIDs(array($viewer->getPHID()));
+
+ $statuses = $query->execute();
+ $phids = mpull($statuses, 'getUserPHID');
+ $events = array();
+
+ foreach ($statuses as $status) {
+ if ($status->getIsCancelled()) {
+ continue;
+ }
+
+ $viewer_is_invited = $status->getIsUserInvited($viewer->getPHID());
+
+ $can_edit = PhabricatorPolicyFilter::hasCapability(
+ $viewer,
+ $status,
+ PhabricatorPolicyCapability::CAN_EDIT);
+
+ $event = new AphrontCalendarEventView();
+ $event->setCanEdit($can_edit);
+ $event->setEventID($status->getID());
+ $event->setEpochRange($status->getDateFrom(), $status->getDateTo());
+ $event->setIsAllDay($status->getIsAllDay());
+ $event->setIcon($status->getIcon());
+ $event->setViewerIsInvited($viewer_is_invited);
+
+ $event->setName($status->getName());
+ $event->setURI($status->getURI());
+ $events[] = $event;
+ }
+
+ $events = msort($events, 'getEpochStart');
+ $day_view = id(new PHUICalendarWeekView())
+ ->setViewer($viewer)
+ ->setEvents($events)
+ ->setWeekLength(3)
+ ->render();
+
+ $header = id(new PHUIHeaderView())
+ ->setHeader(pht('Calendar'));
+ $box = id(new PHUIObjectBoxView())
+ ->setHeader($header)
+ ->appendChild($day_view)
+ ->setBackground(PHUIObjectBoxView::GREY);
+
+ return $box;
+ }
+
private function buildBadgesView(PhabricatorUser $user) {
$viewer = $this->getViewer();
diff --git a/src/view/phui/calendar/PHUICalendarDayView.php b/src/view/phui/calendar/PHUICalendarDayView.php
--- a/src/view/phui/calendar/PHUICalendarDayView.php
+++ b/src/view/phui/calendar/PHUICalendarDayView.php
@@ -145,7 +145,11 @@
}
$header = $this->renderDayViewHeader();
- $sidebar = $this->renderSidebar();
+ $sidebar = id(new PHUICalendarWeekView())
+ ->setViewer($this->getViewer())
+ ->setEvents($this->events)
+ ->setDateTime($this->getDateTime())
+ ->render();
$warnings = $this->getQueryRangeWarning();
$table_id = celerity_generate_unique_node_id();
@@ -242,91 +246,6 @@
return $errors;
}
- private function renderSidebar() {
- $this->events = msort($this->events, 'getEpochStart');
- $week_of_boxes = $this->getWeekOfBoxes();
- $filled_boxes = array();
-
- foreach ($week_of_boxes as $day_box) {
- $box_start = $day_box['start'];
- $box_end = id(clone $box_start)->modify('+1 day');
-
- $box_start = $box_start->format('U');
- $box_end = $box_end->format('U');
-
- $box_events = array();
-
- foreach ($this->events as $event) {
- $event_start = $event->getEpochStart();
- $event_end = $event->getEpochEnd();
-
- if ($event_start < $box_end && $event_end > $box_start) {
- $box_events[] = $event;
- }
- }
-
- $filled_boxes[] = $this->renderSidebarBox(
- $box_events,
- $day_box['title']);
- }
-
- return $filled_boxes;
- }
-
- private function renderSidebarBox($events, $title) {
- $widget = id(new PHUICalendarWidgetView())
- ->addClass('calendar-day-view-sidebar');
-
- $list = id(new PHUICalendarListView())
- ->setUser($this->getViewer())
- ->setView('day');
-
- if (count($events) == 0) {
- $list->showBlankState(true);
- } else {
- $sorted_events = msort($events, 'getEpochStart');
- foreach ($sorted_events as $event) {
- $list->addEvent($event);
- }
- }
-
- $widget
- ->setCalendarList($list)
- ->setHeader($title);
- return $widget;
- }
-
- private function getWeekOfBoxes() {
- $sidebar_day_boxes = array();
-
- $display_start_day = $this->getDateTime();
- $display_end_day = id(clone $display_start_day)->modify('+6 day');
-
- $box_start_time = clone $display_start_day;
-
- $today_time = PhabricatorTime::getTodayMidnightDateTime($this->getViewer());
- $tomorrow_time = clone $today_time;
- $tomorrow_time->modify('+1 day');
-
- while ($box_start_time <= $display_end_day) {
- if ($box_start_time == $today_time) {
- $title = pht('Today');
- } else if ($box_start_time == $tomorrow_time) {
- $title = pht('Tomorrow');
- } else {
- $title = $box_start_time->format('l');
- }
-
- $sidebar_day_boxes[] = array(
- 'title' => $title,
- 'start' => clone $box_start_time,
- );
-
- $box_start_time->modify('+1 day');
- }
- return $sidebar_day_boxes;
- }
-
private function renderDayViewHeader() {
$button_bar = null;
$uri = $this->getBrowseURI();
diff --git a/src/view/phui/calendar/PHUICalendarWeekView.php b/src/view/phui/calendar/PHUICalendarWeekView.php
new file mode 100644
--- /dev/null
+++ b/src/view/phui/calendar/PHUICalendarWeekView.php
@@ -0,0 +1,121 @@
+<?php
+
+final class PHUICalendarWeekView extends AphrontView {
+ private $events;
+ private $dateTime;
+ private $weekLength = 7;
+
+ public function setEvents($events) {
+ $this->events = $events;
+ return $this;
+ }
+
+ public function setDateTime($date_time) {
+ $this->dateTime = $date_time;
+ return $this;
+ }
+
+ private function getDateTime() {
+ if ($this->dateTime) {
+ return $this->dateTime;
+ }
+ return $this->getDefaultDateTime();
+ }
+
+ public function setWeekLength($week_length) {
+ $this->weekLength = $week_length;
+ return $this;
+ }
+
+ public function render() {
+ $this->events = msort($this->events, 'getEpochStart');
+ $week_of_boxes = $this->getWeekOfBoxes();
+ $filled_boxes = array();
+
+ foreach ($week_of_boxes as $day_box) {
+ $box_start = $day_box['start'];
+ $box_end = id(clone $box_start)->modify('+1 day');
+
+ $box_start = $box_start->format('U');
+ $box_end = $box_end->format('U');
+
+ $box_events = array();
+
+ foreach ($this->events as $event) {
+ $event_start = $event->getEpochStart();
+ $event_end = $event->getEpochEnd();
+
+ if ($event_start < $box_end && $event_end > $box_start) {
+ $box_events[] = $event;
+ }
+ }
+
+ $filled_boxes[] = $this->renderSidebarBox(
+ $box_events,
+ $day_box['title']);
+ }
+
+ return $filled_boxes;
+ }
+
+ private function renderSidebarBox($events, $title) {
+ $widget = id(new PHUICalendarWidgetView())
+ ->addClass('calendar-day-view-sidebar');
+
+ $list = id(new PHUICalendarListView())
+ ->setUser($this->getViewer())
+ ->setView('day');
+
+ if (count($events) == 0) {
+ $list->showBlankState(true);
+ } else {
+ $sorted_events = msort($events, 'getEpochStart');
+ foreach ($sorted_events as $event) {
+ $list->addEvent($event);
+ }
+ }
+
+ $widget
+ ->setCalendarList($list)
+ ->setHeader($title);
+ return $widget;
+ }
+
+ private function getWeekOfBoxes() {
+ $day_boxes = array();
+ $week_length = $this->weekLength - 1;
+
+ $display_start_day = $this->getDateTime();
+ $display_end_day = id(clone $display_start_day)
+ ->modify('+'.$week_length.' day');
+
+ $box_start_time = clone $display_start_day;
+
+ $today_time = PhabricatorTime::getTodayMidnightDateTime($this->getViewer());
+ $tomorrow_time = clone $today_time;
+ $tomorrow_time->modify('+1 day');
+
+ while ($box_start_time <= $display_end_day) {
+ if ($box_start_time == $today_time) {
+ $title = pht('Today');
+ } else if ($box_start_time == $tomorrow_time) {
+ $title = pht('Tomorrow');
+ } else {
+ $title = $box_start_time->format('l');
+ }
+
+ $day_boxes[] = array(
+ 'title' => $title,
+ 'start' => clone $box_start_time,
+ );
+
+ $box_start_time->modify('+1 day');
+ }
+ return $day_boxes;
+ }
+
+ private function getDefaultDateTime() {
+ return PhabricatorTime::getTodayMidnightDateTime($this->getViewer());
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Sat, Feb 15, 12:33 PM (11 h, 37 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7132447
Default Alt Text
D15851.id38188.diff (10 KB)

Event Timeline