mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-24 14:30:56 +01:00
Remove Copy Dashboard
Summary: Ref T10390. This removes the "Copy Dashboard" feature, which was more of a crutch to assist in the complexity of building and maintaining dashboards. I think we're close enough now that removing this and adding in some simpler edit dialogs should negate any benefit to keeping this around. Also removed an un-used "Uninstall Dashboard" dialog. Test Plan: Visit manage, edit, no longer see option to copy dashboard. grep /dashboards/ for "copy" and remove all traces. Add some panels to a dashboard I own. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T10390 Differential Revision: https://secure.phabricator.com/D17338
This commit is contained in:
parent
5a850ab235
commit
554c4f10c5
9 changed files with 2 additions and 326 deletions
|
@ -2466,7 +2466,6 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardArchiveController' => 'applications/dashboard/controller/PhabricatorDashboardArchiveController.php',
|
||||
'PhabricatorDashboardArrangeController' => 'applications/dashboard/controller/PhabricatorDashboardArrangeController.php',
|
||||
'PhabricatorDashboardController' => 'applications/dashboard/controller/PhabricatorDashboardController.php',
|
||||
'PhabricatorDashboardCopyController' => 'applications/dashboard/controller/PhabricatorDashboardCopyController.php',
|
||||
'PhabricatorDashboardDAO' => 'applications/dashboard/storage/PhabricatorDashboardDAO.php',
|
||||
'PhabricatorDashboardDashboardHasPanelEdgeType' => 'applications/dashboard/edge/PhabricatorDashboardDashboardHasPanelEdgeType.php',
|
||||
'PhabricatorDashboardDashboardPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.php',
|
||||
|
@ -2518,7 +2517,6 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardTransaction' => 'applications/dashboard/storage/PhabricatorDashboardTransaction.php',
|
||||
'PhabricatorDashboardTransactionEditor' => 'applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php',
|
||||
'PhabricatorDashboardTransactionQuery' => 'applications/dashboard/query/PhabricatorDashboardTransactionQuery.php',
|
||||
'PhabricatorDashboardUninstallController' => 'applications/dashboard/controller/PhabricatorDashboardUninstallController.php',
|
||||
'PhabricatorDashboardViewController' => 'applications/dashboard/controller/PhabricatorDashboardViewController.php',
|
||||
'PhabricatorDataCacheSpec' => 'applications/cache/spec/PhabricatorDataCacheSpec.php',
|
||||
'PhabricatorDataNotAttachedException' => 'infrastructure/storage/lisk/PhabricatorDataNotAttachedException.php',
|
||||
|
@ -7476,7 +7474,6 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardArchiveController' => 'PhabricatorDashboardController',
|
||||
'PhabricatorDashboardArrangeController' => 'PhabricatorDashboardProfileController',
|
||||
'PhabricatorDashboardController' => 'PhabricatorController',
|
||||
'PhabricatorDashboardCopyController' => 'PhabricatorDashboardController',
|
||||
'PhabricatorDashboardDAO' => 'PhabricatorLiskDAO',
|
||||
'PhabricatorDashboardDashboardHasPanelEdgeType' => 'PhabricatorEdgeType',
|
||||
'PhabricatorDashboardDashboardPHIDType' => 'PhabricatorPHIDType',
|
||||
|
@ -7539,7 +7536,6 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDashboardTransaction' => 'PhabricatorApplicationTransaction',
|
||||
'PhabricatorDashboardTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||
'PhabricatorDashboardTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
|
||||
'PhabricatorDashboardUninstallController' => 'PhabricatorDashboardController',
|
||||
'PhabricatorDashboardViewController' => 'PhabricatorDashboardProfileController',
|
||||
'PhabricatorDataCacheSpec' => 'PhabricatorCacheSpec',
|
||||
'PhabricatorDataNotAttachedException' => 'Exception',
|
||||
|
|
|
@ -29,9 +29,7 @@ final class PhabricatorDashboardApplication extends PhabricatorApplication {
|
|||
'manage/(?P<id>\d+)/' => 'PhabricatorDashboardManageController',
|
||||
'arrange/(?P<id>\d+)/' => 'PhabricatorDashboardArrangeController',
|
||||
'create/' => 'PhabricatorDashboardEditController',
|
||||
'copy/(?:(?P<id>\d+)/)?' => 'PhabricatorDashboardCopyController',
|
||||
'edit/(?:(?P<id>\d+)/)?' => 'PhabricatorDashboardEditController',
|
||||
'uninstall/(?P<id>\d+)/' => 'PhabricatorDashboardUninstallController',
|
||||
'addpanel/(?P<id>\d+)/' => 'PhabricatorDashboardAddPanelController',
|
||||
'movepanel/(?P<id>\d+)/' => 'PhabricatorDashboardMovePanelController',
|
||||
'removepanel/(?P<id>\d+)/'
|
||||
|
|
|
@ -34,8 +34,7 @@ final class PhabricatorDashboardArrangeController
|
|||
$info_view = null;
|
||||
if (!$can_edit) {
|
||||
$no_edit = pht(
|
||||
'You do not have permission to edit this dashboard. If you want to '.
|
||||
'make changes, make a copy first.');
|
||||
'You do not have permission to edit this dashboard.');
|
||||
|
||||
$info_view = id(new PHUIInfoView())
|
||||
->setSeverity(PHUIInfoView::SEVERITY_NOTICE)
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorDashboardCopyController
|
||||
extends PhabricatorDashboardController {
|
||||
|
||||
public function handleRequest(AphrontRequest $request) {
|
||||
$viewer = $request->getViewer();
|
||||
$id = $request->getURIData('id');
|
||||
|
||||
$dashboard = id(new PhabricatorDashboardQuery())
|
||||
->setViewer($viewer)
|
||||
->withIDs(array($id))
|
||||
->needPanels(true)
|
||||
->executeOne();
|
||||
if (!$dashboard) {
|
||||
return new Aphront404Response();
|
||||
}
|
||||
|
||||
$cancel_uri = $this->getApplicationURI('manage/'.$dashboard->getID().'/');
|
||||
|
||||
if ($request->isFormPost()) {
|
||||
|
||||
$copy = PhabricatorDashboard::initializeNewDashboard($viewer);
|
||||
$copy = PhabricatorDashboard::copyDashboard($copy, $dashboard);
|
||||
|
||||
$copy->setName(pht('Copy of %s', $copy->getName()));
|
||||
|
||||
// Set up all the edges for the new dashboard.
|
||||
|
||||
$xactions = array();
|
||||
$xactions[] = id(new PhabricatorDashboardTransaction())
|
||||
->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
|
||||
->setMetadataValue(
|
||||
'edge:type',
|
||||
PhabricatorDashboardDashboardHasPanelEdgeType::EDGECONST)
|
||||
->setNewValue(
|
||||
array(
|
||||
'=' => array_fuse($dashboard->getPanelPHIDs()),
|
||||
));
|
||||
|
||||
$editor = id(new PhabricatorDashboardTransactionEditor())
|
||||
->setActor($viewer)
|
||||
->setContentSourceFromRequest($request)
|
||||
->setContinueOnMissingFields(true)
|
||||
->setContinueOnNoEffect(true)
|
||||
->applyTransactions($copy, $xactions);
|
||||
|
||||
$cancel_uri = $this->getApplicationURI('edit/'.$copy->getID().'/');
|
||||
return id(new AphrontRedirectResponse())->setURI($cancel_uri);
|
||||
}
|
||||
|
||||
return $this->newDialog()
|
||||
->setTitle(pht('Copy Dashboard'))
|
||||
->appendParagraph(
|
||||
pht(
|
||||
'Create a copy of the dashboard "%s"?',
|
||||
phutil_tag('strong', array(), $dashboard->getName())))
|
||||
->addCancelButton($cancel_uri)
|
||||
->addSubmitButton(pht('Create Copy'));
|
||||
}
|
||||
|
||||
}
|
|
@ -47,8 +47,7 @@ final class PhabricatorDashboardManageController
|
|||
$info_view = null;
|
||||
if (!$can_edit) {
|
||||
$no_edit = pht(
|
||||
'You do not have permission to edit this dashboard. If you want to '.
|
||||
'make changes, make a copy first.');
|
||||
'You do not have permission to edit this dashboard.');
|
||||
|
||||
$info_view = id(new PHUIInfoView())
|
||||
->setSeverity(PHUIInfoView::SEVERITY_NOTICE)
|
||||
|
@ -110,13 +109,6 @@ final class PhabricatorDashboardManageController
|
|||
->setWorkflow($can_edit));
|
||||
}
|
||||
|
||||
$curtain->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setName(pht('Copy Dashboard'))
|
||||
->setIcon('fa-files-o')
|
||||
->setHref($this->getApplicationURI("copy/{$id}/"))
|
||||
->setWorkflow(true));
|
||||
|
||||
return $curtain;
|
||||
}
|
||||
|
||||
|
|
|
@ -52,25 +52,6 @@ final class PhabricatorDashboardPanelEditController
|
|||
return new Aphront404Response();
|
||||
}
|
||||
|
||||
if ($dashboard) {
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$panel,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
if (!$can_edit) {
|
||||
if ($request->isFormPost() && $request->getBool('copy')) {
|
||||
$panel = $this->copyPanel(
|
||||
$request,
|
||||
$dashboard,
|
||||
$panel);
|
||||
} else {
|
||||
return $this->processPanelCloneRequest(
|
||||
$request,
|
||||
$dashboard,
|
||||
$panel);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$is_create = true;
|
||||
|
||||
|
@ -365,79 +346,5 @@ final class PhabricatorDashboardPanelEditController
|
|||
->appendChild($view);
|
||||
}
|
||||
|
||||
private function processPanelCloneRequest(
|
||||
AphrontRequest $request,
|
||||
PhabricatorDashboard $dashboard,
|
||||
PhabricatorDashboardPanel $panel) {
|
||||
|
||||
$viewer = $request->getUser();
|
||||
|
||||
$manage_uri = $this->getApplicationURI('arrange/'.$dashboard->getID().'/');
|
||||
|
||||
return $this->newDialog()
|
||||
->setTitle(pht('Copy Panel?'))
|
||||
->addHiddenInput('copy', true)
|
||||
->addHiddenInput('dashboardID', $request->getInt('dashboardID'))
|
||||
->addHiddenInput('column', $request->getInt('column'))
|
||||
->appendParagraph(
|
||||
pht(
|
||||
'You do not have permission to edit this dashboard panel, but you '.
|
||||
'can make a copy and edit that instead. If you choose to copy the '.
|
||||
'panel, the original will be replaced with the new copy on this '.
|
||||
'dashboard.'))
|
||||
->appendParagraph(
|
||||
pht(
|
||||
'Do you want to make a copy of this panel?'))
|
||||
->addCancelButton($manage_uri)
|
||||
->addSubmitButton(pht('Copy Panel'));
|
||||
}
|
||||
|
||||
private function copyPanel(
|
||||
AphrontRequest $request,
|
||||
PhabricatorDashboard $dashboard,
|
||||
PhabricatorDashboardPanel $panel) {
|
||||
|
||||
$viewer = $request->getUser();
|
||||
|
||||
$copy = PhabricatorDashboardPanel::initializeNewPanel($viewer);
|
||||
$copy = PhabricatorDashboardPanel::copyPanel($copy, $panel, $viewer);
|
||||
|
||||
$copy->openTransaction();
|
||||
$copy->save();
|
||||
|
||||
// TODO: This should record a transaction on the panel copy, too.
|
||||
|
||||
$xactions = array();
|
||||
$xactions[] = id(new PhabricatorDashboardTransaction())
|
||||
->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
|
||||
->setMetadataValue(
|
||||
'edge:type',
|
||||
PhabricatorDashboardDashboardHasPanelEdgeType::EDGECONST)
|
||||
->setNewValue(
|
||||
array(
|
||||
'+' => array(
|
||||
$copy->getPHID() => $copy->getPHID(),
|
||||
),
|
||||
'-' => array(
|
||||
$panel->getPHID() => $panel->getPHID(),
|
||||
),
|
||||
));
|
||||
|
||||
$layout_config = $dashboard->getLayoutConfigObject();
|
||||
$layout_config->replacePanel($panel->getPHID(), $copy->getPHID());
|
||||
$dashboard->setLayoutConfigFromObject($layout_config);
|
||||
$dashboard->save();
|
||||
|
||||
$editor = id(new PhabricatorDashboardTransactionEditor())
|
||||
->setActor($viewer)
|
||||
->setContentSourceFromRequest($request)
|
||||
->setContinueOnMissingFields(true)
|
||||
->setContinueOnNoEffect(true)
|
||||
->applyTransactions($dashboard, $xactions);
|
||||
$copy->saveTransaction();
|
||||
|
||||
return $copy;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,131 +0,0 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorDashboardUninstallController
|
||||
extends PhabricatorDashboardController {
|
||||
|
||||
public function handleRequest(AphrontRequest $request) {
|
||||
$viewer = $request->getViewer();
|
||||
$id = $request->getURIData('id');
|
||||
|
||||
$dashboard = id(new PhabricatorDashboardQuery())
|
||||
->setViewer($viewer)
|
||||
->withIDs(array($id))
|
||||
->executeOne();
|
||||
if (!$dashboard) {
|
||||
return new Aphront404Response();
|
||||
}
|
||||
$dashboard_phid = $dashboard->getPHID();
|
||||
|
||||
$object_phid = $request->getStr('objectPHID', $viewer->getPHID());
|
||||
$object = id(new PhabricatorObjectQuery())
|
||||
->setViewer($viewer)
|
||||
->requireCapabilities(
|
||||
array(
|
||||
PhabricatorPolicyCapability::CAN_VIEW,
|
||||
PhabricatorPolicyCapability::CAN_EDIT,
|
||||
))
|
||||
->withPHIDs(array($object_phid))
|
||||
->executeOne();
|
||||
if (!$object) {
|
||||
return new Aphront404Response();
|
||||
}
|
||||
|
||||
$application_class = $request->getStr(
|
||||
'applicationClass',
|
||||
'PhabricatorHomeApplication');
|
||||
|
||||
$dashboard_install = id(new PhabricatorDashboardInstall())
|
||||
->loadOneWhere(
|
||||
'objectPHID = %s AND applicationClass = %s',
|
||||
$object_phid,
|
||||
$application_class);
|
||||
if (!$dashboard_install) {
|
||||
return new Aphront404Response();
|
||||
}
|
||||
if ($dashboard_install->getDashboardPHID() != $dashboard_phid) {
|
||||
return new Aphront404Response();
|
||||
}
|
||||
|
||||
$installer_phid = $viewer->getPHID();
|
||||
|
||||
if ($request->isFormPost()) {
|
||||
$dashboard_install->delete();
|
||||
return id(new AphrontRedirectResponse())
|
||||
->setURI($this->getRedirectURI($application_class, $object_phid));
|
||||
}
|
||||
|
||||
$body = $this->getBodyContent(
|
||||
$application_class,
|
||||
$object_phid,
|
||||
$installer_phid);
|
||||
|
||||
$form = id(new AphrontFormView())
|
||||
->setUser($viewer)
|
||||
->appendChild($body);
|
||||
|
||||
return $this->newDialog()
|
||||
->setTitle(pht('Uninstall Dashboard'))
|
||||
->appendChild($form->buildLayoutView())
|
||||
->addCancelButton($this->getCancelURI(
|
||||
$application_class, $object_phid, $id))
|
||||
->addSubmitButton(pht('Uninstall Dashboard'));
|
||||
}
|
||||
|
||||
private function getBodyContent(
|
||||
$application_class,
|
||||
$object_phid,
|
||||
$installer_phid) {
|
||||
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$body = array();
|
||||
switch ($application_class) {
|
||||
case 'PhabricatorHomeApplication':
|
||||
if ($installer_phid == $object_phid) {
|
||||
$body[] = phutil_tag(
|
||||
'p',
|
||||
array(),
|
||||
pht(
|
||||
'Are you sure you want to uninstall this dashboard as your '.
|
||||
'home page?'));
|
||||
$body[] = phutil_tag(
|
||||
'p',
|
||||
array(),
|
||||
pht(
|
||||
'You will be re-directed to your bland, default home page if '.
|
||||
'you choose to uninstall this dashboard.'));
|
||||
} else {
|
||||
$body[] = phutil_tag(
|
||||
'p',
|
||||
array(),
|
||||
pht(
|
||||
'Are you sure you want to uninstall this dashboard as the home '.
|
||||
'page for %s?',
|
||||
$viewer->renderHandle($object_phid)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
return $body;
|
||||
}
|
||||
|
||||
private function getCancelURI($application_class, $object_phid, $id) {
|
||||
$uri = null;
|
||||
switch ($application_class) {
|
||||
case 'PhabricatorHomeApplication':
|
||||
$uri = '/dashboard/view/'.$id.'/';
|
||||
break;
|
||||
}
|
||||
return $uri;
|
||||
}
|
||||
|
||||
private function getRedirectURI($application_class, $object_phid) {
|
||||
$uri = null;
|
||||
switch ($application_class) {
|
||||
case 'PhabricatorHomeApplication':
|
||||
$uri = '/';
|
||||
break;
|
||||
}
|
||||
return $uri;
|
||||
}
|
||||
|
||||
}
|
|
@ -47,16 +47,6 @@ final class PhabricatorDashboard extends PhabricatorDashboardDAO
|
|||
);
|
||||
}
|
||||
|
||||
public static function copyDashboard(
|
||||
PhabricatorDashboard $dst,
|
||||
PhabricatorDashboard $src) {
|
||||
|
||||
$dst->name = $src->name;
|
||||
$dst->layoutConfig = $src->layoutConfig;
|
||||
|
||||
return $dst;
|
||||
}
|
||||
|
||||
protected function getConfiguration() {
|
||||
return array(
|
||||
self::CONFIG_AUX_PHID => true,
|
||||
|
|
|
@ -31,19 +31,6 @@ final class PhabricatorDashboardPanel
|
|||
->setEditPolicy($actor->getPHID());
|
||||
}
|
||||
|
||||
public static function copyPanel(
|
||||
PhabricatorDashboardPanel $dst,
|
||||
PhabricatorDashboardPanel $src,
|
||||
PhabricatorUser $user) {
|
||||
|
||||
$dst->name = $src->name;
|
||||
$dst->panelType = $src->panelType;
|
||||
$dst->properties = $src->properties;
|
||||
$dst->authorPHID = $user->getPHID();
|
||||
|
||||
return $dst;
|
||||
}
|
||||
|
||||
protected function getConfiguration() {
|
||||
return array(
|
||||
self::CONFIG_AUX_PHID => true,
|
||||
|
|
Loading…
Reference in a new issue