diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2319,6 +2319,8 @@ 'PhabricatorDifferentialManagementWorkflow' => 'applications/differential/management/PhabricatorDifferentialManagementWorkflow.php', 'PhabricatorDifferentialRevisionTestDataGenerator' => 'applications/differential/lipsum/PhabricatorDifferentialRevisionTestDataGenerator.php', 'PhabricatorDiffusionApplication' => 'applications/diffusion/application/PhabricatorDiffusionApplication.php', + 'PhabricatorDiffusionBlameSetting' => 'applications/settings/setting/PhabricatorDiffusionBlameSetting.php', + 'PhabricatorDiffusionColorSetting' => 'applications/settings/setting/PhabricatorDiffusionColorSetting.php', 'PhabricatorDiffusionConfigOptions' => 'applications/diffusion/config/PhabricatorDiffusionConfigOptions.php', 'PhabricatorDisabledUserController' => 'applications/auth/controller/PhabricatorDisabledUserController.php', 'PhabricatorDisplayPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorDisplayPreferencesSettingsPanel.php', @@ -6889,6 +6891,8 @@ 'PhabricatorDifferentialManagementWorkflow' => 'PhabricatorManagementWorkflow', 'PhabricatorDifferentialRevisionTestDataGenerator' => 'PhabricatorTestDataGenerator', 'PhabricatorDiffusionApplication' => 'PhabricatorApplication', + 'PhabricatorDiffusionBlameSetting' => 'PhabricatorInternalSetting', + 'PhabricatorDiffusionColorSetting' => 'PhabricatorInternalSetting', 'PhabricatorDiffusionConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorDisabledUserController' => 'PhabricatorAuthController', 'PhabricatorDisplayPreferencesSettingsPanel' => 'PhabricatorEditEngineSettingsPanel', diff --git a/src/applications/diffusion/controller/DiffusionBrowseController.php b/src/applications/diffusion/controller/DiffusionBrowseController.php --- a/src/applications/diffusion/controller/DiffusionBrowseController.php +++ b/src/applications/diffusion/controller/DiffusionBrowseController.php @@ -105,28 +105,31 @@ $path = $drequest->getPath(); - $preferences = $viewer->loadPreferences(); + $blame_key = PhabricatorDiffusionBlameSetting::SETTINGKEY; + $color_key = PhabricatorDiffusionColorSetting::SETTINGKEY; $show_blame = $request->getBool( 'blame', - $preferences->getPreference( - PhabricatorUserPreferences::PREFERENCE_DIFFUSION_BLAME, - false)); + $viewer->getUserSetting($blame_key)); + $show_color = $request->getBool( 'color', - $preferences->getPreference( - PhabricatorUserPreferences::PREFERENCE_DIFFUSION_COLOR, - true)); + $viewer->getUserSetting($color_key)); $view = $request->getStr('view'); if ($request->isFormPost() && $view != 'raw' && $viewer->isLoggedIn()) { - $preferences->setPreference( - PhabricatorUserPreferences::PREFERENCE_DIFFUSION_BLAME, - $show_blame); - $preferences->setPreference( - PhabricatorUserPreferences::PREFERENCE_DIFFUSION_COLOR, - $show_color); - $preferences->save(); + $preferences = PhabricatorUserPreferences::loadUserPreferences($viewer); + + $editor = id(new PhabricatorUserPreferencesEditor()) + ->setActor($viewer) + ->setContentSourceFromRequest($request) + ->setContinueOnNoEffect(true) + ->setContinueOnMissingFields(true); + + $xactions = array(); + $xactions[] = $preferences->newTransaction($blame_key, $show_blame); + $xactions[] = $preferences->newTransaction($color_key, $show_color); + $editor->applyTransactions($preferences, $xactions); $uri = $request->getRequestURI() ->alter('blame', null) diff --git a/src/applications/settings/setting/PhabricatorDiffusionBlameSetting.php b/src/applications/settings/setting/PhabricatorDiffusionBlameSetting.php new file mode 100644 --- /dev/null +++ b/src/applications/settings/setting/PhabricatorDiffusionBlameSetting.php @@ -0,0 +1,16 @@ +setViewer($user) + ->withUsers(array($user)) + ->executeOne(); + if ($preferences) { + return $preferences; + } + + return id(new self()) + ->setUserPHID($user->getPHID()) + ->attachUser($user); + } + + public function newTransaction($key, $value) { + $setting_property = PhabricatorUserPreferencesTransaction::PROPERTY_SETTING; + $xaction_type = PhabricatorUserPreferencesTransaction::TYPE_SETTING; + + return id(clone $this->getApplicationTransactionTemplate()) + ->setTransactionType($xaction_type) + ->setMetadataValue($setting_property, $key) + ->setNewValue($value); + } /* -( PhabricatorPolicyInterface )----------------------------------------- */