Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/macro/controller/PhabricatorMacroAudioController.php
12241 views
1
<?php
2
3
final class PhabricatorMacroAudioController extends PhabricatorMacroController {
4
5
public function handleRequest(AphrontRequest $request) {
6
$viewer = $request->getViewer();
7
$id = $request->getURIData('id');
8
9
$this->requireApplicationCapability(
10
PhabricatorMacroManageCapability::CAPABILITY);
11
12
$macro = id(new PhabricatorMacroQuery())
13
->setViewer($viewer)
14
->requireCapabilities(
15
array(
16
PhabricatorPolicyCapability::CAN_VIEW,
17
))
18
->withIDs(array($id))
19
->executeOne();
20
21
if (!$macro) {
22
return new Aphront404Response();
23
}
24
25
$errors = array();
26
$view_uri = $this->getApplicationURI('/view/'.$macro->getID().'/');
27
28
$e_file = null;
29
$file = null;
30
31
if ($request->isFormPost()) {
32
$xactions = array();
33
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
));
49
}
50
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());
62
}
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');
68
}
69
}
70
71
if (!$errors) {
72
id(new PhabricatorMacroEditor())
73
->setActor($viewer)
74
->setContinueOnNoEffect(true)
75
->setContentSourceFromRequest($request)
76
->applyTransactions($macro, $xactions);
77
78
return id(new AphrontRedirectResponse())->setURI($view_uri);
79
}
80
}
81
82
$form = id(new AphrontFormView())
83
->addHiddenInput('behaviorForm', 1)
84
->setUser($viewer);
85
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));
93
94
$options->addButton(
95
PhabricatorFileImageMacro::AUDIO_BEHAVIOR_NONE,
96
pht('Do Not Play'),
97
pht('Do not play audio.'));
98
99
$options->addButton(
100
PhabricatorFileImageMacro::AUDIO_BEHAVIOR_ONCE,
101
pht('Play Once'),
102
pht('Play audio once, when the viewer looks at the macro.'));
103
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.'));
110
111
$form->appendChild($options);
112
$form->appendChild(
113
id(new AphrontFormSubmitControl())
114
->setValue(pht('Save Audio Behavior'))
115
->addCancelButton($view_uri));
116
117
$crumbs = $this->buildApplicationCrumbs();
118
119
$title = pht('Edit Audio: %s', $macro->getName());
120
$crumb = pht('Edit Audio');
121
122
$crumbs->addTextCrumb(pht('Macro "%s"', $macro->getName()), $view_uri);
123
$crumbs->addTextCrumb($crumb, $request->getRequestURI());
124
$crumbs->setBorder(true);
125
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')));
136
137
$upload = id(new PHUIObjectBoxView())
138
->setHeaderText(pht('Upload New Audio'))
139
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
140
->setForm($upload_form);
141
142
$form_box = id(new PHUIObjectBoxView())
143
->setHeaderText(pht('Behavior'))
144
->setFormErrors($errors)
145
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
146
->setForm($form);
147
148
$header = id(new PHUIHeaderView())
149
->setHeader($title)
150
->setHeaderIcon('fa-pencil');
151
152
$view = id(new PHUITwoColumnView())
153
->setHeader($header)
154
->setFooter(array(
155
$form_box,
156
$upload,
157
));
158
159
return $this->newPage()
160
->setTitle($title)
161
->setCrumbs($crumbs)
162
->appendChild($view);
163
}
164
165
}
166
167