Page MenuHomePhabricator

D17726.id42635.diff
No OneTemporary

D17726.id42635.diff

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
@@ -311,6 +311,7 @@
'ConpherenceReplyHandler' => 'applications/conpherence/mail/ConpherenceReplyHandler.php',
'ConpherenceRoomListController' => 'applications/conpherence/controller/ConpherenceRoomListController.php',
'ConpherenceRoomPictureController' => 'applications/conpherence/controller/ConpherenceRoomPictureController.php',
+ 'ConpherenceRoomSettings' => 'applications/conpherence/constants/ConpherenceRoomSettings.php',
'ConpherenceRoomTestCase' => 'applications/conpherence/__tests__/ConpherenceRoomTestCase.php',
'ConpherenceSchemaSpec' => 'applications/conpherence/storage/ConpherenceSchemaSpec.php',
'ConpherenceTestCase' => 'applications/conpherence/__tests__/ConpherenceTestCase.php',
@@ -2398,6 +2399,7 @@
'PhabricatorConpherenceNotificationsSetting' => 'applications/settings/setting/PhabricatorConpherenceNotificationsSetting.php',
'PhabricatorConpherencePreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorConpherencePreferencesSettingsPanel.php',
'PhabricatorConpherenceProfileMenuItem' => 'applications/search/menuitem/PhabricatorConpherenceProfileMenuItem.php',
+ 'PhabricatorConpherenceSoundSetting' => 'applications/settings/setting/PhabricatorConpherenceSoundSetting.php',
'PhabricatorConpherenceThreadPHIDType' => 'applications/conpherence/phid/PhabricatorConpherenceThreadPHIDType.php',
'PhabricatorConpherenceWidgetVisibleSetting' => 'applications/settings/setting/PhabricatorConpherenceWidgetVisibleSetting.php',
'PhabricatorConsoleApplication' => 'applications/console/application/PhabricatorConsoleApplication.php',
@@ -5103,6 +5105,7 @@
'ConpherenceReplyHandler' => 'PhabricatorMailReplyHandler',
'ConpherenceRoomListController' => 'ConpherenceController',
'ConpherenceRoomPictureController' => 'ConpherenceController',
+ 'ConpherenceRoomSettings' => 'ConpherenceConstants',
'ConpherenceRoomTestCase' => 'ConpherenceTestCase',
'ConpherenceSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'ConpherenceTestCase' => 'PhabricatorTestCase',
@@ -7505,6 +7508,7 @@
'PhabricatorConpherenceNotificationsSetting' => 'PhabricatorSelectSetting',
'PhabricatorConpherencePreferencesSettingsPanel' => 'PhabricatorEditEngineSettingsPanel',
'PhabricatorConpherenceProfileMenuItem' => 'PhabricatorProfileMenuItem',
+ 'PhabricatorConpherenceSoundSetting' => 'PhabricatorSelectSetting',
'PhabricatorConpherenceThreadPHIDType' => 'PhabricatorPHIDType',
'PhabricatorConpherenceWidgetVisibleSetting' => 'PhabricatorInternalSetting',
'PhabricatorConsoleApplication' => 'PhabricatorApplication',
diff --git a/src/applications/conpherence/constants/ConpherenceRoomSettings.php b/src/applications/conpherence/constants/ConpherenceRoomSettings.php
new file mode 100644
--- /dev/null
+++ b/src/applications/conpherence/constants/ConpherenceRoomSettings.php
@@ -0,0 +1,31 @@
+<?php
+
+final class ConpherenceRoomSettings extends ConpherenceConstants {
+
+ const SOUND_SEND = 'send';
+ const SOUND_RECEIVE = 'receive';
+ const SOUND_MENTION = 'mention';
+
+ const DEFAULT_SOUND = 'tap';
+ const DEFAULT_NO_SOUND = 'none';
+
+ public static function getSoundMap() {
+ return array(
+ 'none' => array(
+ 'name' => pht('No Sound'),
+ 'rsrc' => '',
+ ),
+ 'tap' => array(
+ 'name' => pht('Tap'),
+ 'rsrc' => celerity_get_resource_uri('/rsrc/audio/basic/tap.mp3'),
+ ),
+ );
+ }
+
+ public static function getDropdownSoundMap() {
+ $map = self::getSoundMap();
+ return ipull($map, 'name');
+ }
+
+
+}
diff --git a/src/applications/conpherence/controller/ConpherenceUpdateController.php b/src/applications/conpherence/controller/ConpherenceUpdateController.php
--- a/src/applications/conpherence/controller/ConpherenceUpdateController.php
+++ b/src/applications/conpherence/controller/ConpherenceUpdateController.php
@@ -115,11 +115,13 @@
break;
case ConpherenceUpdateActions::NOTIFICATIONS:
$notifications = $request->getStr('notifications');
+ $sounds = $request->getArr('sounds');
$participant = $conpherence->getParticipantIfExists($user->getPHID());
if (!$participant) {
return id(new Aphront404Response());
}
$participant->setSettings(array('notifications' => $notifications));
+ $participant->setSettings(array('sounds' => $sounds));
$participant->save();
return id(new AphrontRedirectResponse())
->setURI('/'.$conpherence->getMonogram());
@@ -266,29 +268,60 @@
$notification_key = PhabricatorConpherenceNotificationsSetting::SETTINGKEY;
$notification_default = $user->getUserSetting($notification_key);
+ $sound_key = PhabricatorConpherenceSoundSetting::SETTINGKEY;
+ $sound_default = $user->getUserSetting($sound_key);
+ if ($sound_default) {
+ $sound = ConpherenceRoomSettings::DEFAULT_SOUND;
+ } else {
+ $sound = ConpherenceRoomSettings::DEFAULT_NO_SOUND;
+ }
+
$settings = $participant->getSettings();
- $notifications = idx(
- $settings,
- 'notifications',
- $notification_default);
+ $notifications = idx($settings, 'notifications', $notification_default);
+
+ $sounds = idx($settings, 'sounds', array());
+ $send = idx($sounds, ConpherenceRoomSettings::SOUND_SEND, $sound);
+ $receive = idx($sounds, ConpherenceRoomSettings::SOUND_RECEIVE, $sound);
+ $mention = idx($sounds, ConpherenceRoomSettings::SOUND_MENTION, $sound);
$form = id(new AphrontFormView())
->setUser($user)
- ->setFullWidth(true)
->appendControl(
- id(new AphrontFormRadioButtonControl())
- ->addButton(
+ id(new AphrontFormRadioButtonControl())
+ ->setLabel(pht('Notify'))
+ ->addButton(
PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_EMAIL,
PhabricatorConpherenceNotificationsSetting::getSettingLabel(
PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_EMAIL),
- '')
- ->addButton(
+ '')
+ ->addButton(
PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_NOTIFY,
PhabricatorConpherenceNotificationsSetting::getSettingLabel(
PhabricatorConpherenceNotificationsSetting::VALUE_CONPHERENCE_NOTIFY),
- '')
- ->setName('notifications')
- ->setValue($notifications));
+ '')
+ ->setName('notifications')
+ ->setValue($notifications))
+ ->appendChild(
+ id(new AphrontFormSelectControl())
+ ->setLabel(pht('Message Sent'))
+ ->setName('sounds['.ConpherenceRoomSettings::SOUND_SEND.']')
+ ->setOptions(ConpherenceRoomSettings::getDropdownSoundMap())
+ ->setValue($send))
+ ->appendChild(
+ id(new AphrontFormSelectControl())
+ ->setLabel(pht('Message Received'))
+ ->setName('sounds['.ConpherenceRoomSettings::SOUND_RECEIVE.']')
+ ->setOptions(ConpherenceRoomSettings::getDropdownSoundMap())
+ ->setValue($receive));
+
+ // TODO: Future Adventure! Expansion Pack
+ //
+ // ->appendChild(
+ // id(new AphrontFormSelectControl())
+ // ->setLabel(pht('Username Mentioned'))
+ // ->setName(ConpherenceRoomSettings::SOUND_RECEIVE)
+ // ->setOptions(ConpherenceRoomSettings::getDropdownSoundMap())
+ // ->setValue($mention));
return id(new AphrontDialogView())
->setTitle(pht('Room Preferences'))
@@ -496,6 +529,8 @@
->executeOne();
$non_update = false;
+ $participant = $conpherence->getParticipant($user->getPHID());
+
if ($need_transactions && $conpherence->getTransactions()) {
$data = ConpherenceTransactionRenderer::renderTransactions(
$user,
@@ -503,9 +538,7 @@
$key = PhabricatorConpherenceColumnMinimizeSetting::SETTINGKEY;
$minimized = $user->getUserSetting($key);
if (!$minimized) {
- $participant_obj = $conpherence->getParticipant($user->getPHID());
- $participant_obj
- ->markUpToDate($conpherence, $data['latest_transaction']);
+ $participant->markUpToDate($conpherence, $data['latest_transaction']);
}
} else if ($need_transactions) {
$non_update = true;
@@ -547,7 +580,10 @@
->setViewer($user);
$dropdown_query->execute();
- $receive_sound = celerity_get_resource_uri('/rsrc/audio/basic/tap.mp3');
+ $sounds = $this->getSoundForParticipant($user, $participant);
+ $send_sound = $sounds[ConpherenceRoomSettings::SOUND_SEND];
+ $receive_sound = $sounds[ConpherenceRoomSettings::SOUND_RECEIVE];
+ $mention_sound = $sounds[ConpherenceRoomSettings::SOUND_MENTION];
$content = array(
'non_update' => $non_update,
@@ -563,11 +599,41 @@
$dropdown_query->getConpherenceData(),
),
'sound' => array(
+ 'send' => $send_sound,
'receive' => $receive_sound,
+ 'mention' => $mention_sound,
),
);
return $content;
}
+ protected function getSoundForParticipant(
+ PhabricatorUser $user,
+ ConpherenceParticipant $participant) {
+
+ $sound_key = PhabricatorConpherenceSoundSetting::SETTINGKEY;
+ $sound_default = $user->getUserSetting($sound_key);
+ if ($sound_default) {
+ $sound = ConpherenceRoomSettings::DEFAULT_SOUND;
+ } else {
+ $sound = ConpherenceRoomSettings::DEFAULT_NO_SOUND;
+ }
+
+ $settings = $participant->getSettings();
+ $sounds = idx($settings, 'sounds', array());
+ $send = idx($sounds, ConpherenceRoomSettings::SOUND_SEND, $sound);
+ $receive = idx($sounds, ConpherenceRoomSettings::SOUND_RECEIVE, $sound);
+ $mention = idx($sounds, ConpherenceRoomSettings::SOUND_MENTION, $sound);
+
+ $sound_map = ConpherenceRoomSettings::getSoundMap();
+
+ return array(
+ ConpherenceRoomSettings::SOUND_SEND => $sound_map[$send]['rsrc'],
+ ConpherenceRoomSettings::SOUND_RECEIVE => $sound_map[$receive]['rsrc'],
+ ConpherenceRoomSettings::SOUND_MENTION => $sound_map[$mention]['rsrc'],
+ );
+
+ }
+
}
diff --git a/src/applications/settings/setting/PhabricatorConpherenceSoundSetting.php b/src/applications/settings/setting/PhabricatorConpherenceSoundSetting.php
new file mode 100644
--- /dev/null
+++ b/src/applications/settings/setting/PhabricatorConpherenceSoundSetting.php
@@ -0,0 +1,50 @@
+<?php
+
+final class PhabricatorConpherenceSoundSetting
+ extends PhabricatorSelectSetting {
+
+ const SETTINGKEY = 'conph-sound';
+
+ const VALUE_CONPHERENCE_SILENT = '0';
+ const VALUE_CONPHERENCE_HARMONIC = '1';
+
+ public function getSettingName() {
+ return pht('Conpherence Sound');
+ }
+
+ public function getSettingPanelKey() {
+ return PhabricatorConpherencePreferencesSettingsPanel::PANELKEY;
+ }
+
+ protected function getControlInstructions() {
+ return pht(
+ 'Choose the default sound behavior for new Conpherence rooms.');
+ }
+
+ protected function isEnabledForViewer(PhabricatorUser $viewer) {
+ return PhabricatorApplication::isClassInstalledForViewer(
+ 'PhabricatorConpherenceApplication',
+ $viewer);
+ }
+
+ public function getSettingDefaultValue() {
+ return self::VALUE_CONPHERENCE_HARMONIC;
+ }
+
+ protected function getSelectOptions() {
+ return self::getOptionsMap();
+ }
+
+ public static function getSettingLabel($key) {
+ $labels = self::getOptionsMap();
+ return idx($labels, $key, pht('Unknown ("%s")', $key));
+ }
+
+ private static function getOptionsMap() {
+ return array(
+ self::VALUE_CONPHERENCE_SILENT => pht('No Sounds'),
+ self::VALUE_CONPHERENCE_HARMONIC => pht('A Harmonic Experience'),
+ );
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Sat, May 18, 6:25 PM (2 w, 10 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6301067
Default Alt Text
D17726.id42635.diff (11 KB)

Event Timeline