Page MenuHomePhabricator

D14790.diff
No OneTemporary

D14790.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
@@ -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

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)

Event Timeline