diff --git a/app/Bus/Commands/Incident/UpdateIncidentCommand.php b/app/Bus/Commands/Incident/UpdateIncidentCommand.php index 36036e6d..d9e13cb8 100644 --- a/app/Bus/Commands/Incident/UpdateIncidentCommand.php +++ b/app/Bus/Commands/Incident/UpdateIncidentCommand.php @@ -106,6 +106,13 @@ final class UpdateIncidentCommand */ public $template_vars; + /** + * Meta key/value pairs. + * + * @var array + */ + public $meta = []; + /** * The validation rules. * @@ -122,6 +129,7 @@ final class UpdateIncidentCommand 'stickied' => 'nullable|bool', 'occurred_at' => 'nullable|string', 'template' => 'nullable|string', + 'meta' => 'nullable|array', ]; /** @@ -139,10 +147,11 @@ final class UpdateIncidentCommand * @param string|null $occurred_at * @param string|null $template * @param array $template_vars + * @param array $meta * * @return void */ - public function __construct(Incident $incident, $name, $status, $message, $visible, $component_id, $component_status, $notify, $stickied, $occurred_at, $template, array $template_vars = []) + public function __construct(Incident $incident, $name, $status, $message, $visible, $component_id, $component_status, $notify, $stickied, $occurred_at, $template, array $template_vars = [], $meta = []) { $this->incident = $incident; $this->name = $name; @@ -156,5 +165,6 @@ final class UpdateIncidentCommand $this->occurred_at = $occurred_at; $this->template = $template; $this->template_vars = $template_vars; + $this->meta = $meta; } } diff --git a/app/Bus/Handlers/Commands/Incident/CreateIncidentCommandHandler.php b/app/Bus/Handlers/Commands/Incident/CreateIncidentCommandHandler.php index 7cba6f40..76128d9b 100644 --- a/app/Bus/Handlers/Commands/Incident/CreateIncidentCommandHandler.php +++ b/app/Bus/Handlers/Commands/Incident/CreateIncidentCommandHandler.php @@ -15,6 +15,7 @@ use CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand; use CachetHQ\Cachet\Bus\Commands\Incident\CreateIncidentCommand; use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasCreatedEvent; use CachetHQ\Cachet\Bus\Exceptions\Incident\InvalidIncidentTimestampException; +use CachetHQ\Cachet\Bus\Handlers\Traits\StoresMeta; use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\Incident; use CachetHQ\Cachet\Models\IncidentTemplate; @@ -32,6 +33,8 @@ use Twig_Loader_Array; */ class CreateIncidentCommandHandler { + use StoresMeta; + /** * The authentication guard instance. * @@ -103,18 +106,7 @@ class CreateIncidentCommandHandler // Store any meta? if ($meta = $command->meta) { - foreach ($meta as $key => $value) { - if (empty($value)) { - continue; - } - - Meta::create([ - 'key' => $key, - 'value' => $value, - 'meta_type' => 'incidents', - 'meta_id' => $incident->id, - ]); - } + $this->storeMeta($command->meta, 'incidents', $incident->id); } // Update the component. diff --git a/app/Bus/Handlers/Commands/Incident/UpdateIncidentCommandHandler.php b/app/Bus/Handlers/Commands/Incident/UpdateIncidentCommandHandler.php index 00bf9f8d..935e1d99 100644 --- a/app/Bus/Handlers/Commands/Incident/UpdateIncidentCommandHandler.php +++ b/app/Bus/Handlers/Commands/Incident/UpdateIncidentCommandHandler.php @@ -15,6 +15,7 @@ use CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand; use CachetHQ\Cachet\Bus\Commands\Incident\UpdateIncidentCommand; use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasUpdatedEvent; use CachetHQ\Cachet\Bus\Exceptions\Incident\InvalidIncidentTimestampException; +use CachetHQ\Cachet\Bus\Handlers\Traits\StoresMeta; use CachetHQ\Cachet\Models\Component; use CachetHQ\Cachet\Models\Incident; use CachetHQ\Cachet\Models\IncidentTemplate; @@ -30,6 +31,8 @@ use Twig_Loader_Array; */ class UpdateIncidentCommandHandler { + use StoresMeta; + /** * The authentication guard instance. * @@ -86,6 +89,11 @@ class UpdateIncidentCommandHandler // Rather than making lots of updates, just fill and save. $incident->save(); + // Store any meta? + if ($meta = $command->meta) { + $this->storeMeta($command->meta, 'incidents', $incident->id); + } + // Update the component. if ($component = Component::find($command->component_id)) { dispatch(new UpdateComponentCommand( diff --git a/app/Bus/Handlers/Traits/StoresMeta.php b/app/Bus/Handlers/Traits/StoresMeta.php new file mode 100644 index 00000000..b41f0045 --- /dev/null +++ b/app/Bus/Handlers/Traits/StoresMeta.php @@ -0,0 +1,40 @@ + $value) { + if (empty($value)) { + continue; + } + + $meta = Meta::firstOrNew([ + 'key' => $key, + 'meta_type' => $type, + 'meta_id' => $id, + ]); + + $meta->value = $value; + + $meta->save(); + } + + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Dashboard/IncidentController.php b/app/Http/Controllers/Dashboard/IncidentController.php index d77e881d..4d75ff7f 100644 --- a/app/Http/Controllers/Dashboard/IncidentController.php +++ b/app/Http/Controllers/Dashboard/IncidentController.php @@ -262,7 +262,8 @@ class IncidentController extends Controller Binput::get('stickied', false), Binput::get('occurred_at'), null, - [] + [], + ['seo' => Binput::get('seo', [])] )); } catch (ValidationException $e) { return cachet_redirect('dashboard.incidents.edit', ['id' => $incident->id]) diff --git a/resources/views/dashboard/incidents/edit.blade.php b/resources/views/dashboard/incidents/edit.blade.php index 6cb199f4..02d4a1fa 100644 --- a/resources/views/dashboard/incidents/edit.blade.php +++ b/resources/views/dashboard/incidents/edit.blade.php @@ -111,6 +111,14 @@ {{ trans('forms.optional') }} +