83 lines
2.5 KiB
PHP
83 lines
2.5 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Http\Controllers;
|
||
|
|
||
|
use App\Post;
|
||
|
use Illuminate\Support\Facades\Auth;
|
||
|
use Illuminate\Support\Facades\File;
|
||
|
use Intervention\Image\Constraint;
|
||
|
use Intervention\Image\Facades\Image;
|
||
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||
|
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
|
||
|
|
||
|
class ImageController extends Controller
|
||
|
{
|
||
|
/**
|
||
|
* @param int $post_id
|
||
|
* @param string|array $options
|
||
|
* @param string $image
|
||
|
*
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public function display($post_id, $options = 'o:full', $image)
|
||
|
{
|
||
|
if (Auth::guest()) {
|
||
|
throw new UnauthorizedHttpException('Vous devez être connecté pour voir cette image.');
|
||
|
}
|
||
|
|
||
|
$post = Post::find($post_id);
|
||
|
|
||
|
if (Auth::user()->getAuthIdentifier() !== (int)$post->user_id) {
|
||
|
throw new UnauthorizedHttpException('Cette image ne vous appartient pas.');
|
||
|
}
|
||
|
|
||
|
$path = sprintf('%s/%s/%s', storage_path('app'), Auth::user()->getFolder(), $image);
|
||
|
if (!is_readable($path)) {
|
||
|
throw new NotFoundHttpException();
|
||
|
}
|
||
|
|
||
|
|
||
|
$img = Image::make($path);
|
||
|
|
||
|
if ('o:full' !== $options) {
|
||
|
$options = explode('!', $options);
|
||
|
$width = null;
|
||
|
$height = null;
|
||
|
foreach ($options as $option) {
|
||
|
$current_option = explode(':', $option);
|
||
|
foreach ($current_option as $current_option_name => $current_option_value) {
|
||
|
switch ($current_option_name) {
|
||
|
case 'w':
|
||
|
$width = $current_option_value;
|
||
|
break;
|
||
|
case 'h':
|
||
|
$height = $current_option_value;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
//http://image.intervention.io/getting_started/
|
||
|
$img->resize($width, $height, static function (Constraint $constraint) {
|
||
|
$constraint->aspectRatio();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return $img->response(File::extension($path));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||
|
*/
|
||
|
public function gallery()
|
||
|
{
|
||
|
$posts_with_image = Post::where('user_id', Auth::user()->getAuthIdentifier())
|
||
|
->where('image', '!=', 'null')
|
||
|
->orderBy('created_at', 'desc')
|
||
|
->paginate(30);
|
||
|
|
||
|
return view('gallery.my', [
|
||
|
'posts' => $posts_with_image,
|
||
|
]);
|
||
|
}
|
||
|
}
|