1 | <?php |
||||
2 | |||||
3 | namespace DavideCasiraghi\LaravelJumbotronImages\Http\Controllers; |
||||
4 | |||||
5 | use DavideCasiraghi\LaravelJumbotronImages\Models\JumbotronImage; |
||||
6 | use Illuminate\Http\Request; |
||||
7 | use Illuminate\Support\Facades\App; |
||||
8 | use Intervention\Image\ImageManagerStatic as Image; |
||||
9 | use Mcamara\LaravelLocalization\Facades\LaravelLocalization; |
||||
10 | |||||
11 | class JumbotronImageController |
||||
12 | { |
||||
13 | /** |
||||
14 | * Display the specified resource. |
||||
15 | * |
||||
16 | * @param \Illuminate\Http\Request $request |
||||
17 | * @return \Illuminate\Http\Response |
||||
18 | */ |
||||
19 | 3 | public function index(Request $request) |
|||
20 | { |
||||
21 | 3 | $searchKeywords = $request->input('keywords'); |
|||
22 | //$searchCategory = $request->input('category_id'); |
||||
23 | 3 | $countriesAvailableForTranslations = LaravelLocalization::getSupportedLocales(); |
|||
24 | |||||
25 | 3 | if ($searchKeywords) { |
|||
26 | $jumbotronImages = JumbotronImage:: |
||||
27 | select('jumbotron_image_translations.jumbotron_image_id AS id', 'title', 'body', 'button_text', 'image_file_name', 'button_url', 'locale') |
||||
28 | ->join('jumbotron_image_translations', 'jumbotron_images.id', '=', 'jumbotron_image_translations.jumbotron_image_id') |
||||
29 | ->orderBy('title') |
||||
30 | ->where('title', 'like', '%'.$searchKeywords.'%') |
||||
31 | ->where('locale', 'en') |
||||
32 | ->paginate(20); |
||||
33 | } else { |
||||
34 | $jumbotronImages = JumbotronImage:: |
||||
35 | 3 | select('jumbotron_image_translations.jumbotron_image_id AS id', 'title', 'body', 'button_text', 'image_file_name', 'button_url', 'locale') |
|||
36 | 3 | ->join('jumbotron_image_translations', 'jumbotron_images.id', '=', 'jumbotron_image_translations.jumbotron_image_id') |
|||
37 | 3 | ->where('locale', 'en') |
|||
38 | 3 | ->orderBy('title') |
|||
39 | 3 | ->paginate(20); |
|||
40 | } |
||||
41 | |||||
42 | 3 | return view('laravel-jumbotron-images::jumbotronImages.index', compact('jumbotronImages')) |
|||
43 | 3 | ->with('i', (request()->input('page', 1) - 1) * 20) |
|||
44 | 3 | ->with('searchKeywords', $searchKeywords) |
|||
45 | 3 | ->with('countriesAvailableForTranslations', $countriesAvailableForTranslations); |
|||
46 | } |
||||
47 | |||||
48 | /***************************************************************************/ |
||||
49 | |||||
50 | /** |
||||
51 | * Show the form for creating a new resource. |
||||
52 | * |
||||
53 | * @return \Illuminate\Http\Response |
||||
54 | */ |
||||
55 | 1 | public function create() |
|||
56 | { |
||||
57 | 1 | return view('laravel-jumbotron-images::jumbotronImages.create') |
|||
58 | 1 | ->with('jumbotronHeightArray', $this->getJumbotronHeightArray()) |
|||
59 | 1 | ->with('buttonColorArray', $this->getButtonColorArray()) |
|||
60 | 1 | ->with('coverOpacityArray', $this->getCoverOpacityArray()) |
|||
61 | 1 | ->with('textWidthArray', $this->getTextWidthArray()) |
|||
62 | 1 | ->with('textVerticalAlignmentArray', $this->getTextVerticalAlignmentArray()) |
|||
63 | 1 | ->with('textHorizontalAlignmentArray', $this->getTextHorizontalAlignmentArray()) |
|||
64 | 1 | ->with('textShadowArray', $this->getTextShadowArray()); |
|||
65 | } |
||||
66 | |||||
67 | /***************************************************************************/ |
||||
68 | |||||
69 | /** |
||||
70 | * Store a newly created resource in storage. |
||||
71 | * |
||||
72 | * @param \Illuminate\Http\Request $request |
||||
73 | * @return \Illuminate\Http\Response |
||||
74 | */ |
||||
75 | 1 | public function store(Request $request) |
|||
76 | { |
||||
77 | 1 | $jumbotronImage = new JumbotronImage(); |
|||
78 | |||||
79 | // Set the default language to edit the quote in English |
||||
80 | 1 | App::setLocale('en'); |
|||
81 | |||||
82 | 1 | $this->saveOnDb($request, $jumbotronImage); |
|||
83 | |||||
84 | 1 | return redirect()->route('jumbotron-images.index') |
|||
85 | 1 | ->with('success', 'Jumbotron image added succesfully'); |
|||
86 | } |
||||
87 | |||||
88 | /***************************************************************************/ |
||||
89 | |||||
90 | /** |
||||
91 | * Display the specified resource. |
||||
92 | * |
||||
93 | * @param int $jumbotronImageId |
||||
94 | * @return \Illuminate\Http\Response |
||||
95 | */ |
||||
96 | 1 | public function show($jumbotronImageId = null) |
|||
97 | { |
||||
98 | 1 | $jumbotronImage = JumbotronImage::find($jumbotronImageId); |
|||
99 | |||||
100 | 1 | return view('laravel-jumbotron-images::jumbotronImages.show', compact('jumbotronImage')); |
|||
101 | } |
||||
102 | |||||
103 | /***************************************************************************/ |
||||
104 | |||||
105 | /** |
||||
106 | * Show the form for editing the specified resource. |
||||
107 | * |
||||
108 | * @param int $jumbotronImageId |
||||
109 | * @return \Illuminate\Http\Response |
||||
110 | */ |
||||
111 | 1 | public function edit($jumbotronImageId = null) |
|||
112 | { |
||||
113 | 1 | $jumbotronImage = JumbotronImage::find($jumbotronImageId); |
|||
114 | |||||
115 | 1 | return view('laravel-jumbotron-images::jumbotronImages.edit', compact('jumbotronImage')) |
|||
116 | 1 | ->with('jumbotronHeightArray', $this->getJumbotronHeightArray()) |
|||
117 | 1 | ->with('buttonColorArray', $this->getButtonColorArray()) |
|||
118 | 1 | ->with('coverOpacityArray', $this->getCoverOpacityArray()) |
|||
119 | 1 | ->with('textWidthArray', $this->getTextWidthArray()) |
|||
120 | 1 | ->with('textVerticalAlignmentArray', $this->getTextVerticalAlignmentArray()) |
|||
121 | 1 | ->with('textHorizontalAlignmentArray', $this->getTextHorizontalAlignmentArray()) |
|||
122 | 1 | ->with('textShadowArray', $this->getTextShadowArray()); |
|||
123 | } |
||||
124 | |||||
125 | /***************************************************************************/ |
||||
126 | |||||
127 | /** |
||||
128 | * Update the specified resource in storage. |
||||
129 | * |
||||
130 | * @param \Illuminate\Http\Request $request |
||||
131 | * @param int $jumbotronImageId |
||||
132 | * @return \Illuminate\Http\Response |
||||
133 | */ |
||||
134 | 1 | public function update(Request $request, $jumbotronImageId) |
|||
135 | { |
||||
136 | 1 | $jumbotronImage = JumbotronImage::find($jumbotronImageId); |
|||
137 | |||||
138 | // Set the default language to update the quote in English |
||||
139 | 1 | App::setLocale('en'); |
|||
140 | |||||
141 | 1 | $this->saveOnDb($request, $jumbotronImage); |
|||
142 | |||||
143 | 1 | return redirect()->route('jumbotron-images.index') |
|||
144 | 1 | ->with('success', 'Jumbotron image updated succesfully'); |
|||
145 | } |
||||
146 | |||||
147 | /***************************************************************************/ |
||||
148 | |||||
149 | /** |
||||
150 | * Remove the specified resource from storage. |
||||
151 | * |
||||
152 | * @param int $jumbotronImageId |
||||
153 | * @return \Illuminate\Http\Response |
||||
154 | */ |
||||
155 | 1 | public function destroy($jumbotronImageId) |
|||
156 | { |
||||
157 | 1 | $jumbotronImage = JumbotronImage::find($jumbotronImageId); |
|||
158 | 1 | $jumbotronImage->delete(); |
|||
159 | |||||
160 | 1 | return redirect()->route('jumbotron-images.index') |
|||
161 | 1 | ->with('success', 'Jumbotron image deleted succesfully'); |
|||
162 | } |
||||
163 | |||||
164 | /***************************************************************************/ |
||||
165 | |||||
166 | /** |
||||
167 | * Save the record on DB. |
||||
168 | * @param \Illuminate\Http\Request $request |
||||
169 | * @param \DavideCasiraghi\LaravelJumbotronImages\Models\JumbotronImage $jumbotronImage |
||||
170 | * @return void |
||||
171 | */ |
||||
172 | 2 | public function saveOnDb($request, $jumbotronImage) |
|||
173 | { |
||||
174 | 2 | $jumbotronImage->translateOrNew('en')->title = $request->get('title'); |
|||
175 | 2 | $jumbotronImage->translateOrNew('en')->body = $request->get('body'); |
|||
176 | 2 | $jumbotronImage->translateOrNew('en')->button_text = $request->get('button_text'); |
|||
177 | 2 | $jumbotronImage->button_url = $request->get('button_url'); |
|||
178 | 2 | $jumbotronImage->jumbotron_height = $request->get('jumbotron_height'); |
|||
179 | 2 | $jumbotronImage->cover_opacity = $request->get('cover_opacity'); |
|||
180 | 2 | $jumbotronImage->scroll_down_arrow = ($request->scroll_down_arrow == 'on') ? 1 : 0; |
|||
181 | 2 | $jumbotronImage->background_color = $request->get('background_color'); |
|||
182 | 2 | $jumbotronImage->button_color = $request->get('button_color'); |
|||
183 | 2 | $jumbotronImage->parallax = ($request->parallax == 'on') ? 1 : 0; |
|||
184 | 2 | $jumbotronImage->white_moon = ($request->white_moon == 'on') ? 1 : 0; |
|||
185 | 2 | $jumbotronImage->text_width = $request->get('text_width'); |
|||
186 | 2 | $jumbotronImage->text_vertical_alignment = $request->get('text_vertical_alignment'); |
|||
187 | 2 | $jumbotronImage->text_horizontal_alignment = $request->get('text_horizontal_alignment'); |
|||
188 | 2 | $jumbotronImage->text_shadow = $request->get('text_shadow'); |
|||
189 | |||||
190 | // Jumbotron image upload |
||||
191 | 2 | if ($request->file('image_file_name')) { |
|||
192 | $imageFile = $request->file('image_file_name'); |
||||
193 | $imageName = $imageFile->hashName(); |
||||
194 | $imageSubdir = 'jumbotron_images'; |
||||
195 | $imageWidth = '1067'; |
||||
196 | $thumbWidth = '690'; |
||||
197 | |||||
198 | $this->uploadImageOnServer($imageFile, $imageName, $imageSubdir, $imageWidth, $thumbWidth); |
||||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||||
199 | $jumbotronImage->image_file_name = $imageName; |
||||
200 | } else { |
||||
201 | 2 | $jumbotronImage->image_file_name = $request->image_file_name; |
|||
202 | } |
||||
203 | |||||
204 | 2 | $jumbotronImage->save(); |
|||
205 | 2 | } |
|||
206 | |||||
207 | /***************************************************************************/ |
||||
208 | |||||
209 | /** |
||||
210 | * Upload image on server. |
||||
211 | * $imageFile - the file to upload |
||||
212 | * $imageSubdir is the subdir in /storage/app/public/images/.. |
||||
213 | * |
||||
214 | * @param array $imageFile |
||||
215 | * @param string $imageName |
||||
216 | * @param string $imageSubdir |
||||
217 | * @param string $imageWidth |
||||
218 | * @param string $thumbWidth |
||||
219 | * @return void |
||||
220 | */ |
||||
221 | 1 | public static function uploadImageOnServer($imageFile, $imageName, $imageSubdir, $imageWidth, $thumbWidth) |
|||
222 | { |
||||
223 | |||||
224 | // Create dir if not exist (in /storage/app/public/images/..) |
||||
225 | 1 | if (! \Storage::disk('public')->has('images/'.$imageSubdir.'/')) { |
|||
0 ignored issues
–
show
The method
has() does not exist on Illuminate\Contracts\Filesystem\Filesystem . It seems like you code against a sub-type of Illuminate\Contracts\Filesystem\Filesystem such as Illuminate\Filesystem\FilesystemAdapter .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
226 | 1 | \Storage::disk('public')->makeDirectory('images/'.$imageSubdir.'/'); |
|||
227 | } |
||||
228 | |||||
229 | 1 | $destinationPath = 'app/public/images/'.$imageSubdir.'/'; |
|||
230 | |||||
231 | // Resize the image with Intervention - http://image.intervention.io/api/resize |
||||
232 | // - resize and store the image to a width of 300 and constrain aspect ratio (auto height) |
||||
233 | // - save file as jpg with medium quality |
||||
234 | 1 | $image = Image::make($imageFile->getRealPath()) |
|||
235 | 1 | ->resize($imageWidth, null, |
|||
0 ignored issues
–
show
$imageWidth of type string is incompatible with the type integer expected by parameter $width of Intervention\Image\Image::resize() .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
236 | function ($constraint) { |
||||
237 | 1 | $constraint->aspectRatio(); |
|||
238 | 1 | }) |
|||
239 | 1 | ->save(storage_path($destinationPath.$imageName), 75); |
|||
240 | |||||
241 | // Create the thumb |
||||
242 | 1 | $image->resize($thumbWidth, null, |
|||
243 | function ($constraint) { |
||||
244 | 1 | $constraint->aspectRatio(); |
|||
245 | 1 | }) |
|||
246 | 1 | ->save(storage_path($destinationPath.'thumb_'.$imageName), 75); |
|||
247 | 1 | } |
|||
248 | |||||
249 | /***************************************************************************/ |
||||
250 | |||||
251 | /** |
||||
252 | * Return and array with the jumbotron possible height options. |
||||
253 | * |
||||
254 | * @return array |
||||
255 | */ |
||||
256 | 2 | public static function getJumbotronHeightArray() |
|||
257 | { |
||||
258 | $ret = [ |
||||
259 | 2 | 'is-small' => 'Small', |
|||
260 | 'is-medium' => 'Medium', |
||||
261 | 'is-large' => 'Large', |
||||
262 | 'is-halfheight' => 'Halfheight', |
||||
263 | 'is-fullheight' => 'Fullheight', |
||||
264 | ]; |
||||
265 | |||||
266 | 2 | return $ret; |
|||
267 | } |
||||
268 | |||||
269 | /***************************************************************************/ |
||||
270 | |||||
271 | /** |
||||
272 | * Return and array with the jumbotron possible opacity options. |
||||
273 | * |
||||
274 | * @return array |
||||
275 | */ |
||||
276 | 2 | public static function getCoverOpacityArray() |
|||
277 | { |
||||
278 | $ret = [ |
||||
279 | 2 | '0' => 'none', |
|||
280 | '0.1' => '10%', |
||||
281 | '0.2' => '20%', |
||||
282 | '0.3' => '30%', |
||||
283 | '0.4' => '40%', |
||||
284 | '0.5' => '50%', |
||||
285 | ]; |
||||
286 | |||||
287 | 2 | return $ret; |
|||
288 | } |
||||
289 | |||||
290 | /***************************************************************************/ |
||||
291 | |||||
292 | /** |
||||
293 | * Return and array with the button possible color options. |
||||
294 | * |
||||
295 | * @return array |
||||
296 | */ |
||||
297 | 2 | public static function getButtonColorArray() |
|||
298 | { |
||||
299 | $ret = [ |
||||
300 | 2 | 'press-red' => 'Red', |
|||
301 | 'press-pink' => 'Pink', |
||||
302 | 'press-purple' => 'Purple', |
||||
303 | 'press-deeppurple' => 'Deep purple', |
||||
304 | 'press-indigo' => 'Indigo', |
||||
305 | 'press-blue' => 'Blue', |
||||
306 | 'press-lightblue' => 'Light blue', |
||||
307 | 'press-cyan' => 'Cyan', |
||||
308 | 'press-teal' => 'Teal', |
||||
309 | 'press-green' => 'Green', |
||||
310 | 'press-lightgreen' => 'Light green', |
||||
311 | 'press-lime' => 'Lime', |
||||
312 | 'press-yellow' => 'Yellow', |
||||
313 | 'press-amber' => 'Amber', |
||||
314 | 'press-orange' => 'Orange', |
||||
315 | 'press-deeporange' => 'Deeporange', |
||||
316 | 'press-brown' => 'Brown', |
||||
317 | 'press-grey' => 'Grey', |
||||
318 | 'press-bluegrey' => 'Blue grey', |
||||
319 | 'press-black' => 'Black', |
||||
320 | ]; |
||||
321 | |||||
322 | 2 | return $ret; |
|||
323 | } |
||||
324 | |||||
325 | /***************************************************************************/ |
||||
326 | |||||
327 | /** |
||||
328 | * Return and array with the text possible width options. |
||||
329 | * |
||||
330 | * @return array |
||||
331 | */ |
||||
332 | 2 | public static function getTextWidthArray() |
|||
333 | { |
||||
334 | $ret = [ |
||||
335 | 2 | '100' => '100%', |
|||
336 | '90' => '90%', |
||||
337 | '80' => '80%', |
||||
338 | '70' => '70%', |
||||
339 | '60' => '60%', |
||||
340 | '50' => '50%', |
||||
341 | '40' => '40%', |
||||
342 | '30' => '30%', |
||||
343 | '20' => '20%', |
||||
344 | ]; |
||||
345 | |||||
346 | 2 | return $ret; |
|||
347 | } |
||||
348 | |||||
349 | /***************************************************************************/ |
||||
350 | |||||
351 | /** |
||||
352 | * Return and array with the text possible vertical alignment options. |
||||
353 | * |
||||
354 | * @return array |
||||
355 | */ |
||||
356 | 2 | public static function getTextVerticalAlignmentArray() |
|||
357 | { |
||||
358 | $ret = [ |
||||
359 | 2 | 'align-items: flex-start;' => 'Top', |
|||
360 | 'align-items: center;' => 'Center', |
||||
361 | 'align-items: flex-end;' => 'Bottom', |
||||
362 | ]; |
||||
363 | |||||
364 | 2 | return $ret; |
|||
365 | } |
||||
366 | |||||
367 | /***************************************************************************/ |
||||
368 | |||||
369 | /** |
||||
370 | * Return and array with the text possible horizontal alignment options. |
||||
371 | * |
||||
372 | * @return array |
||||
373 | */ |
||||
374 | 2 | public static function getTextHorizontalAlignmentArray() |
|||
375 | { |
||||
376 | $ret = [ |
||||
377 | 2 | 'left' => 'Left', |
|||
378 | 'center' => 'Center', |
||||
379 | 'right' => 'Right', |
||||
380 | ]; |
||||
381 | |||||
382 | 2 | return $ret; |
|||
383 | } |
||||
384 | |||||
385 | /***************************************************************************/ |
||||
386 | |||||
387 | /** |
||||
388 | * Return and array with the text possible shadow options. |
||||
389 | * |
||||
390 | * @return array |
||||
391 | */ |
||||
392 | 2 | public static function getTextShadowArray() |
|||
393 | { |
||||
394 | $ret = [ |
||||
395 | 2 | '' => 'None', |
|||
396 | 'text-shadow: 2px 1px 5px rgba(0,0,0,0.3);' => 'Small', |
||||
397 | 'text-shadow: 2px 1px 1px rgba(0,0,0,0.3);' => 'Small Blurred', |
||||
398 | 'text-shadow: 3px 2px 2px rgba(0,0,0,0.3);' => 'High', |
||||
399 | ]; |
||||
400 | |||||
401 | 2 | return $ret; |
|||
402 | } |
||||
403 | } |
||||
404 |