diff --git a/app/Followable.php b/app/Followable.php index 2773961..15e8389 100644 --- a/app/Followable.php +++ b/app/Followable.php @@ -16,15 +16,7 @@ public function unfollow(User $user) public function toggleFollow(User $user) { - // Tip: You can also use the toggle() method. - // We'll cover this in the next episode. - // $this->follows()->toggle($user); - - if ($this->following($user)) { - return $this->unfollow($user); - } - - return $this->follow($user); + $this->follows()->toggle($user); } public function following(User $user) diff --git a/app/Http/Controllers/ExploreController.php b/app/Http/Controllers/ExploreController.php new file mode 100644 index 0000000..a4a2f55 --- /dev/null +++ b/app/Http/Controllers/ExploreController.php @@ -0,0 +1,15 @@ + User::paginate(50), + ]); + } +} diff --git a/app/Http/Controllers/ProfilesController.php b/app/Http/Controllers/ProfilesController.php index bc45d37..25cdf7f 100644 --- a/app/Http/Controllers/ProfilesController.php +++ b/app/Http/Controllers/ProfilesController.php @@ -28,7 +28,7 @@ public function update(User $user) Rule::unique('users')->ignore($user), ], 'name' => ['string', 'required', 'max:255'], - 'avatar' => ['required', 'file'], + 'avatar' => ['image'], 'email' => [ 'string', 'required', @@ -45,7 +45,9 @@ public function update(User $user) ], ]); - $attributes['avatar'] = request('avatar')->store('avatars'); + if (request('avatar')) { + $attributes['avatar'] = request('avatar')->store('avatars'); + } $user->update($attributes); diff --git a/app/User.php b/app/User.php index 1374fb9..c9f3a25 100644 --- a/app/User.php +++ b/app/User.php @@ -34,13 +34,13 @@ class User extends Authenticatable public function getAvatarAttribute($value) { - return asset($value); + return asset($value ?: '/images/default-avatar.jpeg'); } - // Next episode... - // public function setPasswordAttribute($value) - // { - // } + public function setPasswordAttribute($value) + { + $this->attributes['password'] = bcrypt($value); + } public function timeline() { diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index 741edea..d2aa291 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -19,10 +19,12 @@ $factory->define(User::class, function (Faker $faker) { return [ + 'username' => $faker->unique()->username, 'name' => $faker->name, 'email' => $faker->unique()->safeEmail, 'email_verified_at' => now(), - 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'password' => + '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 'remember_token' => Str::random(10), ]; }); diff --git a/public/images/default-avatar.jpeg b/public/images/default-avatar.jpeg new file mode 100644 index 0000000..64e2e9b Binary files /dev/null and b/public/images/default-avatar.jpeg differ diff --git a/resources/views/components/follow-button.blade.php b/resources/views/components/follow-button.blade.php index 66888a6..06b092b 100644 --- a/resources/views/components/follow-button.blade.php +++ b/resources/views/components/follow-button.blade.php @@ -1,6 +1,6 @@ @unless (current_user()->is($user))
@csrf diff --git a/resources/views/explore.blade.php b/resources/views/explore.blade.php new file mode 100644 index 0000000..d39c8b2 --- /dev/null +++ b/resources/views/explore.blade.php @@ -0,0 +1,19 @@ + +
+ @foreach ($users as $user) + + {{ $user->username }}'s avatar + +
+

{{ '@' . $user->username }}

+
+
+ @endforeach + + {{ $users->links() }} +
+
diff --git a/resources/views/profiles/edit.blade.php b/resources/views/profiles/edit.blade.php index 231036e..c4ceda0 100644 --- a/resources/views/profiles/edit.blade.php +++ b/resources/views/profiles/edit.blade.php @@ -55,7 +55,7 @@ type="file" name="avatar" id="avatar" - required + accept="image/*" > @auth - Home + Home @else Login Register diff --git a/routes/web.php b/routes/web.php index df192c8..31f021d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -21,14 +21,22 @@ Route::get('/tweets', 'TweetsController@index')->name('home'); Route::post('/tweets', 'TweetsController@store'); - Route::post('/profiles/{user:username}/follow', 'FollowsController@store'); + Route::post( + '/profiles/{user:username}/follow', + 'FollowsController@store' + )->name('follow'); + Route::get( '/profiles/{user:username}/edit', 'ProfilesController@edit' )->middleware('can:edit,user'); - // Next episode, we'll add the necessary authorization middleware. - Route::patch('/profiles/{user:username}', 'ProfilesController@update'); + Route::patch( + '/profiles/{user:username}', + 'ProfilesController@update' + )->middleware('can:edit,user'); + + Route::get('/explore', 'ExploreController@index'); }); Route::get('/profiles/{user:username}', 'ProfilesController@show')->name(