Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/applications/flag/controller/PhabricatorFlagListController.php b/src/applications/flag/controller/PhabricatorFlagListController.php
index 01e0e5c78d..ee18e5b2b2 100644
--- a/src/applications/flag/controller/PhabricatorFlagListController.php
+++ b/src/applications/flag/controller/PhabricatorFlagListController.php
@@ -1,80 +1,130 @@
<?php
final class PhabricatorFlagListController extends PhabricatorFlagController {
public function processRequest() {
$request = $this->getRequest();
$user = $request->getUser();
+ $flag_order = $request->getStr('o', 'n');
$nav = new AphrontSideNavFilterView();
$nav->setBaseURI(new PhutilURI('/flag/view/'));
$nav->addLabel(pht('Flags'));
$nav->addFilter('all', pht('Your Flags'));
$nav->selectFilter('all', 'all');
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addCrumb(id(new PhabricatorCrumbView)
->setName(pht('Flags'))
->setHref($request->getRequestURI()));
$nav->setCrumbs($crumbs);
$filter_form = new AphrontFormView();
$filter_form->setUser($user);
$filter_form->appendChild(
id(new AphrontFormToggleButtonsControl())
->setName('o')
->setLabel(pht('Sort Order'))
->setBaseURI($request->getRequestURI(), 'o')
- ->setValue($request->getStr('o', 'n'))
+ ->setValue($flag_order)
->setButtons(
array(
'n' => pht('Date'),
'c' => pht('Color'),
'o' => pht('Object Type'),
- 'r' => pht('Reason'),
)));
$filter = new AphrontListFilterView();
$filter->appendChild($filter_form);
$nav->appendChild($filter);
$query = new PhabricatorFlagQuery();
$query->withOwnerPHIDs(array($user->getPHID()));
$query->setViewer($user);
$query->needHandles(true);
- switch ($request->getStr('o', 'n')) {
+ switch ($flag_order) {
+ // 'r'
+ // 'a'
case 'n':
$order = PhabricatorFlagQuery::ORDER_ID;
break;
case 'c':
$order = PhabricatorFlagQuery::ORDER_COLOR;
break;
case 'o':
$order = PhabricatorFlagQuery::ORDER_OBJECT;
break;
- case 'r':
- $order = PhabricatorFlagQuery::ORDER_REASON;
- break;
default:
throw new Exception("Unknown order!");
}
$query->withOrder($order);
$flags = $query->execute();
- $view = new PhabricatorFlagListView();
- $view->setFlags($flags);
- $view->setUser($user);
+ $views = array();
+ if ($flag_order == 'n') {
+ $view = new PhabricatorFlagListView();
+ $view->setFlags($flags);
+ $view->setUser($user);
+ $view->setFlush(true);
+ $views[] = array(
+ 'view' => $view,
+ );
+ } else {
+ switch ($flag_order) {
+ case 'c':
+ $flags_tmp = mgroup($flags, 'getColor');
+ $flags = array();
+ foreach ($flags_tmp as $color => $flag_group) {
+ $title = pht('%s Flags',
+ PhabricatorFlagColor::getColorName($color));
+ $flags[$title] = $flag_group;
+ }
+ break;
+ case 'o':
+ $flags_tmp = mgroup($flags, 'getType');
+ $flags = array();
+ foreach ($flags_tmp as $color => $flag_group) {
+ // Appending an 's' to fake plurals
+ $title = head($flag_group)->getHandle()->getTypeName() . 's';
+ $flags[$title] = $flag_group;
+ }
+ break;
+ default:
+ throw new Exception("Unknown order!");
+ }
+
+ foreach ($flags as $group_title => $flag_group) {
+ $view = new PhabricatorFlagListView();
+ $view->setFlags($flag_group);
+ $view->setUser($user);
+ $view->setFlush(true);
+ $views[] = array(
+ 'title' => pht('%s (%d)', $group_title, count($flag_group)),
+ 'view' => $view,
+ );
+ }
+ }
- $nav->appendChild($view);
+ foreach ($views as $view) {
+ $panel = new AphrontPanelView();
+ $panel->setNoBackground();
+
+ $title = idx($view, 'title');
+ if ($title) {
+ $panel->setHeader($title);
+ }
+ $panel->appendChild($view['view']);
+ $nav->appendChild($panel);
+ }
return $this->buildApplicationPage(
$nav,
array(
'title' => pht('Flags'),
'dust' => true,
));
}
}
diff --git a/src/applications/flag/query/PhabricatorFlagQuery.php b/src/applications/flag/query/PhabricatorFlagQuery.php
index 20fb19e416..1edeedc0c6 100644
--- a/src/applications/flag/query/PhabricatorFlagQuery.php
+++ b/src/applications/flag/query/PhabricatorFlagQuery.php
@@ -1,194 +1,194 @@
<?php
final class PhabricatorFlagQuery {
private $ownerPHIDs;
private $types;
private $objectPHIDs;
private $limit;
private $offset;
private $needHandles;
private $needObjects;
private $viewer;
private $order = 'order-id';
const ORDER_ID = 'order-id';
const ORDER_COLOR = 'order-color';
const ORDER_OBJECT = 'order-object';
const ORDER_REASON = 'order-reason';
public function setViewer($viewer) {
$this->viewer = $viewer;
return $this;
}
public function withOwnerPHIDs(array $owner_phids) {
$this->ownerPHIDs = $owner_phids;
return $this;
}
public function withTypes(array $types) {
$this->types = $types;
return $this;
}
public function withObjectPHIDs(array $object_phids) {
$this->objectPHIDs = $object_phids;
return $this;
}
public function withOrder($order) {
$this->order = $order;
return $this;
}
public function needHandles($need) {
$this->needHandles = $need;
return $this;
}
public function needObjects($need) {
$this->needObjects = $need;
return $this;
}
public function setLimit($limit) {
$this->limit = $limit;
return $this;
}
public function setOffset($offset) {
$this->offset = $offset;
return $this;
}
public static function loadUserFlag(PhabricatorUser $user, $object_phid) {
// Specifying the type in the query allows us to use a key.
return id(new PhabricatorFlag())->loadOneWhere(
'ownerPHID = %s AND type = %s AND objectPHID = %s',
$user->getPHID(),
phid_get_type($object_phid),
$object_phid);
}
public function execute() {
$table = new PhabricatorFlag();
$conn_r = $table->establishConnection('r');
$where = $this->buildWhereClause($conn_r);
$limit = $this->buildLimitClause($conn_r);
$order = $this->buildOrderClause($conn_r);
$data = queryfx_all(
$conn_r,
'SELECT * FROM %T flag %Q %Q %Q',
$table->getTableName(),
$where,
$order,
$limit);
$flags = $table->loadAllFromArray($data);
if ($this->needHandles || $this->needObjects) {
$phids = ipull($data, 'objectPHID');
$query = new PhabricatorObjectHandleData($phids);
$query->setViewer($this->viewer);
if ($this->needHandles) {
$handles = $query->loadHandles();
foreach ($flags as $flag) {
$handle = idx($handles, $flag->getObjectPHID());
if ($handle) {
$flag->attachHandle($handle);
}
}
}
if ($this->needObjects) {
$objects = $query->loadObjects();
foreach ($flags as $flag) {
$object = idx($objects, $flag->getObjectPHID());
if ($object) {
$flag->attachObject($object);
}
}
}
}
return $flags;
}
private function buildWhereClause($conn_r) {
$where = array();
if ($this->ownerPHIDs) {
$where[] = qsprintf(
$conn_r,
'flag.ownerPHID IN (%Ls)',
$this->ownerPHIDs);
}
if ($this->types) {
$where[] = qsprintf(
$conn_r,
'flag.type IN (%Ls)',
$this->types);
}
if ($this->objectPHIDs) {
$where[] = qsprintf(
$conn_r,
'flag.objectPHID IN (%Ls)',
$this->objectPHIDs);
}
if ($where) {
return 'WHERE ('.implode(') AND (', $where).')';
} else {
return '';
}
}
private function buildOrderClause($conn_r) {
return qsprintf($conn_r,
'ORDER BY %Q',
$this->getOrderColumn($conn_r));
}
private function getOrderColumn($conn_r) {
switch ($this->order) {
case self::ORDER_ID:
return 'id DESC';
break;
case self::ORDER_COLOR:
- return 'color DESC';
+ return 'color ASC';
break;
case self::ORDER_OBJECT:
- return 'type ASC';
+ return 'type DESC';
break;
case self::ORDER_REASON:
return 'reasonPHID DESC';
break;
default:
throw new Exception("Unknown order {$this->order}!");
break;
}
}
private function buildLimitClause($conn_r) {
if ($this->limit && $this->offset) {
return qsprintf($conn_r, 'LIMIT %d, %d', $this->offset, $this->limit);
} else if ($this->limit) {
return qsprintf($conn_r, 'LIMIT %d', $this->limit);
} else if ($this->offset) {
return qsprintf($conn_r, 'LIMIT %d, %d', $this->offset, PHP_INT_MAX);
} else {
return '';
}
}
}

File Metadata

Mime Type
text/x-diff
Expires
Thu, Aug 14, 9:38 PM (2 d, 18 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
202338
Default Alt Text
(9 KB)

Event Timeline