PluginProbe
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration / 2.2.1
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration v2.2.1
2.2.1 2.2.0 2.1.0 2.0.15 2.0.12 2.0.10 2.0.4 2.0.1 2.0.0 1.95.3 1.95.2 1.95 1.91.6 trunk 1.11 1.12 1.13 1.20 1.21 1.22 1.23 1.30 1.31 1.32 1.35 All 44 releases
← All changes | app/Http/Controllers/WebhookController.php +10 -16 2.1.0 → 2.2.1 View file →
@@ -158,9 +158,9 @@
158 158
159 159 public function createOutgoingWebhook(Request $request)
160 160 {
161 161 $data = $this->validate(
162 - $request->only(['name', 'url', 'board_id', 'triggered_events', 'header_type', 'headers']),
162 + $request->only(['name', 'url', 'board_id', 'triggered_events', 'event_mode', 'header_type', 'headers']),
163 163 [
164 164 'name' => 'required',
165 165 'url' => 'required',
166 166 'board_id' => 'array',
@@ -189,19 +189,14 @@
189 189 }
190 190 }
191 191 }
192 192
193 - // events cannot be null
194 - if (!isset($data['triggered_events']) || empty($data['triggered_events'])) {
195 - return $this->sendError('At least one event must be selected for the webhook to be triggered.');
193 + $data['event_mode'] = ($data['event_mode'] ?? 'selected') === 'all' ? 'all' : 'selected';
194 + $data['triggered_events'] = array_values(array_filter(array_map('sanitize_text_field', $data['triggered_events'] ?? [])));
195 + if ($data['event_mode'] !== 'all' && !$data['triggered_events']) {
196 + return $this->sendError(__('At least one event must be selected for the webhook to be triggered.', 'fluent-boards'));
196 197 }
197 198
198 - // Sanitize triggered_events array
199 - if (is_array($data['triggered_events'])) {
200 - $data['triggered_events'] = array_filter(array_map('sanitize_text_field', $data['triggered_events']));
201 - }
202 - $data['triggered_events'] = array_values($data['triggered_events']);
203 -
204 199 // Sanitize board_id array to integers
205 200 if (!empty($data['board_id']) && is_array($data['board_id'])) {
206 201 $data['board_id'] = array_filter(array_map('intval', $data['board_id']));
207 202 } else {
@@ -219,9 +214,9 @@
219 214 'object_id' => $webhook->id,
220 215 'object_type' => 'outgoing_webhook_board',
221 216 'foreign_id' => $boardId,
222 217 'settings' => \maybe_serialize($data['triggered_events'] ?? []),
223 - 'preferences' => ''
218 + 'preferences' => ['event_mode' => $data['event_mode']]
224 219 ]);
225 220 }
226 221
227 222
@@ -267,12 +262,11 @@
267 262 }
268 263 }
269 264 }
270 265
271 - // Sanitize triggered_events array
272 - if (is_array($data['triggered_events'])) {
273 - $data['triggered_events'] = array_filter(array_map('sanitize_text_field', $data['triggered_events']));
274 - }
266 + // Requests from legacy clients remain explicit subscriptions.
267 + $data['event_mode'] = ($data['event_mode'] ?? 'selected') === 'all' ? 'all' : 'selected';
268 + $data['triggered_events'] = array_values(array_filter(array_map('sanitize_text_field', $data['triggered_events'] ?? [])));
275 269
276 270 // Sanitize board_id array to integers
277 271 if (!empty($data['board_id']) && is_array($data['board_id'])) {
278 272 $data['board_id'] = array_filter(array_map('intval', $data['board_id']));
@@ -302,9 +296,9 @@
302 296 'object_id' => $webhook->id,
303 297 'object_type' => 'outgoing_webhook_board',
304 298 'foreign_id' => $boardId,
305 299 'settings' => \maybe_serialize($data['triggered_events'] ?? []),
306 - 'preferences' => ''
300 + 'preferences' => ['event_mode' => $data['event_mode']]
307 301 ]);
308 302 }
309 303
310 304