Initial pass at Laravel 7 support #673

This commit is contained in:
Nabeel Shahzad
2020-05-15 18:20:16 -04:00
parent 885e1d599e
commit 6078163d75
27 changed files with 1659 additions and 1281 deletions

View File

@@ -6,7 +6,7 @@ language: php
php:
- '7.4'
- '7.3'
- '7.2'
# - '7.2'
#env:
# - DB=mysql

View File

@@ -21,9 +21,9 @@
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<listeners>
<!--<listeners>
<listener class="NunoMaduro\Collision\Adapters\Phpunit\Listener"/>
</listeners>
</listeners>-->
<php>
<ini name="error_reporting" value="E_ALL"/>
<ini name="display_errors" value="On"/>

View File

@@ -14,7 +14,7 @@ A full distribution, with all of the composer dependencies, is available at this
## Requirements
- PHP 7.1+, extensions:
- PHP 7.3+, extensions:
- cURL
- JSON
- mbstring

View File

@@ -93,12 +93,12 @@ abstract class Command extends \Illuminate\Console\Command
*/
public function runCommand($cmd, $return = false, $verbose = true): string
{
if (\is_array($cmd)) {
$cmd = implode(' ', $cmd);
if (!\is_array($cmd)) {
$cmd = explode(' ', $cmd);
}
if ($verbose) {
$this->info('Running "'.$cmd.'"');
$this->info('Running "'.implode(' ', $cmd).'"');
}
$val = '';

View File

@@ -2,10 +2,12 @@
namespace App\Contracts;
use Illuminate\Http\Resources\Json\JsonResource;
/**
* Base class for a resource/response
*/
class Resource extends \Illuminate\Http\Resources\Json\Resource
class Resource extends JsonResource
{
/**
* Iterate through the list of $fields and check if they're a "Unit"

View File

@@ -3,13 +3,13 @@
namespace App\Exceptions\Converters;
use App\Exceptions\AbstractHttpException;
use Exception;
use Throwable;
class GenericExceptionAbstract extends AbstractHttpException
{
private $exception;
public function __construct(Exception $exception)
public function __construct(Throwable $exception)
{
$this->exception = $exception;
parent::__construct(

View File

@@ -19,6 +19,7 @@ use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpException as SymfonyHttpException;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Throwable;
use Whoops\Handler\HandlerInterface;
/**
@@ -43,11 +44,11 @@ class Handler extends ExceptionHandler
* Render an exception into an HTTP response.
*
* @param Request $request
* @param Exception $exception
* @param \Throwable $exception
*
* @return mixed
*/
public function render($request, Exception $exception)
public function render($request, Throwable $exception)
{
if ($request->is('api/*')) {
return $this->handleApiError($request, $exception);
@@ -65,11 +66,11 @@ class Handler extends ExceptionHandler
* Handle errors in the API
*
* @param $request
* @param \Exception $exception
* @param \Throwable $exception
*
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response
*/
private function handleApiError($request, Exception $exception)
private function handleApiError($request, Throwable $exception)
{
Log::error('API Error', $exception->getTrace());

View File

@@ -2,7 +2,7 @@
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\Resource;
use App\Contracts\Resource;
/**
* @mixin \App\Models\SimBrief

View File

@@ -14,28 +14,27 @@
"ext-simplexml": "*",
"ext-bcmath": "*",
"ext-pdo": "*",
"composer/composer": "~1.8.0",
"composer/composer": "~1.0",
"composer/installers": "~1.0",
"laravel/framework": "~6.0",
"laravel/framework": "~7.0",
"akaunting/money": "^1.0",
"anhskohbo/no-captcha": "^3.0",
"appstract/laravel-opcache": "^2.0",
"appstract/laravel-opcache": "^4.0",
"arrilot/laravel-widgets": "~3.13.0",
"codedge/laravel-selfupdater": "~2.5.1",
"codedge/laravel-selfupdater": "~3.0.0",
"doctrine/dbal": "~2.9.2",
"elcobvg/laravel-opcache": "~0.4",
"facade/ignition": "^1.6",
"facade/ignition": "^2.0",
"fideloper/proxy": "^4.3",
"guzzlehttp/guzzle": "~6.3.3",
"guzzlehttp/guzzle": "~6.5",
"hashids/hashids": "^2.0.0",
"igaster/laravel-theme": "^2.0",
"intervention/image": "2.4.*",
"irazasyed/laravel-gamp": "^1.4",
"irazasyed/laravel-gamp": "^1.6",
"jmikola/geojson": "1.0.*",
"joshbrw/laravel-module-installer": "0.1.*",
"laracasts/flash": "^3.0",
"laravel/helpers": "^1.0",
"laravelcollective/html": "~6.0.0",
"laracasts/flash": "^3.1",
"laravel/helpers": "^1.2",
"laravelcollective/html": "~6.1.0",
"layershifter/tld-extract": "^2.0",
"league/csv": "9.2.*",
"league/geotools": "0.8.*",
@@ -43,35 +42,36 @@
"markrogoyski/math-php": "^0.38.0",
"myclabs/deep-copy": "~1.9.0",
"nabeel/vacentral": "~2.0",
"nwidart/laravel-modules": "^6.0",
"nwidart/laravel-modules": "^7.0",
"php-units-of-measure/php-units-of-measure": "~2.1.0",
"phpvms/sample-module": "^1.0",
"pragmarx/version": "0.2.*",
"pragmarx/version": "^1.2.2",
"prettus/l5-repository": "~2.6.0",
"santigarcor/laratrust": "~5.2.0",
"sebastiaanluca/laravel-helpers": "~4.0",
"santigarcor/laratrust": "~6.0",
"sebastiaanluca/laravel-helpers": "~5.0",
"semver/semver": "~1.1.0",
"spatie/laravel-backup": "~6.3",
"spatie/laravel-backup": "~6.9.0",
"spatie/valuestore": "~1.2.3",
"symfony/polyfill-iconv": "~1.12",
"symfony/polyfill-iconv": "~1.17.0",
"theiconic/php-ga-measurement-protocol": "2.7.*",
"tivie/php-os-detector": "~1.1.0",
"vlucas/phpdotenv": "v3.6.0",
"vlucas/phpdotenv": "v4.0",
"webpatser/laravel-uuid": "~3.0",
"oomphinc/composer-installers-extender": "^1.1"
"oomphinc/composer-installers-extender": "^1.1",
"laravel/ui": "^2.0"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^3.0",
"barryvdh/laravel-ide-helper": "^2.6",
"bpocallaghan/generators": "5.0.1",
"codedungeon/phpunit-result-printer": "^0.13.0",
"bpocallaghan/generators": "~6.0",
"filp/whoops": "~2.0",
"fzaninotto/faker": "~1.9.0",
"friendsofphp/php-cs-fixer": "^2.16",
"mockery/mockery": "0.9.*",
"nunomaduro/collision": "^3.0",
"nunomaduro/collision": "^4.0",
"phpunit/phpunit": "~8.3",
"squizlabs/php_codesniffer": "3.*"
"squizlabs/php_codesniffer": "3.*",
"sempro/phpunit-pretty-print": "^1.2"
},
"autoload": {
"classmap": [

2300
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -17,31 +17,43 @@ return [
'driver' => env('MAIL_DRIVER', 'smtp'),
/*
|--------------------------------------------------------------------------
| SMTP Host Address
|--------------------------------------------------------------------------
|
| Here you may provide the host address of the SMTP server used by your
| applications. A default option is provided that is compatible with
| the Mailgun mail service which will provide reliable deliveries.
|
*/
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
],
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'ses' => [
'transport' => 'seapp/Contracts/Command.php:105s',
],
/*
|--------------------------------------------------------------------------
| SMTP Host Port
|--------------------------------------------------------------------------
|
| This is the SMTP port used by your application to deliver e-mails to
| users of the application. Like the host we have set this value to
| stay compatible with the Mailgun e-mail application by default.
|
*/
'mailgun' => [
'transport' => 'mailgun',
],
'port' => env('MAIL_PORT', 587),
'postmark' => [
'transport' => 'postmark',
],
'sendmail' => [
'transport' => 'sendmail',
'path' => '/usr/sbin/sendmail -bs',
],
'log' => [
'transport' => 'log',
'channel' => env('MAIL_LOG_CHANNEL'),
],
'array' => [
'transport' => 'array',
],
],
/*
|--------------------------------------------------------------------------
@@ -59,56 +71,4 @@ return [
'address' => env('MAIL_FROM_ADDRESS', 'no-reply@phpvms.net'),
],
/*
|--------------------------------------------------------------------------
| E-Mail Encryption Protocol
|--------------------------------------------------------------------------
|
| Here you may specify the encryption protocol that should be used when
| the application send e-mail messages. A sensible default using the
| transport layer security protocol should provide great security.
|
*/
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
/*
|--------------------------------------------------------------------------
| SMTP Server Username
|--------------------------------------------------------------------------
|
| If your SMTP server requires a username for authentication, you should
| set it here. This will get used to authenticate with your server on
| connection. You may also set the "password" value below this one.
|
*/
'username' => env('MAIL_USERNAME'),
/*
|--------------------------------------------------------------------------
| SMTP Server Password
|--------------------------------------------------------------------------
|
| Here you may set the password required by your SMTP server to send out
| messages from your application. This will be given to the server on
| connection so that the application will be able to send messages.
|
*/
'password' => env('MAIL_PASSWORD'),
/*
|--------------------------------------------------------------------------
| Sendmail System Path
|--------------------------------------------------------------------------
|
| When using the "sendmail" driver to send e-mails, we will need to know
| the path to where Sendmail lives on this server. A default path has
| been provided here, which will work well on most of your systems.
|
*/
'sendmail' => '/usr/sbin/sendmail -bs',
];

View File

@@ -27,6 +27,6 @@ return [
'cookie' => 'phpvms_session',
'path' => '/',
'domain' => env('SESSION_DOMAIN', null),
'secure' => false,
'secure' => env('SESSION_SECURE_COOKIE', null),
'http_only' => true,
];

View File

@@ -1,5 +1,6 @@
version_source: config
current:
label: ''
major: 7
minor: 0
patch: 0

View File

@@ -7,8 +7,8 @@
convertNoticesToExceptions="false"
convertWarningsToExceptions="false"
beStrictAboutOutputDuringTests="false"
beStrictAboutTestsThatDoNotTestAnything="false">
<!--printerClass="Codedungeon\PHPUnitPrettyResultPrinter\Printer"-->
beStrictAboutTestsThatDoNotTestAnything="false"
printerClass="Sempro\PHPUnitPrettyPrinter\PrettyPrinter">
<testsuites>
<testsuite name="Application Test Suite">
<directory suffix="Test.php">./tests</directory>
@@ -17,18 +17,19 @@
<extensions>
<extension class="Tests\Bootstrap"/>
</extensions>
<listeners>
<!--<listeners>
<listener class="NunoMaduro\Collision\Adapters\Phpunit\Listener"/>
</listeners>
</listeners>-->
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<php>
<ini name="error_reporting" value="E_ALL" />
<ini name="display_errors" value="On" />
<ini name="display_startup_errors" value="On" />
<env name="PHPUNIT_PRETTY_PRINT_PROGRESS" value="true" />
<ini name="error_reporting" value="E_ALL"/>
<ini name="display_errors" value="On"/>
<ini name="display_startup_errors" value="On"/>
<server name="APP_ENV" value="testing"/>
<server name="APP_KEY" value="base64:ve66Z5Kt/zTN3p++0zOPu854PHfZkwJE5VuoFAlzHtI="/>
<server name="APP_DEBUG" value="true"/>

View File

@@ -80,15 +80,29 @@ return [
// Overrides config/mail.php
'mail' => [
'driver' => 'mail',
'host' => '',
'port' => 587,
'driver' => 'mail', # Default is to use the mail() fn
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => '',
'port' => '',
'encryption' => '',
'username' => '',
'password' => '',
'timeout' => null,
],
'mailgun' => [
'transport' => 'mailgun',
],
'sendmail' => [
'transport' => 'sendmail',
'path' => '/usr/sbin/sendmail -bs',
],
],
'from' => [
'name' => '',
'name' => 'phpVMS No-Reply',
'address' => 'no-reply@phpvms.net',
],
'username' => '',
'password' => '',
],
// Overrides config/session.php

View File

@@ -2,7 +2,7 @@
namespace $NAMESPACE$;
use Illuminate\Http\Resources\Json\Resource;
use App\Contracts\Resource;
/**
* Class $CLASS$

View File

@@ -22,9 +22,10 @@
<div class="row" style="margin-bottom: 20px;">
<div class="col-xs-12 text-center">
<a class="small"
data-container="body"
data-toggle="popover"
data-placement="right"
style="cursor: pointer"
data-container="body"
data-toggle="popover"
data-placement="right"
data-content="{{$version_full}}">
version {{ $version }}
</a>

View File

@@ -1,19 +1,19 @@
<table class="action" align="center" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<a href="{{ $url }}" class="button button-{{ $color or 'blue' }}" target="_blank">{{ $slot }}</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<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>

View File

@@ -1,11 +1,11 @@
<tr>
<td>
<table class="footer" align="center" width="570" cellpadding="0" cellspacing="0">
<tr>
<td class="content-cell" align="center">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>
</td>
<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>

View File

@@ -1,7 +1,11 @@
<tr>
<td class="header">
<a href="{{ $url }}">
{{ $slot }}
</a>
</td>
<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>

View File

@@ -1,55 +1,54 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!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"/>
<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;
}
@media only screen and (max-width: 600px) {
.inner-body {
width: 100% !important;
}
.footer {
width: 100% !important;
}
}
.footer {
width: 100% !important;
}
}
@media only screen and (max-width: 500px) {
.button {
width: 100% !important;
}
}
@media only screen and (max-width: 500px) {
.button {
width: 100% !important;
}
}
</style>
<table class="wrapper" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<table class="content" width="100%" cellpadding="0" cellspacing="0">
{{ $header or '' }}
<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">
<!-- Body content -->
<tr>
<td class="content-cell">
{{ Illuminate\Mail\Markdown::parse($slot) }}
<!-- 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 or '' }}
</td>
</tr>
</table>
</td>
</tr>
{{ $subcopy ?? '' }}
</td>
</tr>
</table>
</td>
</tr>
{{ $footer or '' }}
</table>
</td>
</tr>
{{ $footer ?? '' }}
</table>
</td>
</tr>
</table>
</body>
</html>

View File

@@ -21,7 +21,7 @@
{{-- Footer --}}
@slot('footer')
@component('mail::footer')
&copy; {{ date('Y') }} {{ config('app.name') }}. All rights reserved.
© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
@endcomponent
@endslot
@endcomponent

View File

@@ -1,13 +1,14 @@
<table class="panel" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="panel-content">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="panel-item">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>
</td>
</tr>
<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>

View File

@@ -1,7 +1,7 @@
<table class="subcopy" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td>
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
<table class="subcopy" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td>
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>

View File

@@ -1,3 +1,3 @@
<div class="table">
{{ Illuminate\Mail\Markdown::parse($slot) }}
{{ Illuminate\Mail\Markdown::parse($slot) }}
</div>

View File

@@ -1,24 +1,22 @@
/* Base */
body, body *:not(html):not(style):not(br):not(tr):not(code) {
font-family: Avenir, Helvetica, sans-serif;
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 {
background-color: #f5f8fa;
color: #74787E;
-webkit-text-size-adjust: none;
background-color: #ffffff;
color: #718096;
height: 100%;
hyphens: auto;
line-height: 1.4;
margin: 0;
-moz-hyphens: auto;
-ms-word-break: break-all;
padding: 0;
width: 100% !important;
-webkit-hyphens: auto;
-webkit-text-size-adjust: none;
word-break: break-all;
word-break: break-word;
}
p,
@@ -30,7 +28,7 @@ blockquote {
}
a {
color: #3869D4;
color: #3869d4;
}
a img {
@@ -40,15 +38,14 @@ a img {
/* Typography */
h1 {
color: #2F3133;
font-size: 19px;
color: #3d4852;
font-size: 18px;
font-weight: bold;
margin-top: 0;
text-align: left;
}
h2 {
color: #2F3133;
font-size: 16px;
font-weight: bold;
margin-top: 0;
@@ -56,7 +53,6 @@ h2 {
}
h3 {
color: #2F3133;
font-size: 14px;
font-weight: bold;
margin-top: 0;
@@ -64,7 +60,6 @@ h3 {
}
p {
color: #74787E;
font-size: 16px;
line-height: 1.5em;
margin-top: 0;
@@ -82,22 +77,22 @@ img {
/* Layout */
.wrapper {
background-color: #f5f8fa;
margin: 0;
padding: 0;
width: 100%;
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
background-color: #edf2f7;
margin: 0;
padding: 0;
width: 100%;
}
.content {
margin: 0;
padding: 0;
width: 100%;
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
margin: 0;
padding: 0;
width: 100%;
}
/* Header */
@@ -108,149 +103,176 @@ img {
}
.header a {
color: #bbbfc3;
color: #3d4852;
font-size: 19px;
font-weight: bold;
text-decoration: none;
text-shadow: 0 1px 0 white;
}
/* Logo */
.logo {
height: 75px;
width: 75px;
}
/* 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%;
background-color: #edf2f7;
border-bottom: 1px solid #edf2f7;
border-top: 1px solid #edf2f7;
margin: 0;
padding: 0;
width: 100%;
}
.inner-body {
background-color: #FFFFFF;
margin: 0 auto;
padding: 0;
width: 570px;
-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 #EDEFF2;
border-top: 1px solid #e8e5ef;
margin-top: 25px;
padding-top: 25px;
}
.subcopy p {
font-size: 12px;
font-size: 14px;
}
/* Footer */
.footer {
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 570px;
margin: 0 auto;
padding: 0;
text-align: center;
width: 570px;
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 570px;
}
.footer p {
color: #AEAEAE;
color: #b0adc5;
font-size: 12px;
text-align: center;
}
.footer a {
color: #b0adc5;
text-decoration: underline;
}
/* Tables */
.table table {
margin: 30px auto;
width: 100%;
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
margin: 30px auto;
width: 100%;
}
.table th {
border-bottom: 1px solid #EDEFF2;
border-bottom: 1px solid #edeff2;
margin: 0;
padding-bottom: 8px;
}
.table td {
color: #74787E;
color: #74787e;
font-size: 15px;
line-height: 18px;
margin: 0;
padding: 10px 0;
}
.content-cell {
padding: 35px;
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%;
-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;
border-radius: 4px;
color: #fff;
display: inline-block;
overflow: hidden;
text-decoration: none;
}
.button-blue {
background-color: #3097D1;
border-top: 10px solid #3097D1;
border-right: 18px solid #3097D1;
border-bottom: 10px solid #3097D1;
border-left: 18px solid #3097D1;
.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 {
background-color: #2ab27b;
border-top: 10px solid #2ab27b;
border-right: 18px solid #2ab27b;
border-bottom: 10px solid #2ab27b;
border-left: 18px solid #2ab27b;
.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 {
background-color: #bf5329;
border-top: 10px solid #bf5329;
border-right: 18px solid #bf5329;
border-bottom: 10px solid #bf5329;
border-left: 18px solid #bf5329;
.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 {
margin: 0 0 21px;
border-left: #2d3748 solid 4px;
margin: 21px 0;
}
.panel-content {
background-color: #EDEFF2;
background-color: #edf2f7;
color: #718096;
padding: 16px;
}
.panel-content p {
color: #718096;
}
.panel-item {
padding: 0;
}
@@ -260,26 +282,8 @@ img {
padding-bottom: 0;
}
/* Promotions */
/* Utilities */
.promotion {
background-color: #FFFFFF;
border: 2px 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;
.break-all {
word-break: break-all;
}

View File

@@ -246,9 +246,9 @@ class TestCase extends Illuminate\Foundation\Testing\TestCase
* @param array $headers
* @param null $user
*
* @return \Illuminate\Foundation\Testing\TestResponse
* @return Illuminate\Testing\TestResponse
*/
public function get($uri, array $headers = [], $user = null): \Illuminate\Foundation\Testing\TestResponse
public function get($uri, array $headers = [], $user = null): Illuminate\Testing\TestResponse
{
$req = parent::get($uri, $this->headers($user, $headers));
if ($req->isClientError() || $req->isServerError()) {
@@ -266,9 +266,9 @@ class TestCase extends Illuminate\Foundation\Testing\TestCase
* @param array $headers
* @param null $user
*
* @return \Illuminate\Foundation\Testing\TestResponse
* @return Illuminate\Testing\TestResponse
*/
public function post($uri, array $data = [], array $headers = [], $user = null)
public function post($uri, array $data = [], array $headers = [], $user = null): Illuminate\Testing\TestResponse
{
$data = $this->transformData($data);
$req = parent::post($uri, $data, $this->headers($user, $headers));
@@ -287,9 +287,9 @@ class TestCase extends Illuminate\Foundation\Testing\TestCase
* @param array $headers
* @param null $user
*
* @return \Illuminate\Foundation\Testing\TestResponse
* @return Illuminate\Testing\TestResponse
*/
public function put($uri, array $data = [], array $headers = [], $user = null)
public function put($uri, array $data = [], array $headers = [], $user = null): Illuminate\Testing\TestResponse
{
$req = parent::put($uri, $this->transformData($data), $this->headers($user, $headers));
if ($req->isClientError() || $req->isServerError()) {
@@ -307,9 +307,9 @@ class TestCase extends Illuminate\Foundation\Testing\TestCase
* @param array $headers
* @param null $user
*
* @return \Illuminate\Foundation\Testing\TestResponse
* @return Illuminate\Testing\TestResponse
*/
public function delete($uri, array $data = [], array $headers = [], $user = null)
public function delete($uri, array $data = [], array $headers = [], $user = null): Illuminate\Testing\TestResponse
{
$req = parent::delete($uri, $this->transformData($data), $this->headers($user, $headers));
if ($req->isClientError() || $req->isServerError()) {