Differential D20306 Diff 48504 src/applications/project/trigger/PhabricatorProjectTriggerPlaySoundRule.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/project/trigger/PhabricatorProjectTriggerPlaySoundRule.php
- This file was added.
<?php | |||||
final class PhabricatorProjectTriggerPlaySoundRule | |||||
extends PhabricatorProjectTriggerRule { | |||||
const TRIGGERTYPE = 'sound'; | |||||
public function getSelectControlName() { | |||||
return pht('Play sound'); | |||||
} | |||||
protected function assertValidRuleValue($value) { | |||||
if (!is_string($value)) { | |||||
throw new Exception( | |||||
pht( | |||||
'Status rule value should be a string, but is not (value is "%s").', | |||||
phutil_describe_type($value))); | |||||
} | |||||
$map = self::getSoundMap(); | |||||
if (!isset($map[$value])) { | |||||
throw new Exception( | |||||
pht( | |||||
'Rule value ("%s") is not a valid sound.', | |||||
$value)); | |||||
} | |||||
} | |||||
protected function newDropTransactions($object, $value) { | |||||
return array(); | |||||
} | |||||
protected function newDropEffects($value) { | |||||
$sound_icon = 'fa-volume-up'; | |||||
$sound_color = 'blue'; | |||||
$sound_name = self::getSoundName($value); | |||||
$content = pht( | |||||
'Play sound %s.', | |||||
phutil_tag('strong', array(), $sound_name)); | |||||
return array( | |||||
$this->newEffect() | |||||
->setIcon($sound_icon) | |||||
->setColor($sound_color) | |||||
->setContent($content), | |||||
); | |||||
} | |||||
protected function getDefaultValue() { | |||||
return head_key(self::getSoundMap()); | |||||
} | |||||
protected function getPHUIXControlType() { | |||||
return 'select'; | |||||
} | |||||
protected function getPHUIXControlSpecification() { | |||||
$map = self::getSoundMap(); | |||||
$map = ipull($map, 'name'); | |||||
return array( | |||||
'options' => $map, | |||||
'order' => array_keys($map), | |||||
); | |||||
} | |||||
public function getRuleViewLabel() { | |||||
return pht('Play Sound'); | |||||
} | |||||
public function getRuleViewDescription($value) { | |||||
$sound_name = self::getSoundName($value); | |||||
return pht( | |||||
'Play sound %s.', | |||||
phutil_tag('strong', array(), $sound_name)); | |||||
} | |||||
public function getRuleViewIcon($value) { | |||||
$sound_icon = 'fa-volume-up'; | |||||
$sound_color = 'blue'; | |||||
return id(new PHUIIconView()) | |||||
->setIcon($sound_icon, $sound_color); | |||||
} | |||||
private static function getSoundName($value) { | |||||
$map = self::getSoundMap(); | |||||
$spec = idx($map, $value, array()); | |||||
return idx($spec, 'name', $value); | |||||
} | |||||
private static function getSoundMap() { | |||||
return array( | |||||
'bing' => array( | |||||
'name' => pht('Bing'), | |||||
'uri' => celerity_get_resource_uri('/rsrc/audio/basic/bing.mp3'), | |||||
), | |||||
'glass' => array( | |||||
'name' => pht('Glass'), | |||||
'uri' => celerity_get_resource_uri('/rsrc/audio/basic/ting.mp3'), | |||||
), | |||||
); | |||||
} | |||||
public function getSoundEffects() { | |||||
$value = $this->getValue(); | |||||
$map = self::getSoundMap(); | |||||
$spec = idx($map, $value, array()); | |||||
$uris = array(); | |||||
if (isset($spec['uri'])) { | |||||
$uris[] = $spec['uri']; | |||||
} | |||||
return $uris; | |||||
} | |||||
} |