3 final class PhabricatorMacroAudioController
extends PhabricatorMacroController
{
5 public function handleRequest(AphrontRequest
$request) {
6 $viewer = $request->getViewer();
7 $id = $request->getURIData('id');
9 $this->requireApplicationCapability(
10 PhabricatorMacroManageCapability
::CAPABILITY
);
12 $macro = id(new PhabricatorMacroQuery())
14 ->requireCapabilities(
16 PhabricatorPolicyCapability
::CAN_VIEW
,
22 return new Aphront404Response();
26 $view_uri = $this->getApplicationURI('/view/'.$macro->getID().'/');
31 if ($request->isFormPost()) {
34 if ($request->getBool('behaviorForm')) {
35 $xactions[] = id(new PhabricatorMacroTransaction())
37 PhabricatorMacroAudioBehaviorTransaction
::TRANSACTIONTYPE
)
38 ->setNewValue($request->getStr('audioBehavior'));
41 if ($request->getFileExists('file')) {
42 $file = PhabricatorFile
::newFromPHPUpload(
45 'name' => $request->getStr('name'),
46 'authorPHID' => $viewer->getPHID(),
47 'isExplicitUpload' => true,
52 if (!$file->isAudio()) {
54 'The file you uploaded is invalid: it is not recognizable as '.
55 'a valid audio file.');
56 $e_file = pht('Invalid');
58 $xactions[] = id(new PhabricatorMacroTransaction())
60 PhabricatorMacroAudioTransaction
::TRANSACTIONTYPE
)
61 ->setNewValue($file->getPHID());
65 'To change the audio for a macro, you must upload an audio '.
67 $e_file = pht('Required');
72 id(new PhabricatorMacroEditor())
74 ->setContinueOnNoEffect(true)
75 ->setContentSourceFromRequest($request)
76 ->applyTransactions($macro, $xactions);
78 return id(new AphrontRedirectResponse())->setURI($view_uri);
82 $form = id(new AphrontFormView())
83 ->addHiddenInput('behaviorForm', 1)
86 $options = id(new AphrontFormRadioButtonControl())
87 ->setLabel(pht('Audio Behavior'))
88 ->setName('audioBehavior')
91 $macro->getAudioBehavior(),
92 PhabricatorFileImageMacro
::AUDIO_BEHAVIOR_NONE
));
95 PhabricatorFileImageMacro
::AUDIO_BEHAVIOR_NONE
,
97 pht('Do not play audio.'));
100 PhabricatorFileImageMacro
::AUDIO_BEHAVIOR_ONCE
,
102 pht('Play audio once, when the viewer looks at the macro.'));
105 PhabricatorFileImageMacro
::AUDIO_BEHAVIOR_LOOP
,
106 pht('Play Continuously'),
108 'Play audio continuously, treating the macro as an audio source. '.
109 'Best for ambient sounds.'));
111 $form->appendChild($options);
113 id(new AphrontFormSubmitControl())
114 ->setValue(pht('Save Audio Behavior'))
115 ->addCancelButton($view_uri));
117 $crumbs = $this->buildApplicationCrumbs();
119 $title = pht('Edit Audio: %s', $macro->getName());
120 $crumb = pht('Edit Audio');
122 $crumbs->addTextCrumb(pht('Macro "%s"', $macro->getName()), $view_uri);
123 $crumbs->addTextCrumb($crumb, $request->getRequestURI());
124 $crumbs->setBorder(true);
126 $upload_form = id(new AphrontFormView())
127 ->setEncType('multipart/form-data')
130 id(new AphrontFormFileControl())
131 ->setLabel(pht('Audio File'))
134 id(new AphrontFormSubmitControl())
135 ->setValue(pht('Upload File')));
137 $upload = id(new PHUIObjectBoxView())
138 ->setHeaderText(pht('Upload New Audio'))
139 ->setBackground(PHUIObjectBoxView
::BLUE_PROPERTY
)
140 ->setForm($upload_form);
142 $form_box = id(new PHUIObjectBoxView())
143 ->setHeaderText(pht('Behavior'))
144 ->setFormErrors($errors)
145 ->setBackground(PHUIObjectBoxView
::BLUE_PROPERTY
)
148 $header = id(new PHUIHeaderView())
150 ->setHeaderIcon('fa-pencil');
152 $view = id(new PHUITwoColumnView())
159 return $this->newPage()
162 ->appendChild($view);