[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/calendar/query/ -> PhabricatorCalendarEventSearchEngine.php (source)

   1  <?php
   2  
   3  final class PhabricatorCalendarEventSearchEngine
   4    extends PhabricatorApplicationSearchEngine {
   5  
   6    public function getResultTypeDescription() {
   7      return pht('Calendar Events');
   8    }
   9  
  10    public function getApplicationClassName() {
  11      return 'PhabricatorCalendarApplication';
  12    }
  13  
  14    public function buildSavedQueryFromRequest(AphrontRequest $request) {
  15      $saved = new PhabricatorSavedQuery();
  16  
  17      $saved->setParameter(
  18        'rangeStart',
  19        $this->readDateFromRequest($request, 'rangeStart'));
  20  
  21      $saved->setParameter(
  22        'rangeEnd',
  23        $this->readDateFromRequest($request, 'rangeEnd'));
  24  
  25      $saved->setParameter(
  26        'upcoming',
  27        $this->readBoolFromRequest($request, 'upcoming'));
  28  
  29      $saved->setParameter(
  30        'invitedPHIDs',
  31        $this->readUsersFromRequest($request, 'invited'));
  32  
  33      $saved->setParameter(
  34        'creatorPHIDs',
  35        $this->readUsersFromRequest($request, 'creators'));
  36  
  37      return $saved;
  38    }
  39  
  40    public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
  41      $query = id(new PhabricatorCalendarEventQuery());
  42  
  43      $min_range = null;
  44      $max_range = null;
  45  
  46      if ($saved->getParameter('rangeStart')) {
  47        $min_range = $saved->getParameter('rangeStart');
  48      }
  49  
  50      if ($saved->getParameter('rangeEnd')) {
  51        $max_range = $saved->getParameter('rangeEnd');
  52      }
  53  
  54      if ($saved->getParameter('upcoming')) {
  55        if ($min_range) {
  56          $min_range = max(time(), $min_range);
  57        } else {
  58          $min_range = time();
  59        }
  60      }
  61  
  62      if ($min_range || $max_range) {
  63        $query->withDateRange($min_range, $max_range);
  64      }
  65  
  66      $invited_phids = $saved->getParameter('invitedPHIDs');
  67      if ($invited_phids) {
  68        $query->withInvitedPHIDs($invited_phids);
  69      }
  70  
  71      $creator_phids = $saved->getParameter('creatorPHIDs');
  72      if ($creator_phids) {
  73        $query->withCreatorPHIDs($creator_phids);
  74      }
  75  
  76      return $query;
  77    }
  78  
  79    public function buildSearchForm(
  80      AphrontFormView $form,
  81      PhabricatorSavedQuery $saved) {
  82  
  83      $range_start = $saved->getParameter('rangeStart');
  84      $range_end = $saved->getParameter('rangeEnd');
  85      $upcoming = $saved->getParameter('upcoming');
  86  
  87      $invited_phids = $saved->getParameter('invitedPHIDs', array());
  88      $creator_phids = $saved->getParameter('creatorPHIDs', array());
  89  
  90      $all_phids = array_merge(
  91        $invited_phids,
  92        $creator_phids);
  93  
  94      if ($all_phids) {
  95        $handles = id(new PhabricatorHandleQuery())
  96          ->setViewer($this->requireViewer())
  97          ->withPHIDs($all_phids)
  98          ->execute();
  99      } else {
 100        $handles = array();
 101      }
 102  
 103      $invited_handles = array_select_keys($handles, $invited_phids);
 104      $creator_handles = array_select_keys($handles, $creator_phids);
 105  
 106      $form
 107        ->appendChild(
 108          id(new AphrontFormTokenizerControl())
 109            ->setDatasource(new PhabricatorPeopleDatasource())
 110            ->setName('creators')
 111            ->setLabel(pht('Created By'))
 112            ->setValue($creator_handles))
 113        ->appendChild(
 114          id(new AphrontFormTokenizerControl())
 115            ->setDatasource(new PhabricatorPeopleDatasource())
 116            ->setName('invited')
 117            ->setLabel(pht('Invited'))
 118            ->setValue($invited_handles))
 119        ->appendChild(
 120          id(new AphrontFormDateControl())
 121            ->setLabel(pht('Occurs After'))
 122            ->setUser($this->requireViewer())
 123            ->setName('rangeStart')
 124            ->setAllowNull(true)
 125            ->setValue($range_start))
 126        ->appendChild(
 127          id(new AphrontFormDateControl())
 128            ->setLabel(pht('Occurs Before'))
 129            ->setUser($this->requireViewer())
 130            ->setName('rangeEnd')
 131            ->setAllowNull(true)
 132            ->setValue($range_end))
 133        ->appendChild(
 134          id(new AphrontFormCheckboxControl())
 135            ->addCheckbox(
 136              'upcoming',
 137              1,
 138              pht('Show only upcoming events.'),
 139              $upcoming));
 140    }
 141  
 142    protected function getURI($path) {
 143      return '/calendar/event/'.$path;
 144    }
 145  
 146    public function getBuiltinQueryNames() {
 147      $names = array(
 148        'upcoming' => pht('Upcoming Events'),
 149        'all'      => pht('All Events'),
 150      );
 151  
 152      return $names;
 153    }
 154  
 155    public function buildSavedQueryFromBuiltin($query_key) {
 156      $query = $this->newSavedQuery();
 157      $query->setQueryKey($query_key);
 158  
 159      switch ($query_key) {
 160        case 'upcoming':
 161          return $query->setParameter('upcoming', true);
 162        case 'all':
 163          return $query;
 164      }
 165  
 166      return parent::buildSavedQueryFromBuiltin($query_key);
 167    }
 168  
 169    protected function getRequiredHandlePHIDsForResultList(
 170      array $objects,
 171      PhabricatorSavedQuery $query) {
 172      $phids = array();
 173      foreach ($objects as $event) {
 174        $phids[$event->getUserPHID()] = 1;
 175      }
 176      return array_keys($phids);
 177    }
 178  
 179    protected function renderResultList(
 180      array $events,
 181      PhabricatorSavedQuery $query,
 182      array $handles) {
 183      assert_instances_of($events, 'PhabricatorCalendarEvent');
 184  
 185      $viewer = $this->requireViewer();
 186  
 187      $list = new PHUIObjectItemListView();
 188      foreach ($events as $event) {
 189        if ($event->getUserPHID() == $viewer->getPHID()) {
 190          $href = $this->getApplicationURI('/event/edit/'.$event->getID().'/');
 191        } else {
 192          $from  = $event->getDateFrom();
 193          $month = phabricator_format_local_time($from, $viewer, 'm');
 194          $year  = phabricator_format_local_time($from, $viewer, 'Y');
 195          $uri   = new PhutilURI($this->getApplicationURI());
 196          $uri->setQueryParams(
 197            array(
 198              'month' => $month,
 199              'year'  => $year,
 200            ));
 201          $href = (string) $uri;
 202        }
 203        $from = phabricator_datetime($event->getDateFrom(), $viewer);
 204        $to   = phabricator_datetime($event->getDateTo(), $viewer);
 205        $creator_handle = $handles[$event->getUserPHID()];
 206  
 207        $color = ($event->getStatus() == PhabricatorCalendarEvent::STATUS_AWAY)
 208          ? 'red'
 209          : 'yellow';
 210  
 211        $item = id(new PHUIObjectItemView())
 212          ->setHeader($event->getTerseSummary($viewer))
 213          ->setHref($href)
 214          ->setBarColor($color)
 215          ->addByline(pht('Creator: %s', $creator_handle->renderLink()))
 216          ->addAttribute(pht('From %s to %s', $from, $to))
 217          ->addAttribute(id(new PhutilUTF8StringTruncator())
 218            ->setMaximumGlyphs(64)
 219            ->truncateString($event->getDescription()));
 220  
 221        $list->addItem($item);
 222      }
 223  
 224      return $list;
 225    }
 226  
 227  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1