diff --git a/src/applications/phame/controller/PhameController.php b/src/applications/phame/controller/PhameController.php index 5e786e9d41..adf72c0e7d 100644 --- a/src/applications/phame/controller/PhameController.php +++ b/src/applications/phame/controller/PhameController.php @@ -1,136 +1,136 @@ getApplicationURI()); $nav = new AphrontSideNavFilterView(); $nav->setBaseURI($base_uri); $nav->addLabel(pht('Create')); $nav->addFilter('post/new', pht('New Post')); $nav->addFilter('blog/new', pht('New Blog')); $nav->addLabel(pht('Posts')); $nav->addFilter('post/draft', pht('My Drafts')); $nav->addFilter('post', pht('My Posts')); $nav->addFilter('post/all', pht('All Posts')); $nav->addLabel(pht('Blogs')); $nav->addFilter('blog/user', pht('Joinable Blogs')); $nav->addFilter('blog/all', pht('All Blogs')); $nav->selectFilter(null); return $nav; } protected function renderPostList( array $posts, PhabricatorUser $viewer, $nodata) { assert_instances_of($posts, 'PhamePost'); $handle_phids = array(); foreach ($posts as $post) { $handle_phids[] = $post->getBloggerPHID(); if ($post->getBlog()) { $handle_phids[] = $post->getBlog()->getPHID(); } } $handles = $viewer->loadHandles($handle_phids); $stories = array(); foreach ($posts as $post) { $blogger = $handles[$post->getBloggerPHID()]->renderLink(); $blogger_uri = $handles[$post->getBloggerPHID()]->getURI(); $blogger_image = $handles[$post->getBloggerPHID()]->getImageURI(); $blog = null; if ($post->getBlog()) { $blog = $handles[$post->getBlog()->getPHID()]->renderLink(); } $phame_post = ''; if ($post->getBody()) { $phame_post = PhabricatorMarkupEngine::summarize($post->getBody()); } $blog_view = $post->getViewURI(); $phame_title = phutil_tag('a', array('href' => $blog_view), $post->getTitle()); $blogger = phutil_tag('strong', array(), $blogger); if ($post->isDraft()) { $title = pht( '%s drafted a blog post on %s.', $blogger, $blog); $title = phutil_tag('em', array(), $title); } else { $title = pht( '%s wrote a blog post on %s.', $blogger, $blog); } $item = id(new PHUIObjectItemView()) ->setObject($post) ->setHeader($post->getTitle()) ->setHref($this->getApplicationURI('post/view/'.$post->getID().'/')); $story = id(new PHUIFeedStoryView()) ->setTitle($title) ->setImage($blogger_image) ->setImageHref($blogger_uri) ->setAppIcon('fa-star') ->setUser($viewer) ->setPontification($phame_post, $phame_title); if (PhabricatorPolicyFilter::hasCapability( $viewer, $post, PhabricatorPolicyCapability::CAN_EDIT)) { $story->addAction(id(new PHUIIconView()) ->setHref($this->getApplicationURI('post/edit/'.$post->getID().'/')) ->setIconFont('fa-pencil')); } if ($post->getDatePublished()) { $story->setEpoch($post->getDatePublished()); } $stories[] = $story; } if (empty($stories)) { - return id(new PHUIInfoView()) - ->setSeverity(PHUIInfoView::SEVERITY_NODATA) - ->appendChild($nodata); + return id(new PHUIBoxView()) + ->appendChild($nodata) + ->addClass('mlt mlb msr msl'); } return $stories; } public function buildApplicationMenu() { return $this->renderSideNavFilterView()->getMenu(); } protected function buildApplicationCrumbs() { $crumbs = parent::buildApplicationCrumbs(); $crumbs->addAction( id(new PHUIListItemView()) ->setName(pht('New Blog')) ->setHref($this->getApplicationURI('/blog/new')) ->setIcon('fa-plus-square')); $crumbs->addAction( id(new PHUIListItemView()) ->setName(pht('New Post')) ->setHref($this->getApplicationURI('/post/new')) ->setIcon('fa-pencil')); return $crumbs; } } diff --git a/src/applications/phame/controller/blog/PhameBlogListController.php b/src/applications/phame/controller/blog/PhameBlogListController.php index 2b9391d044..16486b95da 100644 --- a/src/applications/phame/controller/blog/PhameBlogListController.php +++ b/src/applications/phame/controller/blog/PhameBlogListController.php @@ -1,78 +1,82 @@ getUser(); $nav = $this->renderSideNavFilterView(null); $filter = $request->getURIData('filter'); $filter = $nav->selectFilter('blog/'.$filter, 'blog/user'); $query = id(new PhameBlogQuery()) ->setViewer($user); switch ($filter) { case 'blog/all': $title = pht('All Blogs'); $nodata = pht('No blogs have been created.'); break; case 'blog/user': $title = pht('Joinable Blogs'); $nodata = pht('There are no blogs you can contribute to.'); $query->requireCapabilities( array( PhabricatorPolicyCapability::CAN_JOIN, )); break; default: throw new Exception(pht("Unknown filter '%s'!", $filter)); } $pager = id(new PHUIPagerView()) ->setURI($request->getRequestURI(), 'offset') ->setOffset($request->getInt('offset')); $blogs = $query->executeWithOffsetPager($pager); $blog_list = $this->renderBlogList($blogs, $user, $nodata); $blog_list->setPager($pager); + $box = id (new PHUIObjectBoxView()) + ->setHeaderText($title) + ->setObjectList($blog_list); + $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb($title, $this->getApplicationURI()); $nav->appendChild( array( $crumbs, - $blog_list, + $box, )); return $this->buildApplicationPage( $nav, array( 'title' => $title, )); } private function renderBlogList( array $blogs, PhabricatorUser $user, $nodata) { $view = new PHUIObjectItemListView(); $view->setNoDataString($nodata); $view->setUser($user); foreach ($blogs as $blog) { $item = id(new PHUIObjectItemView()) ->setHeader($blog->getName()) ->setHref($this->getApplicationURI('blog/view/'.$blog->getID().'/')) ->setObject($blog); $view->addItem($item); } return $view; } } diff --git a/src/applications/phame/controller/post/PhamePostListController.php b/src/applications/phame/controller/post/PhamePostListController.php index 7c82319158..90ba2a1ae7 100644 --- a/src/applications/phame/controller/post/PhamePostListController.php +++ b/src/applications/phame/controller/post/PhamePostListController.php @@ -1,89 +1,88 @@ filter = idx($data, 'filter', 'blogger'); $this->bloggername = idx($data, 'bloggername'); } public function processRequest() { $request = $this->getRequest(); $user = $request->getUser(); $query = id(new PhamePostQuery()) ->setViewer($user); $nav = $this->renderSideNavFilterView(); + $nodata = null; switch ($this->filter) { case 'draft': $query->withBloggerPHIDs(array($user->getPHID())); $query->withVisibility(PhamePost::VISIBILITY_DRAFT); $nodata = pht('You have no unpublished drafts.'); $title = pht('Unpublished Drafts'); $nav->selectFilter('post/draft'); break; case 'blogger': if ($this->bloggername) { $blogger = id(new PhabricatorUser())->loadOneWhere( 'username = %s', $this->bloggername); if (!$blogger) { return new Aphront404Response(); } } else { $blogger = $user; } $query->withBloggerPHIDs(array($blogger->getPHID())); if ($blogger->getPHID() == $user->getPHID()) { $nav->selectFilter('post'); $nodata = pht('You have not written any posts.'); } else { $nodata = pht('%s has not written any posts.', $blogger); } - $title = pht('Posts By %s', $blogger); + $title = pht('Posts by %s', $blogger); break; case 'all': $nodata = pht('There are no visible posts.'); $title = pht('Posts'); $nav->selectFilter('post/all'); break; default: throw new Exception(pht("Unknown filter '%s'!", $this->filter)); } $pager = id(new AphrontCursorPagerView()) ->readFromRequest($request); $posts = $query->executeWithCursorPager($pager); require_celerity_resource('phame-css'); $post_list = $this->renderPostList($posts, $user, $nodata); - $post_list = id(new PHUIBoxView()) - ->addPadding(PHUI::PADDING_LARGE) - ->addClass('phame-post-list') + $post_list = id(new PHUIObjectBoxView()) + ->setHeaderText($title) ->appendChild($post_list); $crumbs = $this->buildApplicationCrumbs(); - $crumbs->setBorder(true); $crumbs->addTextCrumb($title, $this->getApplicationURI()); $nav->appendChild( array( $crumbs, $post_list, )); return $this->buildApplicationPage( $nav, array( 'title' => $title, )); } }