diff --git a/app/Http/Controllers/ItemController.php b/app/Http/Controllers/ItemController.php index 1d383e3..1403cf4 100644 --- a/app/Http/Controllers/ItemController.php +++ b/app/Http/Controllers/ItemController.php @@ -2,56 +2,14 @@ namespace App\Http\Controllers; -use App\Enums\ItemActivity; use App\Models\Item; use App\Models\Project; -use App\Settings\GeneralSettings; use Filament\Notifications\Notification; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; -use Spatie\Activitylog\Models\Activity; class ItemController extends Controller { - public function show($projectId, $itemId = null) - { - $project = null; - - if (! $itemId) { - $item = Item::query()->visibleForCurrentUser()->where('slug', $projectId)->firstOrFail(); - } else { - $project = Project::query()->visibleForCurrentUser()->where('slug', $projectId)->firstOrFail(); - - $item = $project->items()->visibleForCurrentUser()->where('items.slug', $itemId)->firstOrFail(); - } - - $showGitHubLink = app(GeneralSettings::class)->show_github_link; - - $activities = $item->activities()->with('causer')->latest()->limit(10)->get()->filter(function (Activity $activity) use ($showGitHubLink) { - if (! $showGitHubLink && ItemActivity::getForActivity($activity) === ItemActivity::LinkedToIssue) { - return false; - } - - return true; - })->map(function (Activity $activity) { - $itemActivity = ItemActivity::getForActivity($activity); - - if ($itemActivity !== null) { - $activity->description = $itemActivity->getTranslation($activity->properties->get('attributes')); - } - - return $activity; - }); - - return view('item', [ - 'project' => $project, - 'board' => $item->board, - 'item' => $item->load('tags'), - 'user' => $item->user, - 'activities' => $activities, - ]); - } - public function edit($id) { $item = auth()->user()->items()->findOrFail($id); diff --git a/app/Http/Livewire/Items/Comments.php b/app/Http/Livewire/Items/Comments.php index 00e9f04..7b9ba3a 100644 --- a/app/Http/Livewire/Items/Comments.php +++ b/app/Http/Livewire/Items/Comments.php @@ -63,10 +63,6 @@ public function submit() $this->private_content = ''; $this->reply = null; - if ($this->item->project) { - $this->redirectRoute('projects.items.show', [$this->item->project, $this->item]); - } - $this->redirectRoute('items.show', [$this->item]); } diff --git a/app/Http/Livewire/Items/Create.php b/app/Http/Livewire/Items/Create.php index a7751ad..22272bb 100644 --- a/app/Http/Livewire/Items/Create.php +++ b/app/Http/Livewire/Items/Create.php @@ -67,7 +67,7 @@ public function submit() $this->notify('success', trans('items.item_created')); - $this->redirectRoute('projects.items.show', [$this->project, $item]); + $this->redirectRoute('items.show', $item); } public function render() diff --git a/app/Http/Livewire/Items/Show.php b/app/Http/Livewire/Items/Show.php new file mode 100644 index 0000000..2d11474 --- /dev/null +++ b/app/Http/Livewire/Items/Show.php @@ -0,0 +1,69 @@ +item = Item::query()->visibleForCurrentUser()->where('slug', $item)->firstOrFail(); + + $showGitHubLink = app(GeneralSettings::class)->show_github_link; + + $this->activities = $this->item->activities()->with('causer')->latest()->limit(10)->get()->filter(function (Activity $activity) use ($showGitHubLink) { + if (! $showGitHubLink && ItemActivity::getForActivity($activity) === ItemActivity::LinkedToIssue) { + return false; + } + + return true; + })->map(function (Activity $activity) { + $itemActivity = ItemActivity::getForActivity($activity); + + if ($itemActivity !== null) { + $activity->description = $itemActivity->getTranslation($activity->properties->get('attributes')); + } + + return $activity; + }); + + $this->project = $this->item->project; + $this->board = $this->item->board; + $this->item = $this->item->load('tags'); + $this->user = $this->item->user; + } + + public function render(): View + { + $layout = $this->project + ? \App\View\Components\Layouts\Project::class + : \App\View\Components\Layouts\App::class; + + return view('livewire.item.show') + ->layout($layout) + ->layoutData([ + 'project' => $this->project, + 'breadcrumbs' => [ + ['title' => $this->project->title, 'url' => route('projects.home', $this->project)], + ['title' => $this->board->title, 'url' => route('projects.boards.show', [$this->project, $this->board])], + ['title' => $this->item->title, 'url' => route('items.show', $this->item)], + ], + ]); + } +} diff --git a/app/Http/Livewire/Modals/Item/Create.php b/app/Http/Livewire/Modals/Item/Create.php index 612f824..df00f75 100644 --- a/app/Http/Livewire/Modals/Item/Create.php +++ b/app/Http/Livewire/Modals/Item/Create.php @@ -161,7 +161,7 @@ public function submit() }); } - return redirect()->route('items.show', $item->slug); + return $this->redirectRoute('items.show', $item->slug); } public function setSimilarItems($state): void diff --git a/app/Http/Livewire/My.php b/app/Http/Livewire/My.php index e1ca0ef..ac38c18 100644 --- a/app/Http/Livewire/My.php +++ b/app/Http/Livewire/My.php @@ -57,15 +57,7 @@ protected function getTableColumns(): array protected function getTableRecordUrlUsing(): ?Closure { return function ($record) { - if (! $record->board) { - return route('items.show', $record); - } - - if (! $record->project) { - return route('items.show', $record); - } - - return route('projects.items.show', [$record->project, $record]); + return route('items.show', $record); }; } diff --git a/app/Http/Livewire/Welcome/RecentItems.php b/app/Http/Livewire/Welcome/RecentItems.php index eca6888..cf7bc4c 100644 --- a/app/Http/Livewire/Welcome/RecentItems.php +++ b/app/Http/Livewire/Welcome/RecentItems.php @@ -44,11 +44,7 @@ protected function getTableRecordUrlUsing(): ?Closure return route('items.show', $record); } - if (! $record->project) { - return route('items.show', $record); - } - - return route('projects.items.show', [$record->project, $record]); + return route('items.show', $record); }; } diff --git a/resources/views/item.blade.php b/resources/views/item.blade.php deleted file mode 100644 index 76eeb10..0000000 --- a/resources/views/item.blade.php +++ /dev/null @@ -1,145 +0,0 @@ -@section('title', $item->title) -@section('image', $item->getOgImage('"' . $item->excerpt .'"', 'Roadmap - Item')) -@section('description', $item->excerpt) - - -
-
- -
-
- @if($user) -
- {{ $user->name }} -
- @endif - -
-

{{ $user->name ?? '-Unknown user-' }}

-
- - @if($item->board) -
- @if(auth()->check() && auth()->user()->hasAdminAccess() && $item->project) -
- @csrf - -
- @else - - {{ $item->board->title }} - - @endif -
- @endif -
-
- -
- -
- {!! str($item->content)->markdown()->sanitizeHtml() !!} -
-
- - -
- -
- -
- @if($item->issue_number && app(App\Services\GitHubService::class)->isEnabled() && app(App\Settings\GeneralSettings::class)->show_github_link) - - - - - - @endif - @if($item->isPinned()) - - - - @endif - @if($item->isPrivate()) - - - - @endif -

{{ $item->title }}

- - - - @if(app(\App\Settings\GeneralSettings::class)->enable_item_age) - - ({{ $item->created_at->diffInDays(now()) }} {{ trans_choice('items.days-ago', $item->created_at->diffInDays(now())) }}) - - @endif -
- -
- - - - @if(auth()->check() && $user && $user->is(auth()->user())) -
- -
- Edit item -
- - @endif - - @if(auth()->check() && auth()->user()->hasAdminAccess()) -
- - - @endif - - @if($item->tags->count() > 0) -
- - @foreach($item->tags as $tag) - - @endforeach - @endif -
- -
-
- -
-
-
-
diff --git a/resources/views/layouts/project.blade.php b/resources/views/layouts/project.blade.php index aba695e..c4fb3f0 100644 --- a/resources/views/layouts/project.blade.php +++ b/resources/views/layouts/project.blade.php @@ -72,12 +72,12 @@ class="w-10 h-10 text-gray-500 dark:text-gray-400"/> request()->is('projects/*/boards*'), - 'hover:bg-gray-500/5 focus:bg-brand-500/10 focus:text-brand-600 focus:outline-none' => !request()->is('projects/*/boards*') + 'text-white bg-brand-500' => (request()->is('projects/*/boards*') || request()->is('items*')), + 'hover:bg-gray-500/5 focus:bg-brand-500/10 focus:text-brand-600 focus:outline-none' => (!request()->is('projects/*/boards*') && !request()->is('items*')) ]) href="{{ route('projects.boards', $project) }}"> - + {{ trans('projects.roadmap') }} diff --git a/resources/views/livewire/board/item-card.blade.php b/resources/views/livewire/board/item-card.blade.php index 6104a01..106a464 100644 --- a/resources/views/livewire/board/item-card.blade.php +++ b/resources/views/livewire/board/item-card.blade.php @@ -8,7 +8,7 @@ {{ $item->total_votes }} - +

{{ $item->title }}

{{ $item->excerpt }}

diff --git a/resources/views/livewire/item/show.blade.php b/resources/views/livewire/item/show.blade.php new file mode 100644 index 0000000..89f95fe --- /dev/null +++ b/resources/views/livewire/item/show.blade.php @@ -0,0 +1,136 @@ +@section('title', $item->title) +@section('image', $item->getOgImage('"' . $item->excerpt .'"', 'Roadmap - Item')) +@section('description', $item->excerpt) + +
+
+ +
+
+ @if($user) +
+ {{ $user->name }} +
+ @endif + +
+

{{ $user->name ?? '-Unknown user-' }}

+
+ + @if($item->board) +
+ @if(auth()->check() && auth()->user()->hasAdminAccess() && $item->project) +
+ @csrf + +
+ @else + + {{ $item->board->title }} + + @endif +
+ @endif +
+
+ +
+ +
+ {!! str($item->content)->markdown()->sanitizeHtml() !!} +
+
+ + +
+ +
+ +
+ @if($item->issue_number && app(App\Services\GitHubService::class)->isEnabled() && app(App\Settings\GeneralSettings::class)->show_github_link) + + + + + + @endif + @if($item->isPinned()) + + + + @endif + @if($item->isPrivate()) + + + + @endif +

{{ $item->title }}

+ + + + @if(app(\App\Settings\GeneralSettings::class)->enable_item_age) + + ({{ $item->created_at->diffInDays(now()) }} {{ trans_choice('items.days-ago', $item->created_at->diffInDays(now())) }}) + + @endif +
+ +
+ + + + @if(auth()->check() && $user && $user->is(auth()->user())) +
+ +
+ Edit item +
+ + @endif + + @if(auth()->check() && auth()->user()->hasAdminAccess()) +
+ +
+ Administer item +
+ @endif + + @if($item->tags->count() > 0) +
+ + @foreach($item->tags as $tag) + + @endforeach + @endif +
+ +
+
+ +
+
+
diff --git a/resources/views/livewire/projects/boards.blade.php b/resources/views/livewire/projects/boards.blade.php index 5d282c7..42b2d05 100644 --- a/resources/views/livewire/projects/boards.blade.php +++ b/resources/views/livewire/projects/boards.blade.php @@ -46,7 +46,7 @@ class="border-b border-dotted border-black">