mirror of
https://we.phorge.it/source/phorge.git
synced 2025-01-02 10:51:01 +01:00
prevents users from deleting already deleted/moved phriction documents
Summary: Deps D5198 since it uses a constant from D5198 accidentalbigdiff I sure doubled the size of this file ^^ Could be that I added unserious business. Test Plan: Created a page. Had it open in two browser windows. Deleted in one. This is the second attempt: {F34458} Reviewers: epriestley, btrahan Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D5202
This commit is contained in:
parent
0a2a5c7175
commit
6b0138c1ae
1 changed files with 42 additions and 9 deletions
|
@ -21,23 +21,56 @@ final class PhrictionDeleteController extends PhrictionController {
|
||||||
return new Aphront404Response();
|
return new Aphront404Response();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$error_view = null;
|
||||||
|
$disallowed_states = array(
|
||||||
|
PhrictionDocumentStatus::STATUS_DELETED, // Stupid
|
||||||
|
PhrictionDocumentStatus::STATUS_MOVED, // Makes no sense
|
||||||
|
);
|
||||||
|
if (in_array($document->getStatus(), $disallowed_states)) {
|
||||||
|
$is_serious =
|
||||||
|
PhabricatorEnv::getEnvConfig('phabricator.serious-business');
|
||||||
|
|
||||||
|
if ($is_serious) {
|
||||||
|
$e_text = pht('An already moved or deleted document can not be '.
|
||||||
|
'deleted');
|
||||||
|
} else {
|
||||||
|
$e_text = pht('I\'m not sure if you got the notice, but you can\'t '.
|
||||||
|
'delete an already deleted or moved document.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$error_view = new AphrontErrorView();
|
||||||
|
$error_view->setSeverity(AphrontErrorView::SEVERITY_ERROR);
|
||||||
|
$error_view->setTitle(pht('Can not delete page'));
|
||||||
|
$error_view->appendChild($e_text);
|
||||||
|
|
||||||
|
$error_view = $error_view->render();
|
||||||
|
}
|
||||||
|
|
||||||
$document_uri = PhrictionDocument::getSlugURI($document->getSlug());
|
$document_uri = PhrictionDocument::getSlugURI($document->getSlug());
|
||||||
|
|
||||||
if ($request->isFormPost()) {
|
if (!$error_view && $request->isFormPost()) {
|
||||||
$editor = id(PhrictionDocumentEditor::newForSlug($document->getSlug()))
|
$editor = id(PhrictionDocumentEditor::newForSlug($document->getSlug()))
|
||||||
->setActor($user)
|
->setActor($user)
|
||||||
->delete();
|
->delete();
|
||||||
return id(new AphrontRedirectResponse())->setURI($document_uri);
|
return id(new AphrontRedirectResponse())->setURI($document_uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
$dialog = id(new AphrontDialogView())
|
if ($error_view) {
|
||||||
->setUser($user)
|
$dialog = id(new AphrontDialogView())
|
||||||
->setTitle(pht('Delete document?'))
|
->setUser($user)
|
||||||
->appendChild(
|
->setTitle(pht('Error!'))
|
||||||
pht('Really delete this document? You can recover it later by '.
|
->appendChild($error_view)
|
||||||
'reverting to a previous version.'))
|
->addCancelButton($document_uri);
|
||||||
->addSubmitButton(pht('Delete'))
|
} else {
|
||||||
->addCancelButton($document_uri);
|
$dialog = id(new AphrontDialogView())
|
||||||
|
->setUser($user)
|
||||||
|
->setTitle(pht('Delete document?'))
|
||||||
|
->appendChild(
|
||||||
|
pht('Really delete this document? You can recover it later by '.
|
||||||
|
'reverting to a previous version.'))
|
||||||
|
->addSubmitButton(pht('Delete'))
|
||||||
|
->addCancelButton($document_uri);
|
||||||
|
}
|
||||||
|
|
||||||
return id(new AphrontDialogResponse())->setDialog($dialog);
|
return id(new AphrontDialogResponse())->setDialog($dialog);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue