diff --git a/src/applications/console/controller/DarkConsoleController.php b/src/applications/console/controller/DarkConsoleController.php index 026083cb59..3a677920ee 100644 --- a/src/applications/console/controller/DarkConsoleController.php +++ b/src/applications/console/controller/DarkConsoleController.php @@ -1,64 +1,75 @@ getViewer(); $response = id(new AphrontAjaxResponse())->setDisableConsole(true); if (!$viewer->isLoggedIn()) { return $response; } $visible = $request->getStr('visible'); if (strlen($visible)) { $this->writeDarkConsoleSetting( PhabricatorDarkConsoleVisibleSetting::SETTINGKEY, (int)$visible); return $response; } $tab = $request->getStr('tab'); if (strlen($tab)) { $this->writeDarkConsoleSetting( PhabricatorDarkConsoleTabSetting::SETTINGKEY, $tab); return $response; } return new Aphront404Response(); } private function writeDarkConsoleSetting($key, $value) { $viewer = $this->getViewer(); $request = $this->getRequest(); $preferences = PhabricatorUserPreferences::loadUserPreferences($viewer); $editor = id(new PhabricatorUserPreferencesEditor()) ->setActor($viewer) ->setContentSourceFromRequest($request) ->setContinueOnNoEffect(true) ->setContinueOnMissingFields(true); $xactions = array(); $xactions[] = $preferences->newTransaction($key, $value); $editor->applyTransactions($preferences, $xactions); + + // Reload the user to regenerate their preferences cache. If we don't + // do this, the "Services" tab gets misleadingly spammed up with cache + // fills that are only filling because you toggled the console or switched + // tabs. This makes it harder to see what's really going on, so just force + // a cache regeneration here. + id(new PhabricatorPeopleQuery()) + ->setViewer($viewer) + ->withPHIDs(array($viewer->getPHID())) + ->needUserSettings(true) + ->execute(); } }