Merge branch 'master' of ssh://git.shikiryu.com:2200/Shikiryu/journal-intime into e2e
This commit is contained in:
		
							
								
								
									
										175
									
								
								app/Http/Controllers/DashboardController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								app/Http/Controllers/DashboardController.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,175 @@
 | 
			
		||||
<?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;
 | 
			
		||||
 | 
			
		||||
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();
 | 
			
		||||
        $user = \App\User::find($user_id);
 | 
			
		||||
        $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,
 | 
			
		||||
            'must_encrypt' => $user->encrypt_messages,
 | 
			
		||||
            '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.');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user