| @@ -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 | |