Differential D15065 Diff 36383 src/applications/project/editor/PhabricatorProjectTransactionEditor.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/project/editor/PhabricatorProjectTransactionEditor.php
Show First 20 Lines • Show All 172 Lines • ▼ Show 20 Lines | switch ($xaction->getTransactionType()) { | ||||
case PhabricatorProjectTransaction::TYPE_PARENT: | case PhabricatorProjectTransaction::TYPE_PARENT: | ||||
case PhabricatorProjectTransaction::TYPE_MILESTONE: | case PhabricatorProjectTransaction::TYPE_MILESTONE: | ||||
return; | return; | ||||
} | } | ||||
return parent::applyCustomExternalTransaction($object, $xaction); | return parent::applyCustomExternalTransaction($object, $xaction); | ||||
} | } | ||||
protected function applyBuiltinExternalTransaction( | |||||
PhabricatorLiskDAO $object, | |||||
PhabricatorApplicationTransaction $xaction) { | |||||
switch ($xaction->getTransactionType()) { | |||||
case PhabricatorTransactions::TYPE_EDGE: | |||||
$edge_type = $xaction->getMetadataValue('edge:type'); | |||||
switch ($edge_type) { | |||||
case PhabricatorProjectProjectHasMemberEdgeType::EDGECONST: | |||||
case PhabricatorObjectHasWatcherEdgeType::EDGECONST: | |||||
$edge_const = PhabricatorProjectProjectHasMemberEdgeType::EDGECONST; | |||||
if ($edge_type != $edge_const) { | |||||
break; | |||||
} | |||||
$old = $xaction->getOldValue(); | |||||
$new = $xaction->getNewValue(); | |||||
// When adding members, we add subscriptions. When removing | |||||
// members, we remove subscriptions. | |||||
$add = array_keys(array_diff_key($new, $old)); | |||||
$rem = array_keys(array_diff_key($old, $new)); | |||||
// NOTE: The subscribe is "explicit" because there's no implicit | |||||
// unsubscribe, so Join -> Leave -> Join doesn't resubscribe you | |||||
// if we use an implicit subscribe, even though you never willfully | |||||
// unsubscribed. Not sure if adding implicit unsubscribe (which | |||||
// would not write the unsubscribe row) is justified to deal with | |||||
// this, which is a fairly weird edge case and pretty arguable both | |||||
// ways. | |||||
id(new PhabricatorSubscriptionsEditor()) | |||||
->setActor($this->requireActor()) | |||||
->setObject($object) | |||||
->subscribeExplicit($add) | |||||
->unsubscribe($rem) | |||||
->save(); | |||||
break; | |||||
} | |||||
break; | |||||
} | |||||
return parent::applyBuiltinExternalTransaction($object, $xaction); | |||||
} | |||||
protected function validateAllTransactions( | protected function validateAllTransactions( | ||||
PhabricatorLiskDAO $object, | PhabricatorLiskDAO $object, | ||||
array $xactions) { | array $xactions) { | ||||
$errors = array(); | $errors = array(); | ||||
// Prevent creating projects which are both subprojects and milestones, | // Prevent creating projects which are both subprojects and milestones, | ||||
// since this does not make sense, won't work, and will break everything. | // since this does not make sense, won't work, and will break everything. | ||||
▲ Show 20 Lines • Show All 345 Lines • ▼ Show 20 Lines | final class PhabricatorProjectTransactionEditor | ||||
} | } | ||||
protected function getMailTo(PhabricatorLiskDAO $object) { | protected function getMailTo(PhabricatorLiskDAO $object) { | ||||
return array( | return array( | ||||
$this->getActingAsPHID(), | $this->getActingAsPHID(), | ||||
); | ); | ||||
} | } | ||||
protected function getMailCc(PhabricatorLiskDAO $object) { | |||||
return array(); | |||||
} | |||||
public function getMailTagsMap() { | public function getMailTagsMap() { | ||||
return array( | return array( | ||||
PhabricatorProjectTransaction::MAILTAG_METADATA => | PhabricatorProjectTransaction::MAILTAG_METADATA => | ||||
pht('Project name, hashtags, icon, image, or color changes.'), | pht('Project name, hashtags, icon, image, or color changes.'), | ||||
PhabricatorProjectTransaction::MAILTAG_MEMBERS => | PhabricatorProjectTransaction::MAILTAG_MEMBERS => | ||||
pht('Project membership changes.'), | pht('Project membership changes.'), | ||||
PhabricatorProjectTransaction::MAILTAG_WATCHERS => | PhabricatorProjectTransaction::MAILTAG_WATCHERS => | ||||
pht('Project watcher list changes.'), | pht('Project watcher list changes.'), | ||||
PhabricatorProjectTransaction::MAILTAG_SUBSCRIBERS => | |||||
pht('Project subscribers change.'), | |||||
PhabricatorProjectTransaction::MAILTAG_OTHER => | PhabricatorProjectTransaction::MAILTAG_OTHER => | ||||
pht('Other project activity not listed above occurs.'), | pht('Other project activity not listed above occurs.'), | ||||
); | ); | ||||
} | } | ||||
protected function buildReplyHandler(PhabricatorLiskDAO $object) { | protected function buildReplyHandler(PhabricatorLiskDAO $object) { | ||||
return id(new ProjectReplyHandler()) | return id(new ProjectReplyHandler()) | ||||
->setMailReceiver($object); | ->setMailReceiver($object); | ||||
▲ Show 20 Lines • Show All 313 Lines • Show Last 20 Lines |