- Triggers (Admin > Wyzwalacze): event-driven rules that fire immediately on a ticket lifecycle event (created/updated/status/priority/assignee/team/ category changed, new reply), with AND-conditions and ordered actions (set status/priority/team/assignee, send e-mail). Ships its own dedicated, freely add/edit/delete-able e-mail templates, kept separate from the fixed system templates. - Ticket watching: operators can star/"Obserwuj" any ticket to follow it regardless of assignment/team. - Real-time notification bell (private per-user broadcast channel, 30s fallback poll) with an opt-in in-tab browser push notification. - Per-user notification preferences (/settings/notifications): scope (mine/unassigned/watched/all) and e-mail toggle per event category. - Admin > Integracje: new tab for LDAP/AD + BookStack config, split out of Konfiguracja. - Operator queue: Podkategoria/Zespół/Utworzono columns (off by default). - Obserwuj button moved next to the auto-refresh countdown; trigger condition builder shows subcategory/zgłaszający as name dropdowns instead of raw IDs; /settings/notifications got a back link, full-width push card, and a bordered table container; admin panel tab and operator queue view now persist across a plain page refresh. - Docs: README/ARCHITECTURE/wiki updated for all of the above. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
45 lines
1.4 KiB
PHP
45 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Settings;
|
|
|
|
use App\Models\NotificationPreference;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Livewire\Component;
|
|
|
|
class NotificationPreferences extends Component
|
|
{
|
|
protected const SCOPE_FIELDS = ['scope_mine', 'scope_unassigned', 'scope_watched', 'scope_all', 'email'];
|
|
|
|
public function mount(): void
|
|
{
|
|
abort_unless(Auth::user()->isOperator() || Auth::user()->isAdmin(), 403);
|
|
}
|
|
|
|
public function rows(): array
|
|
{
|
|
$user = Auth::user();
|
|
|
|
return collect(NotificationPreference::CATEGORIES)
|
|
->mapWithKeys(fn (string $category) => [$category => NotificationPreference::rowFor($user, $category)])
|
|
->all();
|
|
}
|
|
|
|
public function toggle(string $category, string $field): void
|
|
{
|
|
abort_unless(in_array($category, NotificationPreference::CATEGORIES, true), 404);
|
|
abort_unless(in_array($field, self::SCOPE_FIELDS, true), 404);
|
|
|
|
$preference = NotificationPreference::query()->firstOrCreate(
|
|
['user_id' => Auth::id(), 'event_category' => $category],
|
|
array_merge(['user_id' => Auth::id(), 'event_category' => $category], NotificationPreference::DEFAULTS[$category])
|
|
);
|
|
|
|
$preference->update([$field => ! $preference->$field]);
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
return view('livewire.settings.notification-preferences', ['rows' => $this->rows()]);
|
|
}
|
|
}
|