[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/phame/controller/post/ -> PhamePostListController.php (source)

   1  <?php
   2  
   3  final class PhamePostListController extends PhameController {
   4  
   5    private $bloggername;
   6    private $filter;
   7  
   8    public function willProcessRequest(array $data) {
   9      $this->filter = idx($data, 'filter', 'blogger');
  10      $this->bloggername = idx($data, 'bloggername');
  11    }
  12  
  13    public function processRequest() {
  14      $request = $this->getRequest();
  15      $user = $request->getUser();
  16  
  17      $query = id(new PhamePostQuery())
  18        ->setViewer($user);
  19  
  20      $nav = $this->renderSideNavFilterView();
  21  
  22      switch ($this->filter) {
  23        case 'draft':
  24          $query->withBloggerPHIDs(array($user->getPHID()));
  25          $query->withVisibility(PhamePost::VISIBILITY_DRAFT);
  26          $nodata = pht('You have no unpublished drafts.');
  27          $title = pht('Unpublished Drafts');
  28          $nav->selectFilter('post/draft');
  29          break;
  30        case 'blogger':
  31          if ($this->bloggername) {
  32            $blogger = id(new PhabricatorUser())->loadOneWhere(
  33              'username = %s',
  34              $this->bloggername);
  35            if (!$blogger) {
  36              return new Aphront404Response();
  37            }
  38          } else {
  39            $blogger = $user;
  40          }
  41  
  42          $query->withBloggerPHIDs(array($blogger->getPHID()));
  43          if ($blogger->getPHID() == $user->getPHID()) {
  44            $nav->selectFilter('post');
  45            $nodata = pht('You have not written any posts.');
  46          } else {
  47            $nodata = pht('%s has not written any posts.', $blogger);
  48          }
  49          $title = pht('Posts By %s', $blogger);
  50          break;
  51        case 'all':
  52          $nodata = pht('There are no visible posts.');
  53          $title = pht('Posts');
  54          $nav->selectFilter('post/all');
  55          break;
  56        default:
  57          throw new Exception("Unknown filter '{$this->filter}'!");
  58      }
  59  
  60      $pager = id(new AphrontCursorPagerView())
  61        ->readFromRequest($request);
  62  
  63      $posts = $query->executeWithCursorPager($pager);
  64  
  65      $handle_phids = array_merge(
  66        mpull($posts, 'getBloggerPHID'),
  67        mpull($posts, 'getBlogPHID'));
  68      $this->loadHandles($handle_phids);
  69  
  70      require_celerity_resource('phame-css');
  71      $post_list = $this->renderPostList($posts, $user, $nodata);
  72      $post_list = id(new PHUIBoxView())
  73        ->addPadding(PHUI::PADDING_LARGE)
  74        ->addClass('phame-post-list')
  75        ->appendChild($post_list);
  76  
  77      $crumbs = $this->buildApplicationCrumbs();
  78      $crumbs->addTextCrumb($title, $this->getApplicationURI());
  79  
  80      $nav->appendChild(
  81        array(
  82          $crumbs,
  83          $post_list,
  84        ));
  85  
  86      return $this->buildApplicationPage(
  87        $nav,
  88        array(
  89          'title'   => $title,
  90        ));
  91    }
  92  
  93  }


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