public function newValueForUsers($key, array $users)
 {
     $viewer = $this->getViewer();
     $users = mpull($users, null, 'getPHID');
     $user_phids = array_keys($users);
     $preferences = id(new PhabricatorUserPreferencesQuery())->setViewer($viewer)->withUsers($users)->needSyntheticPreferences(true)->execute();
     $preferences = mpull($preferences, null, 'getUserPHID');
     $all_settings = PhabricatorSetting::getAllSettings();
     $settings = array();
     foreach ($users as $user_phid => $user) {
         $preference = idx($preferences, $user_phid);
         if (!$preference) {
             continue;
         }
         foreach ($all_settings as $key => $setting) {
             $value = $preference->getSettingValue($key);
             // As an optimization, we omit the value from the cache if it is
             // exactly the same as the hardcoded default.
             $default_value = id(clone $setting)->setViewer($user)->getSettingDefaultValue();
             if ($value === $default_value) {
                 continue;
             }
             $settings[$user_phid][$key] = $value;
         }
     }
     $results = array();
     foreach ($user_phids as $user_phid) {
         $value = idx($settings, $user_phid, array());
         $results[$user_phid] = phutil_json_encode($value);
     }
     return $results;
 }
示例#2
0
 public function getUserSetting($key)
 {
     // NOTE: We store available keys and cached values separately to make it
     // faster to check for `null` in the cache, which is common.
     if (isset($this->settingCacheKeys[$key])) {
         return $this->settingCache[$key];
     }
     $settings_key = PhabricatorUserPreferencesCacheType::KEY_PREFERENCES;
     if ($this->getPHID()) {
         $settings = $this->requireCacheData($settings_key);
     } else {
         $settings = array();
     }
     // NOTE: To slightly improve performance, we're using all settings here,
     // not just settings that are enabled for the current viewer. It's fine to
     // get the value of a setting that we wouldn't let the user edit in the UI.
     $defaults = PhabricatorSetting::getAllSettings();
     if (array_key_exists($key, $settings)) {
         $value = $settings[$key];
         // Make sure the value is valid before we return it. This makes things
         // more robust when options are changed or removed.
         if (isset($defaults[$key])) {
             try {
                 id(clone $defaults[$key])->setViewer($this)->assertValidValue($value);
                 return $this->writeUserSettingCache($key, $value);
             } catch (Exception $ex) {
                 // Fall through below and return the default value.
             }
         } else {
             // This is an ad-hoc setting with no controlling object.
             return $this->writeUserSettingCache($key, $value);
         }
     }
     if (isset($defaults[$key])) {
         $value = id(clone $defaults[$key])->setViewer($this)->getSettingDefaultValue();
     } else {
         $value = null;
     }
     return $this->writeUserSettingCache($key, $value);
 }
 private static function getSettingObject($key)
 {
     $settings = PhabricatorSetting::getAllSettings();
     return idx($settings, $key);
 }