Project - use hashtag as a way to access project profile in URI, e.g. /project/hashtag/

Summary: Fixes T4022. Hooks up the project profile controller to understanding URIs like /project/hashtag/ Also, makes handles have the new /project/hashtag/ URI by default, thus upselling that feature super duper heavily.

Test Plan: clicked some project links, noted pretty uri and page working nicely.

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: chad, epriestley, Korvin

Maniphest Tasks: T4022

Differential Revision: https://secure.phabricator.com/D9260
This commit is contained in:
Bob Trahan
2014-05-22 15:16:16 -07:00
parent a76f61f7e1
commit c39f302c04
3 changed files with 23 additions and 6 deletions

View File

@@ -4,29 +4,41 @@ final class PhabricatorProjectProfileController
extends PhabricatorProjectController {
private $id;
private $slug;
public function shouldAllowPublic() {
return true;
}
public function willProcessRequest(array $data) {
// via /project/view/$id/
$this->id = idx($data, 'id');
// via /tag/$slug/
$this->slug = idx($data, 'slug');
}
public function processRequest() {
$request = $this->getRequest();
$user = $request->getUser();
$project = id(new PhabricatorProjectQuery())
$query = id(new PhabricatorProjectQuery())
->setViewer($user)
->withIDs(array($this->id))
->needMembers(true)
->needWatchers(true)
->needImages(true)
->executeOne();
->needImages(true);
if ($this->slug) {
$query->withSlugs(array($this->slug));
} else {
$query->withIDs(array($this->id));
}
$project = $query->executeOne();
if (!$project) {
return new Aphront404Response();
}
if ($this->slug && $this->slug != $project->getPrimarySlug()) {
return id(new AphrontRedirectResponse())
->setURI('/tag/'.$project->getPrimarySlug().'/');
}
$picture = $project->getProfileImageURI();