<excludeFolder url="file://$MODULE_DIR$/vendor/caouecs/laravel-lang" />
<excludeFolder url="file://$MODULE_DIR$/vendor/clue/stream-filter" />
<excludeFolder url="file://$MODULE_DIR$/vendor/coderello/laravel-nova-lang" />
+ <excludeFolder url="file://$MODULE_DIR$/vendor/dompdf/dompdf" />
<excludeFolder url="file://$MODULE_DIR$/vendor/itsgoingd/clockwork" />
<excludeFolder url="file://$MODULE_DIR$/vendor/justinrainbow/json-schema" />
<excludeFolder url="file://$MODULE_DIR$/vendor/kriswallsmith/buzz" />
<excludeFolder url="file://$MODULE_DIR$/vendor/kub-at/php-simple-html-dom-parser" />
+ <excludeFolder url="file://$MODULE_DIR$/vendor/laravel/cashier" />
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/nova-app" />
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/scout" />
+ <excludeFolder url="file://$MODULE_DIR$/vendor/league/html-to-markdown" />
<excludeFolder url="file://$MODULE_DIR$/vendor/maatwebsite/excel" />
<excludeFolder url="file://$MODULE_DIR$/vendor/mailgun/mailgun-php" />
<excludeFolder url="file://$MODULE_DIR$/vendor/markbaker/complex" />
<excludeFolder url="file://$MODULE_DIR$/vendor/markbaker/matrix" />
<excludeFolder url="file://$MODULE_DIR$/vendor/maximebf/debugbar" />
+ <excludeFolder url="file://$MODULE_DIR$/vendor/moneyphp/money" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nyholm/psr7" />
<excludeFolder url="file://$MODULE_DIR$/vendor/paragonie/random_compat" />
<excludeFolder url="file://$MODULE_DIR$/vendor/paragonie/sodium_compat" />
+ <excludeFolder url="file://$MODULE_DIR$/vendor/phenx/php-font-lib" />
+ <excludeFolder url="file://$MODULE_DIR$/vendor/phenx/php-svg-lib" />
<excludeFolder url="file://$MODULE_DIR$/vendor/php-http/client-common" />
<excludeFolder url="file://$MODULE_DIR$/vendor/php-http/discovery" />
<excludeFolder url="file://$MODULE_DIR$/vendor/php-http/httplug" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-client" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-factory" />
<excludeFolder url="file://$MODULE_DIR$/vendor/pusher/pusher-php-server" />
+ <excludeFolder url="file://$MODULE_DIR$/vendor/sabberworm/php-css-parser" />
<excludeFolder url="file://$MODULE_DIR$/vendor/seld/jsonlint" />
<excludeFolder url="file://$MODULE_DIR$/vendor/seld/phar-utils" />
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/pdf-to-image" />
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/pdf-to-text" />
+ <excludeFolder url="file://$MODULE_DIR$/vendor/stripe/stripe-php" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/debug" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/filesystem" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/options-resolver" />
<path value="$PROJECT_DIR$/vendor/markbaker/complex" />
<path value="$PROJECT_DIR$/vendor/coderello/laravel-nova-lang" />
<path value="$PROJECT_DIR$/vendor/caouecs/laravel-lang" />
+ <path value="$PROJECT_DIR$/vendor/sabberworm/php-css-parser" />
+ <path value="$PROJECT_DIR$/vendor/moneyphp/money" />
+ <path value="$PROJECT_DIR$/vendor/dompdf/dompdf" />
+ <path value="$PROJECT_DIR$/vendor/phenx/php-font-lib" />
+ <path value="$PROJECT_DIR$/vendor/phenx/php-svg-lib" />
+ <path value="$PROJECT_DIR$/vendor/laravel/cashier" />
+ <path value="$PROJECT_DIR$/vendor/stripe/stripe-php" />
+ <path value="$PROJECT_DIR$/vendor/league/html-to-markdown" />
</include_path>
</component>
<component name="PhpInterpreters">
--- /dev/null
+<?php
+
+
+namespace App\Facades;
+
+
+use Illuminate\Support\Facades\Facade;
+use League\HTMLToMarkdown\HtmlConverter;
+
+class Html2Markdown extends Facade
+{
+
+ protected static function getFacadeAccessor()
+ {
+ return HtmlConverter::class;
+ }
+
+}
use App\FileTag;
use App\Jobs\ProcessEmailBatch;
use App\Jobs\ProcessPdfFile;
+use App\Mail\BatchMail;
use App\PdfFile;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
public function recipientsCount()
{
- return ['data' => \App\User::subscribed()->count()];
+ return ['data' => \App\User::recievesEmails()->count()];
}
/**
}
-
-
/**
* @param Request $request
- * @return \Illuminate\View\View
+ * @return string
+ * @throws \ReflectionException
*/
public function previewEmail(Request $request)
{
- return view('emails.batch', $request->toArray());
+ return (new BatchMail(
+ $request->input('content'),
+ $request->input('subject'),
+ $request->input('link')
+ ))->render();
}
use App\EmailBatch;
use App\Events\ProcessBatch;
use App\Facades\Mailgun;
+use App\Mail\BatchMail;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
public function handle()
{
/** @var Collection $users */
- $users = User::subscribed()->get();
+ $users = User::recievesEmails()->get();
$size = env('MAILGUN_CHUNK_SIZE', 200);
$chunks = $users->chunk($size);
foreach($chunks as $chunk) {
- $variables = json_encode($chunk->mapWithKeys(function(User $user) {
+ $variables = json_encode($chunk->mapWithKeys(function (User $user) {
return [$user->email => [
'id' => $user->id,
'name' => $user->name,
'file_url' => $this->batch->file->getUrlWithToken($user),
]];
- }));
+ }), JSON_THROW_ON_ERROR, 512);
+
+ $view = (new BatchMail(
+ $this->batch->content['body'],
+ $this->batch->subject,
+ ))->render();
+
- $view = view('emails.batch', [
- 'subject' => $this->batch->subject,
- 'content' => $this->batch->content['body'],
- ])->render();
$params = [
'from' => env('MAIL_FROM_NAME').' <'.env('MAIL_FROM_ADDRESS').'>',
'subject' => $this->batch->subject,
'recipient-variables' => $variables,
'html' => $view,
- 'o:tag' => [$this->batch->getTag(), env('APP_ENV'), 'batch'],
+ 'o:tag' => [$this->batch->getTag(), env('APP_ENV').'_batch'],
'o:testmode' => env('MAILGUN_TEST_MODE', 'yes'),
];
--- /dev/null
+<?php
+
+namespace App\Mail;
+
+use App\Facades\Html2Markdown;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Mail\Mailable;
+use Illuminate\Queue\SerializesModels;
+use League\HTMLToMarkdown\HtmlConverter;
+
+
+class BatchMail extends Mailable
+{
+ use Queueable, SerializesModels;
+
+ public $content;
+ public $link;
+
+ /**
+ * Create a new message instance.²
+ *
+ * @param string $content
+ * @param string $subject
+ * @param string|null $link
+ * @param HtmlConverter $converter
+ */
+ public function __construct($content, $subject, $link = null)
+ {
+ //
+ $this->content = Html2Markdown::convert($content);
+ $this->subject = $subject;
+ $this->link = $link;
+ }
+
+ /**
+ * Build the message.
+ *
+ * @return $this
+ */
+ public function build()
+ {
+ return $this->markdown('emails.batch')->with(['subject' => $this->subject]);
+ }
+}
public function toMail($notifiable)
{
return (new MailMessage)
- ->markdown('emails.notification')
->subject('Activation réussie')
->line("Votre compte à bien été activé !")
->line("Vous allez pouvoir recevoir tous les prochains numéros de *Prescription Santé : Le Quotidien*")
$this->makeJson();
$this->makeCover();
- $this->makeSearchable();
- if(!env('APP_ENV') === 'local')
- $this->shortenLinks();
+// $this->makeSearchable();
+// if(!env('APP_ENV') === 'local')
+// $this->shortenLinks();
$this->saveToCloud();
}
use App\User;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\ServiceProvider;
+use League\HTMLToMarkdown\HtmlConverter;
use Mailgun\Mailgun;
use Vaites\ApacheTika\Client;
);
});
+ $this->app->bind(HtmlConverter::class, function($app) {
+ return new HtmlConverter(['header_style'=>'atx']);
+ });
+
namespace App;
+
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
+use Illuminate\Support\Carbon;
+use Laravel\Cashier\Billable;
use Laravel\Scout\Searchable;
/**
* @property Organization $organization
* @property string $position
* @property bool $isSubscribed
+ * @property Carbon $trial_ends_at
*/
class User extends Authenticatable
{
use Notifiable;
use Searchable;
+ use Billable;
/**
* The attributes that are mass assignable.
'email_verified_at' => 'datetime',
'subscription_active' => 'bool',
'reg_complete' => 'bool',
+ 'trial_until' => 'datetime',
+ 'active_until' => 'datetime',
];
+
public function toSearchableArray()
{
return [
];
}
+ public int $trialDurationDays = 14;
+
/**
* @return BelongsTo
*/
return false;
}
+ /**
+ * @return HasMany
+ */
public function loginTokens()
{
return $this->hasMany(LoginToken::class);
}
+ /**
+ * @param $route
+ * @param array $params
+ * @param null $validUntil
+ * @param bool $absolute
+ * @return string
+ */
public function routeWithToken($route, $params = [], $validUntil = null, $absolute = true)
{
$token = [ 'token' => LoginToken::generateToken($this, $validUntil)->token ];
/**
* @param Builder $builder
*/
- public function scopeSubscribed(Builder $builder)
+ public function scopeRecievesEmails(Builder $builder): void
+ {
+ $builder->whereHas('organization', fn($builder) => $builder->subscribed())
+ ->orWhereDate('trial_ends_at', '>', now());
+ }
+
+ /**
+ * Starts trial period
+ */
+ public function startTrial(): void
{
- $builder->whereHas('organization', function(Builder $builder) {
- $builder->subscribed();
- });
+ $this->trial_ends_at = now()->addDays($this->trialDurationDays);
}
+
/**
* @return string|null
*/
}
+ /**
+ * @return bool
+ */
+ public function getIsIndividualAttribute(): bool
+ {
+ return $this->organization === null;
+ }
"itsgoingd/clockwork": "^4.1",
"kriswallsmith/buzz": "^1.1",
"kub-at/php-simple-html-dom-parser": "^1.9",
+ "laravel/cashier": "^11.2",
"laravel/framework": "^7.0",
"laravel/horizon": "^4.2",
"laravel/nova": "~3.0",
"laravel/scout": "^8.0",
"laravel/tinker": "^2.0",
+ "league/html-to-markdown": "^4.9",
"mailgun/mailgun-php": "^3.0",
"nyholm/psr7": "^1.2",
"pusher/pusher-php-server": "~4.0",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "5c7ff2cb508ab34b1acf5cdff253d1c0",
+ "content-hash": "dd380938d2af9ce010a6b0c03d32998e",
"packages": [
{
"name": "algolia/algoliasearch-client-php",
],
"time": "2019-10-30T14:39:59+00:00"
},
+ {
+ "name": "dompdf/dompdf",
+ "version": "v0.8.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dompdf/dompdf.git",
+ "reference": "6782abfc090b132134cd6cea0ec6d76f0fce2c56"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dompdf/dompdf/zipball/6782abfc090b132134cd6cea0ec6d76f0fce2c56",
+ "reference": "6782abfc090b132134cd6cea0ec6d76f0fce2c56",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "phenx/php-font-lib": "^0.5.1",
+ "phenx/php-svg-lib": "^0.3.3",
+ "php": "^7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "suggest": {
+ "ext-gd": "Needed to process images",
+ "ext-gmagick": "Improves image processing performance",
+ "ext-imagick": "Improves image processing performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-develop": "0.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dompdf\\": "src/"
+ },
+ "classmap": [
+ "lib/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Ménager",
+ "email": "fabien.menager@gmail.com"
+ },
+ {
+ "name": "Brian Sweeney",
+ "email": "eclecticgeek@gmail.com"
+ },
+ {
+ "name": "Gabriel Bull",
+ "email": "me@gabrielbull.com"
+ }
+ ],
+ "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
+ "homepage": "https://github.com/dompdf/dompdf",
+ "time": "2020-02-20T03:52:51+00:00"
+ },
{
"name": "dragonmantank/cron-expression",
"version": "v2.3.0",
],
"time": "2019-10-25T12:34:43+00:00"
},
+ {
+ "name": "laravel/cashier",
+ "version": "v11.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/cashier.git",
+ "reference": "329f4e0bd93bef837e9291b2d09915009bda578f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/cashier/zipball/329f4e0bd93bef837e9291b2d09915009bda578f",
+ "reference": "329f4e0bd93bef837e9291b2d09915009bda578f",
+ "shasum": ""
+ },
+ "require": {
+ "dompdf/dompdf": "^0.8.0",
+ "ext-json": "*",
+ "illuminate/contracts": "^6.0|^7.0",
+ "illuminate/database": "^6.0|^7.0",
+ "illuminate/http": "^6.0|^7.0",
+ "illuminate/log": "^6.0|^7.0",
+ "illuminate/notifications": "^6.0|^7.0",
+ "illuminate/routing": "^6.0|^7.0",
+ "illuminate/support": "^6.0|^7.0",
+ "illuminate/view": "^6.0|^7.0",
+ "moneyphp/money": "^3.2",
+ "nesbot/carbon": "^2.0",
+ "php": "^7.2",
+ "stripe/stripe-php": "^7.0",
+ "symfony/http-kernel": "^4.3|^5.0",
+ "symfony/intl": "^4.3|^5.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.0",
+ "orchestra/testbench": "^4.0|^5.0",
+ "phpunit/phpunit": "^8.0|^9.0"
+ },
+ "suggest": {
+ "ext-intl": "Allows for more locales besides the default \"en\" when formatting money values."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "11.x-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Laravel\\Cashier\\CashierServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Cashier\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylorotwell@gmail.com"
+ }
+ ],
+ "description": "Laravel Cashier provides an expressive, fluent interface to Stripe's subscription billing services.",
+ "keywords": [
+ "billing",
+ "laravel",
+ "stripe"
+ ],
+ "time": "2020-04-28T15:44:32+00:00"
+ },
{
"name": "laravel/framework",
"version": "v7.4.0",
"homepage": "http://glide.thephpleague.com",
"time": "2020-03-05T12:38:10+00:00"
},
+ {
+ "name": "league/html-to-markdown",
+ "version": "4.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/html-to-markdown.git",
+ "reference": "1dcd0f85de786f46a7f224a27cc3d709ddd2a68c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/1dcd0f85de786f46a7f224a27cc3d709ddd2a68c",
+ "reference": "1dcd0f85de786f46a7f224a27cc3d709ddd2a68c",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-xml": "*",
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "mikehaertl/php-shellcommand": "~1.1.0",
+ "phpunit/phpunit": "^4.8|^5.7",
+ "scrutinizer/ocular": "~1.1"
+ },
+ "bin": [
+ "bin/html-to-markdown"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.10-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\HTMLToMarkdown\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Nick Cernis",
+ "email": "nick@cern.is",
+ "homepage": "http://modernnerd.net",
+ "role": "Original Author"
+ }
+ ],
+ "description": "An HTML-to-markdown conversion helper for PHP",
+ "homepage": "https://github.com/thephpleague/html-to-markdown",
+ "keywords": [
+ "html",
+ "markdown"
+ ],
+ "time": "2019-12-28T01:32:28+00:00"
+ },
{
"name": "league/oauth1-client",
"version": "1.7.0",
],
"time": "2020-01-02T07:15:54+00:00"
},
+ {
+ "name": "moneyphp/money",
+ "version": "v3.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/moneyphp/money.git",
+ "reference": "122664c2621a95180a13c1ac81fea1d2ef20781e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/moneyphp/money/zipball/122664c2621a95180a13c1ac81fea1d2ef20781e",
+ "reference": "122664c2621a95180a13c1ac81fea1d2ef20781e",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "cache/taggable-cache": "^0.4.0",
+ "doctrine/instantiator": "^1.0.5",
+ "ext-bcmath": "*",
+ "ext-gmp": "*",
+ "ext-intl": "*",
+ "florianv/exchanger": "^1.0",
+ "florianv/swap": "^3.0",
+ "friends-of-phpspec/phpspec-code-coverage": "^3.1.1 || ^4.3",
+ "moneyphp/iso-currencies": "^3.2.1",
+ "php-http/message": "^1.4",
+ "php-http/mock-client": "^1.0.0",
+ "phpspec/phpspec": "^3.4.3",
+ "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.18 || ^8.5",
+ "psr/cache": "^1.0",
+ "symfony/phpunit-bridge": "^4"
+ },
+ "suggest": {
+ "ext-bcmath": "Calculate without integer limits",
+ "ext-gmp": "Calculate without integer limits",
+ "ext-intl": "Format Money objects with intl",
+ "florianv/exchanger": "Exchange rates library for PHP",
+ "florianv/swap": "Exchange rates library for PHP",
+ "psr/cache-implementation": "Used for Currency caching"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Money\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mathias Verraes",
+ "email": "mathias@verraes.net",
+ "homepage": "http://verraes.net"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com"
+ },
+ {
+ "name": "Frederik Bosch",
+ "email": "f.bosch@genkgo.nl"
+ }
+ ],
+ "description": "PHP implementation of Fowler's Money pattern",
+ "homepage": "http://moneyphp.org",
+ "keywords": [
+ "Value Object",
+ "money",
+ "vo"
+ ],
+ "time": "2020-03-18T17:49:59+00:00"
+ },
{
"name": "monolog/monolog",
"version": "2.0.2",
],
"time": "2020-03-20T21:48:09+00:00"
},
+ {
+ "name": "phenx/php-font-lib",
+ "version": "0.5.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PhenX/php-font-lib.git",
+ "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/ca6ad461f032145fff5971b5985e5af9e7fa88d8",
+ "reference": "ca6ad461f032145fff5971b5985e5af9e7fa88d8",
+ "shasum": ""
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5 || ^6 || ^7"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "FontLib\\": "src/FontLib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Ménager",
+ "email": "fabien.menager@gmail.com"
+ }
+ ],
+ "description": "A library to read, parse, export and make subsets of different types of font files.",
+ "homepage": "https://github.com/PhenX/php-font-lib",
+ "time": "2020-03-08T15:31:32+00:00"
+ },
+ {
+ "name": "phenx/php-svg-lib",
+ "version": "v0.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PhenX/php-svg-lib.git",
+ "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/5fa61b65e612ce1ae15f69b3d223cb14ecc60e32",
+ "reference": "5fa61b65e612ce1ae15f69b3d223cb14ecc60e32",
+ "shasum": ""
+ },
+ "require": {
+ "sabberworm/php-css-parser": "^8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^5.5|^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Svg\\": "src/Svg"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Ménager",
+ "email": "fabien.menager@gmail.com"
+ }
+ ],
+ "description": "A library to read, parse and export to PDF SVG files.",
+ "homepage": "https://github.com/PhenX/php-svg-lib",
+ "time": "2019-09-11T20:02:13+00:00"
+ },
{
"name": "php-http/client-common",
"version": "2.1.0",
],
"time": "2020-03-29T20:13:32+00:00"
},
+ {
+ "name": "sabberworm/php-css-parser",
+ "version": "8.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sabberworm/PHP-CSS-Parser.git",
+ "reference": "91bcc3e3fdb7386c9a2e0e0aa09ca75cc43f121f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/91bcc3e3fdb7386c9a2e0e0aa09ca75cc43f121f",
+ "reference": "91bcc3e3fdb7386c9a2e0e0aa09ca75cc43f121f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "codacy/coverage": "^1.4",
+ "phpunit/phpunit": "~4.8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Sabberworm\\CSS": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Raphael Schweikert"
+ }
+ ],
+ "description": "Parser for CSS Files written in PHP",
+ "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser",
+ "keywords": [
+ "css",
+ "parser",
+ "stylesheet"
+ ],
+ "time": "2019-02-22T07:42:52+00:00"
+ },
{
"name": "spatie/laravel-activitylog",
"version": "3.14.1",
],
"time": "2020-03-11T17:11:25+00:00"
},
+ {
+ "name": "stripe/stripe-php",
+ "version": "v7.29.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/stripe/stripe-php.git",
+ "reference": "657c8ec888d8bcb58dd8f4fa227809108b406a44"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/stripe/stripe-php/zipball/657c8ec888d8bcb58dd8f4fa227809108b406a44",
+ "reference": "657c8ec888d8bcb58dd8f4fa227809108b406a44",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "php": ">=5.6.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "2.16.1",
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5.7",
+ "squizlabs/php_codesniffer": "^3.3",
+ "symfony/process": "~3.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Stripe\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Stripe and contributors",
+ "homepage": "https://github.com/stripe/stripe-php/contributors"
+ }
+ ],
+ "description": "Stripe PHP Library",
+ "homepage": "https://stripe.com/",
+ "keywords": [
+ "api",
+ "payment processing",
+ "stripe"
+ ],
+ "time": "2020-04-22T19:35:10+00:00"
+ },
{
"name": "swiftmailer/swiftmailer",
"version": "v6.2.3",
],
'max_items' => 10,
],
+ 'home_other_features' => [
+ 'name' => 'Home other features',
+ 'bucketables' => [
+ [
+ 'module' => 'PdfFiles',
+ 'name' => 'Guides',
+ 'scopes' => ['published' => true],
+ ],
+ ],
+ 'max_items' => 5,
+ ],
],
],
],
"version": "6.12.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz",
"integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==",
+ "dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"ajv-keywords": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
- "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
+ "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==",
+ "dev": true
},
"algoliasearch": {
"version": "4.1.0",
"big.js": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
},
"binary-extensions": {
"version": "1.13.1",
"emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
},
"encodeurl": {
"version": "1.0.2",
"fast-deep-equal": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
- "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
+ "dev": true
},
"fast-glob": {
"version": "2.2.7",
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
},
"fastparse": {
"version": "1.1.2",
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
},
"json3": {
"version": "3.3.3",
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
"integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
+ "dev": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
"requires": {
"minimist": "^1.2.0"
}
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
},
"minipass": {
"version": "3.1.1",
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
},
"pusher-js": {
"version": "5.1.1",
"version": "2.6.5",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz",
"integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==",
+ "dev": true,
"requires": {
"ajv": "^6.12.0",
"ajv-keywords": "^3.4.1"
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
"requires": {
"punycode": "^2.1.0"
}
"resolved": "https://registry.npmjs.org/vue-upload-component/-/vue-upload-component-2.8.20.tgz",
"integrity": "sha512-zrnJvULu4rnZe36Ib2/AZrI/h/mmNbUJZ+acZD652PyumzbvjCOQeYHe00sGifTdYjzzS66CwhTT+ubZ2D0Aow=="
},
- "vuetify-loader": {
- "version": "file:vuetify-loader",
- "dependencies": {
- "file-loader": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz",
- "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==",
- "requires": {
- "loader-utils": "^1.2.3",
- "schema-utils": "^2.5.0"
- }
- }
- }
- },
"watchpack": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz",
"vue-material": "^1.0.0-beta-11",
"vue-simple-progress": "^1.1.1",
"vue-stepper": "^1.4.2",
- "vue-upload-component": "^2.8.20",
- "vuetify-loader": "file:vuetify-loader"
+ "vue-upload-component": "^2.8.20"
}
}
<script>
import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
+
export default {
components: {
},
methods: {
-
},
mounted() {
this.$emit('can-continue', {value: true});
-@extends('emails.layout')
+@component('mail::message')
-@section('content')
+<img src="{{ Asset::public('logo.jpg') }}" alt="PSQ Logo" width="570" style="max-width: 100%; margin-bottom: 20px;" >
+<br>
- <img src="{{ Asset::public('logo.png') }}" alt="PSQ Logo" class="w-100 d-block mx-auto mb-3 " style="max-width: 400px;">
- <h1 class="text-center">L’ÉDITION DU JOUR</h1>
- <h2 class="text-center">{{$subject}}</h2>
+# L’ÉDITION DU JOUR
- {!! $content !!}
+## {{$subject}}
- <a
- href="{{ $link ?? '%recipient.file_url%' }}"
- target="_blank"
- class="btn btn-success mx-auto my-3 d-block"
- style="width: fit-content;"
- >
- <i class="fas fa-external-link-alt"></i> Cliquez ici pour lire !
- </a>
+{!! $content !!}
+
+
+@component('mail::button', ['url' => $link ?? '%recipient.file_url%', 'color' => 'success'])
+Cliquez ici pour lire !
+@endcomponent
+
+
+@endcomponent
-@endsection
-<!doctype html>
-<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<style>
+@media only screen and (max-width: 600px) {
+.inner-body {
+width: 100% !important;
+}
+.footer {
+width: 100% !important;
+}
+}
+@media only screen and (max-width: 500px) {
+.button {
+width: 100% !important;
+}
+}
+</style>
- <title>Email</title>
+<table class="wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation">
+<tr>
+<td align="center">
+<table class="content" width="100%" cellpadding="0" cellspacing="0" role="presentation">
+{{ $header ?? '' }}
- <!-- Fonts -->
- <link rel="dns-prefetch" href="//fonts.gstatic.com">
- <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
+<!-- Email Body -->
+<tr>
+<td class="body" width="100%" cellpadding="0" cellspacing="0">
+<table class="inner-body" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
+<!-- Body content -->
+<tr>
+<td class="content-cell">
+{{ $slot }}
-</head>
-<body>
- <div id="app">
- <main class="py-4 container">
- @yield('content')
- </main>
- </div>
+{{ $subcopy ?? '' }}
+</td>
+</tr>
+</table>
+</td>
+</tr>
+
+{{ $footer ?? '' }}
+</table>
+</td>
+</tr>
+</table>
</body>
</html>
+++ /dev/null
-@component('mail::message')
-{{-- Greeting --}}
-@if (! empty($greeting))
-# {{ $greeting }}
-@else
-@if ($level === 'error')
-# @lang('Whoops!')
-@else
-# @lang('Cher abonné,')
-@endif
-@endif
-
-{{-- Intro Lines --}}
-@foreach ($introLines as $line)
-{{ $line }}
-
-@endforeach
-
-{{-- Action Button --}}
-@isset($actionText)
-<?php
- switch ($level) {
- case 'success':
- case 'error':
- $color = $level;
- break;
- default:
- $color = 'primary';
- }
-?>
-@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('Cordialement'),<br>
-{{ config('app.name') }}
-@endif
-
-{{-- Subcopy --}}
-@isset($actionText)
-@slot('subcopy')
-@lang(
- "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\n".
- 'into your web browser: [:displayableActionUrl](:actionURL)',
- [
- 'actionText' => $actionText,
- 'actionURL' => $actionUrl,
- 'displayableActionUrl' => $displayableActionUrl,
- ]
-)
-@endslot
-@endisset
-@endcomponent
--- /dev/null
+<table class="action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
+<tr>
+<td align="center">
+<table width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
+<tr>
+<td align="center">
+<table border="0" cellpadding="0" cellspacing="0" role="presentation">
+<tr>
+<td>
+<a href="{{ $url }}" class="button button-{{ $color ?? 'primary' }}" target="_blank" rel="noopener">{{ $slot }}</a>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
--- /dev/null
+<tr>
+<td>
+<table class="footer" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
+<tr>
+<td class="content-cell" align="center">
+{{ Illuminate\Mail\Markdown::parse($slot) }}
+</td>
+</tr>
+</table>
+</td>
+</tr>
--- /dev/null
+<tr>
+<td class="header">
+<a href="{{ $url }}" style="display: inline-block;">
+@if (trim($slot) === 'Laravel')
+<img src="https://laravel.com/img/notification-logo.png" class="logo" alt="Laravel Logo">
+@else
+{{ $slot }}
+@endif
+</a>
+</td>
+</tr>
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+</head>
+<body>
+<style>
+@media only screen and (max-width: 600px) {
+.inner-body {
+width: 100% !important;
+}
+
+.footer {
+width: 100% !important;
+}
+}
+
+@media only screen and (max-width: 500px) {
+.button {
+width: 100% !important;
+}
+}
+</style>
+
+<table class="wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation">
+<tr>
+<td align="center">
+<table class="content" width="100%" cellpadding="0" cellspacing="0" role="presentation">
+{{ $header ?? '' }}
+
+<!-- Email Body -->
+<tr>
+<td class="body" width="100%" cellpadding="0" cellspacing="0">
+<table class="inner-body" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
+<!-- Body content -->
+<tr>
+<td class="content-cell">
+{{ Illuminate\Mail\Markdown::parse($slot) }}
+
+{{ $subcopy ?? '' }}
+</td>
+</tr>
+</table>
+</td>
+</tr>
+
+{{ $footer ?? '' }}
+</table>
+</td>
+</tr>
+</table>
+</body>
+</html>
--- /dev/null
+@component('mail::layout')
+
+{{-- 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
--- /dev/null
+<table class="panel" width="100%" cellpadding="0" cellspacing="0" role="presentation">
+<tr>
+<td class="panel-content">
+<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
+<tr>
+<td class="panel-item">
+{{ Illuminate\Mail\Markdown::parse($slot) }}
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+
--- /dev/null
+<table class="subcopy" width="100%" cellpadding="0" cellspacing="0" role="presentation">
+<tr>
+<td>
+{{ Illuminate\Mail\Markdown::parse($slot) }}
+</td>
+</tr>
+</table>
--- /dev/null
+<div class="table">
+{{ Illuminate\Mail\Markdown::parse($slot) }}
+</div>
--- /dev/null
+/* Base */
+
+body,
+body *:not(html):not(style):not(br):not(tr):not(code) {
+ box-sizing: border-box;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,
+ 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
+ position: relative;
+}
+
+body {
+ -webkit-text-size-adjust: none;
+ background-color: #ffffff;
+ color: #718096;
+ height: 100%;
+ line-height: 1.4;
+ margin: 0;
+ padding: 0;
+ width: 100% !important;
+}
+
+p,
+ul,
+ol,
+blockquote {
+ line-height: 1.4;
+ text-align: left;
+}
+
+a {
+ color: #3869d4;
+}
+
+a img {
+ border: none;
+}
+
+/* Typography */
+
+h1 {
+ color: #3d4852;
+ font-size: 18px;
+ font-weight: bold;
+ margin-top: 0;
+ text-align: left;
+}
+
+h2 {
+ font-size: 16px;
+ font-weight: bold;
+ margin-top: 0;
+ text-align: left;
+}
+
+h3 {
+ font-size: 14px;
+ font-weight: bold;
+ margin-top: 0;
+ text-align: left;
+}
+
+p {
+ font-size: 16px;
+ line-height: 1.5em;
+ margin-top: 0;
+ text-align: left;
+}
+
+p.sub {
+ font-size: 12px;
+}
+
+img {
+ max-width: 100%;
+}
+
+/* Layout */
+
+.wrapper {
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 100%;
+ background-color: #edf2f7;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+}
+
+.content {
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 100%;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+}
+
+/* Header */
+
+.header {
+ padding: 25px 0;
+ text-align: center;
+}
+
+.header a {
+ color: #3d4852;
+ font-size: 19px;
+ font-weight: bold;
+ text-decoration: none;
+}
+
+/* Logo */
+
+.logo {
+ height: 75px;
+ width: 75px;
+}
+
+/* Body */
+
+.body {
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 100%;
+ background-color: #edf2f7;
+ border-bottom: 1px solid #edf2f7;
+ border-top: 1px solid #edf2f7;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+}
+
+.inner-body {
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 570px;
+ background-color: #ffffff;
+ border-color: #e8e5ef;
+ border-radius: 2px;
+ border-width: 1px;
+ box-shadow: 0 2px 0 rgba(0, 0, 150, 0.025), 2px 4px 0 rgba(0, 0, 150, 0.015);
+ margin: 0 auto;
+ padding: 0;
+ width: 570px;
+}
+
+/* Subcopy */
+
+.subcopy {
+ border-top: 1px solid #e8e5ef;
+ margin-top: 25px;
+ padding-top: 25px;
+}
+
+.subcopy p {
+ font-size: 14px;
+}
+
+/* Footer */
+
+.footer {
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 570px;
+ margin: 0 auto;
+ padding: 0;
+ text-align: center;
+ width: 570px;
+}
+
+.footer p {
+ color: #b0adc5;
+ font-size: 12px;
+ text-align: center;
+}
+
+.footer a {
+ color: #b0adc5;
+ text-decoration: underline;
+}
+
+/* Tables */
+
+.table table {
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 100%;
+ margin: 30px auto;
+ width: 100%;
+}
+
+.table th {
+ border-bottom: 1px solid #edeff2;
+ margin: 0;
+ padding-bottom: 8px;
+}
+
+.table td {
+ color: #74787e;
+ font-size: 15px;
+ line-height: 18px;
+ margin: 0;
+ padding: 10px 0;
+}
+
+.content-cell {
+ max-width: 100vw;
+ padding: 32px;
+}
+
+/* Buttons */
+
+.action {
+ -premailer-cellpadding: 0;
+ -premailer-cellspacing: 0;
+ -premailer-width: 100%;
+ margin: 30px auto;
+ padding: 0;
+ text-align: center;
+ width: 100%;
+}
+
+.button {
+ -webkit-text-size-adjust: none;
+ border-radius: 4px;
+ color: #fff;
+ display: inline-block;
+ overflow: hidden;
+ text-decoration: none;
+}
+
+.button-blue,
+.button-primary {
+ background-color: #2d3748;
+ border-bottom: 8px solid #2d3748;
+ border-left: 18px solid #2d3748;
+ border-right: 18px solid #2d3748;
+ border-top: 8px solid #2d3748;
+}
+
+.button-green,
+.button-success {
+ background-color: #48bb78;
+ border-bottom: 8px solid #48bb78;
+ border-left: 18px solid #48bb78;
+ border-right: 18px solid #48bb78;
+ border-top: 8px solid #48bb78;
+}
+
+.button-red,
+.button-error {
+ background-color: #e53e3e;
+ border-bottom: 8px solid #e53e3e;
+ border-left: 18px solid #e53e3e;
+ border-right: 18px solid #e53e3e;
+ border-top: 8px solid #e53e3e;
+}
+
+/* Panels */
+
+.panel {
+ border-left: #2d3748 solid 4px;
+ margin: 21px 0;
+}
+
+.panel-content {
+ background-color: #edf2f7;
+ color: #718096;
+ padding: 16px;
+}
+
+.panel-content p {
+ color: #718096;
+}
+
+.panel-item {
+ padding: 0;
+}
+
+.panel-item p:last-of-type {
+ margin-bottom: 0;
+ padding-bottom: 0;
+}
+
+
+
--- /dev/null
+{{ $slot }}: {{ $url }}
--- /dev/null
+{{ $slot }}
--- /dev/null
+[{{ $slot }}]({{ $url }})
--- /dev/null
+{!! strip_tags($header) !!}
+
+{!! strip_tags($slot) !!}
+@isset($subcopy)
+
+{!! strip_tags($subcopy) !!}
+@endisset
+
+{!! strip_tags($footer) !!}
--- /dev/null
+@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
--- /dev/null
+{{ $slot }}
--- /dev/null
+{{ $slot }}
--- /dev/null
+{{ $slot }}
--- /dev/null
+@component('mail::message')
+{{-- Greeting --}}
+@if (! empty($greeting))
+# {{ $greeting }}
+@else
+@if ($level === 'error')
+# @lang('Whoops!')
+@else
+# @lang('Cher abonné,')
+@endif
+@endif
+
+{{-- Intro Lines --}}
+@foreach ($introLines as $line)
+{{ $line }}
+
+@endforeach
+
+{{-- Action Button --}}
+@isset($actionText)
+<?php
+ switch ($level) {
+ case 'success':
+ case 'error':
+ $color = $level;
+ break;
+ default:
+ $color = 'primary';
+ }
+?>
+@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('Cordialement'),<br>
+{{ config('app.name') }}
+@endif
+
+{{-- Subcopy --}}
+@isset($actionText)
+@slot('subcopy')
+@lang(
+ "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\n".
+ 'into your web browser: [:displayableActionUrl](:actionURL)',
+ [
+ 'actionText' => $actionText,
+ 'actionURL' => $actionUrl,
+ 'displayableActionUrl' => $displayableActionUrl,
+ ]
+)
+@endslot
+@endisset
+@endcomponent