Page MenuHomePhabricator

D15737.id37934.diff
No OneTemporary

D15737.id37934.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -739,6 +739,7 @@
'DiffusionRefTableController' => 'applications/diffusion/controller/DiffusionRefTableController.php',
'DiffusionRefsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRefsQueryConduitAPIMethod.php',
'DiffusionRenameHistoryQuery' => 'applications/diffusion/query/DiffusionRenameHistoryQuery.php',
+ 'DiffusionRepositoryBasicsManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryBasicsManagementPanel.php',
'DiffusionRepositoryByIDRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRepositoryByIDRemarkupRule.php',
'DiffusionRepositoryClusterManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryClusterManagementPanel.php',
'DiffusionRepositoryController' => 'applications/diffusion/controller/DiffusionRepositoryController.php',
@@ -763,11 +764,13 @@
'DiffusionRepositoryEditSubversionController' => 'applications/diffusion/controller/DiffusionRepositoryEditSubversionController.php',
'DiffusionRepositoryEditUpdateController' => 'applications/diffusion/controller/DiffusionRepositoryEditUpdateController.php',
'DiffusionRepositoryEditproController' => 'applications/diffusion/controller/DiffusionRepositoryEditproController.php',
+ 'DiffusionRepositoryHistoryManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryHistoryManagementPanel.php',
'DiffusionRepositoryListController' => 'applications/diffusion/controller/DiffusionRepositoryListController.php',
'DiffusionRepositoryManageController' => 'applications/diffusion/controller/DiffusionRepositoryManageController.php',
'DiffusionRepositoryManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryManagementPanel.php',
'DiffusionRepositoryNewController' => 'applications/diffusion/controller/DiffusionRepositoryNewController.php',
'DiffusionRepositoryPath' => 'applications/diffusion/data/DiffusionRepositoryPath.php',
+ 'DiffusionRepositoryPoliciesManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryPoliciesManagementPanel.php',
'DiffusionRepositoryRef' => 'applications/diffusion/data/DiffusionRepositoryRef.php',
'DiffusionRepositoryRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRepositoryRemarkupRule.php',
'DiffusionRepositorySearchConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRepositorySearchConduitAPIMethod.php',
@@ -4934,6 +4937,7 @@
'DiffusionRefTableController' => 'DiffusionController',
'DiffusionRefsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
'DiffusionRenameHistoryQuery' => 'Phobject',
+ 'DiffusionRepositoryBasicsManagementPanel' => 'DiffusionRepositoryManagementPanel',
'DiffusionRepositoryByIDRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'DiffusionRepositoryClusterManagementPanel' => 'DiffusionRepositoryManagementPanel',
'DiffusionRepositoryController' => 'DiffusionController',
@@ -4958,11 +4962,13 @@
'DiffusionRepositoryEditSubversionController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditUpdateController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditproController' => 'DiffusionRepositoryEditController',
+ 'DiffusionRepositoryHistoryManagementPanel' => 'DiffusionRepositoryManagementPanel',
'DiffusionRepositoryListController' => 'DiffusionController',
'DiffusionRepositoryManageController' => 'DiffusionController',
'DiffusionRepositoryManagementPanel' => 'Phobject',
'DiffusionRepositoryNewController' => 'DiffusionController',
'DiffusionRepositoryPath' => 'Phobject',
+ 'DiffusionRepositoryPoliciesManagementPanel' => 'DiffusionRepositoryManagementPanel',
'DiffusionRepositoryRef' => 'Phobject',
'DiffusionRepositoryRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'DiffusionRepositorySearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
diff --git a/src/applications/diffusion/controller/DiffusionRepositoryManageController.php b/src/applications/diffusion/controller/DiffusionRepositoryManageController.php
--- a/src/applications/diffusion/controller/DiffusionRepositoryManageController.php
+++ b/src/applications/diffusion/controller/DiffusionRepositoryManageController.php
@@ -30,7 +30,8 @@
foreach ($panels as $panel) {
$panel
->setViewer($viewer)
- ->setRepository($repository);
+ ->setRepository($repository)
+ ->setController($this);
}
$selected = $request->getURIData('panel');
@@ -63,10 +64,30 @@
$repository->getPathURI('manage/'));
$crumbs->addTextCrumb($panel->getManagementPanelLabel());
+ $header_text = pht(
+ '%s: %s',
+ $repository->getDisplayName(),
+ $panel->getManagementPanelLabel());
+
+ $header = id(new PHUIHeaderView())
+ ->setHeader($header_text)
+ ->setHeaderIcon('fa-pencil');
+ if ($repository->isTracked()) {
+ $header->setStatus('fa-check', 'bluegrey', pht('Active'));
+ } else {
+ $header->setStatus('fa-ban', 'dark', pht('Inactive'));
+ }
+
$view = id(new PHUITwoColumnView())
+ ->setHeader($header)
->setNavigation($nav)
->setMainColumn($content);
+ $curtain = $panel->buildManagementPanelCurtain();
+ if ($curtain) {
+ $view->setCurtain($curtain);
+ }
+
return $this->newPage()
->setTitle($title)
->setCrumbs($crumbs)
@@ -95,5 +116,14 @@
return $nav;
}
+ public function newTimeline(PhabricatorRepository $repository) {
+ $timeline = $this->buildTransactionTimeline(
+ $repository,
+ new PhabricatorRepositoryTransactionQuery());
+ $timeline->setShouldTerminate(true);
+
+ return $timeline;
+ }
+
}
diff --git a/src/applications/diffusion/management/DiffusionRepositoryBasicsManagementPanel.php b/src/applications/diffusion/management/DiffusionRepositoryBasicsManagementPanel.php
new file mode 100644
--- /dev/null
+++ b/src/applications/diffusion/management/DiffusionRepositoryBasicsManagementPanel.php
@@ -0,0 +1,122 @@
+<?php
+
+final class DiffusionRepositoryBasicsManagementPanel
+ extends DiffusionRepositoryManagementPanel {
+
+ const PANELKEY = 'basics';
+
+ public function getManagementPanelLabel() {
+ return pht('Basics');
+ }
+
+ public function getManagementPanelOrder() {
+ return 100;
+ }
+
+ protected function buildManagementPanelActions() {
+ $repository = $this->getRepository();
+ $viewer = $this->getViewer();
+
+ $can_edit = PhabricatorPolicyFilter::hasCapability(
+ $viewer,
+ $repository,
+ PhabricatorPolicyCapability::CAN_EDIT);
+
+ $edit_uri = $repository->getPathURI('manage/');
+ $activate_uri = $repository->getPathURI('edit/activate/');
+ $delete_uri = $repository->getPathURI('edit/delete/');
+
+ if ($repository->isTracked()) {
+ $activate_icon = 'fa-pause';
+ $activate_label = pht('Deactivate Repository');
+ } else {
+ $activate_icon = 'fa-play';
+ $activate_label = pht('Activate Repository');
+ }
+
+ return array(
+ id(new PhabricatorActionView())
+ ->setIcon('fa-pencil')
+ ->setName(pht('Edit Basic Information'))
+ ->setHref($edit_uri)
+ ->setDisabled(!$can_edit)
+ ->setWorkflow(!$can_edit),
+ id(new PhabricatorActionView())
+ ->setHref($activate_uri)
+ ->setIcon($activate_icon)
+ ->setName($activate_label)
+ ->setDisabled(!$can_edit)
+ ->setWorkflow(true),
+ id(new PhabricatorActionView())
+ ->setName(pht('Delete Repository'))
+ ->setIcon('fa-times')
+ ->setHref($delete_uri)
+ ->setDisabled(true)
+ ->setWorkflow(true),
+ );
+ }
+
+ public function buildManagementPanelContent() {
+ $result = array();
+
+ $result[] = $this->newBox(pht('Repository Basics'), $this->buildBasics());
+
+ $description = $this->buildDescription();
+ if ($description) {
+ $result[] = $this->newBox(pht('Description'), $description);
+ }
+
+ return $result;
+ }
+
+ private function buildBasics() {
+ $repository = $this->getRepository();
+ $viewer = $this->getViewer();
+
+ $view = id(new PHUIPropertyListView())
+ ->setViewer($viewer)
+ ->setActionList($this->newActions());
+
+ $name = $repository->getName();
+ $view->addProperty(pht('Name'), $name);
+
+ $type = PhabricatorRepositoryType::getNameForRepositoryType(
+ $repository->getVersionControlSystem());
+ $view->addProperty(pht('Type'), $type);
+
+ $callsign = $repository->getCallsign();
+ if (!strlen($callsign)) {
+ $callsign = phutil_tag('em', array(), pht('No Callsign'));
+ }
+ $view->addProperty(pht('Callsign'), $callsign);
+
+ $short_name = $repository->getRepositorySlug();
+ if ($short_name === null) {
+ $short_name = $repository->getCloneName();
+ $short_name = phutil_tag('em', array(), $short_name);
+ }
+ $view->addProperty(pht('Short Name'), $short_name);
+
+ return $view;
+ }
+
+
+ private function buildDescription() {
+ $repository = $this->getRepository();
+ $viewer = $this->getViewer();
+
+ $description = $repository->getDetail('description');
+
+ $view = id(new PHUIPropertyListView())
+ ->setViewer($viewer);
+ if (!strlen($description)) {
+ $description = phutil_tag('em', array(), pht('No description provided.'));
+ } else {
+ $description = new PHUIRemarkupView($viewer, $description);
+ }
+ $view->addTextContent($description);
+
+ return $view;
+ }
+
+}
diff --git a/src/applications/diffusion/management/DiffusionRepositoryClusterManagementPanel.php b/src/applications/diffusion/management/DiffusionRepositoryClusterManagementPanel.php
--- a/src/applications/diffusion/management/DiffusionRepositoryClusterManagementPanel.php
+++ b/src/applications/diffusion/management/DiffusionRepositoryClusterManagementPanel.php
@@ -10,7 +10,7 @@
}
public function getManagementPanelOrder() {
- return 12345;
+ return 600;
}
public function buildManagementPanelContent() {
diff --git a/src/applications/diffusion/management/DiffusionRepositoryHistoryManagementPanel.php b/src/applications/diffusion/management/DiffusionRepositoryHistoryManagementPanel.php
new file mode 100644
--- /dev/null
+++ b/src/applications/diffusion/management/DiffusionRepositoryHistoryManagementPanel.php
@@ -0,0 +1,21 @@
+<?php
+
+final class DiffusionRepositoryHistoryManagementPanel
+ extends DiffusionRepositoryManagementPanel {
+
+ const PANELKEY = 'history';
+
+ public function getManagementPanelLabel() {
+ return pht('History');
+ }
+
+ public function getManagementPanelOrder() {
+ return 900;
+ }
+
+ public function buildManagementPanelContent() {
+ return $this->newTimeline();
+ }
+
+
+}
diff --git a/src/applications/diffusion/management/DiffusionRepositoryManagementPanel.php b/src/applications/diffusion/management/DiffusionRepositoryManagementPanel.php
--- a/src/applications/diffusion/management/DiffusionRepositoryManagementPanel.php
+++ b/src/applications/diffusion/management/DiffusionRepositoryManagementPanel.php
@@ -5,6 +5,7 @@
private $viewer;
private $repository;
+ private $controller;
final public function setViewer(PhabricatorUser $viewer) {
$this->viewer = $viewer;
@@ -24,6 +25,11 @@
return $this->repository;
}
+ final public function setController(PhabricatorController $controller) {
+ $this->controller = $controller;
+ return $this;
+ }
+
final public function getManagementPanelKey() {
return $this->getPhobjectClassConstant('PANELKEY');
}
@@ -32,6 +38,47 @@
abstract public function getManagementPanelOrder();
abstract public function buildManagementPanelContent();
+ protected function buildManagementPanelActions() {
+ return array();
+ }
+
+ final protected function newActions() {
+ $actions = $this->buildManagementPanelActions();
+ if (!$actions) {
+ return null;
+ }
+
+ $viewer = $this->getViewer();
+
+ $action_list = id(new PhabricatorActionListView())
+ ->setViewer($viewer);
+
+ foreach ($actions as $action) {
+ $action_list->addAction($action);
+ }
+
+ return $action_list;
+ }
+
+ public function buildManagementPanelCurtain() {
+ // TODO: Delete or fix this, curtains always render in the left gutter
+ // at the moment.
+ return null;
+
+ $actions = $this->newActions();
+ if (!$actions) {
+ return null;
+ }
+
+ $viewer = $this->getViewer();
+
+ $curtain = id(new PHUICurtainView())
+ ->setViewer($viewer)
+ ->setActionList($actions);
+
+ return $curtain;
+ }
+
public static function getAllPanels() {
return id(new PhutilClassMapQuery())
->setAncestorClass(__CLASS__)
@@ -40,4 +87,15 @@
->execute();
}
+ final protected function newBox($header_text, $body) {
+ return id(new PHUIObjectBoxView())
+ ->setHeaderText($header_text)
+ ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
+ ->appendChild($body);
+ }
+
+ final protected function newTimeline() {
+ return $this->controller->newTimeline($this->getRepository());
+ }
+
}
diff --git a/src/applications/diffusion/management/DiffusionRepositoryPoliciesManagementPanel.php b/src/applications/diffusion/management/DiffusionRepositoryPoliciesManagementPanel.php
new file mode 100644
--- /dev/null
+++ b/src/applications/diffusion/management/DiffusionRepositoryPoliciesManagementPanel.php
@@ -0,0 +1,73 @@
+<?php
+
+final class DiffusionRepositoryPoliciesManagementPanel
+ extends DiffusionRepositoryManagementPanel {
+
+ const PANELKEY = 'policies';
+
+ public function getManagementPanelLabel() {
+ return pht('Policies');
+ }
+
+ public function getManagementPanelOrder() {
+ return 300;
+ }
+
+ protected function buildManagementPanelActions() {
+ $repository = $this->getRepository();
+ $viewer = $this->getViewer();
+
+ $can_edit = PhabricatorPolicyFilter::hasCapability(
+ $viewer,
+ $repository,
+ PhabricatorPolicyCapability::CAN_EDIT);
+
+ $edit_uri = $repository->getPathURI('manage/');
+
+ return array(
+ id(new PhabricatorActionView())
+ ->setIcon('fa-pencil')
+ ->setName(pht('Edit Policies'))
+ ->setHref($edit_uri)
+ ->setDisabled(!$can_edit)
+ ->setWorkflow(!$can_edit),
+ );
+ }
+
+ public function buildManagementPanelContent() {
+ $repository = $this->getRepository();
+ $viewer = $this->getViewer();
+
+ $view = id(new PHUIPropertyListView())
+ ->setViewer($viewer)
+ ->setActionList($this->newActions());
+
+ $descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions(
+ $viewer,
+ $repository);
+
+ $view_parts = array();
+ if (PhabricatorSpacesNamespaceQuery::getViewerSpacesExist($viewer)) {
+ $space_phid = PhabricatorSpacesNamespaceQuery::getObjectSpacePHID(
+ $repository);
+ $view_parts[] = $viewer->renderHandle($space_phid);
+ }
+ $view_parts[] = $descriptions[PhabricatorPolicyCapability::CAN_VIEW];
+
+ $view->addProperty(
+ pht('Visible To'),
+ phutil_implode_html(" \xC2\xB7 ", $view_parts));
+
+ $view->addProperty(
+ pht('Editable By'),
+ $descriptions[PhabricatorPolicyCapability::CAN_EDIT]);
+
+ $pushable = $repository->isHosted()
+ ? $descriptions[DiffusionPushCapability::CAPABILITY]
+ : phutil_tag('em', array(), pht('Not a Hosted Repository'));
+ $view->addProperty(pht('Pushable By'), $pushable);
+
+ return $this->newBox(pht('Policies'), $view);
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Wed, Mar 12, 3:41 PM (1 d, 23 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7581602
Default Alt Text
D15737.id37934.diff (15 KB)

Event Timeline