Changeset View
Changeset View
Standalone View
Standalone View
src/applications/phame/controller/blog/PhameBlogListController.php
<?php | <?php | ||||
final class PhameBlogListController extends PhameController { | final class PhameBlogListController extends PhameController { | ||||
public function shouldAllowPublic() { | |||||
return true; | |||||
} | |||||
public function handleRequest(AphrontRequest $request) { | public function handleRequest(AphrontRequest $request) { | ||||
$user = $request->getUser(); | $query_key = $request->getURIData('queryKey'); | ||||
$controller = id(new PhabricatorApplicationSearchController()) | |||||
->setQueryKey($query_key) | |||||
->setSearchEngine(new PhameBlogSearchEngine()) | |||||
->setNavigation($this->buildSideNavView()); | |||||
$nav = $this->renderSideNavFilterView(null); | return $this->delegateToController($controller); | ||||
$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()) | public function buildSideNavView() { | ||||
->setURI($request->getRequestURI(), 'offset') | $viewer = $this->getRequest()->getUser(); | ||||
->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, | |||||
$box, | |||||
)); | |||||
return $this->buildApplicationPage( | |||||
$nav, | |||||
array( | |||||
'title' => $title, | |||||
)); | |||||
} | |||||
private function renderBlogList( | $nav = new AphrontSideNavFilterView(); | ||||
array $blogs, | $nav->setBaseURI(new PhutilURI($this->getApplicationURI())); | ||||
PhabricatorUser $viewer, | |||||
$nodata) { | |||||
$view = new PHUIObjectItemListView(); | |||||
$view->setNoDataString($nodata); | |||||
$view->setUser($viewer); | |||||
foreach ($blogs as $blog) { | |||||
$id = $blog->getID(); | |||||
$item = id(new PHUIObjectItemView()) | |||||
->setUser($viewer) | |||||
->setObject($blog) | |||||
->setHeader($blog->getName()) | |||||
->setStatusIcon('fa-star') | |||||
->setHref($this->getApplicationURI("/blog/view/{$id}/")) | |||||
->addAttribute($blog->getSkin()) | |||||
->addAttribute($blog->getDomain()); | |||||
$view->addItem($item); | id(new PhameBlogSearchEngine()) | ||||
} | ->setViewer($viewer) | ||||
->addNavigationItems($nav->getMenu()); | |||||
$nav->selectFilter(null); | |||||
return $view; | return $nav; | ||||
} | } | ||||
} | } |