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
F12805521: D20041.id47854.diff
Wed, Mar 27, 5:20 PM
F12805519: D20041.id.diff
Wed, Mar 27, 5:20 PM
F12805518: D20041.diff
Wed, Mar 27, 5:20 PM
Unknown Object (File)
Sat, Mar 23, 12:32 PM
Unknown Object (File)
Sat, Mar 23, 12:32 PM
Unknown Object (File)
Sat, Mar 23, 12:32 PM
Unknown Object (File)
Mon, Mar 18, 10:32 AM
Unknown Object (File)
Sun, Mar 3, 9:06 PM
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
Branch
subtype2
Lint
Lint Passed
Unit
Tests Passed
Build Status
Buildable 21707
Build 29615: Run Core Tests
Build 29614: arc lint + arc unit