3 final class PhabricatorSettingsEditEngine
4 extends PhabricatorEditEngine
{
6 const ENGINECONST
= 'settings.settings';
10 private $settingsPanel;
12 public function setIsSelfEdit($is_self_edit) {
13 $this->isSelfEdit
= $is_self_edit;
17 public function getIsSelfEdit() {
18 return $this->isSelfEdit
;
21 public function setProfileURI($profile_uri) {
22 $this->profileURI
= $profile_uri;
26 public function getProfileURI() {
27 return $this->profileURI
;
30 public function setSettingsPanel($settings_panel) {
31 $this->settingsPanel
= $settings_panel;
35 public function getSettingsPanel() {
36 return $this->settingsPanel
;
39 public function isEngineConfigurable() {
43 public function getEngineName() {
44 return pht('Settings');
47 public function getSummaryHeader() {
48 return pht('Edit Settings Configurations');
51 public function getSummaryText() {
52 return pht('This engine is used to edit settings.');
55 public function getEngineApplicationClass() {
56 return 'PhabricatorSettingsApplication';
59 protected function newEditableObject() {
60 return new PhabricatorUserPreferences();
63 protected function newObjectQuery() {
64 return new PhabricatorUserPreferencesQuery();
67 protected function getObjectCreateTitleText($object) {
68 return pht('Create Settings');
71 protected function getObjectCreateButtonText($object) {
72 return pht('Create Settings');
75 protected function getObjectEditTitleText($object) {
76 $page = $this->getSelectedPage();
79 return $page->getLabel();
82 return pht('Settings');
85 protected function getObjectEditShortText($object) {
86 if (!$object->getUser()) {
87 return pht('Global Defaults');
89 if ($this->getIsSelfEdit()) {
90 return pht('Personal Settings');
92 return pht('Account Settings');
97 protected function getObjectCreateShortText() {
98 return pht('Create Settings');
101 protected function getObjectName() {
102 $page = $this->getSelectedPage();
105 return $page->getLabel();
108 return pht('Settings');
111 protected function getPageHeader($object) {
112 $user = $object->getUser();
114 $text = pht('Edit Settings: %s', $user->getUserName());
116 $text = pht('Edit Global Settings');
119 $header = id(new PHUIHeaderView())
125 protected function getEditorURI() {
126 throw new PhutilMethodNotImplementedException();
129 protected function getObjectCreateCancelURI($object) {
133 protected function getObjectViewURI($object) {
134 return $object->getEditURI();
137 protected function getCreateNewObjectPolicy() {
138 return PhabricatorPolicies
::POLICY_ADMIN
;
141 public function getEffectiveObjectEditCancelURI($object) {
142 if (!$object->getUser()) {
146 if ($this->getIsSelfEdit()) {
150 if ($this->getProfileURI()) {
151 return $this->getProfileURI();
154 return parent
::getEffectiveObjectEditCancelURI($object);
157 protected function newPages($object) {
158 $viewer = $this->getViewer();
159 $user = $object->getUser();
161 $panels = PhabricatorSettingsPanel
::getAllDisplayPanels();
163 foreach ($panels as $key => $panel) {
164 if (!($panel instanceof PhabricatorEditEngineSettingsPanel
)) {
165 unset($panels[$key]);
169 $panel->setViewer($viewer);
171 $panel->setUser($user);
177 foreach ($panels as $key => $panel) {
178 $uris[$key] = $panel->getPanelURI();
180 $page = $panel->newEditEnginePage();
188 id(new PhabricatorEditPage())
190 ->setLabel(pht('Extra Settings'))
191 ->setIsDefault(true),
194 foreach ($more_pages as $page) {
201 protected function buildCustomEditFields($object) {
202 $viewer = $this->getViewer();
203 $settings = PhabricatorSetting
::getAllEnabledSettings($viewer);
205 foreach ($settings as $key => $setting) {
206 $setting = clone $setting;
207 $setting->setViewer($viewer);
208 $settings[$key] = $setting;
211 $settings = msortv($settings, 'getSettingOrderVector');
214 foreach ($settings as $setting) {
215 foreach ($setting->newCustomEditFields($object) as $field) {
223 protected function getValidationExceptionShortMessage(
224 PhabricatorApplicationTransactionValidationException
$ex,
225 PhabricatorEditField
$field) {
227 // Settings fields all have the same transaction type so we need to make
228 // sure the transaction is changing the same setting before matching an
229 // error to a given field.
230 $xaction_type = $field->getTransactionType();
231 if ($xaction_type == PhabricatorUserPreferencesTransaction
::TYPE_SETTING
) {
232 $property = PhabricatorUserPreferencesTransaction
::PROPERTY_SETTING
;
234 $field_setting = idx($field->getMetadata(), $property);
235 foreach ($ex->getErrors() as $error) {
236 if ($error->getType() !== $xaction_type) {
240 $xaction = $error->getTransaction();
245 $xaction_setting = $xaction->getMetadataValue($property);
246 if ($xaction_setting != $field_setting) {
250 $short_message = $error->getShortMessage();
251 if ($short_message !== null) {
252 return $short_message;
259 return parent
::getValidationExceptionShortMessage($ex, $field);
262 protected function newEditFormHeadContent(
263 PhabricatorEditEnginePageState
$state) {
267 if ($state->getIsSave()) {
268 $content[] = id(new PHUIInfoView())
269 ->setSeverity(PHUIInfoView
::SEVERITY_NOTICE
)
270 ->appendChild(pht('Changes saved.'));
273 $panel = $this->getSettingsPanel();
274 $content[] = $panel->newSettingsPanelEditFormHeadContent($state);
279 protected function newEditFormTailContent(
280 PhabricatorEditEnginePageState
$state) {
284 $panel = $this->getSettingsPanel();
285 $content[] = $panel->newSettingsPanelEditFormTailContent($state);