コード例 #1
0
 /**
  * Executes the saved query.
  *
  * @param PhabricatorSavedQuery The saved query to operate on.
  * @return The result of the query.
  */
 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $original)
 {
     $saved = clone $original;
     $this->willUseSavedQuery($saved);
     $fields = $this->buildSearchFields();
     $viewer = $this->requireViewer();
     $map = array();
     foreach ($fields as $field) {
         $field->setViewer($viewer);
         $field->readValueFromSavedQuery($saved);
         $value = $field->getValueForQuery($field->getValue());
         $map[$field->getKey()] = $value;
     }
     $original->attachParameterMap($map);
     $query = $this->buildQueryFromParameters($map);
     $object = $this->newResultObject();
     if (!$object) {
         return $query;
     }
     $extensions = $this->getEngineExtensions();
     foreach ($extensions as $extension) {
         $extension->applyConstraintsToQuery($object, $query, $saved, $map);
     }
     $order = $saved->getParameter('order');
     $builtin = $query->getBuiltinOrderAliasMap();
     if (strlen($order) && isset($builtin[$order])) {
         $query->setOrder($order);
     } else {
         // If the order is invalid or not available, we choose the first
         // builtin order. This isn't always the default order for the query,
         // but is the first value in the "Order" dropdown, and makes the query
         // behavior more consistent with the UI. In queries where the two
         // orders differ, this order is the preferred order for humans.
         $query->setOrder(head_key($builtin));
     }
     return $query;
 }