mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-18 19:40:55 +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:
parent
f16dda288d
commit
4016107411
11 changed files with 142 additions and 54 deletions
|
@ -120,10 +120,10 @@ return array(
|
|||
'rsrc/css/layout/phabricator-hovercard-view.css' => 'dd9121a9',
|
||||
'rsrc/css/layout/phabricator-side-menu-view.css' => 'c1db9e9c',
|
||||
'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-month.css' => '3150cfbf',
|
||||
'rsrc/css/phui/calendar/phui-calendar.css' => '8675968e',
|
||||
'rsrc/css/phui/calendar/phui-calendar-month.css' => '3e42c803',
|
||||
'rsrc/css/phui/calendar/phui-calendar.css' => '8345be98',
|
||||
'rsrc/css/phui/phui-action-header-view.css' => '89c497e7',
|
||||
'rsrc/css/phui/phui-action-list.css' => '4f4d09f2',
|
||||
'rsrc/css/phui/phui-action-panel.css' => '3ee9afd5',
|
||||
|
@ -760,10 +760,10 @@ return array(
|
|||
'phui-action-panel-css' => '3ee9afd5',
|
||||
'phui-box-css' => '7b3a2eed',
|
||||
'phui-button-css' => 'de610129',
|
||||
'phui-calendar-css' => '8675968e',
|
||||
'phui-calendar-day-css' => '38891735',
|
||||
'phui-calendar-css' => '8345be98',
|
||||
'phui-calendar-day-css' => '3b4a65d8',
|
||||
'phui-calendar-list-css' => 'c1d0ca59',
|
||||
'phui-calendar-month-css' => '3150cfbf',
|
||||
'phui-calendar-month-css' => '3e42c803',
|
||||
'phui-crumbs-view-css' => '594d719e',
|
||||
'phui-document-view-css' => '94d5dcd8',
|
||||
'phui-feed-story-css' => 'c9f3a0b5',
|
||||
|
|
|
@ -10,6 +10,7 @@ final class CalendarColors extends CalendarConstants {
|
|||
const COLOR_SKY = 'sky';
|
||||
const COLOR_INDIGO = 'indigo';
|
||||
const COLOR_VIOLET = 'violet';
|
||||
const COLOR_GREY = 'grey';
|
||||
|
||||
public static function getColors() {
|
||||
return array(
|
||||
|
@ -21,6 +22,7 @@ final class CalendarColors extends CalendarConstants {
|
|||
self::COLOR_INDIGO,
|
||||
self::COLOR_RED,
|
||||
self::COLOR_YELLOW,
|
||||
self::COLOR_GREY,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -359,25 +359,9 @@ final class PhabricatorCalendarEventSearchEngine
|
|||
|
||||
$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) {
|
||||
$viewer_is_invited = $status->getIsUserInvited($viewer->getPHID());
|
||||
|
||||
$event = new AphrontCalendarEventView();
|
||||
$event->setEpochRange($status->getDateFrom(), $status->getDateTo());
|
||||
$event->setIsAllDay($status->getIsAllDay());
|
||||
|
@ -388,7 +372,7 @@ final class PhabricatorCalendarEventSearchEngine
|
|||
$event->setDescription(pht('%s (%s)', $name_text, $status_text));
|
||||
$event->setName($status_text);
|
||||
$event->setEventID($status->getID());
|
||||
$event->setColor($eventcolor[$status->getUserPHID()]);
|
||||
$event->setViewerIsInvited($viewer_is_invited);
|
||||
$month_view->addEvent($event);
|
||||
}
|
||||
|
||||
|
@ -422,10 +406,13 @@ final class PhabricatorCalendarEventSearchEngine
|
|||
continue;
|
||||
}
|
||||
|
||||
$viewer_is_invited = $status->getIsUserInvited($viewer->getPHID());
|
||||
|
||||
$event = new AphrontCalendarEventView();
|
||||
$event->setEventID($status->getID());
|
||||
$event->setEpochRange($status->getDateFrom(), $status->getDateTo());
|
||||
$event->setIsAllDay($status->getIsAllDay());
|
||||
$event->setViewerIsInvited($viewer_is_invited);
|
||||
|
||||
$event->setName($status->getName());
|
||||
$event->setURI('/'.$status->getMonogram());
|
||||
|
|
|
@ -215,6 +215,16 @@ final class PhabricatorCalendarEvent extends PhabricatorCalendarDAO
|
|||
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 )--------------------------------------------------- */
|
||||
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ final class AphrontCalendarEventView extends AphrontView {
|
|||
private $epochEnd;
|
||||
private $description;
|
||||
private $eventID;
|
||||
private $color;
|
||||
private $viewerIsInvited;
|
||||
private $uri;
|
||||
private $isAllDay;
|
||||
|
||||
|
@ -29,6 +29,14 @@ final class AphrontCalendarEventView extends AphrontView {
|
|||
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) {
|
||||
$this->userPHID = $user_phid;
|
||||
return $this;
|
||||
|
@ -70,18 +78,6 @@ final class AphrontCalendarEventView extends AphrontView {
|
|||
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) {
|
||||
$this->isAllDay = $is_all_day;
|
||||
return $this;
|
||||
|
|
|
@ -391,10 +391,15 @@ final class PHUICalendarDayView extends AphrontView {
|
|||
}
|
||||
|
||||
private function drawAllDayEvent(AphrontCalendarEventView $event) {
|
||||
$class = 'day-view-all-day';
|
||||
if ($event->getViewerIsInvited()) {
|
||||
$class = $class.' viewer-invited-day-event';
|
||||
}
|
||||
|
||||
$name = phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'class' => 'day-view-all-day',
|
||||
'class' => $class,
|
||||
'href' => $event->getURI(),
|
||||
),
|
||||
$event->getName());
|
||||
|
@ -425,10 +430,16 @@ final class PHUICalendarDayView extends AphrontView {
|
|||
$width,
|
||||
$top,
|
||||
$height) {
|
||||
|
||||
$class = 'phui-calendar-day-event-link';
|
||||
if ($event->getViewerIsInvited()) {
|
||||
$class = $class.' viewer-invited-day-event';
|
||||
}
|
||||
|
||||
$name = phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'class' => 'phui-calendar-day-event-link',
|
||||
'class' => $class,
|
||||
'href' => $event->getURI(),
|
||||
),
|
||||
$event->getName());
|
||||
|
|
|
@ -33,7 +33,6 @@ final class PHUICalendarListView extends AphrontTagView {
|
|||
$singletons = array();
|
||||
$allday = false;
|
||||
foreach ($this->events as $event) {
|
||||
$color = $event->getColor();
|
||||
$start_epoch = $event->getEpochStart();
|
||||
|
||||
if ($event->getIsAllDay()) {
|
||||
|
@ -65,7 +64,10 @@ final class PHUICalendarListView extends AphrontTagView {
|
|||
),
|
||||
$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()) {
|
||||
$class = $class.' all-day';
|
||||
}
|
||||
|
@ -142,7 +144,7 @@ final class PHUICalendarListView extends AphrontTagView {
|
|||
$description = pht('(%s)', $event->getName());
|
||||
}
|
||||
|
||||
$class = 'phui-calendar-item-link';
|
||||
$class = 'phui-calendar-item';
|
||||
|
||||
$anchor = javelin_tag(
|
||||
'a',
|
||||
|
@ -159,4 +161,13 @@ final class PHUICalendarListView extends AphrontTagView {
|
|||
|
||||
return $anchor;
|
||||
}
|
||||
|
||||
public function getIsViewerInvitedOnList() {
|
||||
foreach ($this->events as $event) {
|
||||
if ($event->getViewerIsInvited()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -178,7 +178,9 @@ final class PHUICalendarMonthView extends AphrontView {
|
|||
$uri = $event_list['uri'];
|
||||
$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_data_div = phutil_tag(
|
||||
|
@ -252,13 +254,19 @@ final class PHUICalendarMonthView extends AphrontView {
|
|||
$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;
|
||||
if ($count > 0) {
|
||||
$event_count = phutil_tag(
|
||||
'div',
|
||||
array(
|
||||
'class' => 'phui-calendar-month-count-badge',
|
||||
'class' => $class,
|
||||
),
|
||||
$count);
|
||||
}
|
||||
|
|
|
@ -37,8 +37,8 @@
|
|||
|
||||
.phui-calendar-day-event-link {
|
||||
padding: 8px;
|
||||
border: 1px solid {$blueborder};
|
||||
background-color: {$bluebackground};
|
||||
border: 1px solid {$greyborder};
|
||||
background-color: {$darkgreybackground};
|
||||
margin: 0 4px;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
|
@ -49,17 +49,29 @@
|
|||
color: {$greytext};
|
||||
}
|
||||
|
||||
.phui-calendar-day-event-link.viewer-invited-day-event {
|
||||
border-color: {$green};
|
||||
background-color: {$lightgreen};
|
||||
color: {$green};
|
||||
}
|
||||
|
||||
.day-view-all-day {
|
||||
border: 1px solid {$blueborder};
|
||||
border: 1px solid {$greyborder};
|
||||
height: 12px;
|
||||
margin: 0;
|
||||
display: block;
|
||||
padding: 8px;
|
||||
background-color: {$bluebackground};
|
||||
background-color: {$darkgreybackground};
|
||||
text-decoration: none;
|
||||
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 {
|
||||
border-top-style: none;
|
||||
border-top-width: 0;
|
||||
|
|
|
@ -73,6 +73,11 @@ table.phui-calendar-view tr td:first-child {
|
|||
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 {
|
||||
color: {$lightgreytext};
|
||||
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 {
|
||||
margin: 0;
|
||||
padding: 4px 8px;
|
||||
background-color: {$lightpink};
|
||||
padding: 4px 4px 0px 4px;
|
||||
background-color: {$darkgreybackground};
|
||||
display: block;
|
||||
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 {
|
||||
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{
|
||||
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 {
|
||||
|
|
|
@ -2,6 +2,15 @@
|
|||
* @provides phui-calendar-css
|
||||
*/
|
||||
|
||||
.phui-calendar-list a {
|
||||
color: {$lightgreytext};
|
||||
}
|
||||
|
||||
.phui-calendar-viewer-invited a {
|
||||
color: {$green};
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.phui-calendar-red a {
|
||||
color: {$red};
|
||||
}
|
||||
|
@ -34,6 +43,14 @@
|
|||
color: {$violet};
|
||||
}
|
||||
|
||||
.phui-calendar-grey a {
|
||||
color: {$lightgreytext};
|
||||
}
|
||||
|
||||
.phui-calendar-bg-viewer-invited {
|
||||
background-color: {$lightgreen};
|
||||
}
|
||||
|
||||
.phui-calendar-bg-red {
|
||||
background-color: {$lightred};
|
||||
}
|
||||
|
@ -47,7 +64,7 @@
|
|||
}
|
||||
|
||||
.phui-calendar-bg-green {
|
||||
background-color: {$lightgreen}
|
||||
background-color: {$lightgreen};
|
||||
}
|
||||
|
||||
.phui-calendar-bg-blue {
|
||||
|
@ -66,6 +83,20 @@
|
|||
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 {
|
||||
background-color: {$red};
|
||||
border-color: {$red};
|
||||
|
@ -105,3 +136,8 @@
|
|||
background-color: {$violet};
|
||||
border-color: {$violet};
|
||||
}
|
||||
|
||||
.phui-calendar-grey .phui-calendar-list-dot {
|
||||
background-color: {$lightgreytext};
|
||||
border-color: {$lightgreytext};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue