mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-18 11:30:55 +01:00
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
This commit is contained in:
parent
c03a412d5c
commit
26127b9c5f
8 changed files with 108 additions and 1 deletions
|
@ -0,0 +1,5 @@
|
||||||
|
ALTER TABLE {$NAMESPACE}_dashboard.dashboard
|
||||||
|
ADD icon VARCHAR(32) NOT NULL;
|
||||||
|
|
||||||
|
UPDATE {$NAMESPACE}_dashboard.dashboard
|
||||||
|
SET icon = 'fa-dashboard';
|
|
@ -2426,6 +2426,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorDashboardDashboardHasPanelEdgeType' => 'applications/dashboard/edge/PhabricatorDashboardDashboardHasPanelEdgeType.php',
|
'PhabricatorDashboardDashboardHasPanelEdgeType' => 'applications/dashboard/edge/PhabricatorDashboardDashboardHasPanelEdgeType.php',
|
||||||
'PhabricatorDashboardDashboardPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.php',
|
'PhabricatorDashboardDashboardPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.php',
|
||||||
'PhabricatorDashboardEditController' => 'applications/dashboard/controller/PhabricatorDashboardEditController.php',
|
'PhabricatorDashboardEditController' => 'applications/dashboard/controller/PhabricatorDashboardEditController.php',
|
||||||
|
'PhabricatorDashboardIconSet' => 'applications/dashboard/icon/PhabricatorDashboardIconSet.php',
|
||||||
'PhabricatorDashboardInstall' => 'applications/dashboard/storage/PhabricatorDashboardInstall.php',
|
'PhabricatorDashboardInstall' => 'applications/dashboard/storage/PhabricatorDashboardInstall.php',
|
||||||
'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/PhabricatorDashboardInstallController.php',
|
'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/PhabricatorDashboardInstallController.php',
|
||||||
'PhabricatorDashboardLayoutConfig' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php',
|
'PhabricatorDashboardLayoutConfig' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php',
|
||||||
|
@ -7364,6 +7365,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorDashboardDashboardHasPanelEdgeType' => 'PhabricatorEdgeType',
|
'PhabricatorDashboardDashboardHasPanelEdgeType' => 'PhabricatorEdgeType',
|
||||||
'PhabricatorDashboardDashboardPHIDType' => 'PhabricatorPHIDType',
|
'PhabricatorDashboardDashboardPHIDType' => 'PhabricatorPHIDType',
|
||||||
'PhabricatorDashboardEditController' => 'PhabricatorDashboardController',
|
'PhabricatorDashboardEditController' => 'PhabricatorDashboardController',
|
||||||
|
'PhabricatorDashboardIconSet' => 'PhabricatorIconSet',
|
||||||
'PhabricatorDashboardInstall' => 'PhabricatorDashboardDAO',
|
'PhabricatorDashboardInstall' => 'PhabricatorDashboardDAO',
|
||||||
'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController',
|
'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController',
|
||||||
'PhabricatorDashboardLayoutConfig' => 'Phobject',
|
'PhabricatorDashboardLayoutConfig' => 'Phobject',
|
||||||
|
|
|
@ -67,12 +67,14 @@ final class PhabricatorDashboardEditController
|
||||||
}
|
}
|
||||||
|
|
||||||
$v_name = $dashboard->getName();
|
$v_name = $dashboard->getName();
|
||||||
|
$v_icon = $dashboard->getIcon();
|
||||||
$v_layout_mode = $dashboard->getLayoutConfigObject()->getLayoutMode();
|
$v_layout_mode = $dashboard->getLayoutConfigObject()->getLayoutMode();
|
||||||
$e_name = true;
|
$e_name = true;
|
||||||
|
|
||||||
$validation_exception = null;
|
$validation_exception = null;
|
||||||
if ($request->isFormPost() && $request->getStr('edit')) {
|
if ($request->isFormPost() && $request->getStr('edit')) {
|
||||||
$v_name = $request->getStr('name');
|
$v_name = $request->getStr('name');
|
||||||
|
$v_icon = $request->getStr('icon');
|
||||||
$v_layout_mode = $request->getStr('layout_mode');
|
$v_layout_mode = $request->getStr('layout_mode');
|
||||||
$v_view_policy = $request->getStr('viewPolicy');
|
$v_view_policy = $request->getStr('viewPolicy');
|
||||||
$v_edit_policy = $request->getStr('editPolicy');
|
$v_edit_policy = $request->getStr('editPolicy');
|
||||||
|
@ -81,6 +83,7 @@ final class PhabricatorDashboardEditController
|
||||||
$xactions = array();
|
$xactions = array();
|
||||||
|
|
||||||
$type_name = PhabricatorDashboardTransaction::TYPE_NAME;
|
$type_name = PhabricatorDashboardTransaction::TYPE_NAME;
|
||||||
|
$type_icon = PhabricatorDashboardTransaction::TYPE_ICON;
|
||||||
$type_layout_mode = PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE;
|
$type_layout_mode = PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE;
|
||||||
$type_view_policy = PhabricatorTransactions::TYPE_VIEW_POLICY;
|
$type_view_policy = PhabricatorTransactions::TYPE_VIEW_POLICY;
|
||||||
$type_edit_policy = PhabricatorTransactions::TYPE_EDIT_POLICY;
|
$type_edit_policy = PhabricatorTransactions::TYPE_EDIT_POLICY;
|
||||||
|
@ -91,6 +94,9 @@ final class PhabricatorDashboardEditController
|
||||||
$xactions[] = id(new PhabricatorDashboardTransaction())
|
$xactions[] = id(new PhabricatorDashboardTransaction())
|
||||||
->setTransactionType($type_layout_mode)
|
->setTransactionType($type_layout_mode)
|
||||||
->setNewValue($v_layout_mode);
|
->setNewValue($v_layout_mode);
|
||||||
|
$xactions[] = id(new PhabricatorDashboardTransaction())
|
||||||
|
->setTransactionType($type_icon)
|
||||||
|
->setNewValue($v_icon);
|
||||||
$xactions[] = id(new PhabricatorDashboardTransaction())
|
$xactions[] = id(new PhabricatorDashboardTransaction())
|
||||||
->setTransactionType($type_view_policy)
|
->setTransactionType($type_view_policy)
|
||||||
->setNewValue($v_view_policy);
|
->setNewValue($v_view_policy);
|
||||||
|
@ -146,6 +152,12 @@ final class PhabricatorDashboardEditController
|
||||||
->setName('layout_mode')
|
->setName('layout_mode')
|
||||||
->setValue($v_layout_mode)
|
->setValue($v_layout_mode)
|
||||||
->setOptions($layout_mode_options))
|
->setOptions($layout_mode_options))
|
||||||
|
->appendChild(
|
||||||
|
id(new PHUIFormIconSetControl())
|
||||||
|
->setLabel(pht('Icon'))
|
||||||
|
->setName('icon')
|
||||||
|
->setIconSet(new PhabricatorDashboardIconSet())
|
||||||
|
->setValue($v_icon))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
id(new AphrontFormPolicyControl())
|
id(new AphrontFormPolicyControl())
|
||||||
->setName('viewPolicy')
|
->setName('viewPolicy')
|
||||||
|
|
|
@ -109,7 +109,7 @@ final class PhabricatorDashboardManageController
|
||||||
->setHeader($dashboard->getName())
|
->setHeader($dashboard->getName())
|
||||||
->setPolicyObject($dashboard)
|
->setPolicyObject($dashboard)
|
||||||
->setStatus($status_icon, $status_color, $status_name)
|
->setStatus($status_icon, $status_color, $status_name)
|
||||||
->setHeaderIcon('fa-dashboard')
|
->setHeaderIcon($dashboard->getIcon())
|
||||||
->addActionLink($button);
|
->addActionLink($button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ final class PhabricatorDashboardTransactionEditor
|
||||||
$types[] = PhabricatorTransactions::TYPE_EDGE;
|
$types[] = PhabricatorTransactions::TYPE_EDGE;
|
||||||
|
|
||||||
$types[] = PhabricatorDashboardTransaction::TYPE_NAME;
|
$types[] = PhabricatorDashboardTransaction::TYPE_NAME;
|
||||||
|
$types[] = PhabricatorDashboardTransaction::TYPE_ICON;
|
||||||
$types[] = PhabricatorDashboardTransaction::TYPE_STATUS;
|
$types[] = PhabricatorDashboardTransaction::TYPE_STATUS;
|
||||||
$types[] = PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE;
|
$types[] = PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE;
|
||||||
|
|
||||||
|
@ -66,6 +67,11 @@ final class PhabricatorDashboardTransactionEditor
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return $object->getName();
|
return $object->getName();
|
||||||
|
case PhabricatorDashboardTransaction::TYPE_ICON:
|
||||||
|
if ($this->getIsNewObject()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return $object->getIcon();
|
||||||
case PhabricatorDashboardTransaction::TYPE_STATUS:
|
case PhabricatorDashboardTransaction::TYPE_STATUS:
|
||||||
if ($this->getIsNewObject()) {
|
if ($this->getIsNewObject()) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -87,6 +93,7 @@ final class PhabricatorDashboardTransactionEditor
|
||||||
PhabricatorApplicationTransaction $xaction) {
|
PhabricatorApplicationTransaction $xaction) {
|
||||||
switch ($xaction->getTransactionType()) {
|
switch ($xaction->getTransactionType()) {
|
||||||
case PhabricatorDashboardTransaction::TYPE_NAME:
|
case PhabricatorDashboardTransaction::TYPE_NAME:
|
||||||
|
case PhabricatorDashboardTransaction::TYPE_ICON:
|
||||||
case PhabricatorDashboardTransaction::TYPE_STATUS:
|
case PhabricatorDashboardTransaction::TYPE_STATUS:
|
||||||
case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
|
case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
|
||||||
return $xaction->getNewValue();
|
return $xaction->getNewValue();
|
||||||
|
@ -101,6 +108,9 @@ final class PhabricatorDashboardTransactionEditor
|
||||||
case PhabricatorDashboardTransaction::TYPE_NAME:
|
case PhabricatorDashboardTransaction::TYPE_NAME:
|
||||||
$object->setName($xaction->getNewValue());
|
$object->setName($xaction->getNewValue());
|
||||||
return;
|
return;
|
||||||
|
case PhabricatorDashboardTransaction::TYPE_ICON:
|
||||||
|
$object->setIcon($xaction->getNewValue());
|
||||||
|
return;
|
||||||
case PhabricatorDashboardTransaction::TYPE_STATUS:
|
case PhabricatorDashboardTransaction::TYPE_STATUS:
|
||||||
$object->setStatus($xaction->getNewValue());
|
$object->setStatus($xaction->getNewValue());
|
||||||
return;
|
return;
|
||||||
|
@ -130,6 +140,7 @@ final class PhabricatorDashboardTransactionEditor
|
||||||
|
|
||||||
switch ($xaction->getTransactionType()) {
|
switch ($xaction->getTransactionType()) {
|
||||||
case PhabricatorDashboardTransaction::TYPE_NAME:
|
case PhabricatorDashboardTransaction::TYPE_NAME:
|
||||||
|
case PhabricatorDashboardTransaction::TYPE_ICON:
|
||||||
case PhabricatorDashboardTransaction::TYPE_STATUS:
|
case PhabricatorDashboardTransaction::TYPE_STATUS:
|
||||||
case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
|
case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class PhabricatorDashboardIconSet
|
||||||
|
extends PhabricatorIconSet {
|
||||||
|
|
||||||
|
const ICONSETKEY = 'dashboards';
|
||||||
|
|
||||||
|
public function getSelectIconTitleText() {
|
||||||
|
return pht('Choose Dashboard Icon');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function newIcons() {
|
||||||
|
$map = array(
|
||||||
|
'fa-home' => 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -16,6 +16,7 @@ final class PhabricatorDashboard extends PhabricatorDashboardDAO
|
||||||
protected $viewPolicy;
|
protected $viewPolicy;
|
||||||
protected $editPolicy;
|
protected $editPolicy;
|
||||||
protected $status;
|
protected $status;
|
||||||
|
protected $icon;
|
||||||
protected $layoutConfig = array();
|
protected $layoutConfig = array();
|
||||||
|
|
||||||
const STATUS_ACTIVE = 'active';
|
const STATUS_ACTIVE = 'active';
|
||||||
|
@ -29,6 +30,7 @@ final class PhabricatorDashboard extends PhabricatorDashboardDAO
|
||||||
public static function initializeNewDashboard(PhabricatorUser $actor) {
|
public static function initializeNewDashboard(PhabricatorUser $actor) {
|
||||||
return id(new PhabricatorDashboard())
|
return id(new PhabricatorDashboard())
|
||||||
->setName('')
|
->setName('')
|
||||||
|
->setIcon('fa-dashboard')
|
||||||
->setViewPolicy(PhabricatorPolicies::POLICY_USER)
|
->setViewPolicy(PhabricatorPolicies::POLICY_USER)
|
||||||
->setEditPolicy($actor->getPHID())
|
->setEditPolicy($actor->getPHID())
|
||||||
->setStatus(self::STATUS_ACTIVE)
|
->setStatus(self::STATUS_ACTIVE)
|
||||||
|
@ -63,6 +65,7 @@ final class PhabricatorDashboard extends PhabricatorDashboardDAO
|
||||||
self::CONFIG_COLUMN_SCHEMA => array(
|
self::CONFIG_COLUMN_SCHEMA => array(
|
||||||
'name' => 'text255',
|
'name' => 'text255',
|
||||||
'status' => 'text32',
|
'status' => 'text32',
|
||||||
|
'icon' => 'text32',
|
||||||
'authorPHID' => 'phid',
|
'authorPHID' => 'phid',
|
||||||
),
|
),
|
||||||
) + parent::getConfiguration();
|
) + parent::getConfiguration();
|
||||||
|
|
|
@ -4,6 +4,7 @@ final class PhabricatorDashboardTransaction
|
||||||
extends PhabricatorApplicationTransaction {
|
extends PhabricatorApplicationTransaction {
|
||||||
|
|
||||||
const TYPE_NAME = 'dashboard:name';
|
const TYPE_NAME = 'dashboard:name';
|
||||||
|
const TYPE_ICON = 'dashboard:icon';
|
||||||
const TYPE_STATUS = 'dashboard:status';
|
const TYPE_STATUS = 'dashboard:status';
|
||||||
const TYPE_LAYOUT_MODE = 'dashboard:layoutmode';
|
const TYPE_LAYOUT_MODE = 'dashboard:layoutmode';
|
||||||
|
|
||||||
|
@ -39,6 +40,19 @@ final class PhabricatorDashboardTransaction
|
||||||
$new);
|
$new);
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case self::TYPE_STATUS:
|
||||||
if ($new == PhabricatorDashboard::STATUS_ACTIVE) {
|
if ($new == PhabricatorDashboard::STATUS_ACTIVE) {
|
||||||
return pht(
|
return pht(
|
||||||
|
@ -82,6 +96,21 @@ final class PhabricatorDashboardTransaction
|
||||||
$new);
|
$new);
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case self::TYPE_STATUS:
|
||||||
if ($new == PhabricatorDashboard::STATUS_ACTIVE) {
|
if ($new == PhabricatorDashboard::STATUS_ACTIVE) {
|
||||||
return pht(
|
return pht(
|
||||||
|
|
Loading…
Reference in a new issue