Merge branch 'develop' into 5.8-dev

This commit is contained in:
James Cole 2022-09-24 07:03:03 +02:00
commit 416fe0c147
No known key found for this signature in database
GPG Key ID: B49A324B7EAD6D80
16 changed files with 331 additions and 305 deletions

View File

@ -26,7 +26,10 @@ namespace FireflyIII\Handlers\Events;
use Exception;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Mail\AccessTokenCreatedMail;
use FireflyIII\Notifications\Admin\TestNotification;
use FireflyIII\Notifications\User\NewAccessToken;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Support\Facades\Notification;
use Laravel\Passport\Events\AccessTokenCreated;
use Log;
use Mail;
@ -42,45 +45,18 @@ class APIEventHandler
*
* @param AccessTokenCreated $event
*
* @return bool
* @throws FireflyException
* @deprecated
*/
public function accessTokenCreated(AccessTokenCreated $event): bool
public function accessTokenCreated(AccessTokenCreated $event): void
{
Log::debug(__METHOD__);
/** @var UserRepositoryInterface $repository */
$repository = app(UserRepositoryInterface::class);
$user = $repository->find((int) $event->userId);
if (null !== $user) {
$email = $user->email;
// if user is demo user, send to owner:
if ($user->hasRole('demo')) {
$email = config('firefly.site_owner');
}
// see if user has alternative email address:
$pref = app('preferences')->getForUser($user, 'remote_guard_alt_email');
if (null !== $pref) {
$email = (string) (is_array($pref->data) ? $email : $pref->data);
}
Log::debug(sprintf('Now in APIEventHandler::accessTokenCreated. Email is %s', $email));
try {
Log::debug('Trying to send message...');
Mail::to($email)->send(new AccessTokenCreatedMail);
} catch (Exception $e) { // @phpstan-ignore-line
Log::debug('Send message failed! :(');
Log::error($e->getMessage());
Log::error($e->getTraceAsString());
Session::flash('error', 'Possible email error: ' . $e->getMessage());
}
Log::debug('If no error above this line, message was sent.');
Notification::send($user, new NewAccessToken);
}
return true;
}
}

View File

@ -45,17 +45,15 @@ class AdminEventHandler
*
* @return bool
*/
public function sendTestMessage(AdminRequestedTestMessage $event): bool
public function sendTestMessage(AdminRequestedTestMessage $event): void
{
/** @var UserRepositoryInterface $repository */
$repository = app(UserRepositoryInterface::class);
// do some validation.
if (!$repository->hasRole($event->user, 'owner')) {
return true;
return;
}
Notification::send($event->user, new TestNotification($event->user->email));
return true;
}
}

View File

@ -27,7 +27,12 @@ use Exception;
use FireflyIII\Events\RequestedReportOnJournals;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Mail\ReportNewJournalsMail;
use FireflyIII\Models\TransactionGroup;
use FireflyIII\Notifications\User\NewAccessToken;
use FireflyIII\Notifications\User\TransactionCreation;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\Transformers\TransactionGroupTransformer;
use Illuminate\Support\Facades\Notification;
use Log;
use Mail;
@ -41,36 +46,31 @@ class AutomationHandler
* Respond to the creation of X journals.
*
* @param RequestedReportOnJournals $event
*
* @return bool
* @deprecated
*/
public function reportJournals(RequestedReportOnJournals $event): bool
public function reportJournals(RequestedReportOnJournals $event): void
{
Log::debug('In reportJournals.');
$sendReport = config('firefly.send_report_journals');
if (false === $sendReport) {
return true;
return;
}
Log::debug('In reportJournals.');
/** @var UserRepositoryInterface $repository */
$repository = app(UserRepositoryInterface::class);
$user = $repository->find($event->userId);
if (null !== $user && 0 !== $event->groups->count()) {
try {
Log::debug('Trying to mail...');
Mail::to($user->email)->send(new ReportNewJournalsMail($event->groups));
} catch (Exception $e) { // @phpstan-ignore-line
Log::debug('Send message failed! :(');
Log::error($e->getMessage());
Log::error($e->getTraceAsString());
}
Log::debug('Done!');
if (null === $user || 0 === $event->groups->count()) {
return;
}
return true;
// transform groups into array:
/** @var TransactionGroupTransformer $transformer */
$transformer = app(TransactionGroupTransformer::class);
$groups = [];
/** @var TransactionGroup $group */
foreach ($event->groups as $group) {
$groups[] = $transformer->transformObject($group);
}
Notification::send($user, new TransactionCreation($groups));
}
}

View File

@ -39,8 +39,6 @@ class BillEventHandler
/**
* @param WarnUserAboutBill $event
* @return void
* @throws \FireflyIII\Exceptions\FireflyException
* @deprecated
*/
public function warnAboutBill(WarnUserAboutBill $event): void
{

View File

@ -33,16 +33,18 @@ use FireflyIII\Events\RequestedNewPassword;
use FireflyIII\Events\UserChangedEmail;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Mail\ConfirmEmailChangeMail;
use FireflyIII\Mail\NewIPAddressWarningMail;
use FireflyIII\Mail\RegisteredUser as RegisteredUserMail;
use FireflyIII\Mail\RequestedNewPassword as RequestedNewPasswordMail;
use FireflyIII\Mail\UndoEmailChangeMail;
use FireflyIII\Models\GroupMembership;
use FireflyIII\Models\UserGroup;
use FireflyIII\Models\UserRole;
use FireflyIII\Notifications\User\UserLogin;
use FireflyIII\Notifications\User\UserNewPassword;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\User;
use Illuminate\Auth\Events\Login;
use Illuminate\Support\Facades\Notification;
use Log;
use Mail;
@ -62,7 +64,7 @@ class UserEventHandler
*
* @return bool
*/
public function attachUserRole(RegisteredUser $event): bool
public function attachUserRole(RegisteredUser $event): void
{
/** @var UserRepositoryInterface $repository */
$repository = app(UserRepositoryInterface::class);
@ -72,19 +74,16 @@ class UserEventHandler
Log::debug('User count is one, attach role.');
$repository->attachRole($event->user, 'owner');
}
return true;
}
/**
* @param RegisteredUser $event
* @return bool
*/
public function createExchangeRates(RegisteredUser $event): bool {
public function createExchangeRates(RegisteredUser $event): void
{
$seeder = new ExchangeRateSeeder;
$seeder->run();
return true;
}
/**
@ -94,7 +93,7 @@ class UserEventHandler
*
* @return bool
*/
public function checkSingleUserIsAdmin(Login $event): bool
public function checkSingleUserIsAdmin(Login $event): void
{
/** @var UserRepositoryInterface $repository */
$repository = app(UserRepositoryInterface::class);
@ -117,8 +116,6 @@ class UserEventHandler
// give user the role
$repository->attachRole($user, 'owner');
}
return true;
}
/**
@ -127,7 +124,7 @@ class UserEventHandler
* @return bool
* @throws FireflyException
*/
public function createGroupMembership(RegisteredUser $event): bool
public function createGroupMembership(RegisteredUser $event): void
{
$user = $event->user;
$groupExists = true;
@ -160,8 +157,6 @@ class UserEventHandler
);
$user->user_group_id = $group->id;
$user->save();
return true;
}
/**
@ -172,7 +167,7 @@ class UserEventHandler
* @return bool
* @throws FireflyException
*/
public function demoUserBackToEnglish(Login $event): bool
public function demoUserBackToEnglish(Login $event): void
{
/** @var UserRepositoryInterface $repository */
$repository = app(UserRepositoryInterface::class);
@ -185,15 +180,12 @@ class UserEventHandler
app('preferences')->setForUser($user, 'locale', 'equal');
app('preferences')->mark();
}
return true;
}
/**
* @param DetectedNewIPAddress $event
*
* @throws FireflyException
* @deprecated
*/
public function notifyNewIPAddress(DetectedNewIPAddress $event): void
{
@ -207,21 +199,10 @@ class UserEventHandler
$list = app('preferences')->getForUser($user, 'login_ip_history', [])->data;
// see if user has alternative email address:
$pref = app('preferences')->getForUser($user, 'remote_guard_alt_email');
if (null !== $pref) {
$email = $pref->data;
}
/** @var array $entry */
foreach ($list as $index => $entry) {
if (false === $entry['notified']) {
try {
Mail::to($email)->send(new NewIPAddressWarningMail($ipAddress));
} catch (Exception $e) { // @phpstan-ignore-line
Log::error($e->getMessage());
}
Notification::send($user, new UserLogin($ipAddress));
}
$list[$index]['notified'] = true;
}
@ -230,41 +211,38 @@ class UserEventHandler
}
/**
* Send email to confirm email change.
* Send email to confirm email change. Will not be made into a notification, because
* this requires some custom fields from the user and not just the "user" object.
*
* @param UserChangedEmail $event
*
* @return bool
* @throws FireflyException
* @deprecated
*/
public function sendEmailChangeConfirmMail(UserChangedEmail $event): bool
public function sendEmailChangeConfirmMail(UserChangedEmail $event): void
{
$newEmail = $event->newEmail;
$oldEmail = $event->oldEmail;
$user = $event->user;
$token = app('preferences')->getForUser($user, 'email_change_confirm_token', 'invalid');
$url = route('profile.confirm-email-change', [$token->data]);
try {
Mail::to($newEmail)->send(new ConfirmEmailChangeMail($newEmail, $oldEmail, $url));
} catch (Exception $e) { // @phpstan-ignore-line
Log::error($e->getMessage());
}
return true;
}
/**
* Send email to be able to undo email change.
* Send email to be able to undo email change. Will not be made into a notification, because
* this requires some custom fields from the user and not just the "user" object.
*
* @param UserChangedEmail $event
*
* @return bool
* @throws FireflyException
* @deprecated
*/
public function sendEmailChangeUndoMail(UserChangedEmail $event): bool
public function sendEmailChangeUndoMail(UserChangedEmail $event): void
{
$newEmail = $event->newEmail;
$oldEmail = $event->oldEmail;
@ -278,53 +256,36 @@ class UserEventHandler
} catch (Exception $e) { // @phpstan-ignore-line
Log::error($e->getMessage());
}
return true;
}
/**
* Send a new password to the user.
* @deprecated
* @param RequestedNewPassword $event
*
* @return bool
*/
public function sendNewPassword(RequestedNewPassword $event): bool
public function sendNewPassword(RequestedNewPassword $event): void
{
$email = $event->user->email;
$ipAddress = $event->ipAddress;
$token = $event->token;
$url = route('password.reset', [$token]);
// send email.
try {
Mail::to($email)->send(new RequestedNewPasswordMail($url, $ipAddress));
} catch (Exception $e) { // @phpstan-ignore-line
Log::error($e->getMessage());
}
return true;
Notification::send($event->user, new UserNewPassword(route('password.reset', [$event->token])));
}
/**
* This method will send the user a registration mail, welcoming him or her to Firefly III.
* This message is only sent when the configuration of Firefly III says so.
*
* TODO this is an admin setting not a variable. Fix that first.
*
* @param RegisteredUser $event
*
* @return bool
* @deprecated
* @throws FireflyException
* @deprecated
*/
public function sendRegistrationMail(RegisteredUser $event): bool
public function sendRegistrationMail(RegisteredUser $event): void
{
$sendMail = config('firefly.send_registration_mail');
if ($sendMail) {
// get the email address
$email = $event->user->email;
$url = route('index');
$email = $event->user->email;
$url = route('index');
// see if user has alternative email address:
$pref = app('preferences')->getForUser($event->user, 'remote_guard_alt_email');
@ -341,8 +302,6 @@ class UserEventHandler
}
}
return true;
}
/**
@ -355,7 +314,7 @@ class UserEventHandler
$user = $event->user;
/** @var array $preference */
if($user->hasRole('demo')) {
if ($user->hasRole('demo')) {
Log::debug('Do not log demo user logins');
return;
}

View File

@ -380,13 +380,19 @@ class CreateRecurringTransactions implements ShouldQueue
// create transaction array and send to factory.
$groupTitle = null;
if ($recurrence->recurrenceTransactions->count() > 1) {
$count = $recurrence->recurrenceTransactions->count();
if ($count > 1) {
/** @var RecurrenceTransaction $first */
$first = $recurrence->recurrenceTransactions()->first();
$groupTitle = $first->description;
}
if(0 === $count) {
Log::error('No transactions to be created in this recurrence. Cannot continue.');
return null;
}
$array = [
'user' => $recurrence->user_id,

View File

@ -30,16 +30,13 @@ class NewAccessToken extends Notification
{
use Queueable;
private string $address;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(string $address)
public function __construct()
{
$this->address = $address;
}
/**
@ -62,8 +59,8 @@ class NewAccessToken extends Notification
public function toMail($notifiable)
{
return (new MailMessage)
->markdown('emails.admin-test', ['email' => $this->address])
->subject((string) trans('email.admin_test_subject'));
->markdown('emails.token-created')
->subject((string) trans('email.access_token_created_subject'));
}
/**

View File

@ -22,7 +22,61 @@ declare(strict_types=1);
namespace FireflyIII\Notifications\User;
class TransactionCreation
{
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Collection;
class TransactionCreation extends Notification
{
use Queueable;
private array $collection;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(array $collection)
{
$this->collection = $collection;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->markdown('emails.report-new-journals', ['transformed' => $this->collection])
->subject((string) trans_choice('email.new_journals_subject', count($this->collection)));
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}

View File

@ -22,7 +22,73 @@ declare(strict_types=1);
namespace FireflyIII\Notifications\User;
class UserLogin
{
use Exception;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class UserLogin extends Notification
{
use Queueable;
private string $ip;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(string $ip)
{
$this->ip = $ip;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
$time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js'));
$host = '';
try {
$hostName = gethostbyaddr($this->ip);
} catch (Exception $e) {
$hostName = $this->ip;
}
if ($hostName !== $this->ip) {
$host = $hostName;
}
return (new MailMessage)
->markdown('emails.new-ip', ['time' => $time, 'ipAddress' => $this->ip, 'host' => $host])
->subject((string) trans('email.login_from_new_ip'));
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}

View File

@ -1,28 +0,0 @@
<?php
declare(strict_types=1);
/*
* UserNewEmail.php
* Copyright (c) 2022 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
namespace FireflyIII\Notifications\User;
class UserNewEmail
{
}

View File

@ -1,28 +0,0 @@
<?php
declare(strict_types=1);
/*
* UserNewEmailUndo.php
* Copyright (c) 2022 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
namespace FireflyIII\Notifications\User;
class UserNewEmailUndo
{
}

View File

@ -22,7 +22,60 @@ declare(strict_types=1);
namespace FireflyIII\Notifications\User;
class UserNewPassword
{
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class UserNewPassword extends Notification
{
use Queueable;
private string $url;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(string $url)
{
$this->url = $url;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->markdown('emails.password', ['url' => $this->url])
->subject((string) trans('email.reset_pw_subject'));
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}

View File

@ -159,7 +159,7 @@ class EventServiceProvider extends ServiceProvider
}
/**
*
* TODO needs a dedicated method.
*/
protected function registerBudgetEvents(): void
{
@ -206,13 +206,10 @@ class EventServiceProvider extends ServiceProvider
}
/**
*
* TODO needs a dedicated (static) method.
*/
protected function registerCreateEvents(): void
{
// in case of repeated piggy banks and/or other problems.
PiggyBank::created(
static function (PiggyBank $piggyBank) {
$repetition = new PiggyBankRepetition;
@ -223,40 +220,6 @@ class EventServiceProvider extends ServiceProvider
$repetition->save();
}
);
Client::created(
static function (Client $oauthClient) {
/** @var UserRepositoryInterface $repository */
$repository = app(UserRepositoryInterface::class);
$user = $repository->find((int) $oauthClient->user_id);
if (null === $user) {
Log::info('OAuth client generated but no user associated.');
return;
}
// HERE WE ARE
Notification::send($event->user, new TestNotification($event->user->email));
$email = $user->email;
// see if user has alternative email address:
$pref = app('preferences')->getForUser($user, 'remote_guard_alt_email');
if (null !== $pref) {
$email = $pref->data;
}
Log::debug(sprintf('Now in EventServiceProvider::registerCreateEvents. Email is %s', $email));
try {
Log::debug('Trying to send message...');
Mail::to($email)->send(new OAuthTokenCreatedMail($oauthClient));
} catch (TypeError|Exception $e) { // @phpstan-ignore-line
Log::debug('Send message failed! :(');
Log::error($e->getMessage());
Log::error($e->getTraceAsString());
Session::flash('error', 'Possible email error: ' . $e->getMessage());
}
Log::debug('If no error above this line, message was sent.');
}
);
}
}

View File

@ -566,6 +566,10 @@ class User extends Authenticatable
if (null !== $pref) {
$email = $pref->data;
}
// if user is demo user, send to owner:
if ($this->hasRole('demo')) {
$email = config('firefly.site_owner');
}
return match ($driver) {
'database' => $this->notifications(),

View File

@ -100,10 +100,10 @@
"pragmarx/google2fa": "^8.0",
"predis/predis": "^2.0",
"psr/log": "<4",
"ramsey/uuid": "^4.4",
"ramsey/uuid": "^4.5",
"rcrowe/twigbridge": "^0.14",
"spatie/data-transfer-object": "^3.8",
"spatie/laravel-ignition": "^1.4",
"spatie/data-transfer-object": "^3.9",
"spatie/laravel-ignition": "^1.5",
"symfony/http-client": "^6.0",
"symfony/mailgun-mailer": "^6.0"
},

146
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "9f9d24b848eb536353b6ffd489b6411d",
"content-hash": "773f4b8dc111cdbdbdc38a66c6f3a3f9",
"packages": [
{
"name": "bacon/bacon-qr-code",
@ -1855,16 +1855,16 @@
},
{
"name": "laravel/framework",
"version": "v9.29.0",
"version": "v9.30.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "585da0913e907fd54941260860ae3d7d4be8e8cb"
"reference": "9533f7926f31939f25a620fbbf545318c18c943f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/585da0913e907fd54941260860ae3d7d4be8e8cb",
"reference": "585da0913e907fd54941260860ae3d7d4be8e8cb",
"url": "https://api.github.com/repos/laravel/framework/zipball/9533f7926f31939f25a620fbbf545318c18c943f",
"reference": "9533f7926f31939f25a620fbbf545318c18c943f",
"shasum": ""
},
"require": {
@ -1941,12 +1941,15 @@
"illuminate/view": "self.version"
},
"require-dev": {
"ably/ably-php": "^1.0",
"aws/aws-sdk-php": "^3.198.1",
"doctrine/dbal": "^2.13.3|^3.1.4",
"fakerphp/faker": "^1.9.2",
"guzzlehttp/guzzle": "^7.2",
"league/flysystem-aws-s3-v3": "^3.0",
"league/flysystem-ftp": "^3.0",
"league/flysystem-path-prefixing": "^3.3",
"league/flysystem-read-only": "^3.3",
"league/flysystem-sftp-v3": "^3.0",
"mockery/mockery": "^1.4.4",
"orchestra/testbench-core": "^7.1",
@ -1954,7 +1957,8 @@
"phpstan/phpstan": "^1.4.7",
"phpunit/phpunit": "^9.5.8",
"predis/predis": "^1.1.9|^2.0",
"symfony/cache": "^6.0"
"symfony/cache": "^6.0",
"symfony/uid": "^6.0"
},
"suggest": {
"ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
@ -1974,6 +1978,8 @@
"laravel/tinker": "Required to use the tinker console command (^2.0).",
"league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).",
"league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).",
"league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).",
"league/flysystem-read-only": "Required to use read-only disks (^3.3)",
"league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).",
"mockery/mockery": "Required to use mocking (^1.4.4).",
"nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
@ -1987,7 +1993,8 @@
"symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).",
"symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).",
"symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).",
"symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)."
"symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).",
"symfony/uid": "Required to generate ULIDs for Eloquent (^6.0)."
},
"type": "library",
"extra": {
@ -2031,20 +2038,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2022-09-09T18:21:21+00:00"
"time": "2022-09-15T13:15:47+00:00"
},
{
"name": "laravel/passport",
"version": "v11.1.0",
"version": "v11.2.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/passport.git",
"reference": "89cc1976a25e2fa53ba8a3773e101189149852fa"
"reference": "fb2a4029c6cf4df1ce0cf79ddbb874508f7a73e9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/passport/zipball/89cc1976a25e2fa53ba8a3773e101189149852fa",
"reference": "89cc1976a25e2fa53ba8a3773e101189149852fa",
"url": "https://api.github.com/repos/laravel/passport/zipball/fb2a4029c6cf4df1ce0cf79ddbb874508f7a73e9",
"reference": "fb2a4029c6cf4df1ce0cf79ddbb874508f7a73e9",
"shasum": ""
},
"require": {
@ -2108,7 +2115,7 @@
"issues": "https://github.com/laravel/passport/issues",
"source": "https://github.com/laravel/passport"
},
"time": "2022-09-05T14:35:34+00:00"
"time": "2022-09-07T13:14:45+00:00"
},
{
"name": "laravel/sanctum",
@ -2237,16 +2244,16 @@
},
{
"name": "laravel/ui",
"version": "v4.0.1",
"version": "v4.0.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/ui.git",
"reference": "c43d29941ee8f41547572968123eadbd81392841"
"reference": "9aa6930c8ae98b2465594d7f14f4ac131bfd6a99"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/ui/zipball/c43d29941ee8f41547572968123eadbd81392841",
"reference": "c43d29941ee8f41547572968123eadbd81392841",
"url": "https://api.github.com/repos/laravel/ui/zipball/9aa6930c8ae98b2465594d7f14f4ac131bfd6a99",
"reference": "9aa6930c8ae98b2465594d7f14f4ac131bfd6a99",
"shasum": ""
},
"require": {
@ -2292,9 +2299,9 @@
"ui"
],
"support": {
"source": "https://github.com/laravel/ui/tree/v4.0.1"
"source": "https://github.com/laravel/ui/tree/v4.0.2"
},
"time": "2022-09-06T14:48:07+00:00"
"time": "2022-09-09T18:20:35+00:00"
},
{
"name": "laravelcollective/html",
@ -2831,16 +2838,16 @@
},
{
"name": "league/flysystem",
"version": "3.3.0",
"version": "3.5.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
"reference": "d8295793b3e2f91aa39e1feb2d5bfce772891ae2"
"reference": "f14993c6e394450ac4649da35264df0544d0234e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/d8295793b3e2f91aa39e1feb2d5bfce772891ae2",
"reference": "d8295793b3e2f91aa39e1feb2d5bfce772891ae2",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f14993c6e394450ac4649da35264df0544d0234e",
"reference": "f14993c6e394450ac4649da35264df0544d0234e",
"shasum": ""
},
"require": {
@ -2902,7 +2909,7 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
"source": "https://github.com/thephpleague/flysystem/tree/3.3.0"
"source": "https://github.com/thephpleague/flysystem/tree/3.5.1"
},
"funding": [
{
@ -2918,7 +2925,7 @@
"type": "tidelift"
}
],
"time": "2022-09-09T11:11:42+00:00"
"time": "2022-09-18T18:23:19+00:00"
},
{
"name": "league/fractal",
@ -3136,16 +3143,16 @@
},
{
"name": "league/uri",
"version": "6.7.1",
"version": "6.7.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri.git",
"reference": "2d7c87a0860f3126a39f44a8a9bf2fed402dcfea"
"reference": "d3b50812dd51f3fbf176344cc2981db03d10fe06"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/uri/zipball/2d7c87a0860f3126a39f44a8a9bf2fed402dcfea",
"reference": "2d7c87a0860f3126a39f44a8a9bf2fed402dcfea",
"url": "https://api.github.com/repos/thephpleague/uri/zipball/d3b50812dd51f3fbf176344cc2981db03d10fe06",
"reference": "d3b50812dd51f3fbf176344cc2981db03d10fe06",
"shasum": ""
},
"require": {
@ -3223,7 +3230,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri/issues",
"source": "https://github.com/thephpleague/uri/tree/6.7.1"
"source": "https://github.com/thephpleague/uri/tree/6.7.2"
},
"funding": [
{
@ -3231,7 +3238,7 @@
"type": "github"
}
],
"time": "2022-06-29T09:48:18+00:00"
"time": "2022-09-13T19:50:42+00:00"
},
{
"name": "league/uri-interfaces",
@ -3572,20 +3579,20 @@
},
{
"name": "nette/utils",
"version": "v3.2.7",
"version": "v3.2.8",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
"reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99"
"reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/utils/zipball/0af4e3de4df9f1543534beab255ccf459e7a2c99",
"reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99",
"url": "https://api.github.com/repos/nette/utils/zipball/02a54c4c872b99e4ec05c4aec54b5a06eb0f6368",
"reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368",
"shasum": ""
},
"require": {
"php": ">=7.2 <8.2"
"php": ">=7.2 <8.3"
},
"conflict": {
"nette/di": "<3.0.6"
@ -3651,9 +3658,9 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
"source": "https://github.com/nette/utils/tree/v3.2.7"
"source": "https://github.com/nette/utils/tree/v3.2.8"
},
"time": "2022-01-24T11:29:14+00:00"
"time": "2022-09-12T23:36:20+00:00"
},
{
"name": "nunomaduro/collision",
@ -5052,20 +5059,20 @@
},
{
"name": "ramsey/uuid",
"version": "4.4.0",
"version": "4.5.1",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
"reference": "373f7bacfcf3de038778ff27dcce5672ddbf4c8a"
"reference": "a161a26d917604dc6d3aa25100fddf2556e9f35d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/373f7bacfcf3de038778ff27dcce5672ddbf4c8a",
"reference": "373f7bacfcf3de038778ff27dcce5672ddbf4c8a",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/a161a26d917604dc6d3aa25100fddf2556e9f35d",
"reference": "a161a26d917604dc6d3aa25100fddf2556e9f35d",
"shasum": ""
},
"require": {
"brick/math": "^0.8 || ^0.9 || ^0.10",
"brick/math": "^0.8.8 || ^0.9 || ^0.10",
"ext-ctype": "*",
"ext-json": "*",
"php": "^8.0",
@ -5086,12 +5093,13 @@
"php-mock/php-mock-mockery": "^1.3",
"php-parallel-lint/php-parallel-lint": "^1.1",
"phpbench/phpbench": "^1.0",
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^0.12",
"phpstan/phpstan-mockery": "^0.12",
"phpstan/phpstan-phpunit": "^0.12",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan": "^1.8",
"phpstan/phpstan-mockery": "^1.1",
"phpstan/phpstan-phpunit": "^1.1",
"phpunit/phpunit": "^8.5 || ^9",
"slevomat/coding-standard": "^7.0",
"ramsey/composer-repl": "^1.4",
"slevomat/coding-standard": "^8.4",
"squizlabs/php_codesniffer": "^3.5",
"vimeo/psalm": "^4.9"
},
@ -5129,7 +5137,7 @@
],
"support": {
"issues": "https://github.com/ramsey/uuid/issues",
"source": "https://github.com/ramsey/uuid/tree/4.4.0"
"source": "https://github.com/ramsey/uuid/tree/4.5.1"
},
"funding": [
{
@ -5141,7 +5149,7 @@
"type": "tidelift"
}
],
"time": "2022-08-05T17:58:37+00:00"
"time": "2022-09-16T03:22:46+00:00"
},
{
"name": "rcrowe/twigbridge",
@ -5283,16 +5291,16 @@
},
{
"name": "spatie/data-transfer-object",
"version": "3.8.1",
"version": "3.9.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/data-transfer-object.git",
"reference": "83c04ce0bbcb2f143782d45b5b285022fc2f8721"
"reference": "1df0906c4e9e3aebd6c0506fd82c8b7d5548c1c8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/data-transfer-object/zipball/83c04ce0bbcb2f143782d45b5b285022fc2f8721",
"reference": "83c04ce0bbcb2f143782d45b5b285022fc2f8721",
"url": "https://api.github.com/repos/spatie/data-transfer-object/zipball/1df0906c4e9e3aebd6c0506fd82c8b7d5548c1c8",
"reference": "1df0906c4e9e3aebd6c0506fd82c8b7d5548c1c8",
"shasum": ""
},
"require": {
@ -5330,7 +5338,7 @@
],
"support": {
"issues": "https://github.com/spatie/data-transfer-object/issues",
"source": "https://github.com/spatie/data-transfer-object/tree/3.8.1"
"source": "https://github.com/spatie/data-transfer-object/tree/3.9.1"
},
"funding": [
{
@ -5342,7 +5350,7 @@
"type": "github"
}
],
"time": "2022-06-02T20:28:47+00:00"
"time": "2022-09-16T13:34:38+00:00"
},
{
"name": "spatie/flare-client-php",
@ -5490,27 +5498,27 @@
},
{
"name": "spatie/laravel-ignition",
"version": "1.4.1",
"version": "1.5.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-ignition.git",
"reference": "29deea5d9cf921590184be6956e657c4f4566440"
"reference": "192962f4d84526f6868c512530c00633e3165749"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/29deea5d9cf921590184be6956e657c4f4566440",
"reference": "29deea5d9cf921590184be6956e657c4f4566440",
"url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/192962f4d84526f6868c512530c00633e3165749",
"reference": "192962f4d84526f6868c512530c00633e3165749",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"ext-mbstring": "*",
"illuminate/support": "^8.77|^9.0",
"illuminate/support": "^8.77|^9.27",
"monolog/monolog": "^2.3",
"php": "^8.0",
"spatie/flare-client-php": "^1.0.1",
"spatie/ignition": "^1.2.4",
"spatie/ignition": "^1.4.1",
"symfony/console": "^5.0|^6.0",
"symfony/var-dumper": "^5.0|^6.0"
},
@ -5576,7 +5584,7 @@
"type": "github"
}
],
"time": "2022-09-01T11:31:14+00:00"
"time": "2022-09-16T13:45:54+00:00"
},
{
"name": "stella-maris/clock",
@ -8030,16 +8038,16 @@
},
{
"name": "tijsverkoyen/css-to-inline-styles",
"version": "2.2.4",
"version": "2.2.5",
"source": {
"type": "git",
"url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
"reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c"
"reference": "4348a3a06651827a27d989ad1d13efec6bb49b19"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c",
"reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c",
"url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/4348a3a06651827a27d989ad1d13efec6bb49b19",
"reference": "4348a3a06651827a27d989ad1d13efec6bb49b19",
"shasum": ""
},
"require": {
@ -8077,9 +8085,9 @@
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
"support": {
"issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
"source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4"
"source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.5"
},
"time": "2021-12-08T09:12:39+00:00"
"time": "2022-09-12T13:28:28+00:00"
},
{
"name": "twig/twig",