[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/phrequent/query/ -> PhrequentSearchEngine.php (source)

   1  <?php
   2  
   3  final class PhrequentSearchEngine extends PhabricatorApplicationSearchEngine {
   4  
   5    public function getResultTypeDescription() {
   6      return pht('Phrequent Time');
   7    }
   8  
   9    public function getApplicationClassName() {
  10      return 'PhabricatorPhrequentApplication';
  11    }
  12  
  13    public function getPageSize(PhabricatorSavedQuery $saved) {
  14      return $saved->getParameter('limit', 1000);
  15    }
  16  
  17    public function buildSavedQueryFromRequest(AphrontRequest $request) {
  18      $saved = new PhabricatorSavedQuery();
  19  
  20      $saved->setParameter(
  21        'userPHIDs',
  22        $this->readUsersFromRequest($request, 'users'));
  23  
  24      $saved->setParameter('ended', $request->getStr('ended'));
  25  
  26      $saved->setParameter('order', $request->getStr('order'));
  27  
  28      return $saved;
  29    }
  30  
  31    public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
  32      $query = id(new PhrequentUserTimeQuery())
  33        ->needPreemptingEvents(true);
  34  
  35      $user_phids = $saved->getParameter('userPHIDs');
  36      if ($user_phids) {
  37        $query->withUserPHIDs($user_phids);
  38      }
  39  
  40      $ended = $saved->getParameter('ended');
  41      if ($ended != null) {
  42        $query->withEnded($ended);
  43      }
  44  
  45      $order = $saved->getParameter('order');
  46      if ($order != null) {
  47        $query->setOrder($order);
  48      }
  49  
  50      return $query;
  51    }
  52  
  53    public function buildSearchForm(
  54      AphrontFormView $form,
  55      PhabricatorSavedQuery $saved_query) {
  56  
  57      $user_phids = $saved_query->getParameter('userPHIDs', array());
  58      $ended = $saved_query->getParameter(
  59        'ended', PhrequentUserTimeQuery::ENDED_ALL);
  60      $order = $saved_query->getParameter(
  61        'order', PhrequentUserTimeQuery::ORDER_ENDED_DESC);
  62  
  63      $phids = array_merge($user_phids);
  64      $handles = id(new PhabricatorHandleQuery())
  65        ->setViewer($this->requireViewer())
  66        ->withPHIDs($phids)
  67        ->execute();
  68  
  69      $form
  70        ->appendChild(
  71          id(new AphrontFormTokenizerControl())
  72            ->setDatasource(new PhabricatorPeopleDatasource())
  73            ->setName('users')
  74            ->setLabel(pht('Users'))
  75            ->setValue($handles))
  76        ->appendChild(
  77          id(new AphrontFormSelectControl())
  78            ->setLabel(pht('Ended'))
  79            ->setName('ended')
  80            ->setValue($ended)
  81            ->setOptions(PhrequentUserTimeQuery::getEndedSearchOptions()))
  82        ->appendChild(
  83          id(new AphrontFormSelectControl())
  84            ->setLabel(pht('Order'))
  85            ->setName('order')
  86            ->setValue($order)
  87            ->setOptions(PhrequentUserTimeQuery::getOrderSearchOptions()));
  88    }
  89  
  90    protected function getURI($path) {
  91      return '/phrequent/'.$path;
  92    }
  93  
  94    public function getBuiltinQueryNames() {
  95      return array(
  96        'tracking' => pht('Currently Tracking'),
  97        'all' => pht('All Tracked'),
  98      );
  99    }
 100  
 101    public function buildSavedQueryFromBuiltin($query_key) {
 102      $query = $this->newSavedQuery();
 103      $query->setQueryKey($query_key);
 104  
 105      switch ($query_key) {
 106        case 'all':
 107          return $query
 108            ->setParameter('order', PhrequentUserTimeQuery::ORDER_ENDED_DESC);
 109        case 'tracking':
 110          return $query
 111            ->setParameter('ended', PhrequentUserTimeQuery::ENDED_NO)
 112            ->setParameter('order', PhrequentUserTimeQuery::ORDER_ENDED_DESC);
 113      }
 114  
 115      return parent::buildSavedQueryFromBuiltin($query_key);
 116    }
 117  
 118    protected function getRequiredHandlePHIDsForResultList(
 119      array $usertimes,
 120      PhabricatorSavedQuery $query) {
 121      return array_mergev(
 122        array(
 123          mpull($usertimes, 'getUserPHID'),
 124          mpull($usertimes, 'getObjectPHID'),
 125        ));
 126    }
 127  
 128    protected function renderResultList(
 129      array $usertimes,
 130      PhabricatorSavedQuery $query,
 131      array $handles) {
 132      assert_instances_of($usertimes, 'PhrequentUserTime');
 133      $viewer = $this->requireViewer();
 134  
 135      $view = id(new PHUIObjectItemListView())
 136        ->setUser($viewer);
 137  
 138      foreach ($usertimes as $usertime) {
 139        $item = new PHUIObjectItemView();
 140        if ($usertime->getObjectPHID() === null) {
 141          $item->setHeader($usertime->getNote());
 142        } else {
 143          $obj = $handles[$usertime->getObjectPHID()];
 144          $item->setHeader($obj->getLinkName());
 145          $item->setHref($obj->getURI());
 146        }
 147        $item->setObject($usertime);
 148  
 149        $item->addByline(
 150          pht(
 151            'Tracked: %s',
 152            $handles[$usertime->getUserPHID()]->renderLink()));
 153  
 154        $started_date = phabricator_date($usertime->getDateStarted(), $viewer);
 155        $item->addIcon('none', $started_date);
 156  
 157        $block = new PhrequentTimeBlock(array($usertime));
 158        $time_spent = $block->getTimeSpentOnObject(
 159          $usertime->getObjectPHID(),
 160          PhabricatorTime::getNow());
 161  
 162        $time_spent = $time_spent == 0 ? 'none' :
 163          phutil_format_relative_time_detailed($time_spent);
 164  
 165        if ($usertime->getDateEnded() !== null) {
 166          $item->addAttribute(
 167            pht(
 168              'Tracked %s',
 169              $time_spent));
 170          $item->addAttribute(
 171            pht(
 172              'Ended on %s',
 173              phabricator_datetime($usertime->getDateEnded(), $viewer)));
 174        } else {
 175          $item->addAttribute(
 176            pht(
 177              'Tracked %s so far',
 178              $time_spent));
 179          if ($usertime->getObjectPHID() !== null &&
 180              $usertime->getUserPHID() === $viewer->getPHID()) {
 181            $item->addAction(
 182              id(new PHUIListItemView())
 183                ->setIcon('fa-stop')
 184                ->addSigil('phrequent-stop-tracking')
 185                ->setWorkflow(true)
 186                ->setRenderNameAsTooltip(true)
 187                ->setName(pht('Stop'))
 188                ->setHref(
 189                  '/phrequent/track/stop/'.
 190                  $usertime->getObjectPHID().'/'));
 191          }
 192          $item->setBarColor('green');
 193        }
 194  
 195        $view->addItem($item);
 196      }
 197  
 198      return $view;
 199    }
 200  
 201  }


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