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

Turn DarkConsole settings into real settings

Summary:
Ref T4103. These settings long-predate proper settings and are based on hard-coded user properties. Turn them into real settings.

(I didn't try to migrate the value since they're trivial to restore and only useful to developers.)

Test Plan:
- Toggled console on/off.
- Swapped tabs.
- Reloaded page, everything stayed sticky.

Reviewers: chad

Reviewed By: chad

Subscribers: eadler

Maniphest Tasks: T4103

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

+74 -18
+2
resources/sql/autopatches/20160603.user.01.removedcenabled.sql
··· 1 + ALTER TABLE {$NAMESPACE}_user.user 2 + DROP COLUMN consoleEnabled;
+2
resources/sql/autopatches/20160603.user.02.removedctab.sql
··· 1 + ALTER TABLE {$NAMESPACE}_user.user 2 + DROP COLUMN consoleTab;
+2
resources/sql/autopatches/20160603.user.03.removedcvisible.sql
··· 1 + ALTER TABLE {$NAMESPACE}_user.user 2 + DROP COLUMN consoleVisible;
+4
src/__phutil_library_map__.php
··· 2240 2240 'PhabricatorDaemonsSetupCheck' => 'applications/config/check/PhabricatorDaemonsSetupCheck.php', 2241 2241 'PhabricatorDailyRoutineTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorDailyRoutineTriggerClock.php', 2242 2242 'PhabricatorDarkConsoleSetting' => 'applications/settings/setting/PhabricatorDarkConsoleSetting.php', 2243 + 'PhabricatorDarkConsoleTabSetting' => 'applications/settings/setting/PhabricatorDarkConsoleTabSetting.php', 2244 + 'PhabricatorDarkConsoleVisibleSetting' => 'applications/settings/setting/PhabricatorDarkConsoleVisibleSetting.php', 2243 2245 'PhabricatorDashboard' => 'applications/dashboard/storage/PhabricatorDashboard.php', 2244 2246 'PhabricatorDashboardAddPanelController' => 'applications/dashboard/controller/PhabricatorDashboardAddPanelController.php', 2245 2247 'PhabricatorDashboardApplication' => 'applications/dashboard/application/PhabricatorDashboardApplication.php', ··· 6797 6799 'PhabricatorDaemonsSetupCheck' => 'PhabricatorSetupCheck', 6798 6800 'PhabricatorDailyRoutineTriggerClock' => 'PhabricatorTriggerClock', 6799 6801 'PhabricatorDarkConsoleSetting' => 'PhabricatorSelectSetting', 6802 + 'PhabricatorDarkConsoleTabSetting' => 'PhabricatorInternalSetting', 6803 + 'PhabricatorDarkConsoleVisibleSetting' => 'PhabricatorInternalSetting', 6800 6804 'PhabricatorDashboard' => array( 6801 6805 'PhabricatorDashboardDAO', 6802 6806 'PhabricatorApplicationTransactionInterface',
+26 -8
src/applications/console/controller/DarkConsoleController.php
··· 17 17 return true; 18 18 } 19 19 20 - public function processRequest() { 21 - $request = $this->getRequest(); 22 - $user = $request->getUser(); 20 + public function handleRequest(AphrontRequest $request) { 21 + $viewer = $this->getViewer(); 23 22 $response = id(new AphrontAjaxResponse())->setDisableConsole(true); 24 23 25 - if (!$user->isLoggedIn()) { 24 + if (!$viewer->isLoggedIn()) { 26 25 return $response; 27 26 } 28 27 29 28 $visible = $request->getStr('visible'); 30 29 if (strlen($visible)) { 31 - $user->setConsoleVisible((int)$visible); 32 - $user->save(); 30 + $this->writeDarkConsoleSetting( 31 + PhabricatorDarkConsoleVisibleSetting::SETTINGKEY, 32 + (int)$visible); 33 33 return $response; 34 34 } 35 35 36 36 $tab = $request->getStr('tab'); 37 37 if (strlen($tab)) { 38 - $user->setConsoleTab($tab); 39 - $user->save(); 38 + $this->writeDarkConsoleSetting( 39 + PhabricatorDarkConsoleTabSetting::SETTINGKEY, 40 + $tab); 40 41 return $response; 41 42 } 42 43 43 44 return new Aphront404Response(); 45 + } 46 + 47 + private function writeDarkConsoleSetting($key, $value) { 48 + $viewer = $this->getViewer(); 49 + $request = $this->getRequest(); 50 + 51 + $preferences = PhabricatorUserPreferences::loadUserPreferences($viewer); 52 + 53 + $editor = id(new PhabricatorUserPreferencesEditor()) 54 + ->setActor($viewer) 55 + ->setContentSourceFromRequest($request) 56 + ->setContinueOnNoEffect(true) 57 + ->setContinueOnMissingFields(true); 58 + 59 + $xactions = array(); 60 + $xactions[] = $preferences->newTransaction($key, $value); 61 + $editor->applyTransactions($preferences, $xactions); 44 62 } 45 63 46 64 }
+2 -1
src/applications/console/core/DarkConsoleCore.php
··· 93 93 94 94 public function render(AphrontRequest $request) { 95 95 $user = $request->getUser(); 96 - $visible = $user ? $user->getConsoleVisible() : true; 96 + $visible = $user->getUserSetting( 97 + PhabricatorDarkConsoleVisibleSetting::SETTINGKEY); 97 98 98 99 return javelin_tag( 99 100 'div',
-7
src/applications/people/storage/PhabricatorUser.php
··· 34 34 protected $availabilityCache; 35 35 protected $availabilityCacheTTL; 36 36 37 - protected $consoleEnabled = 0; 38 - protected $consoleVisible = 0; 39 - protected $consoleTab = ''; 40 - 41 37 protected $conduitCertificate; 42 38 43 39 protected $isSystemAgent = 0; ··· 190 186 'passwordSalt' => 'text32?', 191 187 'passwordHash' => 'text128?', 192 188 'profileImagePHID' => 'phid?', 193 - 'consoleEnabled' => 'bool', 194 - 'consoleVisible' => 'bool', 195 - 'consoleTab' => 'text64', 196 189 'conduitCertificate' => 'text255', 197 190 'isSystemAgent' => 'bool', 198 191 'isMailingList' => 'bool',
+12
src/applications/settings/setting/PhabricatorDarkConsoleTabSetting.php
··· 1 + <?php 2 + 3 + final class PhabricatorDarkConsoleTabSetting 4 + extends PhabricatorInternalSetting { 5 + 6 + const SETTINGKEY = 'darkconsole.tab'; 7 + 8 + public function getSettingName() { 9 + return pht('DarkConsole Tab'); 10 + } 11 + 12 + }
+12
src/applications/settings/setting/PhabricatorDarkConsoleVisibleSetting.php
··· 1 + <?php 2 + 3 + final class PhabricatorDarkConsoleVisibleSetting 4 + extends PhabricatorInternalSetting { 5 + 6 + const SETTINGKEY = 'darkconsole.visible'; 7 + 8 + public function getSettingName() { 9 + return pht('DarkConsole Visible'); 10 + } 11 + 12 + }
+12 -2
src/view/page/PhabricatorStandardPageView.php
··· 639 639 $headers[DarkConsoleServicesPlugin::getQueryAnalyzerHeader()] = true; 640 640 } 641 641 642 + if ($user) { 643 + $setting_tab = PhabricatorDarkConsoleTabSetting::SETTINGKEY; 644 + $setting_visible = PhabricatorDarkConsoleVisibleSetting::SETTINGKEY; 645 + $tab = $user->getUserSetting($setting_tab); 646 + $visible = $user->getUserSetting($setting_visible); 647 + } else { 648 + $tab = null; 649 + $visible = true; 650 + } 651 + 642 652 return array( 643 653 // NOTE: We use a generic label here to prevent input reflection 644 654 // and mitigate compression attacks like BREACH. See discussion in 645 655 // T3684. 646 656 'uri' => pht('Main Request'), 647 - 'selected' => $user ? $user->getConsoleTab() : null, 648 - 'visible' => $user ? (int)$user->getConsoleVisible() : true, 657 + 'selected' => $tab, 658 + 'visible' => $visible, 649 659 'headers' => $headers, 650 660 ); 651 661 }