176 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace App\Http\Controllers;
 | 
						|
 | 
						|
use App\Post;
 | 
						|
use App\PostsTag;
 | 
						|
use App\Services\ImageService;
 | 
						|
use App\Services\TagDetectorService;
 | 
						|
use App\Tag;
 | 
						|
use DateTime;
 | 
						|
use Illuminate\Http\UploadedFile;
 | 
						|
use Illuminate\Support\Facades\Auth;
 | 
						|
use Illuminate\Support\Facades\Redirect;
 | 
						|
use Intervention\Image\Constraint;
 | 
						|
use Intervention\Image\Facades\Image;
 | 
						|
 | 
						|
class DashboardController extends Controller
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Create a new controller instance.
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function __construct()
 | 
						|
    {
 | 
						|
        $this->middleware('auth');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Show the application dashboard.
 | 
						|
     *
 | 
						|
     * @return \Illuminate\Contracts\Support\Renderable
 | 
						|
     * @throws \Exception
 | 
						|
     */
 | 
						|
    public function index()
 | 
						|
    {
 | 
						|
        setlocale(LC_TIME, 'fr_FR.utf8');
 | 
						|
        $today = new DateTime();
 | 
						|
        $user_id = Auth::user()->getAuthIdentifier();
 | 
						|
        $all_counts = Post::where('user_id', $user_id)->count();
 | 
						|
        $year_counts = Post::where('user_id', $user_id)->whereYear('date_post', $today->format('Y'))->count();
 | 
						|
        $month_counts = Post::where('user_id', $user_id)
 | 
						|
            ->whereYear('date_post', $today->format('Y'))
 | 
						|
            ->whereMonth('date_post', $today->format('m'))->count();
 | 
						|
        $image_counts = Post::where('user_id', Auth::user()->getAuthIdentifier())
 | 
						|
            ->where('image', '!=', 'null')
 | 
						|
            ->count();
 | 
						|
        $posts = Post::where('user_id', $user_id)->orderBy('date_post', 'DESC')->limit(9)->get();
 | 
						|
        $today_post = Post::whereDate('date_post', '=', $today->format('Y-m-d'))
 | 
						|
            ->where('user_id', $user_id)
 | 
						|
            ->count();
 | 
						|
 | 
						|
        $already = false;
 | 
						|
        if ($today_post > 0) {
 | 
						|
            $already = true;
 | 
						|
        }
 | 
						|
 | 
						|
        return view('home', [
 | 
						|
            'already' => $already,
 | 
						|
            'all_counts' => $all_counts,
 | 
						|
            'year_counts' => $year_counts,
 | 
						|
            'month_counts' => $month_counts,
 | 
						|
            'image_counts' => $image_counts,
 | 
						|
            'today' => $today,
 | 
						|
            'posts' => $posts,
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Edit today's entry
 | 
						|
     */
 | 
						|
    public function edit(TagDetectorService $tag_detector)
 | 
						|
    {
 | 
						|
        /** @var Post $today_post */
 | 
						|
        $today_post = Post::whereDate('date_post', '=', (new DateTime())->format('Y-m-d'))
 | 
						|
            ->where('user_id', Auth::user()->getAuthIdentifier())
 | 
						|
            ->firstOrFail();
 | 
						|
 | 
						|
        $data = request()->validate([
 | 
						|
            'message' => 'required'
 | 
						|
        ]);
 | 
						|
 | 
						|
        $today_post->deleteTags();
 | 
						|
 | 
						|
        $tags = $tag_detector->detectFrom($data['message']);
 | 
						|
 | 
						|
        $today_post->content = $data['message'];
 | 
						|
        $today_post->save();
 | 
						|
        $all_tags = Tag::all();
 | 
						|
        $all_tags_names = [];
 | 
						|
        foreach ($all_tags as $tag) {
 | 
						|
            $all_tags_names[$tag->id] = $tag->name;
 | 
						|
        }
 | 
						|
 | 
						|
        foreach ($tags as $tag) {
 | 
						|
            if (in_array($tag, $all_tags_names)) {
 | 
						|
                PostsTag::create([
 | 
						|
                    'post_id' => $today_post->id,
 | 
						|
                    'tag_id' => array_search($tag, $all_tags_names),
 | 
						|
                ]);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return Redirect::to('home')->withSuccess('Great! Form successfully submit with validation.');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return \Illuminate\Http\RedirectResponse
 | 
						|
     * @throws \Exception
 | 
						|
     */
 | 
						|
    public function delete()
 | 
						|
    {
 | 
						|
        try {
 | 
						|
            $today_post = Post::whereDate('date_post', '=', (new DateTime())->format('Y-m-d'))
 | 
						|
                ->where('user_id', Auth::user()->getAuthIdentifier())
 | 
						|
                ->firstOrFail();
 | 
						|
            /** @var Post $today_post */
 | 
						|
            $today_post->deleteTags();
 | 
						|
            $today_post->delete();
 | 
						|
            return Redirect::to('home')->withSuccess('Great! Your today\'s post is now deleted. You can make a new one!');
 | 
						|
        } catch (\ErrorException $e) {
 | 
						|
            return Redirect::to('home')->withErrors('Oh no! We could\'t find your today\'s post.');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param TagDetectorService $tag_detector
 | 
						|
     * @return mixed
 | 
						|
     * @throws \Exception
 | 
						|
     */
 | 
						|
    public function store(TagDetectorService $tag_detector, ImageService $image_service)
 | 
						|
    {
 | 
						|
        $user_id = Auth::user()->getAuthIdentifier();
 | 
						|
 | 
						|
        $validated_data = request()->validate([
 | 
						|
            'message' => 'required',
 | 
						|
            'file' => 'file|mimes:jpeg,png,jpg,gif,svg',
 | 
						|
        ]);
 | 
						|
 | 
						|
        $data = [
 | 
						|
            'user_id'   => $user_id,
 | 
						|
            'date_post' => new DateTime(),
 | 
						|
            'content'   => $validated_data['message'],
 | 
						|
        ];
 | 
						|
 | 
						|
        if (!empty($validated_data['file'])) {
 | 
						|
            /** @var UploadedFile $uploaded_document */
 | 
						|
            $uploaded_document = $validated_data['file'];
 | 
						|
            $file_name = $uploaded_document->getClientOriginalName();
 | 
						|
            $uploaded_document->storeAs(Auth::user()->getFolder(), $file_name);
 | 
						|
            $image_service->makeThumbnail($uploaded_document->getRealPath(), ['width' => 300]);
 | 
						|
            $data['image'] = $file_name;
 | 
						|
        }
 | 
						|
 | 
						|
        $tags = $tag_detector->detectFrom($data['content']);
 | 
						|
 | 
						|
        $check = Post::create($data);
 | 
						|
        $all_tags = Tag::all();
 | 
						|
        $all_tags_names = [];
 | 
						|
        foreach ($all_tags as $tag) {
 | 
						|
            $all_tags_names[$tag->id] = $tag->name;
 | 
						|
        }
 | 
						|
 | 
						|
        foreach ($tags as $tag) {
 | 
						|
            if (in_array($tag, $all_tags_names)) {
 | 
						|
                PostsTag::create([
 | 
						|
                    'post_id' => $check->id,
 | 
						|
                    'tag_id' => array_search($tag, $all_tags_names),
 | 
						|
                ]);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return Redirect::to('home')->withSuccess('Great! Form successfully submit with validation.');
 | 
						|
    }
 | 
						|
}
 |