From b605ede74e77270e885395ed567f056795529575 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 10 Aug 2018 17:05:37 +0200 Subject: [PATCH] Move methods to traits. --- .../Controllers/Auth/RegisterController.php | 21 +- .../Import/JobConfigurationController.php | 25 +- .../Import/JobStatusController.php | 22 +- app/Http/Controllers/NewUserController.php | 87 +------ app/Http/Controllers/ProfileController.php | 27 +-- app/Http/Requests/PiggyBankFormRequest.php | 1 + app/Http/Requests/RuleGroupFormRequest.php | 3 +- .../Http/Controllers/BasicDataSupport.php | 34 +-- app/Support/Http/Controllers/CreateStuff.php | 220 ++++++++++++++++++ .../Http/Controllers/RequestInformation.php | 3 +- .../Http/Controllers/UserNavigation.php | 20 +- 11 files changed, 263 insertions(+), 200 deletions(-) create mode 100644 app/Support/Http/Controllers/CreateStuff.php diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index cf37c7f2a9..2ece879132 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -25,6 +25,7 @@ namespace FireflyIII\Http\Controllers\Auth; use FireflyConfig; use FireflyIII\Http\Controllers\Controller; +use FireflyIII\Support\Http\Controllers\CreateStuff; use FireflyIII\Support\Http\Controllers\RequestInformation; use FireflyIII\User; use Illuminate\Auth\Events\Registered; @@ -42,7 +43,7 @@ use Illuminate\Http\Request; */ class RegisterController extends Controller { - use RegistersUsers, RequestInformation; + use RegistersUsers, RequestInformation, CreateStuff; /** * Where to redirect users after registration. @@ -81,7 +82,7 @@ class RegisterController extends Controller /** @noinspection PhpUndefinedMethodInspection */ $this->validator($request->all())->validate(); - event(new Registered($user = $this->create($request->all()))); + event(new Registered($user = $this->createUser($request->all()))); $this->guard()->login($user); @@ -118,20 +119,4 @@ class RegisterController extends Controller return view('auth.register', compact('isDemoSite', 'email')); } - /** - * Create a new user instance after a valid registration. - * - * @param array $data - * - * @return \FireflyIII\User - */ - protected function create(array $data): User // create object - { - return User::create( - [ - 'email' => $data['email'], - 'password' => bcrypt($data['password']), - ] - ); - } } diff --git a/app/Http/Controllers/Import/JobConfigurationController.php b/app/Http/Controllers/Import/JobConfigurationController.php index ecb87bd45a..7c74b03c32 100644 --- a/app/Http/Controllers/Import/JobConfigurationController.php +++ b/app/Http/Controllers/Import/JobConfigurationController.php @@ -24,9 +24,9 @@ namespace FireflyIII\Http\Controllers\Import; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Controllers\Controller; -use FireflyIII\Import\JobConfiguration\JobConfigurationInterface; use FireflyIII\Models\ImportJob; use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; +use FireflyIII\Support\Http\Controllers\CreateStuff; use Illuminate\Http\Request; use Illuminate\Http\UploadedFile; use Illuminate\Support\MessageBag; @@ -37,6 +37,7 @@ use Log; */ class JobConfigurationController extends Controller { + use CreateStuff; /** @var ImportJobRepositoryInterface The import job repository */ public $repository; @@ -161,27 +162,5 @@ class JobConfigurationController extends Controller return redirect(route('import.job.configuration.index', [$importJob->key])); } - /** - * Make a configurator object. - * - * @param ImportJob $importJob - * - * @return JobConfigurationInterface - * - * @throws FireflyException - */ - protected function makeConfigurator(ImportJob $importJob): JobConfigurationInterface // make object - { - $key = sprintf('import.configuration.%s', $importJob->provider); - $className = (string)config($key); - if (null === $className || !class_exists($className)) { - throw new FireflyException(sprintf('Cannot find configurator class for job with provider "%s".', $importJob->provider)); // @codeCoverageIgnore - } - Log::debug(sprintf('Going to create class "%s"', $className)); - /** @var JobConfigurationInterface $configurator */ - $configurator = app($className); - $configurator->setImportJob($importJob); - return $configurator; - } } diff --git a/app/Http/Controllers/Import/JobStatusController.php b/app/Http/Controllers/Import/JobStatusController.php index 0c40335e66..949f15d156 100644 --- a/app/Http/Controllers/Import/JobStatusController.php +++ b/app/Http/Controllers/Import/JobStatusController.php @@ -26,9 +26,9 @@ use Exception; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Import\Routine\RoutineInterface; -use FireflyIII\Import\Storage\ImportArrayStorage; use FireflyIII\Models\ImportJob; use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; +use FireflyIII\Support\Http\Controllers\CreateStuff; use Illuminate\Http\JsonResponse; use Log; @@ -37,6 +37,7 @@ use Log; */ class JobStatusController extends Controller { + use CreateStuff; /** @var ImportJobRepositoryInterface The import job repository */ private $repository; @@ -224,22 +225,5 @@ class JobStatusController extends Controller return response()->json(['status' => 'OK', 'message' => 'storage_finished']); } - /** - * Store the transactions. - * - * @param ImportJob $importJob - * - * @throws FireflyException - */ - protected function storeTransactions(ImportJob $importJob): void // make object + execute - { - /** @var ImportArrayStorage $storage */ - $storage = app(ImportArrayStorage::class); - $storage->setImportJob($importJob); - try { - $storage->store(); - } catch (FireflyException|Exception $e) { - throw new FireflyException($e->getMessage()); - } - } + } diff --git a/app/Http/Controllers/NewUserController.php b/app/Http/Controllers/NewUserController.php index db3c17a000..8ad8aee7b1 100644 --- a/app/Http/Controllers/NewUserController.php +++ b/app/Http/Controllers/NewUserController.php @@ -22,11 +22,10 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers; -use Carbon\Carbon; use FireflyIII\Http\Requests\NewUserFormRequest; -use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; +use FireflyIII\Support\Http\Controllers\CreateStuff; use View; /** @@ -34,6 +33,7 @@ use View; */ class NewUserController extends Controller { + use CreateStuff; /** @var AccountRepositoryInterface The account repository */ private $repository; @@ -120,87 +120,4 @@ class NewUserController extends Controller return redirect(route('index')); } - /** - * Creates an asset account. - * - * @param NewUserFormRequest $request - * @param TransactionCurrency $currency - * - * @return bool - */ - protected function createAssetAccount(NewUserFormRequest $request, TransactionCurrency $currency): bool // create stuff - { - $assetAccount = [ - 'name' => $request->get('bank_name'), - 'iban' => null, - 'accountType' => 'asset', - 'virtualBalance' => 0, - 'account_type_id' => null, - 'active' => true, - 'accountRole' => 'defaultAsset', - 'openingBalance' => $request->input('bank_balance'), - 'openingBalanceDate' => new Carbon, - 'currency_id' => $currency->id, - ]; - - $this->repository->store($assetAccount); - - return true; - } - - /** - * Creates a cash wallet. - * - * @param TransactionCurrency $currency - * @param string $language - * - * @return bool - */ - protected function createCashWalletAccount(TransactionCurrency $currency, string $language): bool // create stuff - { - $assetAccount = [ - 'name' => (string)trans('firefly.cash_wallet', [], $language), - 'iban' => null, - 'accountType' => 'asset', - 'virtualBalance' => 0, - 'account_type_id' => null, - 'active' => true, - 'accountRole' => 'cashWalletAsset', - 'openingBalance' => null, - 'openingBalanceDate' => null, - 'currency_id' => $currency->id, - ]; - - $this->repository->store($assetAccount); - - return true; - } - - /** - * Create a savings account. - * - * @param NewUserFormRequest $request - * @param TransactionCurrency $currency - * @param string $language - * - * @return bool - */ - protected function createSavingsAccount(NewUserFormRequest $request, TransactionCurrency $currency, string $language): bool // create stuff - { - $savingsAccount = [ - 'name' => (string)trans('firefly.new_savings_account', ['bank_name' => $request->get('bank_name')], $language), - 'iban' => null, - 'accountType' => 'asset', - 'account_type_id' => null, - 'virtualBalance' => 0, - 'active' => true, - 'accountRole' => 'savingAsset', - 'openingBalance' => $request->input('savings_balance'), - 'openingBalanceDate' => new Carbon, - 'currency_id' => $currency->id, - ]; - $this->repository->store($savingsAccount); - - return true; - } } diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 35939c90fd..74d6c134e2 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -35,6 +35,7 @@ use FireflyIII\Http\Requests\ProfileFormRequest; use FireflyIII\Http\Requests\TokenFormRequest; use FireflyIII\Models\Preference; use FireflyIII\Repositories\User\UserRepositoryInterface; +use FireflyIII\Support\Http\Controllers\CreateStuff; use FireflyIII\Support\Http\Controllers\RequestInformation; use FireflyIII\User; use Google2FA; @@ -42,9 +43,7 @@ use Hash; use Illuminate\Contracts\Auth\Guard; use Illuminate\Support\Collection; use Laravel\Passport\ClientRepository; -use Laravel\Passport\Passport; use Log; -use phpseclib\Crypt\RSA; /** * Class ProfileController. @@ -55,7 +54,7 @@ use phpseclib\Crypt\RSA; */ class ProfileController extends Controller { - use RequestInformation; + use RequestInformation, CreateStuff; /** * ProfileController constructor. @@ -442,27 +441,5 @@ class ProfileController extends Controller return redirect(route('login')); } - /** - * Create new RSA keys. - */ - protected function createOAuthKeys(): void // create stuff - { - $rsa = new RSA(); - $keys = $rsa->createKey(4096); - - [$publicKey, $privateKey] = [ - Passport::keyPath('oauth-public.key'), - Passport::keyPath('oauth-private.key'), - ]; - - if (file_exists($publicKey) || file_exists($privateKey)) { - return; - } - // @codeCoverageIgnoreStart - Log::alert('NO OAuth keys were found. They have been created.'); - - file_put_contents($publicKey, array_get($keys, 'publickey')); - file_put_contents($privateKey, array_get($keys, 'privatekey')); - } } diff --git a/app/Http/Requests/PiggyBankFormRequest.php b/app/Http/Requests/PiggyBankFormRequest.php index 2fe6ef01db..6325eddc11 100644 --- a/app/Http/Requests/PiggyBankFormRequest.php +++ b/app/Http/Requests/PiggyBankFormRequest.php @@ -21,6 +21,7 @@ declare(strict_types=1); namespace FireflyIII\Http\Requests; + use FireflyIII\Models\PiggyBank; /** diff --git a/app/Http/Requests/RuleGroupFormRequest.php b/app/Http/Requests/RuleGroupFormRequest.php index 2d7d2f180c..671607eabb 100644 --- a/app/Http/Requests/RuleGroupFormRequest.php +++ b/app/Http/Requests/RuleGroupFormRequest.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Requests; use FireflyIII\Models\RuleGroup; -use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; /** * Class RuleGroupFormRequest. @@ -61,7 +60,7 @@ class RuleGroupFormRequest extends Request */ public function rules(): array { - $titleRule = 'required|between:1,100|uniqueObjectForUser:rule_groups,title'; + $titleRule = 'required|between:1,100|uniqueObjectForUser:rule_groups,title'; /** @var RuleGroup $ruleGroup */ $ruleGroup = $this->route()->parameter('ruleGroup'); diff --git a/app/Support/Http/Controllers/BasicDataSupport.php b/app/Support/Http/Controllers/BasicDataSupport.php index 7e29ab9452..5612c58c94 100644 --- a/app/Support/Http/Controllers/BasicDataSupport.php +++ b/app/Support/Http/Controllers/BasicDataSupport.php @@ -30,6 +30,23 @@ namespace FireflyIII\Support\Http\Controllers; */ trait BasicDataSupport { + /** + * Sum up an array. + * + * @param array $array + * + * @return string + */ + protected function arraySum(array $array): string // filter + group data + { + $sum = '0'; + foreach ($array as $entry) { + $sum = bcadd($sum, $entry); + } + + return $sum; + } + /** * Find the ID in a given array. Return '0' of not there (amount). * @@ -47,21 +64,4 @@ trait BasicDataSupport return $result; } - - /** - * Sum up an array. - * - * @param array $array - * - * @return string - */ - protected function arraySum(array $array): string // filter + group data - { - $sum = '0'; - foreach ($array as $entry) { - $sum = bcadd($sum, $entry); - } - - return $sum; - } } \ No newline at end of file diff --git a/app/Support/Http/Controllers/CreateStuff.php b/app/Support/Http/Controllers/CreateStuff.php new file mode 100644 index 0000000000..ce73d6c6e2 --- /dev/null +++ b/app/Support/Http/Controllers/CreateStuff.php @@ -0,0 +1,220 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Support\Http\Controllers; + +use Carbon\Carbon; +use Exception; +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Http\Requests\NewUserFormRequest; +use FireflyIII\Import\JobConfiguration\JobConfigurationInterface; +use FireflyIII\Import\Storage\ImportArrayStorage; +use FireflyIII\Models\ImportJob; +use FireflyIII\Models\TransactionCurrency; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; +use FireflyIII\User; +use Laravel\Passport\Passport; +use Log; +use phpseclib\Crypt\RSA; + +/** + * Trait CreateStuff + * + * @package FireflyIII\Support\Http\Controllers + */ +trait CreateStuff +{ + + /** + * Creates an asset account. + * + * @param NewUserFormRequest $request + * @param TransactionCurrency $currency + * + * @return bool + */ + protected function createAssetAccount(NewUserFormRequest $request, TransactionCurrency $currency): bool // create stuff + { + /** @var AccountRepositoryInterface $repository */ + $repository = app(AccountRepositoryInterface::class); + $assetAccount = [ + 'name' => $request->get('bank_name'), + 'iban' => null, + 'accountType' => 'asset', + 'virtualBalance' => 0, + 'account_type_id' => null, + 'active' => true, + 'accountRole' => 'defaultAsset', + 'openingBalance' => $request->input('bank_balance'), + 'openingBalanceDate' => new Carbon, + 'currency_id' => $currency->id, + ]; + + $repository->store($assetAccount); + + return true; + } + + /** + * Creates a cash wallet. + * + * @param TransactionCurrency $currency + * @param string $language + * + * @return bool + */ + protected function createCashWalletAccount(TransactionCurrency $currency, string $language): bool // create stuff + { + /** @var AccountRepositoryInterface $repository */ + $repository = app(AccountRepositoryInterface::class); + $assetAccount = [ + 'name' => (string)trans('firefly.cash_wallet', [], $language), + 'iban' => null, + 'accountType' => 'asset', + 'virtualBalance' => 0, + 'account_type_id' => null, + 'active' => true, + 'accountRole' => 'cashWalletAsset', + 'openingBalance' => null, + 'openingBalanceDate' => null, + 'currency_id' => $currency->id, + ]; + + $repository->store($assetAccount); + + return true; + } + + /** + * Create new RSA keys. + */ + protected function createOAuthKeys(): void // create stuff + { + $rsa = new RSA(); + $keys = $rsa->createKey(4096); + + [$publicKey, $privateKey] = [ + Passport::keyPath('oauth-public.key'), + Passport::keyPath('oauth-private.key'), + ]; + + if (file_exists($publicKey) || file_exists($privateKey)) { + return; + } + // @codeCoverageIgnoreStart + Log::alert('NO OAuth keys were found. They have been created.'); + + file_put_contents($publicKey, array_get($keys, 'publickey')); + file_put_contents($privateKey, array_get($keys, 'privatekey')); + } + + /** + * Create a savings account. + * + * @param NewUserFormRequest $request + * @param TransactionCurrency $currency + * @param string $language + * + * @return bool + */ + protected function createSavingsAccount(NewUserFormRequest $request, TransactionCurrency $currency, string $language): bool // create stuff + { + /** @var AccountRepositoryInterface $repository */ + $repository = app(AccountRepositoryInterface::class); + $savingsAccount = [ + 'name' => (string)trans('firefly.new_savings_account', ['bank_name' => $request->get('bank_name')], $language), + 'iban' => null, + 'accountType' => 'asset', + 'account_type_id' => null, + 'virtualBalance' => 0, + 'active' => true, + 'accountRole' => 'savingAsset', + 'openingBalance' => $request->input('savings_balance'), + 'openingBalanceDate' => new Carbon, + 'currency_id' => $currency->id, + ]; + $repository->store($savingsAccount); + + return true; + } + + /** + * Create a new user instance after a valid registration. + * + * @param array $data + * + * @return \FireflyIII\User + */ + protected function createUser(array $data): User // create object + { + return User::create( + [ + 'email' => $data['email'], + 'password' => bcrypt($data['password']), + ] + ); + } + + /** + * Make a configurator object. + * + * @param ImportJob $importJob + * + * @return JobConfigurationInterface + * + * @throws FireflyException + */ + protected function makeConfigurator(ImportJob $importJob): JobConfigurationInterface // make object + { + $key = sprintf('import.configuration.%s', $importJob->provider); + $className = (string)config($key); + if (null === $className || !class_exists($className)) { + throw new FireflyException(sprintf('Cannot find configurator class for job with provider "%s".', $importJob->provider)); // @codeCoverageIgnore + } + Log::debug(sprintf('Going to create class "%s"', $className)); + /** @var JobConfigurationInterface $configurator */ + $configurator = app($className); + $configurator->setImportJob($importJob); + + return $configurator; + } + + /** + * Store the transactions. + * + * @param ImportJob $importJob + * + * @throws FireflyException + */ + protected function storeTransactions(ImportJob $importJob): void // make object + execute + { + /** @var ImportArrayStorage $storage */ + $storage = app(ImportArrayStorage::class); + $storage->setImportJob($importJob); + try { + $storage->store(); + } catch (FireflyException|Exception $e) { + throw new FireflyException($e->getMessage()); + } + } +} \ No newline at end of file diff --git a/app/Support/Http/Controllers/RequestInformation.php b/app/Support/Http/Controllers/RequestInformation.php index 0eaa36216b..5af126d3f6 100644 --- a/app/Support/Http/Controllers/RequestInformation.php +++ b/app/Support/Http/Controllers/RequestInformation.php @@ -44,8 +44,9 @@ use Illuminate\Support\Collection; use Illuminate\Support\Facades\Validator; use InvalidArgumentException; use Log; -use Symfony\Component\HttpFoundation\ParameterBag; use Route as RouteFacade; +use Symfony\Component\HttpFoundation\ParameterBag; + /** * Trait RequestInformation * diff --git a/app/Support/Http/Controllers/UserNavigation.php b/app/Support/Http/Controllers/UserNavigation.php index bbc9eb145b..f52a12e462 100644 --- a/app/Support/Http/Controllers/UserNavigation.php +++ b/app/Support/Http/Controllers/UserNavigation.php @@ -87,16 +87,6 @@ trait UserNavigation // @codeCoverageIgnoreEnd } - /** - * Remember previous URL. - * - * @param string $identifier - */ - protected function rememberPreviousUri(string $identifier): void - { - session()->put($identifier, URL::previous()); - } - /** * @param Account $account * @@ -124,4 +114,14 @@ trait UserNavigation return redirect(route('accounts.show', [$opposingTransaction->account_id])); } + + /** + * Remember previous URL. + * + * @param string $identifier + */ + protected function rememberPreviousUri(string $identifier): void + { + session()->put($identifier, URL::previous()); + } } \ No newline at end of file