Skip to content

Commit ebe5194

Browse files
feat: [LAR-131] update locale selector (#256)
Co-authored-by: Chris Samory <[email protected]>
1 parent 38766e1 commit ebe5194

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+202
-110
lines changed

app/Actions/Discussion/ConvertDiscussionToThreadAction.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public function execute(Discussion $discussion): Thread
2828

2929
$discussion->delete();
3030

31-
app(NotifyUsersOfThreadConversion::class)->execute($thread);
31+
app(NotifyUsersOfThreadConversionAction::class)->execute($thread);
3232

3333
return $thread;
3434
});

app/Actions/Replies/CreateReply.php renamed to app/Actions/Discussion/CreateDiscussionReplyAction.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
declare(strict_types=1);
44

5-
namespace App\Actions\Replies;
5+
namespace App\Actions\Discussion;
66

77
use App\Events\CommentWasAdded;
88
use App\Gamify\Points\ReplyCreated;
99
use App\Models\Reply;
1010
use App\Models\User;
1111
use Illuminate\Database\Eloquent\Model;
1212

13-
final class CreateReply
13+
final class CreateDiscussionReplyAction
1414
{
1515
public function __invoke(string $body, User $user, Model $model): Reply
1616
{
@@ -22,7 +22,7 @@ public function __invoke(string $body, User $user, Model $model): Reply
2222
$user->givePoint(new ReplyCreated($model, $user));
2323

2424
// On envoie un event pour une nouvelle réponse à tous les abonnés de la discussion
25-
event(new CommentWasAdded($reply, $model)); // @phpstan-ignore-line
25+
event(new CommentWasAdded($reply, $model)); // @phpstan-ignore-line
2626

2727
return $reply;
2828
}

app/Actions/Replies/LikeReply.php renamed to app/Actions/Discussion/LikeReplyAction.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
declare(strict_types=1);
44

5-
namespace App\Actions\Replies;
5+
namespace App\Actions\Discussion;
66

77
use App\Models\Reaction;
88
use App\Models\Reply;
99
use App\Models\User;
1010

11-
final class LikeReply
11+
final class LikeReplyAction
1212
{
1313
public function __invoke(User $user, Reply $reply, string $reaction = 'love'): void
1414
{

app/Actions/Discussion/NotifyUsersOfThreadConversion.php renamed to app/Actions/Discussion/NotifyUsersOfThreadConversionAction.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
use App\Notifications\ThreadConvertedByCreator;
1111
use Illuminate\Support\Facades\Auth;
1212

13-
final class NotifyUsersOfThreadConversion
13+
final class NotifyUsersOfThreadConversionAction
1414
{
1515
public function execute(Thread $thread): void
1616
{

app/Http/Controllers/SubscriptionController.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public function unsubscribe(Subscribe $subscription): RedirectResponse
1818

1919
session()->flash('status', __('Vous êtes maintenant désabonné de ce sujet.'));
2020

21-
return redirect()->route('forum.show', $thread->slug());
21+
return redirect()->route('forum.show', $thread->slug);
2222
}
2323

2424
public function redirect(int $id, string $type): RedirectResponse

app/Livewire/Components/ChangeLocale.php

+1-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
use Illuminate\Contracts\View\View;
88
use Illuminate\Support\Facades\Auth;
9-
use Illuminate\Support\Pluralizer;
109
use Livewire\Attributes\Computed;
1110
use Livewire\Component;
1211

@@ -31,9 +30,7 @@ public function changeLocale(): void
3130
app()->setLocale($locale);
3231
session()->put('locale', $locale);
3332

34-
Pluralizer::useLanguage($this->currentLocale === 'fr' ? 'french' : 'english');
35-
36-
$this->redirectRoute('home', navigate: true);
33+
$this->redirect(url()->previous(), navigate: true);
3734
}
3835

3936
#[Computed]

app/Livewire/Components/Discussion/Comment.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace App\Livewire\Components\Discussion;
66

7-
use App\Actions\Replies\LikeReply;
7+
use App\Actions\Discussion\LikeReplyAction;
88
use App\Models\Reply;
99
use Filament\Notifications\Notification;
1010
use Illuminate\Contracts\View\View;
@@ -32,7 +32,7 @@ public function toggleLike(): void
3232
{
3333
$this->authorize('like', $this->comment);
3434

35-
app()->call(LikeReply::class, [
35+
app()->call(LikeReplyAction::class, [
3636
'user' => auth()->user(),
3737
'reply' => $this->comment,
3838
]);

app/Livewire/Components/Discussion/Comments.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace App\Livewire\Components\Discussion;
66

7-
use App\Actions\Replies\CreateReply;
7+
use App\Actions\Discussion\CreateDiscussionReplyAction;
88
use App\Models\Discussion;
99
use App\Models\Reply;
1010
use Filament\Forms;
@@ -52,7 +52,7 @@ public function save(): void
5252
{
5353
$this->validate();
5454

55-
app()->call(CreateReply::class, [
55+
app()->call(CreateDiscussionReplyAction::class, [
5656
'body' => data_get($this->form->getState(), 'body'),
5757
'user' => Auth::user(),
5858
'model' => $this->discussion,

app/Livewire/Components/Slideovers/ArticleForm.php

+12
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,18 @@ public function form(Form $form): Form
119119
Forms\Components\Group::make()
120120
->schema([
121121
Forms\Components\MarkdownEditor::make('body')
122+
->toolbarButtons([
123+
'attachFiles',
124+
'blockquote',
125+
'bold',
126+
'bulletList',
127+
'codeBlock',
128+
'italic',
129+
'link',
130+
'orderedList',
131+
'strike',
132+
'table',
133+
])
122134
->label(__('validation.attributes.content'))
123135
->fileAttachmentsDisk('public')
124136
->minLength(10)

app/Livewire/Pages/Articles/Index.php

+9-1
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,30 @@
77
use App\Models\Article;
88
use App\Models\Tag;
99
use App\Traits\WithInfiniteScroll;
10+
use App\Traits\WithLocale;
1011
use Illuminate\Contracts\View\View;
1112
use Livewire\Component;
1213

1314
final class Index extends Component
1415
{
1516
use WithInfiniteScroll;
17+
use WithLocale;
18+
19+
public function mount(): void
20+
{
21+
$this->locale = config('app.locale');
22+
}
1623

1724
public function render(): View
1825
{
1926
return view('livewire.pages.articles.index', [
20-
'articles' => Article::with(['tags', 'user', 'user.transactions'])
27+
'articles' => Article::with(['tags', 'user', 'user.transactions']) // @phpstan-ignore-line
2128
->withCount(['views', 'reactions'])
2229
->orderByDesc('sponsored_at')
2330
->orderByDesc('published_at')
2431
->published()
2532
->notPinned()
33+
->forLocale($this->locale)
2634
->paginate($this->perPage),
2735
'tags' => Tag::query()->whereHas('articles', function ($query): void {
2836
$query->published();

app/Livewire/Pages/Articles/SingleTag.php

+9-1
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,26 @@
77
use App\Models\Article;
88
use App\Models\Tag;
99
use App\Traits\WithInfiniteScroll;
10+
use App\Traits\WithLocale;
1011
use Illuminate\Contracts\View\View;
1112
use Livewire\Component;
1213

1314
final class SingleTag extends Component
1415
{
1516
use WithInfiniteScroll;
17+
use WithLocale;
1618

1719
public Tag $tag;
1820

21+
public function mount(): void
22+
{
23+
$this->locale = config('app.locale');
24+
}
25+
1926
public function render(): View
2027
{
2128
return view('livewire.pages.articles.tag', [
22-
'articles' => Article::with(['tags', 'user', 'user.transactions'])
29+
'articles' => Article::with(['tags', 'user', 'user.transactions']) // @phpstan-ignore-line
2330
->whereHas('tags', function ($query): void {
2431
$query->where('id', $this->tag->id);
2532
})
@@ -28,6 +35,7 @@ public function render(): View
2835
->orderByDesc('published_at')
2936
->published()
3037
->notPinned()
38+
->forLocale($this->locale)
3139
->paginate($this->perPage),
3240
])->title($this->tag->name);
3341
}

app/Livewire/Pages/Discussions/Index.php

+9-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use App\Models\Builders\DiscussionQueryBuilder;
88
use App\Models\Discussion;
99
use App\Models\Tag;
10+
use App\Traits\WithLocale;
1011
use Illuminate\Contracts\View\View;
1112
use Livewire\Attributes\Url;
1213
use Livewire\Component;
@@ -15,6 +16,7 @@
1516

1617
final class Index extends Component
1718
{
19+
use WithLocale;
1820
use WithoutUrlPagination;
1921
use WithPagination;
2022

@@ -23,6 +25,11 @@ final class Index extends Component
2325

2426
public string $sortBy = 'recent';
2527

28+
public function mount(): void
29+
{
30+
$this->locale = config('app.locale');
31+
}
32+
2633
public function validSort(string $sort): bool
2734
{
2835
return in_array($sort, [
@@ -50,8 +57,9 @@ public function tagExists(string $tag): bool
5057
public function render(): View
5158
{
5259
/** @var DiscussionQueryBuilder $query */
53-
$query = Discussion::with('tags')
60+
$query = Discussion::with('tags') // @phpstan-ignore-line
5461
->withCount('replies')
62+
->forLocale($this->locale)
5563
->notPinned();
5664

5765
$tags = Tag::query()

app/Livewire/Pages/Forum/Index.php

+14
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use App\Models\Channel;
88
use App\Models\Thread;
9+
use App\Traits\WithLocale;
910
use Illuminate\Contracts\View\View;
1011
use Illuminate\Database\Eloquent\Builder;
1112
use Illuminate\Support\Facades\Auth;
@@ -19,6 +20,7 @@
1920
#[Layout('layouts.forum')]
2021
final class Index extends Component
2122
{
23+
use WithLocale;
2224
use WithoutUrlPagination;
2325
use WithPagination;
2426

@@ -48,6 +50,8 @@ public function mount(): void
4850
if ($this->channel) {
4951
$this->currentChannel = Channel::findBySlug($this->channel);
5052
}
53+
54+
$this->locale = config('app.locale');
5155
}
5256

5357
#[On('channelUpdated')]
@@ -93,6 +97,15 @@ protected function applySolved(Builder $query): Builder
9397
return $query;
9498
}
9599

100+
protected function applyLocale(Builder $query): Builder
101+
{
102+
if ($this->locale) {
103+
$query->forLocale($this->locale); // @phpstan-ignore-line
104+
}
105+
106+
return $query;
107+
}
108+
96109
protected function applyAuthor(Builder $query): Builder
97110
{
98111
if (Auth::check() && $this->user) {
@@ -131,6 +144,7 @@ public function render(): View
131144
$query = $this->applyChannel($query);
132145
$query = $this->applySearch($query);
133146
$query = $this->applySolved($query);
147+
$query = $this->applyLocale($query);
134148
$query = $this->applyAuthor($query);
135149
$query = $this->applySubscribe($query);
136150
$query = $this->applyUnAnswer($query);

app/Models/Article.php

+4-5
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,14 @@
66

77
use App\Contracts\ReactableInterface;
88
use App\Models\Builders\ArticleQueryBuilder;
9-
use App\Models\Scopes\LocaleScope;
10-
use App\Traits\HasAuthor;
11-
use App\Traits\HasSlug;
9+
use App\Models\Traits\HasAuthor;
10+
use App\Models\Traits\HasLocaleScope;
11+
use App\Models\Traits\HasSlug;
1212
use App\Traits\HasTags;
1313
use App\Traits\Reactable;
1414
use App\Traits\RecordsActivity;
1515
use CyrildeWit\EloquentViewable\Contracts\Viewable;
1616
use CyrildeWit\EloquentViewable\InteractsWithViews;
17-
use Illuminate\Database\Eloquent\Attributes\ScopedBy;
1817
use Illuminate\Database\Eloquent\Factories\HasFactory;
1918
use Illuminate\Database\Eloquent\Model;
2019
use Illuminate\Support\Str;
@@ -43,11 +42,11 @@
4342
* @property \Illuminate\Support\Carbon $updated_at
4443
* @property \Illuminate\Database\Eloquent\Collection | Tag[] $tags
4544
*/
46-
#[ScopedBy([LocaleScope::class])]
4745
final class Article extends Model implements HasMedia, ReactableInterface, Viewable
4846
{
4947
use HasAuthor;
5048
use HasFactory;
49+
use HasLocaleScope;
5150
use HasSlug;
5251
use HasTags;
5352
use InteractsWithMedia;

app/Models/Channel.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace App\Models;
66

77
use App\Exceptions\CannotAddChannelToChild;
8-
use App\Traits\HasSlug;
8+
use App\Models\Traits\HasSlug;
99
use Illuminate\Database\Eloquent\Factories\HasFactory;
1010
use Illuminate\Database\Eloquent\Model;
1111
use Illuminate\Database\Eloquent\Relations\BelongsTo;

app/Models/Discussion.php

+5-6
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
use App\Contracts\SpamReportableContract;
1010
use App\Contracts\SubscribeInterface;
1111
use App\Models\Builders\DiscussionQueryBuilder;
12-
use App\Models\Scopes\LocaleScope;
13-
use App\Traits\HasAuthor;
14-
use App\Traits\HasReplies;
15-
use App\Traits\HasSlug;
12+
use App\Models\Traits\HasAuthor;
13+
use App\Models\Traits\HasLocaleScope;
14+
use App\Models\Traits\HasReplies;
15+
use App\Models\Traits\HasSlug;
1616
use App\Traits\HasSpamReports;
1717
use App\Traits\HasSubscribers;
1818
use App\Traits\HasTags;
@@ -21,7 +21,6 @@
2121
use Carbon\Carbon;
2222
use CyrildeWit\EloquentViewable\Contracts\Viewable;
2323
use CyrildeWit\EloquentViewable\InteractsWithViews;
24-
use Illuminate\Database\Eloquent\Attributes\ScopedBy;
2524
use Illuminate\Database\Eloquent\Casts\Attribute;
2625
use Illuminate\Database\Eloquent\Factories\HasFactory;
2726
use Illuminate\Database\Eloquent\Model;
@@ -42,11 +41,11 @@
4241
* @property User $user
4342
* @property Collection | SpamReport[] $spamReports
4443
*/
45-
#[ScopedBy([LocaleScope::class])]
4644
final class Discussion extends Model implements ReactableInterface, ReplyInterface, SpamReportableContract, SubscribeInterface, Viewable
4745
{
4846
use HasAuthor;
4947
use HasFactory;
48+
use HasLocaleScope;
5049
use HasReplies;
5150
use HasSlug;
5251
use HasSpamReports;

app/Models/Enterprise.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
namespace App\Models;
66

77
use App\Filters\Enterprise\EnterpriseFilters;
8+
use App\Models\Traits\HasSlug;
89
use App\Traits\HasSettings;
9-
use App\Traits\HasSlug;
1010
use Illuminate\Database\Eloquent\Builder;
1111
use Illuminate\Database\Eloquent\Factories\HasFactory;
1212
use Illuminate\Database\Eloquent\Model;

app/Models/Reply.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
use App\Contracts\ReactableInterface;
88
use App\Contracts\ReplyInterface;
99
use App\Contracts\SpamReportableContract;
10-
use App\Traits\HasAuthor;
11-
use App\Traits\HasReplies;
10+
use App\Models\Traits\HasAuthor;
11+
use App\Models\Traits\HasReplies;
1212
use App\Traits\HasSpamReports;
1313
use App\Traits\Reactable;
1414
use App\Traits\RecordsActivity;

0 commit comments

Comments
 (0)