Correct a parameter order swap in "diffusion.historyquery" for Mercurial
[phabricator.git] / src / applications / conpherence / controller / ConpherenceRoomPreferencesController.php
blobc8686843892002b63256b07d70d3d334e55196aa
1 <?php
3 final class ConpherenceRoomPreferencesController
4 extends ConpherenceController {
6 public function shouldAllowPublic() {
7 return true;
10 public function handleRequest(AphrontRequest $request) {
11 $viewer = $request->getViewer();
12 $conpherence_id = $request->getURIData('id');
14 $conpherence = id(new ConpherenceThreadQuery())
15 ->setViewer($viewer)
16 ->withIDs(array($conpherence_id))
17 ->executeOne();
18 if (!$conpherence) {
19 return new Aphront404Response();
22 $view_uri = $conpherence->getURI();
24 $participant = $conpherence->getParticipantIfExists($viewer->getPHID());
25 if (!$participant) {
26 if ($viewer->isLoggedIn()) {
27 $text = pht(
28 'Notification settings are available after joining the room.');
29 } else {
30 $text = pht(
31 'Notification settings are available after logging in and joining '.
32 'the room.');
34 return $this->newDialog()
35 ->setTitle(pht('Room Preferences'))
36 ->addCancelButton($view_uri)
37 ->appendParagraph($text);
40 // Save the data and redirect
41 if ($request->isFormPost()) {
42 $notifications = $request->getStr('notifications');
43 $sounds = $request->getArr('sounds');
44 $theme = $request->getStr('theme');
46 $participant->setSettings(array(
47 'notifications' => $notifications,
48 'sounds' => $sounds,
49 'theme' => $theme,
50 ));
51 $participant->save();
53 return id(new AphrontRedirectResponse())
54 ->setURI($view_uri);
57 $notification_key = PhabricatorConpherenceNotificationsSetting::SETTINGKEY;
58 $notification_default = $viewer->getUserSetting($notification_key);
60 $sound_key = PhabricatorConpherenceSoundSetting::SETTINGKEY;
61 $sound_default = $viewer->getUserSetting($sound_key);
63 $settings = $participant->getSettings();
64 $notifications = idx($settings, 'notifications', $notification_default);
65 $theme = idx($settings, 'theme', ConpherenceRoomSettings::COLOR_LIGHT);
67 $sounds = idx($settings, 'sounds', array());
68 $map = PhabricatorConpherenceSoundSetting::getDefaultSound($sound_default);
69 $receive = idx($sounds,
70 ConpherenceRoomSettings::SOUND_RECEIVE,
71 $map[ConpherenceRoomSettings::SOUND_RECEIVE]);
72 $mention = idx($sounds,
73 ConpherenceRoomSettings::SOUND_MENTION,
74 $map[ConpherenceRoomSettings::SOUND_MENTION]);
76 $form = id(new AphrontFormView())
77 ->setUser($viewer)
78 ->appendControl(
79 id(new AphrontFormRadioButtonControl())
80 ->setLabel(pht('Notify'))
81 ->addButton(
82 PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_EMAIL,
83 PhabricatorConpherenceNotificationsSetting::getSettingLabel(
84 PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_EMAIL),
85 '')
86 ->addButton(
87 PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_NOTIFY,
88 PhabricatorConpherenceNotificationsSetting::getSettingLabel(
89 PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_NOTIFY),
90 '')
91 ->setName('notifications')
92 ->setValue($notifications))
93 ->appendChild(
94 id(new AphrontFormSelectControl())
95 ->setLabel(pht('New Message'))
96 ->setName('sounds['.ConpherenceRoomSettings::SOUND_RECEIVE.']')
97 ->setOptions(ConpherenceRoomSettings::getDropdownSoundMap())
98 ->setValue($receive))
99 ->appendChild(
100 id(new AphrontFormSelectControl())
101 ->setLabel(pht('Theme'))
102 ->setName('theme')
103 ->setOptions(ConpherenceRoomSettings::getThemeMap())
104 ->setValue($theme));
106 return $this->newDialog()
107 ->setTitle(pht('Room Preferences'))
108 ->appendForm($form)
109 ->addCancelButton($view_uri)
110 ->addSubmitButton(pht('Save'));