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
Unknown Object (File)
Tue, Dec 3, 5:48 AM
Unknown Object (File)
Tue, Dec 3, 3:54 AM
Unknown Object (File)
Tue, Dec 3, 1:28 AM
Unknown Object (File)
Tue, Nov 26, 5:04 PM
Unknown Object (File)
Mon, Nov 25, 7:58 AM
Unknown Object (File)
Mon, Nov 25, 7:58 AM
Unknown Object (File)
Mon, Nov 25, 7:58 AM
Unknown Object (File)
Sun, Nov 17, 11:50 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
Lint
Lint Not Applicable
Unit
Tests Not Applicable