1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-10 08:52:39 +01:00

Move the repository "Publishing" option to the "Basics" panel in repository management

Summary:
Depends on D20424. Ref T13277. Now that the "Actions" panel only has one item ("Publishing"), just move it to the "Basics" panel.

Update the UI to show active/publishing status more clearly and relate them to one another and importing state.

Test Plan: {F6378087}

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13277

Differential Revision: https://secure.phabricator.com/D20425
This commit is contained in:
epriestley 2019-04-15 06:27:32 -07:00
parent ec9237fe13
commit 7a4ef2bad8
6 changed files with 191 additions and 78 deletions

View file

@ -951,6 +951,7 @@ phutil_register_library_map(array(
'DiffusionRepositoryEditDeleteController' => 'applications/diffusion/controller/DiffusionRepositoryEditDeleteController.php',
'DiffusionRepositoryEditEngine' => 'applications/diffusion/editor/DiffusionRepositoryEditEngine.php',
'DiffusionRepositoryEditEnormousController' => 'applications/diffusion/controller/DiffusionRepositoryEditEnormousController.php',
'DiffusionRepositoryEditPublishingController' => 'applications/diffusion/controller/DiffusionRepositoryEditPublishingController.php',
'DiffusionRepositoryEditUpdateController' => 'applications/diffusion/controller/DiffusionRepositoryEditUpdateController.php',
'DiffusionRepositoryFunctionDatasource' => 'applications/diffusion/typeahead/DiffusionRepositoryFunctionDatasource.php',
'DiffusionRepositoryHistoryManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryHistoryManagementPanel.php',
@ -969,7 +970,6 @@ phutil_register_library_map(array(
'DiffusionRepositoryPath' => 'applications/diffusion/data/DiffusionRepositoryPath.php',
'DiffusionRepositoryPoliciesManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryPoliciesManagementPanel.php',
'DiffusionRepositoryProfilePictureController' => 'applications/diffusion/controller/DiffusionRepositoryProfilePictureController.php',
'DiffusionRepositoryPublishingManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryPublishingManagementPanel.php',
'DiffusionRepositoryRef' => 'applications/diffusion/data/DiffusionRepositoryRef.php',
'DiffusionRepositoryRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRepositoryRemarkupRule.php',
'DiffusionRepositorySearchConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRepositorySearchConduitAPIMethod.php',
@ -6602,6 +6602,7 @@ phutil_register_library_map(array(
'DiffusionRepositoryEditDeleteController' => 'DiffusionRepositoryManageController',
'DiffusionRepositoryEditEngine' => 'PhabricatorEditEngine',
'DiffusionRepositoryEditEnormousController' => 'DiffusionRepositoryManageController',
'DiffusionRepositoryEditPublishingController' => 'DiffusionRepositoryManageController',
'DiffusionRepositoryEditUpdateController' => 'DiffusionRepositoryManageController',
'DiffusionRepositoryFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'DiffusionRepositoryHistoryManagementPanel' => 'DiffusionRepositoryManagementPanel',
@ -6620,7 +6621,6 @@ phutil_register_library_map(array(
'DiffusionRepositoryPath' => 'Phobject',
'DiffusionRepositoryPoliciesManagementPanel' => 'DiffusionRepositoryManagementPanel',
'DiffusionRepositoryProfilePictureController' => 'DiffusionController',
'DiffusionRepositoryPublishingManagementPanel' => 'DiffusionRepositoryManagementPanel',
'DiffusionRepositoryRef' => 'Phobject',
'DiffusionRepositoryRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'DiffusionRepositorySearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',

View file

@ -86,6 +86,7 @@ final class PhabricatorDiffusionApplication extends PhabricatorApplication {
'enormous/' => 'DiffusionRepositoryEditEnormousController',
'delete/' => 'DiffusionRepositoryEditDeleteController',
'update/' => 'DiffusionRepositoryEditUpdateController',
'publish/' => 'DiffusionRepositoryEditPublishingController',
'testautomation/' => 'DiffusionRepositoryTestAutomationController',
),
'pathtree/(?P<dblob>.*)' => 'DiffusionPathTreeController',

View file

@ -334,6 +334,8 @@ final class DiffusionRepositoryController extends DiffusionController {
'fa-clock-o',
'indigo',
pht('Importing (%s)...', $percentage));
} else if ($repository->isPublishingDisabled()) {
$header->setStatus('fa-minus', 'bluegrey', pht('Publishing Disabled'));
} else {
$header->setStatus('fa-check', 'bluegrey', pht('Active'));
}

View file

@ -0,0 +1,83 @@
<?php
final class DiffusionRepositoryEditPublishingController
extends DiffusionRepositoryManageController {
public function handleRequest(AphrontRequest $request) {
$response = $this->loadDiffusionContextForEdit();
if ($response) {
return $response;
}
$viewer = $this->getViewer();
$drequest = $this->getDiffusionRequest();
$repository = $drequest->getRepository();
$panel_uri = id(new DiffusionRepositoryBasicsManagementPanel())
->setRepository($repository)
->getPanelURI();
if ($request->isFormPost()) {
if ($repository->isPublishingDisabled()) {
$new_status = true;
} else {
$new_status = false;
}
$xaction = id(new PhabricatorRepositoryTransaction())
->setTransactionType(
PhabricatorRepositoryNotifyTransaction::TRANSACTIONTYPE)
->setNewValue($new_status);
$editor = id(new PhabricatorRepositoryEditor())
->setContinueOnNoEffect(true)
->setContinueOnMissingFields(true)
->setContentSourceFromRequest($request)
->setActor($viewer)
->applyTransactions($repository, array($xaction));
return id(new AphrontReloadResponse())->setURI($panel_uri);
}
$body = array();
if (!$repository->isPublishingDisabled()) {
$title = pht('Disable Publishing');
$body[] = pht(
'If you disable publishing for this repository, new commits '.
'will not: send email, publish feed stories, trigger audits, or '.
'trigger Herald.');
$body[] = pht(
'This option is most commonly used to temporarily allow a major '.
'repository maintenance operation (like a history rewrite) to '.
'occur with minimal disruption to users.');
$submit = pht('Disable Publishing');
} else {
$title = pht('Reactivate Publishing');
$body[] = pht(
'If you reactivate publishing for this repository, new commits '.
'that become reachable from permanent refs will: send email, '.
'publish feed stories, trigger audits, and trigger Herald.');
$body[] = pht(
'Commits which became reachable from a permanent ref while '.
'publishing was disabled will not trigger these actions '.
'retroactively.');
$submit = pht('Reactivate Publishing');
}
$dialog = $this->newDialog()
->setTitle($title)
->addSubmitButton($submit)
->addCancelButton($panel_uri);
foreach ($body as $graph) {
$dialog->appendParagraph($graph);
}
return $dialog;
}
}

View file

@ -46,6 +46,7 @@ final class DiffusionRepositoryBasicsManagementPanel
$dangerous_uri = $repository->getPathURI('edit/dangerous/');
$enormous_uri = $repository->getPathURI('edit/enormous/');
$update_uri = $repository->getPathURI('edit/update/');
$publish_uri = $repository->getPathURI('edit/publish/');
if ($repository->isTracked()) {
$activate_icon = 'fa-ban';
@ -55,6 +56,14 @@ final class DiffusionRepositoryBasicsManagementPanel
$activate_label = pht('Activate Repository');
}
if (!$repository->isPublishingDisabled()) {
$publish_icon = 'fa-ban';
$publish_label = pht('Disable Publishing');
} else {
$publish_icon = 'fa-check';
$publish_label = pht('Enable Publishing');
}
$should_dangerous = $repository->shouldAllowDangerousChanges();
if ($should_dangerous) {
$dangerous_icon = 'fa-shield';
@ -109,6 +118,10 @@ final class DiffusionRepositoryBasicsManagementPanel
->setDisabled(!$can_enormous)
->setWorkflow(true));
$action_list->addAction(
id(new PhabricatorActionView())
->setType(PhabricatorActionView::TYPE_DIVIDER));
$action_list->addAction(
id(new PhabricatorActionView())
->setName($activate_label)
@ -117,6 +130,14 @@ final class DiffusionRepositoryBasicsManagementPanel
->setDisabled(!$can_edit)
->setWorkflow(true));
$action_list->addAction(
id(new PhabricatorActionView())
->setName($publish_label)
->setHref($publish_uri)
->setIcon($publish_icon)
->setDisabled(!$can_edit)
->setWorkflow(true));
$action_list->addAction(
id(new PhabricatorActionView())
->setName(pht('Update Now'))
@ -147,6 +168,9 @@ final class DiffusionRepositoryBasicsManagementPanel
$basics = $this->newBox(pht('Properties'), $basics);
$repository = $this->getRepository();
$state = $this->buildStateView($repository);
$is_new = $repository->isNewlyInitialized();
$info_view = null;
if ($is_new) {
@ -180,7 +204,7 @@ final class DiffusionRepositoryBasicsManagementPanel
}
$status = $this->buildStatus();
return array($info_view, $basics, $description, $status);
return array($info_view, $state, $basics, $description, $status);
}
private function buildBasics() {
@ -287,7 +311,7 @@ final class DiffusionRepositoryBasicsManagementPanel
$view->addTextContent($raw_error);
}
return $this->newBox(pht('Status'), $view);
return $this->newBox(pht('Working Copy Status'), $view);
}
private function buildRepositoryUpdateInterval(
@ -720,4 +744,81 @@ final class DiffusionRepositoryBasicsManagementPanel
'environment.append-paths');
}
private function buildStateView(PhabricatorRepository $repository) {
$viewer = $this->getViewer();
$is_new = $repository->isNewlyInitialized();
$view = id(new PHUIPropertyListView())
->setViewer($viewer);
if (!$repository->isTracked()) {
if ($is_new) {
$active_icon = 'fa-ban';
$active_color = 'yellow';
$active_label = pht('Not Activated Yet');
$active_note = pht('Complete Setup and Activate Repository');
} else {
$active_icon = 'fa-times';
$active_color = 'red';
$active_label = pht('Not Active');
$active_note = pht('Repository Disabled');
}
} else if ($repository->isImporting()) {
$active_icon = 'fa-hourglass';
$active_color = 'yellow';
$active_label = pht('Importing...');
$active_note = null;
} else {
$active_icon = 'fa-check';
$active_color = 'green';
$active_label = pht('Repository Active');
$active_note = null;
}
$active_view = id(new PHUIStatusListView())
->addItem(
id(new PHUIStatusItemView())
->setIcon($active_icon, $active_color)
->setTarget($active_label)
->setNote($active_note));
if ($repository->isPublishingDisabled()) {
$publishing_icon = 'fa-times';
$publishing_color = 'red';
$publishing_label = pht('Not Publishing');
$publishing_note = pht('Publishing Disabled');
} else if (!$repository->isTracked()) {
$publishing_icon = 'fa-ban';
$publishing_color = 'yellow';
$publishing_label = pht('Not Publishing');
if ($is_new) {
$publishing_note = pht('Repository Not Active Yet');
} else {
$publishing_note = pht('Repository Inactive');
}
} else if ($repository->isImporting()) {
$publishing_icon = 'fa-ban';
$publishing_color = 'yellow';
$publishing_label = pht('Not Publishing');
$publishing_note = pht('Repository Importing');
} else {
$publishing_icon = 'fa-check';
$publishing_color = 'green';
$publishing_label = pht('Publishing Active');
$publishing_note = null;
}
$publishing_view = id(new PHUIStatusListView())
->addItem(
id(new PHUIStatusItemView())
->setIcon($publishing_icon, $publishing_color)
->setTarget($publishing_label)
->setNote($publishing_note));
$view->addProperty(pht('Active'), $active_view);
$view->addProperty(pht('Publishing'), $publishing_view);
return $this->newBox(pht('State'), $view);
}
}

View file

@ -1,74 +0,0 @@
<?php
final class DiffusionRepositoryPublishingManagementPanel
extends DiffusionRepositoryManagementPanel {
const PANELKEY = 'publishing';
public function getManagementPanelLabel() {
return pht('Publishing');
}
public function getManagementPanelOrder() {
return 1100;
}
public function getManagementPanelIcon() {
$repository = $this->getRepository();
$has_any = $repository->isPublishingDisabled();
if ($has_any) {
return 'fa-flash';
} else {
return 'fa-flash grey';
}
}
protected function getEditEngineFieldKeys() {
return array(
'publish',
);
}
public function buildManagementPanelCurtain() {
$repository = $this->getRepository();
$viewer = $this->getViewer();
$action_list = $this->newActionList();
$can_edit = PhabricatorPolicyFilter::hasCapability(
$viewer,
$repository,
PhabricatorPolicyCapability::CAN_EDIT);
$publishing_uri = $this->getEditPageURI();
$action_list->addAction(
id(new PhabricatorActionView())
->setIcon('fa-pencil')
->setName(pht('Edit Publishing'))
->setHref($publishing_uri)
->setDisabled(!$can_edit)
->setWorkflow(!$can_edit));
return $this->newCurtainView()
->setActionList($action_list);
}
public function buildManagementPanelContent() {
$repository = $this->getRepository();
$viewer = $this->getViewer();
$view = id(new PHUIPropertyListView())
->setViewer($viewer);
$notify = $repository->isPublishingDisabled()
? pht('Off')
: pht('On');
$notify = phutil_tag('em', array(), $notify);
$view->addProperty(pht('Publishing'), $notify);
return $this->newBox(pht('Publishing'), $view);
}
}