Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15195986
D14790.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Referenced Files
None
Subscribers
None
D14790.diff
View Options
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
@@ -1887,6 +1887,7 @@
'PhabricatorConduitConsoleController' => 'applications/conduit/controller/PhabricatorConduitConsoleController.php',
'PhabricatorConduitController' => 'applications/conduit/controller/PhabricatorConduitController.php',
'PhabricatorConduitDAO' => 'applications/conduit/storage/PhabricatorConduitDAO.php',
+ 'PhabricatorConduitEditField' => 'applications/transactions/editfield/PhabricatorConduitEditField.php',
'PhabricatorConduitListController' => 'applications/conduit/controller/PhabricatorConduitListController.php',
'PhabricatorConduitLogController' => 'applications/conduit/controller/PhabricatorConduitLogController.php',
'PhabricatorConduitLogQuery' => 'applications/conduit/query/PhabricatorConduitLogQuery.php',
@@ -6004,6 +6005,7 @@
'PhabricatorConduitConsoleController' => 'PhabricatorConduitController',
'PhabricatorConduitController' => 'PhabricatorController',
'PhabricatorConduitDAO' => 'PhabricatorLiskDAO',
+ 'PhabricatorConduitEditField' => 'PhabricatorEditField',
'PhabricatorConduitListController' => 'PhabricatorConduitController',
'PhabricatorConduitLogController' => 'PhabricatorConduitController',
'PhabricatorConduitLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
diff --git a/src/applications/owners/editor/PhabricatorOwnersPackageEditEngine.php b/src/applications/owners/editor/PhabricatorOwnersPackageEditEngine.php
--- a/src/applications/owners/editor/PhabricatorOwnersPackageEditEngine.php
+++ b/src/applications/owners/editor/PhabricatorOwnersPackageEditEngine.php
@@ -18,7 +18,8 @@
}
protected function newObjectQuery() {
- return id(new PhabricatorOwnersPackageQuery());
+ return id(new PhabricatorOwnersPackageQuery())
+ ->needPaths(true);
}
protected function getObjectCreateTitleText($object) {
@@ -81,6 +82,20 @@
->setTransactionType(
PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION)
->setValue($object->getDescription()),
+ id(new PhabricatorSelectEditField())
+ ->setKey('status')
+ ->setLabel(pht('Status'))
+ ->setDescription(pht('Archive or enable the package.'))
+ ->setTransactionType(PhabricatorOwnersPackageTransaction::TYPE_STATUS)
+ ->setIsConduitOnly(true)
+ ->setValue($object->getStatus())
+ ->setOptions($object->getStatusNameMap()),
+ id(new PhabricatorConduitEditField())
+ ->setKey('paths.set')
+ ->setLabel(pht('Paths'))
+ ->setDescription(pht('Set paths for this package.'))
+ ->setIsConduitOnly(true)
+ ->setTransactionType(PhabricatorOwnersPackageTransaction::TYPE_PATHS),
);
}
diff --git a/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php b/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php
--- a/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php
+++ b/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php
@@ -54,9 +54,14 @@
switch ($xaction->getTransactionType()) {
case PhabricatorOwnersPackageTransaction::TYPE_NAME:
case PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION:
- case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
case PhabricatorOwnersPackageTransaction::TYPE_STATUS:
return $xaction->getNewValue();
+ case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
+ $new = $xaction->getNewValue();
+ foreach ($new as $key => $info) {
+ $new[$key]['excluded'] = (int)idx($info, 'excluded');
+ }
+ return $new;
case PhabricatorOwnersPackageTransaction::TYPE_AUDITING:
return (int)$xaction->getNewValue();
case PhabricatorOwnersPackageTransaction::TYPE_OWNERS:
@@ -198,6 +203,82 @@
$errors[] = $error;
}
break;
+ case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
+ $old = mpull($object->getPaths(), 'getRef');
+ foreach ($xactions as $xaction) {
+ $new = $xaction->getNewValue();
+
+ // Check that we have a list of paths.
+ if (!is_array($new)) {
+ $errors[] = new PhabricatorApplicationTransactionValidationError(
+ $type,
+ pht('Invalid'),
+ pht('Path specification must be a list of paths.'),
+ $xaction);
+ continue;
+ }
+
+ // Check that each item in the list is formatted properly.
+ $type_exception = null;
+ foreach ($new as $key => $value) {
+ try {
+ PhutilTypeSpec::checkMap(
+ $value,
+ array(
+ 'repositoryPHID' => 'string',
+ 'path' => 'string',
+ 'excluded' => 'optional wild',
+ ));
+ } catch (PhutilTypeCheckException $ex) {
+ $errors[] = new PhabricatorApplicationTransactionValidationError(
+ $type,
+ pht('Invalid'),
+ pht(
+ 'Path specification list contains invalid value '.
+ 'in key "%s": %s.',
+ $key,
+ $ex->getMessage()),
+ $xaction);
+ $type_exception = $ex;
+ }
+ }
+
+ if ($type_exception) {
+ continue;
+ }
+
+ // Check that any new paths reference legitimate repositories which
+ // the viewer has permission to see.
+ list($rem, $add) = PhabricatorOwnersPath::getTransactionValueChanges(
+ $old,
+ $new);
+
+ if ($add) {
+ $repository_phids = ipull($add, 'repositoryPHID');
+
+ $repositories = id(new PhabricatorRepositoryQuery())
+ ->setViewer($this->getActor())
+ ->withPHIDs($repository_phids)
+ ->execute();
+ $repositories = mpull($repositories, null, 'getPHID');
+
+ foreach ($add as $ref) {
+ $repository_phid = $ref['repositoryPHID'];
+ if (isset($repositories[$repository_phid])) {
+ continue;
+ }
+
+ $errors[] = new PhabricatorApplicationTransactionValidationError(
+ $type,
+ pht('Invalid'),
+ pht(
+ 'Path specification list references repository PHID "%s", '.
+ 'but that is not a valid, visible repository.',
+ $repository_phid));
+ }
+ }
+ }
+ break;
}
return $errors;
diff --git a/src/applications/owners/engineextension/PhabricatorOwnersPathsSearchEngineAttachment.php b/src/applications/owners/engineextension/PhabricatorOwnersPathsSearchEngineAttachment.php
--- a/src/applications/owners/engineextension/PhabricatorOwnersPathsSearchEngineAttachment.php
+++ b/src/applications/owners/engineextension/PhabricatorOwnersPathsSearchEngineAttachment.php
@@ -23,7 +23,7 @@
$list[] = array(
'repositoryPHID' => $path->getRepositoryPHID(),
'path' => $path->getPath(),
- 'isExcluded' => (bool)$path->getExcluded(),
+ 'excluded' => (bool)$path->getExcluded(),
);
}
diff --git a/src/applications/transactions/editfield/PhabricatorConduitEditField.php b/src/applications/transactions/editfield/PhabricatorConduitEditField.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/editfield/PhabricatorConduitEditField.php
@@ -0,0 +1,14 @@
+<?php
+
+final class PhabricatorConduitEditField
+ extends PhabricatorEditField {
+
+ protected function newControl() {
+ return null;
+ }
+
+ protected function newHTTPParameterType() {
+ return null;
+ }
+
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Feb 23, 3:47 PM (10 h, 2 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7186879
Default Alt Text
D14790.diff (7 KB)
Attached To
Mode
D14790: Support editing statuses and paths in Owners via Conduit API
Attached
Detach File
Event Timeline
Log In to Comment