@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Remove "viewerDateFrom" / "viewerDateTo" in favor of CalendarDateTime methods

Summary: Ref T10747. The CalendarDateTime object now carries the viewer timezone as part of its state, so we don't need to have separate accessors.

Test Plan:
- Viewed events, checked that crumbs render properly.
- Edited events.
- Created new events.
- Viewed calendar.
- Viewed event detail pages.
- Viewed profile mini-calendar.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T10747

Differential Revision: https://secure.phabricator.com/D16662

+79 -104
+2 -2
src/applications/calendar/controller/PhabricatorCalendarEventViewController.php
··· 27 27 $page_title = $monogram.' '.$event->getName(); 28 28 $crumbs = $this->buildApplicationCrumbs(); 29 29 30 - $start = new DateTime('@'.$event->getViewerDateFrom()); 31 - $start->setTimeZone($viewer->getTimeZone()); 30 + $start = $event->newStartDateTime() 31 + ->newPHPDateTime(); 32 32 33 33 $crumbs->addTextCrumb( 34 34 $start->format('F Y'),
+42 -35
src/applications/calendar/editor/PhabricatorCalendarEventEditEngine.php
··· 155 155 } 156 156 157 157 if ($this->getIsCreate() || $object->getIsRecurring()) { 158 + $until_datetime = $object->newUntilDateTime(); 159 + if ($until_datetime) { 160 + $until_epoch = $until_datetime->getEpoch(); 161 + } else { 162 + $until_epoch = null; 163 + } 164 + 158 165 $fields[] = id(new PhabricatorEpochEditField()) 159 166 ->setAllowNull(true) 160 167 ->setKey('until') ··· 164 171 ->setDescription(pht('Last instance of the event.')) 165 172 ->setConduitDescription(pht('Change when the event repeats until.')) 166 173 ->setConduitTypeDescription(pht('New final event time.')) 167 - ->setValue($object->getRecurrenceEndDate()); 174 + ->setValue($until_epoch); 168 175 } 169 176 170 177 $fields[] = id(new PhabricatorBoolEditField()) 171 - ->setKey('isAllDay') 172 - ->setLabel(pht('All Day')) 173 - ->setOptions(pht('Normal Event'), pht('All Day Event')) 174 - ->setTransactionType( 175 - PhabricatorCalendarEventAllDayTransaction::TRANSACTIONTYPE) 176 - ->setDescription(pht('Marks this as an all day event.')) 177 - ->setConduitDescription(pht('Make the event an all day event.')) 178 - ->setConduitTypeDescription(pht('Mark the event as an all day event.')) 179 - ->setValue($object->getIsAllDay()); 178 + ->setKey('isAllDay') 179 + ->setLabel(pht('All Day')) 180 + ->setOptions(pht('Normal Event'), pht('All Day Event')) 181 + ->setTransactionType( 182 + PhabricatorCalendarEventAllDayTransaction::TRANSACTIONTYPE) 183 + ->setDescription(pht('Marks this as an all day event.')) 184 + ->setConduitDescription(pht('Make the event an all day event.')) 185 + ->setConduitTypeDescription(pht('Mark the event as an all day event.')) 186 + ->setValue($object->getIsAllDay()); 180 187 181 188 $fields[] = id(new PhabricatorEpochEditField()) 182 - ->setKey('start') 183 - ->setLabel(pht('Start')) 184 - ->setTransactionType( 185 - PhabricatorCalendarEventStartDateTransaction::TRANSACTIONTYPE) 186 - ->setDescription(pht('Start time of the event.')) 187 - ->setConduitDescription(pht('Change the start time of the event.')) 188 - ->setConduitTypeDescription(pht('New event start time.')) 189 - ->setValue($object->getViewerDateFrom()); 189 + ->setKey('start') 190 + ->setLabel(pht('Start')) 191 + ->setTransactionType( 192 + PhabricatorCalendarEventStartDateTransaction::TRANSACTIONTYPE) 193 + ->setDescription(pht('Start time of the event.')) 194 + ->setConduitDescription(pht('Change the start time of the event.')) 195 + ->setConduitTypeDescription(pht('New event start time.')) 196 + ->setValue($object->getStartDateTimeEpoch()); 190 197 191 198 $fields[] = id(new PhabricatorEpochEditField()) 192 - ->setKey('end') 193 - ->setLabel(pht('End')) 194 - ->setTransactionType( 195 - PhabricatorCalendarEventEndDateTransaction::TRANSACTIONTYPE) 196 - ->setDescription(pht('End time of the event.')) 197 - ->setConduitDescription(pht('Change the end time of the event.')) 198 - ->setConduitTypeDescription(pht('New event end time.')) 199 - ->setValue($object->getViewerDateTo()); 199 + ->setKey('end') 200 + ->setLabel(pht('End')) 201 + ->setTransactionType( 202 + PhabricatorCalendarEventEndDateTransaction::TRANSACTIONTYPE) 203 + ->setDescription(pht('End time of the event.')) 204 + ->setConduitDescription(pht('Change the end time of the event.')) 205 + ->setConduitTypeDescription(pht('New event end time.')) 206 + ->setValue($object->getEndDateTimeEpoch()); 200 207 201 208 $fields[] = id(new PhabricatorIconSetEditField()) 202 - ->setKey('icon') 203 - ->setLabel(pht('Icon')) 204 - ->setIconSet(new PhabricatorCalendarIconSet()) 205 - ->setTransactionType( 206 - PhabricatorCalendarEventIconTransaction::TRANSACTIONTYPE) 207 - ->setDescription(pht('Event icon.')) 208 - ->setConduitDescription(pht('Change the event icon.')) 209 - ->setConduitTypeDescription(pht('New event icon.')) 210 - ->setValue($object->getIcon()); 209 + ->setKey('icon') 210 + ->setLabel(pht('Icon')) 211 + ->setIconSet(new PhabricatorCalendarIconSet()) 212 + ->setTransactionType( 213 + PhabricatorCalendarEventIconTransaction::TRANSACTIONTYPE) 214 + ->setDescription(pht('Event icon.')) 215 + ->setConduitDescription(pht('Change the event icon.')) 216 + ->setConduitTypeDescription(pht('New event icon.')) 217 + ->setValue($object->getIcon()); 211 218 212 219 return $fields; 213 220 }
+10 -10
src/applications/calendar/query/PhabricatorCalendarEventQuery.php
··· 99 99 protected function getPagingValueMap($cursor, array $keys) { 100 100 $event = $this->loadCursorObject($cursor); 101 101 return array( 102 - 'start' => $event->getViewerDateFrom(), 102 + 'start' => $event->getStartDateTimeEpoch(), 103 103 'id' => $event->getID(), 104 104 ); 105 105 } ··· 177 177 $modify_key = '+1 '.$frequency; 178 178 179 179 if (($this->rangeBegin !== null) && 180 - ($this->rangeBegin > $event->getViewerDateFrom())) { 180 + ($this->rangeBegin > $event->getStartDateTimeEpoch())) { 181 181 $max_date = $this->rangeBegin - $duration; 182 - $date = $event->getViewerDateFrom(); 182 + $date = $event->getStartDateTimeEpoch(); 183 183 $datetime = PhabricatorTime::getDateTimeFromEpoch($date, $viewer); 184 184 185 185 while ($date < $max_date) { ··· 191 191 192 192 $start = $this->rangeBegin; 193 193 } else { 194 - $start = $event->getViewerDateFrom() - $duration; 194 + $start = $event->getStartDateTimeEpoch() - $duration; 195 195 } 196 196 197 197 $date = $start; ··· 238 238 239 239 if ($raw_limit) { 240 240 if (count($events) > $raw_limit) { 241 - $events = msort($events, 'getViewerDateFrom'); 241 + $events = msort($events, 'getStartDateTimeEpoch'); 242 242 $events = array_slice($events, 0, $raw_limit, true); 243 - $enforced_end = last($events)->getViewerDateFrom(); 243 + $enforced_end = last($events)->getStartDateTimeEpoch(); 244 244 } 245 245 } 246 246 } ··· 308 308 } 309 309 } 310 310 311 - $events = msort($events, 'getViewerDateFrom'); 311 + $events = msort($events, 'getStartDateTimeEpoch'); 312 312 313 313 return $events; 314 314 } ··· 500 500 } 501 501 } 502 502 503 - $events = msort($events, 'getViewerDateFrom'); 503 + $events = msort($events, 'getStartDateTimeEpoch'); 504 504 505 505 return $events; 506 506 } ··· 510 510 $range_end = $this->rangeEnd; 511 511 512 512 foreach ($events as $key => $event) { 513 - $event_start = $event->getViewerDateFrom(); 514 - $event_end = $event->getViewerDateTo(); 513 + $event_start = $event->getStartDateTimeEpoch(); 514 + $event_end = $event->getEndDateTimeEpoch(); 515 515 516 516 if ($range_start && $event_end < $range_start) { 517 517 unset($events[$key]);
+4 -4
src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php
··· 343 343 $month_view->setUser($viewer); 344 344 345 345 foreach ($events as $event) { 346 - $epoch_min = $event->getViewerDateFrom(); 347 - $epoch_max = $event->getViewerDateTo(); 346 + $epoch_min = $event->getStartDateTimeEpoch(); 347 + $epoch_max = $event->getEndDateTimeEpoch(); 348 348 349 349 $event_view = id(new AphrontCalendarEventView()) 350 350 ->setHostPHID($event->getHostPHID()) ··· 408 408 $event, 409 409 PhabricatorPolicyCapability::CAN_EDIT); 410 410 411 - $epoch_min = $event->getViewerDateFrom(); 412 - $epoch_max = $event->getViewerDateTo(); 411 + $epoch_min = $event->getStartDateTimeEpoch(); 412 + $epoch_max = $event->getEndDateTimeEpoch(); 413 413 414 414 $status_icon = $event->getDisplayIcon($viewer); 415 415 $status_color = $event->getDisplayIconColor($viewer);
+18 -50
src/applications/calendar/storage/PhabricatorCalendarEvent.php
··· 49 49 private $parentEvent = self::ATTACHABLE; 50 50 private $invitees = self::ATTACHABLE; 51 51 52 - private $viewerDateFrom; 53 - private $viewerDateTo; 54 52 private $viewerTimezone; 55 53 56 54 // Frequency Constants ··· 273 271 return $ghost; 274 272 } 275 273 276 - public function getViewerDateFrom() { 277 - if ($this->viewerDateFrom === null) { 278 - throw new PhutilInvalidStateException('applyViewerTimezone'); 279 - } 280 - 281 - return $this->viewerDateFrom; 282 - } 283 - 284 - public function getViewerDateTo() { 285 - if ($this->viewerDateTo === null) { 286 - throw new PhutilInvalidStateException('applyViewerTimezone'); 287 - } 288 - 289 - return $this->viewerDateTo; 290 - } 291 - 292 274 public function applyViewerTimezone(PhabricatorUser $viewer) { 293 - if (!$this->getIsAllDay()) { 294 - $this->viewerDateFrom = $this->getDateFrom(); 295 - $this->viewerDateTo = $this->getDateTo(); 296 - } else { 297 - $zone = $viewer->getTimeZone(); 298 - 299 - $this->viewerDateFrom = $this->getDateEpochForTimezone( 300 - $this->getAllDayDateFrom(), 301 - new DateTimeZone('UTC'), 302 - 'Y-m-d', 303 - null, 304 - $zone); 305 - 306 - $this->viewerDateTo = $this->getDateEpochForTimezone( 307 - $this->getAllDayDateTo(), 308 - new DateTimeZone('UTC'), 309 - 'Y-m-d 23:59:00', 310 - null, 311 - $zone); 312 - } 313 - 314 275 $this->viewerTimezone = $viewer->getTimezoneIdentifier(); 315 - 316 276 return $this; 317 277 } 318 278 ··· 407 367 * @return int Event start date for availability caches. 408 368 */ 409 369 public function getDateFromForCache() { 410 - return ($this->getViewerDateFrom() - phutil_units('15 minutes in seconds')); 370 + $epoch = $this->getStartDateTimeEpoch(); 371 + $window = phutil_units('15 minutes in seconds'); 372 + return ($epoch - $window); 411 373 } 412 374 413 375 protected function getConfiguration() { ··· 593 555 PhabricatorUser $viewer, 594 556 $show_end) { 595 557 596 - if ($show_end) { 597 - $min_date = PhabricatorTime::getDateTimeFromEpoch( 598 - $this->getViewerDateFrom(), 599 - $viewer); 558 + $start = $this->newStartDateTime(); 559 + $end = $this->newEndDateTime(); 600 560 601 - $max_date = PhabricatorTime::getDateTimeFromEpoch( 602 - $this->getViewerDateTo(), 603 - $viewer); 561 + if ($show_end) { 562 + $min_date = $start->newPHPDateTime(); 563 + $max_date = $end->newPHPDateTime(); 604 564 605 565 $min_day = $min_date->format('Y m d'); 606 566 $max_day = $max_date->format('Y m d'); ··· 610 570 $show_end_date = false; 611 571 } 612 572 613 - $min_epoch = $this->getViewerDateFrom(); 614 - $max_epoch = $this->getViewerDateTo(); 573 + $min_epoch = $start->getEpoch(); 574 + $max_epoch = $end->getEpoch(); 615 575 616 576 if ($this->getIsAllDay()) { 617 577 if ($show_end_date) { ··· 803 763 return $this->newDateTimeFromEpoch($epoch); 804 764 } 805 765 766 + public function getStartDateTimeEpoch() { 767 + return $this->newStartDateTime()->getEpoch(); 768 + } 769 + 806 770 public function newEndDateTime() { 807 771 $datetime = $this->getParameter('endDateTime'); 808 772 if ($datetime) { ··· 811 775 812 776 $epoch = $this->getDateTo(); 813 777 return $this->newDateTimeFromEpoch($epoch); 778 + } 779 + 780 + public function getEndDateTimeEpoch() { 781 + return $this->newEndDateTime()->getEpoch(); 814 782 } 815 783 816 784 public function newUntilDateTime() {
+2 -2
src/applications/people/controller/PhabricatorPeopleProfileViewController.php
··· 205 205 $event, 206 206 PhabricatorPolicyCapability::CAN_EDIT); 207 207 208 - $epoch_min = $event->getViewerDateFrom(); 209 - $epoch_max = $event->getViewerDateTo(); 208 + $epoch_min = $event->getStartDateTimeEpoch(); 209 + $epoch_max = $event->getEndDateTimeEpoch(); 210 210 211 211 $event_view = id(new AphrontCalendarEventView()) 212 212 ->setCanEdit($can_edit)
+1 -1
src/applications/people/query/PhabricatorPeopleQuery.php
··· 432 432 while (true) { 433 433 foreach ($events as $event) { 434 434 $from = $event->getDateFromForCache(); 435 - $to = $event->getViewerDateTo(); 435 + $to = $event->getEndDateTimeEpoch(); 436 436 if (($from <= $cursor) && ($to > $cursor)) { 437 437 $cursor = $to; 438 438 continue 2;