Page MenuHomePhabricator

Provide an Editor extension point for transaction validation
ClosedPublic

Authored by epriestley on Jan 27 2019, 6:31 PM.
Tags
None
Referenced Files
F15499528: D20041.diff
Sun, Apr 13, 2:59 PM
F15484793: D20041.diff
Wed, Apr 9, 8:10 PM
F15478222: D20041.id.diff
Mon, Apr 7, 9:15 PM
F15423046: D20041.id47853.diff
Sat, Mar 22, 12:24 PM
F15419459: D20041.id.diff
Fri, Mar 21, 6:13 AM
F15419043: D20041.id47854.diff
Fri, Mar 21, 2:59 AM
F15416005: D20041.diff
Thu, Mar 20, 8:38 AM
F15292704: D20041.id.diff
Mar 5 2025, 2:49 AM
Subscribers
None

Details

Summary

Depends on D20040. Ref T13242. See PHI1039. See PHI873. Two reasonable cases have arisen recently where extending validation rules would help solve problems.

We can do this in a pretty straightforward way with a standard extension pattern.

Test Plan

Used this extension to keep ducks away from projects:

<?php

final class NoDucksEditorExtension
  extends PhabricatorEditorExtension {

  const EXTENSIONKEY = 'no.ducks';

  public function getExtensionName() {
    return pht('No Ducks!');
  }

  public function supportsObject(
    PhabricatorApplicationTransactionEditor $editor,
    PhabricatorApplicationTransactionInterface $object) {
    return ($object instanceof PhabricatorProject);
  }

  public function validateTransactions($object, array $xactions) {
    $errors = array();

    $name_type = PhabricatorProjectNameTransaction::TRANSACTIONTYPE;

    $old_value = $object->getName();
    foreach ($xactions as $xaction) {
      if ($xaction->getTransactionType() !== $name_type) {
        continue;
      }

      $new_value = $xaction->getNewValue();
      if ($old_value === $new_value) {
        continue;
      }

      if (preg_match('/duck/i', $new_value)) {
        $errors[] = $this->newInvalidTransactionError(
          $xaction,
          pht('Project names must not contain the substring "duck".'));
      }
    }

    return $errors;
  }

}

Screen Shot 2019-01-27 at 10.28.48 AM.png (1×1 px, 217 KB)

Diff Detail

Repository
rP Phabricator
Lint
Lint Not Applicable
Unit
Tests Not Applicable