2016-01-08 16:00:07 +01:00
< ? php
2016-05-20 12:41:23 +02:00
/**
* EventServiceProvider . php
2020-02-16 13:55:52 +01:00
* Copyright ( c ) 2019 james @ firefly - iii . org
2016-05-20 12:41:23 +02:00
*
2019-10-02 06:37:26 +02:00
* This file is part of Firefly III ( https :// github . com / firefly - iii ) .
2016-10-05 06:52:15 +02:00
*
2019-10-02 06:37:26 +02:00
* 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 .
2017-10-21 08:40:00 +02:00
*
2019-10-02 06:37:26 +02:00
* This program is distributed in the hope that it will be useful ,
2017-10-21 08:40:00 +02:00
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
2019-10-02 06:37:26 +02:00
* GNU Affero General Public License for more details .
2017-10-21 08:40:00 +02:00
*
2019-10-02 06:37:26 +02:00
* 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 />.
2016-05-20 12:41:23 +02:00
*/
2017-04-09 07:44:22 +02:00
declare ( strict_types = 1 );
2016-01-08 16:00:07 +01:00
namespace FireflyIII\Providers ;
2015-02-06 04:39:52 +01:00
2018-05-26 13:55:11 +02:00
use Exception ;
2021-10-13 05:57:11 +02:00
use FireflyIII\Events\ActuallyLoggedIn ;
2018-04-02 15:10:40 +02:00
use FireflyIII\Events\AdminRequestedTestMessage ;
2020-12-02 06:54:13 +01:00
use FireflyIII\Events\DestroyedTransactionGroup ;
2020-08-28 21:58:03 +02:00
use FireflyIII\Events\DetectedNewIPAddress ;
2017-12-05 20:50:04 +01:00
use FireflyIII\Events\RegisteredUser ;
2018-04-02 15:10:40 +02:00
use FireflyIII\Events\RequestedNewPassword ;
2018-06-25 16:01:45 +02:00
use FireflyIII\Events\RequestedReportOnJournals ;
2020-12-02 19:30:09 +01:00
use FireflyIII\Events\RequestedSendWebhookMessages ;
2017-12-28 19:03:15 +01:00
use FireflyIII\Events\RequestedVersionCheckStatus ;
2021-04-10 17:25:48 +02:00
use FireflyIII\Events\StoredAccount ;
2019-03-30 11:03:39 +01:00
use FireflyIII\Events\StoredTransactionGroup ;
2021-04-10 17:25:48 +02:00
use FireflyIII\Events\UpdatedAccount ;
2019-03-30 11:03:39 +01:00
use FireflyIII\Events\UpdatedTransactionGroup ;
2018-04-02 15:10:40 +02:00
use FireflyIII\Events\UserChangedEmail ;
2022-03-28 12:23:46 +02:00
use FireflyIII\Events\WarnUserAboutBill ;
2018-05-26 13:55:11 +02:00
use FireflyIII\Mail\OAuthTokenCreatedMail ;
2022-09-18 16:28:04 +02:00
use FireflyIII\Models\BudgetLimit ;
2015-02-25 19:32:33 +01:00
use FireflyIII\Models\PiggyBank ;
use FireflyIII\Models\PiggyBankRepetition ;
2022-09-23 06:05:22 +02:00
use FireflyIII\Notifications\Admin\TestNotification ;
2022-09-18 16:28:04 +02:00
use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface ;
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface ;
2018-05-26 13:55:11 +02:00
use FireflyIII\Repositories\User\UserRepositoryInterface ;
2017-12-05 20:50:04 +01:00
use Illuminate\Auth\Events\Login ;
2015-02-06 04:39:52 +01:00
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider ;
2022-09-23 06:05:22 +02:00
use Illuminate\Support\Facades\Notification ;
2018-05-26 13:55:11 +02:00
use Laravel\Passport\Client ;
use Laravel\Passport\Events\AccessTokenCreated ;
use Log ;
use Mail ;
use Session ;
2022-09-08 06:22:02 +02:00
use TypeError ;
2015-04-07 18:26:14 +02:00
2016-01-09 08:20:55 +01:00
/**
2017-11-15 12:25:49 +01:00
* Class EventServiceProvider .
2021-03-21 09:15:40 +01:00
*
2019-07-31 16:53:09 +02:00
* @ codeCoverageIgnore
2016-01-09 08:20:55 +01:00
*/
2015-02-11 07:35:10 +01:00
class EventServiceProvider extends ServiceProvider
{
/**
2016-01-08 16:00:07 +01:00
* The event listener mappings for the application .
2015-02-11 07:35:10 +01:00
*
* @ var array
*/
protected $listen
= [
2017-09-26 08:52:16 +02:00
// is a User related event.
2021-03-21 09:15:40 +01:00
RegisteredUser :: class => [
2017-11-15 12:25:49 +01:00
'FireflyIII\Handlers\Events\UserEventHandler@sendRegistrationMail' ,
'FireflyIII\Handlers\Events\UserEventHandler@attachUserRole' ,
2021-08-28 15:47:33 +02:00
'FireflyIII\Handlers\Events\UserEventHandler@createGroupMembership' ,
2022-06-06 14:40:19 +02:00
'FireflyIII\Handlers\Events\UserEventHandler@createExchangeRates' ,
2017-11-15 12:25:49 +01:00
],
2017-12-05 20:50:04 +01:00
// is a User related event.
2021-03-21 09:15:40 +01:00
Login :: class => [
2017-12-05 20:50:04 +01:00
'FireflyIII\Handlers\Events\UserEventHandler@checkSingleUserIsAdmin' ,
2018-06-12 21:41:58 +02:00
'FireflyIII\Handlers\Events\UserEventHandler@demoUserBackToEnglish' ,
2021-10-13 05:57:11 +02:00
],
2022-03-29 14:59:58 +02:00
ActuallyLoggedIn :: class => [
2020-08-28 21:58:03 +02:00
'FireflyIII\Handlers\Events\UserEventHandler@storeUserIPAddress' ,
],
2021-03-21 09:15:40 +01:00
DetectedNewIPAddress :: class => [
2020-08-28 21:58:03 +02:00
'FireflyIII\Handlers\Events\UserEventHandler@notifyNewIPAddress' ,
2017-12-28 19:03:15 +01:00
],
2021-03-21 09:15:40 +01:00
RequestedVersionCheckStatus :: class => [
2017-12-28 11:38:40 +01:00
'FireflyIII\Handlers\Events\VersionCheckEventHandler@checkForUpdates' ,
2017-12-05 20:50:04 +01:00
],
2021-03-21 09:15:40 +01:00
RequestedReportOnJournals :: class => [
2018-06-25 16:01:45 +02:00
'FireflyIII\Handlers\Events\AutomationHandler@reportJournals' ,
],
2017-12-05 20:50:04 +01:00
2017-09-26 08:52:16 +02:00
// is a User related event.
2021-03-21 09:15:40 +01:00
RequestedNewPassword :: class => [
2017-09-26 08:52:16 +02:00
'FireflyIII\Handlers\Events\UserEventHandler@sendNewPassword' ,
2016-11-22 21:21:11 +01:00
],
2017-09-26 08:52:16 +02:00
// is a User related event.
2021-03-21 09:15:40 +01:00
UserChangedEmail :: class => [
2017-09-26 08:52:16 +02:00
'FireflyIII\Handlers\Events\UserEventHandler@sendEmailChangeConfirmMail' ,
'FireflyIII\Handlers\Events\UserEventHandler@sendEmailChangeUndoMail' ,
],
2017-09-27 15:45:55 +02:00
// admin related
2021-03-21 09:15:40 +01:00
AdminRequestedTestMessage :: class => [
2017-09-27 15:45:55 +02:00
'FireflyIII\Handlers\Events\AdminEventHandler@sendTestMessage' ,
],
2017-09-26 08:52:16 +02:00
// is a Transaction Journal related event.
2021-03-21 09:15:40 +01:00
StoredTransactionGroup :: class => [
2019-03-30 11:03:39 +01:00
'FireflyIII\Handlers\Events\StoredGroupEventHandler@processRules' ,
2021-04-10 07:58:13 +02:00
'FireflyIII\Handlers\Events\StoredGroupEventHandler@recalculateCredit' ,
2020-12-02 06:54:13 +01:00
'FireflyIII\Handlers\Events\StoredGroupEventHandler@triggerWebhooks' ,
2017-11-15 12:25:49 +01:00
],
2017-09-26 08:52:16 +02:00
// is a Transaction Journal related event.
2021-03-21 09:15:40 +01:00
UpdatedTransactionGroup :: class => [
2020-07-01 05:51:15 +02:00
'FireflyIII\Handlers\Events\UpdatedGroupEventHandler@unifyAccounts' ,
2019-03-30 11:03:39 +01:00
'FireflyIII\Handlers\Events\UpdatedGroupEventHandler@processRules' ,
2021-04-10 07:58:13 +02:00
'FireflyIII\Handlers\Events\UpdatedGroupEventHandler@recalculateCredit' ,
2020-12-02 06:54:13 +01:00
'FireflyIII\Handlers\Events\UpdatedGroupEventHandler@triggerWebhooks' ,
],
2021-03-21 09:15:40 +01:00
DestroyedTransactionGroup :: class => [
2020-12-02 06:54:13 +01:00
'FireflyIII\Handlers\Events\DestroyedGroupEventHandler@triggerWebhooks' ,
2017-11-15 12:25:49 +01:00
],
2018-05-26 13:55:11 +02:00
// API related events:
2021-03-21 09:15:40 +01:00
AccessTokenCreated :: class => [
2018-05-26 13:55:11 +02:00
'FireflyIII\Handlers\Events\APIEventHandler@accessTokenCreated' ,
],
2020-12-02 19:30:09 +01:00
// Webhook related event:
RequestedSendWebhookMessages :: class => [
'FireflyIII\Handlers\Events\WebhookEventHandler@sendWebhookMessages' ,
],
2021-04-10 17:25:48 +02:00
// account related events:
2021-09-18 10:26:12 +02:00
StoredAccount :: class => [
2021-04-10 17:25:48 +02:00
'FireflyIII\Handlers\Events\StoredAccountEventHandler@recalculateCredit' ,
2021-09-18 10:26:12 +02:00
],
UpdatedAccount :: class => [
2021-04-10 17:25:48 +02:00
'FireflyIII\Handlers\Events\UpdatedAccountEventHandler@recalculateCredit' ,
],
2022-03-28 12:23:46 +02:00
// bill related events:
2022-03-29 14:59:58 +02:00
WarnUserAboutBill :: class => [
2022-03-28 12:23:46 +02:00
'FireflyIII\Handlers\Events\BillEventHandler@warnAboutBill' ,
],
2015-02-11 07:35:10 +01:00
];
2015-02-06 04:39:52 +01:00
2015-02-11 07:35:10 +01:00
/**
2016-09-16 07:05:34 +02:00
* Register any events for your application .
2015-02-11 07:35:10 +01:00
*/
2018-07-26 06:10:17 +02:00
public function boot () : void
2015-02-11 07:35:10 +01:00
{
2016-09-16 07:05:34 +02:00
parent :: boot ();
2015-05-17 10:30:18 +02:00
$this -> registerCreateEvents ();
2022-09-18 16:28:04 +02:00
$this -> registerBudgetEvents ();
}
/**
2022-09-24 07:03:03 +02:00
* TODO needs a dedicated method .
2022-09-18 16:28:04 +02:00
*/
protected function registerBudgetEvents () : void
{
$func = static function ( BudgetLimit $limit ) {
Log :: debug ( 'Trigger budget limit event.' );
// find available budget with same period and same currency or create it.
// then set it or add money:
$user = $limit -> budget -> user ;
$availableBudget = $user
-> availableBudgets ()
-> where ( 'start_date' , $limit -> start_date -> format ( 'Y-m-d' ))
-> where ( 'end_date' , $limit -> end_date -> format ( 'Y-m-d' ))
-> where ( 'transaction_currency_id' , $limit -> transaction_currency_id )
-> first ();
// update!
if ( null !== $availableBudget ) {
$repository = app ( BudgetLimitRepositoryInterface :: class );
$repository -> setUser ( $user );
$set = $repository -> getAllBudgetLimitsByCurrency ( $limit -> transactionCurrency , $limit -> start_date , $limit -> end_date );
$sum = ( string ) $set -> sum ( 'amount' );
Log :: debug ( sprintf ( 'Because budget limit #%d had its amount changed to %s, available budget limit #%d will be updated.' , $limit -> id , $limit -> amount , $availableBudget -> id ));
$availableBudget -> amount = $sum ;
$availableBudget -> save ();
return ;
}
Log :: debug ( 'Does not exist, create it.' );
// create it.
$data = [
'amount' => $limit -> amount ,
'start' => $limit -> start_date ,
'end' => $limit -> end_date ,
'currency_id' => $limit -> transaction_currency_id ,
];
$repository = app ( AvailableBudgetRepositoryInterface :: class );
$repository -> setUser ( $user );
$repository -> store ( $data );
};
BudgetLimit :: created ( $func );
BudgetLimit :: updated ( $func );
2015-05-17 10:30:18 +02:00
}
2016-03-19 16:24:47 +01:00
/**
2022-09-24 07:03:03 +02:00
* TODO needs a dedicated ( static ) method .
2016-03-19 16:24:47 +01:00
*/
2018-05-26 13:55:11 +02:00
protected function registerCreateEvents () : void
2016-03-19 16:24:47 +01:00
{
PiggyBank :: created (
2019-07-31 16:53:09 +02:00
static function ( PiggyBank $piggyBank ) {
2016-03-19 16:24:47 +01:00
$repetition = new PiggyBankRepetition ;
$repetition -> piggyBank () -> associate ( $piggyBank );
2018-03-25 13:30:55 +02:00
$repetition -> startdate = $piggyBank -> startdate ;
$repetition -> targetdate = $piggyBank -> targetdate ;
2016-03-19 16:24:47 +01:00
$repetition -> currentamount = 0 ;
$repetition -> save ();
}
);
2015-05-17 10:30:18 +02:00
}
2018-05-26 13:55:11 +02:00
2015-02-06 04:39:52 +01:00
}