diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 5268516..9fa67a5 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -3,6 +3,9 @@ namespace App\Http\Controllers; use App\Post; +use App\PostsTag; +use App\Services\TagDetectorService; +use App\Tag; use DateTime; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Redirect; @@ -33,35 +36,51 @@ class HomeController extends Controller $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, 'today' => $today, 'posts' => $posts, ]); } - - public function store() + + public function store(TagDetectorService $tag_detector) { $today = new DateTime(); - + $data = request()->validate([ 'message' => 'required' ]); - + $data = [ 'user_id' => Auth::user()->getAuthIdentifier(), 'date_post' => new DateTime(), // Take back the date from the form ? 'content' => $data['message'], ]; - + + $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.'); } } diff --git a/app/Http/Controllers/StatsController.php b/app/Http/Controllers/StatsController.php new file mode 100644 index 0000000..a40a188 --- /dev/null +++ b/app/Http/Controllers/StatsController.php @@ -0,0 +1,14 @@ +app->bind(TagDetectorService::class); + } + + /** + * Bootstrap services. + * + * @return void + */ + public function boot() + { + // + } +} diff --git a/app/Services/TagDetectorService.php b/app/Services/TagDetectorService.php new file mode 100644 index 0000000..fa3fdb5 --- /dev/null +++ b/app/Services/TagDetectorService.php @@ -0,0 +1,36 @@ +%s ', url('stats'), '$1', '#$1')), + $text + ); + } +} diff --git a/config/app.php b/config/app.php index 2bf6bda..7e4d3a8 100644 --- a/config/app.php +++ b/config/app.php @@ -175,6 +175,8 @@ return [ App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, + \App\Providers\TagDetectorProvider::class, + ], /* diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index cfcfed1..dd2e4c0 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -1,5 +1,7 @@ @extends('layouts.app') +@inject('tag_detector', 'App\Services\TagDetectorService) + @section('content')
@@ -39,7 +41,7 @@ @foreach($posts as $post)

{{ \Carbon\Carbon::instance($post->date_post)->diffForHumans() }}

-

{{ $post->content }}

+

{!! $tag_detector->linkTagFrom($post->content) !!}

@endforeach
diff --git a/routes/web.php b/routes/web.php index 0af147d..3f6eb2a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -16,3 +16,4 @@ Auth::routes(); Route::get('/', 'WelcomeController@index')->name('home'); Route::get('/home', 'HomeController@index')->name('dashboard'); Route::post('store', 'HomeController@store')->name('store'); +Route::post('stats', 'StatsController@tag')->name('stats'); // TODO make a group for stats