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

Modularize all straightforward settings

Summary:
Ref T4103. This tackles all the easy stuff. Not yet handled:

- Translation, pronoun, timezone: these are weird and stored on the User object instead of in settings.
- Conpherence default: actually just missed this one, it's normal.
- 1000 dropdowns for email notification preferences (messy, technically).

Test Plan:
wow look at all these settings

{F1670442}

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T4103

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

+335
+18
src/__phutil_library_map__.php
··· 2239 2239 'PhabricatorDaemonsApplication' => 'applications/daemon/application/PhabricatorDaemonsApplication.php', 2240 2240 'PhabricatorDaemonsSetupCheck' => 'applications/config/check/PhabricatorDaemonsSetupCheck.php', 2241 2241 'PhabricatorDailyRoutineTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorDailyRoutineTriggerClock.php', 2242 + 'PhabricatorDarkConsoleSetting' => 'applications/settings/setting/PhabricatorDarkConsoleSetting.php', 2242 2243 'PhabricatorDashboard' => 'applications/dashboard/storage/PhabricatorDashboard.php', 2243 2244 'PhabricatorDashboardAddPanelController' => 'applications/dashboard/controller/PhabricatorDashboardAddPanelController.php', 2244 2245 'PhabricatorDashboardApplication' => 'applications/dashboard/application/PhabricatorDashboardApplication.php', ··· 2296 2297 'PhabricatorDatabaseSetupCheck' => 'applications/config/check/PhabricatorDatabaseSetupCheck.php', 2297 2298 'PhabricatorDatasourceEditField' => 'applications/transactions/editfield/PhabricatorDatasourceEditField.php', 2298 2299 'PhabricatorDatasourceEditType' => 'applications/transactions/edittype/PhabricatorDatasourceEditType.php', 2300 + 'PhabricatorDateFormatSetting' => 'applications/settings/setting/PhabricatorDateFormatSetting.php', 2299 2301 'PhabricatorDateTimeSettingsPanel' => 'applications/settings/panel/PhabricatorDateTimeSettingsPanel.php', 2300 2302 'PhabricatorDebugController' => 'applications/system/controller/PhabricatorDebugController.php', 2301 2303 'PhabricatorDefaultRequestExceptionHandler' => 'aphront/handler/PhabricatorDefaultRequestExceptionHandler.php', ··· 2380 2382 'PhabricatorElasticSearchSetupCheck' => 'applications/config/check/PhabricatorElasticSearchSetupCheck.php', 2381 2383 'PhabricatorEmailAddressesSettingsPanel' => 'applications/settings/panel/PhabricatorEmailAddressesSettingsPanel.php', 2382 2384 'PhabricatorEmailContentSource' => 'applications/metamta/contentsource/PhabricatorEmailContentSource.php', 2385 + 'PhabricatorEmailFormatSetting' => 'applications/settings/setting/PhabricatorEmailFormatSetting.php', 2383 2386 'PhabricatorEmailFormatSettingsPanel' => 'applications/settings/panel/PhabricatorEmailFormatSettingsPanel.php', 2384 2387 'PhabricatorEmailLoginController' => 'applications/auth/controller/PhabricatorEmailLoginController.php', 2388 + 'PhabricatorEmailNotificationsSetting' => 'applications/settings/setting/PhabricatorEmailNotificationsSetting.php', 2385 2389 'PhabricatorEmailPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorEmailPreferencesSettingsPanel.php', 2390 + 'PhabricatorEmailRePrefixSetting' => 'applications/settings/setting/PhabricatorEmailRePrefixSetting.php', 2391 + 'PhabricatorEmailSelfActionsSetting' => 'applications/settings/setting/PhabricatorEmailSelfActionsSetting.php', 2392 + 'PhabricatorEmailVarySubjectsSetting' => 'applications/settings/setting/PhabricatorEmailVarySubjectsSetting.php', 2386 2393 'PhabricatorEmailVerificationController' => 'applications/auth/controller/PhabricatorEmailVerificationController.php', 2387 2394 'PhabricatorEmbedFileRemarkupRule' => 'applications/files/markup/PhabricatorEmbedFileRemarkupRule.php', 2388 2395 'PhabricatorEmojiRemarkupRule' => 'applications/macro/markup/PhabricatorEmojiRemarkupRule.php', ··· 3525 3532 'PhabricatorTextAreaEditField' => 'applications/transactions/editfield/PhabricatorTextAreaEditField.php', 3526 3533 'PhabricatorTextEditField' => 'applications/transactions/editfield/PhabricatorTextEditField.php', 3527 3534 'PhabricatorTime' => 'infrastructure/time/PhabricatorTime.php', 3535 + 'PhabricatorTimeFormatSetting' => 'applications/settings/setting/PhabricatorTimeFormatSetting.php', 3528 3536 'PhabricatorTimeGuard' => 'infrastructure/time/PhabricatorTimeGuard.php', 3529 3537 'PhabricatorTimeTestCase' => 'infrastructure/time/__tests__/PhabricatorTimeTestCase.php', 3530 3538 'PhabricatorTimezoneSetupCheck' => 'applications/config/check/PhabricatorTimezoneSetupCheck.php', ··· 3629 3637 'PhabricatorViewerDatasource' => 'applications/people/typeahead/PhabricatorViewerDatasource.php', 3630 3638 'PhabricatorWatcherHasObjectEdgeType' => 'applications/transactions/edges/PhabricatorWatcherHasObjectEdgeType.php', 3631 3639 'PhabricatorWebContentSource' => 'infrastructure/contentsource/PhabricatorWebContentSource.php', 3640 + 'PhabricatorWeekStartDaySetting' => 'applications/settings/setting/PhabricatorWeekStartDaySetting.php', 3632 3641 'PhabricatorWordPressAuthProvider' => 'applications/auth/provider/PhabricatorWordPressAuthProvider.php', 3633 3642 'PhabricatorWorker' => 'infrastructure/daemon/workers/PhabricatorWorker.php', 3634 3643 'PhabricatorWorkerActiveTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerActiveTask.php', ··· 6763 6772 'PhabricatorDaemonsApplication' => 'PhabricatorApplication', 6764 6773 'PhabricatorDaemonsSetupCheck' => 'PhabricatorSetupCheck', 6765 6774 'PhabricatorDailyRoutineTriggerClock' => 'PhabricatorTriggerClock', 6775 + 'PhabricatorDarkConsoleSetting' => 'PhabricatorSelectSetting', 6766 6776 'PhabricatorDashboard' => array( 6767 6777 'PhabricatorDashboardDAO', 6768 6778 'PhabricatorApplicationTransactionInterface', ··· 6838 6848 'PhabricatorDatabaseSetupCheck' => 'PhabricatorSetupCheck', 6839 6849 'PhabricatorDatasourceEditField' => 'PhabricatorTokenizerEditField', 6840 6850 'PhabricatorDatasourceEditType' => 'PhabricatorPHIDListEditType', 6851 + 'PhabricatorDateFormatSetting' => 'PhabricatorSelectSetting', 6841 6852 'PhabricatorDateTimeSettingsPanel' => 'PhabricatorSettingsPanel', 6842 6853 'PhabricatorDebugController' => 'PhabricatorController', 6843 6854 'PhabricatorDefaultRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler', ··· 6928 6939 'PhabricatorElasticSearchSetupCheck' => 'PhabricatorSetupCheck', 6929 6940 'PhabricatorEmailAddressesSettingsPanel' => 'PhabricatorSettingsPanel', 6930 6941 'PhabricatorEmailContentSource' => 'PhabricatorContentSource', 6942 + 'PhabricatorEmailFormatSetting' => 'PhabricatorSelectSetting', 6931 6943 'PhabricatorEmailFormatSettingsPanel' => 'PhabricatorSettingsPanel', 6932 6944 'PhabricatorEmailLoginController' => 'PhabricatorAuthController', 6945 + 'PhabricatorEmailNotificationsSetting' => 'PhabricatorSelectSetting', 6933 6946 'PhabricatorEmailPreferencesSettingsPanel' => 'PhabricatorSettingsPanel', 6947 + 'PhabricatorEmailRePrefixSetting' => 'PhabricatorSelectSetting', 6948 + 'PhabricatorEmailSelfActionsSetting' => 'PhabricatorSelectSetting', 6949 + 'PhabricatorEmailVarySubjectsSetting' => 'PhabricatorSelectSetting', 6934 6950 'PhabricatorEmailVerificationController' => 'PhabricatorAuthController', 6935 6951 'PhabricatorEmbedFileRemarkupRule' => 'PhabricatorObjectRemarkupRule', 6936 6952 'PhabricatorEmojiRemarkupRule' => 'PhutilRemarkupRule', ··· 8272 8288 'PhabricatorTextAreaEditField' => 'PhabricatorEditField', 8273 8289 'PhabricatorTextEditField' => 'PhabricatorEditField', 8274 8290 'PhabricatorTime' => 'Phobject', 8291 + 'PhabricatorTimeFormatSetting' => 'PhabricatorSelectSetting', 8275 8292 'PhabricatorTimeGuard' => 'Phobject', 8276 8293 'PhabricatorTimeTestCase' => 'PhabricatorTestCase', 8277 8294 'PhabricatorTimezoneSetupCheck' => 'PhabricatorSetupCheck', ··· 8403 8420 'PhabricatorViewerDatasource' => 'PhabricatorTypeaheadDatasource', 8404 8421 'PhabricatorWatcherHasObjectEdgeType' => 'PhabricatorEdgeType', 8405 8422 'PhabricatorWebContentSource' => 'PhabricatorContentSource', 8423 + 'PhabricatorWeekStartDaySetting' => 'PhabricatorSelectSetting', 8406 8424 'PhabricatorWordPressAuthProvider' => 'PhabricatorOAuth2AuthProvider', 8407 8425 'PhabricatorWorker' => 'Phobject', 8408 8426 'PhabricatorWorkerActiveTask' => 'PhabricatorWorkerTask',
+34
src/applications/settings/setting/PhabricatorDarkConsoleSetting.php
··· 1 + <?php 2 + 3 + final class PhabricatorDarkConsoleSetting 4 + extends PhabricatorSelectSetting { 5 + 6 + const SETTINGKEY = 'dark_console'; 7 + 8 + const VALUE_DARKCONSOLE_DISABLED = '0'; 9 + const VALUE_DARKCONSOLE_ENABLED = '1'; 10 + 11 + public function getSettingName() { 12 + return pht('DarkConsole'); 13 + } 14 + 15 + protected function getControlInstructions() { 16 + return pht( 17 + 'DarkConsole is a debugging console for developing and troubleshooting '. 18 + 'Phabricator applications. After enabling DarkConsole, press the '. 19 + '{nav `} key on your keyboard to toggle it on or off.'); 20 + } 21 + 22 + public function getSettingDefaultValue() { 23 + return self::VALUE_DARKCONSOLE_DISABLED; 24 + } 25 + 26 + protected function getSelectOptions() { 27 + return array( 28 + self::VALUE_DARKCONSOLE_DISABLED => pht('Disable DarkConsole'), 29 + self::VALUE_DARKCONSOLE_ENABLED => pht('Enable DarkConsole'), 30 + ); 31 + } 32 + 33 + 34 + }
+34
src/applications/settings/setting/PhabricatorDateFormatSetting.php
··· 1 + <?php 2 + 3 + final class PhabricatorDateFormatSetting 4 + extends PhabricatorSelectSetting { 5 + 6 + const SETTINGKEY = 'date-format'; 7 + 8 + const VALUE_FORMAT_ISO = 'Y-m-d'; 9 + const VALUE_FORMAT_US = 'n/j/Y'; 10 + const VALUE_FORMAT_EUROPE = 'd-m-Y'; 11 + 12 + public function getSettingName() { 13 + return pht('Date Format'); 14 + } 15 + 16 + protected function getControlInstructions() { 17 + return pht( 18 + 'Select the format you prefer for editing dates.'); 19 + } 20 + 21 + public function getSettingDefaultValue() { 22 + return self::VALUE_FORMAT_ISO; 23 + } 24 + 25 + protected function getSelectOptions() { 26 + return array( 27 + self::VALUE_FORMAT_ISO => pht('ISO 8601: 2000-02-28'), 28 + self::VALUE_FORMAT_US => pht('US: 2/28/2000'), 29 + self::VALUE_FORMAT_EUROPE => pht('Europe: 28-02-2000'), 30 + ); 31 + } 32 + 33 + 34 + }
+32
src/applications/settings/setting/PhabricatorEmailFormatSetting.php
··· 1 + <?php 2 + 3 + final class PhabricatorEmailFormatSetting 4 + extends PhabricatorSelectSetting { 5 + 6 + const SETTINGKEY = 'html-emails'; 7 + 8 + const VALUE_HTML_EMAIL = 'true'; 9 + const VALUE_TEXT_EMAIL = 'false'; 10 + 11 + public function getSettingName() { 12 + return pht('HTML Email'); 13 + } 14 + 15 + protected function getControlInstructions() { 16 + return pht( 17 + 'You can opt to receive plain text email from Phabricator instead '. 18 + 'of HTML email. Plain text email works better with some clients.'); 19 + } 20 + 21 + public function getSettingDefaultValue() { 22 + return self::VALUE_HTML_EMAIL; 23 + } 24 + 25 + protected function getSelectOptions() { 26 + return array( 27 + self::VALUE_HTML_EMAIL => pht('Send HTML Email'), 28 + self::VALUE_TEXT_EMAIL => pht('Send Plain Text Email'), 29 + ); 30 + } 31 + 32 + }
+36
src/applications/settings/setting/PhabricatorEmailNotificationsSetting.php
··· 1 + <?php 2 + 3 + final class PhabricatorEmailNotificationsSetting 4 + extends PhabricatorSelectSetting { 5 + 6 + const SETTINGKEY = 'no-mail'; 7 + 8 + const VALUE_SEND_MAIL = '0'; 9 + const VALUE_NO_MAIL = '1'; 10 + 11 + public function getSettingName() { 12 + return pht('Email Notifications'); 13 + } 14 + 15 + protected function getControlInstructions() { 16 + return pht( 17 + 'If you disable **Email Notifications**, Phabricator will never '. 18 + 'send email to notify you about events. This preference overrides '. 19 + 'all your other settings.'. 20 + "\n\n". 21 + "//You will still receive some administrative email, like password ". 22 + "reset email.//"); 23 + } 24 + 25 + public function getSettingDefaultValue() { 26 + return self::VALUE_SEND_MAIL; 27 + } 28 + 29 + protected function getSelectOptions() { 30 + return array( 31 + self::VALUE_SEND_MAIL => pht('Enable Email Notifications'), 32 + self::VALUE_NO_MAIL => pht('Disable Email Notifications'), 33 + ); 34 + } 35 + 36 + }
+40
src/applications/settings/setting/PhabricatorEmailRePrefixSetting.php
··· 1 + <?php 2 + 3 + final class PhabricatorEmailRePrefixSetting 4 + extends PhabricatorSelectSetting { 5 + 6 + const SETTINGKEY = 're-prefix'; 7 + 8 + const VALUE_RE_PREFIX = 'true'; 9 + const VALUE_NO_PREFIX = 'false'; 10 + 11 + public function getSettingName() { 12 + return pht('Add "Re:" Prefix'); 13 + } 14 + 15 + protected function getControlInstructions() { 16 + return pht( 17 + 'The **Add "Re:" Prefix** setting adds "Re:" in front of all messages, '. 18 + 'even if they are not replies. If you use **Mail.app** on Mac OS X, '. 19 + 'this may improve mail threading.'. 20 + "\n\n". 21 + "| Setting | Example Mail Subject\n". 22 + "|------------------------|----------------\n". 23 + "| Enable \"Re:\" Prefix | ". 24 + "`Re: [Differential] [Accepted] D123: Example Revision`\n". 25 + "| Disable \"Re:\" Prefix | ". 26 + "`[Differential] [Accepted] D123: Example Revision`"); 27 + } 28 + 29 + public function getSettingDefaultValue() { 30 + return self::VALUE_RE_PREFIX; 31 + } 32 + 33 + protected function getSelectOptions() { 34 + return array( 35 + self::VALUE_RE_PREFIX => pht('Enable "Re:" Prefix'), 36 + self::VALUE_NO_PREFIX => pht('Disable "Re:" Prefix'), 37 + ); 38 + } 39 + 40 + }
+32
src/applications/settings/setting/PhabricatorEmailSelfActionsSetting.php
··· 1 + <?php 2 + 3 + final class PhabricatorEmailSelfActionsSetting 4 + extends PhabricatorSelectSetting { 5 + 6 + const SETTINGKEY = 'self-mail'; 7 + 8 + const VALUE_SEND_SELF = '0'; 9 + const VALUE_NO_SELF = '1'; 10 + 11 + public function getSettingName() { 12 + return pht('Self Actions'); 13 + } 14 + 15 + protected function getControlInstructions() { 16 + return pht( 17 + 'If you disable **Self Actions**, Phabricator will not notify '. 18 + 'you about actions you take.'); 19 + } 20 + 21 + public function getSettingDefaultValue() { 22 + return self::VALUE_SEND_SELF; 23 + } 24 + 25 + protected function getSelectOptions() { 26 + return array( 27 + self::VALUE_SEND_SELF => pht('Enable Self Action Mail'), 28 + self::VALUE_NO_SELF => pht('Disable Self Action Mail'), 29 + ); 30 + } 31 + 32 + }
+44
src/applications/settings/setting/PhabricatorEmailVarySubjectsSetting.php
··· 1 + <?php 2 + 3 + final class PhabricatorEmailVarySubjectsSetting 4 + extends PhabricatorSelectSetting { 5 + 6 + const SETTINGKEY = 'vary-subjects'; 7 + 8 + const VALUE_VARY_SUBJECTS = 'true'; 9 + const VALUE_STATIC_SUBJECTS = 'false'; 10 + 11 + public function getSettingName() { 12 + return pht('Vary Subjects'); 13 + } 14 + 15 + protected function getControlInstructions() { 16 + return pht( 17 + 'With **Vary Subjects** enabled, most mail subject lines will include '. 18 + 'a brief description of their content, like `[Closed]` for a '. 19 + 'notification about someone closing a task.'. 20 + "\n\n". 21 + "| Setting | Example Mail Subject\n". 22 + "|----------------------|----------------\n". 23 + "| Vary Subjects | ". 24 + "`[Maniphest] [Closed] T123: Example Task`\n". 25 + "| Do Not Vary Subjects | ". 26 + "`[Maniphest] T123: Example Task`\n". 27 + "\n". 28 + 'This can make mail more useful, but some clients have difficulty '. 29 + 'threading these messages. Disabling this option may improve '. 30 + 'threading at the cost of making subject lines less useful.'); 31 + } 32 + 33 + public function getSettingDefaultValue() { 34 + return self::VALUE_VARY_SUBJECTS; 35 + } 36 + 37 + protected function getSelectOptions() { 38 + return array( 39 + self::VALUE_VARY_SUBJECTS => pht('Enable "Re:" Prefix'), 40 + self::VALUE_STATIC_SUBJECTS => pht('Disable "Re:" Prefix'), 41 + ); 42 + } 43 + 44 + }
+32
src/applications/settings/setting/PhabricatorTimeFormatSetting.php
··· 1 + <?php 2 + 3 + final class PhabricatorTimeFormatSetting 4 + extends PhabricatorSelectSetting { 5 + 6 + const SETTINGKEY = 'time-format'; 7 + 8 + const VALUE_FORMAT_12HOUR = 'g:i A'; 9 + const VALUE_FORMAT_24HOUR = 'H:i'; 10 + 11 + public function getSettingName() { 12 + return pht('Time Format'); 13 + } 14 + 15 + protected function getControlInstructions() { 16 + return pht( 17 + 'Select the format you prefer for editing and displaying time.'); 18 + } 19 + 20 + public function getSettingDefaultValue() { 21 + return self::VALUE_FORMAT_12HOUR; 22 + } 23 + 24 + protected function getSelectOptions() { 25 + return array( 26 + self::VALUE_FORMAT_12HOUR => pht('12 Hour, 2:34 PM'), 27 + self::VALUE_FORMAT_24HOUR => pht('24 Hour, 14:34'), 28 + ); 29 + } 30 + 31 + 32 + }
+33
src/applications/settings/setting/PhabricatorWeekStartDaySetting.php
··· 1 + <?php 2 + 3 + final class PhabricatorWeekStartDaySetting 4 + extends PhabricatorSelectSetting { 5 + 6 + const SETTINGKEY = 'week-start-day'; 7 + 8 + public function getSettingName() { 9 + return pht('Week Starts On'); 10 + } 11 + 12 + protected function getControlInstructions() { 13 + return pht( 14 + 'Choose which day a calendar week should begin on.'); 15 + } 16 + 17 + public function getSettingDefaultValue() { 18 + return 0; 19 + } 20 + 21 + protected function getSelectOptions() { 22 + return array( 23 + 0 => pht('Sunday'), 24 + 1 => pht('Monday'), 25 + 2 => pht('Tuesday'), 26 + 3 => pht('Wednesday'), 27 + 4 => pht('Thursday'), 28 + 5 => pht('Friday'), 29 + 6 => pht('Saturday'), 30 + ); 31 + } 32 + 33 + }