Differential D14890 Diff 35998 src/applications/project/controller/PhabricatorProjectFeedController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/project/controller/PhabricatorProjectFeedController.php
| <?php | <?php | ||||
| final class PhabricatorProjectFeedController | final class PhabricatorProjectFeedController | ||||
| extends PhabricatorProjectController { | extends PhabricatorProjectController { | ||||
| public function shouldAllowPublic() { | public function shouldAllowPublic() { | ||||
| return true; | return true; | ||||
| } | } | ||||
| public function handleRequest(AphrontRequest $request) { | public function handleRequest(AphrontRequest $request) { | ||||
| $user = $request->getUser(); | $viewer = $request->getUser(); | ||||
| $query = id(new PhabricatorProjectQuery()) | $response = $this->loadProject(); | ||||
| ->setViewer($user) | if ($response) { | ||||
| ->needMembers(true) | return $response; | ||||
| ->needWatchers(true) | |||||
| ->needImages(true) | |||||
| ->needSlugs(true); | |||||
| $id = $request->getURIData('id'); | |||||
| $slug = $request->getURIData('slug'); | |||||
| if ($slug) { | |||||
| $query->withSlugs(array($slug)); | |||||
| } else { | |||||
| $query->withIDs(array($id)); | |||||
| } | |||||
| $project = $query->executeOne(); | |||||
| if (!$project) { | |||||
| return new Aphront404Response(); | |||||
| } | |||||
| if ($slug && $slug != $project->getPrimarySlug()) { | |||||
| return id(new AphrontRedirectResponse()) | |||||
| ->setURI('/tag/'.$project->getPrimarySlug().'/'); | |||||
| } | } | ||||
| $query = new PhabricatorFeedQuery(); | $project = $this->getProject(); | ||||
| $query->setFilterPHIDs( | $id = $project->getID(); | ||||
| $stories = id(new PhabricatorFeedQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->setFilterPHIDs( | |||||
| array( | array( | ||||
| $project->getPHID(), | $project->getPHID(), | ||||
| )); | )) | ||||
| $query->setLimit(50); | ->setLimit(50) | ||||
| $query->setViewer($request->getUser()); | ->execute(); | ||||
| $stories = $query->execute(); | |||||
| $feed = $this->renderStories($stories); | $feed = $this->renderStories($stories); | ||||
| $box = id(new PHUIObjectBoxView()) | $box = id(new PHUIObjectBoxView()) | ||||
| ->setHeaderText(pht('Project Activity')) | ->setHeaderText(pht('Project Activity')) | ||||
| ->appendChild($feed); | ->appendChild($feed); | ||||
| $nav = $this->buildIconNavView($project); | $nav = $this->buildIconNavView($project); | ||||
| $nav->selectFilter("feed/{$id}/"); | $nav->selectFilter("feed/{$id}/"); | ||||
| $nav->appendChild($box); | $nav->appendChild($box); | ||||
| return $this->buildApplicationPage( | return $this->buildApplicationPage( | ||||
| $nav, | $nav, | ||||
| array( | array( | ||||
| 'title' => $project->getName(), | 'title' => $project->getName(), | ||||
| )); | )); | ||||
| } | } | ||||
| private function renderFeedPage(PhabricatorProject $project) { | |||||
| $query = new PhabricatorFeedQuery(); | |||||
| $query->setFilterPHIDs(array($project->getPHID())); | |||||
| $query->setViewer($this->getRequest()->getUser()); | |||||
| $query->setLimit(100); | |||||
| $stories = $query->execute(); | |||||
| if (!$stories) { | |||||
| return pht('There are no stories about this project.'); | |||||
| } | |||||
| return $this->renderStories($stories); | |||||
| } | |||||
| private function renderStories(array $stories) { | private function renderStories(array $stories) { | ||||
| assert_instances_of($stories, 'PhabricatorFeedStory'); | assert_instances_of($stories, 'PhabricatorFeedStory'); | ||||
| $builder = new PhabricatorFeedBuilder($stories); | $builder = new PhabricatorFeedBuilder($stories); | ||||
| $builder->setUser($this->getRequest()->getUser()); | $builder->setUser($this->getRequest()->getUser()); | ||||
| $builder->setShowHovercards(true); | $builder->setShowHovercards(true); | ||||
| $view = $builder->buildView(); | $view = $builder->buildView(); | ||||
| return phutil_tag_div( | return phutil_tag_div( | ||||
| 'profile-feed', | 'profile-feed', | ||||
| $view->render()); | $view->render()); | ||||
| } | } | ||||
| } | } | ||||