diff --git a/src/applications/phame/controller/PhameHomeController.php b/src/applications/phame/controller/PhameHomeController.php index 6383a65894..c547071e67 100644 --- a/src/applications/phame/controller/PhameHomeController.php +++ b/src/applications/phame/controller/PhameHomeController.php @@ -1,140 +1,155 @@ getViewer(); $blogs = id(new PhameBlogQuery()) ->setViewer($viewer) ->withStatuses(array(PhameBlog::STATUS_ACTIVE)) ->needProfileImage(true) ->execute(); - $blog_phids = mpull($blogs, 'getPHID'); + $post_list = null; + if ($blogs) { + $blog_phids = mpull($blogs, 'getPHID'); - $pager = id(new AphrontCursorPagerView()) - ->readFromRequest($request); + $pager = id(new AphrontCursorPagerView()) + ->readFromRequest($request); - $posts = id(new PhamePostQuery()) - ->setViewer($viewer) - ->withBlogPHIDs($blog_phids) - ->withVisibility(PhameConstants::VISIBILITY_PUBLISHED) - ->executeWithCursorPager($pager); + $posts = id(new PhamePostQuery()) + ->setViewer($viewer) + ->withBlogPHIDs($blog_phids) + ->withVisibility(PhameConstants::VISIBILITY_PUBLISHED) + ->executeWithCursorPager($pager); + + $post_list = id(new PhamePostListView()) + ->setPosts($posts) + ->setViewer($viewer) + ->showBlog(true); + } else { + $create_button = id(new PHUIButtonView()) + ->setTag('a') + ->setText(pht('Create a Blog')) + ->setHref('/phame/blog/new/') + ->setColor(PHUIButtonView::GREEN); + + $post_list = id(new PHUIBigInfoView()) + ->setIcon('fa-star') + ->setTitle('Welcome to Phame') + ->setDescription( + pht('There aren\'t any visible Blog Posts.')) + ->addAction($create_button); + } $actions = $this->renderActions($viewer); $action_button = id(new PHUIButtonView()) ->setTag('a') ->setText(pht('Actions')) ->setHref('#') ->setIconFont('fa-bars') ->addClass('phui-mobile-menu') ->setDropdownMenu($actions); $title = pht('Recent Posts'); $header = id(new PHUIHeaderView()) ->setHeader($title) ->addActionLink($action_button); - $post_list = id(new PhamePostListView()) - ->setPosts($posts) - ->setViewer($viewer) - ->showBlog(true) - ->setNodata(pht('No Recent Visible Posts.')); - $crumbs = $this->buildApplicationCrumbs(); $crumbs->setBorder(true); $crumbs->addTextCrumb( pht('Recent Posts'), $this->getApplicationURI('post/')); $page = id(new PHUIDocumentViewPro()) ->setHeader($header) ->appendChild($post_list); $blog_list = id(new PhameBlogListView()) ->setBlogs($blogs) ->setViewer($viewer); $draft_list = null; if ($viewer->isLoggedIn()) { $drafts = id(new PhamePostQuery()) ->setViewer($viewer) ->withBloggerPHIDs(array($viewer->getPHID())) ->withBlogPHIDs(mpull($blogs, 'getPHID')) ->withVisibility(PhameConstants::VISIBILITY_DRAFT) ->setLimit(5) ->execute(); $draft_list = id(new PhameDraftListView()) ->setPosts($drafts) ->setBlogs($blogs) ->setViewer($viewer); } $phame_view = id(new PHUITwoColumnView()) ->setMainColumn(array( $page, )) ->setSideColumn(array( $blog_list, $draft_list, )) ->setDisplay(PHUITwoColumnView::DISPLAY_LEFT) ->addClass('phame-home-view'); return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) ->appendChild( array( $phame_view, )); } private function renderActions($viewer) { $actions = id(new PhabricatorActionListView()) ->setUser($viewer); $actions->addAction( id(new PhabricatorActionView()) ->setIcon('fa-pencil') ->setHref($this->getApplicationURI('post/query/draft/')) ->setName(pht('My Drafts'))); $actions->addAction( id(new PhabricatorActionView()) ->setIcon('fa-pencil-square-o') ->setHref($this->getApplicationURI('post/')) ->setName(pht('All Posts'))); return $actions; } private function renderBlogs($viewer, $blogs) {} protected function buildApplicationCrumbs() { $crumbs = parent::buildApplicationCrumbs(); $can_create = $this->hasApplicationCapability( PhameBlogCreateCapability::CAPABILITY); $crumbs->addAction( id(new PHUIListItemView()) ->setName(pht('New Blog')) ->setHref($this->getApplicationURI('/blog/new/')) ->setIcon('fa-plus-square') ->setDisabled(!$can_create) ->setWorkflow(!$can_create)); return $crumbs; } } diff --git a/src/applications/phame/controller/blog/PhameBlogViewController.php b/src/applications/phame/controller/blog/PhameBlogViewController.php index dd963a327b..c387152019 100644 --- a/src/applications/phame/controller/blog/PhameBlogViewController.php +++ b/src/applications/phame/controller/blog/PhameBlogViewController.php @@ -1,142 +1,165 @@ setupLiveEnvironment(); if ($response) { return $response; } $viewer = $this->getViewer(); $blog = $this->getBlog(); $is_live = $this->getIsLive(); $is_external = $this->getIsExternal(); $pager = id(new AphrontCursorPagerView()) ->readFromRequest($request); $post_query = id(new PhamePostQuery()) ->setViewer($viewer) ->withBlogPHIDs(array($blog->getPHID())); if ($is_live) { $post_query->withVisibility(PhameConstants::VISIBILITY_PUBLISHED); } $posts = $post_query->executeWithCursorPager($pager); $header = id(new PHUIHeaderView()) ->setHeader($blog->getName()) ->setUser($viewer); if (!$is_external) { if ($blog->isArchived()) { $header_icon = 'fa-ban'; $header_name = pht('Archived'); $header_color = 'dark'; } else { $header_icon = 'fa-check'; $header_name = pht('Active'); $header_color = 'bluegrey'; } $header->setStatus($header_icon, $header_color, $header_name); $actions = $this->renderActions($blog); $action_button = id(new PHUIButtonView()) ->setTag('a') ->setText(pht('Actions')) ->setHref('#') ->setIconFont('fa-bars') ->addClass('phui-mobile-menu') ->setDropdownMenu($actions); $header->addActionLink($action_button); $header->setPolicyObject($blog); } - $post_list = id(new PhamePostListView()) - ->setPosts($posts) - ->setViewer($viewer) - ->setIsExternal($is_external) - ->setIsLive($is_live) - ->setNodata(pht('This blog has no visible posts.')); + if ($posts) { + $post_list = id(new PhamePostListView()) + ->setPosts($posts) + ->setViewer($viewer) + ->setIsExternal($is_external) + ->setIsLive($is_live) + ->setNodata(pht('This blog has no visible posts.')); + } else { + $create_button = id(new PHUIButtonView()) + ->setTag('a') + ->setText(pht('Write a Post')) + ->setHref($this->getApplicationURI('post/edit/?blog='.$blog->getID())) + ->setColor(PHUIButtonView::GREEN); + + $post_list = id(new PHUIBigInfoView()) + ->setIcon('fa-star') + ->setTitle($blog->getName()) + ->setDescription( + pht('No one has written any blog posts yet.')); + + $can_edit = PhabricatorPolicyFilter::hasCapability( + $viewer, + $blog, + PhabricatorPolicyCapability::CAN_EDIT); + + if ($can_edit) { + $post_list->addAction($create_button); + } + } $page = id(new PHUIDocumentViewPro()) ->setHeader($header) ->appendChild($post_list); $description = null; if (strlen($blog->getDescription())) { $description = new PHUIRemarkupView( $viewer, $blog->getDescription()); } else { $description = phutil_tag('em', array(), pht('No description.')); } $about = id(new PhameDescriptionView()) ->setTitle(pht('About %s', $blog->getName())) ->setDescription($description) ->setImage($blog->getProfileImageURI()); $crumbs = $this->buildApplicationCrumbs(); $page = $this->newPage() ->setTitle($blog->getName()) ->setPageObjectPHIDs(array($blog->getPHID())) ->setCrumbs($crumbs) ->appendChild( array( $page, $about, )); if ($is_live) { $page ->setShowChrome(false) ->setShowFooter(false); } return $page; } private function renderActions(PhameBlog $blog) { $viewer = $this->getViewer(); $actions = id(new PhabricatorActionListView()) ->setObject($blog) ->setUser($viewer); $can_edit = PhabricatorPolicyFilter::hasCapability( $viewer, $blog, PhabricatorPolicyCapability::CAN_EDIT); $actions->addAction( id(new PhabricatorActionView()) ->setIcon('fa-plus') ->setHref($this->getApplicationURI('post/edit/?blog='.$blog->getID())) ->setName(pht('Write Post')) ->setDisabled(!$can_edit) ->setWorkflow(!$can_edit)); $actions->addAction( id(new PhabricatorActionView()) ->setUser($viewer) ->setIcon('fa-globe') ->setHref($blog->getLiveURI()) ->setName(pht('View Live'))); $actions->addAction( id(new PhabricatorActionView()) ->setIcon('fa-pencil') ->setHref($this->getApplicationURI('blog/manage/'.$blog->getID().'/')) ->setName(pht('Manage Blog'))); return $actions; } }