Calendar day view should start at 8am at the latest and hour of first event at the earliest.
Summary: Closes T8114, Calendar day view should start at 8am at the latest and hour of first event at the earliest. Test Plan: Open day view on day with all day event and event at 5am, all day events should all be stacked at the top of the day view table, and day should start at 5am. Reviewers: chad, #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: Korvin, epriestley Maniphest Tasks: T8114 Differential Revision: https://secure.phabricator.com/D12779
This commit is contained in:
		@@ -120,7 +120,7 @@ return array(
 | 
				
			|||||||
    'rsrc/css/layout/phabricator-hovercard-view.css' => '44394670',
 | 
					    'rsrc/css/layout/phabricator-hovercard-view.css' => '44394670',
 | 
				
			||||||
    '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' => '75b8cc4a',
 | 
					    'rsrc/css/phui/calendar/phui-calendar-day.css' => '49037167',
 | 
				
			||||||
    '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' => 'a92e47d2',
 | 
					    'rsrc/css/phui/calendar/phui-calendar-month.css' => 'a92e47d2',
 | 
				
			||||||
    'rsrc/css/phui/calendar/phui-calendar.css' => '8675968e',
 | 
					    'rsrc/css/phui/calendar/phui-calendar.css' => '8675968e',
 | 
				
			||||||
@@ -777,7 +777,7 @@ return array(
 | 
				
			|||||||
    'phui-box-css' => '7b3a2eed',
 | 
					    'phui-box-css' => '7b3a2eed',
 | 
				
			||||||
    'phui-button-css' => 'de610129',
 | 
					    'phui-button-css' => 'de610129',
 | 
				
			||||||
    'phui-calendar-css' => '8675968e',
 | 
					    'phui-calendar-css' => '8675968e',
 | 
				
			||||||
    'phui-calendar-day-css' => '75b8cc4a',
 | 
					    'phui-calendar-day-css' => '49037167',
 | 
				
			||||||
    'phui-calendar-list-css' => 'c1d0ca59',
 | 
					    'phui-calendar-list-css' => 'c1d0ca59',
 | 
				
			||||||
    'phui-calendar-month-css' => 'a92e47d2',
 | 
					    'phui-calendar-month-css' => 'a92e47d2',
 | 
				
			||||||
    'phui-crumbs-view-css' => '594d719e',
 | 
					    'phui-crumbs-view-css' => '594d719e',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,30 +35,32 @@ final class PHUICalendarDayView extends AphrontView {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    $hours = $this->getHoursOfDay();
 | 
					    $hours = $this->getHoursOfDay();
 | 
				
			||||||
    $hourly_events = array();
 | 
					    $hourly_events = array();
 | 
				
			||||||
    $rows = array();
 | 
					
 | 
				
			||||||
 | 
					    $first_event_hour = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $all_day_events = $this->getAllDayEvents();
 | 
					    $all_day_events = $this->getAllDayEvents();
 | 
				
			||||||
 | 
					    $today_all_day_events = array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $day_start = $this->getDateTime();
 | 
				
			||||||
 | 
					    $day_end = id(clone $day_start)->modify('+1 day');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $day_start = $day_start->format('U');
 | 
				
			||||||
 | 
					    $day_end = $day_end->format('U');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    foreach ($all_day_events as $all_day_event) {
 | 
				
			||||||
 | 
					      $all_day_start = $all_day_event->getEpochStart();
 | 
				
			||||||
 | 
					      $all_day_end = $all_day_event->getEpochEnd();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if ($all_day_start < $day_end && $all_day_end > $day_start) {
 | 
				
			||||||
 | 
					        $today_all_day_events[] = $all_day_event;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // sort events into buckets by their start time
 | 
					 | 
				
			||||||
    // pretend no events overlap
 | 
					 | 
				
			||||||
    foreach ($hours as $hour) {
 | 
					    foreach ($hours as $hour) {
 | 
				
			||||||
      $current_hour_events = array();
 | 
					      $current_hour_events = array();
 | 
				
			||||||
      $hour_start = $hour->format('U');
 | 
					      $hour_start = $hour->format('U');
 | 
				
			||||||
      $hour_end = id(clone $hour)->modify('+1 hour')->format('U');
 | 
					      $hour_end = id(clone $hour)->modify('+1 hour')->format('U');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if ($hour == $this->getDateTime()) {
 | 
					 | 
				
			||||||
        foreach ($all_day_events as $all_day_event) {
 | 
					 | 
				
			||||||
          $all_day_start = $all_day_event->getEpochStart();
 | 
					 | 
				
			||||||
          $all_day_end = $all_day_event->getEpochEnd();
 | 
					 | 
				
			||||||
          $day_end = id(clone $hour)->modify('+1 day')->format('U') - 1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          if ($all_day_start < $day_end && $all_day_end > $hour_start) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            $current_hour_events[] = $all_day_event;
 | 
					 | 
				
			||||||
            $this->todayEvents[] = $all_day_event;
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      foreach ($this->events as $event) {
 | 
					      foreach ($this->events as $event) {
 | 
				
			||||||
          if ($event->getIsAllDay()) {
 | 
					          if ($event->getIsAllDay()) {
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
@@ -81,6 +83,10 @@ final class PHUICalendarDayView extends AphrontView {
 | 
				
			|||||||
          * 100;
 | 
					          * 100;
 | 
				
			||||||
        $height = min(2400, $height);
 | 
					        $height = min(2400, $height);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($first_event_hour === null) {
 | 
				
			||||||
 | 
					          $first_event_hour = $hour;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $hourly_events[$event->getEventID()] = array(
 | 
					        $hourly_events[$event->getEventID()] = array(
 | 
				
			||||||
          'hour' => $hour,
 | 
					          'hour' => $hour,
 | 
				
			||||||
          'event' => $event,
 | 
					          'event' => $event,
 | 
				
			||||||
@@ -99,8 +105,17 @@ final class PHUICalendarDayView extends AphrontView {
 | 
				
			|||||||
        $hourly_events);
 | 
					        $hourly_events);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // actually construct table
 | 
					    $rows = array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    foreach ($hours as $hour) {
 | 
					    foreach ($hours as $hour) {
 | 
				
			||||||
 | 
					      $early_hours = array(8);
 | 
				
			||||||
 | 
					      if ($first_event_hour) {
 | 
				
			||||||
 | 
					        $early_hours[] = $first_event_hour->format('G');
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if ($hour->format('G') < min($early_hours)) {
 | 
				
			||||||
 | 
					        continue;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      $drawn_hourly_events = array();
 | 
					      $drawn_hourly_events = array();
 | 
				
			||||||
      $cell_time = phutil_tag(
 | 
					      $cell_time = phutil_tag(
 | 
				
			||||||
        'td',
 | 
					        'td',
 | 
				
			||||||
@@ -109,6 +124,7 @@ final class PHUICalendarDayView extends AphrontView {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      foreach ($hourly_events as $hourly_event) {
 | 
					      foreach ($hourly_events as $hourly_event) {
 | 
				
			||||||
        if ($hourly_event['hour'] == $hour) {
 | 
					        if ($hourly_event['hour'] == $hour) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          $drawn_hourly_events[] = $this->drawEvent(
 | 
					          $drawn_hourly_events[] = $this->drawEvent(
 | 
				
			||||||
            $hourly_event['event'],
 | 
					            $hourly_event['event'],
 | 
				
			||||||
            $hourly_event['offset'],
 | 
					            $hourly_event['offset'],
 | 
				
			||||||
@@ -133,16 +149,20 @@ final class PHUICalendarDayView extends AphrontView {
 | 
				
			|||||||
    $table = phutil_tag(
 | 
					    $table = phutil_tag(
 | 
				
			||||||
      'table',
 | 
					      'table',
 | 
				
			||||||
      array('class' => 'phui-calendar-day-view'),
 | 
					      array('class' => 'phui-calendar-day-view'),
 | 
				
			||||||
      array(
 | 
					      $rows);
 | 
				
			||||||
        '',
 | 
					
 | 
				
			||||||
        $rows,
 | 
					    $all_day_event_box = new PHUIBoxView();
 | 
				
			||||||
      ));
 | 
					    foreach ($today_all_day_events as $all_day_event) {
 | 
				
			||||||
 | 
					      $all_day_event_box->appendChild(
 | 
				
			||||||
 | 
					        $this->drawAllDayEvent($all_day_event));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $header = $this->renderDayViewHeader();
 | 
					    $header = $this->renderDayViewHeader();
 | 
				
			||||||
    $sidebar = $this->renderSidebar();
 | 
					    $sidebar = $this->renderSidebar();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $table_box = id(new PHUIObjectBoxView())
 | 
					    $table_box = id(new PHUIObjectBoxView())
 | 
				
			||||||
      ->setHeader($header)
 | 
					      ->setHeader($header)
 | 
				
			||||||
 | 
					      ->appendChild($all_day_event_box)
 | 
				
			||||||
      ->appendChild($table)
 | 
					      ->appendChild($table)
 | 
				
			||||||
      ->setFlush(true);
 | 
					      ->setFlush(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -170,7 +190,6 @@ final class PHUICalendarDayView extends AphrontView {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $all_day_events = array_values(msort($all_day_events, 'getEpochStart'));
 | 
					    $all_day_events = array_values(msort($all_day_events, 'getEpochStart'));
 | 
				
			||||||
 | 
					 | 
				
			||||||
    return $all_day_events;
 | 
					    return $all_day_events;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -325,6 +344,35 @@ final class PHUICalendarDayView extends AphrontView {
 | 
				
			|||||||
    return $hourly_events;
 | 
					    return $hourly_events;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private function drawAllDayEvent(AphrontCalendarEventView $event) {
 | 
				
			||||||
 | 
					    $name = phutil_tag(
 | 
				
			||||||
 | 
					      'a',
 | 
				
			||||||
 | 
					      array(
 | 
				
			||||||
 | 
					        'class' => 'all-day',
 | 
				
			||||||
 | 
					        'href' => $event->getURI(),
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					      $event->getName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $all_day_label = phutil_tag(
 | 
				
			||||||
 | 
					      'span',
 | 
				
			||||||
 | 
					      array(
 | 
				
			||||||
 | 
					        'class' => 'phui-calendar-all-day-label',
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					      pht('All Day'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $div = phutil_tag(
 | 
				
			||||||
 | 
					      'div',
 | 
				
			||||||
 | 
					      array(
 | 
				
			||||||
 | 
					        'class' => 'phui-calendar-day-event',
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					      array(
 | 
				
			||||||
 | 
					        $all_day_label,
 | 
				
			||||||
 | 
					        $name,
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $div;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private function drawEvent(
 | 
					  private function drawEvent(
 | 
				
			||||||
    AphrontCalendarEventView $event,
 | 
					    AphrontCalendarEventView $event,
 | 
				
			||||||
    $offset,
 | 
					    $offset,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,3 +48,25 @@
 | 
				
			|||||||
  text-decoration: none;
 | 
					  text-decoration: none;
 | 
				
			||||||
  color: {$greytext};
 | 
					  color: {$greytext};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.all-day {
 | 
				
			||||||
 | 
					  border: 1px solid {$blueborder};
 | 
				
			||||||
 | 
					  height: 12px;
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  padding: 8px;
 | 
				
			||||||
 | 
					  background-color: {$bluebackground};
 | 
				
			||||||
 | 
					  text-decoration: none;
 | 
				
			||||||
 | 
					  color: {$greytext};
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.phui-calendar-day-event + .phui-calendar-day-event .all-day {
 | 
				
			||||||
 | 
					  border-top-style: none;
 | 
				
			||||||
 | 
					  border-top-width: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.phui-calendar-all-day-label {
 | 
				
			||||||
 | 
					  color: {$greytext};
 | 
				
			||||||
 | 
					  float: right;
 | 
				
			||||||
 | 
					  margin: 8px 8px 0 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user