mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-18 03:20:59 +01:00
Allow Drydock blueprints to be tagged and searched, and give types some little icons
Summary: Ref T10457. - Let blueprints be tagged so you can search and annotate them a little more easily. - Give each blueprint type an optional icon to make things a little easier to parse visually. Test Plan: - Tagged blueprints. - Searched by tags. - Looked at nice little icons. {F1139712} Reviewers: chad Reviewed By: chad Subscribers: yelirekim Maniphest Tasks: T10457 Differential Revision: https://secure.phabricator.com/D15392
This commit is contained in:
parent
1bdf988556
commit
fc0dc02bb9
11 changed files with 93 additions and 7 deletions
16
resources/sql/autopatches/20160303.drydock.3.edge.sql
Normal file
16
resources/sql/autopatches/20160303.drydock.3.edge.sql
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
CREATE TABLE {$NAMESPACE}_drydock.edge (
|
||||||
|
src VARBINARY(64) NOT NULL,
|
||||||
|
type INT UNSIGNED NOT NULL,
|
||||||
|
dst VARBINARY(64) NOT NULL,
|
||||||
|
dateCreated INT UNSIGNED NOT NULL,
|
||||||
|
seq INT UNSIGNED NOT NULL,
|
||||||
|
dataID INT UNSIGNED,
|
||||||
|
PRIMARY KEY (src, type, dst),
|
||||||
|
KEY `src` (src, type, dateCreated, seq),
|
||||||
|
UNIQUE KEY `key_dst` (dst, type, src)
|
||||||
|
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
||||||
|
|
||||||
|
CREATE TABLE {$NAMESPACE}_drydock.edgedata (
|
||||||
|
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}
|
||||||
|
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -966,6 +966,7 @@ phutil_register_library_map(array(
|
||||||
'DrydockResourceViewController' => 'applications/drydock/controller/DrydockResourceViewController.php',
|
'DrydockResourceViewController' => 'applications/drydock/controller/DrydockResourceViewController.php',
|
||||||
'DrydockSFTPFilesystemInterface' => 'applications/drydock/interface/filesystem/DrydockSFTPFilesystemInterface.php',
|
'DrydockSFTPFilesystemInterface' => 'applications/drydock/interface/filesystem/DrydockSFTPFilesystemInterface.php',
|
||||||
'DrydockSSHCommandInterface' => 'applications/drydock/interface/command/DrydockSSHCommandInterface.php',
|
'DrydockSSHCommandInterface' => 'applications/drydock/interface/command/DrydockSSHCommandInterface.php',
|
||||||
|
'DrydockSchemaSpec' => 'applications/drydock/storage/DrydockSchemaSpec.php',
|
||||||
'DrydockSlotLock' => 'applications/drydock/storage/DrydockSlotLock.php',
|
'DrydockSlotLock' => 'applications/drydock/storage/DrydockSlotLock.php',
|
||||||
'DrydockSlotLockException' => 'applications/drydock/exception/DrydockSlotLockException.php',
|
'DrydockSlotLockException' => 'applications/drydock/exception/DrydockSlotLockException.php',
|
||||||
'DrydockSlotLockFailureLogType' => 'applications/drydock/logtype/DrydockSlotLockFailureLogType.php',
|
'DrydockSlotLockFailureLogType' => 'applications/drydock/logtype/DrydockSlotLockFailureLogType.php',
|
||||||
|
@ -4975,6 +4976,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorPolicyInterface',
|
'PhabricatorPolicyInterface',
|
||||||
'PhabricatorCustomFieldInterface',
|
'PhabricatorCustomFieldInterface',
|
||||||
'PhabricatorNgramsInterface',
|
'PhabricatorNgramsInterface',
|
||||||
|
'PhabricatorProjectInterface',
|
||||||
),
|
),
|
||||||
'DrydockBlueprintController' => 'DrydockController',
|
'DrydockBlueprintController' => 'DrydockController',
|
||||||
'DrydockBlueprintCoreCustomField' => array(
|
'DrydockBlueprintCoreCustomField' => array(
|
||||||
|
@ -5094,6 +5096,7 @@ phutil_register_library_map(array(
|
||||||
'DrydockResourceViewController' => 'DrydockResourceController',
|
'DrydockResourceViewController' => 'DrydockResourceController',
|
||||||
'DrydockSFTPFilesystemInterface' => 'DrydockFilesystemInterface',
|
'DrydockSFTPFilesystemInterface' => 'DrydockFilesystemInterface',
|
||||||
'DrydockSSHCommandInterface' => 'DrydockCommandInterface',
|
'DrydockSSHCommandInterface' => 'DrydockCommandInterface',
|
||||||
|
'DrydockSchemaSpec' => 'PhabricatorConfigSchemaSpec',
|
||||||
'DrydockSlotLock' => 'DrydockDAO',
|
'DrydockSlotLock' => 'DrydockDAO',
|
||||||
'DrydockSlotLockException' => 'Exception',
|
'DrydockSlotLockException' => 'Exception',
|
||||||
'DrydockSlotLockFailureLogType' => 'DrydockLogType',
|
'DrydockSlotLockFailureLogType' => 'DrydockLogType',
|
||||||
|
|
|
@ -15,6 +15,10 @@ final class DrydockAlmanacServiceHostBlueprintImplementation
|
||||||
return pht('Almanac Hosts');
|
return pht('Almanac Hosts');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getBlueprintIcon() {
|
||||||
|
return 'fa-server';
|
||||||
|
}
|
||||||
|
|
||||||
public function getDescription() {
|
public function getDescription() {
|
||||||
return pht(
|
return pht(
|
||||||
'Allows Drydock to lease existing hosts defined in an Almanac service '.
|
'Allows Drydock to lease existing hosts defined in an Almanac service '.
|
||||||
|
|
|
@ -15,6 +15,10 @@ abstract class DrydockBlueprintImplementation extends Phobject {
|
||||||
abstract public function getBlueprintName();
|
abstract public function getBlueprintName();
|
||||||
abstract public function getDescription();
|
abstract public function getDescription();
|
||||||
|
|
||||||
|
public function getBlueprintIcon() {
|
||||||
|
return 'fa-map-o';
|
||||||
|
}
|
||||||
|
|
||||||
public function getFieldSpecifications() {
|
public function getFieldSpecifications() {
|
||||||
$fields = array();
|
$fields = array();
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,10 @@ final class DrydockWorkingCopyBlueprintImplementation
|
||||||
return pht('Working Copy');
|
return pht('Working Copy');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getBlueprintIcon() {
|
||||||
|
return 'fa-folder-open';
|
||||||
|
}
|
||||||
|
|
||||||
public function getDescription() {
|
public function getDescription() {
|
||||||
return pht('Allows Drydock to check out working copies of repositories.');
|
return pht('Allows Drydock to check out working copies of repositories.');
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,9 +52,15 @@ final class DrydockBlueprintEditController extends DrydockBlueprintController {
|
||||||
foreach ($implementations as $implementation_name => $implementation) {
|
foreach ($implementations as $implementation_name => $implementation) {
|
||||||
$disabled = !$implementation->isEnabled();
|
$disabled = !$implementation->isEnabled();
|
||||||
|
|
||||||
|
$impl_icon = $implementation->getBlueprintIcon();
|
||||||
|
$impl_name = $implementation->getBlueprintName();
|
||||||
|
|
||||||
|
$impl_icon = id(new PHUIIconView())
|
||||||
|
->setIcon($impl_icon, 'lightgreytext');
|
||||||
|
|
||||||
$control->addButton(
|
$control->addButton(
|
||||||
$implementation_name,
|
$implementation_name,
|
||||||
$implementation->getBlueprintName(),
|
array($impl_icon, ' ', $impl_name),
|
||||||
array(
|
array(
|
||||||
pht('Provides: %s', $implementation->getType()),
|
pht('Provides: %s', $implementation->getType()),
|
||||||
phutil_tag('br'),
|
phutil_tag('br'),
|
||||||
|
|
|
@ -127,8 +127,12 @@ final class DrydockBlueprintViewController extends DrydockBlueprintController {
|
||||||
private function buildPropertyListView(
|
private function buildPropertyListView(
|
||||||
DrydockBlueprint $blueprint,
|
DrydockBlueprint $blueprint,
|
||||||
PhabricatorActionListView $actions) {
|
PhabricatorActionListView $actions) {
|
||||||
|
$viewer = $this->getViewer();
|
||||||
|
|
||||||
|
$view = id(new PHUIPropertyListView())
|
||||||
|
->setUser($viewer)
|
||||||
|
->setObject($blueprint);
|
||||||
|
|
||||||
$view = new PHUIPropertyListView();
|
|
||||||
$view->setActionList($actions);
|
$view->setActionList($actions);
|
||||||
|
|
||||||
$view->addProperty(
|
$view->addProperty(
|
||||||
|
|
|
@ -77,15 +77,29 @@ final class DrydockBlueprintSearchEngine
|
||||||
assert_instances_of($blueprints, 'DrydockBlueprint');
|
assert_instances_of($blueprints, 'DrydockBlueprint');
|
||||||
|
|
||||||
$viewer = $this->requireViewer();
|
$viewer = $this->requireViewer();
|
||||||
|
|
||||||
|
if ($blueprints) {
|
||||||
|
$edge_query = id(new PhabricatorEdgeQuery())
|
||||||
|
->withSourcePHIDs(mpull($blueprints, 'getPHID'))
|
||||||
|
->withEdgeTypes(
|
||||||
|
array(
|
||||||
|
PhabricatorProjectObjectHasProjectEdgeType::EDGECONST,
|
||||||
|
));
|
||||||
|
|
||||||
|
$edge_query->execute();
|
||||||
|
}
|
||||||
|
|
||||||
$view = new PHUIObjectItemListView();
|
$view = new PHUIObjectItemListView();
|
||||||
|
|
||||||
foreach ($blueprints as $blueprint) {
|
foreach ($blueprints as $blueprint) {
|
||||||
|
$impl = $blueprint->getImplementation();
|
||||||
|
|
||||||
$item = id(new PHUIObjectItemView())
|
$item = id(new PHUIObjectItemView())
|
||||||
->setHeader($blueprint->getBlueprintName())
|
->setHeader($blueprint->getBlueprintName())
|
||||||
->setHref($this->getApplicationURI('/blueprint/'.$blueprint->getID()))
|
->setHref($blueprint->getURI())
|
||||||
->setObjectName(pht('Blueprint %d', $blueprint->getID()));
|
->setObjectName(pht('Blueprint %d', $blueprint->getID()));
|
||||||
|
|
||||||
if (!$blueprint->getImplementation()->isEnabled()) {
|
if (!$impl->isEnabled()) {
|
||||||
$item->setDisabled(true);
|
$item->setDisabled(true);
|
||||||
$item->addIcon('fa-chain-broken grey', pht('Implementation'));
|
$item->addIcon('fa-chain-broken grey', pht('Implementation'));
|
||||||
}
|
}
|
||||||
|
@ -95,7 +109,24 @@ final class DrydockBlueprintSearchEngine
|
||||||
$item->addIcon('fa-ban grey', pht('Disabled'));
|
$item->addIcon('fa-ban grey', pht('Disabled'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$item->addAttribute($blueprint->getImplementation()->getBlueprintName());
|
$impl_icon = $impl->getBlueprintIcon();
|
||||||
|
$impl_name = $impl->getBlueprintName();
|
||||||
|
|
||||||
|
$impl_icon = id(new PHUIIconView())
|
||||||
|
->setIcon($impl_icon, 'lightgreytext');
|
||||||
|
|
||||||
|
$item->addAttribute(array($impl_icon, ' ', $impl_name));
|
||||||
|
|
||||||
|
$phid = $blueprint->getPHID();
|
||||||
|
$project_phids = $edge_query->getDestinationPHIDs(array($phid));
|
||||||
|
if ($project_phids) {
|
||||||
|
$project_handles = $viewer->loadHandles($project_phids);
|
||||||
|
$item->addAttribute(
|
||||||
|
id(new PHUIHandleTagListView())
|
||||||
|
->setLimit(4)
|
||||||
|
->setSlim(true)
|
||||||
|
->setHandles($project_handles));
|
||||||
|
}
|
||||||
|
|
||||||
$view->addItem($item);
|
$view->addItem($item);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,8 @@ final class DrydockBlueprint extends DrydockDAO
|
||||||
PhabricatorApplicationTransactionInterface,
|
PhabricatorApplicationTransactionInterface,
|
||||||
PhabricatorPolicyInterface,
|
PhabricatorPolicyInterface,
|
||||||
PhabricatorCustomFieldInterface,
|
PhabricatorCustomFieldInterface,
|
||||||
PhabricatorNgramsInterface {
|
PhabricatorNgramsInterface,
|
||||||
|
PhabricatorProjectInterface {
|
||||||
|
|
||||||
protected $className;
|
protected $className;
|
||||||
protected $blueprintName;
|
protected $blueprintName;
|
||||||
|
@ -119,6 +120,11 @@ final class DrydockBlueprint extends DrydockDAO
|
||||||
return $log->save();
|
return $log->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getURI() {
|
||||||
|
$id = $this->getID();
|
||||||
|
return "/drydock/blueprint/{$id}/";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -( Allocating Resources )----------------------------------------------- */
|
/* -( Allocating Resources )----------------------------------------------- */
|
||||||
|
|
||||||
|
|
9
src/applications/drydock/storage/DrydockSchemaSpec.php
Normal file
9
src/applications/drydock/storage/DrydockSchemaSpec.php
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class DrydockSchemaSpec extends PhabricatorConfigSchemaSpec {
|
||||||
|
|
||||||
|
public function buildSchemata() {
|
||||||
|
$this->buildEdgeSchemata(new DrydockBlueprint());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -84,7 +84,6 @@ final class HarbormasterBuildPlanSearchEngine
|
||||||
|
|
||||||
$viewer = $this->requireViewer();
|
$viewer = $this->requireViewer();
|
||||||
|
|
||||||
|
|
||||||
if ($plans) {
|
if ($plans) {
|
||||||
$edge_query = id(new PhabricatorEdgeQuery())
|
$edge_query = id(new PhabricatorEdgeQuery())
|
||||||
->withSourcePHIDs(mpull($plans, 'getPHID'))
|
->withSourcePHIDs(mpull($plans, 'getPHID'))
|
||||||
|
|
Loading…
Reference in a new issue