GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Push — master ( 6f8b1f...142a48 )
by James
25:51 queued 11:45
created

Api/V1/Controllers/AvailableBudgetController.php (2 issues)

Labels
Severity
1
<?php
2
/**
3
 * AvailableBudgetController.php
4
 * Copyright (c) 2018 [email protected]
5
 *
6
 * This file is part of Firefly III.
7
 *
8
 * Firefly III is free software: you can redistribute it and/or modify
9
 * it under the terms of the GNU General Public License as published by
10
 * the Free Software Foundation, either version 3 of the License, or
11
 * (at your option) any later version.
12
 *
13
 * Firefly III is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
20
 */
21
22
declare(strict_types=1);
23
24
namespace FireflyIII\Api\V1\Controllers;
25
26
use FireflyIII\Api\V1\Requests\AvailableBudgetRequest;
27
use FireflyIII\Factory\TransactionCurrencyFactory;
28
use FireflyIII\Models\AvailableBudget;
29
use FireflyIII\Models\TransactionCurrency;
30
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
31
use FireflyIII\Transformers\AvailableBudgetTransformer;
32
use FireflyIII\User;
33
use Illuminate\Http\JsonResponse;
34
use Illuminate\Http\Request;
35
use Illuminate\Pagination\LengthAwarePaginator;
36
use League\Fractal\Manager;
37
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
38
use League\Fractal\Resource\Collection as FractalCollection;
39
use League\Fractal\Resource\Item;
40
use League\Fractal\Serializer\JsonApiSerializer;
41
42
/**
43
 * Class AvailableBudgetController.
44
 *
45
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
46
 */
47
class AvailableBudgetController extends Controller
48
{
49
    /** @var BudgetRepositoryInterface The budget repository */
50
    private $repository;
51
52
    /**
53
     * AvailableBudgetController constructor.
54
     *
55
     * @codeCoverageIgnore
56
     */
57
    public function __construct()
58
    {
59
        parent::__construct();
60
        $this->middleware(
61
            function ($request, $next) {
62
                /** @var User $user */
63
                $user             = auth()->user();
64
                $this->repository = app(BudgetRepositoryInterface::class);
65
                $this->repository->setUser($user);
66
67
                return $next($request);
68
            }
69
        );
70
    }
71
72
    /**
73
     * Remove the specified resource from storage.
74
     *
75
     * @param AvailableBudget $availableBudget
76
     *
77
     * @codeCoverageIgnore
78
     *
79
     * @return JsonResponse
80
     */
81
    public function delete(AvailableBudget $availableBudget): JsonResponse
82
    {
83
        $this->repository->destroyAvailableBudget($availableBudget);
84
85
        return response()->json([], 204);
86
    }
87
88
    /**
89
     * Display a listing of the resource.
90
     *
91
     * @param Request $request
92
     *
93
     * @return JsonResponse
94
     * @codeCoverageIgnore
95
     */
96
    public function index(Request $request): JsonResponse
97
    {
98
        // create some objects:
99
        $manager = new Manager;
100
        $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
101
102
        // types to get, page size:
103
        $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
104
105
        $start = $this->parameters->get('start');
106
        $end   = $this->parameters->get('end');
107
108
        // get list of available budgets. Count it and split it.
109
        $collection       = $this->repository->getAvailableBudgetsByDate($start, $end);
110
        $count            = $collection->count();
111
        $availableBudgets = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
112
113
        // make paginator:
114
        $paginator = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page'));
115
        $paginator->setPath(route('api.v1.available_budgets.index') . $this->buildParams());
116
117
        // present to user.
118
        $manager->setSerializer(new JsonApiSerializer($baseUrl));
119
120
        /** @var AvailableBudgetTransformer $transformer */
121
        $transformer = app(AvailableBudgetTransformer::class);
122
        $transformer->setParameters($this->parameters);
123
124
        $resource = new FractalCollection($availableBudgets, $transformer, 'available_budgets');
125
        $resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
126
127
        return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
128
    }
129
130
    /**
131
     * Display the specified resource.
132
     *
133
     * @param Request $request
134
     * @param AvailableBudget $availableBudget
135
     *
136
     * @return JsonResponse
137
     * @codeCoverageIgnore
138
     */
139
    public function show(Request $request, AvailableBudget $availableBudget): JsonResponse
140
    {
141
        $manager = new Manager;
142
        $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
143
        $manager->setSerializer(new JsonApiSerializer($baseUrl));
144
145
        /** @var AvailableBudgetTransformer $transformer */
146
        $transformer = app(AvailableBudgetTransformer::class);
147
        $transformer->setParameters($this->parameters);
148
149
        $resource = new Item($availableBudget, $transformer, 'available_budgets');
150
151
        return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
152
    }
153
154
    /**
155
     * Store a newly created resource in storage.
156
     *
157
     * @param AvailableBudgetRequest $request
158
     *
159
     * @return JsonResponse
160
     */
161
    public function store(AvailableBudgetRequest $request): JsonResponse
162
    {
163
        $data = $request->getAll();
164
        /** @var TransactionCurrencyFactory $factory */
165
        $factory  = app(TransactionCurrencyFactory::class);
166
        $currency = $factory->find($data['currency_id'], $data['currency_code']);
167
168
        if (null === $currency) {
169
            $currency = app('amount')->getDefaultCurrency();
170
        }
171
        $availableBudget = $this->repository->setAvailableBudget($currency, $data['start'], $data['end'], $data['amount']);
0 ignored issues
show
It seems like $data['end'] can also be of type null; however, parameter $end of FireflyIII\Repositories\...e::setAvailableBudget() does only seem to accept Carbon\Carbon, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

171
        $availableBudget = $this->repository->setAvailableBudget($currency, $data['start'], /** @scrutinizer ignore-type */ $data['end'], $data['amount']);
Loading history...
It seems like $data['start'] can also be of type null; however, parameter $start of FireflyIII\Repositories\...e::setAvailableBudget() does only seem to accept Carbon\Carbon, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

171
        $availableBudget = $this->repository->setAvailableBudget($currency, /** @scrutinizer ignore-type */ $data['start'], $data['end'], $data['amount']);
Loading history...
172
        $manager         = new Manager;
173
        $baseUrl         = $request->getSchemeAndHttpHost() . '/api/v1';
174
        $manager->setSerializer(new JsonApiSerializer($baseUrl));
175
176
        /** @var AvailableBudgetTransformer $transformer */
177
        $transformer = app(AvailableBudgetTransformer::class);
178
        $transformer->setParameters($this->parameters);
179
180
        $resource = new Item($availableBudget, $transformer, 'available_budgets');
181
182
        return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
183
    }
184
185
186
    /**
187
     * Update the specified resource in storage.
188
     *
189
     * @param AvailableBudgetRequest $request
190
     * @param AvailableBudget $availableBudget
191
     *
192
     * @return JsonResponse
193
     */
194
    public function update(AvailableBudgetRequest $request, AvailableBudget $availableBudget): JsonResponse
195
    {
196
        $data = $request->getAll();
197
198
        /** @var TransactionCurrencyFactory $factory */
199
        $factory = app(TransactionCurrencyFactory::class);
200
        /** @var TransactionCurrency $currency */
201
        $currency = $factory->find($data['currency_id'] ?? null, $data['currency_code'] ?? null);
202
203
        if (null === $currency) {
204
            // use default currency:
205
            $currency = app('amount')->getDefaultCurrency();
206
        }
207
        $currency->enabled = true;
208
        $currency->save();
209
        unset($data['currency_code']);
210
        $data['currency_id'] = $currency->id;
211
212
213
        $this->repository->updateAvailableBudget($availableBudget, $data);
214
        $manager = new Manager;
215
        $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
216
        $manager->setSerializer(new JsonApiSerializer($baseUrl));
217
218
        /** @var AvailableBudgetTransformer $transformer */
219
        $transformer = app(AvailableBudgetTransformer::class);
220
        $transformer->setParameters($this->parameters);
221
222
        $resource = new Item($availableBudget, $transformer, 'available_budgets');
223
224
        return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
225
226
    }
227
}
228