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 @@
+
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 @@
+
+
+
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 ?? '' }}
+
+
+
+
+
+
+
+ |
+ {{ Illuminate\Mail\Markdown::parse($slot) }}
+
+ {{ $subcopy ?? '' }}
+ |
+
+
+ |
+
+
+ {{ $footer ?? '' }}
+
+ |
+
+
+
+
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 @@
+
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 @@
+
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