Remove skins from Phame
Summary:
Ref T9897. Purge a bunch of stuff:
- Remove skins.
- Remove all custom sites for skin resources.
- Remove "framed", "notlive", "preview", separate "live" controllers (see below).
- Merge "publish" and "unpublish" controllers into one.
New behavior:
- Blogs and posts have three views:
- "View": Internal view URI, which is a normal detail page.
- "Internal Live": Internal view URI which is a little prettier.
- "External Live": External view URI for an external domain.
Right now, the differences are pretty minor (basically, different crumbs/chrome). This mostly gives us room to put some milder flavor of skins back later (photography or more "presentation" elements, for example).
This removes 9 million lines of code so I probably missed a couple of things, but I think it's like 95% of the way there.
Test Plan:
Here are some examples of what the "view", "internal" and "external" views look like for blogs (posts are similar):
"View": Unchanged
{F1021634}
"Internal": No chrome or footer. Still write actions (edit, post commments). Has crumbs to get back into Phame.
{F1021635}
"External": No chrome or footer. No write actions. No Phabricator crumbs. No policy/status information.
{F1021638}
I figure we'll probably tweak these a bit to figure out what makes sense (like: maybe no actions on "internal, live"? and "external, live" probably needs a way to set a root "Company >" crumb?) but that they're reasonable-ish as a first cut?
Reviewers: chad
Reviewed By: chad
Maniphest Tasks: T9897
Differential Revision: https://secure.phabricator.com/D14740
2015-12-11 07:07:45 -08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
abstract class PhameLiveController extends PhameController {
|
|
|
|
|
|
|
|
private $isExternal;
|
|
|
|
private $isLive;
|
|
|
|
private $blog;
|
|
|
|
private $post;
|
|
|
|
|
|
|
|
public function shouldAllowPublic() {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getIsExternal() {
|
|
|
|
return $this->isExternal;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getIsLive() {
|
|
|
|
return $this->isLive;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getBlog() {
|
|
|
|
return $this->blog;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getPost() {
|
|
|
|
return $this->post;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function setupLiveEnvironment() {
|
|
|
|
$request = $this->getRequest();
|
|
|
|
$viewer = $this->getViewer();
|
|
|
|
|
|
|
|
$site = $request->getSite();
|
|
|
|
$blog_id = $request->getURIData('blogID');
|
|
|
|
$post_id = $request->getURIData('id');
|
|
|
|
|
|
|
|
if ($site instanceof PhameBlogSite) {
|
|
|
|
// This is a live page on a custom domain. We already looked up the blog
|
|
|
|
// in the Site handler by examining the domain, so we don't need to do
|
|
|
|
// more lookups.
|
|
|
|
|
|
|
|
$blog = $site->getBlog();
|
|
|
|
$is_external = true;
|
|
|
|
$is_live = true;
|
|
|
|
} else if ($blog_id) {
|
|
|
|
// This is a blog detail view, an internal blog live view, or an
|
|
|
|
// internal post live view The internal post detail view is handled
|
|
|
|
// below.
|
|
|
|
|
|
|
|
$is_external = false;
|
|
|
|
if ($request->getURIData('live')) {
|
|
|
|
$is_live = true;
|
|
|
|
} else {
|
|
|
|
$is_live = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
$blog_query = id(new PhameBlogQuery())
|
|
|
|
->setViewer($viewer)
|
|
|
|
->needProfileImage(true)
|
|
|
|
->withIDs(array($blog_id));
|
|
|
|
|
|
|
|
// If this is a live view, only show active blogs.
|
|
|
|
if ($is_live) {
|
|
|
|
$blog_query->withStatuses(
|
|
|
|
array(
|
|
|
|
PhameBlog::STATUS_ACTIVE,
|
|
|
|
));
|
|
|
|
}
|
|
|
|
|
|
|
|
$blog = $blog_query->executeOne();
|
|
|
|
if (!$blog) {
|
|
|
|
return new Aphront404Response();
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
// This is a post detail page, so we'll figure out the blog by loading
|
|
|
|
// the post first.
|
|
|
|
$is_external = false;
|
|
|
|
$is_live = false;
|
|
|
|
$blog = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($post_id) {
|
|
|
|
$post_query = id(new PhamePostQuery())
|
|
|
|
->setViewer($viewer)
|
|
|
|
->withIDs(array($post_id));
|
|
|
|
|
|
|
|
if ($blog) {
|
|
|
|
$post_query->withBlogPHIDs(array($blog->getPHID()));
|
|
|
|
}
|
|
|
|
|
|
|
|
// Only show published posts on external domains.
|
|
|
|
if ($is_external) {
|
|
|
|
$post_query->withVisibility(PhameConstants::VISIBILITY_PUBLISHED);
|
|
|
|
}
|
|
|
|
|
|
|
|
$post = $post_query->executeOne();
|
|
|
|
if (!$post) {
|
|
|
|
return new Aphront404Response();
|
|
|
|
}
|
|
|
|
|
|
|
|
// If this is a post detail page, the URI didn't come with a blog ID,
|
|
|
|
// so fill that in.
|
|
|
|
if (!$blog) {
|
|
|
|
$blog = $post->getBlog();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$post = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->isExternal = $is_external;
|
|
|
|
$this->isLive = $is_live;
|
|
|
|
$this->blog = $blog;
|
|
|
|
$this->post = $post;
|
|
|
|
|
|
|
|
// If we have a post, canonicalize the URI to the post's current slug and
|
|
|
|
// redirect the user if it isn't correct.
|
|
|
|
if ($post) {
|
|
|
|
$slug = $request->getURIData('slug');
|
|
|
|
if ($post->getSlug() != $slug) {
|
|
|
|
if ($is_live) {
|
|
|
|
if ($is_external) {
|
|
|
|
$uri = $post->getExternalLiveURI();
|
|
|
|
} else {
|
|
|
|
$uri = $post->getInternalLiveURI();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$uri = $post->getViewURI();
|
|
|
|
}
|
|
|
|
|
2015-12-11 08:28:25 -08:00
|
|
|
$response = id(new AphrontRedirectResponse())
|
|
|
|
->setURI($uri);
|
|
|
|
|
|
|
|
if ($is_external) {
|
|
|
|
$response->setIsExternal(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $response;
|
Remove skins from Phame
Summary:
Ref T9897. Purge a bunch of stuff:
- Remove skins.
- Remove all custom sites for skin resources.
- Remove "framed", "notlive", "preview", separate "live" controllers (see below).
- Merge "publish" and "unpublish" controllers into one.
New behavior:
- Blogs and posts have three views:
- "View": Internal view URI, which is a normal detail page.
- "Internal Live": Internal view URI which is a little prettier.
- "External Live": External view URI for an external domain.
Right now, the differences are pretty minor (basically, different crumbs/chrome). This mostly gives us room to put some milder flavor of skins back later (photography or more "presentation" elements, for example).
This removes 9 million lines of code so I probably missed a couple of things, but I think it's like 95% of the way there.
Test Plan:
Here are some examples of what the "view", "internal" and "external" views look like for blogs (posts are similar):
"View": Unchanged
{F1021634}
"Internal": No chrome or footer. Still write actions (edit, post commments). Has crumbs to get back into Phame.
{F1021635}
"External": No chrome or footer. No write actions. No Phabricator crumbs. No policy/status information.
{F1021638}
I figure we'll probably tweak these a bit to figure out what makes sense (like: maybe no actions on "internal, live"? and "external, live" probably needs a way to set a root "Company >" crumb?) but that they're reasonable-ish as a first cut?
Reviewers: chad
Reviewed By: chad
Maniphest Tasks: T9897
Differential Revision: https://secure.phabricator.com/D14740
2015-12-11 07:07:45 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function buildApplicationCrumbs() {
|
|
|
|
$blog = $this->getBlog();
|
|
|
|
$post = $this->getPost();
|
|
|
|
|
|
|
|
$is_live = $this->getIsLive();
|
|
|
|
$is_external = $this->getIsExternal();
|
|
|
|
|
|
|
|
// If this is an external view, don't put the "Phame" crumb or the
|
|
|
|
// "Blogs" crumb into the crumbs list.
|
|
|
|
if ($is_external) {
|
|
|
|
$crumbs = new PHUICrumbsView();
|
|
|
|
} else {
|
|
|
|
$crumbs = parent::buildApplicationCrumbs();
|
|
|
|
$crumbs->addTextCrumb(
|
|
|
|
pht('Blogs'),
|
|
|
|
$this->getApplicationURI('blog/'));
|
|
|
|
}
|
|
|
|
|
|
|
|
$crumbs->setBorder(true);
|
|
|
|
|
2015-12-11 17:27:48 -08:00
|
|
|
if ($blog) {
|
|
|
|
if ($post) {
|
|
|
|
if ($is_live) {
|
|
|
|
if ($is_external) {
|
|
|
|
$blog_uri = $blog->getExternalLiveURI();
|
|
|
|
} else {
|
|
|
|
$blog_uri = $blog->getInternalLiveURI();
|
|
|
|
}
|
Remove skins from Phame
Summary:
Ref T9897. Purge a bunch of stuff:
- Remove skins.
- Remove all custom sites for skin resources.
- Remove "framed", "notlive", "preview", separate "live" controllers (see below).
- Merge "publish" and "unpublish" controllers into one.
New behavior:
- Blogs and posts have three views:
- "View": Internal view URI, which is a normal detail page.
- "Internal Live": Internal view URI which is a little prettier.
- "External Live": External view URI for an external domain.
Right now, the differences are pretty minor (basically, different crumbs/chrome). This mostly gives us room to put some milder flavor of skins back later (photography or more "presentation" elements, for example).
This removes 9 million lines of code so I probably missed a couple of things, but I think it's like 95% of the way there.
Test Plan:
Here are some examples of what the "view", "internal" and "external" views look like for blogs (posts are similar):
"View": Unchanged
{F1021634}
"Internal": No chrome or footer. Still write actions (edit, post commments). Has crumbs to get back into Phame.
{F1021635}
"External": No chrome or footer. No write actions. No Phabricator crumbs. No policy/status information.
{F1021638}
I figure we'll probably tweak these a bit to figure out what makes sense (like: maybe no actions on "internal, live"? and "external, live" probably needs a way to set a root "Company >" crumb?) but that they're reasonable-ish as a first cut?
Reviewers: chad
Reviewed By: chad
Maniphest Tasks: T9897
Differential Revision: https://secure.phabricator.com/D14740
2015-12-11 07:07:45 -08:00
|
|
|
} else {
|
2015-12-11 17:27:48 -08:00
|
|
|
$blog_uri = $blog->getViewURI();
|
Remove skins from Phame
Summary:
Ref T9897. Purge a bunch of stuff:
- Remove skins.
- Remove all custom sites for skin resources.
- Remove "framed", "notlive", "preview", separate "live" controllers (see below).
- Merge "publish" and "unpublish" controllers into one.
New behavior:
- Blogs and posts have three views:
- "View": Internal view URI, which is a normal detail page.
- "Internal Live": Internal view URI which is a little prettier.
- "External Live": External view URI for an external domain.
Right now, the differences are pretty minor (basically, different crumbs/chrome). This mostly gives us room to put some milder flavor of skins back later (photography or more "presentation" elements, for example).
This removes 9 million lines of code so I probably missed a couple of things, but I think it's like 95% of the way there.
Test Plan:
Here are some examples of what the "view", "internal" and "external" views look like for blogs (posts are similar):
"View": Unchanged
{F1021634}
"Internal": No chrome or footer. Still write actions (edit, post commments). Has crumbs to get back into Phame.
{F1021635}
"External": No chrome or footer. No write actions. No Phabricator crumbs. No policy/status information.
{F1021638}
I figure we'll probably tweak these a bit to figure out what makes sense (like: maybe no actions on "internal, live"? and "external, live" probably needs a way to set a root "Company >" crumb?) but that they're reasonable-ish as a first cut?
Reviewers: chad
Reviewed By: chad
Maniphest Tasks: T9897
Differential Revision: https://secure.phabricator.com/D14740
2015-12-11 07:07:45 -08:00
|
|
|
}
|
|
|
|
} else {
|
2015-12-11 17:27:48 -08:00
|
|
|
$blog_uri = null;
|
Remove skins from Phame
Summary:
Ref T9897. Purge a bunch of stuff:
- Remove skins.
- Remove all custom sites for skin resources.
- Remove "framed", "notlive", "preview", separate "live" controllers (see below).
- Merge "publish" and "unpublish" controllers into one.
New behavior:
- Blogs and posts have three views:
- "View": Internal view URI, which is a normal detail page.
- "Internal Live": Internal view URI which is a little prettier.
- "External Live": External view URI for an external domain.
Right now, the differences are pretty minor (basically, different crumbs/chrome). This mostly gives us room to put some milder flavor of skins back later (photography or more "presentation" elements, for example).
This removes 9 million lines of code so I probably missed a couple of things, but I think it's like 95% of the way there.
Test Plan:
Here are some examples of what the "view", "internal" and "external" views look like for blogs (posts are similar):
"View": Unchanged
{F1021634}
"Internal": No chrome or footer. Still write actions (edit, post commments). Has crumbs to get back into Phame.
{F1021635}
"External": No chrome or footer. No write actions. No Phabricator crumbs. No policy/status information.
{F1021638}
I figure we'll probably tweak these a bit to figure out what makes sense (like: maybe no actions on "internal, live"? and "external, live" probably needs a way to set a root "Company >" crumb?) but that they're reasonable-ish as a first cut?
Reviewers: chad
Reviewed By: chad
Maniphest Tasks: T9897
Differential Revision: https://secure.phabricator.com/D14740
2015-12-11 07:07:45 -08:00
|
|
|
}
|
|
|
|
|
2015-12-11 17:27:48 -08:00
|
|
|
$crumbs->addTextCrumb($blog->getName(), $blog_uri);
|
|
|
|
}
|
Remove skins from Phame
Summary:
Ref T9897. Purge a bunch of stuff:
- Remove skins.
- Remove all custom sites for skin resources.
- Remove "framed", "notlive", "preview", separate "live" controllers (see below).
- Merge "publish" and "unpublish" controllers into one.
New behavior:
- Blogs and posts have three views:
- "View": Internal view URI, which is a normal detail page.
- "Internal Live": Internal view URI which is a little prettier.
- "External Live": External view URI for an external domain.
Right now, the differences are pretty minor (basically, different crumbs/chrome). This mostly gives us room to put some milder flavor of skins back later (photography or more "presentation" elements, for example).
This removes 9 million lines of code so I probably missed a couple of things, but I think it's like 95% of the way there.
Test Plan:
Here are some examples of what the "view", "internal" and "external" views look like for blogs (posts are similar):
"View": Unchanged
{F1021634}
"Internal": No chrome or footer. Still write actions (edit, post commments). Has crumbs to get back into Phame.
{F1021635}
"External": No chrome or footer. No write actions. No Phabricator crumbs. No policy/status information.
{F1021638}
I figure we'll probably tweak these a bit to figure out what makes sense (like: maybe no actions on "internal, live"? and "external, live" probably needs a way to set a root "Company >" crumb?) but that they're reasonable-ish as a first cut?
Reviewers: chad
Reviewed By: chad
Maniphest Tasks: T9897
Differential Revision: https://secure.phabricator.com/D14740
2015-12-11 07:07:45 -08:00
|
|
|
|
|
|
|
if ($post) {
|
|
|
|
$crumbs->addTextCrumb($post->getTitle());
|
|
|
|
}
|
|
|
|
|
|
|
|
return $crumbs;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|