mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-23 14:00:56 +01:00
Fix Phriction document move on to existing document placeholder
Summary: Looks like the logic was there already but some minor parts were missing. Fixes T8082. Test Plan: - Create document `/w/foo` - Delete document `/w/foo` - Create document `/w/bar` - Move document `/w/bar` for `/w/foo` No error was displayed and document `/w/bar` was moved to `/w/foo`. Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley, #blessed_reviewers Subscribers: Korvin Maniphest Tasks: T8082 Differential Revision: https://secure.phabricator.com/D16713
This commit is contained in:
parent
dad17fb98a
commit
4e831e786e
2 changed files with 25 additions and 11 deletions
|
@ -31,11 +31,11 @@ final class PhrictionMoveController extends PhrictionController {
|
|||
if ($request->isFormPost()) {
|
||||
$v_note = $request->getStr('description');
|
||||
$v_slug = $request->getStr('slug');
|
||||
$normal_slug = PhabricatorSlug::normalize($v_slug);
|
||||
|
||||
// If what the user typed isn't what we're actually using, warn them
|
||||
// about it.
|
||||
if (strlen($v_slug)) {
|
||||
$normal_slug = PhabricatorSlug::normalize($v_slug);
|
||||
$no_slash_slug = rtrim($normal_slug, '/');
|
||||
if ($normal_slug !== $v_slug && $no_slash_slug !== $v_slug) {
|
||||
return $this->newDialog()
|
||||
|
@ -66,9 +66,21 @@ final class PhrictionMoveController extends PhrictionController {
|
|||
$xactions[] = id(new PhrictionTransaction())
|
||||
->setTransactionType(PhrictionTransaction::TYPE_MOVE_TO)
|
||||
->setNewValue($document);
|
||||
$target_document = PhrictionDocument::initializeNewDocument(
|
||||
$viewer,
|
||||
$v_slug);
|
||||
$target_document = id(new PhrictionDocumentQuery())
|
||||
->setViewer(PhabricatorUser::getOmnipotentUser())
|
||||
->withSlugs(array($normal_slug))
|
||||
->needContent(true)
|
||||
->requireCapabilities(
|
||||
array(
|
||||
PhabricatorPolicyCapability::CAN_VIEW,
|
||||
PhabricatorPolicyCapability::CAN_EDIT,
|
||||
))
|
||||
->executeOne();
|
||||
if (!$target_document) {
|
||||
$target_document = PhrictionDocument::initializeNewDocument(
|
||||
$viewer,
|
||||
$v_slug);
|
||||
}
|
||||
try {
|
||||
$editor->applyTransactions($target_document, $xactions);
|
||||
$redir_uri = PhrictionDocument::getSlugURI(
|
||||
|
|
|
@ -588,6 +588,7 @@ final class PhrictionTransactionEditor
|
|||
// Prevent overwrites and no-op moves.
|
||||
$exists = PhrictionDocumentStatus::STATUS_EXISTS;
|
||||
if ($target_document) {
|
||||
$message = null;
|
||||
if ($target_document->getSlug() == $source_document->getSlug()) {
|
||||
$message = pht(
|
||||
'You can not move a document to its existing location. '.
|
||||
|
@ -598,13 +599,14 @@ final class PhrictionTransactionEditor
|
|||
'overwrite an existing document which is already at that '.
|
||||
'location. Move or delete the existing document first.');
|
||||
}
|
||||
|
||||
$error = new PhabricatorApplicationTransactionValidationError(
|
||||
$type,
|
||||
pht('Invalid'),
|
||||
$message,
|
||||
$xaction);
|
||||
$errors[] = $error;
|
||||
if ($message !== null) {
|
||||
$error = new PhabricatorApplicationTransactionValidationError(
|
||||
$type,
|
||||
pht('Invalid'),
|
||||
$message,
|
||||
$xaction);
|
||||
$errors[] = $error;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in a new issue