diff --git a/resources/celerity/map.php b/resources/celerity/map.php --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -292,7 +292,6 @@ 'rsrc/favicons/mstile-310x150.png' => '4a49d3ee', 'rsrc/favicons/mstile-310x310.png' => 'a52ab264', 'rsrc/favicons/mstile-70x70.png' => '5edce7b8', - 'rsrc/favicons/opengraph-144x144.png' => '648fb0fc', 'rsrc/image/BFCFDA.png' => 'd5ec91f4', 'rsrc/image/actions/edit.png' => '2fc41442', 'rsrc/image/avatar.png' => '17d346a4', diff --git a/src/applications/config/custom/PhabricatorCustomLogoConfigType.php b/src/applications/config/custom/PhabricatorCustomLogoConfigType.php --- a/src/applications/config/custom/PhabricatorCustomLogoConfigType.php +++ b/src/applications/config/custom/PhabricatorCustomLogoConfigType.php @@ -13,39 +13,6 @@ 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( diff --git a/src/view/page/AphrontPageView.php b/src/view/page/AphrontPageView.php --- a/src/view/page/AphrontPageView.php +++ b/src/view/page/AphrontPageView.php @@ -59,15 +59,9 @@ ), array($body, $tail)); - if (PhabricatorEnv::getEnvConfig('policy.allow-public')) { - $html_open_tag = hsprintf(''); - } else { - $html_open_tag = hsprintf(''); - } - $response = hsprintf( ''. - '%s'. + ''. ''. ''. '%s'. @@ -75,7 +69,6 @@ ''. '%s'. '', - $html_open_tag, $title, $head, $body); diff --git a/src/view/page/PhabricatorStandardPageView.php b/src/view/page/PhabricatorStandardPageView.php --- a/src/view/page/PhabricatorStandardPageView.php +++ b/src/view/page/PhabricatorStandardPageView.php @@ -426,11 +426,10 @@ } return hsprintf( - '%s%s%s%s', + '%s%s%s', parent::getHead(), $font_css, - $response->renderSingleResource('javelin-magical-init', 'phabricator'), - $this->newOpenGraphTags()); + $response->renderSingleResource('javelin-magical-init', 'phabricator')); } public function setGlyph($glyph) { @@ -912,45 +911,4 @@ 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', - celerity_get_resource_uri('rsrc/favicons/opengraph-144x144.png'), - ), - ); - - $tags = array(); - foreach ($properties as $property) { - $tags[] = phutil_tag( - 'meta', - array( - 'property' => $property[0], - 'content' => $property[1], - )); - } - - return $tags; - } - } diff --git a/src/view/page/menu/PhabricatorMainMenuView.php b/src/view/page/menu/PhabricatorMainMenuView.php --- a/src/view/page/menu/PhabricatorMainMenuView.php +++ b/src/view/page/menu/PhabricatorMainMenuView.php @@ -262,16 +262,35 @@ } private function renderPhabricatorLogo() { - $logo_style = array(); - $custom_header = PhabricatorCustomLogoConfigType::getLogoImagePHID(); + + $logo_style = array(); if ($custom_header) { - $viewer = $this->getViewer(); - $logo_uri = PhabricatorCustomLogoConfigType::getLogoURI($viewer); + $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($this->getViewer()) + ->withPHIDs(array($custom_header)) + ->execute(); + $file = head($files); + if ($file) { + $logo_uri = $file->getViewURI(); + $cache->setKey($cache_key_logo, $logo_uri); + } + } - $logo_style[] = 'background-size: 40px 40px;'; - $logo_style[] = 'background-position: 0 0;'; - $logo_style[] = 'background-image: url('.$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_node = phutil_tag( @@ -281,6 +300,7 @@ 'style' => implode(' ', $logo_style), )); + $wordmark_text = PhabricatorCustomLogoConfigType::getLogoWordmark(); if (!strlen($wordmark_text)) { $wordmark_text = pht('Phabricator'); diff --git a/webroot/rsrc/favicons/opengraph-144x144.png b/webroot/rsrc/favicons/opengraph-144x144.png deleted file mode 100644 index 92f2114b205565d9029e10ede56cdf23827ee1e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 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