Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/applications/differential/customfield/DifferentialManiphestTasksField.php b/src/applications/differential/customfield/DifferentialManiphestTasksField.php
index 1724338d97..8e70f1da4d 100644
--- a/src/applications/differential/customfield/DifferentialManiphestTasksField.php
+++ b/src/applications/differential/customfield/DifferentialManiphestTasksField.php
@@ -1,111 +1,48 @@
<?php
final class DifferentialManiphestTasksField
extends DifferentialCoreCustomField {
public function getFieldKey() {
return 'differential:maniphest-tasks';
}
- public function getFieldKeyForConduit() {
- return 'maniphestTaskPHIDs';
- }
-
public function canDisableField() {
return false;
}
public function getFieldName() {
return pht('Maniphest Tasks');
}
public function getFieldDescription() {
return pht('Lists associated tasks.');
}
public function shouldAppearInPropertyView() {
return true;
}
public function renderPropertyViewLabel() {
return $this->getFieldName();
}
protected function readValueFromRevision(DifferentialRevision $revision) {
if (!$revision->getPHID()) {
return array();
}
return PhabricatorEdgeQuery::loadDestinationPHIDs(
$revision->getPHID(),
DifferentialRevisionHasTaskEdgeType::EDGECONST);
}
- public function getApplicationTransactionType() {
- return PhabricatorTransactions::TYPE_EDGE;
- }
-
- public function getApplicationTransactionMetadata() {
- return array(
- 'edge:type' => DifferentialRevisionHasTaskEdgeType::EDGECONST,
- );
- }
-
- public function getNewValueForApplicationTransactions() {
- $edges = array();
- foreach ($this->getValue() as $phid) {
- $edges[$phid] = $phid;
- }
-
- return array('=' => $edges);
- }
-
public function getRequiredHandlePHIDsForPropertyView() {
return $this->getValue();
}
public function renderPropertyViewValue(array $handles) {
return $this->renderHandleList($handles);
}
- public function shouldAppearInCommitMessage() {
- return true;
- }
-
- public function shouldAllowEditInCommitMessage() {
- return true;
- }
-
- public function getCommitMessageLabels() {
- return array(
- 'Maniphest Task',
- 'Maniphest Tasks',
- );
- }
-
- public function parseValueFromCommitMessage($value) {
- return $this->parseObjectList(
- $value,
- array(
- ManiphestTaskPHIDType::TYPECONST,
- ));
- }
-
- public function getRequiredHandlePHIDsForCommitMessage() {
- return $this->getRequiredHandlePHIDsForPropertyView();
- }
-
- public function renderCommitMessageValue(array $handles) {
- return $this->renderObjectList($handles);
- }
-
- public function getProTips() {
- return array(
- pht(
- 'Write "%s" in your summary to automatically close the '.
- 'corresponding task when this change lands.',
- 'Fixes T123'),
- );
- }
-
}
diff --git a/src/applications/differential/customfield/DifferentialProjectReviewersField.php b/src/applications/differential/customfield/DifferentialProjectReviewersField.php
index c900f72659..87ea0c34a3 100644
--- a/src/applications/differential/customfield/DifferentialProjectReviewersField.php
+++ b/src/applications/differential/customfield/DifferentialProjectReviewersField.php
@@ -1,69 +1,60 @@
<?php
final class DifferentialProjectReviewersField
extends DifferentialCustomField {
public function getFieldKey() {
return 'differential:project-reviewers';
}
public function getFieldName() {
return pht('Group Reviewers');
}
public function getFieldDescription() {
return pht('Display project reviewers.');
}
public function shouldAppearInPropertyView() {
return true;
}
public function canDisableField() {
return false;
}
public function renderPropertyViewLabel() {
return $this->getFieldName();
}
public function getRequiredHandlePHIDsForPropertyView() {
return mpull($this->getProjectReviewers(), 'getReviewerPHID');
}
public function renderPropertyViewValue(array $handles) {
$reviewers = $this->getProjectReviewers();
if (!$reviewers) {
return null;
}
$view = id(new DifferentialReviewersView())
->setUser($this->getViewer())
->setReviewers($reviewers)
->setHandles($handles);
// TODO: Active diff stuff.
return $view;
}
private function getProjectReviewers() {
$reviewers = array();
foreach ($this->getObject()->getReviewerStatus() as $reviewer) {
if (!$reviewer->isUser()) {
$reviewers[] = $reviewer;
}
}
return $reviewers;
}
- public function getProTips() {
- return array(
- pht(
- 'You can add a project as a subscriber or reviewer by writing '.
- '"%s" in the appropriate field.',
- '#projectname'),
- );
- }
-
}
diff --git a/src/applications/differential/editor/DifferentialRevisionEditEngine.php b/src/applications/differential/editor/DifferentialRevisionEditEngine.php
index 382672b855..8e15238661 100644
--- a/src/applications/differential/editor/DifferentialRevisionEditEngine.php
+++ b/src/applications/differential/editor/DifferentialRevisionEditEngine.php
@@ -1,207 +1,222 @@
<?php
final class DifferentialRevisionEditEngine
extends PhabricatorEditEngine {
private $diff;
const ENGINECONST = 'differential.revision';
const KEY_UPDATE = 'update';
public function getEngineName() {
return pht('Revisions');
}
public function getSummaryHeader() {
return pht('Configure Revision Forms');
}
public function getSummaryText() {
return pht(
'Configure creation and editing revision forms in Differential.');
}
public function getEngineApplicationClass() {
return 'PhabricatorDifferentialApplication';
}
protected function supportsEditEngineConfiguration() {
return false;
}
protected function newEditableObject() {
$viewer = $this->getViewer();
return DifferentialRevision::initializeNewRevision($viewer);
}
protected function newObjectQuery() {
return id(new DifferentialRevisionQuery())
->needActiveDiffs(true)
->needReviewerStatus(true);
}
protected function getObjectCreateTitleText($object) {
return pht('Create New Revision');
}
protected function getObjectEditTitleText($object) {
$monogram = $object->getMonogram();
$title = $object->getTitle();
$diff = $this->getDiff();
if ($diff) {
return pht('Update Revision %s: %s', $monogram, $title);
} else {
return pht('Edit Revision %s: %s', $monogram, $title);
}
}
protected function getObjectEditShortText($object) {
return $object->getMonogram();
}
protected function getObjectCreateShortText() {
return pht('Create Revision');
}
protected function getObjectName() {
return pht('Revision');
}
protected function getObjectViewURI($object) {
return $object->getURI();
}
public function setDiff(DifferentialDiff $diff) {
$this->diff = $diff;
return $this;
}
public function getDiff() {
return $this->diff;
}
protected function buildCustomEditFields($object) {
$plan_required = PhabricatorEnv::getEnvConfig(
'differential.require-test-plan-field');
$plan_enabled = $this->isCustomFieldEnabled(
$object,
'differential:test-plan');
$diff = $this->getDiff();
if ($diff) {
$diff_phid = $diff->getPHID();
} else {
$diff_phid = null;
}
$is_create = $this->getIsCreate();
$is_update = ($diff && !$is_create);
$fields = array();
$fields[] = id(new PhabricatorHandlesEditField())
->setKey(self::KEY_UPDATE)
->setLabel(pht('Update Diff'))
->setDescription(pht('New diff to create or update the revision with.'))
->setConduitDescription(pht('Create or update a revision with a diff.'))
->setConduitTypeDescription(pht('PHID of the diff.'))
->setTransactionType(DifferentialTransaction::TYPE_UPDATE)
->setHandleParameterType(new AphrontPHIDListHTTPParameterType())
->setSingleValue($diff_phid)
->setIsConduitOnly(!$diff)
->setIsReorderable(false)
->setIsDefaultable(false)
->setIsInvisible(true)
->setIsLockable(false);
if ($is_update) {
$fields[] = id(new PhabricatorInstructionsEditField())
->setKey('update.help')
->setValue(pht('Describe the updates you have made to the diff.'));
$fields[] = id(new PhabricatorCommentEditField())
->setKey('update.comment')
->setLabel(pht('Comment'))
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT)
->setIsWebOnly(true)
->setDescription(pht('Comments providing context for the update.'));
$fields[] = id(new PhabricatorSubmitEditField())
->setKey('update.submit')
->setValue($this->getObjectEditButtonText($object));
$fields[] = id(new PhabricatorDividerEditField())
->setKey('update.note');
}
$fields[] = id(new PhabricatorTextEditField())
->setKey(DifferentialRevisionTitleTransaction::EDITKEY)
->setLabel(pht('Title'))
->setIsRequired(true)
->setTransactionType(
DifferentialRevisionTitleTransaction::TRANSACTIONTYPE)
->setDescription(pht('The title of the revision.'))
->setConduitDescription(pht('Retitle the revision.'))
->setConduitTypeDescription(pht('New revision title.'))
->setValue($object->getTitle());
$fields[] = id(new PhabricatorRemarkupEditField())
->setKey(DifferentialRevisionSummaryTransaction::EDITKEY)
->setLabel(pht('Summary'))
->setTransactionType(
DifferentialRevisionSummaryTransaction::TRANSACTIONTYPE)
->setDescription(pht('The summary of the revision.'))
->setConduitDescription(pht('Change the revision summary.'))
->setConduitTypeDescription(pht('New revision summary.'))
->setValue($object->getSummary());
if ($plan_enabled) {
$fields[] = id(new PhabricatorRemarkupEditField())
->setKey(DifferentialRevisionTestPlanTransaction::EDITKEY)
->setLabel(pht('Test Plan'))
->setIsRequired($plan_required)
->setTransactionType(
DifferentialRevisionTestPlanTransaction::TRANSACTIONTYPE)
->setDescription(
pht('Actions performed to verify the behavior of the change.'))
->setConduitDescription(pht('Update the revision test plan.'))
->setConduitTypeDescription(pht('New test plan.'))
->setValue($object->getTestPlan());
}
$fields[] = id(new PhabricatorDatasourceEditField())
->setKey(DifferentialRevisionReviewersTransaction::EDITKEY)
->setLabel(pht('Reviewers'))
->setDatasource(new DifferentialReviewerDatasource())
->setUseEdgeTransactions(true)
->setTransactionType(
DifferentialRevisionReviewersTransaction::TRANSACTIONTYPE)
->setDescription(pht('Reviewers for this revision.'))
->setConduitDescription(pht('Change the reviewers for this revision.'))
->setConduitTypeDescription(pht('New reviewers.'))
->setValue($object->getReviewerPHIDsForEdit());
$fields[] = id(new PhabricatorDatasourceEditField())
->setKey('repositoryPHID')
->setLabel(pht('Repository'))
->setDatasource(new DiffusionRepositoryDatasource())
->setTransactionType(
DifferentialRevisionRepositoryTransaction::TRANSACTIONTYPE)
->setDescription(pht('The repository the revision belongs to.'))
->setConduitDescription(pht('Change the repository for this revision.'))
->setConduitTypeDescription(pht('New repository.'))
->setSingleValue($object->getRepositoryPHID());
+ // This is a little flimsy, but allows "Maniphest Tasks: ..." to continue
+ // working properly in commit messages until we fully sort out T5873.
+ $fields[] = id(new PhabricatorHandlesEditField())
+ ->setKey('tasks')
+ ->setUseEdgeTransactions(true)
+ ->setIsConduitOnly(true)
+ ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
+ ->setMetadataValue(
+ 'edge:type',
+ DifferentialRevisionHasTaskEdgeType::EDGECONST)
+ ->setDescription(pht('Tasks associated with this revision.'))
+ ->setConduitDescription(pht('Change associated tasks.'))
+ ->setConduitTypeDescription(pht('List of tasks.'))
+ ->setValue(array());
+
return $fields;
}
private function isCustomFieldEnabled(DifferentialRevision $revision, $key) {
$field_list = PhabricatorCustomField::getObjectFields(
$revision,
PhabricatorCustomField::ROLE_VIEW);
$fields = $field_list->getFields();
return isset($fields[$key]);
}
}
diff --git a/src/applications/differential/field/DifferentialCommitMessageField.php b/src/applications/differential/field/DifferentialCommitMessageField.php
index e8478b6497..ebe10bcf88 100644
--- a/src/applications/differential/field/DifferentialCommitMessageField.php
+++ b/src/applications/differential/field/DifferentialCommitMessageField.php
@@ -1,191 +1,191 @@
<?php
abstract class DifferentialCommitMessageField
extends Phobject {
private $viewer;
private $customFieldStorage;
final public function setViewer(PhabricatorUser $viewer) {
$this->viewer = $viewer;
return $this;
}
final public function getViewer() {
return $this->viewer;
}
final public function setCustomFieldStorage(array $custom_field_storage) {
$this->customFieldStorage = $custom_field_storage;
return $this;
}
final public function getCustomFieldStorage() {
return $this->customFieldStorage;
}
abstract public function getFieldName();
abstract public function getFieldOrder();
public function isFieldEnabled() {
return true;
}
public function getFieldAliases() {
return array();
}
public function validateFieldValue($value) {
return;
}
public function parseFieldValue($value) {
return $value;
}
public function isFieldEditable() {
return true;
}
public function isTemplateField() {
return true;
}
public function readFieldValueFromConduit($value) {
return $this->readStringFieldValueFromConduit($value);
}
public function readFieldValueFromObject(DifferentialRevision $revision) {
return null;
}
public function renderFieldValue($value) {
if (!strlen($value)) {
return null;
}
return $value;
}
public function getFieldTransactions($value) {
if (!$this->isFieldEditable()) {
return array();
}
throw new PhutilMethodNotImplementedException();
}
final public function getCommitMessageFieldKey() {
return $this->getPhobjectClassConstant('FIELDKEY', 64);
}
final public static function newEnabledFields(PhabricatorUser $viewer) {
$fields = self::getAllFields();
$results = array();
foreach ($fields as $key => $field) {
$field = clone $field;
$field->setViewer($viewer);
if ($field->isFieldEnabled()) {
$results[$key] = $field;
}
}
return $results;
}
final public static function getAllFields() {
return id(new PhutilClassMapQuery())
->setAncestorClass(__CLASS__)
->setUniqueMethod('getCommitMessageFieldKey')
->setSortMethod('getFieldOrder')
->execute();
}
protected function raiseParseException($message) {
throw new DifferentialFieldParseException($message);
}
protected function raiseValidationException($message) {
throw new DifferentialFieldValidationException($message);
}
protected function parseObjectList(
$value,
array $types,
$allow_partial = false,
array $suffixes = array()) {
return id(new PhabricatorObjectListQuery())
->setViewer($this->getViewer())
->setAllowedTypes($types)
->setObjectList($value)
->setAllowPartialResults($allow_partial)
->setSuffixes($suffixes)
->execute();
}
protected function renderHandleList(array $phids, array $suffixes = array()) {
if (!$phids) {
return null;
}
$handles = $this->getViewer()->loadHandles($phids);
$out = array();
foreach ($handles as $handle) {
$phid = $handle->getPHID();
if ($handle->getPolicyFiltered()) {
$token = $phid;
} else if ($handle->isComplete()) {
$token = $handle->getCommandLineObjectName();
}
$suffix = idx($suffixes, $phid);
$token = $token.$suffix;
$out[] = $token;
}
return implode(', ', $out);
}
protected function readStringFieldValueFromConduit($value) {
if ($value === null) {
return $value;
}
if (!is_string($value)) {
throw new Exception(
pht(
'Field "%s" expects a string value, but received a value of type '.
'"%s".',
$this->getCommitMessageFieldKey(),
gettype($value)));
}
return $value;
}
protected function readStringListFieldValueFromConduit($value) {
if (!is_array($value)) {
throw new Exception(
pht(
'Field "%s" expects a list of strings, but received a value of type '.
'"%s".',
$this->getCommitMessageFieldKey(),
gettype($value)));
}
return $value;
}
protected function isCustomFieldEnabled($key) {
$field_list = PhabricatorCustomField::getObjectFields(
new DifferentialRevision(),
- DifferentialCustomField::ROLE_COMMITMESSAGE);
+ DifferentialCustomField::ROLE_DEFAULT);
$fields = $field_list->getFields();
return isset($fields[$key]);
}
}
diff --git a/src/applications/differential/field/DifferentialTasksCommitMessageField.php b/src/applications/differential/field/DifferentialTasksCommitMessageField.php
index 69101f5b95..eea0afef8d 100644
--- a/src/applications/differential/field/DifferentialTasksCommitMessageField.php
+++ b/src/applications/differential/field/DifferentialTasksCommitMessageField.php
@@ -1,61 +1,65 @@
<?php
final class DifferentialTasksCommitMessageField
extends DifferentialCommitMessageField {
const FIELDKEY = 'maniphestTaskPHIDs';
public function getFieldName() {
return pht('Maniphest Tasks');
}
public function getFieldOrder() {
return 8000;
}
public function getFieldAliases() {
return array(
'Task',
'Tasks',
'Maniphest Task',
);
}
public function isTemplateField() {
return false;
}
public function parseFieldValue($value) {
return $this->parseObjectList(
$value,
array(
ManiphestTaskPHIDType::TYPECONST,
));
}
public function readFieldValueFromObject(DifferentialRevision $revision) {
if (!$revision->getPHID()) {
return array();
}
$projects = PhabricatorEdgeQuery::loadDestinationPHIDs(
$revision->getPHID(),
DifferentialRevisionHasTaskEdgeType::EDGECONST);
$projects = array_reverse($projects);
return $projects;
}
public function readFieldValueFromConduit($value) {
return $this->readStringListFieldValueFromConduit($value);
}
public function renderFieldValue($value) {
return $this->renderHandleList($value);
}
public function getFieldTransactions($value) {
- // TODO: Implement this!
- return array();
+ return array(
+ array(
+ 'type' => 'tasks.set',
+ 'value' => $value,
+ ),
+ );
}
}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Mar 17, 1:40 AM (7 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
964156
Default Alt Text
(19 KB)

Event Timeline