@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix an error in Diffusion when the Owners application is uninstalled

Summary:
See <https://discourse.phabricator-community.org/t/undefined-view-when-owners-is-uninstalled/451>.

When Owners is not installed, Diffusion can fatal with a bad `$view`.

Test Plan:
- Uninstall Owners.
- View the content of any file in Diffusion.
- Before: fatal on `$view` undefined.
- After: Valid page with no owners information.

Reviewers: amckinley

Reviewed By: amckinley

Differential Revision: https://secure.phabricator.com/D18629

+57 -53
+57 -53
src/applications/diffusion/controller/DiffusionBrowseController.php
··· 799 799 } 800 800 801 801 private function buildOwnersList(DiffusionRequest $drequest) { 802 - 803 802 $viewer = $this->getViewer(); 804 - $repository = $drequest->getRepository(); 805 803 806 - $owners = 'PhabricatorOwnersApplication'; 807 - if (PhabricatorApplication::isClassInstalled($owners)) { 808 - $package_query = id(new PhabricatorOwnersPackageQuery()) 809 - ->setViewer($viewer) 810 - ->withStatuses(array(PhabricatorOwnersPackage::STATUS_ACTIVE)) 811 - ->withControl( 812 - $repository->getPHID(), 813 - array( 814 - $drequest->getPath(), 815 - )); 804 + $have_owners = PhabricatorApplication::isClassInstalledForViewer( 805 + 'PhabricatorOwnersApplication', 806 + $viewer); 807 + if (!$have_owners) { 808 + return null; 809 + } 816 810 817 - $package_query->execute(); 811 + $repository = $drequest->getRepository(); 818 812 819 - $packages = $package_query->getControllingPackagesForPath( 813 + $package_query = id(new PhabricatorOwnersPackageQuery()) 814 + ->setViewer($viewer) 815 + ->withStatuses(array(PhabricatorOwnersPackage::STATUS_ACTIVE)) 816 + ->withControl( 820 817 $repository->getPHID(), 821 - $drequest->getPath()); 818 + array( 819 + $drequest->getPath(), 820 + )); 822 821 823 - $ownership = id(new PHUIObjectItemListView()) 824 - ->setUser($viewer) 825 - ->setNoDataString(pht('No Owners')); 822 + $package_query->execute(); 826 823 827 - if ($packages) { 828 - foreach ($packages as $package) { 829 - $item = id(new PHUIObjectItemView()) 830 - ->setObject($package) 831 - ->setObjectName($package->getMonogram()) 832 - ->setHeader($package->getName()) 833 - ->setHref($package->getURI()); 824 + $packages = $package_query->getControllingPackagesForPath( 825 + $repository->getPHID(), 826 + $drequest->getPath()); 834 827 835 - $owners = $package->getOwners(); 836 - if ($owners) { 837 - $owner_list = $viewer->renderHandleList( 838 - mpull($owners, 'getUserPHID')); 839 - } else { 840 - $owner_list = phutil_tag('em', array(), pht('None')); 841 - } 842 - $item->addAttribute(pht('Owners: %s', $owner_list)); 828 + $ownership = id(new PHUIObjectItemListView()) 829 + ->setUser($viewer) 830 + ->setNoDataString(pht('No Owners')); 843 831 844 - $auto = $package->getAutoReview(); 845 - $autoreview_map = PhabricatorOwnersPackage::getAutoreviewOptionsMap(); 846 - $spec = idx($autoreview_map, $auto, array()); 847 - $name = idx($spec, 'name', $auto); 848 - $item->addIcon('fa-code', $name); 832 + if ($packages) { 833 + foreach ($packages as $package) { 834 + $item = id(new PHUIObjectItemView()) 835 + ->setObject($package) 836 + ->setObjectName($package->getMonogram()) 837 + ->setHeader($package->getName()) 838 + ->setHref($package->getURI()); 849 839 850 - if ($package->getAuditingEnabled()) { 851 - $item->addIcon('fa-check', pht('Auditing Enabled')); 852 - } else { 853 - $item->addIcon('fa-ban', pht('No Auditing')); 854 - } 840 + $owners = $package->getOwners(); 841 + if ($owners) { 842 + $owner_list = $viewer->renderHandleList( 843 + mpull($owners, 'getUserPHID')); 844 + } else { 845 + $owner_list = phutil_tag('em', array(), pht('None')); 846 + } 847 + $item->addAttribute(pht('Owners: %s', $owner_list)); 848 + 849 + $auto = $package->getAutoReview(); 850 + $autoreview_map = PhabricatorOwnersPackage::getAutoreviewOptionsMap(); 851 + $spec = idx($autoreview_map, $auto, array()); 852 + $name = idx($spec, 'name', $auto); 853 + $item->addIcon('fa-code', $name); 855 854 856 - if ($package->isArchived()) { 857 - $item->setDisabled(true); 858 - } 855 + if ($package->getAuditingEnabled()) { 856 + $item->addIcon('fa-check', pht('Auditing Enabled')); 857 + } else { 858 + $item->addIcon('fa-ban', pht('No Auditing')); 859 + } 859 860 860 - $ownership->addItem($item); 861 + if ($package->isArchived()) { 862 + $item->setDisabled(true); 861 863 } 864 + 865 + $ownership->addItem($item); 862 866 } 867 + } 863 868 864 - $view = id(new PHUIObjectBoxView()) 865 - ->setHeaderText(pht('Owner Packages')) 866 - ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 867 - ->addClass('diffusion-mobile-view') 868 - ->setObjectList($ownership); 869 - } 869 + $view = id(new PHUIObjectBoxView()) 870 + ->setHeaderText(pht('Owner Packages')) 871 + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 872 + ->addClass('diffusion-mobile-view') 873 + ->setObjectList($ownership); 870 874 871 875 return $view; 872 876 }