From 6dd191a3c135fe0ab05c88455f578d8823e1db9d Mon Sep 17 00:00:00 2001 From: epriestley Date: Sat, 8 Mar 2014 09:13:51 -0800 Subject: [PATCH] Allow configuration of Differential custom fields Summary: Ref T2222. Ref T3886. This is a little early for general use, but the message parse/generate stuff requires CustomFields and FieldSpecifications to be closely aligned, so this provides at least a plausbile approach for any installs that run into trouble. Test Plan: Viewed config; reordered fields. Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T2222, T3886 Differential Revision: https://secure.phabricator.com/D8450 --- .../PhabricatorDifferentialConfigOptions.php | 53 +++++++++++++++++++ .../DifferentialAsanaRepresentationField.php | 4 ++ .../customfield/DifferentialAuditorsField.php | 4 ++ .../customfield/DifferentialAuthorField.php | 4 ++ .../DifferentialBlameRevisionField.php | 2 +- .../customfield/DifferentialCommitsField.php | 4 ++ .../DifferentialDependenciesField.php | 4 ++ .../DifferentialDependsOnField.php | 4 ++ .../DifferentialJIRAIssuesField.php | 4 ++ .../DifferentialManiphestTasksField.php | 4 ++ .../DifferentialProjectReviewersField.php | 4 ++ .../DifferentialReviewedByField.php | 4 ++ .../DifferentialRevisionIDField.php | 4 ++ .../storage/DifferentialRevision.php | 38 +------------ 14 files changed, 99 insertions(+), 38 deletions(-) diff --git a/src/applications/differential/config/PhabricatorDifferentialConfigOptions.php b/src/applications/differential/config/PhabricatorDifferentialConfigOptions.php index 6e088d32d9..7b9533d41e 100644 --- a/src/applications/differential/config/PhabricatorDifferentialConfigOptions.php +++ b/src/applications/differential/config/PhabricatorDifferentialConfigOptions.php @@ -12,7 +12,60 @@ final class PhabricatorDifferentialConfigOptions } public function getOptions() { + $custom_field_type = 'custom:PhabricatorCustomFieldConfigOptionType'; + + $fields = array( + new DifferentialTitleField(), + new DifferentialSummaryField(), + new DifferentialTestPlanField(), + new DifferentialAuthorField(), + new DifferentialReviewersField(), + new DifferentialProjectReviewersField(), + new DifferentialReviewedByField(), + new DifferentialSubscribersField(), + new DifferentialRepositoryField(), + new DifferentialLintField(), + new DifferentialUnitField(), + new DifferentialViewPolicyField(), + new DifferentialEditPolicyField(), + + new DifferentialDependsOnField(), + new DifferentialDependenciesField(), + new DifferentialManiphestTasksField(), + new DifferentialCommitsField(), + + new DifferentialJIRAIssuesField(), + new DifferentialAsanaRepresentationField(), + + new DifferentialBlameRevisionField(), + new DifferentialPathField(), + new DifferentialHostField(), + new DifferentialRevertPlanField(), + + new DifferentialApplyPatchField(), + + new DifferentialRevisionIDField(), + ); + + $default_fields = array(); + foreach ($fields as $field) { + $default_fields[$field->getFieldKey()] = array( + 'disabled' => $field->shouldDisableByDefault(), + ); + } + return array( + $this->newOption( + 'differential.fields', + $custom_field_type, + $default_fields) + ->setCustomData( + id(new DifferentialRevision())->getCustomFieldBaseClass()) + ->setDescription( + pht( + "Select and reorder revision fields.\n\n". + "NOTE: This feature is under active development and subject ". + "to change.")), $this->newOption( 'differential.whitespace-matters', 'list', diff --git a/src/applications/differential/customfield/DifferentialAsanaRepresentationField.php b/src/applications/differential/customfield/DifferentialAsanaRepresentationField.php index 7167b6cd38..c83b9ecd15 100644 --- a/src/applications/differential/customfield/DifferentialAsanaRepresentationField.php +++ b/src/applications/differential/customfield/DifferentialAsanaRepresentationField.php @@ -11,6 +11,10 @@ final class DifferentialAsanaRepresentationField return pht('In Asana'); } + public function canDisableField() { + return false; + } + public function getFieldDescription() { return pht('Shows revision representation in Asana.'); } diff --git a/src/applications/differential/customfield/DifferentialAuditorsField.php b/src/applications/differential/customfield/DifferentialAuditorsField.php index 6bb32523ed..c756c1e9e9 100644 --- a/src/applications/differential/customfield/DifferentialAuditorsField.php +++ b/src/applications/differential/customfield/DifferentialAuditorsField.php @@ -32,6 +32,10 @@ final class DifferentialAuditorsField return true; } + public function canDisableField() { + return false; + } + public function getRequiredHandlePHIDsForCommitMessage() { return nonempty($this->getValue(), array()); } diff --git a/src/applications/differential/customfield/DifferentialAuthorField.php b/src/applications/differential/customfield/DifferentialAuthorField.php index 4496aabcae..6e14c8bbae 100644 --- a/src/applications/differential/customfield/DifferentialAuthorField.php +++ b/src/applications/differential/customfield/DifferentialAuthorField.php @@ -15,6 +15,10 @@ final class DifferentialAuthorField return pht('Stores the revision author.'); } + public function canDisableField() { + return false; + } + public function shouldAppearInPropertyView() { return true; } diff --git a/src/applications/differential/customfield/DifferentialBlameRevisionField.php b/src/applications/differential/customfield/DifferentialBlameRevisionField.php index 3c894c0282..c308114a87 100644 --- a/src/applications/differential/customfield/DifferentialBlameRevisionField.php +++ b/src/applications/differential/customfield/DifferentialBlameRevisionField.php @@ -107,7 +107,7 @@ final class DifferentialBlameRevisionField ); } - public function renderCommitMessageValue() { + public function renderCommitMessageValue(array $handles) { return $this->getValue(); } diff --git a/src/applications/differential/customfield/DifferentialCommitsField.php b/src/applications/differential/customfield/DifferentialCommitsField.php index d030dcedb1..377bac50d1 100644 --- a/src/applications/differential/customfield/DifferentialCommitsField.php +++ b/src/applications/differential/customfield/DifferentialCommitsField.php @@ -11,6 +11,10 @@ final class DifferentialCommitsField return pht('Commits'); } + public function canDisableField() { + return false; + } + public function getFieldDescription() { return pht('Shows associated commits.'); } diff --git a/src/applications/differential/customfield/DifferentialDependenciesField.php b/src/applications/differential/customfield/DifferentialDependenciesField.php index 575110a885..5b50a4e624 100644 --- a/src/applications/differential/customfield/DifferentialDependenciesField.php +++ b/src/applications/differential/customfield/DifferentialDependenciesField.php @@ -11,6 +11,10 @@ final class DifferentialDependenciesField return pht('Dependencies'); } + public function canDisableField() { + return false; + } + public function getFieldDescription() { return pht('Lists revisions this one is depended on by.'); } diff --git a/src/applications/differential/customfield/DifferentialDependsOnField.php b/src/applications/differential/customfield/DifferentialDependsOnField.php index a6b2c998b5..34ae563e16 100644 --- a/src/applications/differential/customfield/DifferentialDependsOnField.php +++ b/src/applications/differential/customfield/DifferentialDependsOnField.php @@ -11,6 +11,10 @@ final class DifferentialDependsOnField return pht('Depends On'); } + public function canDisableField() { + return false; + } + public function getFieldDescription() { return pht('Lists revisions this one depends on.'); } diff --git a/src/applications/differential/customfield/DifferentialJIRAIssuesField.php b/src/applications/differential/customfield/DifferentialJIRAIssuesField.php index cdae1b4785..bcd4cbff81 100644 --- a/src/applications/differential/customfield/DifferentialJIRAIssuesField.php +++ b/src/applications/differential/customfield/DifferentialJIRAIssuesField.php @@ -13,6 +13,10 @@ final class DifferentialJIRAIssuesField return 'jira.issues'; } + public function canDisableField() { + return false; + } + public function getValueForStorage() { return json_encode($this->getValue()); } diff --git a/src/applications/differential/customfield/DifferentialManiphestTasksField.php b/src/applications/differential/customfield/DifferentialManiphestTasksField.php index 2c2b3e9e60..e01defb619 100644 --- a/src/applications/differential/customfield/DifferentialManiphestTasksField.php +++ b/src/applications/differential/customfield/DifferentialManiphestTasksField.php @@ -11,6 +11,10 @@ final class DifferentialManiphestTasksField return 'maniphestTaskPHIDs'; } + public function canDisableField() { + return false; + } + public function getFieldName() { return pht('Maniphest Tasks'); } diff --git a/src/applications/differential/customfield/DifferentialProjectReviewersField.php b/src/applications/differential/customfield/DifferentialProjectReviewersField.php index deacef4dab..aff5644a52 100644 --- a/src/applications/differential/customfield/DifferentialProjectReviewersField.php +++ b/src/applications/differential/customfield/DifferentialProjectReviewersField.php @@ -19,6 +19,10 @@ final class DifferentialProjectReviewersField return true; } + public function canDisableField() { + return false; + } + public function renderPropertyViewLabel() { return $this->getFieldName(); } diff --git a/src/applications/differential/customfield/DifferentialReviewedByField.php b/src/applications/differential/customfield/DifferentialReviewedByField.php index a798e0969e..9c905712d8 100644 --- a/src/applications/differential/customfield/DifferentialReviewedByField.php +++ b/src/applications/differential/customfield/DifferentialReviewedByField.php @@ -27,6 +27,10 @@ final class DifferentialReviewedByField return false; } + public function canDisableField() { + return true; + } + protected function readValueFromRevision( DifferentialRevision $revision) { diff --git a/src/applications/differential/customfield/DifferentialRevisionIDField.php b/src/applications/differential/customfield/DifferentialRevisionIDField.php index f4e8110b98..f835dcd769 100644 --- a/src/applications/differential/customfield/DifferentialRevisionIDField.php +++ b/src/applications/differential/customfield/DifferentialRevisionIDField.php @@ -4,6 +4,10 @@ final class DifferentialRevisionIDField extends DifferentialCustomField { public function getFieldKey() { + return 'differential:revision-id'; + } + + public function getFieldKeyForConduit() { return 'revisionID'; } diff --git a/src/applications/differential/storage/DifferentialRevision.php b/src/applications/differential/storage/DifferentialRevision.php index 10b4105c3f..df1d99c418 100644 --- a/src/applications/differential/storage/DifferentialRevision.php +++ b/src/applications/differential/storage/DifferentialRevision.php @@ -481,43 +481,7 @@ final class DifferentialRevision extends DifferentialDAO public function getCustomFieldSpecificationForRole($role) { - $fields = array( - new DifferentialAuthorField(), - - new DifferentialTitleField(), - new DifferentialSummaryField(), - new DifferentialTestPlanField(), - new DifferentialReviewersField(), - new DifferentialProjectReviewersField(), - new DifferentialSubscribersField(), - new DifferentialRepositoryField(), - new DifferentialViewPolicyField(), - new DifferentialEditPolicyField(), - - new DifferentialDependsOnField(), - new DifferentialDependenciesField(), - new DifferentialManiphestTasksField(), - new DifferentialCommitsField(), - - new DifferentialJIRAIssuesField(), - new DifferentialAsanaRepresentationField(), - - new DifferentialBlameRevisionField(), - new DifferentialPathField(), - new DifferentialHostField(), - new DifferentialRevertPlanField(), - - new DifferentialApplyPatchField(), - ); - - $result = array(); - foreach ($fields as $field) { - $result[$field->getFieldKey()] = array( - 'disabled' => $field->shouldDisableByDefault(), - ); - } - - return $result; + return PhabricatorEnv::getEnvConfig('differential.fields'); } public function getCustomFieldBaseClass() {