<commit_before><?php

/**
 * @group phriction
 */
final class PhrictionDeleteController extends PhrictionController {

  private $id;

  public function willProcessRequest(array $data) {
    $this->id = $data['id'];
  }

  public function processRequest() {

    $request = $this->getRequest();
    $user = $request->getUser();

    $document = id(new PhrictionDocument())->load($this->id);
    if (!$document) {
      return new Aphront404Response();
    }

    $document_uri = PhrictionDocument::getSlugURI($document->getSlug());

    if ($request->isFormPost()) {
        $editor = id(PhrictionDocumentEditor::newForSlug($document->getSlug()))
          ->setActor($user)
          ->delete();
        return id(new AphrontRedirectResponse())->setURI($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);
  }

}<commit_msg>prevents users from deleting already deleted/moved phriction documents<commit_after><?php

/**
 * @group phriction
 */
final class PhrictionDeleteController extends PhrictionController {

  private $id;

  public function willProcessRequest(array $data) {
    $this->id = $data['id'];
  }

  public function processRequest() {

    $request = $this->getRequest();
    $user = $request->getUser();

    $document = id(new PhrictionDocument())->load($this->id);
    if (!$document) {
      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());

    if (!$error_view && $request->isFormPost()) {
        $editor = id(PhrictionDocumentEditor::newForSlug($document->getSlug()))
          ->setActor($user)
          ->delete();
        return id(new AphrontRedirectResponse())->setURI($document_uri);
    }

    if ($error_view) {
      $dialog = id(new AphrontDialogView())
        ->setUser($user)
        ->setTitle(pht('Error!'))
        ->appendChild($error_view)
        ->addCancelButton($document_uri);
    } else {
      $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);
  }

}
{'fraction_non_alphanumeric': 0.14775280898876406, 'fraction_numerical': 0.0016853932584269663, 'mean_word_length': 3.1746776084407973, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 46, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4740880', 'n_tokens_mistral': 1099, 'n_tokens_neox': 1044, 'n_words': 215}