1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-21 04:50:55 +01:00

Allow administrators to set a dashboard as a global default

Summary:
Ref T4883.

  - When an administrator installs a dashbord, give them the option to install it as a global default.
  - On the home page, if a user does not have a dashboard installed, check for a global default.
  - On the Admin NUX/Welcome page, check for a global dashboard.

Test Plan:
  - Installed a global dashboard, checked homepage, saw it.
  - Installed a personal dashboard over it.
  - Checked non-admin flow.
  - Checked Admin NUX page for quest completion.

Reviewers: btrahan, chad

Reviewed By: chad

Subscribers: epriestley

Maniphest Tasks: T4883

Differential Revision: https://secure.phabricator.com/D9670
This commit is contained in:
epriestley 2014-06-23 15:14:38 -07:00
parent 464979302b
commit abcd3efa5a
5 changed files with 84 additions and 52 deletions

View file

@ -4876,6 +4876,7 @@ phutil_register_library_map(array(
2 => 'PhabricatorFlaggableInterface', 2 => 'PhabricatorFlaggableInterface',
3 => 'PhabricatorMarkupInterface', 3 => 'PhabricatorMarkupInterface',
4 => 'PhabricatorDestructableInterface', 4 => 'PhabricatorDestructableInterface',
5 => 'PhabricatorProjectInterface',
), ),
'PhabricatorRepositoryArcanistProject' => 'PhabricatorRepositoryArcanistProject' =>
array( array(

View file

@ -156,7 +156,10 @@ final class PhabricatorConfigWelcomeController
$content); $content);
$dashboard_href = PhabricatorEnv::getURI('/dashboard/'); $dashboard_href = PhabricatorEnv::getURI('/dashboard/');
$have_dashboard = false; $have_dashboard = (bool)PhabricatorDashboardInstall::getDashboard(
$viewer,
PhabricatorApplicationHome::DASHBOARD_DEFAULT,
'PhabricatorApplicationHome');
if ($have_dashboard) { if ($have_dashboard) {
$content = pht( $content = pht(
"You've installed a default dashboard to replace this welcome screen ". "You've installed a default dashboard to replace this welcome screen ".

View file

@ -23,17 +23,26 @@ final class PhabricatorDashboardInstallController
$dashboard_phid = $dashboard->getPHID(); $dashboard_phid = $dashboard->getPHID();
$object_phid = $request->getStr('objectPHID', $viewer->getPHID()); $object_phid = $request->getStr('objectPHID', $viewer->getPHID());
$object = id(new PhabricatorObjectQuery()) switch ($object_phid) {
->setViewer($viewer) case PhabricatorApplicationHome::DASHBOARD_DEFAULT:
->requireCapabilities( if (!$viewer->getIsAdmin()) {
array( return new Aphront404Response();
PhabricatorPolicyCapability::CAN_VIEW, }
PhabricatorPolicyCapability::CAN_EDIT, break;
)) default:
->withPHIDs(array($object_phid)) $object = id(new PhabricatorObjectQuery())
->executeOne(); ->setViewer($viewer)
if (!$object) { ->requireCapabilities(
return new Aphront404Response(); array(
PhabricatorPolicyCapability::CAN_VIEW,
PhabricatorPolicyCapability::CAN_EDIT,
))
->withPHIDs(array($object_phid))
->executeOne();
if (!$object) {
return new Aphront404Response();
}
break;
} }
$installer_phid = $viewer->getPHID(); $installer_phid = $viewer->getPHID();
@ -64,58 +73,67 @@ final class PhabricatorDashboardInstallController
->setURI($this->getRedirectURI($application_class, $object_phid)); ->setURI($this->getRedirectURI($application_class, $object_phid));
} }
$body = $this->getBodyContent( $dialog = $this->newDialog()
$application_class,
$object_phid,
$installer_phid);
$form = id(new AphrontFormView())
->setUser($viewer)
->appendChild($body);
return $this->newDialog()
->setTitle(pht('Install Dashboard')) ->setTitle(pht('Install Dashboard'))
->appendChild($form->buildLayoutView()) ->addHiddenInput('objectPHID', $object_phid)
->addCancelButton($this->getCancelURI( ->addCancelButton($this->getCancelURI($application_class, $object_phid))
$application_class, $object_phid))
->addSubmitButton(pht('Install Dashboard')); ->addSubmitButton(pht('Install Dashboard'));
}
private function getBodyContent(
$application_class,
$object_phid,
$installer_phid) {
$body = array();
switch ($application_class) { switch ($application_class) {
case 'PhabricatorApplicationHome': case 'PhabricatorApplicationHome':
if ($installer_phid == $object_phid) { if ($viewer->getPHID() == $object_phid) {
$body[] = phutil_tag( if ($viewer->getIsAdmin()) {
'p', $dialog->setWidth(AphrontDialogView::WIDTH_FORM);
array(),
pht( $form = id(new AphrontFormView())
'Are you sure you want to install this dashboard as your '. ->setUser($viewer)
'home page?')); ->appendRemarkupInstructions(
$body[] = phutil_tag( pht('Choose where to install this dashboard.'))
'p', ->appendChild(
array(), id(new AphrontFormRadioButtonControl())
pht( ->setName('objectPHID')
'You will be re-directed to your spiffy new home page if you '. ->setValue(PhabricatorApplicationHome::DASHBOARD_DEFAULT)
'choose to install this dashboard.')); ->addButton(
PhabricatorApplicationHome::DASHBOARD_DEFAULT,
pht('Default Dashboard for All Users'),
pht(
'Install this dashboard as the global default dashboard '.
'for all users. Users can install a personal dashboard '.
'to replace it. All users who have not configured '.
'a personal dashboard will be affected by this change.'))
->addButton(
$viewer->getPHID(),
pht('Personal Home Page Dashboard'),
pht(
'Install this dashboard as your personal home page '.
'dashboard. Only you will be affected by this change.')));
$dialog->appendChild($form->buildLayoutView());
} else {
$dialog->appendParagraph(
pht('Install this dashboard on your home page?'));
}
} else { } else {
$body[] = phutil_tag( $dialog->appendParagraph(
'p',
array(),
pht( pht(
'Are you sure you want to install this dashboard as the home '. 'Install this dashboard as the home page dashboard for %s?',
'page for %s?', phutil_tag(
$this->getHandle($object_phid)->getName())); 'strong',
array(),
$this->getHandle($object_phid)->getName())));
} }
break; break;
default:
throw new Exception(
pht(
'Unknown dashboard application class "%s"!',
$application_class));
} }
return $body;
return $dialog;
} }
private function getCancelURI($application_class, $object_phid) { private function getCancelURI($application_class, $object_phid) {
$uri = null; $uri = null;
switch ($application_class) { switch ($application_class) {

View file

@ -2,6 +2,8 @@
final class PhabricatorApplicationHome extends PhabricatorApplication { final class PhabricatorApplicationHome extends PhabricatorApplication {
const DASHBOARD_DEFAULT = 'dashboard:default';
public function getBaseURI() { public function getBaseURI() {
return '/home/'; return '/home/';
} }

View file

@ -21,6 +21,14 @@ final class PhabricatorHomeMainController
$user, $user,
$user->getPHID(), $user->getPHID(),
get_class($this->getCurrentApplication())); get_class($this->getCurrentApplication()));
if (!$dashboard) {
$dashboard = PhabricatorDashboardInstall::getDashboard(
$user,
PhabricatorApplicationHome::DASHBOARD_DEFAULT,
get_class($this->getCurrentApplication()));
}
if ($dashboard) { if ($dashboard) {
$content = id(new PhabricatorDashboardRenderingEngine()) $content = id(new PhabricatorDashboardRenderingEngine())
->setViewer($user) ->setViewer($user)