Remove all "FileHasObject" edge reads and writes
[phabricator.git] / src / applications / macro / controller / PhabricatorMacroAudioController.php
blobfb6eba8401de822719a40feee4c4669aa4ebadba
1 <?php
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())
13 ->setViewer($viewer)
14 ->requireCapabilities(
15 array(
16 PhabricatorPolicyCapability::CAN_VIEW,
18 ->withIDs(array($id))
19 ->executeOne();
21 if (!$macro) {
22 return new Aphront404Response();
25 $errors = array();
26 $view_uri = $this->getApplicationURI('/view/'.$macro->getID().'/');
28 $e_file = null;
29 $file = null;
31 if ($request->isFormPost()) {
32 $xactions = array();
34 if ($request->getBool('behaviorForm')) {
35 $xactions[] = id(new PhabricatorMacroTransaction())
36 ->setTransactionType(
37 PhabricatorMacroAudioBehaviorTransaction::TRANSACTIONTYPE)
38 ->setNewValue($request->getStr('audioBehavior'));
39 } else {
40 $file = null;
41 if ($request->getFileExists('file')) {
42 $file = PhabricatorFile::newFromPHPUpload(
43 $_FILES['file'],
44 array(
45 'name' => $request->getStr('name'),
46 'authorPHID' => $viewer->getPHID(),
47 'isExplicitUpload' => true,
48 ));
51 if ($file) {
52 if (!$file->isAudio()) {
53 $errors[] = pht(
54 'The file you uploaded is invalid: it is not recognizable as '.
55 'a valid audio file.');
56 $e_file = pht('Invalid');
57 } else {
58 $xactions[] = id(new PhabricatorMacroTransaction())
59 ->setTransactionType(
60 PhabricatorMacroAudioTransaction::TRANSACTIONTYPE)
61 ->setNewValue($file->getPHID());
63 } else {
64 $errors[] = pht(
65 'To change the audio for a macro, you must upload an audio '.
66 'file.');
67 $e_file = pht('Required');
71 if (!$errors) {
72 id(new PhabricatorMacroEditor())
73 ->setActor($viewer)
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)
84 ->setUser($viewer);
86 $options = id(new AphrontFormRadioButtonControl())
87 ->setLabel(pht('Audio Behavior'))
88 ->setName('audioBehavior')
89 ->setValue(
90 nonempty(
91 $macro->getAudioBehavior(),
92 PhabricatorFileImageMacro::AUDIO_BEHAVIOR_NONE));
94 $options->addButton(
95 PhabricatorFileImageMacro::AUDIO_BEHAVIOR_NONE,
96 pht('Do Not Play'),
97 pht('Do not play audio.'));
99 $options->addButton(
100 PhabricatorFileImageMacro::AUDIO_BEHAVIOR_ONCE,
101 pht('Play Once'),
102 pht('Play audio once, when the viewer looks at the macro.'));
104 $options->addButton(
105 PhabricatorFileImageMacro::AUDIO_BEHAVIOR_LOOP,
106 pht('Play Continuously'),
107 pht(
108 'Play audio continuously, treating the macro as an audio source. '.
109 'Best for ambient sounds.'));
111 $form->appendChild($options);
112 $form->appendChild(
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')
128 ->setUser($viewer)
129 ->appendChild(
130 id(new AphrontFormFileControl())
131 ->setLabel(pht('Audio File'))
132 ->setName('file'))
133 ->appendChild(
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)
146 ->setForm($form);
148 $header = id(new PHUIHeaderView())
149 ->setHeader($title)
150 ->setHeaderIcon('fa-pencil');
152 $view = id(new PHUITwoColumnView())
153 ->setHeader($header)
154 ->setFooter(array(
155 $form_box,
156 $upload,
159 return $this->newPage()
160 ->setTitle($title)
161 ->setCrumbs($crumbs)
162 ->appendChild($view);