From 26127b9c5f7be06afd76f1bbf04c7d83ea42e175 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Tue, 13 Dec 2016 10:52:19 -0800 Subject: [PATCH] Allow Dashboards to set an icon Summary: Allows users set an icon (for reuse on upcoming home) for their dashboard based on 16 descriminating choices. Test Plan: Create a new dashboard, set new icon. Edit an existing dashboard, set icon. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Differential Revision: https://secure.phabricator.com/D17042 --- .../20161212.dashboards.01.icon.sql | 5 +++ src/__phutil_library_map__.php | 2 + .../PhabricatorDashboardEditController.php | 12 +++++ .../PhabricatorDashboardManageController.php | 2 +- .../PhabricatorDashboardTransactionEditor.php | 11 +++++ .../icon/PhabricatorDashboardIconSet.php | 45 +++++++++++++++++++ .../storage/PhabricatorDashboard.php | 3 ++ .../PhabricatorDashboardTransaction.php | 29 ++++++++++++ 8 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 resources/sql/autopatches/20161212.dashboards.01.icon.sql create mode 100644 src/applications/dashboard/icon/PhabricatorDashboardIconSet.php diff --git a/resources/sql/autopatches/20161212.dashboards.01.icon.sql b/resources/sql/autopatches/20161212.dashboards.01.icon.sql new file mode 100644 index 0000000000..e2783ab5bc --- /dev/null +++ b/resources/sql/autopatches/20161212.dashboards.01.icon.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_dashboard.dashboard + ADD icon VARCHAR(32) NOT NULL; + +UPDATE {$NAMESPACE}_dashboard.dashboard + SET icon = 'fa-dashboard'; diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index f064ab8255..ee278c21dd 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2426,6 +2426,7 @@ phutil_register_library_map(array( 'PhabricatorDashboardDashboardHasPanelEdgeType' => 'applications/dashboard/edge/PhabricatorDashboardDashboardHasPanelEdgeType.php', 'PhabricatorDashboardDashboardPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.php', 'PhabricatorDashboardEditController' => 'applications/dashboard/controller/PhabricatorDashboardEditController.php', + 'PhabricatorDashboardIconSet' => 'applications/dashboard/icon/PhabricatorDashboardIconSet.php', 'PhabricatorDashboardInstall' => 'applications/dashboard/storage/PhabricatorDashboardInstall.php', 'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/PhabricatorDashboardInstallController.php', 'PhabricatorDashboardLayoutConfig' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php', @@ -7364,6 +7365,7 @@ phutil_register_library_map(array( 'PhabricatorDashboardDashboardHasPanelEdgeType' => 'PhabricatorEdgeType', 'PhabricatorDashboardDashboardPHIDType' => 'PhabricatorPHIDType', 'PhabricatorDashboardEditController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardIconSet' => 'PhabricatorIconSet', 'PhabricatorDashboardInstall' => 'PhabricatorDashboardDAO', 'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController', 'PhabricatorDashboardLayoutConfig' => 'Phobject', diff --git a/src/applications/dashboard/controller/PhabricatorDashboardEditController.php b/src/applications/dashboard/controller/PhabricatorDashboardEditController.php index 8438d0442b..a167c91188 100644 --- a/src/applications/dashboard/controller/PhabricatorDashboardEditController.php +++ b/src/applications/dashboard/controller/PhabricatorDashboardEditController.php @@ -67,12 +67,14 @@ final class PhabricatorDashboardEditController } $v_name = $dashboard->getName(); + $v_icon = $dashboard->getIcon(); $v_layout_mode = $dashboard->getLayoutConfigObject()->getLayoutMode(); $e_name = true; $validation_exception = null; if ($request->isFormPost() && $request->getStr('edit')) { $v_name = $request->getStr('name'); + $v_icon = $request->getStr('icon'); $v_layout_mode = $request->getStr('layout_mode'); $v_view_policy = $request->getStr('viewPolicy'); $v_edit_policy = $request->getStr('editPolicy'); @@ -81,6 +83,7 @@ final class PhabricatorDashboardEditController $xactions = array(); $type_name = PhabricatorDashboardTransaction::TYPE_NAME; + $type_icon = PhabricatorDashboardTransaction::TYPE_ICON; $type_layout_mode = PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE; $type_view_policy = PhabricatorTransactions::TYPE_VIEW_POLICY; $type_edit_policy = PhabricatorTransactions::TYPE_EDIT_POLICY; @@ -91,6 +94,9 @@ final class PhabricatorDashboardEditController $xactions[] = id(new PhabricatorDashboardTransaction()) ->setTransactionType($type_layout_mode) ->setNewValue($v_layout_mode); + $xactions[] = id(new PhabricatorDashboardTransaction()) + ->setTransactionType($type_icon) + ->setNewValue($v_icon); $xactions[] = id(new PhabricatorDashboardTransaction()) ->setTransactionType($type_view_policy) ->setNewValue($v_view_policy); @@ -146,6 +152,12 @@ final class PhabricatorDashboardEditController ->setName('layout_mode') ->setValue($v_layout_mode) ->setOptions($layout_mode_options)) + ->appendChild( + id(new PHUIFormIconSetControl()) + ->setLabel(pht('Icon')) + ->setName('icon') + ->setIconSet(new PhabricatorDashboardIconSet()) + ->setValue($v_icon)) ->appendChild( id(new AphrontFormPolicyControl()) ->setName('viewPolicy') diff --git a/src/applications/dashboard/controller/PhabricatorDashboardManageController.php b/src/applications/dashboard/controller/PhabricatorDashboardManageController.php index 4e31b2d2ae..9724db21f7 100644 --- a/src/applications/dashboard/controller/PhabricatorDashboardManageController.php +++ b/src/applications/dashboard/controller/PhabricatorDashboardManageController.php @@ -109,7 +109,7 @@ final class PhabricatorDashboardManageController ->setHeader($dashboard->getName()) ->setPolicyObject($dashboard) ->setStatus($status_icon, $status_color, $status_name) - ->setHeaderIcon('fa-dashboard') + ->setHeaderIcon($dashboard->getIcon()) ->addActionLink($button); } diff --git a/src/applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php b/src/applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php index 6cb7810d0b..792f6f9aa5 100644 --- a/src/applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php +++ b/src/applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php @@ -51,6 +51,7 @@ final class PhabricatorDashboardTransactionEditor $types[] = PhabricatorTransactions::TYPE_EDGE; $types[] = PhabricatorDashboardTransaction::TYPE_NAME; + $types[] = PhabricatorDashboardTransaction::TYPE_ICON; $types[] = PhabricatorDashboardTransaction::TYPE_STATUS; $types[] = PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE; @@ -66,6 +67,11 @@ final class PhabricatorDashboardTransactionEditor return null; } return $object->getName(); + case PhabricatorDashboardTransaction::TYPE_ICON: + if ($this->getIsNewObject()) { + return null; + } + return $object->getIcon(); case PhabricatorDashboardTransaction::TYPE_STATUS: if ($this->getIsNewObject()) { return null; @@ -87,6 +93,7 @@ final class PhabricatorDashboardTransactionEditor PhabricatorApplicationTransaction $xaction) { switch ($xaction->getTransactionType()) { case PhabricatorDashboardTransaction::TYPE_NAME: + case PhabricatorDashboardTransaction::TYPE_ICON: case PhabricatorDashboardTransaction::TYPE_STATUS: case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE: return $xaction->getNewValue(); @@ -101,6 +108,9 @@ final class PhabricatorDashboardTransactionEditor case PhabricatorDashboardTransaction::TYPE_NAME: $object->setName($xaction->getNewValue()); return; + case PhabricatorDashboardTransaction::TYPE_ICON: + $object->setIcon($xaction->getNewValue()); + return; case PhabricatorDashboardTransaction::TYPE_STATUS: $object->setStatus($xaction->getNewValue()); return; @@ -130,6 +140,7 @@ final class PhabricatorDashboardTransactionEditor switch ($xaction->getTransactionType()) { case PhabricatorDashboardTransaction::TYPE_NAME: + case PhabricatorDashboardTransaction::TYPE_ICON: case PhabricatorDashboardTransaction::TYPE_STATUS: case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE: return; diff --git a/src/applications/dashboard/icon/PhabricatorDashboardIconSet.php b/src/applications/dashboard/icon/PhabricatorDashboardIconSet.php new file mode 100644 index 0000000000..1bd12609b7 --- /dev/null +++ b/src/applications/dashboard/icon/PhabricatorDashboardIconSet.php @@ -0,0 +1,45 @@ + pht('Home'), + 'fa-th-large' => pht('Blocks'), + 'fa-columns' => pht('Columns'), + 'fa-bookmark' => pht('Page Saver'), + + 'fa-book' => pht('Knowledge'), + 'fa-bomb' => pht('Kaboom'), + 'fa-pie-chart' => pht('Apple Blueberry'), + 'fa-bar-chart' => pht('Serious Business'), + + 'fa-bell' => pht('Ding Ding'), + 'fa-credit-card' => pht('Plastic Debt'), + 'fa-code' => pht('PHP is Life'), + 'fa-sticky-note' => pht('To Self'), + + 'fa-newspaper-o' => pht('Stay Woke'), + 'fa-server' => pht('Metallica'), + 'fa-hashtag' => pht('Corned Beef'), + 'fa-group' => pht('Triplets'), + ); + + $icons = array(); + foreach ($map as $key => $label) { + $icons[] = id(new PhabricatorIconSetIcon()) + ->setKey($key) + ->setLabel($label); + } + + return $icons; + } + +} diff --git a/src/applications/dashboard/storage/PhabricatorDashboard.php b/src/applications/dashboard/storage/PhabricatorDashboard.php index fab431764a..abba22498f 100644 --- a/src/applications/dashboard/storage/PhabricatorDashboard.php +++ b/src/applications/dashboard/storage/PhabricatorDashboard.php @@ -16,6 +16,7 @@ final class PhabricatorDashboard extends PhabricatorDashboardDAO protected $viewPolicy; protected $editPolicy; protected $status; + protected $icon; protected $layoutConfig = array(); const STATUS_ACTIVE = 'active'; @@ -29,6 +30,7 @@ final class PhabricatorDashboard extends PhabricatorDashboardDAO public static function initializeNewDashboard(PhabricatorUser $actor) { return id(new PhabricatorDashboard()) ->setName('') + ->setIcon('fa-dashboard') ->setViewPolicy(PhabricatorPolicies::POLICY_USER) ->setEditPolicy($actor->getPHID()) ->setStatus(self::STATUS_ACTIVE) @@ -63,6 +65,7 @@ final class PhabricatorDashboard extends PhabricatorDashboardDAO self::CONFIG_COLUMN_SCHEMA => array( 'name' => 'text255', 'status' => 'text32', + 'icon' => 'text32', 'authorPHID' => 'phid', ), ) + parent::getConfiguration(); diff --git a/src/applications/dashboard/storage/PhabricatorDashboardTransaction.php b/src/applications/dashboard/storage/PhabricatorDashboardTransaction.php index 70b5963f03..1511078f11 100644 --- a/src/applications/dashboard/storage/PhabricatorDashboardTransaction.php +++ b/src/applications/dashboard/storage/PhabricatorDashboardTransaction.php @@ -4,6 +4,7 @@ final class PhabricatorDashboardTransaction extends PhabricatorApplicationTransaction { const TYPE_NAME = 'dashboard:name'; + const TYPE_ICON = 'dashboard:icon'; const TYPE_STATUS = 'dashboard:status'; const TYPE_LAYOUT_MODE = 'dashboard:layoutmode'; @@ -39,6 +40,19 @@ final class PhabricatorDashboardTransaction $new); } break; + case self::TYPE_ICON: + if (!strlen($old)) { + return pht( + '%s set the dashboard icon.', + $author_link); + } else { + return pht( + '%s changed this dashboard icon from "%s" to "%s".', + $author_link, + $old, + $new); + } + break; case self::TYPE_STATUS: if ($new == PhabricatorDashboard::STATUS_ACTIVE) { return pht( @@ -82,6 +96,21 @@ final class PhabricatorDashboardTransaction $new); } break; + case self::TYPE_ICON: + if (!strlen($old)) { + return pht( + '%s set dashboard icon for %s.', + $author_link, + $object_link); + } else { + return pht( + '%s set the dashboard icon on %s from "%s" to "%s".', + $author_link, + $object_link, + $old, + $new); + } + break; case self::TYPE_STATUS: if ($new == PhabricatorDashboard::STATUS_ACTIVE) { return pht(