diff --git a/src/applications/conpherence/editor/ConpherenceEditor.php b/src/applications/conpherence/editor/ConpherenceEditor.php index e0a38ba8f5..75776cadfe 100644 --- a/src/applications/conpherence/editor/ConpherenceEditor.php +++ b/src/applications/conpherence/editor/ConpherenceEditor.php @@ -478,4 +478,43 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor { ); } + protected function validateTransaction( + PhabricatorLiskDAO $object, + $type, + array $xactions) { + + $errors = parent::validateTransaction($object, $type, $xactions); + + switch ($type) { + case ConpherenceTransactionType::TYPE_PARTICIPANTS: + foreach ($xactions as $xaction) { + $phids = $this->getPHIDTransactionNewValue( + $xaction, + $object->getParticipantPHIDs()); + + if (!$phids) { + continue; + } + + $users = id(new PhabricatorPeopleQuery()) + ->setViewer($this->requireActor()) + ->withPHIDs($phids) + ->execute(); + $users = mpull($users, null, 'getPHID'); + foreach ($phids as $phid) { + if (isset($users[$phid])) { + continue; + } + $errors[] = new PhabricatorApplicationTransactionValidationError( + $type, + pht('Invalid'), + pht('New thread member "%s" is not a valid user.', $phid), + $xaction); + } + } + break; + } + + return $errors; + } } diff --git a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php index b80c75e3e2..307418c3a7 100644 --- a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php +++ b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php @@ -1397,9 +1397,14 @@ abstract class PhabricatorApplicationTransactionEditor } protected function getPHIDTransactionNewValue( - PhabricatorApplicationTransaction $xaction) { + PhabricatorApplicationTransaction $xaction, + $old = null) { - $old = array_fuse($xaction->getOldValue()); + if ($old) { + $old = array_fuse($old); + } else { + $old = array_fuse($xaction->getOldValue()); + } $new = $xaction->getNewValue(); $new_add = idx($new, '+', array());