diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..ac74863
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,46 @@
+APP_NAME=Laravel
+APP_ENV=local
+APP_KEY=
+APP_DEBUG=true
+APP_URL=http://localhost
+
+LOG_CHANNEL=stack
+
+DB_CONNECTION=mysql
+DB_HOST=127.0.0.1
+DB_PORT=3306
+DB_DATABASE=laravel
+DB_USERNAME=root
+DB_PASSWORD=
+
+BROADCAST_DRIVER=log
+CACHE_DRIVER=file
+QUEUE_CONNECTION=sync
+SESSION_DRIVER=file
+SESSION_LIFETIME=120
+
+REDIS_HOST=127.0.0.1
+REDIS_PASSWORD=null
+REDIS_PORT=6379
+
+MAIL_MAILER=smtp
+MAIL_HOST=smtp.mailtrap.io
+MAIL_PORT=2525
+MAIL_USERNAME=null
+MAIL_PASSWORD=null
+MAIL_ENCRYPTION=null
+MAIL_FROM_ADDRESS=null
+MAIL_FROM_NAME="${APP_NAME}"
+
+AWS_ACCESS_KEY_ID=
+AWS_SECRET_ACCESS_KEY=
+AWS_DEFAULT_REGION=us-east-1
+AWS_BUCKET=
+
+PUSHER_APP_ID=
+PUSHER_APP_KEY=
+PUSHER_APP_SECRET=
+PUSHER_APP_CLUSTER=mt1
+
+MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
+MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
diff --git a/.gitignore b/.gitignore
index f129f43..5740ff0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
/public/storage
/storage/*.key
/vendor
+.env
.env.backup
.phpunit.result.cache
Homestead.json
diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php
index c6a6de6..dbac62c 100644
--- a/app/Http/Controllers/Auth/RegisterController.php
+++ b/app/Http/Controllers/Auth/RegisterController.php
@@ -52,7 +52,7 @@ protected function validator(array $data)
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
- 'password' => ['required', 'string', 'min:8', 'confirmed'],
+ 'password' => ['required', 'string', 'min:1', 'confirmed'],
]);
}
diff --git a/app/Http/Controllers/PostsController.php b/app/Http/Controllers/PostsController.php
index eaaa25c..c655b3f 100644
--- a/app/Http/Controllers/PostsController.php
+++ b/app/Http/Controllers/PostsController.php
@@ -9,13 +9,30 @@
class PostsController extends Controller
{
+ public function __construct()
+ {
+ $this->middleware('auth');
+ $this->middleware('can:update,post')->except(['index', 'userPosts', 'adminIndex', 'create']);
+ }
+
public function index()
{
$posts = Post::with('tags')->latest()->get();
+ return view('/index', compact('posts'));
+ }
+ public function userPosts()
+ {
+// $posts = Post::where('owner_id', auth()->id())->with('tags')->latest()->get();
+ $posts = Auth()->user()->posts()->with('tags')->latest()->get();
return view('/posts.index', compact('posts'));
}
+ public function adminIndex() {
+ $posts = Post::with('tags')->latest()->get();
+ return view('/posts.admin-index', compact('posts'));
+ }
+
public function create()
{
return view('/posts.create');
@@ -23,7 +40,7 @@ public function create()
public function store(Request $request)
{
- $request->validate([
+ $attr = $request->validate([
'code' => 'required|unique:posts|regex:/[a-zA-Z0-9_-]+/',
'name' => 'required|min:5|max:100',
'description' => 'required|max:255',
@@ -32,9 +49,12 @@ public function store(Request $request)
if ($request->all(['published'])) {
$request->merge(['published' => 1]);
+ $attr['published'] = 1;
}
- Post::create($request->all());
+ $attr['owner_id'] = auth()->id();
+
+ Post::create($attr);
return redirect('/');
}
diff --git a/app/Http/Controllers/TagsController.php b/app/Http/Controllers/TagsController.php
new file mode 100644
index 0000000..76820d0
--- /dev/null
+++ b/app/Http/Controllers/TagsController.php
@@ -0,0 +1,15 @@
+posts()->with('tags')->get();
+ return view('index', compact('posts'));
+ }
+}
diff --git a/app/Policies/PostPolicy.php b/app/Policies/PostPolicy.php
new file mode 100644
index 0000000..6275d0d
--- /dev/null
+++ b/app/Policies/PostPolicy.php
@@ -0,0 +1,17 @@
+owner_id == $user->id;
+ }
+}
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index ee8ca5b..3210700 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -2,6 +2,7 @@
namespace App\Providers;
+use App\Tag;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
@@ -13,7 +14,9 @@ class AppServiceProvider extends ServiceProvider
*/
public function register()
{
- //
+ view()->composer('layouts.aside-tags', function ($view) {
+ $view->with('tagsCloud', Tag::all());
+ });
}
/**
diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php
index 3049068..a025a1a 100644
--- a/app/Providers/AuthServiceProvider.php
+++ b/app/Providers/AuthServiceProvider.php
@@ -14,6 +14,7 @@ class AuthServiceProvider extends ServiceProvider
*/
protected $policies = [
// 'App\Model' => 'App\Policies\ModelPolicy',
+ 'App\Post' => 'App\Policies\PostPolicy',
];
/**
@@ -21,10 +22,14 @@ class AuthServiceProvider extends ServiceProvider
*
* @return void
*/
- public function boot()
+ public function boot(\Illuminate\Contracts\Auth\Access\Gate $gate)
{
$this->registerPolicies();
- //
+ $gate->before(function ($user) {
+ if ($user->id == 2) {
+ return true;
+ }
+ });
}
}
diff --git a/app/Tag.php b/app/Tag.php
index 2c0ea2a..aee6777 100644
--- a/app/Tag.php
+++ b/app/Tag.php
@@ -14,4 +14,9 @@ public function posts()
{
return $this->belongsToMany(Post::class);
}
+
+ public function getRouteKeyName()
+ {
+ return 'name';
+ }
}
diff --git a/app/User.php b/app/User.php
index e79dab7..b235ec4 100644
--- a/app/User.php
+++ b/app/User.php
@@ -36,4 +36,8 @@ class User extends Authenticatable
protected $casts = [
'email_verified_at' => 'datetime',
];
+
+ public function posts() {
+ return $this->hasMany(Post::class, 'owner_id');
+ }
}
diff --git a/config/app.php b/config/app.php
index 8409e00..17b0fbe 100644
--- a/config/app.php
+++ b/config/app.php
@@ -67,7 +67,7 @@
|
*/
- 'timezone' => 'UTC',
+ 'timezone' => 'Europe/Moscow',
/*
|--------------------------------------------------------------------------
diff --git a/database/dumps/apsky-laravel.sql b/database/dumps/apsky-laravel.sql
index 9fcc4a2..8fe0f92 100644
--- a/database/dumps/apsky-laravel.sql
+++ b/database/dumps/apsky-laravel.sql
@@ -198,7 +198,7 @@ CREATE TABLE `posts` (
LOCK TABLES `posts` WRITE;
/*!40000 ALTER TABLE `posts` DISABLE KEYS */;
-INSERT INTO `posts` VALUES (4,'4123','Post4','Post desc4','Lorem ipsum dolor sit amet, consectetur adipisicing elit. Alias beatae consequatur consequuntur, debitis dicta eos explicabo fugit labore molestiae, nam nemo odit placeat quae quisquam quos repellat repellendus tempore, voluptates?',1,'2020-08-26 17:05:56','2020-09-07 14:10:35'),(5,'12313','qweqe','qweqe','qweqeq',0,'2020-08-28 05:05:04','2020-08-28 05:05:04'),(6,'qweqe','qweqe','qweqe','qweqweqe',0,'2020-08-28 06:58:18','2020-08-28 06:58:18'),(7,'qweq','qweqe','qweqe','qweqe',0,'2020-08-28 07:01:17','2020-08-28 07:01:17'),(8,'1231qweq','qweqe','qweqeq','qweqeqe',0,'2020-08-28 07:20:33','2020-08-28 07:20:33'),(9,'qweqeqeqweqw','eeqweqeqe','qweqe','11',0,'2020-08-28 07:28:29','2020-08-28 07:28:29');
+INSERT INTO `posts` VALUES (4,'4123','Post4','Post desc4','Lorem ipsum dolor sit amet, consectetur adipisicing elit. Alias beatae consequatur consequuntur, debitis dicta eos explicabo fugit labore molestiae, nam nemo odit placeat quae quisquam quos repellat repellendus tempore, voluptates?',1,'2020-08-26 17:05:56','2020-09-07 14:10:35'),(5,'12313','qweqe','qweqe','Lorem ipsum dolor sit amet, consectetur adipisicing elit. Alias beatae consequatur consequuntur, debitis dicta eos explicabo fugit labore molestiae, nam nemo odit placeat quae quisquam quos repellat repellendus tempore, voluptates?',0,'2020-08-28 05:05:04','2020-09-10 17:23:00'),(6,'qweqe','qweqe','qweqe','Lorem ipsum dolor sit amet, consectetur adipisicing elit. Alias beatae consequatur consequuntur, debitis dicta eos explicabo fugit labore molestiae, nam nemo odit placeat quae quisquam quos repellat repellendus tempore, voluptates?',0,'2020-08-28 06:58:18','2020-09-10 17:23:00'),(7,'qweq','qweqe','qweqe','Lorem ipsum dolor sit amet, consectetur adipisicing elit. Alias beatae consequatur consequuntur, debitis dicta eos explicabo fugit labore molestiae, nam nemo odit placeat quae quisquam quos repellat repellendus tempore, voluptates?',0,'2020-08-28 07:01:17','2020-09-10 17:23:00'),(8,'1231qweq','qweqe','qweqeq','Lorem ipsum dolor sit amet, consectetur adipisicing elit. Alias beatae consequatur consequuntur, debitis dicta eos explicabo fugit labore molestiae, nam nemo odit placeat quae quisquam quos repellat repellendus tempore, voluptates?',0,'2020-08-28 07:20:33','2020-09-10 17:23:00'),(9,'qweqeqeqweqw','eeqweqeqe','qweqe','Lorem ipsum dolor sit amet, consectetur adipisicing elit. Alias beatae consequatur consequuntur, debitis dicta eos explicabo fugit labore molestiae, nam nemo odit placeat quae quisquam quos repellat repellendus tempore, voluptates?',0,'2020-08-28 07:28:29','2020-09-10 17:23:01');
/*!40000 ALTER TABLE `posts` ENABLE KEYS */;
UNLOCK TABLES;
@@ -247,7 +247,7 @@ CREATE TABLE `users` (
`updated_at` timestamp NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
@@ -256,6 +256,7 @@ CREATE TABLE `users` (
LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
+INSERT INTO `users` VALUES (2,'Павел','ap.sky@yandex.ru',NULL,'$2y$10$2yK9UmERiX.O4V7n7gdJiu/96XvQqbFHadj5ISipVZwLBYVOs6LMW',NULL,'2020-09-10 17:13:37','2020-09-10 17:13:37');
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
@@ -268,4 +269,4 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2020-09-07 23:02:08
+-- Dump completed on 2020-09-10 21:13:40
diff --git a/database/migrations/2020_08_26_090725_create_posts_table.php b/database/migrations/2020_08_26_090725_create_posts_table.php
index d3cf397..751d533 100644
--- a/database/migrations/2020_08_26_090725_create_posts_table.php
+++ b/database/migrations/2020_08_26_090725_create_posts_table.php
@@ -23,6 +23,8 @@ public function up()
$table->boolean('published')->default(0);
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'));
+
+ $table->foreignId('owner_id')->constrained('users')->onDelete('cascade');
});
}
diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php
index c12b97e..80108b6 100644
--- a/resources/views/auth/login.blade.php
+++ b/resources/views/auth/login.blade.php
@@ -1,8 +1,12 @@
@extends('layouts.app')
+@section('header')
+ @include('layouts.base.header')
+@endsection
+
@section('content')
-
+
@endsection
+
+@section('footer')
+ @include('layouts.base.footer')
+@endsection
diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php
index d236a48..9a4397f 100644
--- a/resources/views/auth/register.blade.php
+++ b/resources/views/auth/register.blade.php
@@ -1,8 +1,12 @@
@extends('layouts.app')
+@section('header')
+ @include('layouts.base.header')
+@endsection
+
@section('content')
-
+
@endsection
+
+@section('footer')
+ @include('layouts.base.footer')
+@endsection
diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php
index b37f383..99fd965 100644
--- a/resources/views/index.blade.php
+++ b/resources/views/index.blade.php
@@ -8,7 +8,7 @@
-
+
@if ($posts->count())
@@ -27,7 +27,7 @@
@if($post->tags->isNotEmpty())
@endif
@@ -47,16 +47,7 @@
@endforeach
-
-
+ @include('layouts.aside-tags')
@else
Not available posts yet
@endif
diff --git a/resources/views/layouts/admin/admin-header.blade.php b/resources/views/layouts/admin/admin-header.blade.php
index 584de0d..c9776df 100644
--- a/resources/views/layouts/admin/admin-header.blade.php
+++ b/resources/views/layouts/admin/admin-header.blade.php
@@ -25,7 +25,7 @@
- {{ __('Posts') }}
+ {{ __('Posts') }}
diff --git a/resources/views/layouts/aside-tags.blade.php b/resources/views/layouts/aside-tags.blade.php
new file mode 100644
index 0000000..0fc5b9c
--- /dev/null
+++ b/resources/views/layouts/aside-tags.blade.php
@@ -0,0 +1,9 @@
+
+ @if($tagsCloud->isNotEmpty())
+
+
+ @include('layouts.posts.tags', ['tags' => $tagsCloud])
+ @else
+
+ @endif
+
diff --git a/resources/views/layouts/base/header.blade.php b/resources/views/layouts/base/header.blade.php
index c82ac8a..96751bb 100644
--- a/resources/views/layouts/base/header.blade.php
+++ b/resources/views/layouts/base/header.blade.php
@@ -1,6 +1,6 @@