@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.

Split Setup Issues into Groups

Summary: Groups setup issues into Important, PHP, MySQL, and Base for easier parsing on initial installations.

Test Plan:
Test my internal server and various issues.

{F289699}

Reviewers: btrahan, epriestley

Reviewed By: epriestley

Subscribers: Korvin, epriestley

Maniphest Tasks: T7207

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

+167 -20
+4
src/applications/config/check/PhabricatorAPCSetupCheck.php
··· 2 2 3 3 final class PhabricatorAPCSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 if (!extension_loaded('apc')) { 7 11 $message = pht(
+4
src/applications/config/check/PhabricatorAuthSetupCheck.php
··· 2 2 3 3 final class PhabricatorAuthSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_IMPORTANT; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 // NOTE: We're not actually building these providers. Building providers 7 11 // can require additional configuration to be present (e.g., to build
+4
src/applications/config/check/PhabricatorBaseURISetupCheck.php
··· 2 2 3 3 final class PhabricatorBaseURISetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_IMPORTANT; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 $base_uri = PhabricatorEnv::getEnvConfig('phabricator.base-uri'); 7 11
+3
src/applications/config/check/PhabricatorBinariesSetupCheck.php
··· 2 2 3 3 final class PhabricatorBinariesSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 5 8 6 9 protected function executeChecks() { 7 10
+4
src/applications/config/check/PhabricatorDaemonsSetupCheck.php
··· 2 2 3 3 final class PhabricatorDaemonsSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_IMPORTANT; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 7 11 $task_daemon = id(new PhabricatorDaemonLogQuery())
+4
src/applications/config/check/PhabricatorDatabaseSetupCheck.php
··· 2 2 3 3 final class PhabricatorDatabaseSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_IMPORTANT; 7 + } 8 + 5 9 public function getExecutionOrder() { 6 10 // This must run after basic PHP checks, but before most other checks. 7 11 return 0.5;
+4
src/applications/config/check/PhabricatorElasticSetupCheck.php
··· 2 2 3 3 final class PhabricatorElasticSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 if (PhabricatorDefaultSearchEngineSelector::shouldUseElasticSearch()) { 7 11 $engine = PhabricatorSearchEngineSelector::newSelector()->newEngine();
+4
src/applications/config/check/PhabricatorExtensionsSetupCheck.php
··· 2 2 3 3 final class PhabricatorExtensionsSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_PHP; 7 + } 8 + 5 9 public function getExecutionOrder() { 6 10 return 0; 7 11 }
+4
src/applications/config/check/PhabricatorExtraConfigSetupCheck.php
··· 2 2 3 3 final class PhabricatorExtraConfigSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 $ancient_config = self::getAncientConfig(); 7 11
+4
src/applications/config/check/PhabricatorFileinfoSetupCheck.php
··· 2 2 3 3 final class PhabricatorFileinfoSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 if (!extension_loaded('fileinfo')) { 7 11 $message = pht(
+4
src/applications/config/check/PhabricatorGDSetupCheck.php
··· 2 2 3 3 final class PhabricatorGDSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 if (!extension_loaded('gd')) { 7 11 $message = pht(
+4
src/applications/config/check/PhabricatorImagemagickSetupCheck.php
··· 2 2 3 3 final class PhabricatorImagemagickSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 $imagemagick = PhabricatorEnv::getEnvConfig('files.enable-imagemagick'); 7 11 if ($imagemagick) {
+4
src/applications/config/check/PhabricatorInvalidConfigSetupCheck.php
··· 2 2 3 3 final class PhabricatorInvalidConfigSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 $groups = PhabricatorApplicationConfigOptions::loadAll(); 7 11 foreach ($groups as $group) {
+4
src/applications/config/check/PhabricatorMailSetupCheck.php
··· 2 2 3 3 final class PhabricatorMailSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 $adapter = PhabricatorEnv::getEnvConfig('metamta.mail-adapter'); 7 11
+4
src/applications/config/check/PhabricatorMySQLSetupCheck.php
··· 2 2 3 3 final class PhabricatorMySQLSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_MYSQL; 7 + } 8 + 5 9 public static function loadRawConfigValue($key) { 6 10 $conn_raw = id(new PhabricatorUser())->establishConnection('w'); 7 11
+4
src/applications/config/check/PhabricatorPHPConfigSetupCheck.php
··· 2 2 3 3 final class PhabricatorPHPConfigSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_PHP; 7 + } 8 + 5 9 public function getExecutionOrder() { 6 10 return 0; 7 11 }
+4
src/applications/config/check/PhabricatorPathSetupCheck.php
··· 2 2 3 3 final class PhabricatorPathSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 // NOTE: We've already appended `environment.append-paths`, so we don't 7 11 // need to explicitly check for it.
+4
src/applications/config/check/PhabricatorPygmentSetupCheck.php
··· 2 2 3 3 final class PhabricatorPygmentSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 $pygment = PhabricatorEnv::getEnvConfig('pygments.enabled'); 7 11
+4
src/applications/config/check/PhabricatorRepositoriesSetupCheck.php
··· 2 2 3 3 final class PhabricatorRepositoriesSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 7 11 $cluster_services = id(new AlmanacServiceQuery())
+4
src/applications/config/check/PhabricatorSecuritySetupCheck.php
··· 2 2 3 3 final class PhabricatorSecuritySetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 7 11 // This checks for a version of bash with the "Shellshock" vulnerability.
+6
src/applications/config/check/PhabricatorSetupCheck.php
··· 6 6 7 7 abstract protected function executeChecks(); 8 8 9 + const GROUP_OTHER = 'other'; 10 + const GROUP_MYSQL = 'mysql'; 11 + const GROUP_PHP = 'php'; 12 + const GROUP_IMPORTANT = 'important'; 13 + 9 14 public function getExecutionOrder() { 10 15 return 1; 11 16 } ··· 14 19 $issue = id(new PhabricatorSetupIssue()) 15 20 ->setIssueKey($key); 16 21 $this->issues[$key] = $issue; 22 + $issue->setGroup($this->getDefaultGroup()); 17 23 18 24 return $issue; 19 25 }
+4
src/applications/config/check/PhabricatorStorageSetupCheck.php
··· 2 2 3 3 final class PhabricatorStorageSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 /** 6 10 * @phutil-external-symbol class PhabricatorStartup 7 11 */
+4
src/applications/config/check/PhabricatorTimezoneSetupCheck.php
··· 2 2 3 3 final class PhabricatorTimezoneSetupCheck extends PhabricatorSetupCheck { 4 4 5 + public function getDefaultGroup() { 6 + return self::GROUP_OTHER; 7 + } 8 + 5 9 protected function executeChecks() { 6 10 $php_value = ini_get('date.timezone'); 7 11 if ($php_value) {
+60 -20
src/applications/config/controller/PhabricatorConfigIssueListController.php
··· 14 14 PhabricatorSetupCheck::setOpenSetupIssueCount( 15 15 PhabricatorSetupCheck::countUnignoredIssues($issues)); 16 16 17 - $list = $this->buildIssueList($issues); 18 - $list->setNoDataString(pht('There are no open setup issues.')); 19 - $list->setStackable(true); 17 + $important = $this->buildIssueList( 18 + $issues, PhabricatorSetupCheck::GROUP_IMPORTANT); 19 + $php = $this->buildIssueList( 20 + $issues, PhabricatorSetupCheck::GROUP_PHP); 21 + $mysql = $this->buildIssueList( 22 + $issues, PhabricatorSetupCheck::GROUP_MYSQL); 23 + $other = $this->buildIssueList( 24 + $issues, PhabricatorSetupCheck::GROUP_OTHER); 20 25 21 - $box = id(new PHUIObjectBoxView()) 22 - ->setHeaderText(pht('Open Phabricator Setup Issues')) 23 - ->appendChild($list); 26 + $setup_issues = array(); 27 + if ($important) { 28 + $setup_issues[] = id(new PHUIObjectBoxView()) 29 + ->setHeaderText(pht('Important Setup Issues')) 30 + ->appendChild($important); 31 + } 24 32 25 - $nav->appendChild( 26 - array( 27 - $box, 28 - )); 33 + if ($php) { 34 + $setup_issues[] = id(new PHUIObjectBoxView()) 35 + ->setHeaderText(pht('PHP Setup Issues')) 36 + ->appendChild($php); 37 + } 38 + 39 + if ($mysql) { 40 + $setup_issues[] = id(new PHUIObjectBoxView()) 41 + ->setHeaderText(pht('MySQL Setup Issues')) 42 + ->appendChild($mysql); 43 + } 44 + 45 + if ($other) { 46 + $setup_issues[] = id(new PHUIObjectBoxView()) 47 + ->setHeaderText(pht('Other Setup Issues')) 48 + ->appendChild($other); 49 + } 50 + 51 + if (empty($setup_issues)) { 52 + $setup_issues[] = id(new PHUIErrorView()) 53 + ->setTitle(pht('No Issues')) 54 + ->appendChild( 55 + pht('Your install has no current setup issues to resolve.')) 56 + ->setSeverity(PHUIErrorView::SEVERITY_NOTICE); 57 + } 58 + 59 + $nav->appendChild($setup_issues); 29 60 30 61 $title = pht('Setup Issues'); 31 62 ··· 42 73 )); 43 74 } 44 75 45 - private function buildIssueList(array $issues) { 76 + private function buildIssueList(array $issues, $group) { 46 77 assert_instances_of($issues, 'PhabricatorSetupIssue'); 47 78 $list = new PHUIObjectItemListView(); 79 + $list->setStackable(true); 48 80 $ignored_items = array(); 81 + $items = 0; 49 82 50 83 foreach ($issues as $issue) { 84 + if ($issue->getGroup() == $group) { 85 + $items++; 51 86 $href = $this->getApplicationURI('/issue/'.$issue->getIssueKey().'/'); 52 87 $item = id(new PHUIObjectItemView()) 53 88 ->setHeader($issue->getName()) 54 89 ->setHref($href) 55 90 ->addAttribute($issue->getSummary()); 56 - if (!$issue->getIsIgnored()) { 57 - $item->setBarColor('yellow'); 58 - $list->addItem($item); 59 - } else { 60 - $item->addIcon('fa-eye-slash', pht('Ignored')); 61 - $item->setDisabled(true); 62 - $item->setBarColor('none'); 63 - $ignored_items[] = $item; 91 + if (!$issue->getIsIgnored()) { 92 + $item->setBarColor('yellow'); 93 + $list->addItem($item); 94 + } else { 95 + $item->addIcon('fa-eye-slash', pht('Ignored')); 96 + $item->setDisabled(true); 97 + $item->setBarColor('none'); 98 + $ignored_items[] = $item; 99 + } 64 100 } 65 101 } 66 102 ··· 68 104 $list->addItem($item); 69 105 } 70 106 71 - return $list; 107 + if ($items == 0) { 108 + return null; 109 + } else { 110 + return $list; 111 + } 72 112 } 73 113 74 114 }
+14
src/applications/config/issue/PhabricatorSetupIssue.php
··· 8 8 private $isFatal; 9 9 private $summary; 10 10 private $shortName; 11 + private $group; 11 12 12 13 private $isIgnored = false; 13 14 private $phpExtensions = array(); ··· 38 39 return $this->getName(); 39 40 } 40 41 return $this->shortName; 42 + } 43 + 44 + public function setGroup($group) { 45 + $this->group = $group; 46 + return $this; 47 + } 48 + 49 + public function getGroup() { 50 + if ($this->group) { 51 + return $this->group; 52 + } else { 53 + return PhabricatorSetupCheck::GROUP_OTHER; 54 + } 41 55 } 42 56 43 57 public function setName($name) {