/**
  * Initializes a new PhabricatorNotification instance
  *
  * @param string $project The project for this notification
  * @param PhabricatorStory $payload The story to convert into a notification
  */
 public function __construct($project, PhabricatorStory $payload)
 {
     // Straightforward properties
     $this->service = "Phabricator";
     $this->project = $project;
     $this->rawContent = $payload;
     $this->text = $payload->text;
     // Analyzes and fills
     $this->type = $payload->getObjectType();
     $this->group = $this->getGroup();
     $this->link = $this->getLink();
 }
 /**
  * Gets the group for a specific story.
  *
  * @return string the group, central part of the routing key
  */
 public function getGroup()
 {
     // If the payload is about some repository matching a table of
     // symbols, we need to sort it to the right group.
     foreach ($this->configuration->map as $mapping) {
         foreach ($this->story->getProjects() as $project) {
             if ($mapping->doesItemBelong($project)) {
                 return $mapping->group;
             }
         }
     }
     // Words
     foreach ($this->configuration->map as $mapping) {
         if ($mapping->doesStoryBelong($this->story)) {
             return $mapping->group;
         }
     }
     // By default, fallback group is the project name or a specified value.
     if (empty($this->configuration->defaultGroup)) {
         return strtolower($this->project);
     }
     return $this->configuration->defaultGroup;
 }
 /**
  * Formats payload to pass to constructor
  *
  * @return PhabricatorStory|stdClass A deserialization of the payload
  */
 private function formatPayload()
 {
     if ($this->service === "Phabricator") {
         $project = $this->constructor['project'];
         return PhabricatorStory::loadFromJson($project, $this->payload);
     }
     return json_decode($this->payload);
 }
 /**
  * Gets story from the request
  *
  * @return PhabricatorStory
  */
 protected function getStory()
 {
     return PhabricatorStory::loadFromArray($this->door, $this->payload);
 }