1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-18 21:02:41 +01:00

Calendar events should be green if viewer is invited, and grey if not.

Summary: Closes T8189, Calendar events should be green if viewer is invited, and grey if not.

Test Plan: Check that month and day views display events that viewer is invited to as green and grey otherwise, including month day badges on mobile monthly view.

Reviewers: chad, #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: Korvin, epriestley

Maniphest Tasks: T8189

Differential Revision: https://secure.phabricator.com/D12850
This commit is contained in:
lkassianik 2015-05-14 19:20:44 -07:00
parent f16dda288d
commit 4016107411
11 changed files with 142 additions and 54 deletions

View file

@ -120,10 +120,10 @@ return array(
'rsrc/css/layout/phabricator-hovercard-view.css' => 'dd9121a9', 'rsrc/css/layout/phabricator-hovercard-view.css' => 'dd9121a9',
'rsrc/css/layout/phabricator-side-menu-view.css' => 'c1db9e9c', 'rsrc/css/layout/phabricator-side-menu-view.css' => 'c1db9e9c',
'rsrc/css/layout/phabricator-source-code-view.css' => '2ceee894', 'rsrc/css/layout/phabricator-source-code-view.css' => '2ceee894',
'rsrc/css/phui/calendar/phui-calendar-day.css' => '38891735', 'rsrc/css/phui/calendar/phui-calendar-day.css' => '3b4a65d8',
'rsrc/css/phui/calendar/phui-calendar-list.css' => 'c1d0ca59', 'rsrc/css/phui/calendar/phui-calendar-list.css' => 'c1d0ca59',
'rsrc/css/phui/calendar/phui-calendar-month.css' => '3150cfbf', 'rsrc/css/phui/calendar/phui-calendar-month.css' => '3e42c803',
'rsrc/css/phui/calendar/phui-calendar.css' => '8675968e', 'rsrc/css/phui/calendar/phui-calendar.css' => '8345be98',
'rsrc/css/phui/phui-action-header-view.css' => '89c497e7', 'rsrc/css/phui/phui-action-header-view.css' => '89c497e7',
'rsrc/css/phui/phui-action-list.css' => '4f4d09f2', 'rsrc/css/phui/phui-action-list.css' => '4f4d09f2',
'rsrc/css/phui/phui-action-panel.css' => '3ee9afd5', 'rsrc/css/phui/phui-action-panel.css' => '3ee9afd5',
@ -760,10 +760,10 @@ return array(
'phui-action-panel-css' => '3ee9afd5', 'phui-action-panel-css' => '3ee9afd5',
'phui-box-css' => '7b3a2eed', 'phui-box-css' => '7b3a2eed',
'phui-button-css' => 'de610129', 'phui-button-css' => 'de610129',
'phui-calendar-css' => '8675968e', 'phui-calendar-css' => '8345be98',
'phui-calendar-day-css' => '38891735', 'phui-calendar-day-css' => '3b4a65d8',
'phui-calendar-list-css' => 'c1d0ca59', 'phui-calendar-list-css' => 'c1d0ca59',
'phui-calendar-month-css' => '3150cfbf', 'phui-calendar-month-css' => '3e42c803',
'phui-crumbs-view-css' => '594d719e', 'phui-crumbs-view-css' => '594d719e',
'phui-document-view-css' => '94d5dcd8', 'phui-document-view-css' => '94d5dcd8',
'phui-feed-story-css' => 'c9f3a0b5', 'phui-feed-story-css' => 'c9f3a0b5',

View file

@ -10,6 +10,7 @@ final class CalendarColors extends CalendarConstants {
const COLOR_SKY = 'sky'; const COLOR_SKY = 'sky';
const COLOR_INDIGO = 'indigo'; const COLOR_INDIGO = 'indigo';
const COLOR_VIOLET = 'violet'; const COLOR_VIOLET = 'violet';
const COLOR_GREY = 'grey';
public static function getColors() { public static function getColors() {
return array( return array(
@ -21,6 +22,7 @@ final class CalendarColors extends CalendarConstants {
self::COLOR_INDIGO, self::COLOR_INDIGO,
self::COLOR_RED, self::COLOR_RED,
self::COLOR_YELLOW, self::COLOR_YELLOW,
self::COLOR_GREY,
); );
} }

View file

@ -359,25 +359,9 @@ final class PhabricatorCalendarEventSearchEngine
$phids = mpull($statuses, 'getUserPHID'); $phids = mpull($statuses, 'getUserPHID');
/* Assign Colors */
$unique = array_unique($phids);
$allblue = false;
$calcolors = CalendarColors::getColors();
if (count($unique) > count($calcolors)) {
$allblue = true;
}
$i = 0;
$eventcolor = array();
foreach ($unique as $phid) {
if ($allblue) {
$eventcolor[$phid] = CalendarColors::COLOR_SKY;
} else {
$eventcolor[$phid] = $calcolors[$i];
}
$i++;
}
foreach ($statuses as $status) { foreach ($statuses as $status) {
$viewer_is_invited = $status->getIsUserInvited($viewer->getPHID());
$event = new AphrontCalendarEventView(); $event = new AphrontCalendarEventView();
$event->setEpochRange($status->getDateFrom(), $status->getDateTo()); $event->setEpochRange($status->getDateFrom(), $status->getDateTo());
$event->setIsAllDay($status->getIsAllDay()); $event->setIsAllDay($status->getIsAllDay());
@ -388,7 +372,7 @@ final class PhabricatorCalendarEventSearchEngine
$event->setDescription(pht('%s (%s)', $name_text, $status_text)); $event->setDescription(pht('%s (%s)', $name_text, $status_text));
$event->setName($status_text); $event->setName($status_text);
$event->setEventID($status->getID()); $event->setEventID($status->getID());
$event->setColor($eventcolor[$status->getUserPHID()]); $event->setViewerIsInvited($viewer_is_invited);
$month_view->addEvent($event); $month_view->addEvent($event);
} }
@ -422,10 +406,13 @@ final class PhabricatorCalendarEventSearchEngine
continue; continue;
} }
$viewer_is_invited = $status->getIsUserInvited($viewer->getPHID());
$event = new AphrontCalendarEventView(); $event = new AphrontCalendarEventView();
$event->setEventID($status->getID()); $event->setEventID($status->getID());
$event->setEpochRange($status->getDateFrom(), $status->getDateTo()); $event->setEpochRange($status->getDateFrom(), $status->getDateTo());
$event->setIsAllDay($status->getIsAllDay()); $event->setIsAllDay($status->getIsAllDay());
$event->setViewerIsInvited($viewer_is_invited);
$event->setName($status->getName()); $event->setName($status->getName());
$event->setURI('/'.$status->getMonogram()); $event->setURI('/'.$status->getMonogram());

View file

@ -215,6 +215,16 @@ final class PhabricatorCalendarEvent extends PhabricatorCalendarDAO
return $is_attending; return $is_attending;
} }
public function getIsUserInvited($phid) {
$uninvited_status = PhabricatorCalendarEventInvitee::STATUS_UNINVITED;
$declined_status = PhabricatorCalendarEventInvitee::STATUS_DECLINED;
$status = $this->getUserInviteStatus($phid);
if ($status == $uninvited_status || $status == $declined_status) {
return false;
}
return true;
}
/* -( Markup Interface )--------------------------------------------------- */ /* -( Markup Interface )--------------------------------------------------- */

View file

@ -8,7 +8,7 @@ final class AphrontCalendarEventView extends AphrontView {
private $epochEnd; private $epochEnd;
private $description; private $description;
private $eventID; private $eventID;
private $color; private $viewerIsInvited;
private $uri; private $uri;
private $isAllDay; private $isAllDay;
@ -29,6 +29,14 @@ final class AphrontCalendarEventView extends AphrontView {
return $this->eventID; return $this->eventID;
} }
public function setViewerIsInvited($viewer_is_invited) {
$this->viewerIsInvited = $viewer_is_invited;
return $this;
}
public function getViewerIsInvited() {
return $this->viewerIsInvited;
}
public function setUserPHID($user_phid) { public function setUserPHID($user_phid) {
$this->userPHID = $user_phid; $this->userPHID = $user_phid;
return $this; return $this;
@ -70,18 +78,6 @@ final class AphrontCalendarEventView extends AphrontView {
return $this->description; return $this->description;
} }
public function setColor($color) {
$this->color = $color;
return $this;
}
public function getColor() {
if ($this->color) {
return $this->color;
} else {
return CalendarColors::COLOR_SKY;
}
}
public function setIsAllDay($is_all_day) { public function setIsAllDay($is_all_day) {
$this->isAllDay = $is_all_day; $this->isAllDay = $is_all_day;
return $this; return $this;

View file

@ -391,10 +391,15 @@ final class PHUICalendarDayView extends AphrontView {
} }
private function drawAllDayEvent(AphrontCalendarEventView $event) { private function drawAllDayEvent(AphrontCalendarEventView $event) {
$class = 'day-view-all-day';
if ($event->getViewerIsInvited()) {
$class = $class.' viewer-invited-day-event';
}
$name = phutil_tag( $name = phutil_tag(
'a', 'a',
array( array(
'class' => 'day-view-all-day', 'class' => $class,
'href' => $event->getURI(), 'href' => $event->getURI(),
), ),
$event->getName()); $event->getName());
@ -425,10 +430,16 @@ final class PHUICalendarDayView extends AphrontView {
$width, $width,
$top, $top,
$height) { $height) {
$class = 'phui-calendar-day-event-link';
if ($event->getViewerIsInvited()) {
$class = $class.' viewer-invited-day-event';
}
$name = phutil_tag( $name = phutil_tag(
'a', 'a',
array( array(
'class' => 'phui-calendar-day-event-link', 'class' => $class,
'href' => $event->getURI(), 'href' => $event->getURI(),
), ),
$event->getName()); $event->getName());

View file

@ -33,7 +33,6 @@ final class PHUICalendarListView extends AphrontTagView {
$singletons = array(); $singletons = array();
$allday = false; $allday = false;
foreach ($this->events as $event) { foreach ($this->events as $event) {
$color = $event->getColor();
$start_epoch = $event->getEpochStart(); $start_epoch = $event->getEpochStart();
if ($event->getIsAllDay()) { if ($event->getIsAllDay()) {
@ -65,7 +64,10 @@ final class PHUICalendarListView extends AphrontTagView {
), ),
$timelabel); $timelabel);
$class = 'phui-calendar-list-item phui-calendar-'.$color; $class = 'phui-calendar-list-item';
if ($event->getViewerIsInvited()) {
$class = $class.' phui-calendar-viewer-invited';
}
if ($event->getIsAllDay()) { if ($event->getIsAllDay()) {
$class = $class.' all-day'; $class = $class.' all-day';
} }
@ -142,7 +144,7 @@ final class PHUICalendarListView extends AphrontTagView {
$description = pht('(%s)', $event->getName()); $description = pht('(%s)', $event->getName());
} }
$class = 'phui-calendar-item-link'; $class = 'phui-calendar-item';
$anchor = javelin_tag( $anchor = javelin_tag(
'a', 'a',
@ -159,4 +161,13 @@ final class PHUICalendarListView extends AphrontTagView {
return $anchor; return $anchor;
} }
public function getIsViewerInvitedOnList() {
foreach ($this->events as $event) {
if ($event->getViewerIsInvited()) {
return true;
}
}
return false;
}
} }

View file

@ -178,7 +178,9 @@ final class PHUICalendarMonthView extends AphrontView {
$uri = $event_list['uri']; $uri = $event_list['uri'];
$count = $event_list['count']; $count = $event_list['count'];
$event_count_badge = $this->getEventCountBadge($count); $viewer_is_invited = $list->getIsViewerInvitedOnList();
$event_count_badge = $this->getEventCountBadge($count, $viewer_is_invited);
$cell_day_secret_link = $this->getHiddenDayLink($uri); $cell_day_secret_link = $this->getHiddenDayLink($uri);
$cell_data_div = phutil_tag( $cell_data_div = phutil_tag(
@ -252,13 +254,19 @@ final class PHUICalendarMonthView extends AphrontView {
$cell_div); $cell_div);
} }
private function getEventCountBadge($count) { private function getEventCountBadge($count, $viewer_is_invited) {
$class = 'phui-calendar-month-count-badge';
if ($viewer_is_invited) {
$class = $class.' viewer-invited-day-badge';
}
$event_count = null; $event_count = null;
if ($count > 0) { if ($count > 0) {
$event_count = phutil_tag( $event_count = phutil_tag(
'div', 'div',
array( array(
'class' => 'phui-calendar-month-count-badge', 'class' => $class,
), ),
$count); $count);
} }

View file

@ -37,8 +37,8 @@
.phui-calendar-day-event-link { .phui-calendar-day-event-link {
padding: 8px; padding: 8px;
border: 1px solid {$blueborder}; border: 1px solid {$greyborder};
background-color: {$bluebackground}; background-color: {$darkgreybackground};
margin: 0 4px; margin: 0 4px;
position: absolute; position: absolute;
left: 0; left: 0;
@ -49,17 +49,29 @@
color: {$greytext}; color: {$greytext};
} }
.phui-calendar-day-event-link.viewer-invited-day-event {
border-color: {$green};
background-color: {$lightgreen};
color: {$green};
}
.day-view-all-day { .day-view-all-day {
border: 1px solid {$blueborder}; border: 1px solid {$greyborder};
height: 12px; height: 12px;
margin: 0; margin: 0;
display: block; display: block;
padding: 8px; padding: 8px;
background-color: {$bluebackground}; background-color: {$darkgreybackground};
text-decoration: none; text-decoration: none;
color: {$greytext}; color: {$greytext};
} }
.day-view-all-day.viewer-invited-day-event {
border-color: {$green};
background-color: {$lightgreen};
color: {$green};
}
.phui-calendar-day-event + .phui-calendar-day-event .day-view-all-day { .phui-calendar-day-event + .phui-calendar-day-event .day-view-all-day {
border-top-style: none; border-top-style: none;
border-top-width: 0; border-top-width: 0;

View file

@ -73,6 +73,11 @@ table.phui-calendar-view tr td:first-child {
margin: 0 auto; margin: 0 auto;
} }
.phui-calendar-month-count-badge.viewer-invited-day-badge {
border-color: {$green};
color: {$green};
}
table.phui-calendar-view a.phui-calendar-date-number { table.phui-calendar-view a.phui-calendar-date-number {
color: {$lightgreytext}; color: {$lightgreytext};
padding: 0 4px; padding: 0 4px;
@ -116,12 +121,18 @@ table.phui-calendar-view td.phui-calendar-date-number-container {
.phui-calendar-view .phui-calendar-list li.phui-calendar-list-item.all-day { .phui-calendar-view .phui-calendar-list li.phui-calendar-list-item.all-day {
margin: 0; margin: 0;
padding: 4px 8px; padding: 4px 4px 0px 4px;
background-color: {$lightpink}; background-color: {$darkgreybackground};
display: block; display: block;
float: none; float: none;
} }
.phui-calendar-view
.phui-calendar-list
li.phui-calendar-viewer-invited.all-day {
background-color: {$lightgreen};
}
li.phui-calendar-list-item.all-day:first-child { li.phui-calendar-list-item.all-day:first-child {
margin-top: 0; margin-top: 0;
} }
@ -155,7 +166,11 @@ li.phui-calendar-list-item.all-day:first-child {
} }
li.phui-calendar-list-item.all-day .phui-calendar-list-title a{ li.phui-calendar-list-item.all-day .phui-calendar-list-title a{
color: {$pink}; color: {$greytext};
}
li.phui-calendar-viewer-invited.all-day .phui-calendar-list-title a{
color: {$green};
} }
.phui-calendar-view .phui-calendar-list-time { .phui-calendar-view .phui-calendar-list-time {

View file

@ -2,6 +2,15 @@
* @provides phui-calendar-css * @provides phui-calendar-css
*/ */
.phui-calendar-list a {
color: {$lightgreytext};
}
.phui-calendar-viewer-invited a {
color: {$green};
font-weight: bold;
}
.phui-calendar-red a { .phui-calendar-red a {
color: {$red}; color: {$red};
} }
@ -34,6 +43,14 @@
color: {$violet}; color: {$violet};
} }
.phui-calendar-grey a {
color: {$lightgreytext};
}
.phui-calendar-bg-viewer-invited {
background-color: {$lightgreen};
}
.phui-calendar-bg-red { .phui-calendar-bg-red {
background-color: {$lightred}; background-color: {$lightred};
} }
@ -47,7 +64,7 @@
} }
.phui-calendar-bg-green { .phui-calendar-bg-green {
background-color: {$lightgreen} background-color: {$lightgreen};
} }
.phui-calendar-bg-blue { .phui-calendar-bg-blue {
@ -66,6 +83,20 @@
background-color: {$lightviolet}; background-color: {$lightviolet};
} }
.phui-calendar-bg-grey {
background-color: {$darkgreybackground};
}
.phui-calendar-list-dot {
background-color: {$lightgreytext};
border-color: {$lightgreytext};
}
.phui-calendar-viewer-invited .phui-calendar-list-dot {
background-color: {$green};
border-color: {$green};
}
.phui-calendar-red .phui-calendar-list-dot { .phui-calendar-red .phui-calendar-list-dot {
background-color: {$red}; background-color: {$red};
border-color: {$red}; border-color: {$red};
@ -105,3 +136,8 @@
background-color: {$violet}; background-color: {$violet};
border-color: {$violet}; border-color: {$violet};
} }
.phui-calendar-grey .phui-calendar-list-dot {
background-color: {$lightgreytext};
border-color: {$lightgreytext};
}