From cf4cbfa6055ed6e3cee38df67276a78527df85a6 Mon Sep 17 00:00:00 2001 From: James Brooks Date: Sun, 3 Jan 2016 11:48:53 +0000 Subject: [PATCH 1/3] Display a status circle next to component groups. Closes #1317 --- app/Models/ComponentGroup.php | 31 ++++++++- app/Presenters/ComponentGroupPresenter.php | 63 +++++++++++++++++++ resources/views/partials/components.blade.php | 4 ++ 3 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 app/Presenters/ComponentGroupPresenter.php diff --git a/app/Models/ComponentGroup.php b/app/Models/ComponentGroup.php index 4521b139..6122bc45 100644 --- a/app/Models/ComponentGroup.php +++ b/app/Models/ComponentGroup.php @@ -12,9 +12,11 @@ namespace CachetHQ\Cachet\Models; use AltThree\Validator\ValidatingTrait; +use CachetHQ\Cachet\Presenters\ComponentGroupPresenter; use Illuminate\Database\Eloquent\Model; +use McCool\LaravelAutoPresenter\HasPresenter; -class ComponentGroup extends Model +class ComponentGroup extends Model implements HasPresenter { use ValidatingTrait; @@ -46,6 +48,13 @@ class ComponentGroup extends Model 'order' => 'int', ]; + /** + * The relations to eager load on every query. + * + * @var string[] + */ + protected $with = ['enabled_components']; + /** * A group can have many components. * @@ -55,4 +64,24 @@ class ComponentGroup extends Model { return $this->hasMany(Component::class, 'group_id', 'id'); } + + /** + * Return all of the enabled components. + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function enabled_components() + { + return $this->components()->enabled(); + } + + /** + * Get the presenter class. + * + * @return string + */ + public function getPresenterClass() + { + return ComponentGroupPresenter::class; + } } diff --git a/app/Presenters/ComponentGroupPresenter.php b/app/Presenters/ComponentGroupPresenter.php new file mode 100644 index 00000000..babcca94 --- /dev/null +++ b/app/Presenters/ComponentGroupPresenter.php @@ -0,0 +1,63 @@ +wrappedObject->enabled_components->first()->human_status; + } + + /** + * Returns the lowest component status, readable by humans. + * + * @return string + */ + public function lowest_human_status() + { + return $this->wrappedObject->enabled_components->first()->human_status; + } + + /** + * Returns the lowest component status color. + * + * @return string + */ + public function lowest_status_color() + { + return $this->wrappedObject->enabled_components->first()->status_color; + } + + /** + * Convert the presenter instance to an array. + * + * @return string[] + */ + public function toArray() + { + return array_merge($this->wrappedObject->toArray(), [ + 'created_at' => $this->created_at(), + 'updated_at' => $this->updated_at(), + 'lowest_human_status' => $this->lowest_human_status(), + ]); + } +} diff --git a/resources/views/partials/components.blade.php b/resources/views/partials/components.blade.php index a590e594..66b51fe3 100644 --- a/resources/views/partials/components.blade.php +++ b/resources/views/partials/components.blade.php @@ -5,6 +5,10 @@
  • {{ $componentGroup->name }} + +
    + +
  • From 1d619cd892e5bf4b94755cc9ec2dac4e9ba8fbfe Mon Sep 17 00:00:00 2001 From: James Brooks Date: Sun, 3 Jan 2016 12:02:20 +0000 Subject: [PATCH 2/3] Only pull back lowest if available --- app/Presenters/ComponentGroupPresenter.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/app/Presenters/ComponentGroupPresenter.php b/app/Presenters/ComponentGroupPresenter.php index babcca94..e31a45f4 100644 --- a/app/Presenters/ComponentGroupPresenter.php +++ b/app/Presenters/ComponentGroupPresenter.php @@ -20,31 +20,37 @@ class ComponentGroupPresenter extends AbstractPresenter /** * Returns the lowest component status. * - * @return string + * @return string|null */ public function lowest_status() { - return $this->wrappedObject->enabled_components->first()->human_status; + if ($enabledComponents = $this->wrappedObject->enabled_components()->orderBy('status', 'desc')->first()) { + return $enabledComponents->status; + } } /** * Returns the lowest component status, readable by humans. * - * @return string + * @return string|null */ public function lowest_human_status() { - return $this->wrappedObject->enabled_components->first()->human_status; + if ($enabledComponents = $this->wrappedObject->enabled_components()->orderBy('status', 'desc')->first()) { + return $enabledComponents->human_status; + } } /** * Returns the lowest component status color. * - * @return string + * @return string|null */ public function lowest_status_color() { - return $this->wrappedObject->enabled_components->first()->status_color; + if ($enabledComponents = $this->wrappedObject->enabled_components()->orderBy('status', 'desc')->first()) { + return $enabledComponents->status_color; + } } /** From b2b724969b7aee2b3501faa9c68e0d1029f400e5 Mon Sep 17 00:00:00 2001 From: James Brooks Date: Sun, 3 Jan 2016 12:03:16 +0000 Subject: [PATCH 3/3] Use the enabled_components relation --- resources/views/partials/components.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/partials/components.blade.php b/resources/views/partials/components.blade.php index 66b51fe3..2a493307 100644 --- a/resources/views/partials/components.blade.php +++ b/resources/views/partials/components.blade.php @@ -1,7 +1,7 @@
      @if($component_groups->count() > 0) @foreach($component_groups as $componentGroup) - @if($componentGroup->components()->enabled()->count() > 0) + @if($componentGroup->enabled_components->count() > 0)
    • {{ $componentGroup->name }} @@ -12,7 +12,7 @@
    • - @foreach($componentGroup->components()->enabled()->orderBy('order')->get() as $component) + @foreach($componentGroup->enabled_components()->orderBy('order')->get() as $component) @include('partials.component', compact($component)) @endforeach