Page MenuHomePhabricator

D13683.id33080.diff
No OneTemporary

D13683.id33080.diff

diff --git a/resources/sql/autopatches/20150722.dashboard.1.sql b/resources/sql/autopatches/20150722.dashboard.1.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20150722.dashboard.1.sql
@@ -0,0 +1,2 @@
+ALTER TABLE {$NAMESPACE}_dashboard.dashboard
+ ADD status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT};
diff --git a/resources/sql/autopatches/20150722.dashboard.2.sql b/resources/sql/autopatches/20150722.dashboard.2.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20150722.dashboard.2.sql
@@ -0,0 +1,2 @@
+UPDATE {$NAMESPACE}_dashboard.dashboard
+ SET status = 'open';
diff --git a/src/applications/dashboard/controller/PhabricatorDashboardEditController.php b/src/applications/dashboard/controller/PhabricatorDashboardEditController.php
--- a/src/applications/dashboard/controller/PhabricatorDashboardEditController.php
+++ b/src/applications/dashboard/controller/PhabricatorDashboardEditController.php
@@ -67,6 +67,7 @@
}
$v_name = $dashboard->getName();
+ $v_stat = $dashboard->getStatus();
$v_layout_mode = $dashboard->getLayoutConfigObject()->getLayoutMode();
$e_name = true;
@@ -77,11 +78,13 @@
$v_view_policy = $request->getStr('viewPolicy');
$v_edit_policy = $request->getStr('editPolicy');
$v_projects = $request->getArr('projects');
+ $v_stat = $request->getStr('status');
$xactions = array();
$type_name = PhabricatorDashboardTransaction::TYPE_NAME;
$type_layout_mode = PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE;
+ $type_stat = PhabricatorDashboardTransaction::TYPE_STATUS;
$type_view_policy = PhabricatorTransactions::TYPE_VIEW_POLICY;
$type_edit_policy = PhabricatorTransactions::TYPE_EDIT_POLICY;
@@ -97,6 +100,9 @@
$xactions[] = id(new PhabricatorDashboardTransaction())
->setTransactionType($type_edit_policy)
->setNewValue($v_edit_policy);
+ $xactions[] = id(new PhabricatorDashboardTransaction())
+ ->setTransactionType($type_stat)
+ ->setNewValue($v_stat);
$proj_edge_type = PhabricatorProjectObjectHasProjectEdgeType::EDGECONST;
$xactions[] = id(new PhabricatorDashboardTransaction())
@@ -157,7 +163,13 @@
->setLabel(pht('Layout Mode'))
->setName('layout_mode')
->setValue($v_layout_mode)
- ->setOptions($layout_mode_options));
+ ->setOptions($layout_mode_options))
+ ->appendChild(
+ id(new AphrontFormSelectControl())
+ ->setLabel(pht('Status'))
+ ->setName('status')
+ ->setValue($v_stat)
+ ->setOptions($dashboard->getStatusNameMap()));
$form->appendControl(
id(new AphrontFormTokenizerControl())
diff --git a/src/applications/dashboard/controller/PhabricatorDashboardManageController.php b/src/applications/dashboard/controller/PhabricatorDashboardManageController.php
--- a/src/applications/dashboard/controller/PhabricatorDashboardManageController.php
+++ b/src/applications/dashboard/controller/PhabricatorDashboardManageController.php
@@ -81,10 +81,23 @@
private function buildHeaderView(PhabricatorDashboard $dashboard) {
$viewer = $this->getRequest()->getUser();
+ if ($dashboard->isClosed()) {
+ $status_icon = 'fa-ban';
+ $status_color = 'dark';
+ } else {
+ $status_icon = 'fa-check';
+ $status_color = 'bluegrey';
+ }
+
+ $status_name = idx(
+ PhabricatorDashboard::getStatusNameMap(),
+ $dashboard->getStatus());
+
return id(new PHUIHeaderView())
->setUser($viewer)
->setHeader($dashboard->getName())
- ->setPolicyObject($dashboard);
+ ->setPolicyObject($dashboard)
+ ->setStatus($status_icon, $status_color, $status_name);
}
private function buildActionView(PhabricatorDashboard $dashboard) {
diff --git a/src/applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php b/src/applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php
--- a/src/applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php
+++ b/src/applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php
@@ -51,6 +51,7 @@
$types[] = PhabricatorTransactions::TYPE_EDGE;
$types[] = PhabricatorDashboardTransaction::TYPE_NAME;
+ $types[] = PhabricatorDashboardTransaction::TYPE_STATUS;
$types[] = PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE;
return $types;
@@ -65,6 +66,11 @@
return null;
}
return $object->getName();
+ case PhabricatorDashboardTransaction::TYPE_STATUS:
+ if ($this->getIsNewObject()) {
+ return PhabricatorDashboard::STATUS_OPEN;
+ }
+ return $object->getStatus();
case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
if ($this->getIsNewObject()) {
return null;
@@ -81,6 +87,7 @@
PhabricatorApplicationTransaction $xaction) {
switch ($xaction->getTransactionType()) {
case PhabricatorDashboardTransaction::TYPE_NAME:
+ case PhabricatorDashboardTransaction::TYPE_STATUS:
case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
return $xaction->getNewValue();
}
@@ -94,6 +101,9 @@
case PhabricatorDashboardTransaction::TYPE_NAME:
$object->setName($xaction->getNewValue());
return;
+ case PhabricatorDashboardTransaction::TYPE_STATUS:
+ $object->setStatus($xaction->getNewValue());
+ return;
case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
$old_layout = $object->getLayoutConfigObject();
$new_layout = clone $old_layout;
@@ -120,6 +130,7 @@
switch ($xaction->getTransactionType()) {
case PhabricatorDashboardTransaction::TYPE_NAME:
+ case PhabricatorDashboardTransaction::TYPE_STATUS:
case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
return;
}
diff --git a/src/applications/dashboard/query/PhabricatorDashboardQuery.php b/src/applications/dashboard/query/PhabricatorDashboardQuery.php
--- a/src/applications/dashboard/query/PhabricatorDashboardQuery.php
+++ b/src/applications/dashboard/query/PhabricatorDashboardQuery.php
@@ -5,6 +5,7 @@
private $ids;
private $phids;
+ private $statuses;
private $needPanels;
private $needProjects;
@@ -19,6 +20,11 @@
return $this;
}
+ public function withStatuses(array $statuses) {
+ $this->statuses = $statuses;
+ return $this;
+ }
+
public function needPanels($need_panels) {
$this->needPanels = $need_panels;
return $this;
@@ -108,6 +114,13 @@
$this->phids);
}
+ if ($this->statuses !== null) {
+ $where[] = qsprintf(
+ $conn,
+ 'status IN (%Ls)',
+ $this->statuses);
+ }
+
return $where;
}
diff --git a/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php b/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php
--- a/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php
+++ b/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php
@@ -17,7 +17,14 @@
}
protected function buildCustomSearchFields() {
- return array();
+ return array(
+ id(new PhabricatorSearchCheckboxesField())
+ ->setKey('statuses')
+ ->setLabel(pht('Status'))
+ ->setOptions(
+ id(new PhabricatorDashboard())
+ ->getStatusNameMap()),
+ );
}
protected function getURI($path) {
@@ -26,18 +33,24 @@
protected function getBuiltinQueryNames() {
return array(
+ 'open' => pht('Active Dashboards'),
'all' => pht('All Dashboards'),
);
}
public function buildSavedQueryFromBuiltin($query_key) {
-
$query = $this->newSavedQuery();
$query->setQueryKey($query_key);
switch ($query_key) {
case 'all':
return $query;
+ case 'open':
+ return $query->setParameter(
+ 'statuses',
+ array(
+ PhabricatorBadgesBadge::STATUS_OPEN,
+ ));
}
return parent::buildSavedQueryFromBuiltin($query_key);
@@ -45,6 +58,11 @@
protected function buildQueryFromParameters(array $map) {
$query = $this->newQuery();
+
+ if ($map['statuses']) {
+ $query->withStatuses($map['statuses']);
+ }
+
return $query;
}
@@ -124,6 +142,24 @@
->setSlim(true)
->setHandles($project_handles));
+ if ($dashboard->isClosed()) {
+ $item->setDisabled(true);
+ }
+
+ $href_view = $this->getApplicationURI("view/{$id}/");
+ $item->addAction(
+ id(new PHUIListItemView())
+ ->setName(pht('Manage'))
+ ->setIcon('fa-th')
+ ->setHref($href_view));
+
+ $href_edit = $this->getApplicationURI("edit/{$id}/");
+ $item->addAction(
+ id(new PHUIListItemView())
+ ->setName(pht('Edit'))
+ ->setIcon('fa-pencil')
+ ->setHref($href_edit));
+
$list->addItem($item);
}
diff --git a/src/applications/dashboard/storage/PhabricatorDashboard.php b/src/applications/dashboard/storage/PhabricatorDashboard.php
--- a/src/applications/dashboard/storage/PhabricatorDashboard.php
+++ b/src/applications/dashboard/storage/PhabricatorDashboard.php
@@ -14,8 +14,12 @@
protected $name;
protected $viewPolicy;
protected $editPolicy;
+ protected $status;
protected $layoutConfig = array();
+ const STATUS_OPEN = 'open';
+ const STATUS_CLOSED = 'closed';
+
private $panelPHIDs = self::ATTACHABLE;
private $panels = self::ATTACHABLE;
private $edgeProjectPHIDs = self::ATTACHABLE;
@@ -30,6 +34,13 @@
->attachPanelPHIDs(array());
}
+ public static function getStatusNameMap() {
+ return array(
+ self::STATUS_OPEN => pht('Active'),
+ self::STATUS_CLOSED => pht('Archived'),
+ );
+ }
+
public static function copyDashboard(
PhabricatorDashboard $dst,
PhabricatorDashboard $src) {
@@ -48,6 +59,7 @@
),
self::CONFIG_COLUMN_SCHEMA => array(
'name' => 'text255',
+ 'status' => 'text32',
),
) + parent::getConfiguration();
}
@@ -96,6 +108,10 @@
return $this->assertAttached($this->panels);
}
+ public function isClosed() {
+ return ($this->getStatus() == self::STATUS_CLOSED);
+ }
+
/* -( PhabricatorApplicationTransactionInterface )------------------------- */
diff --git a/src/applications/dashboard/storage/PhabricatorDashboardTransaction.php b/src/applications/dashboard/storage/PhabricatorDashboardTransaction.php
--- a/src/applications/dashboard/storage/PhabricatorDashboardTransaction.php
+++ b/src/applications/dashboard/storage/PhabricatorDashboardTransaction.php
@@ -4,6 +4,7 @@
extends PhabricatorApplicationTransaction {
const TYPE_NAME = 'dashboard:name';
+ const TYPE_STATUS = 'dashboard:status';
const TYPE_LAYOUT_MODE = 'dashboard:layoutmode';
public function getApplicationName() {
@@ -37,6 +38,18 @@
$old,
$new);
}
+ break;
+ case self::TYPE_STATUS:
+ if ($new == PhabricatorDashboard::STATUS_OPEN) {
+ return pht(
+ '%s activated this dashboard',
+ $author_link);
+ } else {
+ return pht(
+ '%s archived this dashboard',
+ $author_link);
+ }
+ break;
}
return parent::getTitle();
@@ -68,6 +81,20 @@
$old,
$new);
}
+ break;
+ case self::TYPE_STATUS:
+ if ($new == PhabricatorDashboard::STATUS_OPEN) {
+ return pht(
+ '%s activated dashboard %s.',
+ $author_link,
+ $object_link);
+ } else {
+ return pht(
+ '%s archived dashboard %s.',
+ $author_link,
+ $object_link);
+ }
+ break;
}
return parent::getTitleForFeed();
@@ -83,11 +110,39 @@
return PhabricatorTransactions::COLOR_GREEN;
}
break;
+ case self::TYPE_STATUS:
+ if ($new == PhabricatorDashboard::STATUS_OPEN) {
+ return PhabricatorTransactions::COLOR_GREEN;
+ } else {
+ return PhabricatorTransactions::COLOR_INDIGO;
+ }
+ break;
}
return parent::getColor();
}
+ public function getIcon() {
+ $new = $this->getNewValue();
+
+ switch ($this->getTransactionType()) {
+ case self::TYPE_NAME:
+ return 'fa-pencil';
+ break;
+ case self::TYPE_STATUS:
+ if ($new == PhabricatorDashboard::STATUS_OPEN) {
+ return 'fa-check';
+ } else {
+ return 'fa-ban';
+ }
+ break;
+ case self::TYPE_LAYOUT_MODE:
+ return 'fa-columns';
+ break;
+ }
+ return parent::getIcon();
+ }
+
public function shouldHide() {
$old = $this->getOldValue();
$new = $this->getNewValue();

File Metadata

Mime Type
text/plain
Expires
Tue, Apr 22, 1:01 AM (4 d, 5 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7710002
Default Alt Text
D13683.id33080.diff (12 KB)

Event Timeline