@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.

Move event host and times into event subheader

Summary:
Ref T11326. Show this information with a subheader instead of in properties.

Also, slightly simplify the list view.

Test Plan: {F1723539}

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T11326

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

+73 -90
+27 -30
src/applications/calendar/controller/PhabricatorCalendarEventViewController.php
··· 34 34 new PhabricatorCalendarEventTransactionQuery()); 35 35 36 36 $header = $this->buildHeaderView($event); 37 + $subheader = $this->buildSubheaderView($event); 37 38 $curtain = $this->buildCurtain($event); 38 39 $details = $this->buildPropertySection($event); 39 40 $description = $this->buildDescriptionView($event); ··· 47 48 48 49 $view = id(new PHUITwoColumnView()) 49 50 ->setHeader($header) 51 + ->setSubheader($subheader) 50 52 ->setMainColumn( 51 53 array( 52 54 $timeline, ··· 201 203 $properties = id(new PHUIPropertyListView()) 202 204 ->setUser($viewer); 203 205 204 - if ($event->getIsAllDay()) { 205 - $date_start = phabricator_date($event->getViewerDateFrom(), $viewer); 206 - $date_end = phabricator_date($event->getViewerDateTo(), $viewer); 207 - 208 - if ($date_start == $date_end) { 209 - $properties->addProperty( 210 - pht('Time'), 211 - phabricator_date($event->getViewerDateFrom(), $viewer)); 212 - } else { 213 - $properties->addProperty( 214 - pht('Starts'), 215 - phabricator_date($event->getViewerDateFrom(), $viewer)); 216 - $properties->addProperty( 217 - pht('Ends'), 218 - phabricator_date($event->getViewerDateTo(), $viewer)); 219 - } 220 - } else { 221 - $properties->addProperty( 222 - pht('Starts'), 223 - phabricator_datetime($event->getViewerDateFrom(), $viewer)); 224 - 225 - $properties->addProperty( 226 - pht('Ends'), 227 - phabricator_datetime($event->getViewerDateTo(), $viewer)); 228 - } 229 - 230 206 if ($event->getIsRecurring()) { 231 207 $properties->addProperty( 232 208 pht('Recurs'), ··· 247 223 } 248 224 } 249 225 250 - $properties->addProperty( 251 - pht('Host'), 252 - $viewer->renderHandle($event->getHostPHID())); 253 - 254 226 $invitees = $event->getInvitees(); 255 227 foreach ($invitees as $key => $invitee) { 256 228 if ($invitee->isUninvited()) { ··· 388 360 389 361 return $instance; 390 362 } 363 + 364 + private function buildSubheaderView(PhabricatorCalendarEvent $event) { 365 + $viewer = $this->getViewer(); 366 + 367 + $host_phid = $event->getHostPHID(); 368 + 369 + $handles = $viewer->loadHandles(array($host_phid)); 370 + $handle = $handles[$host_phid]; 371 + 372 + $host = $viewer->renderHandle($host_phid); 373 + $host = phutil_tag('strong', array(), $host); 374 + 375 + $image_uri = $handles[$host_phid]->getImageURI(); 376 + $image_href = $handles[$host_phid]->getURI(); 377 + 378 + $date = $event->renderEventDate($viewer, true); 379 + 380 + $content = pht('Hosted by %s on %s.', $host, $date); 381 + 382 + return id(new PHUIHeadThingView()) 383 + ->setImage($image_uri) 384 + ->setImageHref($image_href) 385 + ->setContent($content); 386 + } 387 + 391 388 392 389 }
+1 -45
src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php
··· 264 264 $list = new PHUIObjectItemListView(); 265 265 266 266 foreach ($events as $event) { 267 - $event_date_info = $this->getEventDateLabel($event); 268 267 $attendees = array(); 269 268 270 269 foreach ($event->getInvitees() as $invitee) { ··· 288 287 ->setObjectName($monogram) 289 288 ->setHeader($event->getName()) 290 289 ->setHref($event->getURI()) 291 - ->addAttribute($event_date_info); 290 + ->addAttribute($event->renderEventDate($viewer, false)); 292 291 293 292 if ($attendees) { 294 293 $attending = pht( ··· 298 297 ->render()); 299 298 300 299 $item->addAttribute($attending); 301 - } 302 - 303 - if ($event->getDuration()) { 304 - $duration = pht( 305 - 'Duration: %s', 306 - $event->getDisplayDuration()); 307 - $item->addIcon('none', $duration); 308 300 } 309 301 310 302 $list->addItem($item); ··· 542 534 return false; 543 535 } 544 536 545 - private function getEventDateLabel($event) { 546 - $viewer = $this->requireViewer(); 547 - 548 - $from_datetime = PhabricatorTime::getDateTimeFromEpoch( 549 - $event->getViewerDateFrom(), 550 - $viewer); 551 - $to_datetime = PhabricatorTime::getDateTimeFromEpoch( 552 - $event->getViewerDateTo(), 553 - $viewer); 554 - 555 - $from_date_formatted = $from_datetime->format('Y m d'); 556 - $to_date_formatted = $to_datetime->format('Y m d'); 557 - 558 - if ($event->getIsAllDay()) { 559 - if ($from_date_formatted == $to_date_formatted) { 560 - return pht( 561 - '%s, All Day', 562 - phabricator_date($event->getViewerDateFrom(), $viewer)); 563 - } else { 564 - return pht( 565 - '%s - %s, All Day', 566 - phabricator_date($event->getViewerDateFrom(), $viewer), 567 - phabricator_date($event->getViewerDateTo(), $viewer)); 568 - } 569 - } else if ($from_date_formatted == $to_date_formatted) { 570 - return pht( 571 - '%s - %s', 572 - phabricator_datetime($event->getViewerDateFrom(), $viewer), 573 - phabricator_time($event->getViewerDateTo(), $viewer)); 574 - } else { 575 - return pht( 576 - '%s - %s', 577 - phabricator_datetime($event->getViewerDateFrom(), $viewer), 578 - phabricator_datetime($event->getViewerDateTo(), $viewer)); 579 - } 580 - } 581 537 }
+45 -15
src/applications/calendar/storage/PhabricatorCalendarEvent.php
··· 454 454 return false; 455 455 } 456 456 457 - public function getDisplayDuration() { 458 - $seconds = $this->getDuration(); 459 - $minutes = round($seconds / 60, 1); 460 - $hours = round($minutes / 60, 3); 461 - $days = round($hours / 24, 2); 457 + public function renderEventDate( 458 + PhabricatorUser $viewer, 459 + $show_end) { 462 460 463 - $duration = ''; 461 + if ($show_end) { 462 + $min_date = PhabricatorTime::getDateTimeFromEpoch( 463 + $this->getViewerDateFrom(), 464 + $viewer); 464 465 465 - if ($days >= 1) { 466 + $max_date = PhabricatorTime::getDateTimeFromEpoch( 467 + $this->getViewerDateTo(), 468 + $viewer); 469 + 470 + $min_day = $min_date->format('Y m d'); 471 + $max_day = $max_date->format('Y m d'); 472 + 473 + $show_end_date = ($min_day != $max_day); 474 + } else { 475 + $show_end_date = false; 476 + } 477 + 478 + $min_epoch = $this->getViewerDateFrom(); 479 + $max_epoch = $this->getViewerDateTo(); 480 + 481 + if ($this->getIsAllDay()) { 482 + if ($show_end_date) { 483 + return pht( 484 + '%s - %s, All Day', 485 + phabricator_date($min_epoch, $viewer), 486 + phabricator_date($max_epoch, $viewer)); 487 + } else { 488 + return pht( 489 + '%s, All Day', 490 + phabricator_date($min_epoch, $viewer)); 491 + } 492 + } else if ($show_end_date) { 466 493 return pht( 467 - '%s day(s)', 468 - round($days, 1)); 469 - } else if ($hours >= 1) { 494 + '%s - %s', 495 + phabricator_datetime($min_epoch, $viewer), 496 + phabricator_datetime($max_epoch, $viewer)); 497 + } else if ($show_end) { 470 498 return pht( 471 - '%s hour(s)', 472 - round($hours, 1)); 473 - } else if ($minutes >= 1) { 499 + '%s - %s', 500 + phabricator_datetime($min_epoch, $viewer), 501 + phabricator_time($max_epoch, $viewer)); 502 + } else { 474 503 return pht( 475 - '%s minute(s)', 476 - round($minutes, 0)); 504 + '%s', 505 + phabricator_datetime($min_epoch, $viewer)); 477 506 } 478 507 } 508 + 479 509 480 510 481 511 /* -( Markup Interface )--------------------------------------------------- */