mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-19 12:00:55 +01:00
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:
parent
a76f61f7e1
commit
c39f302c04
3 changed files with 23 additions and 6 deletions
|
@ -67,6 +67,10 @@ final class PhabricatorApplicationProject extends PhabricatorApplication {
|
|||
'history/(?P<id>[1-9]\d*)/' => 'PhabricatorProjectHistoryController',
|
||||
'(?P<action>watch|unwatch)/(?P<id>[1-9]\d*)/'
|
||||
=> 'PhabricatorProjectWatchController',
|
||||
|
||||
),
|
||||
'/tag/' => array(
|
||||
'(?P<slug>[^/]+)/' => 'PhabricatorProjectProfileController',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -43,10 +43,11 @@ final class PhabricatorProjectPHIDTypeProject extends PhabricatorPHIDType {
|
|||
|
||||
$name = $project->getName();
|
||||
$id = $project->getID();
|
||||
$slug = $project->getPrimarySlug();
|
||||
|
||||
$handle->setName($name);
|
||||
$handle->setObjectName('#'.rtrim($project->getPhrictionSlug(), '/'));
|
||||
$handle->setURI("/project/view/{$id}/");
|
||||
$handle->setObjectName('#'.$slug);
|
||||
$handle->setURI("/tag/{$slug}/");
|
||||
$handle->setImageURI($project->getProfileImageURI());
|
||||
|
||||
if ($project->isArchived()) {
|
||||
|
|
Loading…
Reference in a new issue