From 88e85d2dfbba8e71b91c9dd165084ca64241414f Mon Sep 17 00:00:00 2001 From: Nick Peelman Date: Mon, 18 Jul 2016 08:49:38 -0400 Subject: [PATCH 1/6] group components on manage subscriptions page --- app/Http/Controllers/SubscribeController.php | 9 +++-- app/Presenters/ComponentGroupPresenter.php | 22 +++++++++++++ resources/assets/js/app.js | 22 +++++++++++++ .../views/partials/component_input.blade.php | 18 ++++++++++ .../views/partials/components_form.blade.php | 33 +++++++++++++++++++ resources/views/subscribe/manage.blade.php | 32 ++++-------------- 6 files changed, 109 insertions(+), 27 deletions(-) create mode 100644 resources/views/partials/component_input.blade.php create mode 100644 resources/views/partials/components_form.blade.php diff --git a/app/Http/Controllers/SubscribeController.php b/app/Http/Controllers/SubscribeController.php index 104dfd8cfb3f..14911a9215dc 100644 --- a/app/Http/Controllers/SubscribeController.php +++ b/app/Http/Controllers/SubscribeController.php @@ -18,6 +18,7 @@ use CachetHQ\Cachet\Bus\Commands\Subscriber\UpdateSubscriberSubscriptionCommand; use CachetHQ\Cachet\Bus\Commands\Subscriber\VerifySubscriberCommand; use CachetHQ\Cachet\Models\Component; +use CachetHQ\Cachet\Models\ComponentGroup; use CachetHQ\Cachet\Models\Subscriber; use CachetHQ\Cachet\Models\Subscription; use GrahamCampbell\Binput\Facades\Binput; @@ -147,15 +148,19 @@ public function showManage($code = null) } $subscriber = Subscriber::where('verify_code', '=', $code)->first(); + $usedComponentGroups = Component::enabled()->where('group_id', '>', 0)->groupBy('group_id')->pluck('group_id'); + $componentGroups = ComponentGroup::whereIn('id', $usedComponentGroups)->orderBy('order')->get(); + $ungroupedComponents = Component::enabled()->where('group_id', 0)->orderBy('order')->orderBy('created_at')->get(); if (!$subscriber) { throw new BadRequestHttpException(); } return View::make('subscribe.manage') - ->withComponents(Component::all()) + ->withUngroupedComponents($ungroupedComponents) ->withSubscriber($subscriber) - ->withSubscriptions($subscriber->subscriptions->pluck('component_id')->all()); + ->withSubscriptions($subscriber->subscriptions->pluck('component_id')->all()) + ->withComponentGroups($componentGroups); } /** diff --git a/app/Presenters/ComponentGroupPresenter.php b/app/Presenters/ComponentGroupPresenter.php index 9aebc48369f0..91967f5e0927 100644 --- a/app/Presenters/ComponentGroupPresenter.php +++ b/app/Presenters/ComponentGroupPresenter.php @@ -97,4 +97,26 @@ public function toArray() 'lowest_human_status' => $this->lowest_human_status(), ]); } + + /** + * Determine if any of the contained components have active subscriptions + * + * @return bool + */ + public function has_subscriber($subscriptions) + { + $enabled_components = $this->wrappedObject->enabled_components()->orderBy('order')->pluck('id')->toArray(); + $intersected = array_intersect($enabled_components, $subscriptions); + return count($intersected) != 0; + } + + /** + * Determine the class for collapsed/uncollapsed groups on the subscription form. + * + * @return string + */ + public function collapse_class_with_subscriptions($subscriptions) + { + return $this->has_subscriber($subscriptions) ? 'ion-ios-minus-outline' : 'ion-ios-plus-outline'; + } } diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js index bc890c5ae876..6511596edc02 100644 --- a/resources/assets/js/app.js +++ b/resources/assets/js/app.js @@ -277,6 +277,28 @@ $(function() { $this.next('.group-items').toggleClass('hide'); }); + $('.select-group').on('click', function () { + var $this = $(this); + var $parentGroup = $this.closest('ul.list-group'); + $parentGroup.find('input[type=checkbox]').prop('checked', true); + + $parentGroup.find('.group-items').removeClass('hide') + $parentGroup.find('.group-toggle').addClass('ion-ios-minus-outline').removeClass('ion-ios-plus-outline'); + event.stopPropagation(); + return false; + }); + + $('.deselect-group').on('click', function () { + var $this = $(this); + var $parentGroup = $this.closest('ul.list-group'); + $parentGroup.find('input[type=checkbox]').prop('checked', false); + + $parentGroup.find('.group-items').addClass('hide'); + $parentGroup.find('.group-toggle').removeClass('ion-ios-minus-outline').addClass('ion-ios-plus-outline'); + event.stopPropagation(); + return false; + }); + // Setup wizard $('.wizard-next').on('click', function () { var $form = $('#setup-form'), diff --git a/resources/views/partials/component_input.blade.php b/resources/views/partials/component_input.blade.php new file mode 100644 index 000000000000..abbc5f76536a --- /dev/null +++ b/resources/views/partials/component_input.blade.php @@ -0,0 +1,18 @@ +
  • +
    + +
    + @if($component->description) + + @endif + +
  • diff --git a/resources/views/partials/components_form.blade.php b/resources/views/partials/components_form.blade.php new file mode 100644 index 000000000000..5e31c33d84bd --- /dev/null +++ b/resources/views/partials/components_form.blade.php @@ -0,0 +1,33 @@ +@if($component_groups->count() > 0) +@foreach($component_groups as $componentGroup) + +@endforeach +@endif + +@if($ungrouped_components->count() > 0) + +@endif diff --git a/resources/views/subscribe/manage.blade.php b/resources/views/subscribe/manage.blade.php index 0069dfcbc29e..df442b88dacc 100644 --- a/resources/views/subscribe/manage.blade.php +++ b/resources/views/subscribe/manage.blade.php @@ -1,6 +1,7 @@ @extends('layout.master') @section('content') +

    @@ -17,43 +18,24 @@ Manage notifications for {{ $subscriber->email }}

    - @if($components->count() > 0)
    {{ trans('cachet.subscriber.manage.my_subscriptions') }}
    -
    - @foreach($components as $component) -
    -
    - -
    -
    - @endforeach +
    + @if(!$component_groups->isEmpty() || !$ungrouped_components->isEmpty()) + @include('partials.components_form') + @else +

    {{ trans('cachet.subscriber.manage.no_subscriptions') }}

    + @endif
    - @else -
    -
    -

    {{ trans('cachet.subscriber.manage.no_subscriptions') }}

    -
    -
    - @endif
    @stop From e61d24f685d265f6c3c2f200b285a7cf4ffe4e04 Mon Sep 17 00:00:00 2001 From: Nick Peelman Date: Mon, 18 Jul 2016 09:08:48 -0400 Subject: [PATCH 2/6] Fixing indentation problems... --- app/Presenters/ComponentGroupPresenter.php | 4 +- resources/assets/js/app.js | 10 +--- .../views/partials/component_input.blade.php | 29 +++++----- .../views/partials/components_form.blade.php | 56 +++++++++---------- 4 files changed, 47 insertions(+), 52 deletions(-) diff --git a/app/Presenters/ComponentGroupPresenter.php b/app/Presenters/ComponentGroupPresenter.php index 91967f5e0927..1cd9e9aba658 100644 --- a/app/Presenters/ComponentGroupPresenter.php +++ b/app/Presenters/ComponentGroupPresenter.php @@ -105,8 +105,8 @@ public function toArray() */ public function has_subscriber($subscriptions) { - $enabled_components = $this->wrappedObject->enabled_components()->orderBy('order')->pluck('id')->toArray(); - $intersected = array_intersect($enabled_components, $subscriptions); + $enabled_components = $this->wrappedObject->enabled_components()->orderBy('order')->pluck('id')->toArray(); + $intersected = array_intersect($enabled_components, $subscriptions); return count($intersected) != 0; } diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js index 6511596edc02..4ac6dc4de733 100644 --- a/resources/assets/js/app.js +++ b/resources/assets/js/app.js @@ -278,21 +278,17 @@ $(function() { }); $('.select-group').on('click', function () { - var $this = $(this); - var $parentGroup = $this.closest('ul.list-group'); + var $parentGroup = $(this).closest('ul.list-group'); $parentGroup.find('input[type=checkbox]').prop('checked', true); - $parentGroup.find('.group-items').removeClass('hide') $parentGroup.find('.group-toggle').addClass('ion-ios-minus-outline').removeClass('ion-ios-plus-outline'); - event.stopPropagation(); + event.stopPropagation(); return false; }); $('.deselect-group').on('click', function () { - var $this = $(this); - var $parentGroup = $this.closest('ul.list-group'); + var $parentGroup = $(this).closest('ul.list-group'); $parentGroup.find('input[type=checkbox]').prop('checked', false); - $parentGroup.find('.group-items').addClass('hide'); $parentGroup.find('.group-toggle').removeClass('ion-ios-minus-outline').addClass('ion-ios-plus-outline'); event.stopPropagation(); diff --git a/resources/views/partials/component_input.blade.php b/resources/views/partials/component_input.blade.php index abbc5f76536a..599d525ef8d8 100644 --- a/resources/views/partials/component_input.blade.php +++ b/resources/views/partials/component_input.blade.php @@ -1,18 +1,17 @@
  • -
    - -
    - @if($component->description) +
    + +
    + @if($component->description) - @endif - + @endif
  • diff --git a/resources/views/partials/components_form.blade.php b/resources/views/partials/components_form.blade.php index 5e31c33d84bd..876891e29e71 100644 --- a/resources/views/partials/components_form.blade.php +++ b/resources/views/partials/components_form.blade.php @@ -1,33 +1,33 @@ @if($component_groups->count() > 0) -@foreach($component_groups as $componentGroup) - -@endforeach + @foreach($component_groups as $componentGroup) + + @endforeach @endif @if($ungrouped_components->count() > 0) - + @endif From b4c7fb2ab0a66a8bd191b58245c2f947d371fdd4 Mon Sep 17 00:00:00 2001 From: Nick Peelman Date: Mon, 18 Jul 2016 09:12:00 -0400 Subject: [PATCH 3/6] adding a period... --- app/Presenters/ComponentGroupPresenter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Presenters/ComponentGroupPresenter.php b/app/Presenters/ComponentGroupPresenter.php index 1cd9e9aba658..5d1a650b9adb 100644 --- a/app/Presenters/ComponentGroupPresenter.php +++ b/app/Presenters/ComponentGroupPresenter.php @@ -99,7 +99,7 @@ public function toArray() } /** - * Determine if any of the contained components have active subscriptions + * Determine if any of the contained components have active subscriptions. * * @return bool */ From 587555c2d46d2168c8337e9b561991b9567c3fc2 Mon Sep 17 00:00:00 2001 From: Nick Peelman Date: Mon, 18 Jul 2016 09:12:42 -0400 Subject: [PATCH 4/6] Adding a newline... --- app/Presenters/ComponentGroupPresenter.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Presenters/ComponentGroupPresenter.php b/app/Presenters/ComponentGroupPresenter.php index 5d1a650b9adb..8cfb857520ab 100644 --- a/app/Presenters/ComponentGroupPresenter.php +++ b/app/Presenters/ComponentGroupPresenter.php @@ -107,6 +107,7 @@ public function has_subscriber($subscriptions) { $enabled_components = $this->wrappedObject->enabled_components()->orderBy('order')->pluck('id')->toArray(); $intersected = array_intersect($enabled_components, $subscriptions); + return count($intersected) != 0; } From 52c4901a78611f0f66a0480b8e206e752de12403 Mon Sep 17 00:00:00 2001 From: Nick Peelman Date: Mon, 18 Jul 2016 09:39:09 -0400 Subject: [PATCH 5/6] left align `@include` tags --- resources/views/partials/components_form.blade.php | 4 ++-- resources/views/subscribe/manage.blade.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/views/partials/components_form.blade.php b/resources/views/partials/components_form.blade.php index 876891e29e71..54eee258cc66 100644 --- a/resources/views/partials/components_form.blade.php +++ b/resources/views/partials/components_form.blade.php @@ -13,7 +13,7 @@
    @foreach($componentGroup->enabled_components()->orderBy('order')->get() as $component) - @include('partials.component_input', compact($component)) +@include('partials.component_input', compact($component)) @endforeach
    @endif @@ -27,7 +27,7 @@ {{ trans('cachet.components.group.other') }} @foreach($ungrouped_components as $component) - @include('partials.component_input', compact($component)) +@include('partials.component_input', compact($component)) @endforeach @endif diff --git a/resources/views/subscribe/manage.blade.php b/resources/views/subscribe/manage.blade.php index df442b88dacc..e34b3b36566c 100644 --- a/resources/views/subscribe/manage.blade.php +++ b/resources/views/subscribe/manage.blade.php @@ -26,7 +26,7 @@
    @if(!$component_groups->isEmpty() || !$ungrouped_components->isEmpty()) - @include('partials.components_form') +@include('partials.components_form') @else

    {{ trans('cachet.subscriber.manage.no_subscriptions') }}

    @endif From 9750191bffb81c1a7966d2cee2cfa32899120550 Mon Sep 17 00:00:00 2001 From: Nick Peelman Date: Mon, 18 Jul 2016 09:51:23 -0400 Subject: [PATCH 6/6] proper indents for `@includes` --- resources/views/partials/components_form.blade.php | 4 ++-- resources/views/subscribe/manage.blade.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/views/partials/components_form.blade.php b/resources/views/partials/components_form.blade.php index 54eee258cc66..2c260d70fdb4 100644 --- a/resources/views/partials/components_form.blade.php +++ b/resources/views/partials/components_form.blade.php @@ -13,7 +13,7 @@
    @foreach($componentGroup->enabled_components()->orderBy('order')->get() as $component) -@include('partials.component_input', compact($component)) + @include('partials.component_input', compact($component)) @endforeach
    @endif @@ -27,7 +27,7 @@ {{ trans('cachet.components.group.other') }} @foreach($ungrouped_components as $component) -@include('partials.component_input', compact($component)) + @include('partials.component_input', compact($component)) @endforeach @endif diff --git a/resources/views/subscribe/manage.blade.php b/resources/views/subscribe/manage.blade.php index e34b3b36566c..3bcade126f8c 100644 --- a/resources/views/subscribe/manage.blade.php +++ b/resources/views/subscribe/manage.blade.php @@ -26,7 +26,7 @@
    @if(!$component_groups->isEmpty() || !$ungrouped_components->isEmpty()) -@include('partials.components_form') + @include('partials.components_form') @else

    {{ trans('cachet.subscriber.manage.no_subscriptions') }}

    @endif