diff --git a/app/Http/Controllers/API/v1/BackupController.php b/app/Http/Controllers/API/v1/BackupController.php index c45d7eb..d1b5f82 100644 --- a/app/Http/Controllers/API/v1/BackupController.php +++ b/app/Http/Controllers/API/v1/BackupController.php @@ -1,15 +1,19 @@ toDateTimeString(); + // Sort out timestamps from $message + dd($data); + $begin_time = parse_duplicati_time($data['BeginTime']); + $end_time = parse_duplicati_time($data['EndTime']); + $schedule = Schedule::updateOrCreate( ['client_id' => $client_id, 'name' => $schedule_name], ['last_backup_status' => $data['ParsedResult'], 'last_backup_time' => $current_time] ); - // $schedule = Schedule::firstOrNew(array( - // 'client_id' => $client_id, - // 'name' => $schedule_name, - // )); - - // $schedule->last_backup_status = $data['ParsedResult']; - // $schedule->save(); - - // Sort out timestamps from $message - - $begin_time = str_after($data['BeginTime'], '('); - $begin_time = str_before($begin_time, ')'); - $begin_time = Carbon::createFromTimestamp($begin_time)->toDateTimeString(); - $end_time = str_after($data['EndTime'], '('); - $end_time = str_before($end_time, ')'); - $end_time = Carbon::createFromTimestamp($end_time)->toDateTimeString(); - - // Create Backup DB entry $backup = Backup::Create(array( 'schedule_id' => $schedule->id, @@ -91,8 +78,19 @@ class BackupController extends Controller 'version' => $data['Version'] )); - return $backup; + // notify client by email. + $client = Client::where('id', '=', $client_id)->first(); + if($backup->status == "Success"){ + $client->notify(new BackupSuccess($backup)); + } + elseif($backup->status == "Warning"){ + $client->notify(new BackupWarning($backup)); + } + elseif($backup->status == "Error"){ + $client->notify(new BackupError($backup)); + } + } @@ -107,6 +105,7 @@ class BackupController extends Controller // } + /** * Update the specified resource in storage. * @@ -119,6 +118,7 @@ class BackupController extends Controller // } + /** * Remove the specified resource from storage. * diff --git a/app/Notifications/BackupComplete.php b/app/Notifications/BackupComplete.php new file mode 100644 index 0000000..556ae9d --- /dev/null +++ b/app/Notifications/BackupComplete.php @@ -0,0 +1,68 @@ +backup = $backup; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + return (new MailMessage) + + ->line('The backup schedule ( ' . $this->backup->schedule_name . ' ) has completed succesfully!') + ->action('Contact us ', url('/')) + ->line($this->backup->schedule_name . ' has completed successfully! yay!') + ->line('Size of added files: ' . readableBytes($this->backup->size_of_added_files)) + ->line('Thank you for using our application!'); + } + + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Notifications/BackupError.php b/app/Notifications/BackupError.php new file mode 100644 index 0000000..7f534dc --- /dev/null +++ b/app/Notifications/BackupError.php @@ -0,0 +1,62 @@ +backup = $backup; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + return (new MailMessage) + ->subject('ERROR Your backup ( ' . $this->backup->schedule_name . ' ) has an error!') + ->greeting('Error!') + ->markdown('mail.backup.error', ['backup' => $this->backup]); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Notifications/BackupSuccess.php b/app/Notifications/BackupSuccess.php new file mode 100644 index 0000000..a3d2de8 --- /dev/null +++ b/app/Notifications/BackupSuccess.php @@ -0,0 +1,62 @@ +backup = $backup; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + return (new MailMessage) + ->subject('SUCCESS Your backup ( ' . $this->backup->schedule_name . ' ) completed succesfully') + ->greeting('Success!') + ->markdown('mail.backup.success', ['backup' => $this->backup]); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Notifications/BackupWarning.php b/app/Notifications/BackupWarning.php new file mode 100644 index 0000000..fafe741 --- /dev/null +++ b/app/Notifications/BackupWarning.php @@ -0,0 +1,62 @@ +backup = $backup; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + return (new MailMessage) + ->subject('ERROR Your backup ( ' . $this->backup->schedule_name . ' ) has a warning!') + ->greeting('Error!') + ->markdown('mail.backup.warning', ['backup' => $this->backup]); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/resources/views/mail/backup/error.blade.php b/resources/views/mail/backup/error.blade.php new file mode 100644 index 0000000..e877ce3 --- /dev/null +++ b/resources/views/mail/backup/error.blade.php @@ -0,0 +1,33 @@ +@component('mail::message') +

Error!

+@component('mail::panel') +Your backup schedule ( {{$backup->schedule_name}} ) has errors! See details below... +@endcomponent + +@component('mail::button', ['url' => 'mailto:enquiries@mydentalbackup.co.uk?subject=' . $backup->schedule_name . '', 'color' => 'red']) +Contact us. +@endcomponent + +@component('mail::table') +| Item | Value | +| :------------ | --------:| +| Number of added files | {{$backup->added_files}} | +| Size of added files | {{$backup->size_of_added_files}} | +| Backup started | {{$backup->started_at}} | +| Backup finished | {{$backup->finished_at}} | +| Total backup time | {{$backup->duration}} | + +@endcomponent + +
+

Full variable data log..

+
+ +@component('mail::panel') +{{$backup}} +@endcomponent + +Regards,
+{{ config('app.name') }} - auto notification bot. + +@endcomponent diff --git a/resources/views/mail/backup/success.blade.php b/resources/views/mail/backup/success.blade.php new file mode 100644 index 0000000..6d46875 --- /dev/null +++ b/resources/views/mail/backup/success.blade.php @@ -0,0 +1,33 @@ +@component('mail::message') +####Success! +@component('mail::panel') +Your backup schedule ( {{$backup->schedule_name}} ) was completed successfully. See details below... +@endcomponent + +@component('mail::button', ['url' => 'mailto:enquiries@mydentalbackup.co.uk?subject=' . $backup->schedule_name . '', 'color' => 'green']) +Contact us. +@endcomponent + +@component('mail::table') +| Item | Value | +| :------------ | --------:| +| Number of added files | {{$backup->added_files}} | +| Size of added files | {{$backup->size_of_added_files}} | +| Backup started | {{$backup->started_at}} | +| Backup finished | {{$backup->finished_at}} | +| Total backup time | {{$backup->duration}} | + +@endcomponent + +
+

Full variable data log..

+
+ +@component('mail::panel') +{{$backup}} +@endcomponent + +Regards,
+{{ config('app.name') }} - auto notification bot. + +@endcomponent diff --git a/resources/views/mail/backup/warning.blade.php b/resources/views/mail/backup/warning.blade.php new file mode 100644 index 0000000..10b63f4 --- /dev/null +++ b/resources/views/mail/backup/warning.blade.php @@ -0,0 +1,33 @@ +@component('mail::message') +

Warning!

+@component('mail::panel') +Your backup schedule ( {{$backup->schedule_name}} ) has warnings! See details below... +@endcomponent + +@component('mail::button', ['url' => 'mailto:enquiries@mydentalbackup.co.uk?subject=' . $backup->schedule_name . '', 'color' => 'orange']) +Contact us. +@endcomponent + +@component('mail::table') +| Item | Value | +| :------------ | --------:| +| Number of added files | {{$backup->added_files}} | +| Size of added files | {{$backup->size_of_added_files}} | +| Backup started | {{$backup->started_at}} | +| Backup finished | {{$backup->finished_at}} | +| Total backup time | {{$backup->duration}} | + +@endcomponent + +
+

Full variable data log..

+
+ +@component('mail::panel') +{{$backup}} +@endcomponent + +Regards,
+{{ config('app.name') }} - auto notification bot. + +@endcomponent diff --git a/resources/views/vendor/mail/html/button.blade.php b/resources/views/vendor/mail/html/button.blade.php new file mode 100644 index 0000000..9d14d9b --- /dev/null +++ b/resources/views/vendor/mail/html/button.blade.php @@ -0,0 +1,19 @@ + + + + +
+ + + + +
+ + + + +
+ {{ $slot }} +
+
+
diff --git a/resources/views/vendor/mail/html/footer.blade.php b/resources/views/vendor/mail/html/footer.blade.php new file mode 100644 index 0000000..c3f9360 --- /dev/null +++ b/resources/views/vendor/mail/html/footer.blade.php @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/resources/views/vendor/mail/html/header.blade.php b/resources/views/vendor/mail/html/header.blade.php new file mode 100644 index 0000000..481f71b --- /dev/null +++ b/resources/views/vendor/mail/html/header.blade.php @@ -0,0 +1,17 @@ + + + + + + +
+ {{-- --}} + + + + {{-- + {{ $slot }} + --}} +
+ + diff --git a/resources/views/vendor/mail/html/layout.blade.php b/resources/views/vendor/mail/html/layout.blade.php new file mode 100644 index 0000000..354e008 --- /dev/null +++ b/resources/views/vendor/mail/html/layout.blade.php @@ -0,0 +1,62 @@ + + + + + + + + + + + + + +
+ + {{ $header ?? '' }} + + + + + + + {{ $footer ?? '' }} +
+ + + + + +
+ {{ Illuminate\Mail\Markdown::parse($slot) }} + + {{ $subcopy ?? '' }} +
+
+
+ + diff --git a/resources/views/vendor/mail/html/message.blade.php b/resources/views/vendor/mail/html/message.blade.php new file mode 100644 index 0000000..1ae9ed8 --- /dev/null +++ b/resources/views/vendor/mail/html/message.blade.php @@ -0,0 +1,27 @@ +@component('mail::layout') + {{-- Header --}} + @slot('header') + @component('mail::header', ['url' => config('app.url')]) + {{ config('app.name') }} + @endcomponent + @endslot + + {{-- Body --}} + {{ $slot }} + + {{-- Subcopy --}} + @isset($subcopy) + @slot('subcopy') + @component('mail::subcopy') + {{ $subcopy }} + @endcomponent + @endslot + @endisset + + {{-- Footer --}} + @slot('footer') + @component('mail::footer') + © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') + @endcomponent + @endslot +@endcomponent diff --git a/resources/views/vendor/mail/html/panel.blade.php b/resources/views/vendor/mail/html/panel.blade.php new file mode 100644 index 0000000..f397080 --- /dev/null +++ b/resources/views/vendor/mail/html/panel.blade.php @@ -0,0 +1,13 @@ + + + + +
+ + + + +
+ {{ Illuminate\Mail\Markdown::parse($slot) }} +
+
diff --git a/resources/views/vendor/mail/html/promotion.blade.php b/resources/views/vendor/mail/html/promotion.blade.php new file mode 100644 index 0000000..0debcf8 --- /dev/null +++ b/resources/views/vendor/mail/html/promotion.blade.php @@ -0,0 +1,7 @@ + + + + +
+ {{ Illuminate\Mail\Markdown::parse($slot) }} +
diff --git a/resources/views/vendor/mail/html/promotion/button.blade.php b/resources/views/vendor/mail/html/promotion/button.blade.php new file mode 100644 index 0000000..8e79081 --- /dev/null +++ b/resources/views/vendor/mail/html/promotion/button.blade.php @@ -0,0 +1,13 @@ + + + + +
+ + + + +
+ {{ $slot }} +
+
diff --git a/resources/views/vendor/mail/html/subcopy.blade.php b/resources/views/vendor/mail/html/subcopy.blade.php new file mode 100644 index 0000000..c3df7b4 --- /dev/null +++ b/resources/views/vendor/mail/html/subcopy.blade.php @@ -0,0 +1,7 @@ + + + + +
+ {{ Illuminate\Mail\Markdown::parse($slot) }} +
diff --git a/resources/views/vendor/mail/html/table.blade.php b/resources/views/vendor/mail/html/table.blade.php new file mode 100644 index 0000000..a5f3348 --- /dev/null +++ b/resources/views/vendor/mail/html/table.blade.php @@ -0,0 +1,3 @@ +
+{{ Illuminate\Mail\Markdown::parse($slot) }} +
diff --git a/resources/views/vendor/mail/html/themes/default.css b/resources/views/vendor/mail/html/themes/default.css new file mode 100644 index 0000000..4d9341c --- /dev/null +++ b/resources/views/vendor/mail/html/themes/default.css @@ -0,0 +1,334 @@ +/* Base */ + +body, body *:not(html):not(style):not(br):not(tr):not(code) { + font-family: Avenir, Helvetica, sans-serif; + box-sizing: border-box; +} + +body { + background-color: #f5f8fa; + color: #74787E; + height: 100%; + hyphens: auto; + line-height: 1.4; + margin: 0; + -moz-hyphens: auto; + -ms-word-break: break-all; + width: 100% !important; + -webkit-hyphens: auto; + -webkit-text-size-adjust: none; + word-break: break-all; + word-break: break-word; +} + +p, +ul, +ol, +blockquote { + line-height: 1.4; + text-align: left; +} + +a { + color: #3869D4; +} + +a img { + border: none; +} + +img { + float:left; +} + +/* Typography */ + +h1 { + color: #2F3133; + font-size: 19px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +h2 { + color: #2F3133; + font-size: 16px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +h3 { + color: #2F3133; + font-size: 14px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +h4 { + color: #8BC34A; + font-size: 70px; + font-weight: normal; + margin-top: 0; + margin-bottom: 30px; + text-align: center; +} + +p { + color: #74787E; + font-size: 16px; + line-height: 1.5em; + margin-top: 0; + text-align: left; +} + +p.sub { + font-size: 12px; +} + +img { + max-width: 100%; +} + +/* Layout */ + +.wrapper { + background-color: #f5f8fa; + margin: 0; + padding: 0; + width: 100%; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; +} + +.content { + margin: 0; + padding: 0; + width: 100%; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; +} + +/* Header */ + +.header { + padding: 25px 0; + text-align: center; + background-color: white; +} + +.header a { + color: #bbbfc3; + font-size: 19px; + font-weight: bold; + text-decoration: none; + text-shadow: 0 1px 0 white; +} + +/* Body */ + +.body { + background-color: #FFFFFF; + border-bottom: 1px solid #EDEFF2; + border-top: 1px solid #EDEFF2; + margin: 0; + padding: 0; + width: 100%; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; +} + +.inner-body { + background-color: #FFFFFF; + margin: 0 auto; + padding: 0; + width: 570px; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; +} + +.inner-header { + margin: 0 auto; + padding: 0; + width: 500px; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; +} + +/* Subcopy */ + +.subcopy { + border-top: 1px solid #EDEFF2; + margin-top: 25px; + padding-top: 25px; +} + +.subcopy p { + font-size: 12px; +} + +/* Footer */ + +.footer { + margin: 0 auto; + padding: 0; + text-align: center; + width: 570px; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; +} + +.footer p { + color: #AEAEAE; + font-size: 12px; + text-align: center; +} + +/* Tables */ + +.table table { + margin: 30px auto; + width: 100%; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; +} + +.table th { + border-bottom: 1px solid #EDEFF2; + padding-bottom: 8px; + margin: 0; +} + +.table td { + color: #74787E; + font-size: 15px; + line-height: 18px; + padding: 10px 0; + margin: 0; +} + +.content-cell { + padding: 35px; +} + +/* Buttons */ + +.action { + margin: 30px auto; + padding: 0; + text-align: center; + width: 100%; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; +} + +.button { + border-radius: 3px; + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.16); + color: #FFF; + display: inline-block; + text-decoration: none; + -webkit-text-size-adjust: none; +} + +.button-blue, +.button-primary { + background-color: #3097D1; + border-top: 10px solid #3097D1; + border-right: 18px solid #3097D1; + border-bottom: 10px solid #3097D1; + border-left: 18px solid #3097D1; +} + +.button-green, +.button-success { + background-color: #8BC34A; + border-top: 10px solid #8BC34A; + border-right: 18px solid #8BC34A; + border-bottom: 10px solid #8BC34A; + border-left: 18px solid #8BC34A; +} + +.button-red, +.button-error { + background-color: #ea5b50; + border-top: 10px solid #ea5b50; + border-right: 18px solid #ea5b50; + border-bottom: 10px solid #ea5b50; + border-left: 18px solid #ea5b50; +} + +.button-orange, +.button-warning { + background-color: #f1a332; + border-top: 10px solid #f1a332; + border-right: 18px solid #f1a332; + border-bottom: 10px solid #f1a332; + border-left: 18px solid #f1a332; +} + +/* Panels */ + +.panel { + margin: 0 0 21px; +} + +.panel-content { + background-color: #EDEFF2; + padding: 16px; +} + +.panel-item { + padding: 0; +} + +.panel-item p:last-of-type { + margin-bottom: 0; + padding-bottom: 0; +} + +/* Promotions */ + +.promotion { + background-color: #FFFFFF; + border: 1px dashed #9BA2AB; + margin: 0; + margin-bottom: 25px; + margin-top: 25px; + padding: 24px; + width: 100%; + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; +} + +.promotion h1 { + text-align: center; +} + +.promotion p { + font-size: 15px; + text-align: center; +} + +div.dark-box{ + background-color:#4e5156; padding:20px; margin-bottom:0px; +} + +.error{ + color:#ea5b50; +} + +.warning{ + color:#f1a332; +} diff --git a/resources/views/vendor/mail/markdown/button.blade.php b/resources/views/vendor/mail/markdown/button.blade.php new file mode 100644 index 0000000..97444eb --- /dev/null +++ b/resources/views/vendor/mail/markdown/button.blade.php @@ -0,0 +1 @@ +{{ $slot }}: {{ $url }} diff --git a/resources/views/vendor/mail/markdown/footer.blade.php b/resources/views/vendor/mail/markdown/footer.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/markdown/footer.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/markdown/header.blade.php b/resources/views/vendor/mail/markdown/header.blade.php new file mode 100644 index 0000000..aaa3e57 --- /dev/null +++ b/resources/views/vendor/mail/markdown/header.blade.php @@ -0,0 +1 @@ +[{{ $slot }}]({{ $url }}) diff --git a/resources/views/vendor/mail/markdown/layout.blade.php b/resources/views/vendor/mail/markdown/layout.blade.php new file mode 100644 index 0000000..9378baa --- /dev/null +++ b/resources/views/vendor/mail/markdown/layout.blade.php @@ -0,0 +1,9 @@ +{!! strip_tags($header) !!} + +{!! strip_tags($slot) !!} +@isset($subcopy) + +{!! strip_tags($subcopy) !!} +@endisset + +{!! strip_tags($footer) !!} diff --git a/resources/views/vendor/mail/markdown/message.blade.php b/resources/views/vendor/mail/markdown/message.blade.php new file mode 100644 index 0000000..1ae9ed8 --- /dev/null +++ b/resources/views/vendor/mail/markdown/message.blade.php @@ -0,0 +1,27 @@ +@component('mail::layout') + {{-- Header --}} + @slot('header') + @component('mail::header', ['url' => config('app.url')]) + {{ config('app.name') }} + @endcomponent + @endslot + + {{-- Body --}} + {{ $slot }} + + {{-- Subcopy --}} + @isset($subcopy) + @slot('subcopy') + @component('mail::subcopy') + {{ $subcopy }} + @endcomponent + @endslot + @endisset + + {{-- Footer --}} + @slot('footer') + @component('mail::footer') + © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') + @endcomponent + @endslot +@endcomponent diff --git a/resources/views/vendor/mail/markdown/panel.blade.php b/resources/views/vendor/mail/markdown/panel.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/markdown/panel.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/markdown/promotion.blade.php b/resources/views/vendor/mail/markdown/promotion.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/markdown/promotion.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/markdown/promotion/button.blade.php b/resources/views/vendor/mail/markdown/promotion/button.blade.php new file mode 100644 index 0000000..aaa3e57 --- /dev/null +++ b/resources/views/vendor/mail/markdown/promotion/button.blade.php @@ -0,0 +1 @@ +[{{ $slot }}]({{ $url }}) diff --git a/resources/views/vendor/mail/markdown/subcopy.blade.php b/resources/views/vendor/mail/markdown/subcopy.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/markdown/subcopy.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/markdown/table.blade.php b/resources/views/vendor/mail/markdown/table.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/markdown/table.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/notifications/email.blade.php b/resources/views/vendor/notifications/email.blade.php new file mode 100644 index 0000000..9d1581d --- /dev/null +++ b/resources/views/vendor/notifications/email.blade.php @@ -0,0 +1,63 @@ +@component('mail::message') + +{{-- Greeting --}} +@if (! empty($greeting)) +# {{ $greeting }} +@else +@if ($level == 'error') +# @lang('Whoops!') +@else +# @lang('Hello!') +@endif +@endif + +{{-- Intro Lines --}} +@foreach ($introLines as $line) +{{ $line }} + +@endforeach + +{{-- Action Button --}} +@isset($actionText) + +@component('mail::button', ['url' => $actionUrl, 'color' => $color]) +{{ $actionText }} +@endcomponent +@endisset + +{{-- Outro Lines --}} +@foreach ($outroLines as $line) +{{ $line }} + +@endforeach + +{{-- Salutation --}} +@if (! empty($salutation)) +{{ $salutation }} +@else +@lang('Regards'),
{{ config('app.name') }} +@endif + +{{-- Subcopy --}} +@isset($actionText) +@component('mail::subcopy') +@lang( + "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\n". + 'into your web browser: [:actionURL](:actionURL)', + [ + 'actionText' => $actionText, + 'actionUrl' => $actionUrl + ] +) +@endcomponent +@endisset +@endcomponent