From bd96b84efb5a4491e719ccee3c881f8bbffc9c65 Mon Sep 17 00:00:00 2001 From: Diego Lorenzo Date: Wed, 29 Jul 2020 16:31:40 -0400 Subject: [PATCH] Upgrading Laravel Framework (#1071) * Updating composer packages. * Updating dependencies. * Removing unused files and updating index.php * Updating .htaccess. * Removing bootstrap/autoload call. * Updating TrustedProxy settings. * Removing mentions of Dusk in project since no longer used. * Upadating Hashing config. * Updating Logging. * Updating logger method name. * Bringing rest of files up to date and in sync with 5.6 framework files. * Reverting web routes file I was using for debugging. * Figuring out issues with running tests. * Updating composer. * StyleCI fix. * Updating dependencies for 5.7. * Updating assets. * Updating authorization. * Updating cache. * Updating tests. * Removing overridden mock() method since the signature changed and Laravel provides same method. * Removing unused imported class. * Removing CustomGate now that framework supports Guest User Gates. * Fixing up broken tests. * Composer lock update. * Wrapping up miscellaneous updates from 5.6 to 5.7. * Some miscellaneous updates from 5.7 to 5.8. * Updating dependencies and fixing API routes. * Updating testing. * Updating notifications. * Updating support. * Updating support with env() changes. * Updating env example vars. * Updates to env vars used and simplifying redis env settings. * Fixing up Tag tests and errors with notifications. * Updating cache config. * Removing deleted_at from array since automatically converted after upgrades. * Changing tag so it does not trigger notification, if not point of test. * Cleanup. * Fixing StyleCI issue. * StyleCI fixes. * StyleCI fixes. * Updating Trusted Proxies based on Heroku docs. * Type-hinting the Authenticateable class works. * Updating redis options. * Updating filesystems config and reivew app config. * Adding note regarding a potential future update. * Restoring the Good Submission tag and setting empty string var for slack webhook in PHPUnit settings. * Restoring old approach now that tests do not trigger notifications. * Updaing AWS_* env variables. --- .editorconfig | 15 +- .env.example | 24 +- .gitignore | 18 +- .styleci.yml | 1 - app.json | 27 - app/Auth/CustomGate.php | 47 - app/Exceptions/Handler.php | 26 +- app/Http/Controllers/CampaignsController.php | 3 +- app/Http/Controllers/GroupsController.php | 3 +- app/Http/Controllers/PostsController.php | 15 +- app/Http/Controllers/SignupsController.php | 8 +- app/Http/Controllers/TagsController.php | 3 +- app/Http/Controllers/Web/AuthController.php | 5 +- app/Http/Kernel.php | 24 +- .../Middleware/CheckForMaintenanceMode.php | 17 + app/Http/Middleware/TrustProxies.php | 17 +- app/Http/Middleware/VerifyCsrfToken.php | 7 + app/Listeners/SendTaggedNotification.php | 2 +- app/Models/Campaign.php | 2 +- app/Models/Post.php | 19 +- app/Models/Reaction.php | 7 - app/Models/Signup.php | 7 - app/Notifications/SlackTagNotification.php | 12 +- app/Policies/PostPolicy.php | 3 +- app/Providers/AppServiceProvider.php | 32 +- app/Providers/EventServiceProvider.php | 6 +- app/Types/Type.php | 3 +- artisan | 6 +- bootstrap/app.php | 2 +- bootstrap/autoload.php | 34 - composer.json | 61 +- composer.lock | 2652 ++++++++++------- config/app.php | 32 +- config/aws.php | 25 - config/broadcasting.php | 3 +- config/cache.php | 26 +- config/compile.php | 35 - config/database.php | 59 +- config/filesystems.php | 22 +- config/hashing.php | 52 + config/logging.php | 94 + config/mail.php | 50 +- config/queue.php | 19 +- config/services.php | 11 +- config/session.php | 43 +- config/trustedproxy.php | 55 +- config/view.php | 5 +- database/.gitignore | 1 + database/factories/ModelFactory.php | 19 +- database/seeds/DatabaseSeeder.php | 4 +- docs/development/testing.md | 5 - phpunit.dusk.xml | 21 - phpunit.xml | 23 +- public/.htaccess | 13 +- public/index.php | 7 +- resources/lang/en/passwords.php | 2 +- resources/lang/en/validation.php | 159 +- routes/api.php | 58 +- storage/framework/cache/.gitignore | 1 + storage/framework/cache/data/.gitignore | 2 + tests/Http/CampaignTest.php | 3 +- tests/Http/PostTest.php | 9 + tests/Http/SignupTest.php | 7 +- tests/Http/TagsTest.php | 6 +- tests/TestCase.php | 7 +- tests/WithMocks.php | 19 +- 66 files changed, 2375 insertions(+), 1630 deletions(-) delete mode 100644 app/Auth/CustomGate.php create mode 100644 app/Http/Middleware/CheckForMaintenanceMode.php delete mode 100644 bootstrap/autoload.php delete mode 100644 config/aws.php delete mode 100644 config/compile.php create mode 100644 config/hashing.php create mode 100644 config/logging.php delete mode 100644 phpunit.dusk.xml create mode 100644 storage/framework/cache/data/.gitignore diff --git a/.editorconfig b/.editorconfig index d6c3a9ca1..2756207e6 100644 --- a/.editorconfig +++ b/.editorconfig @@ -6,21 +6,18 @@ root = true [*] -indent_style = space -indent_size = 2 - -end_of_line = lf charset = utf-8 -trim_trailing_whitespace = true +end_of_line = lf insert_final_newline = true - -[*.php] indent_style = space indent_size = 4 +trim_trailing_whitespace = true -[*.json] -indent_style = space +[*.js*] indent_size = 2 [*.md] trim_trailing_whitespace = false + +[*.yml] +indent_size = 2 diff --git a/.env.example b/.env.example index 9bdc7b0dc..039732361 100644 --- a/.env.example +++ b/.env.example @@ -1,10 +1,11 @@ APP_ENV=local APP_KEY= APP_DEBUG=true -APP_LOG=daily -APP_LOG_LEVEL=debug APP_URL=http://rogue.test +LOG_CHANNEL=daily +LOG_SLACK_WEBHOOK_URL= + DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 @@ -13,20 +14,29 @@ DB_USERNAME=homestead DB_PASSWORD=secret CACHE_DRIVER=redis +FILESYSTEM_DRIVER=public +QUEUE_CONNECTION=sync SESSION_DRIVER=redis -STORAGE_DRIVER=public -QUEUE_DRIVER=sync -REDIS_HOST=127.0.0.1 -REDIS_PASSWORD=null -REDIS_PORT=6379 +REDIS_URL=redis://h:null@127.0.0.1:6379 + +# AWS +AWS_ACCESS_KEY_ID= +AWS_REGION=us-east-1 +AWS_SECRET_ACCESS_KEY= +AWS_S3_BUCKET= +AWS_S3_REGION=us-east-1 +AWS_S3_URL= +AWS_SQS_REGION=us-east-1 +# Northstar NORTHSTAR_URL=https://identity-dev.dosomething.org NORTHSTAR_AUTH_ID=dev-oauth NORTHSTAR_AUTH_SECRET= NORTHSTAR_CLIENT_ID=dev-machine NORTHSTAR_CLIENT_SECRET= +# GraphQL GRAPHQL_URL=https://graphql-dev.dosomething.org # Algolia (only use if testing indexing): diff --git a/.gitignore b/.gitignore index 9546c017d..9ca10b170 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,15 @@ -/vendor /node_modules +/public/assets/** +/public/dist /public/storage /storage/debugbar -Homestead.yaml -Homestead.json -.env -.env.dusk.local +/vendor .DS_Store +.env +.env.backup +.phpunit.result.cache -public/assets/** -public/dist - +Homestead.json +Homestead.yaml npm-debug.log - -/_book diff --git a/.styleci.yml b/.styleci.yml index 57b821104..48ae46540 100644 --- a/.styleci.yml +++ b/.styleci.yml @@ -6,7 +6,6 @@ enabled: disabled: - concat_without_spaces - no_useless_return - - simplified_null_return - phpdoc_no_package - phpdoc_summary - phpdoc_var_without_name diff --git a/app.json b/app.json index 67171d18a..3a4ac8bd6 100644 --- a/app.json +++ b/app.json @@ -65,35 +65,8 @@ "NORTHSTAR_URL": { "required": true }, - "ASHES_API_VERSION": { - "required": true - }, - "ASHES_PASSWORD": { - "required": true - }, - "ASHES_URI": { - "required": true - }, - "ASHES_USERNAME": { - "required": true - }, "ROGUE_API_KEY": { "required": true - }, - "S3_BUCKET": { - "required": true - }, - "S3_KEY": { - "required": true - }, - "S3_REGION": { - "required": true - }, - "S3_SECRET": { - "required": true - }, - "S3_URL": { - "required": true } } } diff --git a/app/Auth/CustomGate.php b/app/Auth/CustomGate.php deleted file mode 100644 index 7254099a9..000000000 --- a/app/Auth/CustomGate.php +++ /dev/null @@ -1,47 +0,0 @@ -resolveUser()) { - $user = null; - } - - $arguments = Arr::wrap($arguments); - - // First we will call the "before" callbacks for the Gate. If any of these give - // back a non-null response, we will immediately return that result in order - // to let the developers override all checks for some authorization cases. - $result = $this->callBeforeCallbacks( - $user, $ability, $arguments - ); - - if (is_null($result)) { - $result = $this->callAuthCallback($user, $ability, $arguments); - } - - // After calling the authorization callback, we will call the "after" callbacks - // that are registered with the Gate, which allows a developer to do logging - // if that is required for this application. Then we'll return the result. - $this->callAfterCallbacks( - $user, $ability, $arguments, $result - ); - - return $result; - } -} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 8f8f663cd..a9ffa09a6 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -28,39 +28,37 @@ class Handler extends ExceptionHandler /** * Report or log an exception. * - * This is a great spot to send exceptions to Sentry, Bugsnag, etc. - * - * @param \Exception $e + * @param \Exception $exceptionxception * @return void */ - public function report(Exception $e) + public function report(Exception $exception) { - parent::report($e); + parent::report($exception); } /** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request - * @param \Exception $e - * @return \Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response + * @param \Exception $exception + * @return \Illuminate\Http\Response | \Symfony\Component\HttpFoundation\Response */ - public function render($request, Exception $e) + public function render($request, Exception $exception) { // If Intervention can't parse a file (corrupted or wrong type), return 422. // @TODO: Handle this with a validation rule on our v3 routes. - if ($e instanceof \Intervention\Image\Exception\NotReadableException) { + if ($exception instanceof \Intervention\Image\Exception\NotReadableException) { abort(422, 'Invalid image provided.'); } // Re-cast specific exceptions or uniquely render them: - if ($e instanceof GlideNotFoundException) { - $e = new NotFoundHttpException('That image could not be found.'); - } elseif ($e instanceof ModelNotFoundException) { - $e = new NotFoundHttpException('That resource could not be found.'); + if ($exception instanceof GlideNotFoundException) { + $exception = new NotFoundHttpException('That image could not be found.'); + } elseif ($exception instanceof ModelNotFoundException) { + $exception = new NotFoundHttpException('That resource could not be found.'); } - return parent::render($request, $e); + return parent::render($request, $exception); } /** diff --git a/app/Http/Controllers/CampaignsController.php b/app/Http/Controllers/CampaignsController.php index 856d947e5..d71d1ce6a 100644 --- a/app/Http/Controllers/CampaignsController.php +++ b/app/Http/Controllers/CampaignsController.php @@ -3,6 +3,7 @@ namespace Rogue\Http\Controllers; use Rogue\Models\Campaign; +use Illuminate\Support\Arr; use Illuminate\Http\Request; use Rogue\Http\Transformers\CampaignTransformer; @@ -65,7 +66,7 @@ public function index(Request $request) } // Experimental: Allow paginating by cursor (e.g. `?cursor[after]=OTAxNg==`): - if ($cursor = array_get($request->query('cursor'), 'after')) { + if ($cursor = Arr::get($request->query('cursor'), 'after')) { $query->whereAfterCursor($cursor); // Using 'cursor' implies cursor pagination: diff --git a/app/Http/Controllers/GroupsController.php b/app/Http/Controllers/GroupsController.php index bc1202d4a..39cea25c0 100644 --- a/app/Http/Controllers/GroupsController.php +++ b/app/Http/Controllers/GroupsController.php @@ -3,6 +3,7 @@ namespace Rogue\Http\Controllers; use Rogue\Models\Group; +use Illuminate\Support\Arr; use Illuminate\Http\Request; use Rogue\Http\Transformers\GroupTransformer; @@ -44,7 +45,7 @@ public function index(Request $request) $request->query->set('orderBy', 'name,asc'); - if ($cursor = array_get($request->query('cursor'), 'after')) { + if ($cursor = Arr::get($request->query('cursor'), 'after')) { $query->whereAfterCursor($cursor); $this->useCursorPagination = true; } diff --git a/app/Http/Controllers/PostsController.php b/app/Http/Controllers/PostsController.php index 3f32c0791..b7b71a868 100644 --- a/app/Http/Controllers/PostsController.php +++ b/app/Http/Controllers/PostsController.php @@ -4,6 +4,7 @@ use Rogue\Models\Post; use Rogue\Models\Campaign; +use Illuminate\Support\Arr; use Illuminate\Http\Request; use Rogue\Managers\PostManager; use Rogue\Managers\SignupManager; @@ -87,11 +88,11 @@ public function index(Request $request) $query = $query->withHiddenPosts(); // If tag param is passed, only return posts that have that tag. - if (array_has($filters, 'tag')) { + if (Arr::has($filters, 'tag')) { $query = $query->withTag($filters['tag']); } - if (array_has($filters, 'volunteer_credit')) { + if (Arr::has($filters, 'volunteer_credit')) { if (filter_var($filters['volunteer_credit'], FILTER_VALIDATE_BOOLEAN)) { $query = $query->withVolunteerCredit($filters['volunteer_credit']); } else { @@ -100,7 +101,7 @@ public function index(Request $request) } // If the northstar_id param is passed, only allow admins, staff, or owner to see anonymous posts. - if (array_has($filters, 'northstar_id')) { + if (Arr::has($filters, 'northstar_id')) { $query = $query->withoutAnonymousPosts(); } @@ -113,7 +114,7 @@ public function index(Request $request) $request->query->set('orderBy', 'created_at,desc'); // Experimental: Allow paginating by cursor (e.g. `?cursor[after]=OTAxNg==`): - if ($cursor = array_get($request->query('cursor'), 'after')) { + if ($cursor = Arr::get($request->query('cursor'), 'after')) { $query->whereAfterCursor($cursor); // Using 'cursor' implies cursor pagination: @@ -175,12 +176,14 @@ public function update(PostRequest $request, Post $post) // Only allow an admin/staff or the user who owns the post to update. $this->authorize('update', $post); + $validatedRequest = $request->validated(); + // But don't allow user's to review their own posts. if (! Gate::allows('review', $post)) { - unset($request['status']); + unset($validatedRequest['status']); } - $this->posts->update($post, $request->validated()); + $this->posts->update($post, $validatedRequest); return $this->item($post); } diff --git a/app/Http/Controllers/SignupsController.php b/app/Http/Controllers/SignupsController.php index 2ea3da46c..6e927f200 100644 --- a/app/Http/Controllers/SignupsController.php +++ b/app/Http/Controllers/SignupsController.php @@ -4,6 +4,8 @@ use Rogue\Models\Signup; use Rogue\Models\Campaign; +use Illuminate\Support\Arr; +use Illuminate\Support\Str; use Illuminate\Http\Request; use Rogue\Managers\SignupManager; use Rogue\Http\Transformers\SignupTransformer; @@ -92,7 +94,7 @@ public function index(Request $request) $query = $this->filter($query, $filters, Signup::$indexes); // Only allow an admin or the user who owns the signup to see the signup's unapproved posts. - if (starts_with($request->query('include'), 'posts')) { + if (Str::startsWith($request->query('include'), 'posts')) { $types = (new \League\Fractal\Manager) ->parseIncludes($request->query('include')) ->getIncludeParams('posts'); @@ -106,7 +108,7 @@ public function index(Request $request) $query = $this->orderBy($query, $orderBy, Signup::$sortable); // Experimental: Allow paginating by cursor (e.g. `?cursor[after]=OTAxNg==`): - if ($cursor = array_get($request->query('cursor'), 'after')) { + if ($cursor = Arr::get($request->query('cursor'), 'after')) { $query->whereAfterCursor($cursor); // Using 'cursor' implies cursor pagination: @@ -127,7 +129,7 @@ public function index(Request $request) public function show(Request $request, Signup $signup) { // Only allow an admin or the user who owns the signup to see the signup's unapproved posts. - if (starts_with($request->query('include'), 'posts')) { + if (Str::startsWith($request->query('include'), 'posts')) { $types = (new \League\Fractal\Manager) ->parseIncludes($request->query('include')) ->getIncludeParams('posts'); diff --git a/app/Http/Controllers/TagsController.php b/app/Http/Controllers/TagsController.php index 1b933547f..ad76db1d3 100644 --- a/app/Http/Controllers/TagsController.php +++ b/app/Http/Controllers/TagsController.php @@ -3,6 +3,7 @@ namespace Rogue\Http\Controllers; use Rogue\Models\Post; +use Illuminate\Support\Str; use Illuminate\Http\Request; use Rogue\Repositories\PostRepository; use Rogue\Http\Transformers\PostTransformer; @@ -54,7 +55,7 @@ public function store(Post $post, Request $request) // If a tag slug is sent in (dashed or lowercase), change to the tag name. // @TODO: This controller/model should really deal in slugs... $tag = $request->tag_name; - if (str_contains($tag, '-') || ctype_lower($tag)) { + if (Str::contains($tag, '-') || ctype_lower($tag)) { $tag = ucwords(str_replace('-', ' ', $tag)); } diff --git a/app/Http/Controllers/Web/AuthController.php b/app/Http/Controllers/Web/AuthController.php index 205b904c5..52e93fe87 100644 --- a/app/Http/Controllers/Web/AuthController.php +++ b/app/Http/Controllers/Web/AuthController.php @@ -2,6 +2,7 @@ namespace Rogue\Http\Controllers\Web; +use Illuminate\Support\Arr; use Rogue\Http\Controllers\Controller; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -45,12 +46,12 @@ public function getLogin(ServerRequestInterface $request, ResponseInterface $res // Save the post-login redirect for when the user completes the flow: either to the intended // page (if logging in to view a page protected by the 'auth' middleware), or the previous // page (if the user clicked "Log In" in the top navigation). - if (! array_has($request->getQueryParams(), 'code')) { + if (! Arr::has($request->getQueryParams(), 'code')) { $intended = session()->pull('url.intended', url()->previous()); session(['login.intended' => $intended]); } - $destination = array_get($request->getQueryParams(), 'destination'); + $destination = Arr::get($request->getQueryParams(), 'destination'); $url = session('login.intended', $this->redirectTo); return gateway('northstar')->authorize($request, $response, $url, $destination); diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 2f33d8972..f901a8196 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -14,11 +14,11 @@ class Kernel extends HttpKernel * @var array */ protected $middleware = [ - \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, - \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, - \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \Rogue\Http\Middleware\TrustProxies::class, + \Rogue\Http\Middleware\CheckForMaintenanceMode::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \Rogue\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ]; /** @@ -58,9 +58,27 @@ class Kernel extends HttpKernel 'guard' => \DoSomething\Gateway\Server\Middleware\SetGuard::class, 'scopes' => \DoSomething\Gateway\Server\Middleware\RequireScope::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \Rogue\Http\Middleware\RedirectIfAuthenticated::class, + 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'role' => \Rogue\Http\Middleware\CheckRole::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, ]; + + /** + * The priority-sorted list of middleware. + * + * This forces non-global middleware to always be in the given order. + * + * @var array + */ + protected $middlewarePriority = [ + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \Illuminate\Auth\Middleware\Authenticate::class, + \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + \Illuminate\Auth\Middleware\Authorize::class, + ]; } diff --git a/app/Http/Middleware/CheckForMaintenanceMode.php b/app/Http/Middleware/CheckForMaintenanceMode.php new file mode 100644 index 000000000..9600bd113 --- /dev/null +++ b/app/Http/Middleware/CheckForMaintenanceMode.php @@ -0,0 +1,17 @@ + null, // Not set on AWS or Heroku. - Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR', - Request::HEADER_X_FORWARDED_HOST => null, // Not set on AWS or Heroku. - Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT', - Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO', - ]; + protected $headers = Request::HEADER_X_FORWARDED_AWS_ELB; } diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index 5b849f895..6ee0b95a5 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -7,6 +7,13 @@ class VerifyCsrfToken extends BaseVerifier { + /** + * Indicates whether the XSRF-TOKEN cookie should be set on the response. + * + * @var bool + */ + protected $addHttpCookie = true; + /** * The URIs that should be excluded from CSRF verification. * diff --git a/app/Listeners/SendTaggedNotification.php b/app/Listeners/SendTaggedNotification.php index c2a98d9e2..d4492704d 100644 --- a/app/Listeners/SendTaggedNotification.php +++ b/app/Listeners/SendTaggedNotification.php @@ -2,8 +2,8 @@ namespace Rogue\Listeners; -use Notification; use Rogue\Events\PostTagged; +use Illuminate\Support\Facades\Notification; use Rogue\Notifications\SlackTagNotification; class SendTaggedNotification diff --git a/app/Models/Campaign.php b/app/Models/Campaign.php index 95650787a..d0da1be6f 100644 --- a/app/Models/Campaign.php +++ b/app/Models/Campaign.php @@ -20,7 +20,7 @@ class Campaign extends Model * * @var array */ - protected $dates = ['deleted_at', 'start_date', 'end_date']; + protected $dates = ['start_date', 'end_date']; /** * The attributes that are mass assignable. diff --git a/app/Models/Post.php b/app/Models/Post.php index 4cae5bce2..c1c2dbad5 100644 --- a/app/Models/Post.php +++ b/app/Models/Post.php @@ -3,12 +3,12 @@ namespace Rogue\Models; use Hashids\Hashids; +use Illuminate\Support\Str; use Rogue\Services\GraphQL; use Rogue\Events\PostTagged; use Rogue\Models\Traits\HasCursor; use Illuminate\Support\Facades\Cache; use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\Facades\Storage; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\ModelNotFoundException; @@ -16,13 +16,6 @@ class Post extends Model { use SoftDeletes, HasCursor; - /** - * The attributes that should be mutated to dates. - * - * @var array - */ - protected $dates = ['deleted_at']; - /** * Always load a user's own reaction, * if they're logged-in. @@ -406,7 +399,7 @@ public function tag($tag) // Only tag if the tag doesn't exist on the post yet. // Otherwise, an integrity constraint violation / duplicate entry error will be thrown. if (! $this->tagNames()->contains($tagName)) { - $tag = Tag::firstOrCreate(['tag_name' => $tagName], ['tag_slug' => str_slug($tagName, '-')]); + $tag = Tag::firstOrCreate(['tag_name' => $tagName], ['tag_slug' => Str::slug($tagName, '-')]); $this->tags()->attach($tag); @@ -460,9 +453,9 @@ public function scopeWithTag($query, $tagSlug) * Returns posts which qualify for volunteer credit. * (The associated Action's volunteer credit field is set to true). */ - public function scopeWithVolunteerCredit($query, $volunteerCreditValue) + public function scopeWithVolunteerCredit($query) { - return $query->whereHas('actionModel', function ($query) use ($volunteerCreditValue) { + return $query->whereHas('actionModel', function ($query) { $query->where('volunteer_credit', true); }); } @@ -471,9 +464,9 @@ public function scopeWithVolunteerCredit($query, $volunteerCreditValue) * Returns posts which do not qualify for volunteer credit. * (The associated Action's volunteer credit field is set to false). */ - public function scopeWithoutVolunteerCredit($query, $volunteerCreditValue) + public function scopeWithoutVolunteerCredit($query) { - return $query->whereHas('actionModel', function ($query) use ($volunteerCreditValue) { + return $query->whereHas('actionModel', function ($query) { $query->where('volunteer_credit', false); }); } diff --git a/app/Models/Reaction.php b/app/Models/Reaction.php index eca1acb78..ce573b210 100644 --- a/app/Models/Reaction.php +++ b/app/Models/Reaction.php @@ -9,13 +9,6 @@ class Reaction extends Model { use SoftDeletes; - /** - * The attributes that should be mutated to date. - * - * @var array - */ - protected $dates = ['deleted_at']; - /** * All of the relationships to be touched. * diff --git a/app/Models/Signup.php b/app/Models/Signup.php index c277681ac..3766f0f7a 100644 --- a/app/Models/Signup.php +++ b/app/Models/Signup.php @@ -20,13 +20,6 @@ class Signup extends Model 'campaign_id' => 'string', ]; - /** - * The attributes that should be mutated to dates. - * - * @var array - */ - protected $dates = ['deleted_at']; - /** * The attributes that are mass assignable. * diff --git a/app/Notifications/SlackTagNotification.php b/app/Notifications/SlackTagNotification.php index a4488da21..3734f6552 100644 --- a/app/Notifications/SlackTagNotification.php +++ b/app/Notifications/SlackTagNotification.php @@ -4,6 +4,8 @@ use Rogue\Models\Tag; use Rogue\Models\Post; +use Illuminate\Support\Arr; +use Illuminate\Support\Str; use Rogue\Services\GraphQL; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Notification; @@ -80,7 +82,7 @@ public function toSlack($notifiable) return; } - // Get the user & reviewer's names for the notification: + // Get the user & admin reviewer's names for the notification. $data = app(GraphQL::class)->query(SLACK_NOTIFICATION_QUERY, [ 'userId' => $this->post->northstar_id, 'adminId' => $this->adminId, @@ -92,15 +94,15 @@ public function toSlack($notifiable) return (new SlackMessage) ->from('Rogue', ':tonguecat:') ->content($adminName . ' just tagged this post as "' . $this->tag->tag_name . '":') - ->attachment(function ($attachment) use ($userName, $adminName) { + ->attachment(function ($attachment) use ($userName) { $permalink = route('signups.show', [$this->post->signup_id], true); $attachment->title($userName . '\'s submission for "' . $this->post->campaign->internal_title . '"', $permalink) ->fields([ - 'Caption' => str_limit($this->post->text, 140), - 'Why Participated' => str_limit($this->post->signup->why_participated), + 'Caption' => Str::limit($this->post->text, 140), + 'Why Participated' => Str::limit($this->post->signup->why_participated), ]) - ->color(array_random(['#FCD116', '#23b7fb', '#4e2b63'])) + ->color(Arr::random(['#FCD116', '#23b7fb', '#4e2b63'])) ->image($this->post->getMediaUrl()); }); } diff --git a/app/Policies/PostPolicy.php b/app/Policies/PostPolicy.php index 4b2148878..6bcba4f9b 100644 --- a/app/Policies/PostPolicy.php +++ b/app/Policies/PostPolicy.php @@ -3,6 +3,7 @@ namespace Rogue\Policies; use Rogue\Models\Post; +use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Auth\Access\HandlesAuthorization; class PostPolicy @@ -28,7 +29,7 @@ public function viewAll($user, Post $post) * @param Rogue\Models\Post $post * @return bool */ - public function show($user, Post $post) + public function show(?Authenticatable $user, Post $post) { if ($post->status !== 'accepted') { return is_staff_user() || is_owner($post); diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 449093e10..c6168f5cf 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -4,7 +4,6 @@ use Closure; use Hashids\Hashids; -use Rogue\Auth\CustomGate; use InvalidArgumentException; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\View; @@ -12,11 +11,20 @@ use Illuminate\Database\Query\Expression; use Illuminate\Support\Facades\Validator; use Illuminate\Database\Query\Builder as QueryBuilder; -use Illuminate\Contracts\Auth\Access\Gate as GateContract; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; class AppServiceProvider extends ServiceProvider { + /** + * Register any application services. + * + * @return void + */ + public function register() + { + // + } + /** * Bootstrap any application services. * @@ -24,12 +32,6 @@ class AppServiceProvider extends ServiceProvider */ public function boot() { - $this->app->singleton(GateContract::class, function ($app) { - return new CustomGate($app, function () use ($app) { - return call_user_func($app['auth']->userResolver()); - }); - }); - $this->app->singleton(Hashids::class, function ($app) { return new Hashids(config('app.key'), 10); }); @@ -56,7 +58,9 @@ public function boot() }, 'The :attribute must be a valid ISO-3166-2 region code.'); // Attach the user & request ID to context for all log messages. - Log::getMonolog()->pushProcessor(function ($record) { + // @see https://git.io/JJzwG We may want to set this up using a + // Logging/ContextFormatter class like we do in Northstar. + Log::getLogger()->pushProcessor(function ($record) { $record['extra']['user_id'] = auth()->id(); $record['extra']['client_id'] = token()->client(); $record['extra']['request_id'] = request()->header('X-Request-Id'); @@ -103,14 +107,4 @@ public function boot() } }); } - - /** - * Register any application services. - * - * @return void - */ - public function register() - { - // - } } diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index b979aaf31..f56967edf 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -2,6 +2,8 @@ namespace Rogue\Providers; +use Rogue\Events\PostTagged; +use Rogue\Listeners\SendTaggedNotification; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; class EventServiceProvider extends ServiceProvider @@ -12,8 +14,8 @@ class EventServiceProvider extends ServiceProvider * @var array */ protected $listen = [ - 'Rogue\Events\PostTagged' => [ - 'Rogue\Listeners\SendTaggedNotification', + PostTagged::class => [ + SendTaggedNotification::class, ], ]; diff --git a/app/Types/Type.php b/app/Types/Type.php index ceb645c31..4559ccbd5 100644 --- a/app/Types/Type.php +++ b/app/Types/Type.php @@ -3,6 +3,7 @@ namespace Rogue\Types; use MyCLabs\Enum\Enum; +use Illuminate\Support\Arr; abstract class Type extends Enum { @@ -27,6 +28,6 @@ public static function label($type) throw new \InvalidArgumentException('This type does not have labels.'); } - return array_get(static::labels(), $type); + return Arr::get(static::labels(), $type); } } diff --git a/artisan b/artisan index df630d0d6..5c23e2e24 100644 --- a/artisan +++ b/artisan @@ -1,6 +1,8 @@ #!/usr/bin/env php handle( | Shutdown The Application |-------------------------------------------------------------------------- | -| Once Artisan has finished running. We will fire off the shutdown events +| Once Artisan has finished running, we will fire off the shutdown events | so that any final work may be done by the application before we shut | down the process. This is the last thing to happen to the request. | diff --git a/bootstrap/app.php b/bootstrap/app.php index 112dcc758..5b0bc19ec 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -12,7 +12,7 @@ */ $app = new Illuminate\Foundation\Application( - realpath(__DIR__.'/../') + $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__) ); /* diff --git a/bootstrap/autoload.php b/bootstrap/autoload.php deleted file mode 100644 index 383013796..000000000 --- a/bootstrap/autoload.php +++ /dev/null @@ -1,34 +0,0 @@ -= 2", "phpunit/phpunit": "^4.8.35|^5.4.3", "psr/cache": "^1.0", "psr/simple-cache": "^1.0", @@ -158,7 +159,7 @@ "s3", "sdk" ], - "time": "2020-03-30T18:15:57+00:00" + "time": "2020-07-24T18:12:22+00:00" }, { "name": "aws/aws-sdk-php-laravel", @@ -264,21 +265,22 @@ }, { "name": "doctrine/annotations", - "version": "v1.8.0", + "version": "1.10.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc" + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/904dca4eb10715b92569fbcd79e201d5c349b6bc", - "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d", + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d", "shasum": "" }, "require": { "doctrine/lexer": "1.*", - "php": "^7.1" + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/cache": "1.*", @@ -287,7 +289,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7.x-dev" + "dev-master": "1.9.x-dev" } }, "autoload": { @@ -328,24 +330,24 @@ "docblock", "parser" ], - "time": "2019-10-01T18:55:10+00:00" + "time": "2020-05-25T17:24:27+00:00" }, { "name": "doctrine/cache", - "version": "1.10.0", + "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62" + "reference": "13e3381b25847283a91948d04640543941309727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/382e7f4db9a12dc6c19431743a2b096041bcdd62", - "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62", + "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", + "reference": "13e3381b25847283a91948d04640543941309727", "shasum": "" }, "require": { - "php": "~7.1" + "php": "~7.1 || ^8.0" }, "conflict": { "doctrine/common": ">2.2,<2.4" @@ -410,37 +412,32 @@ "redis", "xcache" ], - "time": "2019-11-29T15:36:20+00:00" + "time": "2020-07-07T18:54:01+00:00" }, { "name": "doctrine/collections", - "version": "1.6.4", + "version": "1.6.6", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7" + "reference": "5f0470363ff042d0057006ae7acabc5d7b5252d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", - "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", + "url": "https://api.github.com/repos/doctrine/collections/zipball/5f0470363ff042d0057006ae7acabc5d7b5252d5", + "reference": "5f0470363ff042d0057006ae7acabc5d7b5252d5", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.1.3 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", "phpstan/phpstan-shim": "^0.9.2", "phpunit/phpunit": "^7.0", - "vimeo/psalm": "^3.2.2" + "vimeo/psalm": "^3.8.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" @@ -480,7 +477,7 @@ "iterators", "php" ], - "time": "2019-11-13T13:07:11+00:00" + "time": "2020-06-22T19:14:02+00:00" }, { "name": "doctrine/common", @@ -628,33 +625,38 @@ }, { "name": "doctrine/inflector", - "version": "1.3.1", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1" + "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1", - "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c", + "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "doctrine/coding-standard": "^7.0", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector", + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -683,32 +685,38 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", "keywords": [ "inflection", - "pluralize", - "singularize", - "string" + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" ], - "time": "2019-10-30T19:59:35+00:00" + "time": "2020-05-29T07:19:59+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", "shasum": "" }, "require": { - "php": "^7.2" + "php": "^7.2 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -753,39 +761,38 @@ "parser", "php" ], - "time": "2019-10-30T14:39:59+00:00" + "time": "2020-05-25T17:44:05+00:00" }, { "name": "dosomething/gateway", - "version": "v2.2.1", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/DoSomething/gateway.git", - "reference": "856fafe5bccc2028c29b4c2966a93aedd20be243" + "reference": "0ae0f829e96e0e674c4906cc3444ec57eacf5b11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DoSomething/gateway/zipball/856fafe5bccc2028c29b4c2966a93aedd20be243", - "reference": "856fafe5bccc2028c29b4c2966a93aedd20be243", + "url": "https://api.github.com/repos/DoSomething/gateway/zipball/0ae0f829e96e0e674c4906cc3444ec57eacf5b11", + "reference": "0ae0f829e96e0e674c4906cc3444ec57eacf5b11", "shasum": "" }, "require": { - "giggsey/libphonenumber-for-php": "~7.0", "gree/jose": "^2.2", - "guzzlehttp/guzzle": "^6.2.1", + "guzzlehttp/guzzle": "^6.2", + "laminas/laminas-diactoros": "^2.2", "lcobucci/jwt": "^3.1", - "league/oauth2-client": "~2.2", - "nesbot/carbon": "~1.14", + "league/oauth2-client": "^2.2", + "nesbot/carbon": "^2.0", "ramsey/uuid": "^3.7", - "symfony/psr-http-message-bridge": "^1.0", - "zendframework/zend-diactoros": "^1.3" + "symfony/psr-http-message-bridge": "^1.0" }, "require-dev": { - "illuminate/database": "^5.5.0", - "illuminate/http": "^5.5.0", + "illuminate/database": "^6.0", + "illuminate/http": "^6.0", "mockery/mockery": "^1.0", "phpunit/phpunit": "^8.0", - "symfony/var-dumper": "^3.1" + "symfony/var-dumper": "^4.4" }, "type": "library", "extra": { @@ -814,20 +821,74 @@ } ], "description": "Standard PHP API client for DoSomething.org services.", - "time": "2019-10-01T14:39:02+00:00" + "time": "2020-07-20T17:12:53+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.4|^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "time": "2019-03-31T00:38:28+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.17", + "version": "2.1.18", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a" + "reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a", - "reference": "ade6887fd9bd74177769645ab5c474824f8a418a", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/cfa3d44471c7f5bfb684ac2b0da7114283d78441", + "reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441", "shasum": "" }, "require": { @@ -851,7 +912,7 @@ }, "autoload": { "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" + "Egulias\\EmailValidator\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -872,7 +933,7 @@ "validation", "validator" ], - "time": "2020-02-13T22:36:52+00:00" + "time": "2020-06-16T20:11:17+00:00" }, { "name": "erusev/parsedown", @@ -922,32 +983,29 @@ }, { "name": "fideloper/proxy", - "version": "3.3.4", + "version": "4.4.0", "source": { "type": "git", "url": "https://github.com/fideloper/TrustedProxy.git", - "reference": "9cdf6f118af58d89764249bbcc7bb260c132924f" + "reference": "9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/9cdf6f118af58d89764249bbcc7bb260c132924f", - "reference": "9cdf6f118af58d89764249bbcc7bb260c132924f", + "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8", + "reference": "9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8", "shasum": "" }, "require": { - "illuminate/contracts": "~5.0", + "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0", "php": ">=5.4.0" }, "require-dev": { - "illuminate/http": "~5.0", - "mockery/mockery": "~0.9.3", - "phpunit/phpunit": "^5.7" + "illuminate/http": "^5.0|^6.0|^7.0|^8.0", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - }, "laravel": { "providers": [ "Fideloper\\Proxy\\TrustedProxyServiceProvider" @@ -975,168 +1033,7 @@ "proxy", "trusted proxy" ], - "time": "2017-06-15T17:19:42+00:00" - }, - { - "name": "fzaninotto/faker", - "version": "v1.9.1", - "source": { - "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f", - "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^2.9.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "time": "2019-12-12T13:22:17+00:00" - }, - { - "name": "giggsey/libphonenumber-for-php", - "version": "7.7.5", - "source": { - "type": "git", - "url": "https://github.com/giggsey/libphonenumber-for-php.git", - "reference": "7137cef7f295d225aec2a290f6829c1c71a1ffb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/7137cef7f295d225aec2a290f6829c1c71a1ffb0", - "reference": "7137cef7f295d225aec2a290f6829c1c71a1ffb0", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "giggsey/locale": "^1.0", - "php": ">=5.3.2" - }, - "require-dev": { - "pear/pear-core-minimal": "^1.9", - "pear/pear_exception": "^1.0", - "pear/versioncontrol_git": "dev-master", - "phing/phing": "^2.7", - "phpunit/phpunit": "^4.8|^5.0", - "satooshi/php-coveralls": "^1.0", - "symfony/console": "^2.8|^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, - "autoload": { - "psr-0": { - "libphonenumber": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Joshua Gigg", - "email": "giggsey@gmail.com", - "homepage": "http://giggsey.com/" - } - ], - "description": "PHP Port of Google's libphonenumber", - "homepage": "https://github.com/giggsey/libphonenumber-for-php", - "keywords": [ - "geocoding", - "geolocation", - "libphonenumber", - "mobile", - "phonenumber", - "validation" - ], - "time": "2016-11-23T15:39:02+00:00" - }, - { - "name": "giggsey/locale", - "version": "1.8", - "source": { - "type": "git", - "url": "https://github.com/giggsey/Locale.git", - "reference": "85a1b251bad11c986fec2a051b10d4b80a5caa1b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/giggsey/Locale/zipball/85a1b251bad11c986fec2a051b10d4b80a5caa1b", - "reference": "85a1b251bad11c986fec2a051b10d4b80a5caa1b", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "pear/pear-core-minimal": "^1.9", - "pear/pear_exception": "^1.0", - "pear/versioncontrol_git": "^0.5", - "phing/phing": "~2.7", - "php-coveralls/php-coveralls": "^1.0|^2.0", - "phpunit/phpunit": "^4.8|^5.0", - "symfony/console": "^2.8|^3.0|^4.0", - "symfony/filesystem": "^2.8|^3.0|^4.0", - "symfony/finder": "^2.8|^3.0|^4.0", - "symfony/process": "^2.8|^3.0|^4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Giggsey\\Locale\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Joshua Gigg", - "email": "giggsey@gmail.com", - "homepage": "http://giggsey.com/" - } - ], - "description": "Locale functions required by libphonenumber-for-php", - "time": "2019-10-09T18:53:14+00:00" + "time": "2020-06-23T01:36:47+00:00" }, { "name": "gree/jose", @@ -1196,23 +1093,24 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.5.2", + "version": "6.5.5", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.0", "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5" + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17.0" }, "require-dev": { "ext-curl": "*", @@ -1220,7 +1118,6 @@ "psr/log": "^1.1" }, "suggest": { - "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", @@ -1259,7 +1156,7 @@ "rest", "web service" ], - "time": "2019-12-23T11:57:10+00:00" + "time": "2020-06-16T21:01:06+00:00" }, { "name": "guzzlehttp/promises", @@ -1521,88 +1418,189 @@ "time": "2019-11-02T09:15:47+00:00" }, { - "name": "kylekatarnls/update-helper", - "version": "1.2.0", + "name": "laminas/laminas-diactoros", + "version": "2.3.1", "source": { "type": "git", - "url": "https://github.com/kylekatarnls/update-helper.git", - "reference": "5786fa188e0361b9adf9e8199d7280d1b2db165e" + "url": "https://github.com/laminas/laminas-diactoros.git", + "reference": "2ffc7cc816f6207b27923ee15edf6fac668390aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/5786fa188e0361b9adf9e8199d7280d1b2db165e", - "reference": "5786fa188e0361b9adf9e8199d7280d1b2db165e", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/2ffc7cc816f6207b27923ee15edf6fac668390aa", + "reference": "2ffc7cc816f6207b27923ee15edf6fac668390aa", "shasum": "" }, "require": { - "composer-plugin-api": "^1.1.0 || ^2.0.0", - "php": ">=5.3.0" + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "conflict": { + "phpspec/prophecy": "<1.9.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "zendframework/zend-diactoros": "^2.2.1" }, "require-dev": { - "codeclimate/php-test-reporter": "dev-master", - "composer/composer": "2.0.x-dev || ^2.0.0-dev", - "phpunit/phpunit": ">=4.8.35 <6.0" + "ext-curl": "*", + "ext-dom": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.5.0", + "laminas/laminas-coding-standard": "~1.0.0", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5.18" }, - "type": "composer-plugin", + "type": "library", "extra": { - "class": "UpdateHelper\\ComposerPlugin" + "branch-alias": { + "dev-master": "2.3.x-dev", + "dev-develop": "2.4.x-dev" + }, + "laminas": { + "config-provider": "Laminas\\Diactoros\\ConfigProvider", + "module": "Laminas\\Diactoros" + } }, "autoload": { - "psr-0": { - "UpdateHelper\\": "src/" + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php", + "src/functions/create_uploaded_file.legacy.php", + "src/functions/marshal_headers_from_sapi.legacy.php", + "src/functions/marshal_method_from_sapi.legacy.php", + "src/functions/marshal_protocol_version_from_sapi.legacy.php", + "src/functions/marshal_uri_from_sapi.legacy.php", + "src/functions/normalize_server.legacy.php", + "src/functions/normalize_uploaded_files.legacy.php", + "src/functions/parse_cookie_header.legacy.php" + ], + "psr-4": { + "Laminas\\Diactoros\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "authors": [ - { - "name": "Kyle", - "email": "kylekatarnls@gmail.com" + "description": "PSR HTTP Message implementations", + "homepage": "https://laminas.dev", + "keywords": [ + "http", + "laminas", + "psr", + "psr-17", + "psr-7" + ], + "time": "2020-07-07T15:34:31+00:00" + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "fcd87520e4943d968557803919523772475e8ea3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/fcd87520e4943d968557803919523772475e8ea3", + "reference": "fcd87520e4943d968557803919523772475e8ea3", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev", + "dev-develop": "1.1.x-dev" + }, + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" ], - "description": "Update helper", - "time": "2019-07-29T11:03:54+00:00" + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "time": "2020-05-20T16:45:56+00:00" }, { "name": "laravel/framework", - "version": "v5.5.48", + "version": "v5.8.38", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "e3e8d585dcfab5abe6261b060f4df0d48f9924bf" + "reference": "78eb4dabcc03e189620c16f436358d41d31ae11f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/e3e8d585dcfab5abe6261b060f4df0d48f9924bf", - "reference": "e3e8d585dcfab5abe6261b060f4df0d48f9924bf", + "url": "https://api.github.com/repos/laravel/framework/zipball/78eb4dabcc03e189620c16f436358d41d31ae11f", + "reference": "78eb4dabcc03e189620c16f436358d41d31ae11f", "shasum": "" }, "require": { - "doctrine/inflector": "~1.1", - "erusev/parsedown": "~1.7", + "doctrine/inflector": "^1.1", + "dragonmantank/cron-expression": "^2.0", + "egulias/email-validator": "^2.0", + "erusev/parsedown": "^1.7", + "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", "league/flysystem": "^1.0.8", - "monolog/monolog": "~1.12", - "mtdowling/cron-expression": "~1.0", - "nesbot/carbon": "^1.26.0", - "php": ">=7.0", - "psr/container": "~1.0", + "monolog/monolog": "^1.12", + "nesbot/carbon": "^1.26.3 || ^2.0", + "opis/closure": "^3.1", + "php": "^7.1.3", + "psr/container": "^1.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "~3.0", - "swiftmailer/swiftmailer": "~6.0", - "symfony/console": "~3.3", - "symfony/debug": "~3.3", - "symfony/finder": "~3.3", - "symfony/http-foundation": "~3.3", - "symfony/http-kernel": "~3.3", - "symfony/process": "~3.3", - "symfony/routing": "~3.3", - "symfony/var-dumper": "~3.3", - "tijsverkoyen/css-to-inline-styles": "~2.2", - "vlucas/phpdotenv": "~2.2" + "ramsey/uuid": "^3.7", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^4.2", + "symfony/debug": "^4.2", + "symfony/finder": "^4.2", + "symfony/http-foundation": "^4.2", + "symfony/http-kernel": "^4.2", + "symfony/process": "^4.2", + "symfony/routing": "^4.2", + "symfony/var-dumper": "^4.2", + "tijsverkoyen/css-to-inline-styles": "^2.2.1", + "vlucas/phpdotenv": "^3.3" + }, + "conflict": { + "tightenco/collect": "<5.5.33" }, "replace": { "illuminate/auth": "self.version", @@ -1632,44 +1630,52 @@ "illuminate/support": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version", - "tightenco/collect": "<5.5.33" + "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "~3.0", - "doctrine/dbal": "~2.5", + "aws/aws-sdk-php": "^3.0", + "doctrine/dbal": "^2.6", "filp/whoops": "^2.1.4", - "mockery/mockery": "~1.0", - "orchestra/testbench-core": "3.5.*", - "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~6.0", + "guzzlehttp/guzzle": "^6.3", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.0", + "moontoast/math": "^1.1", + "orchestra/testbench-core": "3.8.*", + "pda/pheanstalk": "^4.0", + "phpunit/phpunit": "^7.5|^8.0", "predis/predis": "^1.1.1", - "symfony/css-selector": "~3.3", - "symfony/dom-crawler": "~3.3" + "symfony/css-selector": "^4.2", + "symfony/dom-crawler": "^4.2", + "true/punycode": "^2.1" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", + "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", - "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", - "laravel/tinker": "Required to use the tinker console command (~1.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", - "league/flysystem-cached-adapter": "Required to use Flysystem caching (~1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", - "nexmo/client": "Required to use the Nexmo transport (~1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", - "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.3).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." + "filp/whoops": "Required for friendly error pages in development (^2.1.4).", + "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", + "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", + "laravel/tinker": "Required to use the tinker console command (^1.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "nexmo/client": "Required to use the Nexmo transport (^1.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.2).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^1.1).", + "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.5-dev" + "dev-master": "5.8-dev" } }, "autoload": { @@ -1678,7 +1684,72 @@ "src/Illuminate/Support/helpers.php" ], "psr-4": { - "Illuminate\\": "src/Illuminate/" + "Illuminate\\": "src/Illuminate/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "time": "2020-04-14T14:14:36+00:00" + }, + { + "name": "laravel/scout", + "version": "v7.2.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/scout.git", + "reference": "733f334cc2487c6ac85a557ae5eefd29f6bb1ba3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/scout/zipball/733f334cc2487c6ac85a557ae5eefd29f6bb1ba3", + "reference": "733f334cc2487c6ac85a557ae5eefd29f6bb1ba3", + "shasum": "" + }, + "require": { + "illuminate/bus": "~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/contracts": "~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/database": "~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/pagination": "~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/queue": "~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/support": "~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "php": "^7.1.3" + }, + "require-dev": { + "algolia/algoliasearch-client-php": "^2.2", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.0|^7.0|^8.0" + }, + "suggest": { + "algolia/algoliasearch-client-php": "Required to use the Algolia engine (^2.2)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.0-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Scout\\ScoutServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Scout\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1691,59 +1762,51 @@ "email": "taylor@laravel.com" } ], - "description": "The Laravel Framework.", - "homepage": "https://laravel.com", + "description": "Laravel Scout provides a driver based solution to searching your Eloquent models.", "keywords": [ - "framework", - "laravel" + "algolia", + "laravel", + "search" ], - "time": "2019-08-20T15:46:40+00:00" + "time": "2019-09-24T21:06:28+00:00" }, { - "name": "laravel/scout", - "version": "v7.2.1", + "name": "laravel/slack-notification-channel", + "version": "v2.1.0", "source": { "type": "git", - "url": "https://github.com/laravel/scout.git", - "reference": "733f334cc2487c6ac85a557ae5eefd29f6bb1ba3" + "url": "https://github.com/laravel/slack-notification-channel.git", + "reference": "d0a7f53342a5daa74e43e1b08dc8a7e83db152d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/scout/zipball/733f334cc2487c6ac85a557ae5eefd29f6bb1ba3", - "reference": "733f334cc2487c6ac85a557ae5eefd29f6bb1ba3", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/d0a7f53342a5daa74e43e1b08dc8a7e83db152d8", + "reference": "d0a7f53342a5daa74e43e1b08dc8a7e83db152d8", "shasum": "" }, "require": { - "illuminate/bus": "~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", - "illuminate/contracts": "~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", - "illuminate/database": "~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", - "illuminate/pagination": "~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", - "illuminate/queue": "~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", - "illuminate/support": "~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "guzzlehttp/guzzle": "^6.0|^7.0", + "illuminate/notifications": "~5.8.0|^6.0|^7.0", "php": "^7.1.3" }, "require-dev": { - "algolia/algoliasearch-client-php": "^2.2", "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.0|^7.0|^8.0" - }, - "suggest": { - "algolia/algoliasearch-client-php": "Required to use the Algolia engine (^2.2)." + "phpunit/phpunit": "^7.0|^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-master": "2.x-dev" }, "laravel": { "providers": [ - "Laravel\\Scout\\ScoutServiceProvider" + "Illuminate\\Notifications\\SlackChannelServiceProvider" ] } }, "autoload": { "psr-4": { - "Laravel\\Scout\\": "src/" + "Illuminate\\Notifications\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1756,26 +1819,26 @@ "email": "taylor@laravel.com" } ], - "description": "Laravel Scout provides a driver based solution to searching your Eloquent models.", + "description": "Slack Notification Channel for laravel.", "keywords": [ - "algolia", "laravel", - "search" + "notifications", + "slack" ], - "time": "2019-09-24T21:06:28+00:00" + "time": "2020-06-30T20:34:53+00:00" }, { "name": "lcobucci/jwt", - "version": "3.3.1", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/lcobucci/jwt.git", - "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18" + "reference": "56f10808089e38623345e28af2f2d5e4eb579455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", - "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/56f10808089e38623345e28af2f2d5e4eb579455", + "reference": "56f10808089e38623345e28af2f2d5e4eb579455", "shasum": "" }, "require": { @@ -1817,7 +1880,7 @@ "JWS", "jwt" ], - "time": "2019-05-24T18:30:49+00:00" + "time": "2020-05-22T08:21:12+00:00" }, { "name": "league/csv", @@ -1892,16 +1955,16 @@ }, { "name": "league/flysystem", - "version": "1.0.66", + "version": "1.0.69", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "021569195e15f8209b1c4bebb78bd66aa4f08c21" + "reference": "7106f78428a344bc4f643c233a94e48795f10967" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/021569195e15f8209b1c4bebb78bd66aa4f08c21", - "reference": "021569195e15f8209b1c4bebb78bd66aa4f08c21", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/7106f78428a344bc4f643c233a94e48795f10967", + "reference": "7106f78428a344bc4f643c233a94e48795f10967", "shasum": "" }, "require": { @@ -1972,20 +2035,20 @@ "sftp", "storage" ], - "time": "2020-03-17T18:58:12+00:00" + "time": "2020-05-18T15:13:39+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "1.0.24", + "version": "1.0.25", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "4382036bde5dc926f9b8b337e5bdb15e5ec7b570" + "reference": "d409b97a50bf85fbde30cbc9fc10237475e696ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/4382036bde5dc926f9b8b337e5bdb15e5ec7b570", - "reference": "4382036bde5dc926f9b8b337e5bdb15e5ec7b570", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/d409b97a50bf85fbde30cbc9fc10237475e696ea", + "reference": "d409b97a50bf85fbde30cbc9fc10237475e696ea", "shasum": "" }, "require": { @@ -2019,7 +2082,7 @@ } ], "description": "Flysystem adapter for the AWS S3 SDK v3.x", - "time": "2020-02-23T13:31:58+00:00" + "time": "2020-06-02T18:41:58+00:00" }, { "name": "league/flysystem-memory", @@ -2137,28 +2200,28 @@ }, { "name": "league/glide", - "version": "1.5.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/thephpleague/glide.git", - "reference": "a5477e9e822ed57b39861a17092b92553634932d" + "reference": "8759b8edfe953c8e6aceb45b3647fb7ae5349a0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/glide/zipball/a5477e9e822ed57b39861a17092b92553634932d", - "reference": "a5477e9e822ed57b39861a17092b92553634932d", + "url": "https://api.github.com/repos/thephpleague/glide/zipball/8759b8edfe953c8e6aceb45b3647fb7ae5349a0c", + "reference": "8759b8edfe953c8e6aceb45b3647fb7ae5349a0c", "shasum": "" }, "require": { "intervention/image": "^2.4", "league/flysystem": "^1.0", - "php": "^5.5 | ^7.0", + "php": "^7.2", "psr/http-message": "^1.0" }, "require-dev": { - "mockery/mockery": "~0.9", - "phpunit/php-token-stream": "^1.4", - "phpunit/phpunit": "~4.4" + "mockery/mockery": "^1.2", + "phpunit/php-token-stream": "^3.1", + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { @@ -2194,7 +2257,7 @@ "manipulation", "processing" ], - "time": "2019-04-03T23:46:42+00:00" + "time": "2020-07-07T12:23:45+00:00" }, { "name": "league/glide-laravel", @@ -2283,20 +2346,20 @@ }, { "name": "league/oauth2-client", - "version": "2.4.1", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth2-client.git", - "reference": "cc114abc622a53af969e8664722e84ca36257530" + "reference": "d9f2a1e000dc14eb3c02e15d15759385ec7ff0fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/cc114abc622a53af969e8664722e84ca36257530", - "reference": "cc114abc622a53af969e8664722e84ca36257530", + "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/d9f2a1e000dc14eb3c02e15d15759385ec7ff0fb", + "reference": "d9f2a1e000dc14eb3c02e15d15759385ec7ff0fb", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^6.0", + "guzzlehttp/guzzle": "^6.0 || ^7.0", "paragonie/random_compat": "^1|^2|^9.99", "php": "^5.6|^7.0" }, @@ -2346,20 +2409,20 @@ "oauth2", "single sign on" ], - "time": "2018-11-22T18:33:57+00:00" + "time": "2020-07-18T17:54:32+00:00" }, { "name": "monolog/monolog", - "version": "1.25.3", + "version": "1.25.5", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1" + "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fa82921994db851a8becaf3787a9e73c5976b6f1", - "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1817faadd1846cd08be9a49e905dc68823bc38c0", + "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0", "shasum": "" }, "require": { @@ -2373,11 +2436,10 @@ "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", "graylog2/gelf-php": "~1.0", - "jakub-onderka/php-parallel-lint": "0.9", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", + "php-parallel-lint/php-parallel-lint": "^1.0", "phpunit/phpunit": "~4.5", - "phpunit/phpunit-mock-objects": "2.3.0", "ruflin/elastica": ">=0.90 <3.0", "sentry/sentry": "^0.13", "swiftmailer/swiftmailer": "^5.3|^6.0" @@ -2424,52 +2486,7 @@ "logging", "psr-3" ], - "time": "2019-12-20T14:15:16+00:00" - }, - { - "name": "mtdowling/cron-expression", - "version": "v1.2.3", - "source": { - "type": "git", - "url": "https://github.com/mtdowling/cron-expression.git", - "reference": "9be552eebcc1ceec9776378f7dcc085246cacca6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9be552eebcc1ceec9776378f7dcc085246cacca6", - "reference": "9be552eebcc1ceec9776378f7dcc085246cacca6", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "abandoned": "dragonmantank/cron-expression", - "time": "2019-12-28T04:23:06+00:00" + "time": "2020-07-23T08:35:51+00:00" }, { "name": "mtdowling/jmespath.php", @@ -2576,43 +2593,57 @@ }, { "name": "nesbot/carbon", - "version": "1.39.1", + "version": "2.36.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "4be0c005164249208ce1b5ca633cd57bdd42ff33" + "reference": "ee7378a36cc62952100e718bcc58be4c7210e55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4be0c005164249208ce1b5ca633cd57bdd42ff33", - "reference": "4be0c005164249208ce1b5ca633cd57bdd42ff33", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ee7378a36cc62952100e718bcc58be4c7210e55f", + "reference": "ee7378a36cc62952100e718bcc58be4c7210e55f", "shasum": "" }, "require": { - "kylekatarnls/update-helper": "^1.1", - "php": ">=5.3.9", - "symfony/translation": "~2.6 || ~3.0 || ~4.0" + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^3.4 || ^4.0 || ^5.0" }, "require-dev": { - "composer/composer": "^1.2", - "friendsofphp/php-cs-fixer": "~2", - "phpunit/phpunit": "^4.8.35 || ^5.7" + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", + "kylekatarnls/multi-tester": "^2.0", + "phpmd/phpmd": "^2.8", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.30", + "phpunit/phpunit": "^7.5 || ^8.0", + "squizlabs/php_codesniffer": "^3.4" }, "bin": [ - "bin/upgrade-carbon" + "bin/carbon" ], "type": "library", "extra": { - "update-helper": "Carbon\\Upgrade", + "branch-alias": { + "dev-master": "2.x-dev", + "dev-3.x": "3.x-dev" + }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { "psr-4": { - "": "src/" + "Carbon\\": "src/Carbon/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2624,16 +2655,81 @@ "name": "Brian Nesbitt", "email": "brian@nesbot.com", "homepage": "http://nesbot.com" + }, + { + "name": "kylekatarnls", + "homepage": "http://github.com/kylekatarnls" } ], - "description": "A simple API extension for DateTime.", + "description": "An API extension for DateTime that supports 281 different languages.", "homepage": "http://carbon.nesbot.com", "keywords": [ "date", "datetime", "time" ], - "time": "2019-10-14T05:51:36+00:00" + "time": "2020-07-04T12:29:56+00:00" + }, + { + "name": "opis/closure", + "version": "3.5.5", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "dec9fc5ecfca93f45cd6121f8e6f14457dff372c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/dec9fc5ecfca93f45cd6121f8e6f14457dff372c", + "reference": "dec9fc5ecfca93f45cd6121f8e6f14457dff372c", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "time": "2020-06-17T14:59:55+00:00" }, { "name": "paragonie/random_compat", @@ -2680,18 +2776,73 @@ ], "time": "2018-07-02T15:55:56+00:00" }, + { + "name": "phpoption/phpoption", + "version": "1.7.5", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "time": "2020-07-20T17:29:33+00:00" + }, { "name": "phpseclib/phpseclib", - "version": "2.0.26", + "version": "2.0.28", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "09655fcc1f8bab65727be036b28f6f20311c126c" + "reference": "d1ca58cf33cb21046d702ae3a7b14fdacd9f3260" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/09655fcc1f8bab65727be036b28f6f20311c126c", - "reference": "09655fcc1f8bab65727be036b28f6f20311c126c", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d1ca58cf33cb21046d702ae3a7b14fdacd9f3260", + "reference": "d1ca58cf33cb21046d702ae3a7b14fdacd9f3260", "shasum": "" }, "require": { @@ -2770,7 +2921,7 @@ "x.509", "x509" ], - "time": "2020-03-13T04:15:39+00:00" + "time": "2020-07-08T09:08:33+00:00" }, { "name": "predis/predis", @@ -2917,6 +3068,58 @@ ], "time": "2017-02-14T16:28:37+00:00" }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "time": "2019-04-30T12:38:16+00:00" + }, { "name": "psr/http-message", "version": "1.0.1", @@ -3276,16 +3479,16 @@ }, { "name": "sokil/php-isocodes", - "version": "3.0.4", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sokil/php-isocodes.git", - "reference": "9260e3108ef956958f1184075682fc9e0e356ae2" + "reference": "89b1c153afd1e27c48634a06469a4cab27858833" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sokil/php-isocodes/zipball/9260e3108ef956958f1184075682fc9e0e356ae2", - "reference": "9260e3108ef956958f1184075682fc9e0e356ae2", + "url": "https://api.github.com/repos/sokil/php-isocodes/zipball/89b1c153afd1e27c48634a06469a4cab27858833", + "reference": "89b1c153afd1e27c48634a06469a4cab27858833", "shasum": "" }, "require": { @@ -3320,8 +3523,8 @@ "email": "dmytro.sokil@gmail.com" } ], - "description": "ISO country, subdivision, language, currency and script definitions and their translations. Based on pythons pycountry.", - "time": "2019-11-28T06:58:13+00:00" + "description": "ISO country, subdivision, language, currency and script definitions and their translations. Based on pythons pycountry and Debian's iso-codes.", + "time": "2020-05-28T22:28:43+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -3387,25 +3590,29 @@ }, { "name": "symfony/console", - "version": "v3.4.39", + "version": "v4.4.11", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "bf60d5e606cd595391c5f82bf6b570d9573fa120" + "reference": "55d07021da933dd0d633ffdab6f45d5b230c7e02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/bf60d5e606cd595391c5f82bf6b570d9573fa120", - "reference": "bf60d5e606cd595391c5f82bf6b570d9573fa120", + "url": "https://api.github.com/repos/symfony/console/zipball/55d07021da933dd0d633ffdab6f45d5b230c7e02", + "reference": "55d07021da933dd0d633ffdab6f45d5b230c7e02", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2" }, "conflict": { "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3|>=5", + "symfony/lock": "<4.4", "symfony/process": "<3.3" }, "provide": { @@ -3413,11 +3620,12 @@ }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/event-dispatcher": "^4.3", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^4.3|^5.0" }, "suggest": { "psr/log": "For using the console logger", @@ -3428,7 +3636,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -3455,7 +3663,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2020-03-27T17:07:22+00:00" + "time": "2020-07-06T13:18:39+00:00" }, { "name": "symfony/css-selector", @@ -3472,17 +3680,78 @@ "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-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": "2017-01-02T20:31:54+00:00" + }, + { + "name": "symfony/debug", + "version": "v4.4.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "47aa9064d75db36389692dd4d39895a0820f00f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/47aa9064d75db36389692dd4d39895a0820f00f2", + "reference": "47aa9064d75db36389692dd4d39895a0820f00f2", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "psr/log": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/http-kernel": "<3.4" + }, + "require-dev": { + "symfony/http-kernel": "^3.4|^4.0|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "4.4-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\CssSelector\\": "" + "Symfony\\Component\\Debug\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -3493,10 +3762,6 @@ "MIT" ], "authors": [ - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" @@ -3506,43 +3771,44 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony CssSelector Component", + "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2017-01-02T20:31:54+00:00" + "time": "2020-07-23T08:31:43+00:00" }, { - "name": "symfony/debug", - "version": "v3.4.40", + "name": "symfony/error-handler", + "version": "v4.4.11", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "ce9f3b5e8e1c50f849fded59b3a1b6bc3562ec29" + "url": "https://github.com/symfony/error-handler.git", + "reference": "66f151360550ec2b3273b3746febb12e6ba0348b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/ce9f3b5e8e1c50f849fded59b3a1b6bc3562ec29", - "reference": "ce9f3b5e8e1c50f849fded59b3a1b6bc3562ec29", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/66f151360550ec2b3273b3746febb12e6ba0348b", + "reference": "66f151360550ec2b3273b3746febb12e6ba0348b", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + "php": ">=7.1.3", + "psr/log": "~1.0", + "symfony/debug": "^4.4.5", + "symfony/polyfill-php80": "^1.15", + "symfony/var-dumper": "^4.4|^5.0" }, "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.4-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Debug\\": "" + "Symfony\\Component\\ErrorHandler\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -3562,26 +3828,26 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "time": "2020-03-23T10:22:40+00:00" + "time": "2020-07-23T08:35:20+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.4.8", + "version": "v4.4.11", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "abc8e3618bfdb55e44c8c6a00abd333f831bbfed" + "reference": "6140fc7047dafc5abbe84ba16a34a86c0b0229b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/abc8e3618bfdb55e44c8c6a00abd333f831bbfed", - "reference": "abc8e3618bfdb55e44c8c6a00abd333f831bbfed", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6140fc7047dafc5abbe84ba16a34a86c0b0229b8", + "reference": "6140fc7047dafc5abbe84ba16a34a86c0b0229b8", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": ">=7.1.3", "symfony/event-dispatcher-contracts": "^1.1" }, "conflict": { @@ -3634,24 +3900,24 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:54:36+00:00" + "time": "2020-06-18T17:59:13+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.7", + "version": "v1.1.9", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18" + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c43ab685673fb6c8d84220c77897b1d6cdbe1d18", - "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.1.3" }, "suggest": { "psr/event-dispatcher": "", @@ -3661,6 +3927,10 @@ "extra": { "branch-alias": { "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -3692,29 +3962,29 @@ "interoperability", "standards" ], - "time": "2019-09-17T09:54:03+00:00" + "time": "2020-07-06T13:19:58+00:00" }, { "name": "symfony/finder", - "version": "v3.4.39", + "version": "v4.4.11", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200" + "reference": "2727aa35fddfada1dd37599948528e9b152eb742" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/5ec813ccafa8164ef21757e8c725d3a57da59200", - "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200", + "url": "https://api.github.com/repos/symfony/finder/zipball/2727aa35fddfada1dd37599948528e9b152eb742", + "reference": "2727aa35fddfada1dd37599948528e9b152eb742", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -3741,34 +4011,35 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2020-02-14T07:34:21+00:00" + "time": "2020-07-05T09:39:30+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.40", + "version": "v4.4.11", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "eded33daef1147be7ff1249706be9a49fe2c7a44" + "reference": "3675676b6a47f3e71d3ab10bcf53fb9239eb77e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/eded33daef1147be7ff1249706be9a49fe2c7a44", - "reference": "eded33daef1147be7ff1249706be9a49fe2c7a44", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3675676b6a47f3e71d3ab10bcf53fb9239eb77e6", + "reference": "3675676b6a47f3e71d3ab10bcf53fb9239eb77e6", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" + "php": ">=7.1.3", + "symfony/mime": "^4.3|^5.0", + "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" + "predis/predis": "~1.0", + "symfony/expression-language": "^3.4|^4.0|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -3795,35 +4066,38 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2020-04-18T20:23:17+00:00" + "time": "2020-07-23T09:48:09+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.40", + "version": "v4.4.11", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "139d477cc926de9ca03c3d59b51ab6e22450c6df" + "reference": "a675d2bf04a9328f164910cae6e3918b295151f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/139d477cc926de9ca03c3d59b51ab6e22450c6df", - "reference": "139d477cc926de9ca03c3d59b51ab6e22450c6df", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a675d2bf04a9328f164910cae6e3918b295151f3", + "reference": "a675d2bf04a9328f164910cae6e3918b295151f3", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": ">=7.1.3", "psr/log": "~1.0", - "symfony/debug": "^3.3.3|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php56": "~1.8" + "symfony/error-handler": "^4.4", + "symfony/event-dispatcher": "^4.4", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.15" }, "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", - "symfony/var-dumper": "<3.3", + "symfony/browser-kit": "<4.3", + "symfony/config": "<3.4", + "symfony/console": ">=5", + "symfony/dependency-injection": "<4.3", + "symfony/translation": "<4.2", "twig/twig": "<1.34|<2.4,>=2" }, "provide": { @@ -3831,34 +4105,32 @@ }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/console": "~2.8|~3.0|~4.0", - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "^3.4.10|^4.0.10", - "symfony/dom-crawler": "~2.8|~3.0|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0", - "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0", - "symfony/templating": "~2.8|~3.0|~4.0", - "symfony/translation": "~2.8|~3.0|~4.0", - "symfony/var-dumper": "~3.3|~4.0" + "symfony/browser-kit": "^4.3|^5.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0", + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^4.3|^5.0", + "symfony/dom-crawler": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/routing": "^3.4|^4.0|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/templating": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.2|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^1.34|^2.4|^3.0" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/finder": "", - "symfony/var-dumper": "" + "symfony/dependency-injection": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -3885,20 +4157,83 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2020-04-28T17:41:38+00:00" + "time": "2020-07-24T04:10:09+00:00" + }, + { + "name": "symfony/mime", + "version": "v5.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "149fb0ad35aae3c7637b496b38478797fa6a7ea6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/149fb0ad35aae3c7637b496b38478797fa6a7ea6", + "reference": "149fb0ad35aae3c7637b496b38478797fa6a7ea6", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "symfony/dependency-injection": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "time": "2020-07-23T10:04:31+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.15.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", "shasum": "" }, "require": { @@ -3910,7 +4245,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -3943,20 +4282,20 @@ "polyfill", "portable" ], - "time": "2020-02-27T09:26:54+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.15.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8" + "reference": "6c2f78eb8f5ab8eaea98f6d414a5915f2e0fce36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/ad6d62792bfbcfc385dd34b424d4fcf9712a32c8", - "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/6c2f78eb8f5ab8eaea98f6d414a5915f2e0fce36", + "reference": "6c2f78eb8f5ab8eaea98f6d414a5915f2e0fce36", "shasum": "" }, "require": { @@ -3968,7 +4307,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4002,25 +4345,26 @@ "portable", "shim" ], - "time": "2020-03-09T19:04:49+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.15.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf" + "reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", - "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/bc6549d068d0160e0f10f7a5a23c7d1406b95ebe", + "reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe", "shasum": "" }, "require": { "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php70": "^1.10", "symfony/polyfill-php72": "^1.10" }, "suggest": { @@ -4029,7 +4373,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4049,6 +4397,10 @@ "name": "Laurent Bassin", "email": "laurent@bassin.info" }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" @@ -4064,40 +4416,47 @@ "portable", "shim" ], - "time": "2020-03-09T19:04:49+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.15.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.18.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", "shasum": "" }, "require": { "php": ">=5.3.3" }, "suggest": { - "ext-mbstring": "For best performance" + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, "files": [ "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4114,44 +4473,51 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", + "intl", + "normalizer", "polyfill", "portable", "shim" ], - "time": "2020-03-09T19:04:49+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { - "name": "symfony/polyfill-php56", - "version": "v1.15.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.18.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "d51ec491c8ddceae7dca8dd6c7e30428f543f37d" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/d51ec491c8ddceae7dca8dd6c7e30428f543f37d", - "reference": "d51ec491c8ddceae7dca8dd6c7e30428f543f37d", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php56\\": "" + "Symfony\\Polyfill\\Mbstring\\": "" }, "files": [ "bootstrap.php" @@ -4171,28 +4537,29 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "mbstring", "polyfill", "portable", "shim" ], - "time": "2020-03-09T19:04:49+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.15.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "2a18e37a489803559284416df58c71ccebe50bf0" + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/2a18e37a489803559284416df58c71ccebe50bf0", - "reference": "2a18e37a489803559284416df58c71ccebe50bf0", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", "shasum": "" }, "require": { @@ -4202,7 +4569,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4238,20 +4609,20 @@ "portable", "shim" ], - "time": "2020-02-27T09:26:54+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.15.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "37b0976c78b94856543260ce09b460a7bc852747" + "reference": "639447d008615574653fb3bc60d1986d7172eaae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747", - "reference": "37b0976c78b94856543260ce09b460a7bc852747", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae", + "reference": "639447d008615574653fb3bc60d1986d7172eaae", "shasum": "" }, "require": { @@ -4260,7 +4631,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4293,20 +4668,20 @@ "portable", "shim" ], - "time": "2020-02-27T09:26:54+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { - "name": "symfony/polyfill-util", - "version": "v1.15.0", + "name": "symfony/polyfill-php73", + "version": "v1.18.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "d8e76c104127675d0ea3df3be0f2ae24a8619027" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/d8e76c104127675d0ea3df3be0f2ae24a8619027", - "reference": "d8e76c104127675d0ea3df3be0f2ae24a8619027", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca", + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca", "shasum": "" }, "require": { @@ -4315,19 +4690,95 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Util\\": "" + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.18.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "shasum": "" + }, + "require": { + "php": ">=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -4337,37 +4788,37 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony utilities for portability of PHP codes", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ - "compat", "compatibility", "polyfill", + "portable", "shim" ], - "time": "2020-03-02T11:55:35+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/process", - "version": "v3.4.39", + "version": "v4.4.11", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "1dbc09f6e14703ae2398efc86b02ae2bcd9a9931" + "reference": "65e70bab62f3da7089a8d4591fb23fbacacb3479" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/1dbc09f6e14703ae2398efc86b02ae2bcd9a9931", - "reference": "1dbc09f6e14703ae2398efc86b02ae2bcd9a9931", + "url": "https://api.github.com/repos/symfony/process/zipball/65e70bab62f3da7089a8d4591fb23fbacacb3479", + "reference": "65e70bab62f3da7089a8d4591fb23fbacacb3479", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -4394,30 +4845,30 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2020-03-20T06:07:50+00:00" + "time": "2020-07-23T08:31:43+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v1.2.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "9ab9d71f97d5c7d35a121a7fb69f74fee95cd0ad" + "reference": "9d3e80d54d9ae747ad573cad796e8e247df7b796" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/9ab9d71f97d5c7d35a121a7fb69f74fee95cd0ad", - "reference": "9ab9d71f97d5c7d35a121a7fb69f74fee95cd0ad", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/9d3e80d54d9ae747ad573cad796e8e247df7b796", + "reference": "9d3e80d54d9ae747ad573cad796e8e247df7b796", "shasum": "" }, "require": { "php": "^7.1", "psr/http-message": "^1.0", - "symfony/http-foundation": "^3.4 || ^4.0" + "symfony/http-foundation": "^4.4 || ^5.0" }, "require-dev": { "nyholm/psr7": "^1.1", - "symfony/phpunit-bridge": "^3.4.20 || ^4.0", + "symfony/phpunit-bridge": "^4.4 || ^5.0", "zendframework/zend-diactoros": "^1.4.1 || ^2.0" }, "suggest": { @@ -4426,7 +4877,7 @@ "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -4442,13 +4893,13 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" } ], "description": "PSR HTTP message bridge", @@ -4459,38 +4910,38 @@ "psr-17", "psr-7" ], - "time": "2019-03-11T18:22:33+00:00" + "time": "2019-11-25T19:33:50+00:00" }, { "name": "symfony/routing", - "version": "v3.4.39", + "version": "v4.4.11", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "785e4e6b835e9ab4f9412862855d0e1b7a2b4627" + "reference": "e103381a4c2f0731c14589041852bf979e97c7af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/785e4e6b835e9ab4f9412862855d0e1b7a2b4627", - "reference": "785e4e6b835e9ab4f9412862855d0e1b7a2b4627", + "url": "https://api.github.com/repos/symfony/routing/zipball/e103381a4c2f0731c14589041852bf979e97c7af", + "reference": "e103381a4c2f0731c14589041852bf979e97c7af", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3" }, "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, "require-dev": { - "doctrine/annotations": "~1.0", + "doctrine/annotations": "~1.2", "psr/log": "~1.0", - "symfony/config": "^3.3.1|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "doctrine/annotations": "For using the annotation loader", @@ -4502,7 +4953,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -4535,30 +4986,93 @@ "uri", "url" ], - "time": "2020-03-25T12:02:26+00:00" + "time": "2020-07-05T09:39:30+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442", + "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2020-07-06T13:23:11+00:00" }, { "name": "symfony/translation", - "version": "v4.3.11", + "version": "v4.4.11", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "46e462be71935ae15eab531e4d491d801857f24c" + "reference": "a8ea9d97353294eb6783f2894ef8cee99a045822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/46e462be71935ae15eab531e4d491d801857f24c", - "reference": "46e462be71935ae15eab531e4d491d801857f24c", + "url": "https://api.github.com/repos/symfony/translation/zipball/a8ea9d97353294eb6783f2894ef8cee99a045822", + "reference": "a8ea9d97353294eb6783f2894ef8cee99a045822", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": ">=7.1.3", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^1.1.6" + "symfony/translation-contracts": "^1.1.6|^2" }, "conflict": { "symfony/config": "<3.4", "symfony/dependency-injection": "<3.4", + "symfony/http-kernel": "<4.4", "symfony/yaml": "<3.4" }, "provide": { @@ -4566,15 +5080,14 @@ }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/http-kernel": "~3.4|~4.0", - "symfony/intl": "~3.4|~4.0", - "symfony/service-contracts": "^1.1.2", - "symfony/var-dumper": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/finder": "~2.8|~3.0|~4.0|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/intl": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "psr/log-implementation": "To use logging capability in translator", @@ -4584,7 +5097,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -4611,24 +5124,24 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2020-01-04T12:24:57+00:00" + "time": "2020-07-23T08:31:43+00:00" }, { "name": "symfony/translation-contracts", - "version": "v1.1.7", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "364518c132c95642e530d9b2d217acbc2ccac3e6" + "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/364518c132c95642e530d9b2d217acbc2ccac3e6", - "reference": "364518c132c95642e530d9b2d217acbc2ccac3e6", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/616a9773c853097607cf9dd6577d5b143ffdcd63", + "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.2.5" }, "suggest": { "symfony/translation-implementation": "" @@ -4636,7 +5149,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4668,42 +5185,50 @@ "interoperability", "standards" ], - "time": "2019-09-17T11:12:18+00:00" + "time": "2020-07-06T13:23:11+00:00" }, { "name": "symfony/var-dumper", - "version": "v3.4.39", + "version": "v4.4.11", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "13c03169ae485fc7f1a5143256622ce1bd3c77eb" + "reference": "2125805a1a4e57f2340bc566c3013ca94d2722dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/13c03169ae485fc7f1a5143256622ce1bd3c77eb", - "reference": "13c03169ae485fc7f1a5143256622ce1bd3c77eb", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2125805a1a4e57f2340bc566c3013ca94d2722dc", + "reference": "2125805a1a4e57f2340bc566c3013ca94d2722dc", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5", + "symfony/polyfill-php80": "^1.15" }, "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" }, "require-dev": { "ext-iconv": "*", - "twig/twig": "~1.34|~2.4" + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^1.34|^2.4|^3.0" }, "suggest": { "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", "ext-intl": "To show region name in time zone dump", - "ext-symfony_debug": "" + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -4737,30 +5262,30 @@ "debug", "dump" ], - "time": "2020-03-17T22:27:36+00:00" + "time": "2020-06-24T13:34:53+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.2", + "version": "2.2.3", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "dda2ee426acd6d801d5b7fd1001cde9b5f790e15" + "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/dda2ee426acd6d801d5b7fd1001cde9b5f790e15", - "reference": "dda2ee426acd6d801d5b7fd1001cde9b5f790e15", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5", + "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^5.5 || ^7.0", + "php": "^5.5 || ^7.0 || ^8.0", "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5" }, "type": "library", "extra": { @@ -4786,30 +5311,31 @@ ], "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": "2019-10-24T08:53:34+00:00" + "time": "2020-07-13T06:12:54+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v2.6.2", + "version": "v3.6.7", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "c4a653ed3f1ff900baa15b4130c8770b57285b62" + "reference": "2065beda6cbe75e2603686907b2e45f6f3a5ad82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/c4a653ed3f1ff900baa15b4130c8770b57285b62", - "reference": "c4a653ed3f1ff900baa15b4130c8770b57285b62", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2065beda6cbe75e2603686907b2e45f6f3a5ad82", + "reference": "2065beda6cbe75e2603686907b2e45f6f3a5ad82", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/polyfill-ctype": "^1.9" + "php": "^5.4 || ^7.0 || ^8.0", + "phpoption/phpoption": "^1.5.2", + "symfony/polyfill-ctype": "^1.17" }, "require-dev": { "ext-filter": "*", "ext-pcre": "*", - "phpunit/phpunit": "^4.8.35 || ^5.0" + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0" }, "suggest": { "ext-filter": "Required to use the boolean validator.", @@ -4818,7 +5344,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "3.6-dev" } }, "autoload": { @@ -4831,10 +5357,15 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, { "name": "Vance Lucas", "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" + "homepage": "https://vancelucas.com/" } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", @@ -4843,73 +5374,71 @@ "env", "environment" ], - "time": "2020-03-27T23:16:19+00:00" - }, + "time": "2020-07-14T19:04:52+00:00" + } + ], + "packages-dev": [ { - "name": "zendframework/zend-diactoros", - "version": "1.8.7", + "name": "beyondcode/laravel-dump-server", + "version": "1.3.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-diactoros.git", - "reference": "a85e67b86e9b8520d07e6415fcbcb8391b44a75b" + "url": "https://github.com/beyondcode/laravel-dump-server.git", + "reference": "fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/a85e67b86e9b8520d07e6415fcbcb8391b44a75b", - "reference": "a85e67b86e9b8520d07e6415fcbcb8391b44a75b", + "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a", + "reference": "fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" + "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0", + "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0", + "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0", + "php": "^7.1", + "symfony/var-dumper": "^4.1.1" }, "require-dev": { - "ext-dom": "*", - "ext-libxml": "*", - "php-http/psr7-integration-tests": "dev-master", - "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7", - "zendframework/zend-coding-standard": "~1.0" + "larapack/dd": "^1.0", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { - "branch-alias": { - "dev-release-1.8": "1.8.x-dev" + "laravel": { + "providers": [ + "BeyondCode\\DumpServer\\DumpServerServiceProvider" + ] } }, "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/marshal_uri_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php" - ], "psr-4": { - "Zend\\Diactoros\\": "src/" - } + "BeyondCode\\DumpServer\\": "src" + }, + "files": [ + "helpers.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "MIT" ], - "description": "PSR HTTP Message implementations", - "homepage": "https://github.com/zendframework/zend-diactoros", + "authors": [ + { + "name": "Marcel Pociot", + "email": "marcel@beyondco.de", + "homepage": "https://beyondco.de", + "role": "Developer" + } + ], + "description": "Symfony Var-Dump Server for Laravel", + "homepage": "https://github.com/beyondcode/laravel-dump-server", "keywords": [ - "http", - "psr", - "psr-7" + "beyondcode", + "laravel-dump-server" ], - "abandoned": "laminas/laminas-diactoros", - "time": "2019-08-06T17:53:53+00:00" - } - ], - "packages-dev": [ + "time": "2019-08-11T13:17:40+00:00" + }, { "name": "dnoegel/php-xdg-base-dir", "version": "v0.1.1", @@ -4945,20 +5474,20 @@ }, { "name": "doctrine/instantiator", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -4997,20 +5526,20 @@ "constructor", "instantiate" ], - "time": "2019-10-21T16:45:58+00:00" + "time": "2020-05-29T17:27:14+00:00" }, { "name": "filp/whoops", - "version": "2.7.1", + "version": "2.7.3", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130" + "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130", - "reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130", + "url": "https://api.github.com/repos/filp/whoops/zipball/5d5fe9bb3d656b514d455645b3addc5f7ba7714d", + "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d", "shasum": "" }, "require": { @@ -5058,24 +5587,74 @@ "throwable", "whoops" ], - "time": "2020-01-15T10:00:00+00:00" + "time": "2020-06-14T09:00:00+00:00" + }, + { + "name": "fzaninotto/faker", + "version": "v1.9.1", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f", + "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^2.9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "time": "2019-12-12T13:22:17+00:00" }, { "name": "hamcrest/hamcrest-php", - "version": "v1.2.2", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c" + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b37020aa976fa52d3de9aa904aa2522dc518f79c", - "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^5.3|^7.0|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -5083,27 +5662,29 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "1.3.3", - "satooshi/php-coveralls": "dev-master" + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, "autoload": { "classmap": [ "hamcrest" - ], - "files": [ - "hamcrest/Hamcrest.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD" + "BSD-3-Clause" ], "description": "This is the PHP port of Hamcrest Matchers", "keywords": [ "test" ], - "time": "2015-05-11T14:41:42+00:00" + "time": "2020-07-09T08:09:16+00:00" }, { "name": "itsgoingd/clockwork", @@ -5318,30 +5899,30 @@ }, { "name": "mockery/mockery", - "version": "0.9.11", + "version": "1.3.2", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "be9bf28d8e57d67883cba9fcadfcff8caab667f8" + "reference": "9b6f117dd7d36dc3858d8d8ddf9b3d584fcae283" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/be9bf28d8e57d67883cba9fcadfcff8caab667f8", - "reference": "be9bf28d8e57d67883cba9fcadfcff8caab667f8", + "url": "https://api.github.com/repos/mockery/mockery/zipball/9b6f117dd7d36dc3858d8d8ddf9b3d584fcae283", + "reference": "9b6f117dd7d36dc3858d8d8ddf9b3d584fcae283", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "~1.1", + "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", - "php": ">=5.3.2" + "php": ">=5.6.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0|~9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.9.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -5365,8 +5946,8 @@ "homepage": "http://davedevelopment.co.uk" } ], - "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.", - "homepage": "http://github.com/padraic/mockery", + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", "keywords": [ "BDD", "TDD", @@ -5379,24 +5960,24 @@ "test double", "testing" ], - "time": "2019-02-12T16:07:13+00:00" + "time": "2020-07-09T08:23:05+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.9.5", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", - "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "replace": { "myclabs/deep-copy": "self.version" @@ -5427,20 +6008,20 @@ "object", "object graph" ], - "time": "2020-01-17T21:11:47+00:00" + "time": "2020-06-29T13:22:24+00:00" }, { "name": "nikic/php-parser", - "version": "v4.3.0", + "version": "v4.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc" + "reference": "21dce06dfbf0365c6a7cc8fdbdc995926c6a9300" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9a9981c347c5c49d6dfe5cf826bb882b824080dc", - "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/21dce06dfbf0365c6a7cc8fdbdc995926c6a9300", + "reference": "21dce06dfbf0365c6a7cc8fdbdc995926c6a9300", "shasum": "" }, "require": { @@ -5457,7 +6038,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.7-dev" } }, "autoload": { @@ -5479,26 +6060,90 @@ "parser", "php" ], - "time": "2019-11-08T13:50:10+00:00" + "time": "2020-07-25T13:18:53+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "af42d339fe2742295a54f6fdd42aaa6f8c4aca68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/af42d339fe2742295a54f6fdd42aaa6f8c4aca68", + "reference": "af42d339fe2742295a54f6fdd42aaa6f8c4aca68", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.1.4", + "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", + "php": "^7.1", + "symfony/console": "~2.8|~3.3|~4.0" + }, + "require-dev": { + "laravel/framework": "5.8.*", + "nunomaduro/larastan": "^0.3.0", + "phpstan/phpstan": "^0.11", + "phpunit/phpunit": "~8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "time": "2019-03-07T21:35:13+00:00" }, { "name": "phar-io/manifest", - "version": "1.0.1", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^1.0.1", + "phar-io/version": "^2.0", "php": "^5.6 || ^7.0" }, "type": "library", @@ -5534,20 +6179,20 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2017-03-05T18:14:27+00:00" + "time": "2018-07-08T19:23:20+00:00" }, { "name": "phar-io/version", - "version": "1.0.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", "shasum": "" }, "require": { @@ -5581,32 +6226,29 @@ } ], "description": "Library for handling version information and constraints", - "time": "2017-03-05T17:38:23+00:00" + "time": "2018-07-08T19:19:57+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "2.0.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~6" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -5633,32 +6275,31 @@ "reflection", "static analysis" ], - "time": "2018-08-07T13:53:10+00:00" + "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.1.0", + "version": "5.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" + "reference": "3170448f5769fe19f456173d833734e0ff1b84df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/3170448f5769fe19f456173d833734e0ff1b84df", + "reference": "3170448f5769fe19f456173d833734e0ff1b84df", "shasum": "" }, "require": { - "ext-filter": "^7.1", - "php": "^7.2", - "phpdocumentor/reflection-common": "^2.0", - "phpdocumentor/type-resolver": "^1.0", - "webmozart/assert": "^1" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "doctrine/instantiator": "^1", - "mockery/mockery": "^1" + "mockery/mockery": "~1.3.2" }, "type": "library", "extra": { @@ -5686,34 +6327,33 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2020-02-22T12:28:44+00:00" + "time": "2020-07-20T20:05:34+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.1.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", "shasum": "" }, "require": { - "php": "^7.2", + "php": "^7.2 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "^7.2", - "mockery/mockery": "~1" + "ext-tokenizer": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { @@ -5732,37 +6372,37 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-02-18T18:59:58+00:00" + "time": "2020-06-27T10:12:23+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.10.3", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "451c3cd1418cf640de218914901e51b064abb093" + "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", - "reference": "451c3cd1418cf640de218914901e51b064abb093", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b20034be5efcdab4fb60ca3a29cba2949aead160", + "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + "doctrine/instantiator": "^1.2", + "php": "^7.2", + "phpdocumentor/reflection-docblock": "^5.0", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^2.5 || ^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10.x-dev" + "dev-master": "1.11.x-dev" } }, "autoload": { @@ -5795,44 +6435,44 @@ "spy", "stub" ], - "time": "2020-03-05T15:02:03+00:00" + "time": "2020-07-08T12:44:21+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "5.3.2", + "version": "6.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac" + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.0", - "phpunit/php-file-iterator": "^1.4.2", + "php": "^7.1", + "phpunit/php-file-iterator": "^2.0", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^2.0.1", + "phpunit/php-token-stream": "^3.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.0", + "sebastian/environment": "^3.1 || ^4.0", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^7.0" }, "suggest": { - "ext-xdebug": "^2.5.5" + "ext-xdebug": "^2.6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3.x-dev" + "dev-master": "6.1-dev" } }, "autoload": { @@ -5858,29 +6498,32 @@ "testing", "xunit" ], - "time": "2018-04-06T15:36:58+00:00" + "time": "2018-10-31T16:06:48+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.5", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + "reference": "050bedf145a257b1ff02746c31894800e5122946" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -5895,7 +6538,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -5905,7 +6548,7 @@ "filesystem", "iterator" ], - "time": "2017-11-27T13:52:08+00:00" + "time": "2018-09-13T20:33:42+00:00" }, { "name": "phpunit/php-text-template", @@ -5950,28 +6593,28 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.9", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -5986,7 +6629,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -5995,33 +6638,33 @@ "keywords": [ "timer" ], - "time": "2017-02-26T11:10:40+00:00" + "time": "2019-06-07T04:22:29+00:00" }, { "name": "phpunit/php-token-stream", - "version": "2.0.2", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2.4" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -6044,57 +6687,57 @@ "keywords": [ "tokenizer" ], - "time": "2017-11-27T05:48:46+00:00" + "time": "2019-09-17T06:23:10+00:00" }, { "name": "phpunit/phpunit", - "version": "6.5.14", + "version": "7.5.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7" + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7", - "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", "shasum": "" }, "require": { + "doctrine/instantiator": "^1.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "^1.6.1", - "phar-io/manifest": "^1.0.1", - "phar-io/version": "^1.0", - "php": "^7.0", + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.2", + "phar-io/version": "^2.0", + "php": "^7.1", "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.3", - "phpunit/php-file-iterator": "^1.4.3", + "phpunit/php-code-coverage": "^6.0.7", + "phpunit/php-file-iterator": "^2.0.1", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^5.0.9", - "sebastian/comparator": "^2.1", - "sebastian/diff": "^2.0", - "sebastian/environment": "^3.1", + "phpunit/php-timer": "^2.1", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", + "sebastian/environment": "^4.0", "sebastian/exporter": "^3.1", "sebastian/global-state": "^2.0", "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^1.0", + "sebastian/resource-operations": "^2.0", "sebastian/version": "^2.0.1" }, "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "phpunit/dbunit": "<3.0" + "phpunit/phpunit-mock-objects": "*" }, "require-dev": { "ext-pdo": "*" }, "suggest": { + "ext-soap": "*", "ext-xdebug": "*", - "phpunit/php-invoker": "^1.1" + "phpunit/php-invoker": "^2.0" }, "bin": [ "phpunit" @@ -6102,7 +6745,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.5.x-dev" + "dev-master": "7.5-dev" } }, "autoload": { @@ -6128,67 +6771,7 @@ "testing", "xunit" ], - "time": "2019-02-01T05:22:47+00:00" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "5.0.10", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.5", - "php": "^7.0", - "phpunit/php-text-template": "^1.2.1", - "sebastian/exporter": "^3.1" - }, - "conflict": { - "phpunit/phpunit": "<6.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.5.11" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "abandoned": true, - "time": "2018-08-09T05:50:03+00:00" + "time": "2020-01-08T08:45:45+00:00" }, { "name": "psy/psysh", @@ -6311,30 +6894,30 @@ }, { "name": "sebastian/comparator", - "version": "2.1.3", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/diff": "^2.0 || ^3.0", + "php": "^7.1", + "sebastian/diff": "^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^6.4" + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -6371,32 +6954,33 @@ "compare", "equality" ], - "time": "2018-02-01T13:46:46+00:00" + "time": "2018-07-12T15:12:46+00:00" }, { "name": "sebastian/diff", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -6421,34 +7005,40 @@ "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff" + "diff", + "udiff", + "unidiff", + "unified diff" ], - "time": "2017-08-03T08:09:46+00:00" + "time": "2019-02-04T06:01:07+00:00" }, { "name": "sebastian/environment", - "version": "3.1.0", + "version": "4.2.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^6.1" + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -6473,7 +7063,7 @@ "environment", "hhvm" ], - "time": "2017-07-01T08:51:00+00:00" + "time": "2019-11-20T08:46:58+00:00" }, { "name": "sebastian/exporter", @@ -6740,25 +7330,25 @@ }, { "name": "sebastian/resource-operations", - "version": "1.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", "shasum": "" }, "require": { - "php": ">=5.6.0" + "php": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -6778,7 +7368,7 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28T20:34:47+00:00" + "time": "2018-10-04T04:07:39+00:00" }, { "name": "sebastian/version", @@ -6881,23 +7471,23 @@ }, { "name": "theseer/tokenizer", - "version": "1.1.3", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + "reference": "75a63c33a8577608444246075ea0af0d052e452a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -6917,28 +7507,29 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-06-13T22:48:21+00:00" + "time": "2020-07-12T23:59:07+00:00" }, { "name": "webmozart/assert", - "version": "1.7.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "aed98a490f9a8f78468232db345ab9cf606cf598" + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598", - "reference": "aed98a490f9a8f78468232db345ab9cf606cf598", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", + "php": "^5.3.3 || ^7.0 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "vimeo/psalm": "<3.6.0" + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" }, "require-dev": { "phpunit/phpunit": "^4.8.36 || ^7.5.13" @@ -6965,21 +7556,20 @@ "check", "validate" ], - "time": "2020-02-14T12:15:55+00:00" + "time": "2020-07-08T17:02:28+00:00" } ], "aliases": [], - "minimum-stability": "stable", + "minimum-stability": "dev", "stability-flags": [], - "prefer-stable": false, + "prefer-stable": true, "prefer-lowest": false, "platform": { "php": "~7.3.0", - "ext-gd": "*", - "ext-exif": "*", "ext-bcmath": "*", + "ext-exif": "*", + "ext-gd": "*", "ext-newrelic": "*" }, - "platform-dev": [], - "plugin-api-version": "1.1.0" + "platform-dev": [] } diff --git a/config/app.php b/config/app.php index 39a6e17ca..57c80c5f9 100644 --- a/config/app.php +++ b/config/app.php @@ -20,7 +20,7 @@ | | This value determines the "environment" your application is currently | running in. This may determine how you prefer to configure various - | services your application utilizes. Set this in your ".env" file. + | services the application utilizes. Set this in your ".env" file. | */ @@ -52,6 +52,8 @@ 'url' => env('APP_URL', 'http://localhost'), + 'asset_url' => env('ASSET_URL', null), + /* |-------------------------------------------------------------------------- | Application Timezone @@ -93,35 +95,31 @@ /* |-------------------------------------------------------------------------- - | Encryption Key + | Faker Locale |-------------------------------------------------------------------------- | - | This key is used by the Illuminate encrypter service and should be set - | to a random, 32 character string, otherwise these encrypted strings - | will not be safe. Please do this before deploying an application! + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. | */ - 'key' => env('APP_KEY'), - - 'cipher' => 'AES-256-CBC', + 'faker_locale' => 'en_US', /* |-------------------------------------------------------------------------- - | Logging Configuration + | Encryption Key |-------------------------------------------------------------------------- | - | Here you may configure the log settings for your application. Out of - | the box, Laravel uses the Monolog PHP logging library. This gives - | you a variety of powerful log handlers / formatters to utilize. - | - | Available Settings: "single", "daily", "syslog", "errorlog" + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! | */ - 'log' => env('APP_LOG', 'syslog'), + 'key' => env('APP_KEY'), - 'log_level' => env('APP_LOG_LEVEL', 'debug'), + 'cipher' => 'AES-256-CBC', /* |-------------------------------------------------------------------------- @@ -194,6 +192,7 @@ 'aliases' => [ 'App' => Illuminate\Support\Facades\App::class, + 'Arr' => Illuminate\Support\Arr::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, 'Blade' => Illuminate\Support\Facades\Blade::class, @@ -223,6 +222,7 @@ 'Schema' => Illuminate\Support\Facades\Schema::class, 'Session' => Illuminate\Support\Facades\Session::class, 'Storage' => Illuminate\Support\Facades\Storage::class, + 'Str' => Illuminate\Support\Str::class, 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, diff --git a/config/aws.php b/config/aws.php deleted file mode 100644 index 8f86c6681..000000000 --- a/config/aws.php +++ /dev/null @@ -1,25 +0,0 @@ - env('AWS_REGION', 'us-east-1'), - 'version' => 'latest', - 'ua_append' => [ - 'L5MOD/' . AwsServiceProvider::VERSION, - ], -]; diff --git a/config/broadcasting.php b/config/broadcasting.php index 5eecd2b26..3bba1103e 100644 --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -36,7 +36,8 @@ 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ - // + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'useTLS' => true, ], ], diff --git a/config/cache.php b/config/cache.php index 6b8ac9141..06acbbd6e 100644 --- a/config/cache.php +++ b/config/cache.php @@ -1,5 +1,7 @@ [ 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], 'servers' => [ [ 'host' => env('MEMCACHED_HOST', '127.0.0.1'), @@ -62,7 +73,16 @@ 'redis' => [ 'driver' => 'redis', - 'connection' => 'default', + 'connection' => 'cache', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), ], ], @@ -78,6 +98,6 @@ | */ - 'prefix' => 'laravel', + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'), ]; diff --git a/config/compile.php b/config/compile.php deleted file mode 100644 index 04807eac4..000000000 --- a/config/compile.php +++ /dev/null @@ -1,35 +0,0 @@ - [ - // - ], - - /* - |-------------------------------------------------------------------------- - | Compiled File Providers - |-------------------------------------------------------------------------- - | - | Here you may list service providers which define a "compiles" function - | that returns additional files that should be compiled, providing an - | easy way to get common files from any packages you are utilizing. - | - */ - - 'providers' => [ - // - ], - -]; diff --git a/config/database.php b/config/database.php index 88713853e..a0adc26da 100644 --- a/config/database.php +++ b/config/database.php @@ -1,30 +1,9 @@ PDO::FETCH_CLASS, - /* |-------------------------------------------------------------------------- | Default Database Connection Name @@ -58,34 +37,46 @@ 'sqlite' => [ 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), ], 'mysql' => [ 'driver' => 'mysql', - 'host' => env('DB_HOST', 'localhost'), + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', + 'prefix_indexes' => true, 'strict' => false, 'engine' => null, + // Following was added in 5.8, not sure if needed. + // 'options' => extension_loaded('pdo_mysql') ? array_filter([ + // PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + // ]) : [], ], 'pgsql' => [ 'driver' => 'pgsql', - 'host' => env('DB_HOST', 'localhost'), + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', + 'prefix_indexes' => true, 'schema' => 'public', + 'sslmode' => 'prefer', ], 'redis' => [ @@ -116,20 +107,34 @@ |-------------------------------------------------------------------------- | | Redis is an open source, fast, and advanced key-value store that also - | provides a richer set of commands than a typical key-value systems + | provides a richer body of commands than a typical key-value system | such as APC or Memcached. Laravel makes it easy to dig right in. | */ 'redis' => [ - 'cluster' => false, + 'client' => env('REDIS_CLIENT', 'predis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'predis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], 'default' => [ + 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', 'localhost'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), - 'database' => 0, + 'database' => env('REDIS_DB', 0), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', 6379), + 'database' => env('REDIS_CACHE_DB', 1), ], ], diff --git a/config/filesystems.php b/config/filesystems.php index 37a4d1b0a..4cec32d53 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -8,14 +8,12 @@ |-------------------------------------------------------------------------- | | Here you may specify the default filesystem disk that should be used - | by the framework. A "local" driver, as well as a variety of cloud - | based drivers are available for your choosing. Just store away! - | - | Supported: "local", "ftp", "s3", "rackspace" + | by the framework. The "local" disk, as well as a variety of cloud + | based disks are available to your application. Just store away! | */ - 'default' => env('STORAGE_DRIVER', 's3'), + 'default' => env('FILESYSTEM_DRIVER', 'local'), /* |-------------------------------------------------------------------------- @@ -28,7 +26,7 @@ | */ - 'cloud' => 's3', + 'cloud' => env('FILESYSTEM_CLOUD', 's3'), /* |-------------------------------------------------------------------------- @@ -39,6 +37,8 @@ | may even configure multiple disks of the same driver. Defaults have | been setup for each driver as an example of the required options. | + | Supported Drivers: "local", "ftp", "sftp", "s3", "rackspace" + | */ 'disks' => [ @@ -57,12 +57,12 @@ 's3' => [ 'driver' => 's3', - 'key' => env('AWS_ACCESS_KEY'), - 'secret' => env('AWS_SECRET_KEY'), - 'region' => env('AWS_REGION', 'us-east-1'), - 'bucket' => env('S3_BUCKET'), + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_S3_REGION', 'us-east-1'), + 'bucket' => env('AWS_S3_BUCKET'), 'base_url' => 'https://s3-external-1.amazonaws.com', - 'public_url' => env('S3_URL'), + 'public_url' => env('AWS_S3_URL'), ], ], diff --git a/config/hashing.php b/config/hashing.php new file mode 100644 index 000000000..842577087 --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 1024, + 'threads' => 2, + 'time' => 2, + ], + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 000000000..d09cd7d29 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,94 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['daily'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => 'debug', + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => 'debug', + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => 'critical', + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => 'debug', + 'handler' => SyslogUdpHandler::class, + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => 'debug', + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => 'debug', + ], + ], + +]; diff --git a/config/mail.php b/config/mail.php index a07658856..6f8469f82 100644 --- a/config/mail.php +++ b/config/mail.php @@ -11,8 +11,8 @@ | sending of e-mail. You may specify which one you're using throughout | your application here. By default, Laravel is setup for SMTP mail. | - | Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill", - | "ses", "sparkpost", "log" + | Supported: "smtp", "sendmail", "mailgun", "mandrill", "ses", + | "sparkpost", "postmark", "log", "array" | */ @@ -55,7 +55,10 @@ | */ - 'from' => ['address' => null, 'name' => null], + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], /* |-------------------------------------------------------------------------- @@ -83,30 +86,51 @@ 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + /* |-------------------------------------------------------------------------- - | SMTP Server Password + | Sendmail System Path |-------------------------------------------------------------------------- | - | 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. + | 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. | */ - 'password' => env('MAIL_PASSWORD'), + 'sendmail' => '/usr/sbin/sendmail -bs', /* |-------------------------------------------------------------------------- - | Sendmail System Path + | Markdown Mail Settings |-------------------------------------------------------------------------- | - | 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. + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! | */ - 'sendmail' => '/usr/sbin/sendmail -bs', + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + + /* + |-------------------------------------------------------------------------- + | Log Channel + |-------------------------------------------------------------------------- + | + | If you are using the "log" driver, you may specify the logging channel + | if you prefer to keep mail messages separate from other log entries + | for simpler reading. Otherwise, the default channel will be used. + | + */ + + 'log_channel' => env('MAIL_LOG_CHANNEL'), ]; diff --git a/config/queue.php b/config/queue.php index e62d33194..aa8f4cf48 100644 --- a/config/queue.php +++ b/config/queue.php @@ -4,18 +4,16 @@ /* |-------------------------------------------------------------------------- - | Default Queue Driver + | Default Queue Connection Name |-------------------------------------------------------------------------- | | The Laravel queue API supports a variety of back-ends via an unified | API, giving you convenient access to each back-end using the same - | syntax for each one. Here you may set the default queue driver. - | - | Supported: "null", "sync", "database", "beanstalkd", "sqs", "redis" + | syntax for every one. Here you may define a default connection. | */ - 'default' => env('QUEUE_DRIVER', 'sync'), + 'default' => env('QUEUE_CONNECTION', 'sync'), /* |-------------------------------------------------------------------------- @@ -26,6 +24,8 @@ | is used by your application. A default configuration has been added | for each back-end shipped with Laravel. You are free to add more. | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | */ 'connections' => [ @@ -50,18 +50,19 @@ 'sqs' => [ 'driver' => 'sqs', - 'key' => env('AWS_ACCESS_KEY'), - 'secret' => env('AWS_SECRET_KEY'), + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'prefix' => env('SQS_PREFIX'), 'queue' => env('SQS_DEFAULT_QUEUE'), - 'region' => env('AWS_REGION', 'us-east-1'), + 'region' => env('AWS_SQS_REGION', 'us-east-1'), ], 'redis' => [ 'driver' => 'redis', 'connection' => 'default', - 'queue' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), 'retry_after' => 90, + 'block_for' => null, ], ], diff --git a/config/services.php b/config/services.php index 0bac81049..8a3b4a770 100644 --- a/config/services.php +++ b/config/services.php @@ -17,6 +17,7 @@ 'mailgun' => [ 'domain' => env('MAILGUN_DOMAIN'), 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), ], 'mandrill' => [ @@ -46,9 +47,9 @@ ], 'ses' => [ - 'key' => env('SES_KEY'), - 'secret' => env('SES_SECRET'), - 'region' => 'us-east-1', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_REGION', 'us-east-1'), ], 'sparkpost' => [ @@ -59,6 +60,10 @@ 'model' => Rogue\User::class, 'key' => env('STRIPE_KEY'), 'secret' => env('STRIPE_SECRET'), + 'webhook' => [ + 'secret' => env('STRIPE_WEBHOOK_SECRET'), + 'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300), + ], ], 'slack' => [ diff --git a/config/session.php b/config/session.php index 03731b13f..fbb9b4d76 100644 --- a/config/session.php +++ b/config/session.php @@ -1,5 +1,7 @@ 120, + 'lifetime' => env('SESSION_LIFETIME', 120), 'expire_on_close' => false, @@ -70,7 +72,7 @@ | */ - 'connection' => null, + 'connection' => env('SESSION_CONNECTION', null), /* |-------------------------------------------------------------------------- @@ -85,6 +87,19 @@ 'table' => 'sessions', + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | When using the "apc", "memcached", or "dynamodb" session drivers you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + */ + + 'store' => env('SESSION_STORE', null), + /* |-------------------------------------------------------------------------- | Session Sweeping Lottery @@ -109,7 +124,10 @@ | */ - 'cookie' => 'laravel_session', + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), /* |-------------------------------------------------------------------------- @@ -148,7 +166,7 @@ | */ - 'secure' => false, + 'secure' => env('SESSION_SECURE_COOKIE', false), /* |-------------------------------------------------------------------------- @@ -163,4 +181,19 @@ 'http_only' => true, + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | do not enable this as other CSRF protection services are in place. + | + | Supported: "lax", "strict" + | + */ + + 'same_site' => null, + ]; diff --git a/config/trustedproxy.php b/config/trustedproxy.php index 2f29bb34f..822472789 100644 --- a/config/trustedproxy.php +++ b/config/trustedproxy.php @@ -1,27 +1,50 @@ '*', // [,], '*', ',' + + /* + * To trust one or more specific proxies that connect + * directly to your server, use an array or a string separated by comma of IP addresses: + */ + // 'proxies' => ['192.168.1.1'], + // 'proxies' => '192.168.1.1, 192.168.1.2', + + /* + * Or, to trust all proxies that connect + * directly to your server, use a "*" + */ + // 'proxies' => '*', + + /* + * Which headers to use to detect proxy related data (For, Host, Proto, Port) + * + * Options include: * - * It will mean that $request->getClientIp() always gets the originating client IP, - * no matter how many proxies that client's request has subsequently passed through. + * - Illuminate\Http\Request::HEADER_X_FORWARDED_ALL (use all x-forwarded-* headers to establish trust) + * - Illuminate\Http\Request::HEADER_FORWARDED (use the FORWARDED header to establish trust) + * - Illuminate\Http\Request::HEADER_X_FORWARDED_AWS_ELB (If you are using AWS Elastic Load Balancer) + * + * - 'HEADER_X_FORWARDED_ALL' (use all x-forwarded-* headers to establish trust) + * - 'HEADER_FORWARDED' (use the FORWARDED header to establish trust) + * - 'HEADER_X_FORWARDED_AWS_ELB' (If you are using AWS Elastic Load Balancer) + * + * @link https://symfony.com/doc/current/deployment/proxies.html */ - 'proxies' => $trustedProxies, + 'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL, + ]; diff --git a/config/view.php b/config/view.php index e193ab61d..de7891207 100644 --- a/config/view.php +++ b/config/view.php @@ -28,6 +28,9 @@ | */ - 'compiled' => realpath(storage_path('framework/views')), + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), ]; diff --git a/database/.gitignore b/database/.gitignore index 9b1dffd90..97fc97677 100644 --- a/database/.gitignore +++ b/database/.gitignore @@ -1 +1,2 @@ *.sqlite +*.sqlite-journal diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index 65acdd26a..9653d289e 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -1,5 +1,7 @@ define(Action::class, function (Generator $faker) { return [ - 'name' => title_case($this->faker->unique()->words(3, true)), + 'name' => Str::title($this->faker->unique()->words(3, true)), 'campaign_id' => factory(Campaign::class)->create()->id, 'post_type' => 'photo', 'action_type' => $this->faker->randomElement(ActionType::all()), @@ -165,10 +168,10 @@ return [ 'northstar_id' => $faker->northstar_id, - 'access_token' => str_random(1024), - 'access_token_expiration' => str_random(11), - 'refresh_token' => str_random(1024), - 'remember_token' => str_random(10), + 'access_token' => Str::random(1024), + 'access_token_expiration' => Str::random(11), + 'refresh_token' => Str::random(1024), + 'remember_token' => Str::random(10), 'role' => 'user', ]; }); @@ -184,7 +187,7 @@ // Campaign Factory $factory->define(Campaign::class, function (Generator $faker) { return [ - 'internal_title' => title_case($faker->unique()->catchPhrase), + 'internal_title' => Str::title($faker->unique()->catchPhrase), 'cause' => $faker->randomElements(Cause::all(), rand(1, 5)), 'impact_doc' => 'https://www.google.com/', // By default, we create an "open" campaign. @@ -203,7 +206,7 @@ // Group Type Factory $factory->define(GroupType::class, function (Generator $faker) { return [ - 'name' => title_case($faker->unique()->company), + 'name' => Str::title($faker->unique()->company), 'filter_by_state' => false, ]; }); @@ -214,6 +217,6 @@ 'group_type_id' => function () { return factory(GroupType::class)->create()->id; }, - 'name' => title_case($faker->unique()->company), + 'name' => Str::title($faker->unique()->company), ]; }); diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index 25b73fa66..2abb69afb 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -10,7 +10,7 @@ class DatabaseSeeder extends Seeder { /** - * Run the database seeds. + * Seed the application's database. * * @return void */ @@ -99,7 +99,7 @@ public function run() // Create 5-10 signups with rejected posts, from troublemakers! factory(Signup::class, rand(10, 20))->create(['campaign_id' => $campaign->id]) - ->each(function (Signup $signup) use ($photoAction, $textAction) { + ->each(function (Signup $signup) use ($photoAction) { $signup->posts()->save(factory(Post::class)->states('photo', 'rejected')->create([ 'action_id' => $photoAction->id, 'signup_id' => $signup->id, diff --git a/docs/development/testing.md b/docs/development/testing.md index a5ecd251e..354f02b9d 100644 --- a/docs/development/testing.md +++ b/docs/development/testing.md @@ -9,11 +9,6 @@ You may run unit tests locally using [PHPUnit](https://laravel.com/docs/5.5/http $ phpunit $ npm test -And our functional test suite can be run with [Laravel Dusk](https://laravel.com/docs/5.5/dusk): - - $ cp .env.dusk.local.example .env.dusk.local # and add any missing values! - $ dusk - ### Performance testing Performance & debug information is available at [`/__clockwork`](http://rogue.test/__clockwork), or using the [Chrome Extension](https://chrome.google.com/webstore/detail/clockwork/dmggabnehkmmfmdffgajcflpdjlnoemp). diff --git a/phpunit.dusk.xml b/phpunit.dusk.xml deleted file mode 100644 index 60392c932..000000000 --- a/phpunit.dusk.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - ./tests/Browser - - - - - ./app - - - diff --git a/phpunit.xml b/phpunit.xml index ca8a593f2..f286cba68 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,7 +1,7 @@ - - - - - - - - - + + + + + + + + + + + + diff --git a/public/.htaccess b/public/.htaccess index 903f6392c..b75525bed 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -1,20 +1,21 @@ - Options -MultiViews + Options -MultiViews -Indexes RewriteEngine On + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule ^(.*)/$ /$1 [L,R=301] + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] - - # Handle Authorization Header - RewriteCond %{HTTP:Authorization} . - RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] diff --git a/public/index.php b/public/index.php index c5820533b..56778d18b 100644 --- a/public/index.php +++ b/public/index.php @@ -4,8 +4,9 @@ * Laravel - A PHP Framework For Web Artisans * * @package Laravel - * @author Taylor Otwell + * @author Taylor Otwell */ +define('LARAVEL_START', microtime(true)); /* |-------------------------------------------------------------------------- @@ -15,11 +16,11 @@ | Composer provides a convenient, automatically generated class loader for | our application. We just need to utilize it! We'll simply require it | into the script here so that we don't have to worry about manual -| loading any of our classes later on. It feels nice to relax. +| loading any of our classes later on. It feels great to relax. | */ -require __DIR__.'/../bootstrap/autoload.php'; +require __DIR__.'/../vendor/autoload.php'; /* |-------------------------------------------------------------------------- diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php index e5544d201..bf6caf6ed 100644 --- a/resources/lang/en/passwords.php +++ b/resources/lang/en/passwords.php @@ -13,7 +13,7 @@ | */ - 'password' => 'Passwords must be at least six characters and match the confirmation.', + 'password' => 'Passwords must be at least eight characters and match the confirmation.', 'reset' => 'Your password has been reset!', 'sent' => 'We have e-mailed your password reset link!', 'token' => 'This password reset token is invalid.', diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index 9cfb92a04..e1d879f33 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -13,74 +13,109 @@ | */ - 'accepted' => 'The :attribute must be accepted.', - 'active_url' => 'The :attribute is not a valid URL.', - 'after' => 'The :attribute must be a date after :date.', - 'alpha' => 'The :attribute may only contain letters.', - 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', - 'alpha_num' => 'The :attribute may only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'before' => 'The :attribute must be a date before :date.', - 'between' => [ + 'accepted' => 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ 'numeric' => 'The :attribute must be between :min and :max.', - 'file' => 'The :attribute must be between :min and :max kilobytes.', - 'string' => 'The :attribute must be between :min and :max characters.', - 'array' => 'The :attribute must have between :min and :max items.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', ], - 'boolean' => 'The :attribute field must be true or false.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'date' => 'The :attribute is not a valid date.', - 'date_format' => 'The :attribute does not match the format :format.', - 'different' => 'The :attribute and :other must be different.', - 'digits' => 'The :attribute must be :digits digits.', - 'digits_between' => 'The :attribute must be between :min and :max digits.', - 'dimensions' => 'The :attribute size is invalid: must be at least :min_widthx:min_height and no larger than :max_widthx:max_height.', - 'distinct' => 'The :attribute field has a duplicate value.', - 'email' => 'The :attribute must be a valid email address.', - 'exists' => 'The selected :attribute is invalid.', - 'file' => 'The :attribute must be a file.', - 'filled' => 'The :attribute field is required.', - 'image' => 'The :attribute must be an image.', - 'in' => 'The selected :attribute is invalid.', - 'in_array' => 'The :attribute field does not exist in :other.', - 'integer' => 'The :attribute must be an integer.', - 'ip' => 'The :attribute must be a valid IP address.', - 'json' => 'The :attribute must be a valid JSON string.', - 'max' => [ + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'numeric' => 'The :attribute must be greater than :value.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'string' => 'The :attribute must be greater than :value characters.', + 'array' => 'The :attribute must have more than :value items.', + ], + 'gte' => [ + 'numeric' => 'The :attribute must be greater than or equal :value.', + 'file' => 'The :attribute must be greater than or equal :value kilobytes.', + 'string' => 'The :attribute must be greater than or equal :value characters.', + 'array' => 'The :attribute must have :value items or more.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'numeric' => 'The :attribute must be less than :value.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'string' => 'The :attribute must be less than :value characters.', + 'array' => 'The :attribute must have less than :value items.', + ], + 'lte' => [ + 'numeric' => 'The :attribute must be less than or equal :value.', + 'file' => 'The :attribute must be less than or equal :value kilobytes.', + 'string' => 'The :attribute must be less than or equal :value characters.', + 'array' => 'The :attribute must not have more than :value items.', + ], + 'max' => [ 'numeric' => 'The :attribute may not be greater than :max.', - 'file' => 'The :attribute may not be greater than :max kilobytes.', - 'string' => 'The :attribute may not be greater than :max characters.', - 'array' => 'The :attribute may not have more than :max items.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', ], - 'mimes' => 'The :attribute must be a file of type: :values.', - 'min' => [ + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ 'numeric' => 'The :attribute must be at least :min.', - 'file' => 'The :attribute must be at least :min kilobytes.', - 'string' => 'The :attribute must be at least :min characters.', - 'array' => 'The :attribute must have at least :min items.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', ], - 'not_in' => 'The selected :attribute is invalid.', - 'numeric' => 'The :attribute must be a number.', - 'present' => 'The :attribute field must be present.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values is present.', - 'required_without' => 'The :attribute field is required when :values is not present.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute and :other must match.', - 'size' => [ + 'same' => 'The :attribute and :other must match.', + 'size' => [ 'numeric' => 'The :attribute must be :size.', - 'file' => 'The :attribute must be :size kilobytes.', - 'string' => 'The :attribute must be :size characters.', - 'array' => 'The :attribute must contain :size items.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', ], - 'string' => 'The :attribute must be a string.', - 'timezone' => 'The :attribute must be a valid zone.', - 'unique' => 'The :attribute has already been taken.', - 'url' => 'The :attribute format is invalid.', + 'starts_with' => 'The :attribute must start with one of the following: :values', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute format is invalid.', + 'uuid' => 'The :attribute must be a valid UUID.', /* |-------------------------------------------------------------------------- @@ -104,9 +139,9 @@ | Custom Validation Attributes |-------------------------------------------------------------------------- | - | The following language lines are used to swap attribute place-holders - | with something more reader friendly such as E-Mail Address instead - | of "email". This simply helps us make messages a little cleaner. + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. | */ diff --git a/routes/api.php b/routes/api.php index 537e44bec..5ac4878f1 100644 --- a/routes/api.php +++ b/routes/api.php @@ -10,60 +10,60 @@ */ // Assets -$router->get('images/{hash}', 'Web\ImagesController@show'); +Route::get('images/{hash}', 'Web\ImagesController@show'); // v3 routes -$router->group(['prefix' => 'api/v3', 'middleware' => ['guard:api']], function () { +Route::group(['prefix' => 'api/v3', 'middleware' => ['guard:api']], function () { // signups - $this->post('signups', 'SignupsController@store'); - $this->get('signups', 'SignupsController@index'); - $this->get('signups/{signup}', 'SignupsController@show'); - $this->patch('signups/{signup}', 'SignupsController@update'); - $this->delete('signups/{signup}', 'SignupsController@destroy'); + Route::post('signups', 'SignupsController@store'); + Route::get('signups', 'SignupsController@index'); + Route::get('signups/{signup}', 'SignupsController@show'); + Route::patch('signups/{signup}', 'SignupsController@update'); + Route::delete('signups/{signup}', 'SignupsController@destroy'); // posts - $this->post('posts', 'PostsController@store'); - $this->get('posts', 'PostsController@index'); - $this->get('posts/{post}', 'PostsController@show'); - $this->patch('posts/{post}', 'PostsController@update'); - $this->delete('posts/{post}', 'PostsController@destroy'); + Route::post('posts', 'PostsController@store'); + Route::get('posts', 'PostsController@index'); + Route::get('posts/{post}', 'PostsController@show'); + Route::patch('posts/{post}', 'PostsController@update'); + Route::delete('posts/{post}', 'PostsController@destroy'); // reactions - $this->post('posts/{post}/reactions', 'ReactionController@store'); - $this->get('posts/{post}/reactions', 'ReactionController@index'); + Route::post('posts/{post}/reactions', 'ReactionController@store'); + Route::get('posts/{post}/reactions', 'ReactionController@index'); // reviews - $this->post('posts/{post}/reviews', 'ReviewsController@reviews'); + Route::post('posts/{post}/reviews', 'ReviewsController@reviews'); // tag - $this->post('posts/{post}/tags', 'TagsController@store'); + Route::post('posts/{post}/tags', 'TagsController@store'); // images - $this->post('posts/{post}/rotate', 'RotationController@update'); + Route::post('posts/{post}/rotate', 'RotationController@update'); // events - $this->get('events', 'EventsController@index'); + Route::get('events', 'EventsController@index'); // campaigns - $this->get('campaigns', 'CampaignsController@index'); - $this->get('campaigns/{campaign}', 'CampaignsController@show'); - $this->patch('campaigns/{campaign}', 'CampaignsController@update'); + Route::get('campaigns', 'CampaignsController@index'); + Route::get('campaigns/{campaign}', 'CampaignsController@show'); + Route::patch('campaigns/{campaign}', 'CampaignsController@update'); // actions - $this->get('actions', 'ActionsController@index'); - $this->get('actions/{action}', 'ActionsController@show'); + Route::get('actions', 'ActionsController@index'); + Route::get('actions/{action}', 'ActionsController@show'); // action stats - $this->get('action-stats', 'ActionStatsController@index'); + Route::get('action-stats', 'ActionStatsController@index'); // groups - $this->get('groups', 'GroupsController@index'); - $this->get('groups/{group}', 'GroupsController@show'); + Route::get('groups', 'GroupsController@index'); + Route::get('groups/{group}', 'GroupsController@show'); // group types - $this->get('group-types', 'GroupTypesController@index'); - $this->get('group-types/{groupType}', 'GroupTypesController@show'); + Route::get('group-types', 'GroupTypesController@index'); + Route::get('group-types/{groupType}', 'GroupTypesController@show'); // users - $this->delete('users/{id}', 'UsersController@destroy'); + Route::delete('users/{id}', 'UsersController@destroy'); }); diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore index d6b7ef32c..01e4a6cda 100644 --- a/storage/framework/cache/.gitignore +++ b/storage/framework/cache/.gitignore @@ -1,2 +1,3 @@ * +!data/ !.gitignore diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore new file mode 100644 index 000000000..d6b7ef32c --- /dev/null +++ b/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tests/Http/CampaignTest.php b/tests/Http/CampaignTest.php index d56e6c663..0d7e19318 100644 --- a/tests/Http/CampaignTest.php +++ b/tests/Http/CampaignTest.php @@ -7,6 +7,7 @@ use Rogue\Types\Cause; use Rogue\Models\Campaign; use Rogue\Models\GroupType; +use Illuminate\Support\Facades\Artisan; class CampaignTest extends Testcase { @@ -186,7 +187,7 @@ public function testCampaignCursorWithOrderBy() $five = $this->createCampaignWithPosts(5); // We need these counter caches for this to work properly: - $this->artisan('rogue:recount'); + Artisan::call('rogue:recount'); // First, let's get the three campaigns with the most pending posts: $endpoint = 'api/v3/campaigns?orderBy=pending_count,desc&limit=3'; diff --git a/tests/Http/PostTest.php b/tests/Http/PostTest.php index 5b7a06084..476355c92 100644 --- a/tests/Http/PostTest.php +++ b/tests/Http/PostTest.php @@ -1211,21 +1211,25 @@ public function testPostShowAsNonAdminNonOwner() { // Anon user should not be able to see a pending post if it doesn't belong to them and if they're not an admin. $post = factory(Post::class)->create(); + $response = $this->getJson('api/v3/posts/' . $post->id); $response->assertStatus(403); // Anon user should not be able to see a rejected post if it doesn't belong to them and if they're not an admin. $post = factory(Post::class)->states('photo', 'rejected')->create(); + $response = $this->getJson('api/v3/posts/' . $post->id); $response->assertStatus(403); // Anon user is able to see an accepted post even if it doesn't belong to them and if they're not an admin. $post = factory(Post::class)->states('photo', 'accepted')->create(); + $response = $this->getJson('api/v3/posts/' . $post->id); $response->assertStatus(200); + $response->assertJsonStructure([ 'data' => [ 'id', @@ -1260,12 +1264,15 @@ public function testPostShowAsNonAdminNonOwner() public function testPostShowAsAdmin() { $post = factory(Post::class)->create(); + $response = $this->withAdminAccessToken()->getJson('api/v3/posts/' . $post->id); $response->assertStatus(200); + $this->assertPostStructure($response); $json = $response->json(); + $this->assertEquals($post->id, $json['data']['id']); } @@ -1488,6 +1495,8 @@ public function testNonStaffUpdatePost() 'text' => 'new caption', ]); + $response->assertStatus(200); + $response->assertJson([ 'data' => [ 'media' => [ diff --git a/tests/Http/SignupTest.php b/tests/Http/SignupTest.php index 1386faedf..81e3f7495 100644 --- a/tests/Http/SignupTest.php +++ b/tests/Http/SignupTest.php @@ -7,6 +7,7 @@ use Rogue\Models\User; use Rogue\Models\Group; use Rogue\Models\Signup; +use Illuminate\Support\Str; use DoSomething\Gateway\Blink; class SignupTest extends TestCase @@ -93,7 +94,7 @@ public function testCreatingASignupWithGroupId() public function testCreatingASignupWithoutActivityScope() { $northstarId = $this->faker->northstar_id; - $campaignId = str_random(22); + $campaignId = Str::random(22); // Mock the Blink API call. $this->mock(Blink::class)->shouldReceive('userSignup'); @@ -622,7 +623,7 @@ public function testSignupIndexWithIncludedUser() public function testSignupsIndexAsAdminWithFilters() { $northstarId = $this->faker->unique()->northstar_id; - $campaignId = str_random(22); + $campaignId = Str::random(22); // Create two signups factory(Signup::class, 2)->create([ @@ -632,7 +633,7 @@ public function testSignupsIndexAsAdminWithFilters() // Create three more signups with different northstar_id & campaign_id $secondNorthstarId = $this->faker->unique()->northstar_id; - $secondCampaignId = str_random(22); + $secondCampaignId = Str::random(22); factory(Signup::class, 3)->create([ 'northstar_id' => $secondNorthstarId, diff --git a/tests/Http/TagsTest.php b/tests/Http/TagsTest.php index f319f4869..7496426fc 100644 --- a/tests/Http/TagsTest.php +++ b/tests/Http/TagsTest.php @@ -3,7 +3,6 @@ namespace Tests\Http; use Tests\TestCase; -use Rogue\Models\Tag; use Rogue\Models\Post; class TagsTest extends TestCase @@ -60,6 +59,7 @@ public function testTaggingAPostWithoutActivityScope() ]); $response->assertStatus(401); + $this->assertEquals('Unauthenticated.', $response->decodeResponseJson()['message']); } @@ -92,8 +92,10 @@ public function testAddMultipleTagsAndDeleteOne() { // Create a post with tags. $post = factory(Post::class)->create(); + $post->tag('Good Submission'); $post->tag('Tag To Delete'); + $post = $post->fresh(); // Make sure both tags actually exist @@ -107,7 +109,9 @@ public function testAddMultipleTagsAndDeleteOne() // Make sure that the tag is deleted, but the other tag is still there $post = $post->fresh(); + $response->assertStatus(200); + $this->assertContains('Good Submission', $post->tagNames()); $this->assertNotContains('Tag To Delete', $post->tagNames()); diff --git a/tests/TestCase.php b/tests/TestCase.php index 87efb5e32..03e7afd81 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -2,6 +2,7 @@ namespace Tests; +use Illuminate\Support\Arr; use PHPUnit\Framework\Assert; use DoSomething\Gateway\Testing\WithOAuthTokens; use Illuminate\Foundation\Testing\RefreshDatabase; @@ -24,7 +25,7 @@ abstract class TestCase extends BaseTestCase * * @return void */ - public function setUp() + public function setUp(): void { parent::setUp(); @@ -43,11 +44,11 @@ public function seeJsonField($response, $key, $expected = null) { $data = $response->decodeResponseJson(); - if (! array_has($data, $key)) { + if (! Arr::has($data, $key)) { Assert::fail('Expected to find JSON response at '.$key); } - $actual = array_get($data, $key); + $actual = Arr::get($data, $key); if ($expected !== null && $actual !== $expected) { Assert::fail('Expected to find "'.$expected.'" in response at '.$key.', found: '.$actual); diff --git a/tests/WithMocks.php b/tests/WithMocks.php index de26121b4..ccc924d4c 100644 --- a/tests/WithMocks.php +++ b/tests/WithMocks.php @@ -2,7 +2,6 @@ namespace Tests; -use Mockery; use Carbon\Carbon; use Rogue\Services\GraphQL; use DoSomething\Gateway\Northstar; @@ -52,13 +51,16 @@ public function configureMocks() // GraphQL Mock $this->graphqlMock = $this->mock(GraphQL::class); + $this->graphqlMock->shouldReceive('getCampaignWebsiteByCampaignId')->andReturn([ 'title' => 'Test Example Campaign', 'slug' => 'test-example-campaign', ]); + $this->graphqlMock->shouldReceive('getSchoolById')->andReturn([ 'name' => 'San Dimas High School', ]); + $this->graphqlMock->shouldReceive('getUserById')->andReturn([ 'displayName' => 'Daisy D.', ]); @@ -76,19 +78,4 @@ public function mockTime($time = 'now') return Carbon::getTestNow(); } - - /** - * Mock Container dependencies. - * - * @param string $class - Class to be mocked. - * - * @return \Mockery\MockInterface - */ - public function mock($class) - { - $mock = Mockery::mock($class); - $this->app->instance($class, $mock); - - return $mock; - } }