mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-29 18:22:41 +01:00
Add basic support for OpenGraph header tags for public installs
Summary: Ref T13018. This is easy to get working roughly, at least, and seems reasonable. Test Plan: Viewed page source, saw tags. Custom header logo still worked. Pretty hard to debug against a local install since Disqus / debugger tools can't hit it, but I'll see what it looks like in production and tweak it if I got anything horribly wrong. Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13018 Differential Revision: https://secure.phabricator.com/D18780
This commit is contained in:
parent
2d4a158356
commit
2c72c2b924
3 changed files with 84 additions and 29 deletions
|
@ -13,6 +13,39 @@ final class PhabricatorCustomLogoConfigType
|
|||
return idx($logo, 'wordmarkText');
|
||||
}
|
||||
|
||||
public static function getLogoURI(PhabricatorUser $viewer) {
|
||||
$logo_uri = null;
|
||||
|
||||
$custom_header = self::getLogoImagePHID();
|
||||
if ($custom_header) {
|
||||
$cache = PhabricatorCaches::getImmutableCache();
|
||||
$cache_key_logo = 'ui.custom-header.logo-phid.v3.'.$custom_header;
|
||||
$logo_uri = $cache->getKey($cache_key_logo);
|
||||
|
||||
if (!$logo_uri) {
|
||||
// NOTE: If the file policy has been changed to be restrictive, we'll
|
||||
// miss here and just show the default logo. The cache will fill later
|
||||
// when someone who can see the file loads the page. This might be a
|
||||
// little spooky, see T11982.
|
||||
$files = id(new PhabricatorFileQuery())
|
||||
->setViewer($viewer)
|
||||
->withPHIDs(array($custom_header))
|
||||
->execute();
|
||||
$file = head($files);
|
||||
if ($file) {
|
||||
$logo_uri = $file->getViewURI();
|
||||
$cache->setKey($cache_key_logo, $logo_uri);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$logo_uri) {
|
||||
$logo_uri = celerity_get_resource_uri('/rsrc/image/logo/light-eye.png');
|
||||
}
|
||||
|
||||
return $logo_uri;
|
||||
}
|
||||
|
||||
public function validateOption(PhabricatorConfigOption $option, $value) {
|
||||
if (!is_array($value)) {
|
||||
throw new Exception(
|
||||
|
|
|
@ -426,10 +426,11 @@ final class PhabricatorStandardPageView extends PhabricatorBarePageView
|
|||
}
|
||||
|
||||
return hsprintf(
|
||||
'%s%s%s',
|
||||
'%s%s%s%s',
|
||||
parent::getHead(),
|
||||
$font_css,
|
||||
$response->renderSingleResource('javelin-magical-init', 'phabricator'));
|
||||
$response->renderSingleResource('javelin-magical-init', 'phabricator'),
|
||||
$this->newOpenGraphTags());
|
||||
}
|
||||
|
||||
public function setGlyph($glyph) {
|
||||
|
@ -911,4 +912,45 @@ final class PhabricatorStandardPageView extends PhabricatorBarePageView
|
|||
return $response;
|
||||
}
|
||||
|
||||
private function newOpenGraphTags() {
|
||||
// If we don't allow public access, there's no point in emitting OpenGraph
|
||||
// tags because external systems can't fetch pages.
|
||||
if (!PhabricatorEnv::getEnvConfig('policy.allow-public')) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$properties = array(
|
||||
array(
|
||||
'og:title',
|
||||
$this->getTitle(),
|
||||
),
|
||||
array(
|
||||
'og:type',
|
||||
'website',
|
||||
),
|
||||
array(
|
||||
'og:url',
|
||||
PhabricatorEnv::getProductionURI($this->getRequest()->getRequestURI()),
|
||||
),
|
||||
array(
|
||||
'og:image',
|
||||
PhabricatorCustomLogoConfigType::getLogoURI($viewer),
|
||||
),
|
||||
);
|
||||
|
||||
$tags = array();
|
||||
foreach ($properties as $property) {
|
||||
$tags[] = phutil_tag(
|
||||
'meta',
|
||||
array(
|
||||
'property' => $property[0],
|
||||
'content' => $property[1],
|
||||
));
|
||||
}
|
||||
|
||||
return $tags;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -262,35 +262,16 @@ final class PhabricatorMainMenuView extends AphrontView {
|
|||
}
|
||||
|
||||
private function renderPhabricatorLogo() {
|
||||
$custom_header = PhabricatorCustomLogoConfigType::getLogoImagePHID();
|
||||
|
||||
$logo_style = array();
|
||||
|
||||
$custom_header = PhabricatorCustomLogoConfigType::getLogoImagePHID();
|
||||
if ($custom_header) {
|
||||
$cache = PhabricatorCaches::getImmutableCache();
|
||||
$cache_key_logo = 'ui.custom-header.logo-phid.v3.'.$custom_header;
|
||||
$viewer = $this->getViewer();
|
||||
$logo_uri = PhabricatorCustomLogoConfigType::getLogoURI($viewer);
|
||||
|
||||
$logo_uri = $cache->getKey($cache_key_logo);
|
||||
if (!$logo_uri) {
|
||||
// NOTE: If the file policy has been changed to be restrictive, we'll
|
||||
// miss here and just show the default logo. The cache will fill later
|
||||
// when someone who can see the file loads the page. This might be a
|
||||
// little spooky, see T11982.
|
||||
$files = id(new PhabricatorFileQuery())
|
||||
->setViewer($this->getViewer())
|
||||
->withPHIDs(array($custom_header))
|
||||
->execute();
|
||||
$file = head($files);
|
||||
if ($file) {
|
||||
$logo_uri = $file->getViewURI();
|
||||
$cache->setKey($cache_key_logo, $logo_uri);
|
||||
}
|
||||
}
|
||||
|
||||
if ($logo_uri) {
|
||||
$logo_style[] = 'background-size: 40px 40px;';
|
||||
$logo_style[] = 'background-position: 0 0;';
|
||||
$logo_style[] = 'background-image: url('.$logo_uri.')';
|
||||
}
|
||||
$logo_style[] = 'background-size: 40px 40px;';
|
||||
$logo_style[] = 'background-position: 0 0;';
|
||||
$logo_style[] = 'background-image: url('.$logo_uri.')';
|
||||
}
|
||||
|
||||
$logo_node = phutil_tag(
|
||||
|
@ -300,7 +281,6 @@ final class PhabricatorMainMenuView extends AphrontView {
|
|||
'style' => implode(' ', $logo_style),
|
||||
));
|
||||
|
||||
|
||||
$wordmark_text = PhabricatorCustomLogoConfigType::getLogoWordmark();
|
||||
if (!strlen($wordmark_text)) {
|
||||
$wordmark_text = pht('Phabricator');
|
||||
|
|
Loading…
Reference in a new issue