[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/feed/builder/ -> PhabricatorFeedBuilder.php (source)

   1  <?php
   2  
   3  final class PhabricatorFeedBuilder {
   4  
   5    private $stories;
   6    private $framed;
   7    private $hovercards = false;
   8  
   9    public function __construct(array $stories) {
  10      assert_instances_of($stories, 'PhabricatorFeedStory');
  11      $this->stories = $stories;
  12    }
  13  
  14    public function setFramed($framed) {
  15      $this->framed = $framed;
  16      return $this;
  17    }
  18  
  19    public function setUser(PhabricatorUser $user) {
  20      $this->user = $user;
  21      return $this;
  22    }
  23  
  24    public function setShowHovercards($hover) {
  25      $this->hovercards = $hover;
  26      return $this;
  27    }
  28  
  29    public function buildView() {
  30      if (!$this->user) {
  31        throw new Exception('Call setUser() before buildView()!');
  32      }
  33  
  34      $user = $this->user;
  35      $stories = $this->stories;
  36  
  37      $null_view = new AphrontNullView();
  38  
  39      require_celerity_resource('phabricator-feed-css');
  40  
  41      $last_date = null;
  42      foreach ($stories as $story) {
  43        $story->setFramed($this->framed);
  44        $story->setHovercard($this->hovercards);
  45  
  46        $date = ucfirst(phabricator_relative_date($story->getEpoch(), $user));
  47  
  48        if ($date !== $last_date) {
  49          if ($last_date !== null) {
  50            $null_view->appendChild(
  51              phutil_tag_div('phabricator-feed-story-date-separator'));
  52          }
  53          $last_date = $date;
  54          $header = new PHUIActionHeaderView();
  55          $header->setHeaderTitle($date);
  56  
  57          $null_view->appendChild($header);
  58        }
  59  
  60        try {
  61          $view = $story->renderView();
  62          $view->setUser($user);
  63          $view = $view->render();
  64        } catch (Exception $ex) {
  65          // If rendering failed for any reason, don't fail the entire feed,
  66          // just this one story.
  67          $view = id(new PHUIFeedStoryView())
  68            ->setUser($user)
  69            ->setChronologicalKey($story->getChronologicalKey())
  70            ->setEpoch($story->getEpoch())
  71            ->setTitle(
  72              pht('Feed Story Failed to Render (%s)', get_class($story)))
  73            ->appendChild(pht('%s: %s', get_class($ex), $ex->getMessage()));
  74        }
  75  
  76        $null_view->appendChild($view);
  77      }
  78  
  79      return id(new AphrontNullView())
  80        ->appendChild($null_view->render());
  81    }
  82  
  83  }


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