mirror of
https://we.phorge.it/source/phorge.git
synced 2025-03-31 14:38:15 +02:00
Summary: Ref T13513. All queries now go through a reasonably minimal set of pathways and should have consistent behavior. Test Plan: - Loaded a revision with inlines. - Created a new empty inline, reloaded page, saw it vanish. - Created a new empty inline, typed draft text, did not save, reloaded page, saw draft present. - Created a new empty inline, typed draft text. Submitted feedback, got prompt, answered "Y", saw draft text submit. - Created a new empty inline, typed draft text, scrolled down to bottom of page, typed non-draft text, saw preview include draft text. - Marked and submitted "Done". - Used hide/show on inlines, verified state persisted. - Did much of the same stuff in Diffusion, where it all works the same way (except: there's no prompt when submitting draft is-editing inlines). Maniphest Tasks: T13513 Differential Revision: https://secure.phabricator.com/D21234
169 lines
4.5 KiB
PHP
169 lines
4.5 KiB
PHP
<?php
|
|
|
|
final class DiffusionCommitEditEngine
|
|
extends PhabricatorEditEngine {
|
|
|
|
const ENGINECONST = 'diffusion.commit';
|
|
|
|
const ACTIONGROUP_AUDIT = 'audit';
|
|
const ACTIONGROUP_COMMIT = 'commit';
|
|
|
|
public function isEngineConfigurable() {
|
|
return false;
|
|
}
|
|
|
|
public function getEngineName() {
|
|
return pht('Commits');
|
|
}
|
|
|
|
public function getSummaryHeader() {
|
|
return pht('Edit Commits');
|
|
}
|
|
|
|
public function getSummaryText() {
|
|
return pht('Edit commits.');
|
|
}
|
|
|
|
public function getEngineApplicationClass() {
|
|
return 'PhabricatorDiffusionApplication';
|
|
}
|
|
|
|
protected function newEditableObject() {
|
|
// NOTE: We must return a valid object here so that things like Conduit
|
|
// documentation generation work. You can't actually create commits via
|
|
// EditEngine. This is enforced with a "No One" creation policy.
|
|
|
|
$repository = new PhabricatorRepository();
|
|
$data = new PhabricatorRepositoryCommitData();
|
|
|
|
return id(new PhabricatorRepositoryCommit())
|
|
->attachRepository($repository)
|
|
->attachCommitData($data)
|
|
->attachAudits(array());
|
|
}
|
|
|
|
protected function newObjectQuery() {
|
|
$viewer = $this->getViewer();
|
|
|
|
return id(new DiffusionCommitQuery())
|
|
->needCommitData(true)
|
|
->needAuditRequests(true)
|
|
->needAuditAuthority(array($viewer))
|
|
->needIdentities(true);
|
|
}
|
|
|
|
protected function getEditorURI() {
|
|
return $this->getApplication()->getApplicationURI('commit/edit/');
|
|
}
|
|
|
|
protected function newCommentActionGroups() {
|
|
return array(
|
|
id(new PhabricatorEditEngineCommentActionGroup())
|
|
->setKey(self::ACTIONGROUP_AUDIT)
|
|
->setLabel(pht('Audit Actions')),
|
|
id(new PhabricatorEditEngineCommentActionGroup())
|
|
->setKey(self::ACTIONGROUP_COMMIT)
|
|
->setLabel(pht('Commit Actions')),
|
|
);
|
|
}
|
|
|
|
protected function getObjectCreateTitleText($object) {
|
|
return pht('Create Commit');
|
|
}
|
|
|
|
protected function getObjectCreateShortText() {
|
|
return pht('Create Commit');
|
|
}
|
|
|
|
protected function getObjectEditTitleText($object) {
|
|
return pht('Edit Commit: %s', $object->getDisplayName());
|
|
}
|
|
|
|
protected function getObjectEditShortText($object) {
|
|
return $object->getDisplayName();
|
|
}
|
|
|
|
protected function getObjectName() {
|
|
return pht('Commit');
|
|
}
|
|
|
|
protected function getObjectViewURI($object) {
|
|
return $object->getURI();
|
|
}
|
|
|
|
protected function getCreateNewObjectPolicy() {
|
|
return PhabricatorPolicies::POLICY_NOONE;
|
|
}
|
|
|
|
protected function buildCustomEditFields($object) {
|
|
$viewer = $this->getViewer();
|
|
$data = $object->getCommitData();
|
|
|
|
$fields = array();
|
|
|
|
$fields[] = id(new PhabricatorDatasourceEditField())
|
|
->setKey('auditors')
|
|
->setLabel(pht('Auditors'))
|
|
->setDatasource(new DiffusionAuditorDatasource())
|
|
->setUseEdgeTransactions(true)
|
|
->setTransactionType(
|
|
DiffusionCommitAuditorsTransaction::TRANSACTIONTYPE)
|
|
->setCommentActionLabel(pht('Change Auditors'))
|
|
->setDescription(pht('Auditors for this commit.'))
|
|
->setConduitDescription(pht('Change the auditors for this commit.'))
|
|
->setConduitTypeDescription(pht('New auditors.'))
|
|
->setValue($object->getAuditorPHIDsForEdit());
|
|
|
|
$actions = DiffusionCommitActionTransaction::loadAllActions();
|
|
$actions = msortv($actions, 'getCommitActionOrderVector');
|
|
|
|
foreach ($actions as $key => $action) {
|
|
$fields[] = $action->newEditField($object, $viewer);
|
|
}
|
|
|
|
return $fields;
|
|
}
|
|
|
|
protected function newAutomaticCommentTransactions($object) {
|
|
$viewer = $this->getViewer();
|
|
|
|
$editor = $object->getApplicationTransactionEditor()
|
|
->setActor($viewer);
|
|
|
|
$xactions = $editor->newAutomaticInlineTransactions(
|
|
$object,
|
|
PhabricatorAuditActionConstants::INLINE,
|
|
new DiffusionDiffInlineCommentQuery());
|
|
|
|
return $xactions;
|
|
}
|
|
|
|
protected function newCommentPreviewContent($object, array $xactions) {
|
|
$viewer = $this->getViewer();
|
|
$type_inline = PhabricatorAuditActionConstants::INLINE;
|
|
|
|
$inlines = array();
|
|
foreach ($xactions as $xaction) {
|
|
if ($xaction->getTransactionType() === $type_inline) {
|
|
$inlines[] = $xaction->getComment();
|
|
}
|
|
}
|
|
|
|
$content = array();
|
|
|
|
if ($inlines) {
|
|
$inline_preview = id(new PHUIDiffInlineCommentPreviewListView())
|
|
->setViewer($viewer)
|
|
->setInlineComments($inlines);
|
|
|
|
$content[] = phutil_tag(
|
|
'div',
|
|
array(
|
|
'id' => 'inline-comment-preview',
|
|
),
|
|
$inline_preview);
|
|
}
|
|
|
|
return $content;
|
|
}
|
|
}
|