From 67a5dfa662a8087da1edfe8fcd401075f2a32442 Mon Sep 17 00:00:00 2001 From: Bob Trahan Date: Wed, 14 May 2014 10:08:07 -0700 Subject: [PATCH] Notifications - hide header dropdown if app is uninstalled Summary: Fixes T5019. Test Plan: uninstalled notifications and dropdown disappeared too Reviewers: epriestley Reviewed By: epriestley Subscribers: epriestley, Korvin Maniphest Tasks: T5019 Differential Revision: https://secure.phabricator.com/D9121 --- .../page/menu/PhabricatorMainMenuView.php | 145 ++++++++++-------- 1 file changed, 78 insertions(+), 67 deletions(-) diff --git a/src/view/page/menu/PhabricatorMainMenuView.php b/src/view/page/menu/PhabricatorMainMenuView.php index 383c536a01..df6c460a20 100644 --- a/src/view/page/menu/PhabricatorMainMenuView.php +++ b/src/view/page/menu/PhabricatorMainMenuView.php @@ -38,7 +38,9 @@ final class PhabricatorMainMenuView extends AphrontView { if ($user->isLoggedIn() && $user->isUserActivated()) { list($menu, $dropdowns, $aural) = $this->renderNotificationMenu(); - $alerts[] = $menu; + if (array_filter($menu)) { + $alerts[] = $menu; + } $menus = array_merge($menus, $dropdowns); $app_button = $this->renderApplicationMenuButton($header_id); $search_button = $this->renderSearchMenuButton($header_id); @@ -281,7 +283,9 @@ final class PhabricatorMainMenuView extends AphrontView { $message_tag = ''; $message_notification_dropdown = ''; $conpherence = 'PhabricatorApplicationConpherence'; - if (PhabricatorApplication::isClassInstalled($conpherence)) { + if (PhabricatorApplication::isClassInstalledForViewer( + $conpherence, + $user)) { $message_id = celerity_generate_unique_node_id(); $message_count_id = celerity_generate_unique_node_id(); $message_dropdown_id = celerity_generate_unique_node_id(); @@ -362,78 +366,85 @@ final class PhabricatorMainMenuView extends AphrontView { ''); } - $count_id = celerity_generate_unique_node_id(); - $dropdown_id = celerity_generate_unique_node_id(); - $bubble_id = celerity_generate_unique_node_id(); + $bubble_tag = ''; + $notification_dropdown = ''; + $notification_app = 'PhabricatorApplicationNotifications'; + if (PhabricatorApplication::isClassInstalledForViewer( + $notification_app, + $user)) { + $count_id = celerity_generate_unique_node_id(); + $dropdown_id = celerity_generate_unique_node_id(); + $bubble_id = celerity_generate_unique_node_id(); - $count_number = id(new PhabricatorFeedStoryNotification()) - ->countUnread($user); + $count_number = id(new PhabricatorFeedStoryNotification()) + ->countUnread($user); - if ($count_number) { - $aural[] = phutil_tag( + if ($count_number) { + $aural[] = phutil_tag( + 'a', + array( + 'href' => '/notification/', + ), + pht( + '%s unread notifications.', + new PhutilNumber($count_number))); + } else { + $aural[] = pht('No notifications.'); + } + + if ($count_number > 999) { + $count_number = "\xE2\x88\x9E"; + } + + $count_tag = phutil_tag( + 'span', + array( + 'id' => $count_id, + 'class' => 'phabricator-main-menu-alert-count' + ), + $count_number); + + $icon_tag = phutil_tag( + 'span', + array( + 'class' => 'sprite-menu phabricator-main-menu-alert-icon', + ), + ''); + + if ($count_number) { + $container_classes[] = 'alert-unread'; + } + + $bubble_tag = phutil_tag( 'a', array( - 'href' => '/notification/', + 'href' => '/notification/', + 'class' => implode(' ', $container_classes), + 'id' => $bubble_id, ), - pht( - '%s unread notifications.', - new PhutilNumber($count_number))); - } else { - $aural[] = pht('No notifications.'); + array($icon_tag, $count_tag)); + + Javelin::initBehavior( + 'aphlict-dropdown', + array( + 'bubbleID' => $bubble_id, + 'countID' => $count_id, + 'dropdownID' => $dropdown_id, + 'loadingText' => pht('Loading...'), + 'uri' => '/notification/panel/', + )); + + $notification_dropdown = javelin_tag( + 'div', + array( + 'id' => $dropdown_id, + 'class' => 'phabricator-notification-menu', + 'sigil' => 'phabricator-notification-menu', + 'style' => 'display: none;', + ), + ''); } - if ($count_number > 999) { - $count_number = "\xE2\x88\x9E"; - } - - $count_tag = phutil_tag( - 'span', - array( - 'id' => $count_id, - 'class' => 'phabricator-main-menu-alert-count' - ), - $count_number); - - $icon_tag = phutil_tag( - 'span', - array( - 'class' => 'sprite-menu phabricator-main-menu-alert-icon', - ), - ''); - - if ($count_number) { - $container_classes[] = 'alert-unread'; - } - - $bubble_tag = phutil_tag( - 'a', - array( - 'href' => '/notification/', - 'class' => implode(' ', $container_classes), - 'id' => $bubble_id, - ), - array($icon_tag, $count_tag)); - - Javelin::initBehavior( - 'aphlict-dropdown', - array( - 'bubbleID' => $bubble_id, - 'countID' => $count_id, - 'dropdownID' => $dropdown_id, - 'loadingText' => pht('Loading...'), - 'uri' => '/notification/panel/', - )); - - $notification_dropdown = javelin_tag( - 'div', - array( - 'id' => $dropdown_id, - 'class' => 'phabricator-notification-menu', - 'sigil' => 'phabricator-notification-menu', - 'style' => 'display: none;', - ), - ''); - $dropdowns = array( $notification_dropdown, $message_notification_dropdown);