Merge pull request #1843 from CachetHQ/improve-emails

Improve email designs, use theme colours
This commit is contained in:
Graham Campbell
2016-05-28 18:36:55 +01:00
18 changed files with 520 additions and 192 deletions

View File

@@ -57,7 +57,7 @@ class SendComponentUpdateEmailNotificationHandler
*/ */
public function handle(ComponentWasUpdatedEvent $event) public function handle(ComponentWasUpdatedEvent $event)
{ {
$component = AutoPresenter::decorate($event->component); $component = $event->component;
// First notify all global subscribers. // First notify all global subscribers.
$globalSubscribers = $this->subscriber->isVerified()->isGlobal()->get(); $globalSubscribers = $this->subscriber->isVerified()->isGlobal()->get();
@@ -92,6 +92,8 @@ class SendComponentUpdateEmailNotificationHandler
*/ */
public function notify(Component $component, Subscriber $subscriber) public function notify(Component $component, Subscriber $subscriber)
{ {
$component = AutoPresenter::decorate($component);
$mail = [ $mail = [
'subject' => trans('cachet.subscriber.email.component.subject'), 'subject' => trans('cachet.subscriber.email.component.subject'),
'component_name' => $component->name, 'component_name' => $component->name,

View File

@@ -107,9 +107,14 @@ class SendIncidentEmailNotificationHandler
$mail = [ $mail = [
'email' => $subscriber->email, 'email' => $subscriber->email,
'subject' => 'New incident reported.', 'subject' => trans('cachet.subscriber.email.incident.subject', [
'status' => $incident->human_status,
'name' => $incident->name,
]),
'has_component' => ($event->incident->component) ? true : false, 'has_component' => ($event->incident->component) ? true : false,
'component_name' => $component ? $component->name : null, 'component_name' => $component ? $component->name : null,
'name' => $incident->name,
'timestamp' => $incident->created_at_formatted,
'status' => $incident->human_status, 'status' => $incident->human_status,
'html_content' => $incident->formattedMessage, 'html_content' => $incident->formattedMessage,
'text_content' => $incident->message, 'text_content' => $incident->message,

View File

@@ -107,9 +107,13 @@ class SendMaintenanceEmailNotificationHandler
$mail = [ $mail = [
'email' => $subscriber->email, 'email' => $subscriber->email,
'subject' => 'Scheduled maintenance.', 'subject' => trans('cachet.subscriber.email.maintenance.subject', [
'name' => $incident->name,
]),
'has_component' => ($event->incident->component) ? true : false, 'has_component' => ($event->incident->component) ? true : false,
'component_name' => $component ? $component->name : null, 'component_name' => $component ? $component->name : null,
'name' => $incident->name,
'timestamp' => $incident->scheduled_at_formatted,
'status' => $incident->human_status, 'status' => $incident->human_status,
'html_content' => $incident->formattedMessage, 'html_content' => $incident->formattedMessage,
'text_content' => $incident->message, 'text_content' => $incident->message,

View File

@@ -34,7 +34,7 @@ class ComposerServiceProvider extends ServiceProvider
$factory->composer('*', CurrentUserComposer::class); $factory->composer('*', CurrentUserComposer::class);
$factory->composer(['index'], MetricsComposer::class); $factory->composer(['index'], MetricsComposer::class);
$factory->composer(['index', 'single-incident', 'subscribe', 'signup'], StatusPageComposer::class); $factory->composer(['index', 'single-incident', 'subscribe', 'signup'], StatusPageComposer::class);
$factory->composer(['index', 'single-incident', 'subscribe.*', 'signup', 'dashboard.settings.theme'], ThemeComposer::class); $factory->composer(['index', 'single-incident', 'subscribe.*', 'signup', 'dashboard.settings.theme', 'emails.*'], ThemeComposer::class);
$factory->composer('dashboard.*', DashboardComposer::class); $factory->composer('dashboard.*', DashboardComposer::class);
$factory->composer(['setup', 'dashboard.settings.localization'], TimezoneLocaleComposer::class); $factory->composer(['setup', 'dashboard.settings.localization'], TimezoneLocaleComposer::class);
} }

View File

@@ -29,6 +29,7 @@
"backup-manager/laravel": "^1.1", "backup-manager/laravel": "^1.1",
"barryvdh/laravel-cors": "^0.8", "barryvdh/laravel-cors": "^0.8",
"doctrine/dbal": "^2.5", "doctrine/dbal": "^2.5",
"fedeisas/laravel-mail-css-inliner": "^1.5",
"fideloper/proxy": "^3.1", "fideloper/proxy": "^3.1",
"graham-campbell/binput": "^3.4", "graham-campbell/binput": "^3.4",
"graham-campbell/core": "^5.1", "graham-campbell/core": "^5.1",

209
composer.lock generated
View File

@@ -4,8 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"hash": "d58416fb0d16c8b7fc9b936b6f642c39", "hash": "9d38d3ba627f866fa276370913d9bf70",
"content-hash": "226b91629f9aa94bb32446a4e963600c", "content-hash": "b75a2ca8a01159ff0a136823a7f26e88",
"packages": [ "packages": [
{ {
"name": "alt-three/badger", "name": "alt-three/badger",
@@ -1150,6 +1150,58 @@
], ],
"time": "2014-09-09 13:34:57" "time": "2014-09-09 13:34:57"
}, },
{
"name": "fedeisas/laravel-mail-css-inliner",
"version": "1.5",
"source": {
"type": "git",
"url": "https://github.com/fedeisas/laravel-mail-css-inliner.git",
"reference": "8c3cd958634e865a90fc398900ea59c427dd35cc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fedeisas/laravel-mail-css-inliner/zipball/8c3cd958634e865a90fc398900ea59c427dd35cc",
"reference": "8c3cd958634e865a90fc398900ea59c427dd35cc",
"shasum": ""
},
"require": {
"illuminate/support": "~5.0",
"php": ">=5.4.0",
"tijsverkoyen/css-to-inline-styles": "~1.2"
},
"require-dev": {
"jakub-onderka/php-console-highlighter": "0.3.*",
"jakub-onderka/php-parallel-lint": "0.8.*",
"phpmd/phpmd": "~1.5",
"phpunit/phpunit": "~4.0",
"satooshi/php-coveralls": "~0.7@dev",
"squizlabs/php_codesniffer": "~1.5",
"swiftmailer/swiftmailer": "~5.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Fedeisas\\LaravelMailCssInliner\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fede Isas",
"email": "fedeisas@hotmail.com"
}
],
"description": "Inline the CSS of your HTML emails using Laravel",
"keywords": [
"css",
"laravel",
"mailer"
],
"time": "2016-04-19 07:02:48"
},
{ {
"name": "fideloper/proxy", "name": "fideloper/proxy",
"version": "3.1.0", "version": "3.1.0",
@@ -2988,6 +3040,59 @@
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2016-04-28 09:48:42" "time": "2016-04-28 09:48:42"
}, },
{
"name": "symfony/css-selector",
"version": "v3.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
"reference": "65e764f404685f2dc20c057e889b3ad04b2e2db0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/65e764f404685f2dc20c057e889b3ad04b2e2db0",
"reference": "65e764f404685f2dc20c057e889b3ad04b2e2db0",
"shasum": ""
},
"require": {
"php": ">=5.5.9"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\CssSelector\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jean-François Simon",
"email": "jeanfrancois.simon@sensiolabs.com"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
"time": "2016-03-04 07:55:57"
},
{ {
"name": "symfony/debug", "name": "symfony/debug",
"version": "v3.0.6", "version": "v3.0.6",
@@ -3707,6 +3812,53 @@
], ],
"time": "2016-04-25 11:17:47" "time": "2016-04-25 11:17:47"
}, },
{
"name": "tijsverkoyen/css-to-inline-styles",
"version": "1.5.5",
"source": {
"type": "git",
"url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
"reference": "9753fc340726e327e4d48b7c0604f85475ae0bc3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/9753fc340726e327e4d48b7c0604f85475ae0bc3",
"reference": "9753fc340726e327e4d48b7c0604f85475ae0bc3",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"symfony/css-selector": "~2.1|~3.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.5.x-dev"
}
},
"autoload": {
"psr-4": {
"TijsVerkoyen\\CssToInlineStyles\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD"
],
"authors": [
{
"name": "Tijs Verkoyen",
"email": "css_to_inline_styles@verkoyen.eu",
"role": "Developer"
}
],
"description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.",
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
"time": "2015-12-08 16:14:14"
},
{ {
"name": "twig/twig", "name": "twig/twig",
"version": "v1.24.0", "version": "v1.24.0",
@@ -5066,59 +5218,6 @@
"homepage": "https://github.com/sebastianbergmann/version", "homepage": "https://github.com/sebastianbergmann/version",
"time": "2015-06-21 13:59:46" "time": "2015-06-21 13:59:46"
}, },
{
"name": "symfony/css-selector",
"version": "v3.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
"reference": "65e764f404685f2dc20c057e889b3ad04b2e2db0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/65e764f404685f2dc20c057e889b3ad04b2e2db0",
"reference": "65e764f404685f2dc20c057e889b3ad04b2e2db0",
"shasum": ""
},
"require": {
"php": ">=5.5.9"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\CssSelector\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jean-François Simon",
"email": "jeanfrancois.simon@sensiolabs.com"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
"time": "2016-03-04 07:55:57"
},
{ {
"name": "symfony/dom-crawler", "name": "symfony/dom-crawler",
"version": "v3.0.6", "version": "v3.0.6",

View File

@@ -164,6 +164,7 @@ return [
'AltThree\Emoji\EmojiServiceProvider', 'AltThree\Emoji\EmojiServiceProvider',
'BackupManager\Laravel\Laravel5ServiceProvider', 'BackupManager\Laravel\Laravel5ServiceProvider',
'Barryvdh\Cors\ServiceProvider', 'Barryvdh\Cors\ServiceProvider',
'Fedeisas\LaravelMailCssInliner\LaravelMailCssInlinerServiceProvider',
'Fideloper\Proxy\TrustedProxyServiceProvider', 'Fideloper\Proxy\TrustedProxyServiceProvider',
'GrahamCampbell\Binput\BinputServiceProvider', 'GrahamCampbell\Binput\BinputServiceProvider',
'GrahamCampbell\Exceptions\ExceptionsServiceProvider', 'GrahamCampbell\Exceptions\ExceptionsServiceProvider',

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -75,32 +75,27 @@ return [
'subscribe' => 'Subscribe to email updates.', 'subscribe' => 'Subscribe to email updates.',
'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.', 'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.',
'verified' => 'Your email subscription has been confirmed. Thank you!', 'verified' => 'Your email subscription has been confirmed. Thank you!',
'manage' => 'Manage your subscription.', 'manage' => 'Manage your subscription',
'unsubscribe' => 'Unsubscribe from email updates.', 'unsubscribe' => 'Unsubscribe from email updates.',
'unsubscribed' => 'Your email subscription has been cancelled.', 'unsubscribed' => 'Your email subscription has been cancelled.',
'failure' => 'Something went wrong with the subscription.', 'failure' => 'Something went wrong with the subscription.',
'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.', 'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.',
'verify' => [ 'verify' => [
'text' => "Please confirm your email subscription to :app_name status updates.\n:link\nThank you, :app_name", 'text' => "Please confirm your email subscription to :app_name status updates.\n:link",
'html-preheader' => 'Please confirm your email subscription to :app_name status updates.', 'html' => '<p>Please confirm your email subscription to :app_name status updates.</p>',
'html' => '<p>Please confirm your email subscription to :app_name status updates.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>', 'button' => 'Confirm Subscription',
], ],
'maintenance' => [ 'maintenance' => [
'text' => "New maintenance has been scheduled on :app_name.\nThank you, :app_name", 'subject' => '[Maintenance Scheduled] :name',
'html-preheader' => 'New maintenance has been scheduled on :app_name.',
'html' => '<p>New maintenance has been scheduled on :app_name.</p>',
], ],
'incident' => [ 'incident' => [
'text' => "New incident has been reported on :app_name.\nThank you, :app_name", 'subject' => '[New Incident] :status: :name',
'html-preheader' => 'New incident has been reported on :app_name.',
'html' => '<p>New incident has been reported on :app_name.</p><p>Thank you, :app_name</p>',
], ],
'component' => [ 'component' => [
'subject' => 'Component Status Update', 'subject' => 'Component Status Update',
'text' => 'The component :component_name has seen a status change. The component is now at :component_human_status.\nThank you, :app_name', 'text' => 'The component :component_name has seen a status change. The component is now at :component_human_status.\nThank you, :app_name',
'html-preheader' => 'Component Update from :app_name', 'html' => '<p>The component :component_name has seen a status change. The component is now at :component_human_status.</p><p>Thank you, :app_name</p>',
'html' => '<p>The component :component_name has seen a status change. The component is now at :component_human_status.</p><p>Thank you, :app_name</p>', 'tooltip-title' => 'Subscribe to notifications for :component_name.',
'tooltip-title' => 'Subscribe to notifications for :component_name.',
], ],
], ],
], ],
@@ -109,7 +104,6 @@ return [
'email' => [ 'email' => [
'invite' => [ 'invite' => [
'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name", 'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name",
'html-preheader' => 'You have been invited to the team :app_name.',
'html' => '<p>You have been invited to the team :app_name status page, to sign up follow the next link.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>', 'html' => '<p>You have been invited to the team :app_name status page, to sign up follow the next link.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>',
], ],
], ],

View File

@@ -1,16 +1,20 @@
@extends('layout.emails') @extends('layout.emails')
@section('preheader')
{!! trans('cachet.subscriber.email.component.html-preheader', ['app_name' => $app_name]) !!}
@stop
@section('content') @section('content')
{!! trans('cachet.subscriber.email.component.html', ['component_name' => $component_name, 'component_human_status' => $component_human_status, 'app_name' => $app_name]) !!} {!! trans('cachet.subscriber.email.component.html', ['component_name' => $component_name, 'component_human_status' => $component_human_status, 'app_name' => $app_name]) !!}
@if($show_support) <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0">
<p>{!! trans('cachet.powered_by', ['app' => $app_name]) !!}</p> <tr>
@endif <td align="center">
<p> <div>
<small><a href="{{ $manage_link }}">{!! trans('cachet.subscriber.email.manage') !!}</a></small> <!--[if mso]><v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="{{ $manage_link }}" style="height:45px;v-text-anchor:middle;width:200px;" arcsize="7%" stroke="f" fill="t">
</p> <v:fill type="tile" color="#22BC66" />
<w:anchorlock/>
<center style="color:#ffffff;font-family:sans-serif;font-size:15px;">{!! trans('cachet.subscriber.email.manage') !!}</center>
</v:roundrect><![endif]-->
<a href="{{ $manage_link }}" class="button button--green">{!! trans('cachet.subscriber.email.manage') !!}</a>
</div>
</td>
</tr>
</table>
@stop @stop

View File

@@ -1,7 +1,7 @@
{!! trans('cachet.subscriber.email.component.text', ['component_name' => $component_name, 'component_human_status' => $component_human_status, 'app_name' => $app_name]) !!} {!! trans('cachet.subscriber.email.component.text', ['component_name' => $component_name, 'component_human_status' => $component_human_status, 'app_name' => $app_name]) !!}
{!! trans('cachet.subscriber.email.manage') !!} {{ $manage_link }}
@if($show_support) @if($show_support)
{!! trans('cachet.powered_by', ['app' => $app_name]) !!} {!! trans('cachet.powered_by', ['app' => $app_name]) !!}
@endif @endif
{!! trans('cachet.subscriber.email.manage') !!} {{ $manage_link }}

View File

@@ -1,29 +1,40 @@
@extends('layout.emails') @extends('layout.emails')
@section('preheader')
{!! trans('cachet.subscriber.email.maintenance.html-preheader', ['app_name' => $app_name]) !!}
@stop
@section('content') @section('content')
{!! trans('cachet.subscriber.email.maintenance.html', ['app_name' => $app_name]) !!} <h1 class="align-center">{!! $name !!}</h1>
<p>{{ $scheduled_at }}</p> <table class="border-rounded" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td>
<p class="compressed">
<strong>{!! $status !!} @if($has_component) ({{ $component_name }}) @endif</strong>
{!! $html_content !!}
{!! $timestamp !!}
</p>
</td>
<tr>
</table>
<p> <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0">
{!! $status !!} <tr>
</p> <td align="center">
<div>
<!--[if mso]><v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="{{ $manage_link }}" style="height:45px;v-text-anchor:middle;width:200px;" arcsize="7%" stroke="f" fill="t">
<v:fill type="tile" color="#22BC66" />
<w:anchorlock/>
<center style="color:#ffffff;font-family:sans-serif;font-size:15px;">{!! trans('cachet.subscriber.email.manage') !!}</center>
</v:roundrect><![endif]-->
<a href="{{ $manage_link }}" class="button button--green">{!! trans('cachet.subscriber.email.manage') !!}</a>
</div>
</td>
</tr>
</table>
<p> <table class="body-sub" align="center">
{!! $html_content !!} <tr>
</p> <td align="center">
<p class="sub"><a href="{{ $unsubscribe_link }}">{!! trans('cachet.subscriber.email.unsubscribe') !!}</a></p>
@if($show_support) </td>
<p>{!! trans('cachet.powered_by', ['app' => $app_name]) !!}</p> </tr>
@endif </table>
<p>
<small><a href="{{ $manage_link }}">{!! trans('cachet.subscriber.email.manage') !!}</a></small>
</p>
<p>
<small><a href="{{ $unsubscribe_link }}">{!! trans('cachet.subscriber.email.unsubscribe') !!}</a></small>
</p>
@stop @stop

View File

@@ -1,15 +1,16 @@
{!! trans('cachet.subscriber.email.maintenance.text', ['app_name' => $app_name]) !!} {!! $name !!}
{{ $scheduled_at }}
{!! $status !!} {!! $status !!}
{!! $text_content !!} {!! $text_content !!}
{!! $timestamp !!}
@if($has_component)
({{ $component_name }})
@endif
{!! trans('cachet.subscriber.email.manage') !!} {{ $manage_link }}
{!! trans('cachet.subscriber.email.unsubscribe') !!} {{ $unsubscribe_link }}
@if($show_support) @if($show_support)
{!! trans('cachet.powered_by', ['app' => $app_name]) !!} {!! trans('cachet.powered_by', ['app' => $app_name]) !!}
@endif @endif
{!! trans('cachet.subscriber.email.manage') !!} {{ $manage_link }}
{!! trans('cachet.subscriber.email.unsubscribe') !!} {{ $unsubscribe_link }}

View File

@@ -1,30 +1,40 @@
@extends('layout.emails') @extends('layout.emails')
@section('preheader')
{!! trans('cachet.subscriber.email.incident.html-preheader', ['app_name' => $app_name]) !!}
@stop
@section('content') @section('content')
{!! trans('cachet.subscriber.email.incident.html-preheader', ['app_name' => $app_name]) !!} <h1 class="align-center">{!! $name !!}</h1>
<p> <table class="border-rounded" width="100%" cellpadding="0" cellspacing="0">
{!! $status !!} <tr>
@if($has_component) <td>
({{ $component_name }}) <p class="compressed">
@endif <strong>{!! $status !!} @if($has_component) ({{ $component_name }}) @endif</strong>
</p> {!! $html_content !!}
{!! $timestamp !!}
</p>
</td>
<tr>
</table>
<p> <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0">
{!! $html_content !!} <tr>
</p> <td align="center">
<div>
<!--[if mso]><v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="{{ $manage_link }}" style="height:45px;v-text-anchor:middle;width:200px;" arcsize="7%" stroke="f" fill="t">
<v:fill type="tile" color="#22BC66" />
<w:anchorlock/>
<center style="color:#ffffff;font-family:sans-serif;font-size:15px;">{!! trans('cachet.subscriber.email.manage') !!}</center>
</v:roundrect><![endif]-->
<a href="{{ $manage_link }}" class="button button--green">{!! trans('cachet.subscriber.email.manage') !!}</a>
</div>
</td>
</tr>
</table>
@if($show_support) <table class="body-sub" align="center">
<p>{!! trans('cachet.powered_by', ['app' => $app_name]) !!}</p> <tr>
@endif <td align="center">
<p> <p class="sub"><a href="{{ $unsubscribe_link }}">{!! trans('cachet.subscriber.email.unsubscribe') !!}</a></p>
<small><a href="{{ $manage_link }}">{!! trans('cachet.subscriber.email.manage') !!}</a></small> </td>
</p> </tr>
<p> </table>
<small><a href="{{ $unsubscribe_link }}">{!! trans('cachet.subscriber.email.unsubscribe') !!}</a></small>
</p>
@stop @stop

View File

@@ -1,16 +1,17 @@
{!! trans('cachet.subscriber.email.incident.text', ['app_name' => $app_name]) !!} {!! $name !!}
{!! $status !!} {!! $status !!}
{!! $text_content !!}
{!! $timestamp !!}
@if($has_component) @if($has_component)
({{ $component_name }}) ({{ $component_name }})
@endif @endif
{!! $text_content !!}
@if($show_support)
{!! trans('cachet.powered_by', ['app' => $app_name]) !!}
@endif
{!! trans('cachet.subscriber.email.manage') !!} {{ $manage_link }} {!! trans('cachet.subscriber.email.manage') !!} {{ $manage_link }}
{!! trans('cachet.subscriber.email.unsuscribe') !!} {{ $unsubscribe_link }} {!! trans('cachet.subscriber.email.unsuscribe') !!} {{ $unsubscribe_link }}
@if($show_support)
{!! trans('cachet.powered_by', ['app' => $app_name]) !!}
@endif

View File

@@ -1,13 +1,20 @@
@extends('layout.emails') @extends('layout.emails')
@section('preheader')
{!! trans('cachet.subscriber.email.verify.html-preheader', ['app_name' => $app_name]) !!}
@stop
@section('content') @section('content')
{!! trans('cachet.subscriber.email.verify.html', ['app_name' => $app_name, 'link' => $link]) !!} {!! trans('cachet.subscriber.email.verify.html', ['app_name' => $app_name]) !!}
@if($show_support) <table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0">
<p>{!! trans('cachet.powered_by', ['app' => $app_name]) !!}</p> <tr>
@endif <td align="center">
<div>
<!--[if mso]><v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="{{ $link }}" style="height:45px;v-text-anchor:middle;width:200px;" arcsize="7%" stroke="f" fill="t">
<v:fill type="tile" color="#22BC66" />
<w:anchorlock/>
<center style="color:#ffffff;font-family:sans-serif;font-size:15px;">{{ trans('cachet.subscriber.email.verify.button') }}</center>
</v:roundrect><![endif]-->
<a href="{{ $link }}" class="button button--green">{{ trans('cachet.subscriber.email.verify.button') }}</a>
</div>
</td>
</tr>
</table>
@stop @stop

View File

@@ -1,13 +1,5 @@
@extends('layout.emails') @extends('layout.emails')
@section('preheader')
{!! trans('cachet.users.email.invite.html-preheader', ['app_name' => $app_name]) !!}
@stop
@section('content') @section('content')
{!! trans('cachet.users.email.invite.html', ['app_name' => $app_name, 'link' => $link]) !!} {!! trans('cachet.users.email.invite.html', ['app_name' => $app_name, 'link' => $link]) !!}
@if($show_support)
<p>{!! trans('cachet.powered_by', ['app' => $app_name]) !!}</p>
@endif
@stop @stop

View File

@@ -1,38 +1,234 @@
<!DOCTYPE html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en-GB"> <html xmlns="http://www.w3.org/1999/xhtml">
<head> <head>
<meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="format-detection" content="address=no;=no;telephone=no" />
<meta name="viewport" content="width=device-width" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="format-detection" content="address=no;=no;telephone=no" /> <title>{{ $app_name }}</title>
<title>{{ $app_name }}</title> <style type="text/css" rel="stylesheet" media="all">
@include('partials.email-css') /* Base ------------------------------ */
*:not(br):not(tr):not(html) {
font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
body {
width: 100% !important;
height: 100%;
margin: 0;
line-height: 1.4;
background-color: #F2F4F6;
color: #74787E;
-webkit-text-size-adjust: none;
}
a {
color: {{ $theme_links }};
}
a img {
color: none;
border: none;
}
/* Layout ------------------------------ */
.email-wrapper {
width: 100%;
margin: 0;
padding: 0;
background-color: #F2F4F6;
}
.email-content {
width: 100%;
margin: 0;
padding: 0;
}
/* Masthead ----------------------- */
.email-masthead {
padding: 25px 0;
text-align: center;
}
.email-masthead_logo {
max-width: 400px;
border: 0;
}
.email-masthead_name {
font-size: 40px;
font-weight: bold;
color: #bbbfc3;
text-decoration: none;
text-shadow: 0 1px 0 white;
}
/* Body ------------------------------ */
.email-body {
width: 100%;
margin: 0;
padding: 0;
border-top: 1px solid #EDEFF2;
border-bottom: 1px solid #EDEFF2;
background-color: #FFF;
}
.email-body_inner {
width: 570px;
margin: 0 auto;
padding: 0;
}
.email-footer {
width: 570px;
margin: 0 auto;
padding: 0;
text-align: center;
}
.email-footer p {
color: #AEAEAE;
}
.email-footer img {
width: 30px;
}
.body-action {
width: 100%;
margin: 30px auto;
padding: 0;
text-align: center;
}
.body-sub {
margin-top: 25px;
padding-top: 25px;
border-top: 1px solid #EDEFF2;
}
.content-cell {
padding: 35px;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
.border-rounded {
border: 1px solid #EDEFF2;
border-radius: 3px;
padding: 12px;
}
/* Type ------------------------------ */
h1 {
margin-top: 0;
color: #2F3133;
font-size: 36px;
font-weight: bold;
text-align: left;
}
h2 {
margin-top: 0;
color: #2F3133;
font-size: 16px;
font-weight: bold;
text-align: left;
}
h3 {
margin-top: 0;
color: #2F3133;
font-size: 14px;
font-weight: bold;
text-align: left;
}
p {
margin-top: 0;
color: #74787E;
font-size: 16px;
line-height: 1.5em;
text-align: left;
}
p.compressed {
margin: 0;
}
p.sub {
font-size: 12px;
}
p.center {
text-align: center;
}
/* Buttons ------------------------------ */
.button {
display: inline-block;
width: 200px;
background-color: #3869D4;
border-radius: 3px;
color: #ffffff;
font-size: 15px;
line-height: 45px;
text-align: center;
text-decoration: none;
-webkit-text-size-adjust: none;
mso-hide: all;
}
.button--green {
background-color: {{ $theme_greens }};
}
.button--red {
background-color: {{ $theme_reds }};
}
.button--blue {
background-color: {{ $theme_blues }};
}
.button--yellow {
background-color: {{ $theme_yellows }};
}
/*Media Queries ------------------------------ */
@media only screen and (max-width: 600px) {
.email-body_inner,
.email-footer {
width: 100% !important;
}
}
@media only screen and (max-width: 500px) {
.button {
width: 100% !important;
}
}
</style>
</head> </head>
<body leftmargin="0" marginwidth="0" topmargin="0" marginheight="0" offset="0"> <body>
<table id="body" width="100%" border="0" cellspacing="0" cellpadding="0"> <table class="email-wrapper" width="100%" cellpadding="0" cellspacing="0">
<tr> <tr>
<td align="center" valign="top" class="body-cell"> <td align="center">
<table width="544" border="0" cellpadding="0" cellspacing="0" class="box"> <table class="email-content" width="100%" cellpadding="0" cellspacing="0">
@if($app_banner)
<tr> <tr>
<td class="header"> <td class="email-masthead">
<table width="100%" border="0" cellpadding="0" cellspacing="0"> <a class="email-masthead_name">{{ $app_name}} </a>
<tr>
<td class="header-logo">
<a href="{{ $app_domain }}"><img src="{{ $message->embedData(base64_decode($app_banner), $app_name) }}"></a>
</td>
</tr>
</table>
</td>
</tr>
@endif
<tr>
<td class="body">
@yield('content')
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="footer">{{ $app_name }}</td> <td class="email-body" width="100%">
<table class="email-body_inner" align="center" width="570" cellpadding="0" cellspacing="0">
<!-- Body content -->
<tr>
<td class="content-cell">
@yield('content')
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table class="email-footer" align="center" width="570" cellpadding="0" cellspacing="0">
<tr>
<td class="content-cell">
@if($show_support)
<p class="sub center">{!! trans('cachet.powered_by') !!}</p>
@endif
<p class="sub center">
<a href="https://cachethq.io"><img src="{{ asset('img/button-email--dark-grey.png') }}" alt="Cachet"></a>
</p>
</td>
</tr>
</table>
</td>
</tr> </tr>
</table> </table>
</td> </td>