[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/phriction/herald/ -> PhrictionDocumentHeraldAdapter.php (source)

   1  <?php
   2  
   3  final class PhrictionDocumentHeraldAdapter extends HeraldAdapter {
   4  
   5    private $document;
   6    private $ccPHIDs = array();
   7    private $emailPHIDs = array();
   8  
   9    public function getAdapterApplicationClass() {
  10      return 'PhabricatorPhrictionApplication';
  11    }
  12  
  13    public function getAdapterContentDescription() {
  14      return pht('React to wiki documents being created or updated.');
  15    }
  16  
  17    public function getObject() {
  18      return $this->document;
  19    }
  20  
  21    public function setDocument(PhrictionDocument $document) {
  22      $this->document = $document;
  23      return $this;
  24    }
  25    public function getDocument() {
  26      return $this->document;
  27    }
  28  
  29    private function setCcPHIDs(array $cc_phids) {
  30      $this->ccPHIDs = $cc_phids;
  31      return $this;
  32    }
  33    public function getCcPHIDs() {
  34      return $this->ccPHIDs;
  35    }
  36  
  37    public function getEmailPHIDs() {
  38      return $this->emailPHIDs;
  39    }
  40  
  41  
  42    public function getAdapterContentName() {
  43      return pht('Phriction Documents');
  44    }
  45  
  46    public function supportsRuleType($rule_type) {
  47      switch ($rule_type) {
  48        case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
  49        case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:
  50          return true;
  51        case HeraldRuleTypeConfig::RULE_TYPE_OBJECT:
  52        default:
  53          return false;
  54      }
  55    }
  56  
  57    public function getFields() {
  58      return array_merge(
  59        array(
  60          self::FIELD_TITLE,
  61          self::FIELD_BODY,
  62          self::FIELD_AUTHOR,
  63          self::FIELD_IS_NEW_OBJECT,
  64          self::FIELD_CC,
  65          self::FIELD_PATH,
  66        ),
  67        parent::getFields());
  68    }
  69  
  70    public function getActions($rule_type) {
  71      switch ($rule_type) {
  72        case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
  73          return array_merge(
  74            array(
  75              self::ACTION_ADD_CC,
  76              self::ACTION_EMAIL,
  77              self::ACTION_NOTHING,
  78            ),
  79            parent::getActions($rule_type));
  80        case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:
  81          return array_merge(
  82            array(
  83              self::ACTION_ADD_CC,
  84              self::ACTION_EMAIL,
  85              self::ACTION_FLAG,
  86              self::ACTION_NOTHING,
  87            ),
  88            parent::getActions($rule_type));
  89      }
  90    }
  91  
  92    public function getPHID() {
  93      return $this->getDocument()->getPHID();
  94    }
  95  
  96    public function getHeraldName() {
  97      return pht('Wiki Document %d', $this->getDocument()->getID());
  98    }
  99  
 100    public function getHeraldField($field) {
 101      switch ($field) {
 102        case self::FIELD_TITLE:
 103          return $this->getDocument()->getContent()->getTitle();
 104        case self::FIELD_BODY:
 105          return $this->getDocument()->getContent()->getContent();
 106        case self::FIELD_AUTHOR:
 107          return $this->getDocument()->getContent()->getAuthorPHID();
 108        case self::FIELD_CC:
 109          return PhabricatorSubscribersQuery::loadSubscribersForPHID(
 110            $this->getDocument()->getPHID());
 111        case self::FIELD_PATH:
 112          return $this->getDocument()->getContent()->getSlug();
 113      }
 114  
 115      return parent::getHeraldField($field);
 116    }
 117  
 118    public function applyHeraldEffects(array $effects) {
 119      assert_instances_of($effects, 'HeraldEffect');
 120  
 121      $result = array();
 122      foreach ($effects as $effect) {
 123        $action = $effect->getAction();
 124        switch ($action) {
 125          case self::ACTION_NOTHING:
 126            $result[] = new HeraldApplyTranscript(
 127              $effect,
 128              true,
 129              pht('Great success at doing nothing.'));
 130            break;
 131          case self::ACTION_ADD_CC:
 132            foreach ($effect->getTarget() as $phid) {
 133              $this->ccPHIDs[] = $phid;
 134            }
 135            $result[] = new HeraldApplyTranscript(
 136              $effect,
 137              true,
 138              pht('Added address to cc list.'));
 139            break;
 140          case self::ACTION_FLAG:
 141            $result[] = parent::applyFlagEffect(
 142              $effect,
 143              $this->getDocument()->getPHID());
 144            break;
 145          case self::ACTION_EMAIL:
 146            foreach ($effect->getTarget() as $phid) {
 147              $this->emailPHIDs[] = $phid;
 148            }
 149            $result[] = new HeraldApplyTranscript(
 150              $effect,
 151              true,
 152              pht('Added addresses to email list.'));
 153            break;
 154          default:
 155            $custom_result = parent::handleCustomHeraldEffect($effect);
 156            if ($custom_result === null) {
 157              throw new Exception(pht(
 158                "No rules to handle action '%s'.",
 159                $action));
 160            }
 161  
 162            $result[] = $custom_result;
 163            break;
 164        }
 165      }
 166      return $result;
 167    }
 168  
 169  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1