From: Stephen Cameron Date: Wed, 7 Aug 2019 16:43:33 +0000 (+0200) Subject: WIP #2751 @8 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=82d2d57ac14c44beda50dc0edb0ee37f0f6d7ec0;p=pmi.git WIP #2751 @8 --- diff --git a/app/Http/Controllers/AjaxController.php b/app/Http/Controllers/AjaxController.php index ec7a191..c321dfe 100644 --- a/app/Http/Controllers/AjaxController.php +++ b/app/Http/Controllers/AjaxController.php @@ -84,4 +84,27 @@ class AjaxController extends CubistFrontController $message->subject($subject . $validatedData['subject']); }); } + + // Subscribe to newsletter via MailChimp API + public function newsletter(Request $request) + { + $validator = Validator::make( + $request->all(), + [ + 'email' => 'required|email', + ], + [ + 'email.required' => __('Champ obligatoire'), + 'email.email' => __('Adresse e-mail invalide'), + ] + ); + + $validator->validate(); + + // TODO: implement MailChimp API (https://developer.mailchimp.com/documentation/mailchimp/guides/manage-subscribers-with-the-mailchimp-api/) + //$validatedData = $validator->validated(); + //dd($validatedData); + + return []; + } } diff --git a/app/Http/Controllers/NewsController.php b/app/Http/Controllers/NewsController.php index e7c73e3..c0c1c38 100644 --- a/app/Http/Controllers/NewsController.php +++ b/app/Http/Controllers/NewsController.php @@ -16,8 +16,8 @@ class NewsController extends CubistFrontController } $this->data['title'] = $newsItem->title; - $this->data['news'] = $newsItem->getPageData(); - $this->data['image'] = $this->data['news']->getImageURL('image', 'thumb'); + $this->data['image'] = $newsItem->getFirstMediaUrl($newsItem->image, 'thumb'); + $this->data['news'] = $newsItem; return view('pages.news-detail', $this->data); } diff --git a/app/Models/News.php b/app/Models/News.php index c52af1f..624b964 100644 --- a/app/Models/News.php +++ b/app/Models/News.php @@ -13,4 +13,27 @@ class News extends \Cubist\Backpack\app\Magic\Models\News $this->addMediaConversion('thumb') ->crop('crop-center', 348, 232); } + + // Display compact date range in localised human readable format + // Ref: https://codereview.stackexchange.com/a/78303 + // Alternative: https://github.com/flack/ranger + public function formatDateRange($start, $end) { + + if ($start->format('Y-m-d') === $end->format('Y-m-d')) { + # Same day + return $start->isoFormat('D MMMM Y'); + + } elseif ($start->format('Y-m') === $end->format('Y-m')) { + # Same calendar month + return $start->isoFormat('D') . $end->isoFormat('–D MMMM YYYY'); + + } elseif ($start->format('Y') === $end->format('Y')) { + # Same calendar year + return $start->isoFormat('D MMMM') . $end->isoFormat(' – D MMMM Y'); + + } else { + # General case (spans calendar years) + return $start->isoFormat('D MMMM Y') . $end->isoFormat(' – D MMMM Y'); + } + } } diff --git a/app/Templates/News.php b/app/Templates/News.php index 83c2530..53441c0 100644 --- a/app/Templates/News.php +++ b/app/Templates/News.php @@ -27,6 +27,8 @@ class News extends Base continue; } + // Todo: see if we should handle events differently? Should events have a different ID + URL and maybe a different controller action in case we need a different layout? + $item = new Item(); $item->setTitle($newsItem->title); $item->setHref($newsItem->slug); // Todo: consider having a configurable / translatable prefix for news URLs diff --git a/resources/js/mailform.js b/resources/js/mailform.js index 7a772a2..8ed46de 100644 --- a/resources/js/mailform.js +++ b/resources/js/mailform.js @@ -28,7 +28,8 @@ $(function () { data: $(this).serialize(), }).done(function (response) { $(form).find('.error').removeClass('error'); - $(form).closest('#contact-form').html('

' + $(form).data('confirmation') + '

'); + // Todo: make this more customisable from the form + $(form).html('

' + $(form).data('confirmation') + '

'); }).fail(function (response) { button.text(button.data('text')).prop('disabled', false); $(form).find('.error').removeClass('error'); diff --git a/resources/styles/components/form.styl b/resources/styles/components/form.styl index 306db95..b592cdd 100644 --- a/resources/styles/components/form.styl +++ b/resources/styles/components/form.styl @@ -1,49 +1,48 @@ -#contact-form - .form - - .fields - grid-column-gap: 30px - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - - .errormessage - color theme('colors.red') - font-weight: 300 - position: absolute - right: 0 - top: 15px - text-align: right - - input, textarea - border-radius 3px - color: theme('colors.grey.dark') - padding 12px 10px - border 1px solid #fff - display: block - width: 100% - - &:focus - border-color: theme('colors.grey.250') - - &.error - border-color: theme('colors.red') - - label - font-family: theme('fontFamily.body') - position: relative - padding-top: 15px - display: block - - &:not(.half) - grid-column 1 / -1 - - .textarea - height 144px - display: block - - &-endmessage - font-size: 14px - margin-bottom: 20px; - - .btn-custom - min-width 14rem - padding 1.125rem 3.375rem +.ajax-form + + .fields + grid-column-gap: 30px + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + + .errormessage + color theme('colors.red') + font-weight: 300 + position: absolute + right: 0 + top: 15px + text-align: right + + input, textarea + border-radius 3px + color: theme('colors.grey.dark') + padding 12px 10px + border 1px solid #fff + display: block + width: 100% + + &:focus + border-color: theme('colors.grey.250') + + &.error + border-color: theme('colors.red') + + label + font-family: theme('fontFamily.body') + position: relative + padding-top: 15px + display: block + + &:not(.half) + grid-column 1 / -1 + + .textarea + height 144px + display: block + + &-endmessage + font-size: 14px + margin-bottom: 20px; + + .btn-custom + min-width 14rem + padding 1.125rem 3.375rem diff --git a/resources/styles/components/news.styl b/resources/styles/components/news.styl index 5bb6a53..229e144 100644 --- a/resources/styles/components/news.styl +++ b/resources/styles/components/news.styl @@ -1,5 +1,47 @@ -.news - // 3 column layout with image / text / sidebar +//=== News Index Page +// 2 column layout with articles / sidebar +// Internal grid for each article +.news-index + &-layout + display: grid + constrain(grid-gap, 2.5vw) + grid-template: "articles sidebar" auto / 3fr 1fr + grid-template-rows: max-content + grid-template-columns: auto + + +below(768px) + grid-template-areas: "articles" "sidebar" + + &-articles + grid-area: articles + + // Internal grid for each article + &-article + display: grid + constrain(grid-gap, 2.5vw) + grid-template: "image text" auto / 1fr 2.25fr + + &:not(:last-child) + constrain(margin-bottom, 2.5vw) + + +below(1000px) + grid-template: "image" "text" auto / 1fr + &:not(:last-child) + margin-bottom: 5vw + + &-image + grid-area: image + + &-text + grid-area: text + + &-sidebar + grid-area: sidebar + + +//=== Individual News Post +// 3 column layout with image / text / sidebar +.news-post &-layout display: grid constrain(grid-gap, 2.5vw) @@ -23,4 +65,4 @@ &-sidebar grid-area: sidebar - min-width: 260px + min-width: 320px diff --git a/resources/views/pages/news-detail.blade.php b/resources/views/pages/news-detail.blade.php index af4af25..68c4254 100644 --- a/resources/views/pages/news-detail.blade.php +++ b/resources/views/pages/news-detail.blade.php @@ -6,19 +6,23 @@ -
+
@if ($image) {{-- Todo: use larger image + srcset here --}} - {{ $title }} + {{ $title }} @endif -
-

{{ date('d/m/y', strtotime($news->date['date'])) }}

+
+ @markdown($news->content)
-
- (Newsletter Form) +
diff --git a/resources/views/pages/news.blade.php b/resources/views/pages/news.blade.php index 9f78ea1..ff76205 100644 --- a/resources/views/pages/news.blade.php +++ b/resources/views/pages/news.blade.php @@ -6,24 +6,26 @@ {{-- Todo: use grid for main (generic?) sidebar layout and utilise minmax for content? --}} -
+
-
+
@foreach ($news as $newsItem) @php $newsURL = $nav->getHrefByID("news/{$newsItem->id}"); @endphp - {{-- Todo: use smaller grid for each article: 1fr image, 2fr content with a minmax on image to auto wrap --}} -
+
- + {{--Todo: handle missing images + get correct image size--}} - {{ $newsItem->title }} + {{ $newsItem->title }} -
-

{{ $newsItem->title }}

+
+ +

{{ $newsItem->title }}

{{ $newsItem['chapo'] }}

{{ __('En savoir plus') }}

@@ -33,13 +35,27 @@ @endforeach
-
+
- Events +

{{ __('Évènements') }}

+ @foreach($events as $event) + @php + $eventURL = $nav->getHrefByID("news/{$event->id}"); // Todo: possibly events will have different IDs + @endphp + +
+ + {{ $event->title }} + +

{{ $event->title }}

+

{{ $event->formatDateRange($event->event_start, $event->event_end) }}, {{ $event->event_place }}

+

{{ __('En savoir plus') }}

+
+ @endforeach
- Newsletter subscribe + @include('partials.newsletter-form')
diff --git a/resources/views/partials/form.blade.php b/resources/views/partials/form.blade.php index f5ca2db..cb01ad8 100644 --- a/resources/views/partials/form.blade.php +++ b/resources/views/partials/form.blade.php @@ -5,7 +5,7 @@ @endpush
-
+
@if($page->get('form_intro'))

{{$page->get('form_intro')}}

@endif diff --git a/resources/views/partials/newsletter-form.blade.php b/resources/views/partials/newsletter-form.blade.php new file mode 100644 index 0000000..73ef1fe --- /dev/null +++ b/resources/views/partials/newsletter-form.blade.php @@ -0,0 +1,14 @@ +@push('scripts') + +@endpush + +

+ {{ __('Inscription Newsletter') }} +

+ +
+ + +