<?php

final class PhabricatorSettingsAdjustController
  extends PhabricatorController {

  public function handleRequest(AphrontRequest $request) {
    $user = $request->getUser();

    $prefs = $user->loadPreferences();
    $prefs->setPreference(
      $request->getStr('key'),
      $request->getStr('value'));
    $prefs->save();

    return id(new AphrontAjaxResponse())->setContent(array());
  }
}

<?php

final class PhabricatorSettingsAdjustController
  extends PhabricatorController {

  public function handleRequest(AphrontRequest $request) {
    $viewer = $this->getViewer();

    $preferences = PhabricatorUserPreferences::loadUserPreferences($viewer);

    $editor = id(new PhabricatorUserPreferencesEditor())
      ->setActor($viewer)
      ->setContentSourceFromRequest($request)
      ->setContinueOnNoEffect(true)
      ->setContinueOnMissingFields(true);

    $key = $request->getStr('key');
    $value = $request->getStr('value');

    $xactions = array();
    $xactions[] = $preferences->newTransaction($key, $value);

    $editor->applyTransactions($preferences, $xactions);

    return id(new AphrontAjaxResponse())->setContent(array());
  }
}

Use transactions to apply Ajax settings mutations
Use transactions to apply Ajax settings mutations

Summary:
Ref T4103. Some settings (mostly nav collapsed/expanded states) use this endpoint to make adjustments when users press keys (like `\` to toggle the durable column).

All of these settings are now formal, so swap things over to transactions.

Test Plan: Collapsed/expanded various navs, reloaded pages, settings stuck.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T4103

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