Issues (33)

src/Http/Controllers/AlbumController.php (1 issue)

Severity
1
<?php
2
3
namespace FaithGen\Gallery\Http\Controllers;
4
5
use FaithGen\Gallery\Http\Requests\AddImagesRequest;
6
use FaithGen\Gallery\Http\Requests\CreateRequest;
7
use FaithGen\Gallery\Http\Requests\DeleteImageRequest;
8
use FaithGen\Gallery\Http\Requests\GetRequest;
9
use FaithGen\Gallery\Http\Requests\ImagesRequest;
10
use FaithGen\Gallery\Http\Requests\UpdateRequest;
11
use FaithGen\Gallery\Http\Resources\Album as AlbumResource;
12
use FaithGen\Gallery\Http\Resources\Image as ImageResource;
13
use FaithGen\Gallery\Jobs\ImageSaved\ProcessUploadedImage;
14
use FaithGen\Gallery\Jobs\ImageSaved\S3Upload;
15
use FaithGen\Gallery\Models\Album;
16
use FaithGen\Gallery\Services\AlbumService;
17
use FaithGen\SDK\Helpers\CommentHelper;
18
use FaithGen\SDK\Http\Requests\CommentRequest;
19
use FaithGen\SDK\Http\Requests\IndexRequest;
20
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
21
use Illuminate\Http\Request;
22
use Illuminate\Routing\Controller;
23
use InnoFlash\LaraStart\Helper;
24
use InnoFlash\LaraStart\Traits\APIResponses;
25
use Intervention\Image\ImageManager;
26
27
class AlbumController extends Controller
28
{
29
    use AuthorizesRequests, APIResponses;
30
31
    /**
32
     * @var AlbumService
33
     */
34
    private $albumService;
35
36
    public function __construct(AlbumService $albumService)
37
    {
38
        $this->albumService = $albumService;
39
    }
40
41
    /**
42
     * Gets the albums.
43
     *
44
     * @param  IndexRequest  $request
45
     *
46
     * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
47
     */
48
    public function index(IndexRequest $request)
49
    {
50
        $albums = $this->albumService->getParentRelationship()->where('name', 'LIKE', '%'.$request->filter_text.'%')
51
            ->latest()
52
            ->paginate($request->has('limit') ? $request->limit : 15);
53
54
        AlbumResource::wrap('albums');
55
56
        return AlbumResource::collection($albums);
57
    }
58
59
    /**
60
     * Creates an album.
61
     *
62
     * @param  CreateRequest  $request
63
     *
64
     * @return \Illuminate\Http\JsonResponse
65
     */
66
    public function create(CreateRequest $request)
67
    {
68
        return $this->albumService->createFromParent($request->validated(), 'Album created!');
69
    }
70
71
    /**
72
     * Updates an album.
73
     *
74
     * @param  UpdateRequest  $request
75
     *
76
     * @return \Illuminate\Http\JsonResponse|mixed
77
     */
78
    public function update(UpdateRequest $request)
79
    {
80
        return $this->albumService->update($request->validated());
81
    }
82
83
    /**
84
     * Deletes an album.
85
     *
86
     * @param  GetRequest  $request
87
     *
88
     * @return mixed
89
     */
90
    public function destroy(GetRequest $request)
0 ignored issues
show
The parameter $request is not used and could be removed. ( Ignorable by Annotation )

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

90
    public function destroy(/** @scrutinizer ignore-unused */ GetRequest $request)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
91
    {
92
        return $this->albumService->destroy();
93
    }
94
95
    /**
96
     * Views images in an album.
97
     *
98
     * @param  ImagesRequest  $request
99
     *
100
     * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
101
     */
102
    public function view(ImagesRequest $request)
103
    {
104
        $images = $this->albumService
105
            ->getAlbum()
106
            ->images()
107
            ->latest()
108
            ->paginate(Helper::getLimit($request));
109
110
        ImageResource::wrap('images');
111
112
        return ImageResource::collection($images);
113
    }
114
115
    /**
116
     * Adds an image to an album.
117
     *
118
     * @param  AddImagesRequest  $request
119
     * @param  ImageManager  $imageManager
120
     *
121
     * @return mixed
122
     */
123
    public function addImage(AddImagesRequest $request, ImageManager $imageManager)
124
    {
125
        $fileName = str_shuffle($this->albumService->getAlbum()->id.time().time()).'.png';
126
        $ogSave = storage_path('app/public/gallery/original/').$fileName;
127
128
        $imageManager->make($request->file('images'))->save($ogSave);
129
130
        $image = $this->albumService->getAlbum()->images()->create([
131
            'name' => $fileName,
132
        ]);
133
134
        ProcessUploadedImage::withChain([
135
            new S3Upload($image),
136
        ])->dispatch($image);
137
138
        return $this->successResponse('Image uploaded');
139
    }
140
141
    /**
142
     * Removes an image from an album.
143
     *
144
     * @param  DeleteImageRequest  $request
145
     * @param  string  $image_id
146
     *
147
     * @return mixed
148
     */
149
    public function destroyImage(DeleteImageRequest $request, string $image_id)
150
    {
151
        $image = $this->albumService->getAlbum()->images()->findOrFail($image_id);
152
153
        try {
154
            unlink(storage_path('app/public/gallery/100-100/'.$image->name));
155
            unlink(storage_path('app/public/gallery/original/'.$image->name));
156
            $image->delete();
157
158
            return $this->successResponse('Image deleted!');
159
        } catch (\Exception $e) {
160
            abort(500, $e->getMessage());
161
        }
162
    }
163
164
    /**
165
     * Sends a comment to an album.
166
     *
167
     * @param  CommentRequest  $request
168
     *
169
     * @return \Illuminate\Http\JsonResponse
170
     */
171
    public function comment(CommentRequest $request)
172
    {
173
        return CommentHelper::createComment($this->albumService->getAlbum(), $request);
174
    }
175
176
    /**
177
     * Fetches comments for an album.
178
     *
179
     * @param  Request  $request
180
     * @param  Album  $album
181
     *
182
     * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
183
     * @throws \Illuminate\Auth\Access\AuthorizationException
184
     */
185
    public function comments(Request $request, Album $album)
186
    {
187
        $this->authorize('view', $album);
188
189
        return CommentHelper::getComments($album, $request);
190
    }
191
}
192