From e287e76db53bbdac26cac9bff5e031cadcdad8ed Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 29 Jun 2018 12:28:29 +0200 Subject: [PATCH] Complete preferences. --- .../V1/Controllers/PreferenceController.php | 48 ++++++++++------ app/Api/V1/Requests/PreferenceRequest.php | 57 +++++++++++++++++++ routes/api.php | 3 +- 3 files changed, 90 insertions(+), 18 deletions(-) create mode 100644 app/Api/V1/Requests/PreferenceRequest.php diff --git a/app/Api/V1/Controllers/PreferenceController.php b/app/Api/V1/Controllers/PreferenceController.php index b7b7e8bee4..44363133d4 100644 --- a/app/Api/V1/Controllers/PreferenceController.php +++ b/app/Api/V1/Controllers/PreferenceController.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers; +use FireflyIII\Api\V1\Requests\PreferenceRequest; use FireflyIII\Models\Preference; use FireflyIII\Transformers\PreferenceTransformer; use FireflyIII\User; @@ -109,7 +110,7 @@ class PreferenceController extends Controller /** * List single resource. * - * @param Request $request + * @param Request $request * @param Preference $preference * * @return JsonResponse @@ -129,27 +130,42 @@ class PreferenceController extends Controller } /** - * Store new object. - * - * @param Request $request + * @param PreferenceRequest $request + * @param Preference $preference * * @return JsonResponse */ - public function store(Request $request): JsonResponse + public function update(PreferenceRequest $request, Preference $preference): JsonResponse { - // todo replace code and replace request object. - } + $data = $request->getAll(); + $newValue = $data['data']; + switch ($preference->name) { + default: + break; + case 'transaction_journal_optional_fields': + case 'frontPageAccounts': + $newValue = explode(',', $data['data']); + break; + case 'listPageSize': + $newValue = (int)$data['data']; + break; + case 'customFiscalYear': + case 'twoFactorAuthEnabled': + $newValue = (int)$data['data'] === 1; + break; + } + $result = Preferences::set($preference->name, $newValue); - /** - * @param Request $request - * @param string $object - * - * @return JsonResponse - */ - public function update(Request $request, string $object): JsonResponse - { - // todo replace code and replace request object. + // create some objects: + $manager = new Manager; + $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + + // present to user. + $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $resource = new Item($result, new PreferenceTransformer($this->parameters), 'preferences'); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); } } \ No newline at end of file diff --git a/app/Api/V1/Requests/PreferenceRequest.php b/app/Api/V1/Requests/PreferenceRequest.php new file mode 100644 index 0000000000..38c3a39e11 --- /dev/null +++ b/app/Api/V1/Requests/PreferenceRequest.php @@ -0,0 +1,57 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Api\V1\Requests; + +/** + * + * Class PreferenceRequest + */ +class PreferenceRequest extends Request +{ + + + /** + * @return bool + */ + public function authorize(): bool + { + // Only allow authenticated users + return auth()->check(); + } + + public function getAll(): array + { + return [ + 'data' => $this->get('data'), + ]; + } + + public function rules(): array + { + return [ + 'data' => 'required|between:1,65000', + ]; + } + +} \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index d5e2de9214..3212017d89 100644 --- a/routes/api.php +++ b/routes/api.php @@ -189,9 +189,8 @@ Route::group( // Piggy Bank API routes: Route::get('', ['uses' => 'PreferenceController@index', 'as' => 'index']); Route::get('{preference}', ['uses' => 'PreferenceController@show', 'as' => 'show']); + Route::put('{preference}', ['uses' => 'PreferenceController@update', 'as' => 'update']); // Route::post('', ['uses' => 'PiggyBankController@store', 'as' => 'store']); - - // Route::put('{piggyBank}', ['uses' => 'PiggyBankController@update', 'as' => 'update']); // Route::delete('{piggyBank}', ['uses' => 'PiggyBankController@delete', 'as' => 'delete']); } );