postPHIDs = $post_phids; return $this; } private function getPostPHIDs() { return $this->postPHIDs; } private function setBloggerPHIDs($blogger_phids) { $this->bloggerPHIDs = $blogger_phids; return $this; } private function getBloggerPHIDs() { return $this->bloggerPHIDs; } private function setBlogPHID($blog_phid) { $this->blogPHID = $blog_phid; return $this; } private function getBlogPHID() { return $this->blogPHID; } protected function getSideNavFilter() { $filter = 'blog/view/'.$this->getBlogPHID(); return $filter; } protected function getSideNavExtraBlogFilters() { $filters = array( array('key' => $this->getSideNavFilter(), 'name' => $this->getPhameTitle()) ); return $filters; } public function willProcessRequest(array $data) { $this->setBlogPHID(idx($data, 'phid')); } public function processRequest() { $request = $this->getRequest(); $user = $request->getUser(); $blog_phid = $this->getBlogPHID(); $blogs = id(new PhameBlogQuery()) ->withPHIDs(array($blog_phid)) ->execute(); $blog = reset($blogs); if (!$blog) { return new Aphront404Response(); } $this->loadEdges(); $blogger_phids = $this->getBloggerPHIDs(); if ($blogger_phids) { $bloggers = id(new PhabricatorObjectHandleData($blogger_phids)) ->loadHandles(); } else { $bloggers = array(); } $post_phids = $this->getPostPHIDs(); if ($post_phids) { $posts = id(new PhamePostQuery()) ->withPHIDs($post_phids) ->withVisibility(PhamePost::VISIBILITY_PUBLISHED) ->execute(); } else { $posts = array(); } $actions = array('view'); $is_admin = false; // TODO -- make this check use a policy if (isset($bloggers[$user->getPHID()])) { $actions[] = 'edit'; $is_admin = true; } if ($request->getExists('new')) { $notice = $this->buildNoticeView() ->setTitle('Successfully created your blog.') ->appendChild('Time to write some posts.'); } else { $notice = null; } $details = id(new PhameBlogDetailView()) ->setUser($user) ->setBloggers($bloggers) ->setBlog($blog) ->setIsAdmin($is_admin); $panel = id(new PhamePostListView()) ->setUser($this->getRequest()->getUser()) ->setBloggers($bloggers) ->setPosts($posts) ->setActions($actions) ->setDraftList(false); $this->setShowSideNav(false); return $this->buildStandardPageResponse( array( $notice, $details, $panel, ), array( 'title' => $blog->getName(), )); } private function loadEdges() { $edge_types = array( PhabricatorEdgeConfig::TYPE_BLOG_HAS_BLOGGER, PhabricatorEdgeConfig::TYPE_BLOG_HAS_POST, ); $blog_phid = $this->getBlogPHID(); $phids = array($blog_phid); $edges = id(new PhabricatorEdgeQuery()) ->withSourcePHIDs($phids) ->withEdgeTypes($edge_types) ->execute(); $blogger_phids = array_keys( $edges[$blog_phid][PhabricatorEdgeConfig::TYPE_BLOG_HAS_BLOGGER] ); $this->setBloggerPHIDs($blogger_phids); $post_phids = array_keys( $edges[$blog_phid][PhabricatorEdgeConfig::TYPE_BLOG_HAS_POST] ); $this->setPostPHIDs($post_phids); } }