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,6 +13,45 @@ return idx($logo, 'wordmarkText'); } + /** + * Return the full URI of the Phorge logo + * @param PhabricatorUser Current viewer + * @return string Full URI of the Phorge logo + */ + 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/project-logo.png'); + } + + return $logo_uri; + } + public function validateOption(PhabricatorConfigOption $option, $value) { if (!is_array($value)) { throw new Exception( diff --git a/src/applications/maniphest/controller/ManiphestTaskDetailController.php b/src/applications/maniphest/controller/ManiphestTaskDetailController.php --- a/src/applications/maniphest/controller/ManiphestTaskDetailController.php +++ b/src/applications/maniphest/controller/ManiphestTaskDetailController.php @@ -203,8 +203,7 @@ ->addPropertySection(pht('Description'), $description) ->addPropertySection(pht('Details'), $details); - - return $this->newPage() + $page = $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) ->setPageObjectPHIDs( @@ -213,6 +212,76 @@ )) ->appendChild($view); + // If we don't allow public access, don't waste time adding OpenGraph tags + if (PhabricatorEnv::getEnvConfig('policy.allow-public')) { + $page = $this->addOpenGraphProtocolMetadata($page, $task); + } + + return $page; + } + + /** + * Add Open Graph Protocol metadata tags to Maniphest task page + * + * @param PhabricatorStandardPageView $page + * @param ManiphestTask $task + * @return $page with additional OGP tags + */ + private function addOpenGraphProtocolMetadata($page, $task) { + $viewer = $this->getViewer(); + + $page->addHeadItem(phutil_tag( + 'meta', + array( + 'property' => 'og:site_name', + 'content' => PhabricatorEnv::getEnvConfig('ui.logo'), + ))); + $page->addHeadItem(phutil_tag( + 'meta', + array( + 'property' => 'og:type', + 'content' => 'object', + ))); + $page->addHeadItem(phutil_tag( + 'meta', + array( + 'property' => 'og:url', + 'content' => PhabricatorEnv::getProductionURI($task->getURI()), + ))); + $page->addHeadItem(phutil_tag( + 'meta', + array( + 'property' => 'og:title', + 'content' => $task->getMonogram().' '.$task->getTitle(), + ))); + $desc = $task->getDescription(); + if (strlen($desc) > 0) { + $page->addHeadItem(phutil_tag( + 'meta', + array( + 'property' => 'og:description', + 'content' => PhabricatorMarkupEngine::summarizeSentence($desc), + ))); + } + $page->addHeadItem(phutil_tag( + 'meta', + array( + 'property' => 'og:image', + 'content' => PhabricatorCustomLogoConfigType::getLogoURI($viewer), + ))); + $page->addHeadItem(phutil_tag( + 'meta', + array( + 'property' => 'og:image:height', + 'content' => '64', + ))); + $page->addHeadItem(phutil_tag( + 'meta', + array( + 'property' => 'og:image:width', + 'content' => '64', + ))); + return $page; } private function buildHeaderView(ManiphestTask $task) { 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 @@ -378,7 +378,6 @@ /** * Insert a HTML element into of the page to render. - * Used by PhameBlogViewController. * * @param PhutilSafeHTML HTML header to add */ 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 @@ -293,35 +293,14 @@ } 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; - - $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.')'; - } + $viewer = $this->getViewer(); + $logo_uri = PhabricatorCustomLogoConfigType::getLogoURI($viewer); + $logo_style[] = 'background-size: 40px 40px;'; + $logo_style[] = 'background-position: 0 0;'; + $logo_style[] = 'background-image: url('.$logo_uri.')'; } $logo_node = phutil_tag( @@ -331,7 +310,6 @@ 'style' => implode(' ', $logo_style), )); - $wordmark_text = PhabricatorCustomLogoConfigType::getLogoWordmark(); if (!phutil_nonempty_string($wordmark_text)) { $wordmark_text = PlatformSymbols::getPlatformServerName();