public function __construct(HeraldEffect $effect, $applied, $reason = null)
 {
     $this->setAction($effect->getAction());
     $this->setTarget($effect->getTarget());
     $this->setRuleID($effect->getRuleID());
     $this->setEffector($effect->getEffector());
     $this->setReason($effect->getReason());
     $this->setApplied($applied);
     $this->setAppliedReason($reason);
 }
 public function applyEffect($object, HeraldEffect $effect)
 {
     $phid = $this->getAdapter()->getPHID();
     $rule = $effect->getRule();
     $author = $rule->getAuthor();
     $flag = PhabricatorFlagQuery::loadUserFlag($author, $phid);
     if ($flag) {
         $this->logEffect(self::DO_IGNORE, $flag->getColor());
         return;
     }
     $flag = id(new PhabricatorFlag())->setOwnerPHID($author->getPHID())->setType(phid_get_type($phid))->setObjectPHID($phid)->setReasonPHID($rule->getPHID())->setColor($effect->getTarget())->setNote('')->save();
     $this->logEffect(self::DO_FLAG, $flag->getColor());
 }
 public function applyEffect($object, HeraldEffect $effect)
 {
     $status = head($effect->getTarget());
     if (!$status) {
         $this->logEffect(self::DO_STANDARD_EMPTY);
         return;
     }
     $adapter = $this->getAdapter();
     $object = $adapter->getObject();
     $current = $object->getStatus();
     if ($current == $status) {
         $this->logEffect(self::DO_STANDARD_NO_EFFECT, $status);
         return;
     }
     $xaction = $adapter->newTransaction()->setTransactionType(ManiphestTransaction::TYPE_STATUS)->setNewValue($status);
     $adapter->queueTransaction($xaction);
     $this->logEffect(self::DO_STATUS, $status);
 }
 public function applyEffect($object, HeraldEffect $effect)
 {
     $priority = head($effect->getTarget());
     if (!$priority) {
         $this->logEffect(self::DO_STANDARD_EMPTY);
         return;
     }
     $adapter = $this->getAdapter();
     $object = $adapter->getObject();
     $current = $object->getPriority();
     if ($current == $priority) {
         $this->logEffect(self::DO_STANDARD_NO_EFFECT, $priority);
         return;
     }
     $xaction = $adapter->newTransaction()->setTransactionType(ManiphestTransaction::TYPE_PRIORITY)->setNewValue($priority);
     $adapter->queueTransaction($xaction);
     $this->logEffect(self::DO_PRIORITY, $priority);
 }
 public static function applyFlagEffect(HeraldEffect $effect, $phid)
 {
     $color = $effect->getTarget();
     // TODO: Silly that we need to load this again here.
     $rule = id(new HeraldRule())->load($effect->getRuleID());
     $user = id(new PhabricatorUser())->loadOneWhere('phid = %s', $rule->getAuthorPHID());
     $flag = PhabricatorFlagQuery::loadUserFlag($user, $phid);
     if ($flag) {
         return new HeraldApplyTranscript($effect, false, 'Object already flagged.');
     }
     $handle = PhabricatorObjectHandleData::loadOneHandle($phid);
     $flag = new PhabricatorFlag();
     $flag->setOwnerPHID($user->getPHID());
     $flag->setType($handle->getType());
     $flag->setObjectPHID($handle->getPHID());
     // TOOD: Should really be transcript PHID, but it doesn't exist yet.
     $flag->setReasonPHID($user->getPHID());
     $flag->setColor($color);
     $flag->setNote('Flagged by Herald Rule "' . $rule->getName() . '".');
     $flag->save();
     return new HeraldApplyTranscript($effect, true, 'Added flag.');
 }
Example #6
0
 /**
  * @task apply
  */
 private function applyEmailEffect(HeraldEffect $effect)
 {
     foreach ($effect->getTarget() as $phid) {
         $this->emailPHIDs[$phid] = $phid;
         // If this is a personal rule, we'll force delivery of a real email. This
         // effect is stronger than notification preferences, so you get an actual
         // email even if your preferences are set to "Notify" or "Ignore".
         $rule = $effect->getRule();
         if ($rule->isPersonalRule()) {
             $this->forcedEmailPHIDs[$phid] = $phid;
         }
     }
     return new HeraldApplyTranscript($effect, true, pht('Added mailable to mail targets.'));
 }
 public function applyEffect($object, HeraldEffect $effect)
 {
     return $this->applyReviewers($effect->getTarget(), $is_blocking = true);
 }
 public function applyEffect($object, HeraldEffect $effect)
 {
     return $this->applySubscribe($effect->getTarget(), $is_add = false);
 }
 public function applyEffect($object, HeraldEffect $effect)
 {
     return $this->applyBuilds($effect->getTarget(), $effect->getRule());
 }
 public function applyEffect($object, HeraldEffect $effect)
 {
     return $this->applyRequire($effect->getTarget());
 }
 public function applyEffect($object, HeraldEffect $effect)
 {
     $rule = $effect->getRule();
     return $this->applyAuditors($effect->getTarget(), $rule);
 }
 public function applyEffect($object, HeraldEffect $effect)
 {
     return $this->applyProjects($effect->getTarget(), $is_add = true);
 }
 public function applyEffect($object, HeraldEffect $effect)
 {
     return $this->applyEmail($effect->getTarget(), $force = false);
 }
 public function applyHeraldEffects(array $effects)
 {
     $result = array();
     if ($this->explicitCCs) {
         $effect = new HeraldEffect();
         $effect->setAction(HeraldActionConfig::ACTION_ADD_CC);
         $effect->setTarget(array_keys($this->explicitCCs));
         $effect->setReason('CCs provided explicitly by revision author or carried over from a ' . 'previous version of the revision.');
         $result[] = new HeraldApplyTranscript($effect, true, 'Added addresses to CC list.');
     }
     $forbidden_ccs = array_fill_keys(nonempty($this->forbiddenCCs, array()), true);
     foreach ($effects as $effect) {
         $action = $effect->getAction();
         switch ($action) {
             case HeraldActionConfig::ACTION_NOTHING:
                 $result[] = new HeraldApplyTranscript($effect, true, 'OK, did nothing.');
                 break;
             case HeraldActionConfig::ACTION_EMAIL:
             case HeraldActionConfig::ACTION_ADD_CC:
                 $op = $action == HeraldActionConfig::ACTION_EMAIL ? 'email' : 'CC';
                 $base_target = $effect->getTarget();
                 $forbidden = array();
                 foreach ($base_target as $key => $fbid) {
                     if (isset($forbidden_ccs[$fbid])) {
                         $forbidden[] = $fbid;
                         unset($base_target[$key]);
                     } else {
                         if ($action == HeraldActionConfig::ACTION_EMAIL) {
                             $this->emailPHIDs[$fbid] = true;
                         } else {
                             $this->newCCs[$fbid] = true;
                         }
                     }
                 }
                 if ($forbidden) {
                     $failed = clone $effect;
                     $failed->setTarget($forbidden);
                     if ($base_target) {
                         $effect->setTarget($base_target);
                         $result[] = new HeraldApplyTranscript($effect, true, 'Added these addresses to ' . $op . ' list. ' . 'Others could not be added.');
                     }
                     $result[] = new HeraldApplyTranscript($failed, false, $op . ' forbidden, these addresses have unsubscribed.');
                 } else {
                     $result[] = new HeraldApplyTranscript($effect, true, 'Added addresses to ' . $op . ' list.');
                 }
                 break;
             case HeraldActionConfig::ACTION_REMOVE_CC:
                 foreach ($effect->getTarget() as $fbid) {
                     $this->remCCs[$fbid] = true;
                 }
                 $result[] = new HeraldApplyTranscript($effect, true, 'Removed addresses from CC list.');
                 break;
             default:
                 throw new Exception("No rules to handle action '{$action}'.");
         }
     }
     return $result;
 }