Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15523375
D13683.id33080.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
12 KB
Referenced Files
None
Subscribers
None
D13683.id33080.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D13683: Add ability to archive a Dashboard
Attached
Detach File
Event Timeline
Log In to Comment