Add stickied incident

This commit is contained in:
Antoine GIRARD
2016-08-17 01:12:21 +02:00
parent 268e0c1747
commit 1954cf26f3
22 changed files with 191 additions and 14 deletions
@@ -62,6 +62,13 @@ final class ReportIncidentCommand
*/
public $notify;
/**
* Whether to stick the incident on top.
*
* @var bool
*/
public $stickied;
/**
* The date at which the incident occurred.
*
@@ -96,6 +103,7 @@ final class ReportIncidentCommand
'component_id' => 'int|required_with:component_status',
'component_status' => 'int|min:1|max:4|required_with:component_id',
'notify' => 'bool',
'stickied' => 'bool',
'incident_date' => 'string',
'template' => 'string',
];
@@ -110,13 +118,14 @@ final class ReportIncidentCommand
* @param int $component_id
* @param int $component_status
* @param bool $notify
* @param bool $stickied
* @param string|null $incident_date
* @param string|null $template
* @param array|null $template_vars
*
* @return void
*/
public function __construct($name, $status, $message, $visible, $component_id, $component_status, $notify, $incident_date, $template, array $template_vars = null)
public function __construct($name, $status, $message, $visible, $component_id, $component_status, $notify, $stickied, $incident_date, $template, array $template_vars = null)
{
$this->name = $name;
$this->status = $status;
@@ -125,6 +134,7 @@ final class ReportIncidentCommand
$this->component_id = $component_id;
$this->component_status = $component_status;
$this->notify = $notify;
$this->stickied = $stickied;
$this->incident_date = $incident_date;
$this->template = $template;
$this->template_vars = $template_vars;
@@ -71,6 +71,13 @@ final class UpdateIncidentCommand
*/
public $notify;
/**
* Whether to stick the incident on top.
*
* @var bool
*/
public $stickied;
/**
* The date that the incident occurred on.
*
@@ -105,6 +112,7 @@ final class UpdateIncidentCommand
'component_id' => 'int',
'component_status' => 'int|min:1|max:4|required_with:component_id',
'notify' => 'bool',
'stickied' => 'bool',
'template' => 'string',
];
@@ -119,13 +127,14 @@ final class UpdateIncidentCommand
* @param int $component_id
* @param int $component_status
* @param bool $notify
* @param bool $stickied
* @param string|null $incident_date
* @param string|null $template
* @param array|null $template_vars
*
* @return void
*/
public function __construct(Incident $incident, $name, $status, $message, $visible, $component_id, $component_status, $notify, $incident_date, $template, array $template_vars = null)
public function __construct(Incident $incident, $name, $status, $message, $visible, $component_id, $component_status, $notify, $stickied, $incident_date, $template, array $template_vars = null)
{
$this->incident = $incident;
$this->name = $name;
@@ -135,6 +144,7 @@ final class UpdateIncidentCommand
$this->component_id = $component_id;
$this->component_status = $component_status;
$this->notify = $notify;
$this->stickied = $stickied;
$this->incident_date = $incident_date;
$this->template = $template;
$this->template_vars = $template_vars;
@@ -65,9 +65,10 @@ class ReportIncidentCommandHandler
public function handle(ReportIncidentCommand $command)
{
$data = [
'name' => $command->name,
'status' => $command->status,
'visible' => $command->visible,
'name' => $command->name,
'status' => $command->status,
'visible' => $command->visible,
'stickied' => $command->stickied,
];
if ($command->template) {
@@ -54,6 +54,7 @@ class ReportMaintenanceCommandHandler
'scheduled_at' => $scheduledAt,
'status' => 0,
'visible' => 1,
'stickied' => false,
]);
$maintenanceEvent->notify = (bool) $command->notify;
@@ -107,6 +107,7 @@ class UpdateIncidentCommandHandler
'status' => $command->status,
'message' => $command->message,
'visible' => $command->visible,
'stickied' => $command->stickied,
'component_id' => $command->component_id,
'component_status' => $command->component_status,
'notify' => $command->notify,
@@ -0,0 +1,41 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace CachetHQ\Cachet\Composers\Modules;
use CachetHQ\Cachet\Dates\DateFactory;
use CachetHQ\Cachet\Models\Incident;
use Illuminate\Contracts\View\View;
/**
* This is the status page composer.
*
* @author James Brooks <james@alt-three.com>
* @author Connor S. Parks <connor@connorvg.tv>
* @author Antoine Girard <antoine.girard@sapk.fr>
*/
class StickiedComposer
{
/**
* Index page view composer.
*
* @param \Illuminate\Contracts\View\View $view
*
* @return void
*/
public function compose(View $view)
{
$stickiedIncidents = Incident::stickied()->orderBy('scheduled_at', 'desc')->orderBy('created_at', 'desc')->get()->groupBy(function (Incident $incident) {
return app(DateFactory::class)->make($incident->is_scheduled ? $incident->scheduled_at : $incident->created_at)->toDateString();
});
$view->withStickiedIncidents($stickiedIncidents);
}
}
@@ -205,6 +205,7 @@ EINCIDENT;
'component_id' => 0,
'scheduled_at' => null,
'visible' => 1,
'stickied' => false,
],
[
'name' => 'Awesome',
@@ -213,6 +214,7 @@ EINCIDENT;
'component_id' => 0,
'scheduled_at' => null,
'visible' => 1,
'stickied' => false,
],
[
'name' => 'Monitoring the fix',
@@ -221,6 +223,7 @@ EINCIDENT;
'component_id' => 0,
'scheduled_at' => null,
'visible' => 1,
'stickied' => false,
],
[
'name' => 'Update',
@@ -229,6 +232,7 @@ EINCIDENT;
'component_id' => 0,
'scheduled_at' => null,
'visible' => 1,
'stickied' => false,
],
[
'name' => 'Test Incident',
@@ -237,6 +241,7 @@ EINCIDENT;
'component_id' => 0,
'scheduled_at' => null,
'visible' => 1,
'stickied' => false,
],
[
'name' => 'Investigating the API',
@@ -245,6 +250,16 @@ EINCIDENT;
'component_id' => 1,
'scheduled_at' => null,
'visible' => 1,
'stickied' => false,
],
[
'name' => 'Stickied to the top',
'message' => 'Will be forever hanged here.',
'status' => 1,
'component_id' => 1,
'scheduled_at' => null,
'visible' => 1,
'stickied' => true,
],
];
@@ -19,6 +19,7 @@ use CachetHQ\Cachet\Composers\Modules\ComponentsComposer as ComponentsModuleComp
use CachetHQ\Cachet\Composers\Modules\MetricsComposer as MetricsModuleComposer;
use CachetHQ\Cachet\Composers\Modules\ScheduledComposer as ScheduledModuleComposer;
use CachetHQ\Cachet\Composers\Modules\StatusComposer as StatusModuleComposer;
use CachetHQ\Cachet\Composers\Modules\StickiedComposer as StickiedModuleComposer;
use CachetHQ\Cachet\Composers\Modules\TimelineComposer as TimelineModuleComposer;
use CachetHQ\Cachet\Composers\ThemeComposer;
use CachetHQ\Cachet\Composers\TimezoneLocaleComposer;
@@ -43,6 +44,7 @@ class ComposerServiceProvider extends ServiceProvider
$factory->composer('*', ModuleComposer::class);
$factory->composer('partials.modules.components', ComponentsModuleComposer::class);
$factory->composer('partials.modules.metrics', MetricsModuleComposer::class);
$factory->composer('partials.modules.stickied', StickiedModuleComposer::class);
$factory->composer('partials.modules.scheduled', ScheduledModuleComposer::class);
$factory->composer('partials.modules.status', StatusModuleComposer::class);
$factory->composer('partials.modules.timeline', TimelineModuleComposer::class);
@@ -28,6 +28,7 @@ class ModuleServiceProvider extends ServiceProvider
['group' => 'status', 'partial' => 'partials.modules.status'],
['group' => 'components', 'partial' => 'partials.modules.components'],
['group' => 'metrics', 'partial' => 'partials.modules.metrics'],
['group' => 'stickied', 'partial' => 'partials.modules.stickied'],
['group' => 'scheduled', 'partial' => 'partials.modules.scheduled'],
['group' => 'timeline', 'partial' => 'partials.modules.timeline'],
],
@@ -45,7 +46,8 @@ class ModuleServiceProvider extends ServiceProvider
'components' => 30000,
'metrics' => 40000,
'scheduled' => 50000,
'timeline' => 60000,
'stickied' => 60000,
'timeline' => 70000,
],
];
@@ -75,6 +75,7 @@ class IncidentController extends AbstractApiController
Binput::get('component_id'),
Binput::get('component_status'),
Binput::get('notify', true),
Binput::get('stickied', false),
Binput::get('created_at'),
Binput::get('template'),
Binput::get('vars')
@@ -105,6 +106,7 @@ class IncidentController extends AbstractApiController
Binput::get('component_id'),
Binput::get('component_status'),
Binput::get('notify', true),
Binput::get('stickied', false),
Binput::get('created_at'),
Binput::get('template'),
Binput::get('vars')
@@ -115,6 +115,7 @@ class IncidentController extends Controller
Binput::get('component_id'),
Binput::get('component_status'),
Binput::get('notify', false),
Binput::get('stickied', false),
Binput::get('created_at'),
null,
null
@@ -240,6 +241,7 @@ class IncidentController extends Controller
Binput::get('component_id'),
Binput::get('component_status'),
Binput::get('notify', true),
Binput::get('stickied', false),
Binput::get('created_at'),
null,
null
+17
View File
@@ -32,6 +32,7 @@ class Incident extends Model implements HasPresenter
*/
protected $casts = [
'visible' => 'int',
'stickied' => 'int',
'scheduled_at' => 'date',
'deleted_at' => 'date',
];
@@ -46,6 +47,7 @@ class Incident extends Model implements HasPresenter
'name',
'status',
'visible',
'stickied',
'message',
'scheduled_at',
'created_at',
@@ -62,6 +64,7 @@ class Incident extends Model implements HasPresenter
'name' => 'required',
'status' => 'required|int',
'visible' => 'required|bool',
'stickied' => 'bool',
'message' => 'required',
];
@@ -76,6 +79,7 @@ class Incident extends Model implements HasPresenter
'name',
'status',
'visible',
'stickied',
];
/**
@@ -88,6 +92,7 @@ class Incident extends Model implements HasPresenter
'name',
'status',
'visible',
'stickied',
'message',
];
@@ -113,6 +118,18 @@ class Incident extends Model implements HasPresenter
return $query->where('visible', 1);
}
/**
* Finds all stickied incidents.
*
* @param \Illuminate\Database\Eloquent\Builder $query
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeStickied(Builder $query)
{
return $query->where('stickied', true);
}
/**
* Finds all scheduled incidents (maintenance).
*