diff --git a/src/applications/herald/field/HeraldField.php b/src/applications/herald/field/HeraldField.php --- a/src/applications/herald/field/HeraldField.php +++ b/src/applications/herald/field/HeraldField.php @@ -177,25 +177,26 @@ } public function getPHIDsAffectedByCondition(HeraldCondition $condition) { - $phids = array(); + try { + $standard_type = $this->getHeraldFieldStandardType(); + } catch (PhutilMethodNotImplementedException $ex) { + $standard_type = null; + } - $standard_type = $this->getHeraldFieldStandardType(); switch ($standard_type) { case self::STANDARD_PHID: case self::STANDARD_PHID_NULLABLE: - $phid = $condition->getValue(); - if ($phid) { - $phids[] = $phid; - } - break; case self::STANDARD_PHID_LIST: - foreach ($condition->getValue() as $phid) { - $phids[] = $phid; + $phids = $condition->getValue(); + + if (!is_array($phids)) { + $phids = array(); } - break; + + return $phids; } - return $phids; + return array(); } final public function setAdapter(HeraldAdapter $adapter) { diff --git a/src/applications/transactions/storage/PhabricatorApplicationTransaction.php b/src/applications/transactions/storage/PhabricatorApplicationTransaction.php --- a/src/applications/transactions/storage/PhabricatorApplicationTransaction.php +++ b/src/applications/transactions/storage/PhabricatorApplicationTransaction.php @@ -775,6 +775,13 @@ case PhabricatorTransactions::TYPE_TOKEN: case PhabricatorTransactions::TYPE_MFA: return true; + case PhabricatorTransactions::TYPE_SUBSCRIBERS: + // See T8952. When an application (usually Herald) modifies + // subscribers, this tends to be very uninteresting. + if ($this->isApplicationAuthor()) { + return true; + } + break; case PhabricatorTransactions::TYPE_EDGE: $edge_type = $this->getMetadataValue('edge:type'); switch ($edge_type) { @@ -1387,12 +1394,6 @@ return 25; } - if ($this->isApplicationAuthor()) { - // When applications (most often: Herald) change subscriptions it - // is very uninteresting. - return 1; - } - // In other cases, subscriptions are more interesting than comments // (which are shown anyway) but less interesting than any other type of // transaction.