diff --git a/app/Domain/Notifications/Services/Webhooks.php b/app/Domain/Notifications/Services/Webhooks.php index 5e2433b01a..3b4117404d 100644 --- a/app/Domain/Notifications/Services/Webhooks.php +++ b/app/Domain/Notifications/Services/Webhooks.php @@ -185,11 +185,12 @@ private function optedInEndpoints(array $userIds, bool $useCache): array /** * Narrows recipients to those who may receive a personal webhook for the - * project right now: webhook enabled with a URL, account active with - * notifications switched on, and access to the project — which must still - * exist. The only place these are checked: the ids include - * mention/collaborator bypasses that skipped the project's member filters, - * and queueToUsers() checks nothing but the opt-in. Access follows the + * project right now: webhook enabled with a URL, account active, and access + * to the project — which must still exist. The email switch + * (zp_user.notifications) is not checked: it governs email only. The only + * place these are checked: the ids include mention/collaborator bypasses + * that skipped the project's member filters, and queueToUsers() checks + * nothing but the opt-in. Access follows the * project's own rules (team, client, everyone, admin/owner) for the * recipient, never the session user. * @@ -218,8 +219,8 @@ private function eligibleEndpoints(int $projectId, array $userIds): array /** * Whether the user's account currently allows project notifications to reach - * them: it exists, is active, has notifications switched on, and can access - * the project. Re-reads the user row, past the repository's memo. + * their webhook: it exists, is active, and can access the project. The email + * switch plays no part. Re-reads the user row, past the repository's memo. * * @param int $userId The recipient. * @param int $projectId The project the notification belongs to. @@ -230,9 +231,7 @@ private function mayReceiveProjectNotifications(int $userId, int $projectId): bo // with isUserAssignedToProject() below, access is judged by the current role too. $user = $this->userRepo->getUser($userId, useCache: false); - if ($user === false - || strtolower((string) ($user['status'] ?? '')) !== 'a' - || (int) ($user['notifications'] ?? 0) === 0) { + if ($user === false || strtolower((string) ($user['status'] ?? '')) !== 'a') { return false; } diff --git a/app/Domain/Projects/Services/Projects.php b/app/Domain/Projects/Services/Projects.php index 150583abea..936c52a157 100644 --- a/app/Domain/Projects/Services/Projects.php +++ b/app/Domain/Projects/Services/Projects.php @@ -323,7 +323,9 @@ public function getAllUserInfoToNotify($projectId): array * * Channels: queued email, project messengers, mobile push, in-app * notifications and — last — queued rows for the personal webhooks of - * recipients who opted in (delivered later by the webhook queue). + * recipients who opted in (delivered later by the webhook queue). Webhooks + * ignore the email switch and include the author's own changes (see + * personalWebhookCandidates()). * * @param Notification $notification The notification object to send. * @@ -346,19 +348,26 @@ public function notifyProjectUsers(Notification $notification): void $notification->url['url'] = app()->make(TrustedAppUrl::class)->rebase($notification->url['url']); } - // Email - $users = $this->getUsersToNotify($notification->projectId); + // One read of the team serves email and personal webhooks. + $activeMembers = array_values(array_filter( + $this->projectRepository->getUsersAssignedToProject($notification->projectId) ?: [], + fn (array $member) => strtolower((string) $member['status']) === 'a' + )); $projectName = $this->getProjectName($notification->projectId); - // Exclude the author - $users = array_filter($users, function ($user) use ($notification) { - return $user != $notification->authorId; - }, ARRAY_FILTER_USE_BOTH); - $users = array_values($users); + // Email goes to members who kept email notifications on, never to the author. + $users = []; + foreach ($activeMembers as $member) { + if ($member['notifications'] != 0 && $member['id'] != $notification->authorId) { + $users[] = $member['id']; + } + } + + $webhookCandidates = $this->personalWebhookCandidates($activeMembers, $notification); - // Batch-load notification preferences for all candidate users + // Batch-load notification preferences for every candidate of either channel $settingKeys = []; - foreach ($users as $userId) { + foreach (array_unique(array_merge($users, $webhookCandidates)) as $userId) { $settingKeys[] = 'usersettings.'.$userId.'.projectNotificationLevels'; $settingKeys[] = 'usersettings.'.$userId.'.projectMutedNotifications'; // legacy format $settingKeys[] = 'usersettings.'.$userId.'.notificationEventTypes'; @@ -489,14 +498,21 @@ public function notifyProjectUsers(Notification $notification): void */ self::dispatch_event('notifyProjectUsers', ['type' => 'projectUpdate', 'module' => $notification->module, 'moduleId' => $entityId, 'message' => $notification->message, 'subject' => $notification->subject, 'users' => array_values($filteredUsersToNotify), 'url' => $notification->url['url']], 'leantime.domain.projects.services.projects.notifyProjectUsers'); - // Personal webhooks go last, to the same filtered recipients as email (relevance, - // category, mentions, collaborators). This only queues one row per recipient: the - // scheduler's WebhookQueue posts later, so no endpoint is contacted during this - // request. Queueing reads only the recipients' opt-in; Webhooks checks each queued - // recipient's opt-in, account and project access itself when the row is posted. The - // catch is a last guard so this step can never break the dispatch path. + // Personal webhooks go last, filtered like email (relevance, category, mentions, + // collaborators) but from their own candidates: see personalWebhookCandidates(). This + // only queues one row per recipient: the scheduler's WebhookQueue posts later, so no + // endpoint is contacted during this request. Queueing reads only the recipients' + // opt-in; Webhooks checks each queued recipient's opt-in, account and project access + // itself when the row is posted. The catch is a last guard so this step can never + // break the dispatch path. + $webhookRecipients = $this->filterUsersByProjectRelevance($webhookCandidates, $notification, $preloadedSettings); + $webhookRecipients = $this->filterUsersByEventType($webhookRecipients, $notification->module, $preloadedSettings); + // The author is a candidate already, so a mention or collaboration never brings them back past their own filters. + $webhookRecipients = $this->addBypassRecipients($webhookRecipients, $mentionedUserIds, $notification->authorId); + $webhookRecipients = $this->addBypassRecipients($webhookRecipients, $collaboratorIds, $notification->authorId); + try { - $this->webhookService->queueToUsers($notification, $users); + $this->webhookService->queueToUsers($notification, $webhookRecipients); } catch (\Throwable $e) { Log::warning('Personal webhook dispatch failed', ['exception' => get_class($e)]); } @@ -777,6 +793,29 @@ private function extractCollaboratorIds(Notification $notification): array return array_values(array_unique($ids)); } + /** + * Who may get a notification on their personal webhook before the relevance and category + * filters: every active team member and the author. Unlike email, the email switch + * (zp_user.notifications) plays no part, so a user can move their notifications from email to + * a webhook; and the author's own changes are included, since a webhook usually feeds an + * integration that keeps a full record of the user's work. + * + * @param array> $activeMembers Active users assigned to the project. + * @param Notification $notification The notification being dispatched. + * @return array Candidate user ids, without repeats. + */ + private function personalWebhookCandidates(array $activeMembers, Notification $notification): array + { + $candidates = array_map(fn (array $member) => (int) $member['id'], $activeMembers); + + $authorId = (int) $notification->authorId; + if ($authorId > 0) { + $candidates[] = $authorId; + } + + return array_values(array_unique($candidates)); + } + /** * Adds bypass recipients (e.g. mentions, collaborators) to a recipient list. * diff --git a/app/Language/ar-SA.ini b/app/Language/ar-SA.ini index 6e2ae70924..41c868ee8c 100644 --- a/app/Language/ar-SA.ini +++ b/app/Language/ar-SA.ini @@ -2619,7 +2619,7 @@ label.notifications_my_work_description="المهام المسندة إليك و label.notifications_muted="مكتوم" label.notifications_muted_description="لا إشعارات باستثناء الإشارات المباشرة (@)" label.webhook_notifications="ويب هوك شخصي" -label.webhook_notifications_description="أرسل إشعاراتك إلى نقطة نهاية HTTPS خاصة بك. لكل إشعار مشروع يحق لك تلقيه، يرسل Leantime طلب HTTP POST واحدًا بمحتوى JSON إلى هذا الرابط. تُرسل الطلبات في الخلفية وقد يستغرق وصولها عدة دقائق، ولا تُعاد محاولة الطلب الذي يفشل. تحدد إعداداتك في تبويب الإشعارات (تلقي الإشعارات والفئات ومستويات كل مشروع) الإشعاراتِ المؤهلة. لا يرسل الويب هوك إلا عندما يكون مفعّلاً ومحددًا له رابط. يبقى رابطك محفوظًا أثناء تعطيل الويب هوك — امسح الرابط لإزالته." +label.webhook_notifications_description="أرسل إشعاراتك إلى نقطة نهاية HTTPS خاصة بك. لكل إشعار مشروع يحق لك تلقيه، يرسل Leantime طلب HTTP POST واحدًا بمحتوى JSON إلى هذا الرابط. تُرسل الطلبات في الخلفية وقد يستغرق وصولها عدة دقائق، ولا تُعاد محاولة الطلب الذي يفشل. تحدد الفئات ومستويات كل مشروع في تبويب الإشعارات الإشعاراتِ المؤهلة، بما في ذلك التغييرات التي تجريها بنفسك. لا يؤدي إيقاف إشعارات البريد الإلكتروني إلى إيقاف الويب هوك. لا يرسل الويب هوك إلا عندما يكون مفعّلاً ومحددًا له رابط. يبقى رابطك محفوظًا أثناء تعطيل الويب هوك — امسح الرابط لإزالته." label.enable_webhook_notifications="تفعيل إشعارات الويب هوك" label.webhook_url_hint="HTTPS فقط. اتركه فارغًا لإزالة الويب هوك." label.default_notification_types="أنواع الإشعارات الافتراضية للمستخدمين الجدد" diff --git a/app/Language/cs-CZ.ini b/app/Language/cs-CZ.ini index fa531035a2..14dadd3141 100644 --- a/app/Language/cs-CZ.ini +++ b/app/Language/cs-CZ.ini @@ -2622,7 +2622,7 @@ label.notifications_my_work_description="Pouze úkoly přiřazené vám, vaše p label.notifications_muted="Ztlumeno" label.notifications_muted_description="Žádná oznámení kromě přímých @zmínek" label.webhook_notifications="Osobní webhook" -label.webhook_notifications_description="Posílejte svá oznámení na vlastní HTTPS endpoint. Pro každé oznámení projektu, které byste měli dostat, odešle Leantime na tuto URL jeden požadavek HTTP POST s tělem ve formátu JSON. Požadavky se odesílají na pozadí a jejich doručení může trvat několik minut; neúspěšný požadavek se neopakuje. O tom, která oznámení se odešlou, rozhodují vaše nastavení na kartě Oznámení (příjem oznámení, kategorie a úrovně jednotlivých projektů). Webhook odesílá pouze tehdy, je-li zapnutý a je nastavena URL. Vaše URL zůstane uložená i při vypnutém webhooku — chcete-li ji odstranit, vymažte ji." +label.webhook_notifications_description="Posílejte svá oznámení na vlastní HTTPS endpoint. Pro každé oznámení projektu, které byste měli dostat, odešle Leantime na tuto URL jeden požadavek HTTP POST s tělem ve formátu JSON. Požadavky se odesílají na pozadí a jejich doručení může trvat několik minut; neúspěšný požadavek se neopakuje. O tom, která oznámení se odešlou, rozhodují kategorie a úrovně jednotlivých projektů na kartě Oznámení; odesílají se i změny, které provedete sami. Vypnutí e-mailových oznámení webhook nezastaví. Webhook odesílá pouze tehdy, je-li zapnutý a je nastavena URL. Vaše URL zůstane uložená i při vypnutém webhooku — chcete-li ji odstranit, vymažte ji." label.enable_webhook_notifications="Zapnout oznámení přes webhook" label.webhook_url_hint="Pouze HTTPS. Ponecháním prázdného pole webhook odstraníte." label.default_notification_types="Výchozí typy oznámení pro nové uživatele" diff --git a/app/Language/da-DK.ini b/app/Language/da-DK.ini index fa06eab0db..4419a65782 100644 --- a/app/Language/da-DK.ini +++ b/app/Language/da-DK.ini @@ -846,7 +846,7 @@ label.project_assignment="Projekt Tildeling" label.overview="Overblik" label.active="Aktiv" label.inactive="Inaktiv" -label.receive_notifications="Modtag notifikationer" +label.receive_notifications="Modtag notifikationer på e-mail" label.upload="Upload" label.ondate="på" label.label="Mærkat" @@ -2621,7 +2621,7 @@ label.notifications_my_work_description="Kun opgaver tildelt dig, dine elementer label.notifications_muted="Lyd slået fra" label.notifications_muted_description="Ingen notifikationer undtagen direkte @omtaler" label.webhook_notifications="Personlig webhook" -label.webhook_notifications_description="Send dine notifikationer til dit eget HTTPS-endpoint. For hver projektnotifikation, du er berettiget til, sender Leantime én HTTP POST-anmodning med en JSON-body til denne URL. Anmodninger sendes i baggrunden og kan tage flere minutter om at nå frem; en anmodning, der fejler, bliver ikke forsøgt igen. Dine indstillinger under fanen Notifikationer (modtagelse af notifikationer, kategorier og niveauer pr. projekt) afgør, hvilke notifikationer der er berettigede. Webhooken sender kun, mens den er slået til, og en URL er angivet. Din URL forbliver gemt, mens webhooken er slået fra — ryd URL'en for at fjerne den." +label.webhook_notifications_description="Send dine notifikationer til dit eget HTTPS-endpoint. For hver projektnotifikation, du er berettiget til, sender Leantime én HTTP POST-anmodning med en JSON-body til denne URL. Anmodninger sendes i baggrunden og kan tage flere minutter om at nå frem; en anmodning, der fejler, bliver ikke forsøgt igen. Kategorierne og niveauerne pr. projekt under fanen Notifikationer afgør, hvilke notifikationer der er berettigede, også ændringer du selv foretager. Hvis du slår e-mailnotifikationer fra, stopper webhooken ikke. Webhooken sender kun, mens den er slået til, og en URL er angivet. Din URL forbliver gemt, mens webhooken er slået fra — ryd URL'en for at fjerne den." label.enable_webhook_notifications="Slå webhook-notifikationer til" label.webhook_url_hint="Kun HTTPS. Lad stå tomt for at fjerne webhooken." label.default_notification_types="Standardnotifikationstyper for nye brugere" diff --git a/app/Language/de-CH.ini b/app/Language/de-CH.ini index 260038eafe..93c6cd1c98 100644 --- a/app/Language/de-CH.ini +++ b/app/Language/de-CH.ini @@ -762,7 +762,7 @@ label.project_assignment = "Projekte zuweisen" label.overview = "Übersicht" label.active = "aktiv" label.inactive = "inaktiv" -label.receive_notifications = "Benachrichtigungen erhalten" +label.receive_notifications = "E-Mail-Benachrichtigungen erhalten" label.upload = "Hochladen" label.ondate = "am" label.label = "Etikett" @@ -1844,7 +1844,7 @@ label.notifications_my_work_description="Nur Ihnen zugewiesene Aufgaben, Ihre El label.notifications_muted="Stummgeschaltet" label.notifications_muted_description="Keine Benachrichtigungen ausser direkten @Erwähnungen" label.webhook_notifications="Persönlicher Webhook" -label.webhook_notifications_description="Senden Sie Ihre Benachrichtigungen an Ihren eigenen HTTPS-Endpunkt. Für jede Projektbenachrichtigung, die für Sie infrage kommt, sendet Leantime eine HTTP-POST-Anfrage mit einem JSON-Body an diese URL. Die Anfragen werden im Hintergrund gesendet und können einige Minuten bis zur Zustellung benötigen; fehlgeschlagene Anfragen werden nicht wiederholt. Welche Benachrichtigungen infrage kommen, bestimmen Ihre Einstellungen im Tab Benachrichtigungen (Benachrichtigungsempfang, Kategorien und Stufen pro Projekt). Der Webhook sendet nur, solange er aktiviert und eine URL gesetzt ist. Ihre URL bleibt gespeichert, während der Webhook deaktiviert ist – leeren Sie die URL, um sie zu entfernen." +label.webhook_notifications_description="Senden Sie Ihre Benachrichtigungen an Ihren eigenen HTTPS-Endpunkt. Für jede Projektbenachrichtigung, die für Sie infrage kommt, sendet Leantime eine HTTP-POST-Anfrage mit einem JSON-Body an diese URL. Die Anfragen werden im Hintergrund gesendet und können einige Minuten bis zur Zustellung benötigen; fehlgeschlagene Anfragen werden nicht wiederholt. Welche Benachrichtigungen infrage kommen, bestimmen die Kategorien und Stufen pro Projekt im Tab Benachrichtigungen, auch für Ihre eigenen Änderungen. Wenn Sie E-Mail-Benachrichtigungen ausschalten, sendet der Webhook trotzdem. Der Webhook sendet nur, solange er aktiviert und eine URL gesetzt ist. Ihre URL bleibt gespeichert, während der Webhook deaktiviert ist – leeren Sie die URL, um sie zu entfernen." label.enable_webhook_notifications="Webhook-Benachrichtigungen aktivieren" label.webhook_url_hint="Nur HTTPS. Leer lassen, um den Webhook zu entfernen." label.default_notification_types="Standard-Benachrichtigungsarten für neue Benutzer" diff --git a/app/Language/de-DE-inf.ini b/app/Language/de-DE-inf.ini index 4ec19c2f96..cb601ea3cc 100644 --- a/app/Language/de-DE-inf.ini +++ b/app/Language/de-DE-inf.ini @@ -846,7 +846,7 @@ label.project_assignment="Projekte zuweisen" label.overview="Übersicht" label.active="aktiv" label.inactive="inaktiv" -label.receive_notifications="Benachrichtigungen erhalten" +label.receive_notifications="E-Mail-Benachrichtigungen erhalten" label.upload="Hochladen" label.ondate="am" label.label="Etikett" @@ -2621,7 +2621,7 @@ label.notifications_my_work_description="Nur dir zugewiesene Aufgaben, deine Ele label.notifications_muted="Stummgeschaltet" label.notifications_muted_description="Keine Benachrichtigungen außer direkten @Erwähnungen" label.webhook_notifications="Persönlicher Webhook" -label.webhook_notifications_description="Sende deine Benachrichtigungen an deinen eigenen HTTPS-Endpunkt. Für jede Projektbenachrichtigung, die für dich infrage kommt, sendet Leantime eine HTTP-POST-Anfrage mit einem JSON-Body an diese URL. Die Anfragen werden im Hintergrund gesendet und können einige Minuten bis zur Zustellung benötigen; fehlgeschlagene Anfragen werden nicht wiederholt. Welche Benachrichtigungen infrage kommen, bestimmen deine Einstellungen im Tab Benachrichtigungen (Benachrichtigungsempfang, Kategorien und Stufen pro Projekt). Der Webhook sendet nur, solange er aktiviert und eine URL gesetzt ist. Deine URL bleibt gespeichert, während der Webhook deaktiviert ist – leere die URL, um sie zu entfernen." +label.webhook_notifications_description="Sende deine Benachrichtigungen an deinen eigenen HTTPS-Endpunkt. Für jede Projektbenachrichtigung, die für dich infrage kommt, sendet Leantime eine HTTP-POST-Anfrage mit einem JSON-Body an diese URL. Die Anfragen werden im Hintergrund gesendet und können einige Minuten bis zur Zustellung benötigen; fehlgeschlagene Anfragen werden nicht wiederholt. Welche Benachrichtigungen infrage kommen, bestimmen die Kategorien und Stufen pro Projekt im Tab Benachrichtigungen, auch für deine eigenen Änderungen. Wenn du E-Mail-Benachrichtigungen ausschaltest, sendet der Webhook trotzdem. Der Webhook sendet nur, solange er aktiviert und eine URL gesetzt ist. Deine URL bleibt gespeichert, während der Webhook deaktiviert ist – leere die URL, um sie zu entfernen." label.enable_webhook_notifications="Webhook-Benachrichtigungen aktivieren" label.webhook_url_hint="Nur HTTPS. Leer lassen, um den Webhook zu entfernen." label.default_notification_types="Standard-Benachrichtigungsarten für neue Benutzer" diff --git a/app/Language/de-DE.ini b/app/Language/de-DE.ini index bda3088710..cfd2fe932b 100644 --- a/app/Language/de-DE.ini +++ b/app/Language/de-DE.ini @@ -846,7 +846,7 @@ label.project_assignment="Projekte zuweisen" label.overview="Übersicht" label.active="aktiv" label.inactive="inaktiv" -label.receive_notifications="Benachrichtigungen erhalten" +label.receive_notifications="E-Mail-Benachrichtigungen erhalten" label.upload="Hochladen" label.ondate="am" label.label="Etikett" @@ -2621,7 +2621,7 @@ label.notifications_my_work_description="Nur Ihnen zugewiesene Aufgaben, Ihre El label.notifications_muted="Stummgeschaltet" label.notifications_muted_description="Keine Benachrichtigungen außer direkten @Erwähnungen" label.webhook_notifications="Persönlicher Webhook" -label.webhook_notifications_description="Senden Sie Ihre Benachrichtigungen an Ihren eigenen HTTPS-Endpunkt. Für jede Projektbenachrichtigung, die für Sie infrage kommt, sendet Leantime eine HTTP-POST-Anfrage mit einem JSON-Body an diese URL. Die Anfragen werden im Hintergrund gesendet und können einige Minuten bis zur Zustellung benötigen; fehlgeschlagene Anfragen werden nicht wiederholt. Welche Benachrichtigungen infrage kommen, bestimmen Ihre Einstellungen im Tab Benachrichtigungen (Benachrichtigungsempfang, Kategorien und Stufen pro Projekt). Der Webhook sendet nur, solange er aktiviert und eine URL gesetzt ist. Ihre URL bleibt gespeichert, während der Webhook deaktiviert ist – leeren Sie die URL, um sie zu entfernen." +label.webhook_notifications_description="Senden Sie Ihre Benachrichtigungen an Ihren eigenen HTTPS-Endpunkt. Für jede Projektbenachrichtigung, die für Sie infrage kommt, sendet Leantime eine HTTP-POST-Anfrage mit einem JSON-Body an diese URL. Die Anfragen werden im Hintergrund gesendet und können einige Minuten bis zur Zustellung benötigen; fehlgeschlagene Anfragen werden nicht wiederholt. Welche Benachrichtigungen infrage kommen, bestimmen die Kategorien und Stufen pro Projekt im Tab Benachrichtigungen, auch für Ihre eigenen Änderungen. Wenn Sie E-Mail-Benachrichtigungen ausschalten, sendet der Webhook trotzdem. Der Webhook sendet nur, solange er aktiviert und eine URL gesetzt ist. Ihre URL bleibt gespeichert, während der Webhook deaktiviert ist – leeren Sie die URL, um sie zu entfernen." label.enable_webhook_notifications="Webhook-Benachrichtigungen aktivieren" label.webhook_url_hint="Nur HTTPS. Leer lassen, um den Webhook zu entfernen." label.default_notification_types="Standard-Benachrichtigungsarten für neue Benutzer" diff --git a/app/Language/el-GR.ini b/app/Language/el-GR.ini index b6b91cb05c..c6678faafc 100644 --- a/app/Language/el-GR.ini +++ b/app/Language/el-GR.ini @@ -2621,7 +2621,7 @@ label.notifications_my_work_description="Μόνο εργασίες που σας label.notifications_muted="Σε σίγαση" label.notifications_muted_description="Καμία ειδοποίηση εκτός από άμεσες @αναφορές" label.webhook_notifications="Προσωπικό webhook" -label.webhook_notifications_description="Στείλτε τις ειδοποιήσεις σας στο δικό σας endpoint HTTPS. Για κάθε ειδοποίηση έργου για την οποία είστε επιλέξιμοι, το Leantime στέλνει ένα αίτημα HTTP POST με σώμα JSON σε αυτή τη διεύθυνση URL. Τα αιτήματα αποστέλλονται στο παρασκήνιο και μπορεί να χρειαστούν αρκετά λεπτά για να φτάσουν· ένα αίτημα που αποτυγχάνει δεν επαναλαμβάνεται. Οι ρυθμίσεις σας στην καρτέλα Ειδοποιήσεις (λήψη ειδοποιήσεων, κατηγορίες και επίπεδα ανά έργο) καθορίζουν ποιες ειδοποιήσεις είναι επιλέξιμες. Το webhook στέλνει μόνο όταν είναι ενεργοποιημένο και έχει οριστεί διεύθυνση URL. Η διεύθυνση URL σας παραμένει αποθηκευμένη όσο το webhook είναι απενεργοποιημένο — διαγράψτε τη διεύθυνση URL για να την αφαιρέσετε." +label.webhook_notifications_description="Στείλτε τις ειδοποιήσεις σας στο δικό σας endpoint HTTPS. Για κάθε ειδοποίηση έργου για την οποία είστε επιλέξιμοι, το Leantime στέλνει ένα αίτημα HTTP POST με σώμα JSON σε αυτή τη διεύθυνση URL. Τα αιτήματα αποστέλλονται στο παρασκήνιο και μπορεί να χρειαστούν αρκετά λεπτά για να φτάσουν· ένα αίτημα που αποτυγχάνει δεν επαναλαμβάνεται. Οι κατηγορίες και τα επίπεδα ανά έργο στην καρτέλα Ειδοποιήσεις καθορίζουν ποιες ειδοποιήσεις είναι επιλέξιμες, μαζί με τις αλλαγές που κάνετε εσείς. Η απενεργοποίηση των ειδοποιήσεων email δεν σταματά το webhook. Το webhook στέλνει μόνο όταν είναι ενεργοποιημένο και έχει οριστεί διεύθυνση URL. Η διεύθυνση URL σας παραμένει αποθηκευμένη όσο το webhook είναι απενεργοποιημένο — διαγράψτε τη διεύθυνση URL για να την αφαιρέσετε." label.enable_webhook_notifications="Ενεργοποίηση ειδοποιήσεων webhook" label.webhook_url_hint="Μόνο HTTPS. Αφήστε κενό για να αφαιρέσετε το webhook." label.default_notification_types="Προεπιλεγμένοι τύποι ειδοποιήσεων για νέους χρήστες" diff --git a/app/Language/en-GB.ini b/app/Language/en-GB.ini index 2655d61bd4..7800e1f013 100644 --- a/app/Language/en-GB.ini +++ b/app/Language/en-GB.ini @@ -847,7 +847,7 @@ label.project_assignment="Project Assignment" label.overview="Overview" label.active="Active" label.inactive="Inactive" -label.receive_notifications="Receive notifications" +label.receive_notifications="Receive email notifications" label.upload="Upload" label.ondate="on" label.label="Label" @@ -2621,7 +2621,7 @@ label.notifications_my_work_description="Only tasks assigned to you, your items, label.notifications_muted="Muted" label.notifications_muted_description="No notifications except direct @mentions" label.webhook_notifications="Personal Webhook" -label.webhook_notifications_description="Send your notifications to your own HTTPS endpoint. For every project notification you are eligible for, Leantime sends one HTTP POST request with a JSON body to this URL. Requests are sent in the background and can take several minutes to arrive; a request that fails is not retried. Your settings in the Notifications tab (receive notifications, categories and per-project levels) decide which notifications are eligible. The webhook only sends while it is enabled and a URL is set. Your URL stays saved while the webhook is disabled — clear the URL to remove it." +label.webhook_notifications_description="Send your notifications to your own HTTPS endpoint. For every project notification you are eligible for, Leantime sends one HTTP POST request with a JSON body to this URL. Requests are sent in the background and can take several minutes to arrive; a request that fails is not retried. Your categories and per-project levels in the Notifications tab decide which notifications are eligible, including changes you make yourself. Switching off email notifications does not stop the webhook. The webhook only sends while it is enabled and a URL is set. Your URL stays saved while the webhook is disabled — clear the URL to remove it." label.enable_webhook_notifications="Enable webhook notifications" label.webhook_url_hint="HTTPS only. Leave empty to remove the webhook." label.default_notification_types="Default notification types for new users" diff --git a/app/Language/en-US.ini b/app/Language/en-US.ini index b2d01a4961..f11d975def 100644 --- a/app/Language/en-US.ini +++ b/app/Language/en-US.ini @@ -918,7 +918,7 @@ label.notifications_my_work_description = "Only tasks assigned to you, your item label.notifications_muted = "Muted" label.notifications_muted_description = "No notifications except direct @mentions" label.webhook_notifications = "Personal Webhook" -label.webhook_notifications_description = "Send your notifications to your own HTTPS endpoint. For every project notification you are eligible for, Leantime sends one HTTP POST request with a JSON body to this URL. Requests are sent in the background and can take several minutes to arrive; a request that fails is not retried. Your settings in the Notifications tab (receive notifications, categories and per-project levels) decide which notifications are eligible. The webhook only sends while it is enabled and a URL is set. Your URL stays saved while the webhook is disabled — clear the URL to remove it." +label.webhook_notifications_description = "Send your notifications to your own HTTPS endpoint. For every project notification you are eligible for, Leantime sends one HTTP POST request with a JSON body to this URL. Requests are sent in the background and can take several minutes to arrive; a request that fails is not retried. Your categories and per-project levels in the Notifications tab decide which notifications are eligible, including changes you make yourself. Switching off email notifications does not stop the webhook. The webhook only sends while it is enabled and a URL is set. Your URL stays saved while the webhook is disabled — clear the URL to remove it." label.enable_webhook_notifications = "Enable webhook notifications" label.webhook_url_hint = "HTTPS only. Leave empty to remove the webhook." label.default_notification_types = "Default notification types for new users" diff --git a/app/Language/es-419.ini b/app/Language/es-419.ini index 2b60fe0000..9a77ca7f23 100644 --- a/app/Language/es-419.ini +++ b/app/Language/es-419.ini @@ -2621,7 +2621,7 @@ label.notifications_my_work_description="Solo las tareas asignadas a ti, tus ele label.notifications_muted="Silenciado" label.notifications_muted_description="Ninguna notificación, salvo las @menciones directas" label.webhook_notifications="Webhook personal" -label.webhook_notifications_description="Envía tus notificaciones a tu propio endpoint HTTPS. Por cada notificación de proyecto que te corresponda, Leantime envía a esta URL una solicitud HTTP POST con un cuerpo JSON. Las solicitudes se envían en segundo plano y pueden tardar varios minutos en llegar; si una solicitud falla, no se reintenta. Tu configuración en la pestaña Notificaciones (recepción de notificaciones, categorías y niveles por proyecto) determina qué notificaciones te corresponden. El webhook solo envía mientras está activado y tiene una URL configurada. La URL se conserva aunque desactives el webhook; bórrala para eliminarla." +label.webhook_notifications_description="Envía tus notificaciones a tu propio endpoint HTTPS. Por cada notificación de proyecto que te corresponda, Leantime envía a esta URL una solicitud HTTP POST con un cuerpo JSON. Las solicitudes se envían en segundo plano y pueden tardar varios minutos en llegar; si una solicitud falla, no se reintenta. Las categorías y los niveles por proyecto de la pestaña Notificaciones determinan qué notificaciones te corresponden, incluidos los cambios que haces tú. Desactivar las notificaciones por correo electrónico no detiene el webhook. El webhook solo envía mientras está activado y tiene una URL configurada. La URL se conserva aunque desactives el webhook; bórrala para eliminarla." label.enable_webhook_notifications="Activar notificaciones por webhook" label.webhook_url_hint="Solo HTTPS. Déjalo vacío para eliminar el webhook." label.default_notification_types="Tipos de notificación predeterminados para usuarios nuevos" diff --git a/app/Language/es-ES.ini b/app/Language/es-ES.ini index 0ff954d86d..ff42457bc0 100644 --- a/app/Language/es-ES.ini +++ b/app/Language/es-ES.ini @@ -846,7 +846,7 @@ label.project_assignment="Asignación de proyecto" label.overview="Resumen" label.active="Activo" label.inactive="Inactivo" -label.receive_notifications="Recibir notificaciones" +label.receive_notifications="Recibir notificaciones por correo electrónico" label.upload="Subir" label.ondate="en" label.label="Etiqueta" @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Solo las tareas asignadas a ti, tus ele label.notifications_muted="Silenciado" label.notifications_muted_description="Ninguna notificación, salvo las @menciones directas" label.webhook_notifications="Webhook personal" -label.webhook_notifications_description="Envía tus notificaciones a tu propio endpoint HTTPS. Por cada notificación de proyecto que te corresponda, Leantime envía a esta URL una petición HTTP POST con un cuerpo JSON. Las peticiones se envían en segundo plano y pueden tardar varios minutos en llegar; si una petición falla, no se reintenta. Tus ajustes en la pestaña Notificaciones (recepción de notificaciones, categorías y niveles por proyecto) determinan qué notificaciones te corresponden. El webhook solo envía mientras está activado y tiene una URL configurada. La URL se conserva aunque desactives el webhook; bórrala para eliminarla." +label.webhook_notifications_description="Envía tus notificaciones a tu propio endpoint HTTPS. Por cada notificación de proyecto que te corresponda, Leantime envía a esta URL una petición HTTP POST con un cuerpo JSON. Las peticiones se envían en segundo plano y pueden tardar varios minutos en llegar; si una petición falla, no se reintenta. Las categorías y los niveles por proyecto de la pestaña Notificaciones determinan qué notificaciones te corresponden, incluidos los cambios que haces tú. Desactivar las notificaciones por correo electrónico no detiene el webhook. El webhook solo envía mientras está activado y tiene una URL configurada. La URL se conserva aunque desactives el webhook; bórrala para eliminarla." label.enable_webhook_notifications="Activar notificaciones por webhook" label.webhook_url_hint="Solo HTTPS. Déjalo vacío para eliminar el webhook." label.default_notification_types="Tipos de notificación predeterminados para usuarios nuevos" diff --git a/app/Language/es-MX.ini b/app/Language/es-MX.ini index 076eb4edfa..bd2f192ba1 100644 --- a/app/Language/es-MX.ini +++ b/app/Language/es-MX.ini @@ -2619,7 +2619,7 @@ label.notifications_my_work_description="Solo las tareas asignadas a ti, tus ele label.notifications_muted="Silenciado" label.notifications_muted_description="Ninguna notificación, salvo las @menciones directas" label.webhook_notifications="Webhook personal" -label.webhook_notifications_description="Envía tus notificaciones a tu propio endpoint HTTPS. Por cada notificación de proyecto que te corresponda, Leantime envía a esta URL una solicitud HTTP POST con un cuerpo JSON. Las solicitudes se envían en segundo plano y pueden tardar varios minutos en llegar; si una solicitud falla, no se reintenta. Tu configuración en la pestaña Notificaciones (recepción de notificaciones, categorías y niveles por proyecto) determina qué notificaciones te corresponden. El webhook solo envía mientras está activado y tiene una URL configurada. La URL se conserva aunque desactives el webhook; bórrala para eliminarla." +label.webhook_notifications_description="Envía tus notificaciones a tu propio endpoint HTTPS. Por cada notificación de proyecto que te corresponda, Leantime envía a esta URL una solicitud HTTP POST con un cuerpo JSON. Las solicitudes se envían en segundo plano y pueden tardar varios minutos en llegar; si una solicitud falla, no se reintenta. Las categorías y los niveles por proyecto de la pestaña Notificaciones determinan qué notificaciones te corresponden, incluidos los cambios que haces tú. Desactivar las notificaciones por correo electrónico no detiene el webhook. El webhook solo envía mientras está activado y tiene una URL configurada. La URL se conserva aunque desactives el webhook; bórrala para eliminarla." label.enable_webhook_notifications="Activar notificaciones por webhook" label.webhook_url_hint="Solo HTTPS. Déjalo vacío para eliminar el webhook." label.default_notification_types="Tipos de notificación predeterminados para usuarios nuevos" diff --git a/app/Language/et-EE.ini b/app/Language/et-EE.ini index 060b65b3c6..f160337dba 100644 --- a/app/Language/et-EE.ini +++ b/app/Language/et-EE.ini @@ -2621,7 +2621,7 @@ label.notifications_my_work_description="Ainult sulle määratud ülesanded, sin label.notifications_muted="Vaigistatud" label.notifications_muted_description="Teavitusi ei tule, välja arvatud otsesed @mainimised" label.webhook_notifications="Isiklik webhook" -label.webhook_notifications_description="Saada oma teavitused enda HTTPS-lõpp-punkti. Iga projektiteavituse kohta, mis sulle ette nähtud on, saadab Leantime sellele URL-ile ühe JSON-sisuga HTTP POST päringu. Päringud saadetakse taustal ja nende kohalejõudmine võib võtta mitu minutit; ebaõnnestunud päringut uuesti ei saadeta. Milliseid teavitusi saadetakse, otsustavad sinu seaded vahekaardil Teavitused (teavituste saamine, kategooriad ja projektipõhised tasemed). Webhook saadab teavitusi ainult siis, kui see on lubatud ja URL on määratud. Kui webhook on keelatud, jääb sinu URL salvestatuks — selle eemaldamiseks tühjenda URL." +label.webhook_notifications_description="Saada oma teavitused enda HTTPS-lõpp-punkti. Iga projektiteavituse kohta, mis sulle ette nähtud on, saadab Leantime sellele URL-ile ühe JSON-sisuga HTTP POST päringu. Päringud saadetakse taustal ja nende kohalejõudmine võib võtta mitu minutit; ebaõnnestunud päringut uuesti ei saadeta. Milliseid teavitusi saadetakse, otsustavad vahekaardi Teavitused kategooriad ja projektipõhised tasemed; saadetakse ka sinu enda tehtud muudatused. Meiliteatiste väljalülitamine webhooki ei peata. Webhook saadab teavitusi ainult siis, kui see on lubatud ja URL on määratud. Kui webhook on keelatud, jääb sinu URL salvestatuks — selle eemaldamiseks tühjenda URL." label.enable_webhook_notifications="Luba webhooki teavitused" label.webhook_url_hint="Ainult HTTPS. Webhooki eemaldamiseks jäta tühjaks." label.default_notification_types="Uute kasutajate vaikimisi teavitustüübid" diff --git a/app/Language/fa-IR.ini b/app/Language/fa-IR.ini index 7c26e5572d..962ce2fd68 100644 --- a/app/Language/fa-IR.ini +++ b/app/Language/fa-IR.ini @@ -2621,7 +2621,7 @@ label.notifications_my_work_description="فقط کارهای واگذارشده label.notifications_muted="بی‌صدا شده" label.notifications_muted_description="هیچ اعلانی به‌جز @اشاره‌های مستقیم" label.webhook_notifications="وب‌هوک شخصی" -label.webhook_notifications_description="اعلان‌های خود را به نقطه پایانی HTTPS خودتان بفرستید. برای هر اعلان پروژه که واجد دریافت آن هستید، Leantime یک درخواست HTTP POST با بدنه JSON به این نشانی ارسال می‌کند. درخواست‌ها در پس‌زمینه ارسال می‌شوند و ممکن است رسیدنشان چند دقیقه طول بکشد؛ درخواستی که ناموفق باشد دوباره ارسال نمی‌شود. تنظیمات شما در تب اعلان‌ها (دریافت اعلان، دسته‌بندی‌ها و سطح هر پروژه) تعیین می‌کنند کدام اعلان‌ها واجد شرایط هستند. وب‌هوک فقط زمانی ارسال می‌کند که فعال باشد و نشانی آن تنظیم شده باشد. وقتی وب‌هوک غیرفعال است نشانی شما ذخیره می‌ماند — برای حذف آن، نشانی را پاک کنید." +label.webhook_notifications_description="اعلان‌های خود را به نقطه پایانی HTTPS خودتان بفرستید. برای هر اعلان پروژه که واجد دریافت آن هستید، Leantime یک درخواست HTTP POST با بدنه JSON به این نشانی ارسال می‌کند. درخواست‌ها در پس‌زمینه ارسال می‌شوند و ممکن است رسیدنشان چند دقیقه طول بکشد؛ درخواستی که ناموفق باشد دوباره ارسال نمی‌شود. دسته‌بندی‌ها و سطح هر پروژه در تب اعلان‌ها تعیین می‌کنند کدام اعلان‌ها واجد شرایط هستند، از جمله تغییراتی که خودتان انجام می‌دهید. خاموش کردن اعلان‌های ایمیلی وب‌هوک را متوقف نمی‌کند. وب‌هوک فقط زمانی ارسال می‌کند که فعال باشد و نشانی آن تنظیم شده باشد. وقتی وب‌هوک غیرفعال است نشانی شما ذخیره می‌ماند — برای حذف آن، نشانی را پاک کنید." label.enable_webhook_notifications="فعال‌سازی اعلان‌های وب‌هوک" label.webhook_url_hint="فقط HTTPS. برای حذف وب‌هوک خالی بگذارید." label.default_notification_types="انواع پیش‌فرض اعلان برای کاربران جدید" diff --git a/app/Language/fr-CH.ini b/app/Language/fr-CH.ini index ad415ac5e2..05fe8af4b4 100644 --- a/app/Language/fr-CH.ini +++ b/app/Language/fr-CH.ini @@ -765,7 +765,7 @@ label.project_assignment = "Affectation de projet" label.overview = "Aperçu" label.active = "Actif" label.inactive = "Inactif" -label.receive_notifications = "Recevoir les notifications" +label.receive_notifications = "Recevoir les notifications par e-mail" label.upload = "Importer" label.ondate = "sur" label.label = "Étiquette" @@ -1848,7 +1848,7 @@ label.notifications_my_work_description="Uniquement les tâches qui vous sont as label.notifications_muted="En sourdine" label.notifications_muted_description="Aucune notification, sauf les @mentions directes" label.webhook_notifications="Webhook personnel" -label.webhook_notifications_description="Envoyez vos notifications vers votre propre point de terminaison HTTPS. Pour chaque notification de projet à laquelle vous êtes éligible, Leantime envoie une requête HTTP POST avec un corps JSON à cette URL. Les requêtes sont envoyées en arrière-plan et peuvent mettre plusieurs minutes à arriver ; une requête en échec n'est pas relancée. Vos paramètres de l'onglet Notifications (réception, catégories et niveaux par projet) déterminent les notifications éligibles. Le webhook n'envoie que s'il est activé et qu'une URL est définie. Votre URL reste enregistrée lorsque le webhook est désactivé — videz l'URL pour la supprimer." +label.webhook_notifications_description="Envoyez vos notifications vers votre propre point de terminaison HTTPS. Pour chaque notification de projet à laquelle vous êtes éligible, Leantime envoie une requête HTTP POST avec un corps JSON à cette URL. Les requêtes sont envoyées en arrière-plan et peuvent mettre plusieurs minutes à arriver ; une requête en échec n'est pas relancée. Les catégories et les niveaux par projet de l'onglet Notifications déterminent les notifications éligibles, y compris les modifications que vous faites vous-même. Désactiver les notifications par e-mail n'arrête pas le webhook. Le webhook n'envoie que s'il est activé et qu'une URL est définie. Votre URL reste enregistrée lorsque le webhook est désactivé — videz l'URL pour la supprimer." label.enable_webhook_notifications="Activer les notifications par webhook" label.webhook_url_hint="HTTPS uniquement. Laissez vide pour supprimer le webhook." label.default_notification_types="Types de notification par défaut pour les nouveaux utilisateurs" diff --git a/app/Language/fr-FR.ini b/app/Language/fr-FR.ini index 44589718cc..1933bb76df 100644 --- a/app/Language/fr-FR.ini +++ b/app/Language/fr-FR.ini @@ -897,7 +897,7 @@ label.project_assignment="Affectation de projet" label.overview="Aperçu" label.active="Actif" label.inactive="Inactif" -label.receive_notifications="Recevoir les notifications" +label.receive_notifications="Recevoir les notifications par e-mail" label.notification_event_types="Me notifier pour" label.notification_event_types_description="Les @mentions vous notifieront toujours, quels que soient ces réglages." label.notification_category_tasks="Tâches et jalons" @@ -922,7 +922,7 @@ label.notifications_my_work_description="Uniquement les tâches qui vous sont as label.notifications_muted="En sourdine" label.notifications_muted_description="Aucune notification, sauf les @mentions directes" label.webhook_notifications="Webhook personnel" -label.webhook_notifications_description="Envoyez vos notifications vers votre propre point de terminaison HTTPS. Pour chaque notification de projet à laquelle vous êtes éligible, Leantime envoie une requête HTTP POST avec un corps JSON à cette URL. Les requêtes sont envoyées en arrière-plan et peuvent mettre plusieurs minutes à arriver ; une requête en échec n'est pas relancée. Vos paramètres de l'onglet Notifications (réception, catégories et niveaux par projet) déterminent les notifications éligibles. Le webhook n'envoie que s'il est activé et qu'une URL est définie. Votre URL reste enregistrée lorsque le webhook est désactivé — videz l'URL pour la supprimer." +label.webhook_notifications_description="Envoyez vos notifications vers votre propre point de terminaison HTTPS. Pour chaque notification de projet à laquelle vous êtes éligible, Leantime envoie une requête HTTP POST avec un corps JSON à cette URL. Les requêtes sont envoyées en arrière-plan et peuvent mettre plusieurs minutes à arriver ; une requête en échec n'est pas relancée. Les catégories et les niveaux par projet de l'onglet Notifications déterminent les notifications éligibles, y compris les modifications que vous faites vous-même. Désactiver les notifications par e-mail n'arrête pas le webhook. Le webhook n'envoie que s'il est activé et qu'une URL est définie. Votre URL reste enregistrée lorsque le webhook est désactivé — videz l'URL pour la supprimer." label.enable_webhook_notifications="Activer les notifications par webhook" label.webhook_url_hint="HTTPS uniquement. Laissez vide pour supprimer le webhook." label.default_notification_types="Types de notification par défaut pour les nouveaux utilisateurs" diff --git a/app/Language/he-IL.ini b/app/Language/he-IL.ini index 148c4613a4..884b8c79a2 100644 --- a/app/Language/he-IL.ini +++ b/app/Language/he-IL.ini @@ -849,7 +849,7 @@ label.project_assignment="הקצאת מיזם" label.overview="סקירה" label.active="פעיל" label.inactive="לא פעיל" -label.receive_notifications="קבלת התראות" +label.receive_notifications="קבלת התראות בדוא״ל" label.upload="העלאה" label.ondate="ב־" label.label="תווית" @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="רק משימות שהוקצו לך, ה label.notifications_muted="מושתק" label.notifications_muted_description="ללא התראות מלבד אזכורים (@) ישירים" label.webhook_notifications="Webhook אישי" -label.webhook_notifications_description="שליחת ההתראות שלך לנקודת קצה HTTPS משלך. על כל התראת מיזם שמגיעה לך, Leantime שולח לכתובת הזאת בקשת HTTP POST אחת עם גוף JSON. הבקשות נשלחות ברקע ויכולות להגיע בעיכוב של כמה דקות; בקשה שנכשלת אינה נשלחת שוב. ההגדרות שלך בלשונית התראות (קבלת התראות, קטגוריות ורמות לפי מיזם) קובעות אילו התראות מגיעות לך. ה־webhook שולח רק כשהוא מופעל ומוגדרת כתובת. הכתובת שלך נשארת שמורה גם כשה־webhook מושבת — כדי להסיר אותה יש לרוקן את הכתובת." +label.webhook_notifications_description="שליחת ההתראות שלך לנקודת קצה HTTPS משלך. על כל התראת מיזם שמגיעה לך, Leantime שולח לכתובת הזאת בקשת HTTP POST אחת עם גוף JSON. הבקשות נשלחות ברקע ויכולות להגיע בעיכוב של כמה דקות; בקשה שנכשלת אינה נשלחת שוב. הקטגוריות והרמות לפי מיזם בלשונית התראות קובעות אילו התראות מגיעות לך, כולל שינויים שביצעת בעצמך. כיבוי התראות הדוא״ל אינו עוצר את ה־webhook. ה־webhook שולח רק כשהוא מופעל ומוגדרת כתובת. הכתובת שלך נשארת שמורה גם כשה־webhook מושבת — כדי להסיר אותה יש לרוקן את הכתובת." label.enable_webhook_notifications="הפעלת התראות webhook" label.webhook_url_hint="HTTPS בלבד. יש להשאיר ריק כדי להסיר את ה־webhook." label.default_notification_types="סוגי התראות ברירת מחדל למשתמשים חדשים" diff --git a/app/Language/hr-HR.ini b/app/Language/hr-HR.ini index 54b0fdb037..916a52ddae 100644 --- a/app/Language/hr-HR.ini +++ b/app/Language/hr-HR.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Samo zadaci dodijeljeni vama, vaše sta label.notifications_muted="Utišano" label.notifications_muted_description="Bez obavijesti osim izravnih @spominjanja" label.webhook_notifications="Osobni webhook" -label.webhook_notifications_description="Šaljite svoje obavijesti na vlastitu HTTPS krajnju točku. Za svaku obavijest projekta na koju imate pravo Leantime šalje jedan HTTP POST zahtjev s JSON tijelom na ovaj URL. Zahtjevi se šalju u pozadini i mogu stići tek nakon nekoliko minuta; neuspjeli zahtjev ne šalje se ponovno. Vaše postavke na kartici Obavijesti (primanje obavijesti, kategorije i razine po projektu) određuju na koje obavijesti imate pravo. Webhook šalje samo dok je uključen i dok je URL postavljen. Vaš URL ostaje spremljen dok je webhook isključen — ispraznite URL da biste ga uklonili." +label.webhook_notifications_description="Šaljite svoje obavijesti na vlastitu HTTPS krajnju točku. Za svaku obavijest projekta na koju imate pravo Leantime šalje jedan HTTP POST zahtjev s JSON tijelom na ovaj URL. Zahtjevi se šalju u pozadini i mogu stići tek nakon nekoliko minuta; neuspjeli zahtjev ne šalje se ponovno. Kategorije i razine po projektu na kartici Obavijesti određuju na koje obavijesti imate pravo, uključujući promjene koje sami napravite. Isključivanje obavijesti e-poštom ne zaustavlja webhook. Webhook šalje samo dok je uključen i dok je URL postavljen. Vaš URL ostaje spremljen dok je webhook isključen — ispraznite URL da biste ga uklonili." label.enable_webhook_notifications="Uključi obavijesti putem webhooka" label.webhook_url_hint="Samo HTTPS. Ostavite prazno da biste uklonili webhook." label.default_notification_types="Zadane vrste obavijesti za nove korisnike" diff --git a/app/Language/hu-HU.ini b/app/Language/hu-HU.ini index 29821337ee..3341e5bb80 100644 --- a/app/Language/hu-HU.ini +++ b/app/Language/hu-HU.ini @@ -2629,7 +2629,7 @@ label.notifications_my_work_description="Csak az Önhöz rendelt feladatok, az label.notifications_muted="Némítva" label.notifications_muted_description="Nincs értesítés, kivéve a közvetlen @említéseket" label.webhook_notifications="Személyes webhook" -label.webhook_notifications_description="Értesítéseit a saját HTTPS-végpontjára is küldheti. A Leantime minden olyan projektértesítésnél, amelyre Ön jogosult, egy HTTP POST kérést küld JSON-törzzsel erre az URL-címre. A kérések a háttérben kerülnek elküldésre, és több percig is eltarthat, mire megérkeznek; a sikertelen kéréseket a rendszer nem küldi újra. Az Értesítések lapon megadott beállításai (értesítésfogadás, kategóriák és projektenkénti szintek) határozzák meg, mely értesítésekre jogosult. A webhook csak akkor küld, ha engedélyezve van, és meg van adva URL-cím. Az URL-cím a webhook letiltása esetén is mentve marad — az eltávolításához ürítse ki az URL mezőt." +label.webhook_notifications_description="Értesítéseit a saját HTTPS-végpontjára is küldheti. A Leantime minden olyan projektértesítésnél, amelyre Ön jogosult, egy HTTP POST kérést küld JSON-törzzsel erre az URL-címre. A kérések a háttérben kerülnek elküldésre, és több percig is eltarthat, mire megérkeznek; a sikertelen kéréseket a rendszer nem küldi újra. Az Értesítések lapon megadott kategóriák és projektenkénti szintek határozzák meg, mely értesítésekre jogosult, beleértve a saját módosításait is. Az e-mail értesítések kikapcsolása nem állítja le a webhookot. A webhook csak akkor küld, ha engedélyezve van, és meg van adva URL-cím. Az URL-cím a webhook letiltása esetén is mentve marad — az eltávolításához ürítse ki az URL mezőt." label.enable_webhook_notifications="Webhook-értesítések engedélyezése" label.webhook_url_hint="Csak HTTPS. Hagyja üresen a webhook eltávolításához." label.default_notification_types="Alapértelmezett értesítéstípusok új felhasználók számára" diff --git a/app/Language/id-ID.ini b/app/Language/id-ID.ini index 78dc20dd19..7f97236535 100644 --- a/app/Language/id-ID.ini +++ b/app/Language/id-ID.ini @@ -3516,7 +3516,7 @@ text.app_url_mismatch_warning = "Tautan dalam email mengarah ke %s, tetapi Anda text.confirm_delete = "Anda yakin ingin menghapus item ini?" label.chart_metric = "Metrik bagan" label.webhook_notifications = "Webhook Pribadi" -label.webhook_notifications_description ="Kirim notifikasi Anda ke endpoint HTTPS milik Anda sendiri. Untuk setiap notifikasi proyek yang berlaku bagi Anda, Leantime mengirim satu permintaan HTTP POST dengan isi JSON ke URL ini. Permintaan dikirim di latar belakang dan bisa memerlukan beberapa menit untuk tiba; permintaan yang gagal tidak dicoba ulang. Pengaturan Anda di tab Notifikasi (terima notifikasi, kategori, dan tingkat per proyek) menentukan notifikasi mana yang berlaku. Webhook hanya mengirim selama diaktifkan dan URL telah diatur. URL Anda tetap tersimpan selama webhook dinonaktifkan — kosongkan URL untuk menghapusnya." +label.webhook_notifications_description ="Kirim notifikasi Anda ke endpoint HTTPS milik Anda sendiri. Untuk setiap notifikasi proyek yang berlaku bagi Anda, Leantime mengirim satu permintaan HTTP POST dengan isi JSON ke URL ini. Permintaan dikirim di latar belakang dan bisa memerlukan beberapa menit untuk tiba; permintaan yang gagal tidak dicoba ulang. Kategori dan tingkat per proyek di tab Notifikasi menentukan notifikasi mana yang berlaku, termasuk perubahan yang Anda buat sendiri. Mematikan notifikasi email tidak menghentikan webhook. Webhook hanya mengirim selama diaktifkan dan URL telah diatur. URL Anda tetap tersimpan selama webhook dinonaktifkan — kosongkan URL untuk menghapusnya." label.enable_webhook_notifications = "Aktifkan notifikasi webhook" label.webhook_url_hint = "Hanya HTTPS. Biarkan kosong untuk menghapus webhook." label.kanban_view_menu = "Kartu" diff --git a/app/Language/is-IS.ini b/app/Language/is-IS.ini index 510001243e..a7abad75c1 100644 --- a/app/Language/is-IS.ini +++ b/app/Language/is-IS.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Aðeins verk sem eru úthlutuð þér, label.notifications_muted="Þaggað" label.notifications_muted_description="Engar tilkynningar nema beinar @-tilvísanir" label.webhook_notifications="Persónulegur vefkrókur" -label.webhook_notifications_description="Sendu tilkynningarnar þínar á þinn eigin HTTPS-endapunkt. Fyrir hverja verkefnatilkynningu sem á við þig sendir Leantime eina HTTP POST-beiðni með JSON-meginmáli á þessa slóð. Beiðnir eru sendar í bakgrunni og getur tekið nokkrar mínútur fyrir þær að berast; beiðni sem mistekst er ekki reynd aftur. Stillingarnar þínar á flipanum Tilkynningar (móttaka tilkynninga, flokkar og stig fyrir einstök verkefni) ráða því hvaða tilkynningar eiga við. Vefkrókurinn sendir aðeins þegar hann er virkur og slóð hefur verið stillt. Slóðin helst vistuð þótt vefkrókurinn sé óvirkur — hreinsaðu slóðina til að fjarlægja hana." +label.webhook_notifications_description="Sendu tilkynningarnar þínar á þinn eigin HTTPS-endapunkt. Fyrir hverja verkefnatilkynningu sem á við þig sendir Leantime eina HTTP POST-beiðni með JSON-meginmáli á þessa slóð. Beiðnir eru sendar í bakgrunni og getur tekið nokkrar mínútur fyrir þær að berast; beiðni sem mistekst er ekki reynd aftur. Flokkarnir og stigin fyrir einstök verkefni á flipanum Tilkynningar ráða því hvaða tilkynningar eiga við, þar á meðal þínar eigin breytingar. Þótt slökkt sé á tilkynningum í tölvupósti stöðvast vefkrókurinn ekki. Vefkrókurinn sendir aðeins þegar hann er virkur og slóð hefur verið stillt. Slóðin helst vistuð þótt vefkrókurinn sé óvirkur — hreinsaðu slóðina til að fjarlægja hana." label.enable_webhook_notifications="Virkja tilkynningar í gegnum vefkrók" label.webhook_url_hint="Aðeins HTTPS. Skildu eftir autt til að fjarlægja vefkrókinn." label.default_notification_types="Sjálfgefnar tegundir tilkynninga fyrir nýja notendur" diff --git a/app/Language/it-IT.ini b/app/Language/it-IT.ini index 5d053b20df..a393700685 100644 --- a/app/Language/it-IT.ini +++ b/app/Language/it-IT.ini @@ -849,7 +849,7 @@ label.project_assignment="Assegnazione del progetto" label.overview="Panoramica" label.active="Attivo" label.inactive="Non attivo" -label.receive_notifications="Ricevi notifiche" +label.receive_notifications="Ricevi notifiche via e-mail" label.upload="Caricamento" label.ondate="Su" label.label="Etichetta" @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Solo le attività assegnate a te, i tuo label.notifications_muted="Silenziato" label.notifications_muted_description="Nessuna notifica, tranne le @menzioni dirette" label.webhook_notifications="Webhook personale" -label.webhook_notifications_description="Invia le tue notifiche al tuo endpoint HTTPS. Per ogni notifica di progetto che puoi ricevere, Leantime invia a questo URL una richiesta HTTP POST con un corpo JSON. Le richieste vengono inviate in background e possono impiegare diversi minuti ad arrivare; una richiesta non riuscita non viene ripetuta. Le tue impostazioni nella scheda Notifiche (ricezione, categorie e livelli per progetto) determinano quali notifiche puoi ricevere. Il webhook invia solo quando è attivo e un URL è impostato. Il tuo URL resta salvato anche con il webhook disattivato: svuota l'URL per rimuoverlo." +label.webhook_notifications_description="Invia le tue notifiche al tuo endpoint HTTPS. Per ogni notifica di progetto che puoi ricevere, Leantime invia a questo URL una richiesta HTTP POST con un corpo JSON. Le richieste vengono inviate in background e possono impiegare diversi minuti ad arrivare; una richiesta non riuscita non viene ripetuta. Le categorie e i livelli per progetto nella scheda Notifiche determinano quali notifiche puoi ricevere, incluse le modifiche che fai tu. Disattivare le notifiche via e-mail non ferma il webhook. Il webhook invia solo quando è attivo e un URL è impostato. Il tuo URL resta salvato anche con il webhook disattivato: svuota l'URL per rimuoverlo." label.enable_webhook_notifications="Attiva le notifiche webhook" label.webhook_url_hint="Solo HTTPS. Lascia vuoto per rimuovere il webhook." label.default_notification_types="Tipi di notifica predefiniti per i nuovi utenti" diff --git a/app/Language/ja-JP.ini b/app/Language/ja-JP.ini index c2126fd7c5..da79f9b74e 100644 --- a/app/Language/ja-JP.ini +++ b/app/Language/ja-JP.ini @@ -849,7 +849,7 @@ label.project_assignment="プロジェクトの割り当て" label.overview="概要" label.active="有効" label.inactive="無効" -label.receive_notifications="通知を受け取る" +label.receive_notifications="メール通知を受け取る" label.upload="アップロード" label.ondate="on" label.label="ラベル" @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="自分に割り当てられたタスク label.notifications_muted="ミュート中" label.notifications_muted_description="直接の@メンション以外は通知しません" label.webhook_notifications="個人用Webhook" -label.webhook_notifications_description="通知を自分のHTTPSエンドポイントに送信します。受信対象となるプロジェクト通知ごとに、LeantimeはJSON本文を含むHTTP POSTリクエストをこのURLに1件送信します。リクエストはバックグラウンドで送信されるため、届くまで数分かかることがあります。失敗したリクエストは再送されません。どの通知が対象になるかは、通知タブの設定(通知の受信、カテゴリ、プロジェクトごとのレベル)で決まります。Webhookは有効化されていてURLが設定されている場合にのみ送信されます。Webhookを無効にしてもURLは保存されたままです。削除するにはURLを消去してください。" +label.webhook_notifications_description="通知を自分のHTTPSエンドポイントに送信します。受信対象となるプロジェクト通知ごとに、LeantimeはJSON本文を含むHTTP POSTリクエストをこのURLに1件送信します。リクエストはバックグラウンドで送信されるため、届くまで数分かかることがあります。失敗したリクエストは再送されません。どの通知が対象になるかは、通知タブのカテゴリとプロジェクトごとのレベルで決まります。自分で行った変更も送信されます。メール通知をオフにしてもWebhookは停止しません。Webhookは有効化されていてURLが設定されている場合にのみ送信されます。Webhookを無効にしてもURLは保存されたままです。削除するにはURLを消去してください。" label.enable_webhook_notifications="Webhook通知を有効にする" label.webhook_url_hint="HTTPSのみ。空欄にするとWebhookを削除します。" label.default_notification_types="新規ユーザーのデフォルト通知種別" diff --git a/app/Language/kaa.ini b/app/Language/kaa.ini index da8d14c4c4..598f19b630 100644 --- a/app/Language/kaa.ini +++ b/app/Language/kaa.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Tek sizge tayınlanǵan wazıypalar, si label.notifications_muted="Únsiz" label.notifications_muted_description="Tikkeley @belgilewlerden basqa xabarlandırıwlar joq" label.webhook_notifications="Jeke webhook" -label.webhook_notifications_description="Xabarlandırıwlarıńızdı óz HTTPS mánzilińizge jiberiń. Siz alıwǵa haqılı bolǵan hár bir joba xabarlandırıwı ushın Leantime usı URL mánzilge JSON mazmunlı bir HTTP POST sorawın jiberedi. Sorawlar fonda jiberiledi hám jetip barıwı ushın bir neshe minut ketiwi múmkin; sátsiz bolǵan soraw qaytalanbaydı. Qaysı xabarlandırıwlardıń jiberiletuǵının Xabarlandırıwlar yorlıǵındaǵı sazlawlarıńız (xabarlandırıwlardı alıw, kategoriyalar hám jobalar boyınsha dárejeler) anıqlaydı. Webhook tek qosılǵan hám URL kiritilgen waqıtta jiberedi. Webhook óshirilgen waqıtta URL saqlanıp qaladı — onı alıp taslaw ushın URL maydanın tazalań." +label.webhook_notifications_description="Xabarlandırıwlarıńızdı óz HTTPS mánzilińizge jiberiń. Siz alıwǵa haqılı bolǵan hár bir joba xabarlandırıwı ushın Leantime usı URL mánzilge JSON mazmunlı bir HTTP POST sorawın jiberedi. Sorawlar fonda jiberiledi hám jetip barıwı ushın bir neshe minut ketiwi múmkin; sátsiz bolǵan soraw qaytalanbaydı. Qaysı xabarlandırıwlardıń jiberiletuǵının Xabarlandırıwlar yorlıǵındaǵı kategoriyalar hám jobalar boyınsha dárejeler anıqlaydı, ózińiz kiritken ózgerisler de jiberiledi. Elektron pochta xabarlandırıwların óshiriw webhookti toqtatpaydı. Webhook tek qosılǵan hám URL kiritilgen waqıtta jiberedi. Webhook óshirilgen waqıtta URL saqlanıp qaladı — onı alıp taslaw ushın URL maydanın tazalań." label.enable_webhook_notifications="Webhook xabarlandırıwların qosıw" label.webhook_url_hint="Tek HTTPS. Webhook baylanısın óshiriw ushın bos qaldırıń." label.default_notification_types="Jańa paydalanıwshılar ushın standart xabarlandırıw túrleri" diff --git a/app/Language/km-KH.ini b/app/Language/km-KH.ini index 429456fd2a..1e7b90085b 100644 --- a/app/Language/km-KH.ini +++ b/app/Language/km-KH.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="តែកិច្ចការដែល label.notifications_muted="បានបិទសំឡេង" label.notifications_muted_description="គ្មានការជូនដំណឹង លើកលែងតែ @mentions ផ្ទាល់" label.webhook_notifications="Webhook ផ្ទាល់ខ្លួន" -label.webhook_notifications_description="ផ្ញើការជូនដំណឹងរបស់អ្នកទៅកាន់ HTTPS endpoint ផ្ទាល់ខ្លួនរបស់អ្នក។ សម្រាប់រាល់ការជូនដំណឹងគម្រោងដែលអ្នកមានសិទ្ធិទទួល Leantime ផ្ញើសំណើ HTTP POST មួយដែលមានតួ JSON ទៅកាន់ URL នេះ។ សំណើត្រូវបានផ្ញើនៅផ្ទៃខាងក្រោយ ហើយអាចចំណាយពេលច្រើននាទីដើម្បីមកដល់។ សំណើដែលបរាជ័យនឹងមិនត្រូវបានព្យាយាមម្តងទៀតទេ។ ការកំណត់របស់អ្នកនៅក្នុងផ្ទាំង ការជូនដំណឹងច្រើន (ការទទួលការជូនដំណឹង ប្រភេទ និងកម្រិតតាមគម្រោង) សម្រេចថាការជូនដំណឹងណាខ្លះមានសិទ្ធិ។ Webhook ផ្ញើតែនៅពេលវាត្រូវបានបើក ហើយមាន URL កំណត់ប៉ុណ្ណោះ។ URL របស់អ្នកនៅតែរក្សាទុកពេល webhook ត្រូវបានបិទ — សម្អាត URL ដើម្បីដកវាចេញ។" +label.webhook_notifications_description="ផ្ញើការជូនដំណឹងរបស់អ្នកទៅកាន់ HTTPS endpoint ផ្ទាល់ខ្លួនរបស់អ្នក។ សម្រាប់រាល់ការជូនដំណឹងគម្រោងដែលអ្នកមានសិទ្ធិទទួល Leantime ផ្ញើសំណើ HTTP POST មួយដែលមានតួ JSON ទៅកាន់ URL នេះ។ សំណើត្រូវបានផ្ញើនៅផ្ទៃខាងក្រោយ ហើយអាចចំណាយពេលច្រើននាទីដើម្បីមកដល់។ សំណើដែលបរាជ័យនឹងមិនត្រូវបានព្យាយាមម្តងទៀតទេ។ ប្រភេទ និងកម្រិតតាមគម្រោងនៅក្នុងផ្ទាំង ការជូនដំណឹងច្រើន សម្រេចថាការជូនដំណឹងណាខ្លះមានសិទ្ធិ រួមទាំងការផ្លាស់ប្តូរដែលអ្នកធ្វើដោយខ្លួនឯង។ ការបិទការជូនដំណឹងតាមអ៊ីមែលមិនបញ្ឈប់ webhook ទេ។ Webhook ផ្ញើតែនៅពេលវាត្រូវបានបើក ហើយមាន URL កំណត់ប៉ុណ្ណោះ។ URL របស់អ្នកនៅតែរក្សាទុកពេល webhook ត្រូវបានបិទ — សម្អាត URL ដើម្បីដកវាចេញ។" label.enable_webhook_notifications="បើកការជូនដំណឹងតាម webhook" label.webhook_url_hint="HTTPS តែប៉ុណ្ណោះ។ ទុកទទេដើម្បីដក webhook ចេញ។" label.default_notification_types="ប្រភេទការជូនដំណឹងលំនាំដើមសម្រាប់អ្នកប្រើថ្មី" diff --git a/app/Language/ko-KR.ini b/app/Language/ko-KR.ini index bc320a3f5c..e60b820862 100644 --- a/app/Language/ko-KR.ini +++ b/app/Language/ko-KR.ini @@ -2740,7 +2740,7 @@ label.telegram_topic_id = "토픽 ID" label.open_in_leantime = "Leantime에서 열기" label.assigned_to = "담당자" label.webhook_notifications = "개인 웹훅" -label.webhook_notifications_description ="알림을 내 HTTPS 엔드포인트로 보내요. 내가 받을 수 있는 모든 프로젝트 알림마다 Leantime이 이 URL로 JSON 본문이 담긴 HTTP POST 요청을 하나씩 보내요. 요청은 백그라운드에서 전송되며 도착하기까지 몇 분이 걸릴 수 있고, 실패한 요청은 다시 시도하지 않아요. 받을 수 있는 알림은 알림 탭의 설정(알림 수신, 카테고리, 프로젝트별 수준)에 따라 결정돼요. 웹훅은 활성화되어 있고 URL이 설정된 경우에만 전송돼요. 웹훅을 비활성화해도 URL은 저장된 상태로 유지되니, 삭제하려면 URL을 지우세요." +label.webhook_notifications_description ="알림을 내 HTTPS 엔드포인트로 보내요. 내가 받을 수 있는 모든 프로젝트 알림마다 Leantime이 이 URL로 JSON 본문이 담긴 HTTP POST 요청을 하나씩 보내요. 요청은 백그라운드에서 전송되며 도착하기까지 몇 분이 걸릴 수 있고, 실패한 요청은 다시 시도하지 않아요. 받을 수 있는 알림은 알림 탭의 카테고리와 프로젝트별 수준에 따라 결정되며, 내가 직접 한 변경도 포함돼요. 이메일 알림을 꺼도 웹훅은 멈추지 않아요. 웹훅은 활성화되어 있고 URL이 설정된 경우에만 전송돼요. 웹훅을 비활성화해도 URL은 저장된 상태로 유지되니, 삭제하려면 URL을 지우세요." label.enable_webhook_notifications = "웹훅 알림 사용" label.webhook_url_hint = "HTTPS만 지원해요. 웹훅을 삭제하려면 비워 두세요." label.kanban_view_menu = "카드" diff --git a/app/Language/ks-IN.ini b/app/Language/ks-IN.ini index 42e0edd6a8..480297c229 100644 --- a/app/Language/ks-IN.ini +++ b/app/Language/ks-IN.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="صِرف تۄہہِ اسائن کٔرم label.notifications_muted="خاموش" label.notifications_muted_description="سیدِ سیود @مینشن ورٲے کانٛہہ نوٹیفکیشن نہٕ" label.webhook_notifications="ذٲتی ویب ہُک" -label.webhook_notifications_description="پننۍ نوٹیفکیشن سوزِو پننِس HTTPS اینڈ پوائنٹس پؠٹھ۔ پرٛتھ تتھ پروجیکٹ نوٹیفکیشنہٕ خٲطرٕ یَمہٕ کِس تۄہہِ حقدار چھِو، چھُ Leantime یتھ URL پؠٹھ JSON باڈی سٟتۍ اکھ HTTP POST ریکویسٹ سوزان۔ ریکویسٹ چھِ پس منظرس منٛز سوزنہٕ یِوان تہٕ واتنس ہیکن واریاہ منٹ لگِتھ؛ ناکام ریکویسٹ چھُ نہٕ دوبارہ سوزنہٕ یِوان۔ نوٹیفکیشن ٹیبَس منٛز تُہٕنٛزہٕ سیٹنگز (نوٹیفکیشن حاصل کرنٕچ، کیٹیگری تہٕ پروجیکٹ وار سطحہٕ) چھِ فیصلہ کران زِ کَم نوٹیفکیشن چھِ اہل۔ ویب ہُک چھُ صِرف تیٚلہِ سوزان ییٚلہِ یہِ فعال آسہِ تہٕ URL سیٹ آسہِ۔ ویب ہُک غیر فعال آسنس دوران چھُ تُہُنٛد URL محفوظ روزان — اَتھ ہٹاونہٕ خٲطرٕ کٔرِو URL صاف۔" +label.webhook_notifications_description="پننۍ نوٹیفکیشن سوزِو پننِس HTTPS اینڈ پوائنٹس پؠٹھ۔ پرٛتھ تتھ پروجیکٹ نوٹیفکیشنہٕ خٲطرٕ یَمہٕ کِس تۄہہِ حقدار چھِو، چھُ Leantime یتھ URL پؠٹھ JSON باڈی سٟتۍ اکھ HTTP POST ریکویسٹ سوزان۔ ریکویسٹ چھِ پس منظرس منٛز سوزنہٕ یِوان تہٕ واتنس ہیکن واریاہ منٹ لگِتھ؛ ناکام ریکویسٹ چھُ نہٕ دوبارہ سوزنہٕ یِوان۔ نوٹیفکیشن ٹیبَس منٛز کیٹیگری تہٕ پروجیکٹ وار سطحہٕ چھِ فیصلہ کران زِ کَم نوٹیفکیشن چھِ اہل، تُہٕنٛدۍ پننۍ تبدیلیہٕ تہِ شٲمل۔ ای میل نوٹیفکیشن بند کرنہٕ سٟتۍ چھُ نہٕ ویب ہُک رُکان۔ ویب ہُک چھُ صِرف تیٚلہِ سوزان ییٚلہِ یہِ فعال آسہِ تہٕ URL سیٹ آسہِ۔ ویب ہُک غیر فعال آسنس دوران چھُ تُہُنٛد URL محفوظ روزان — اَتھ ہٹاونہٕ خٲطرٕ کٔرِو URL صاف۔" label.enable_webhook_notifications="ویب ہُک نوٹیفکیشن فعال کٔرِو" label.webhook_url_hint="صِرف HTTPS۔ ویب ہُک ہٹاونہٕ خٲطرٕ ترٲوِو خٲلی۔" label.default_notification_types="نوٚو یوزرن خٲطرٕ ڈیفالٹ نوٹیفکیشن قسم" diff --git a/app/Language/lv-LV.ini b/app/Language/lv-LV.ini index 3908d2b1a8..8adff8ea78 100644 --- a/app/Language/lv-LV.ini +++ b/app/Language/lv-LV.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Tikai jums piešķirtie uzdevumi, jūsu label.notifications_muted="Apklusināts" label.notifications_muted_description="Nav paziņojumu, izņemot tiešos @pieminējumus" label.webhook_notifications="Personīgā tīmekļa aizķere" -label.webhook_notifications_description="Sūtiet savus paziņojumus uz savu HTTPS galapunktu. Par katru projekta paziņojumu, ko varat saņemt, Leantime nosūta uz šo URL vienu HTTP POST pieprasījumu ar JSON saturu. Pieprasījumi tiek sūtīti fonā, un to piegāde var aizņemt vairākas minūtes; neveiksmīgs pieprasījums netiek atkārtots. Jūsu iestatījumi cilnē Paziņojumi (paziņojumu saņemšana, kategorijas un līmeņi katram projektam) nosaka, kuri paziņojumi tiek sūtīti. Tīmekļa aizķere sūta paziņojumus tikai tad, ja tā ir iespējota un ir iestatīts URL. Kamēr tīmekļa aizķere ir atspējota, jūsu URL paliek saglabāts — lai to noņemtu, notīriet URL." +label.webhook_notifications_description="Sūtiet savus paziņojumus uz savu HTTPS galapunktu. Par katru projekta paziņojumu, ko varat saņemt, Leantime nosūta uz šo URL vienu HTTP POST pieprasījumu ar JSON saturu. Pieprasījumi tiek sūtīti fonā, un to piegāde var aizņemt vairākas minūtes; neveiksmīgs pieprasījums netiek atkārtots. Kategorijas un līmeņi katram projektam cilnē Paziņojumi nosaka, kuri paziņojumi tiek sūtīti, tostarp par jūsu pašu veiktajām izmaiņām. E-pasta paziņojumu izslēgšana neaptur tīmekļa aizķeri. Tīmekļa aizķere sūta paziņojumus tikai tad, ja tā ir iespējota un ir iestatīts URL. Kamēr tīmekļa aizķere ir atspējota, jūsu URL paliek saglabāts — lai to noņemtu, notīriet URL." label.enable_webhook_notifications="Iespējot tīmekļa aizķeres paziņojumus" label.webhook_url_hint="Tikai HTTPS. Atstājiet tukšu, lai noņemtu tīmekļa aizķeri." label.default_notification_types="Noklusējuma paziņojumu veidi jauniem lietotājiem" diff --git a/app/Language/nl-NL.ini b/app/Language/nl-NL.ini index 9dc4e1a1da..d1377e7d8f 100644 --- a/app/Language/nl-NL.ini +++ b/app/Language/nl-NL.ini @@ -849,7 +849,7 @@ label.project_assignment="Projecttoewijzing" label.overview="Overzicht" label.active="Actief" label.inactive="Inactief" -label.receive_notifications="Ontvang notificaties" +label.receive_notifications="Ontvang notificaties per e-mail" label.upload="Uploaden" label.ondate="op" label.label="Label" @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Alleen taken die aan jou zijn toegeweze label.notifications_muted="Gedempt" label.notifications_muted_description="Geen meldingen behalve directe @vermeldingen" label.webhook_notifications="Persoonlijke webhook" -label.webhook_notifications_description="Stuur je meldingen naar je eigen HTTPS-endpoint. Voor elke projectmelding die voor jou in aanmerking komt, stuurt Leantime één HTTP POST-verzoek met een JSON-body naar deze URL. Verzoeken worden op de achtergrond verzonden en kunnen enkele minuten onderweg zijn; een mislukt verzoek wordt niet opnieuw geprobeerd. Je instellingen op het tabblad Notificaties (ontvangen van meldingen, categorieën en niveaus per project) bepalen welke meldingen in aanmerking komen. De webhook verstuurt alleen meldingen als hij is ingeschakeld en er een URL is ingesteld. Je URL blijft bewaard zolang de webhook is uitgeschakeld — maak de URL leeg om hem te verwijderen." +label.webhook_notifications_description="Stuur je meldingen naar je eigen HTTPS-endpoint. Voor elke projectmelding die voor jou in aanmerking komt, stuurt Leantime één HTTP POST-verzoek met een JSON-body naar deze URL. Verzoeken worden op de achtergrond verzonden en kunnen enkele minuten onderweg zijn; een mislukt verzoek wordt niet opnieuw geprobeerd. De categorieën en niveaus per project op het tabblad Notificaties bepalen welke meldingen in aanmerking komen, ook voor wijzigingen die je zelf maakt. Als je e-mailmeldingen uitzet, blijft de webhook gewoon versturen. De webhook verstuurt alleen meldingen als hij is ingeschakeld en er een URL is ingesteld. Je URL blijft bewaard zolang de webhook is uitgeschakeld — maak de URL leeg om hem te verwijderen." label.enable_webhook_notifications="Webhookmeldingen inschakelen" label.webhook_url_hint="Alleen HTTPS. Laat leeg om de webhook te verwijderen." label.default_notification_types="Standaard meldingstypen voor nieuwe gebruikers" diff --git a/app/Language/no-NO.ini b/app/Language/no-NO.ini index ce0a9b498c..3cf6b4886c 100644 --- a/app/Language/no-NO.ini +++ b/app/Language/no-NO.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Bare oppgaver tildelt deg, dine element label.notifications_muted="Dempet" label.notifications_muted_description="Ingen varsler unntatt direkte @omtaler" label.webhook_notifications="Personlig webhook" -label.webhook_notifications_description="Send varslene dine til ditt eget HTTPS-endepunkt. For hvert prosjektvarsel du er kvalifisert for, sender Leantime én HTTP POST-forespørsel med en JSON-body til denne URL-en. Forespørsler sendes i bakgrunnen og kan bruke flere minutter på å komme frem; en forespørsel som mislykkes, blir ikke sendt på nytt. Innstillingene dine i fanen Varsler (mottak av varsler, kategorier og nivåer per prosjekt) bestemmer hvilke varsler som er kvalifisert. Webhooken sender bare mens den er aktivert og en URL er angitt. URL-en forblir lagret mens webhooken er deaktivert – tøm URL-en for å fjerne den." +label.webhook_notifications_description="Send varslene dine til ditt eget HTTPS-endepunkt. For hvert prosjektvarsel du er kvalifisert for, sender Leantime én HTTP POST-forespørsel med en JSON-body til denne URL-en. Forespørsler sendes i bakgrunnen og kan bruke flere minutter på å komme frem; en forespørsel som mislykkes, blir ikke sendt på nytt. Kategoriene og nivåene per prosjekt i fanen Varsler bestemmer hvilke varsler som er kvalifisert, også endringer du gjør selv. Å slå av varsler på e-post stopper ikke webhooken. Webhooken sender bare mens den er aktivert og en URL er angitt. URL-en forblir lagret mens webhooken er deaktivert – tøm URL-en for å fjerne den." label.enable_webhook_notifications="Aktiver webhook-varsler" label.webhook_url_hint="Bare HTTPS. La stå tomt for å fjerne webhooken." label.default_notification_types="Standard varseltyper for nye brukere" diff --git a/app/Language/pl-PL.ini b/app/Language/pl-PL.ini index 77dc8996a9..553146fc53 100644 --- a/app/Language/pl-PL.ini +++ b/app/Language/pl-PL.ini @@ -2808,7 +2808,7 @@ label.notifications_my_work_description = "Tylko zadania przypisane do Ciebie, T label.notifications_muted = "Wyciszone" label.notifications_muted_description = "Brak powiadomień poza bezpośrednimi @wzmiankami" label.webhook_notifications = "Osobisty webhook" -label.webhook_notifications_description ="Wysyłaj powiadomienia do własnego punktu końcowego HTTPS. Dla każdego powiadomienia z projektu, które Ci przysługuje, Leantime wysyła na ten adres URL jedno żądanie HTTP POST z treścią w formacie JSON. Żądania są wysyłane w tle i mogą dotrzeć z kilkuminutowym opóźnieniem; nieudane żądanie nie jest ponawiane. O tym, które powiadomienia są wysyłane, decydują Twoje ustawienia na karcie Powiadomienia (odbieranie powiadomień, kategorie i poziomy dla poszczególnych projektów). Webhook działa tylko wtedy, gdy jest włączony i ustawiono adres URL. Adres URL pozostaje zapisany, gdy webhook jest wyłączony — wyczyść go, aby go usunąć." +label.webhook_notifications_description ="Wysyłaj powiadomienia do własnego punktu końcowego HTTPS. Dla każdego powiadomienia z projektu, które Ci przysługuje, Leantime wysyła na ten adres URL jedno żądanie HTTP POST z treścią w formacie JSON. Żądania są wysyłane w tle i mogą dotrzeć z kilkuminutowym opóźnieniem; nieudane żądanie nie jest ponawiane. O tym, które powiadomienia są wysyłane, decydują kategorie i poziomy dla poszczególnych projektów na karcie Powiadomienia; wysyłane są też zmiany wprowadzone przez Ciebie. Wyłączenie powiadomień e-mail nie zatrzymuje webhooka. Webhook działa tylko wtedy, gdy jest włączony i ustawiono adres URL. Adres URL pozostaje zapisany, gdy webhook jest wyłączony — wyczyść go, aby go usunąć." label.enable_webhook_notifications = "Włącz powiadomienia przez webhook" label.webhook_url_hint = "Tylko HTTPS. Zostaw puste, aby usunąć webhook." label.default_notification_types = "Domyślne typy powiadomień dla nowych użytkowników" diff --git a/app/Language/pt-BR.ini b/app/Language/pt-BR.ini index 0e46cf87ca..ad368806d6 100644 --- a/app/Language/pt-BR.ini +++ b/app/Language/pt-BR.ini @@ -870,7 +870,7 @@ label.project_assignment="Atribuição do Projeto" label.overview="Visão Geral" label.active="Ativo" label.inactive="Inativo" -label.receive_notifications="Receber notificações" +label.receive_notifications="Receber notificações por e-mail" label.notification_event_types="Notificar-me sobre" label.notification_event_types_description="@Mentions sempre vão notificar você, independentemente dessas configurações." label.notification_category_tasks="Tarefas e Marcos" @@ -2678,7 +2678,7 @@ label.telegram_topic_id="ID do tópico" label.open_in_leantime="Abrir no Leantime" label.assigned_to="Atribuído a" label.webhook_notifications="Webhook pessoal" -label.webhook_notifications_description="Envie suas notificações para o seu próprio endpoint HTTPS. Para cada notificação de projeto que você pode receber, o Leantime envia uma requisição HTTP POST com um corpo JSON para esta URL. As requisições são enviadas em segundo plano e podem levar vários minutos para chegar; uma requisição que falhar não é repetida. Suas configurações na aba Notificações (recebimento de notificações, categorias e níveis por projeto) determinam quais notificações são enviadas. O webhook só envia enquanto estiver ativado e houver uma URL definida. Sua URL permanece salva enquanto o webhook estiver desativado — limpe a URL para removê-la." +label.webhook_notifications_description="Envie suas notificações para o seu próprio endpoint HTTPS. Para cada notificação de projeto que você pode receber, o Leantime envia uma requisição HTTP POST com um corpo JSON para esta URL. As requisições são enviadas em segundo plano e podem levar vários minutos para chegar; uma requisição que falhar não é repetida. As categorias e os níveis por projeto na aba Notificações determinam quais notificações são enviadas, incluindo as alterações feitas por você. Desativar as notificações por e-mail não interrompe o webhook. O webhook só envia enquanto estiver ativado e houver uma URL definida. Sua URL permanece salva enquanto o webhook estiver desativado — limpe a URL para removê-la." label.enable_webhook_notifications="Ativar notificações por webhook" label.webhook_url_hint="Somente HTTPS. Deixe em branco para remover o webhook." label.kanban_view_menu="Cartões" diff --git a/app/Language/pt-PT.ini b/app/Language/pt-PT.ini index 3901598949..df53d75277 100644 --- a/app/Language/pt-PT.ini +++ b/app/Language/pt-PT.ini @@ -849,7 +849,7 @@ label.project_assignment="Atribuição do Projeto" label.overview="Visão Geral" label.active="Ativo" label.inactive="Inativo" -label.receive_notifications="Receber notificações" +label.receive_notifications="Receber notificações por e-mail" label.upload="Carregar" label.ondate="em" label.label="Etiqueta" @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Apenas tarefas atribuídas a si, os seu label.notifications_muted="Silenciado" label.notifications_muted_description="Sem notificações, exceto @menções diretas" label.webhook_notifications="Webhook pessoal" -label.webhook_notifications_description="Envie as suas notificações para o seu próprio endpoint HTTPS. Para cada notificação de projeto que lhe seja destinada, o Leantime envia um pedido HTTP POST com um corpo JSON para este URL. Os pedidos são enviados em segundo plano e podem demorar vários minutos a chegar; um pedido que falhe não é repetido. As suas definições no separador Notificações (receção de notificações, categorias e níveis por projeto) determinam que notificações lhe são destinadas. O webhook só envia enquanto estiver ativado e houver um URL definido. O seu URL fica guardado enquanto o webhook estiver desativado — limpe o URL para o remover." +label.webhook_notifications_description="Envie as suas notificações para o seu próprio endpoint HTTPS. Para cada notificação de projeto que lhe seja destinada, o Leantime envia um pedido HTTP POST com um corpo JSON para este URL. Os pedidos são enviados em segundo plano e podem demorar vários minutos a chegar; um pedido que falhe não é repetido. As categorias e os níveis por projeto no separador Notificações determinam que notificações lhe são destinadas, incluindo as alterações feitas por si. Desativar as notificações por e-mail não interrompe o webhook. O webhook só envia enquanto estiver ativado e houver um URL definido. O seu URL fica guardado enquanto o webhook estiver desativado — limpe o URL para o remover." label.enable_webhook_notifications="Ativar notificações por webhook" label.webhook_url_hint="Apenas HTTPS. Deixe vazio para remover o webhook." label.default_notification_types="Tipos de notificação predefinidos para novos utilizadores" diff --git a/app/Language/ro-RO.ini b/app/Language/ro-RO.ini index 5b17c8d527..f115004143 100644 --- a/app/Language/ro-RO.ini +++ b/app/Language/ro-RO.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Doar sarcinile atribuite dvs., elemente label.notifications_muted="Dezactivate" label.notifications_muted_description="Nicio notificare, cu excepția @mențiunilor directe" label.webhook_notifications="Webhook personal" -label.webhook_notifications_description="Trimiteți notificările către propriul endpoint HTTPS. Pentru fiecare notificare de proiect pentru care sunteți eligibil, Leantime trimite o cerere HTTP POST cu un corp JSON către acest URL. Cererile sunt trimise în fundal și pot ajunge după câteva minute; o cerere eșuată nu este reîncercată. Setările dumneavoastră din fila Notificări (primirea notificărilor, categorii și niveluri pe proiect) decid ce notificări sunt eligibile. Webhookul trimite doar cât timp este activat și are un URL setat. URL-ul rămâne salvat cât timp webhookul este dezactivat — goliți URL-ul pentru a-l elimina." +label.webhook_notifications_description="Trimiteți notificările către propriul endpoint HTTPS. Pentru fiecare notificare de proiect pentru care sunteți eligibil, Leantime trimite o cerere HTTP POST cu un corp JSON către acest URL. Cererile sunt trimise în fundal și pot ajunge după câteva minute; o cerere eșuată nu este reîncercată. Categoriile și nivelurile pe proiect din fila Notificări decid ce notificări sunt eligibile, inclusiv modificările făcute de dumneavoastră. Dezactivarea notificărilor prin e-mail nu oprește webhookul. Webhookul trimite doar cât timp este activat și are un URL setat. URL-ul rămâne salvat cât timp webhookul este dezactivat — goliți URL-ul pentru a-l elimina." label.enable_webhook_notifications="Activați notificările prin webhook" label.webhook_url_hint="Doar HTTPS. Lăsați gol pentru a elimina webhookul." label.default_notification_types="Tipuri implicite de notificări pentru utilizatorii noi" diff --git a/app/Language/ru-RU.ini b/app/Language/ru-RU.ini index 8f975a8201..74ea25ef47 100644 --- a/app/Language/ru-RU.ini +++ b/app/Language/ru-RU.ini @@ -849,7 +849,7 @@ label.project_assignment="Назначить проекты" label.overview="Обзор" label.active="Активный" label.inactive="Неактивный" -label.receive_notifications="Получать уведомления" +label.receive_notifications="Получать уведомления по электронной почте" label.upload="Загрузить" label.ondate="в" label.label="Метка" @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Только назначенные в label.notifications_muted="Без уведомлений" label.notifications_muted_description="Никаких уведомлений, кроме прямых @упоминаний" label.webhook_notifications="Персональный вебхук" -label.webhook_notifications_description="Отправляйте свои уведомления на собственный HTTPS-адрес. Для каждого уведомления проекта, которое вам положено, Leantime отправляет на этот URL один HTTP POST-запрос с телом в формате JSON. Запросы отправляются в фоновом режиме и могут доходить через несколько минут; неудачный запрос повторно не отправляется. Какие уведомления вам положены, определяют ваши настройки на вкладке «Уведомления» (получение уведомлений, категории и уровни по проектам). Вебхук работает, только если он включен и указан URL. Пока вебхук отключен, ваш URL остается сохраненным — очистите поле, чтобы удалить его." +label.webhook_notifications_description="Отправляйте свои уведомления на собственный HTTPS-адрес. Для каждого уведомления проекта, которое вам положено, Leantime отправляет на этот URL один HTTP POST-запрос с телом в формате JSON. Запросы отправляются в фоновом режиме и могут доходить через несколько минут; неудачный запрос повторно не отправляется. Какие уведомления вам положены, определяют категории и уровни по проектам на вкладке «Уведомления»; изменения, которые вы вносите сами, тоже отправляются. Отключение уведомлений по электронной почте не останавливает вебхук. Вебхук работает, только если он включен и указан URL. Пока вебхук отключен, ваш URL остается сохраненным — очистите поле, чтобы удалить его." label.enable_webhook_notifications="Включить уведомления через вебхук" label.webhook_url_hint="Только HTTPS. Оставьте пустым, чтобы удалить вебхук." label.default_notification_types="Типы уведомлений по умолчанию для новых пользователей" diff --git a/app/Language/sk-SK.ini b/app/Language/sk-SK.ini index 1d046b772f..96f6debffb 100644 --- a/app/Language/sk-SK.ini +++ b/app/Language/sk-SK.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Iba úlohy priradené vám, vaše polo label.notifications_muted="Stlmené" label.notifications_muted_description="Žiadne upozornenia okrem priamych @zmienok" label.webhook_notifications="Osobný webhook" -label.webhook_notifications_description="Posielajte svoje upozornenia na vlastný HTTPS endpoint. Pre každé projektové upozornenie, na ktoré máte nárok, odošle Leantime na túto URL adresu jednu požiadavku HTTP POST s telom vo formáte JSON. Požiadavky sa odosielajú na pozadí a ich doručenie môže trvať niekoľko minút; neúspešná požiadavka sa neopakuje. O tom, na ktoré upozornenia máte nárok, rozhodujú vaše nastavenia na karte Oznámenia (prijímanie upozornení, kategórie a úrovne jednotlivých projektov). Webhook odosiela, iba keď je zapnutý a je nastavená URL adresa. Kým je webhook vypnutý, vaša URL adresa zostáva uložená — ak ju chcete odstrániť, vymažte ju." +label.webhook_notifications_description="Posielajte svoje upozornenia na vlastný HTTPS endpoint. Pre každé projektové upozornenie, na ktoré máte nárok, odošle Leantime na túto URL adresu jednu požiadavku HTTP POST s telom vo formáte JSON. Požiadavky sa odosielajú na pozadí a ich doručenie môže trvať niekoľko minút; neúspešná požiadavka sa neopakuje. O tom, na ktoré upozornenia máte nárok, rozhodujú kategórie a úrovne jednotlivých projektov na karte Oznámenia; odosielajú sa aj zmeny, ktoré urobíte sami. Vypnutie e-mailových oznámení webhook nezastaví. Webhook odosiela, iba keď je zapnutý a je nastavená URL adresa. Kým je webhook vypnutý, vaša URL adresa zostáva uložená — ak ju chcete odstrániť, vymažte ju." label.enable_webhook_notifications="Zapnúť upozornenia cez webhook" label.webhook_url_hint="Iba HTTPS. Ak chcete webhook odstrániť, ponechajte pole prázdne." label.default_notification_types="Predvolené typy upozornení pre nových používateľov" diff --git a/app/Language/sl-SI.ini b/app/Language/sl-SI.ini index 1c212c5a42..c15e610057 100644 --- a/app/Language/sl-SI.ini +++ b/app/Language/sl-SI.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Samo opravila, dodeljena vam, vaši ele label.notifications_muted="Utišano" label.notifications_muted_description="Brez obvestil, razen neposrednih @omemb" label.webhook_notifications="Osebni webhook" -label.webhook_notifications_description="Pošiljajte svoja obvestila na lastno končno točko HTTPS. Za vsako obvestilo projekta, do katerega ste upravičeni, Leantime na ta URL pošlje eno zahtevo HTTP POST s telesom JSON. Zahteve se pošiljajo v ozadju in lahko prispejo šele po nekaj minutah; neuspela zahteva se ne ponovi. Katera obvestila so upravičena, določajo vaše nastavitve v zavihku Obvestila (prejemanje obvestil, kategorije in ravni posameznih projektov). Webhook pošilja samo, ko je omogočen in je URL nastavljen. Vaš URL ostane shranjen, tudi ko je webhook onemogočen — za odstranitev počistite URL." +label.webhook_notifications_description="Pošiljajte svoja obvestila na lastno končno točko HTTPS. Za vsako obvestilo projekta, do katerega ste upravičeni, Leantime na ta URL pošlje eno zahtevo HTTP POST s telesom JSON. Zahteve se pošiljajo v ozadju in lahko prispejo šele po nekaj minutah; neuspela zahteva se ne ponovi. Katera obvestila so upravičena, določajo kategorije in ravni posameznih projektov v zavihku Obvestila, vključno s spremembami, ki jih naredite sami. Izklop e-poštnih obvestil ne ustavi webhooka. Webhook pošilja samo, ko je omogočen in je URL nastavljen. Vaš URL ostane shranjen, tudi ko je webhook onemogočen — za odstranitev počistite URL." label.enable_webhook_notifications="Omogoči obvestila prek webhooka" label.webhook_url_hint="Samo HTTPS. Pustite prazno, da odstranite webhook." label.default_notification_types="Privzete vrste obvestil za nove uporabnike" diff --git a/app/Language/sr-SP.ini b/app/Language/sr-SP.ini index 84ad335a0a..d3d2c247ac 100644 --- a/app/Language/sr-SP.ini +++ b/app/Language/sr-SP.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Само задаци додељени label.notifications_muted="Утишано" label.notifications_muted_description="Без обавештења, осим директних @помињања" label.webhook_notifications="Лични webhook" -label.webhook_notifications_description="Шаљите своја обавештења на сопствену HTTPS крајњу тачку. За свако обавештење о пројекту које испуњава услове, Leantime шаље један HTTP POST захтев са JSON телом на ову URL адресу. Захтеви се шаљу у позадини и могу стићи и после неколико минута; неуспели захтев се не понавља. Ваша подешавања на картици Обавештења (примање обавештења, категорије и нивои по пројектима) одређују која обавештења испуњавају услове. Webhook шаље само док је укључен и док је URL адреса подешена. Ваша URL адреса остаје сачувана док је webhook искључен — испразните URL адресу да бисте је уклонили." +label.webhook_notifications_description="Шаљите своја обавештења на сопствену HTTPS крајњу тачку. За свако обавештење о пројекту које испуњава услове, Leantime шаље један HTTP POST захтев са JSON телом на ову URL адресу. Захтеви се шаљу у позадини и могу стићи и после неколико минута; неуспели захтев се не понавља. Категорије и нивои по пројектима на картици Обавештења одређују која обавештења испуњавају услове, укључујући измене које сами направите. Искључивање обавештења имејлом не зауставља webhook. Webhook шаље само док је укључен и док је URL адреса подешена. Ваша URL адреса остаје сачувана док је webhook искључен — испразните URL адресу да бисте је уклонили." label.enable_webhook_notifications="Укључи webhook обавештења" label.webhook_url_hint="Само HTTPS. Оставите празно да бисте уклонили webhook." label.default_notification_types="Подразумеване врсте обавештења за нове кориснике" diff --git a/app/Language/sv-SE.ini b/app/Language/sv-SE.ini index 9fd19e1197..2ed105f29a 100644 --- a/app/Language/sv-SE.ini +++ b/app/Language/sv-SE.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Endast uppgifter som tilldelats dig, di label.notifications_muted="Tystad" label.notifications_muted_description="Inga aviseringar förutom direkta @omnämnanden" label.webhook_notifications="Personlig webhook" -label.webhook_notifications_description="Skicka dina aviseringar till din egen HTTPS-endpoint. För varje projektavisering du har rätt till skickar Leantime en HTTP POST-förfrågan med en JSON-body till den här URL:en. Förfrågningarna skickas i bakgrunden och kan ta flera minuter att komma fram; en förfrågan som misslyckas skickas inte igen. Dina inställningar på fliken Aviseringar (ta emot aviseringar, kategorier och nivåer per projekt) avgör vilka aviseringar som omfattas. Webhooken skickar endast när den är aktiverad och en URL är angiven. Din URL förblir sparad medan webhooken är inaktiverad — töm URL:en för att ta bort den." +label.webhook_notifications_description="Skicka dina aviseringar till din egen HTTPS-endpoint. För varje projektavisering du har rätt till skickar Leantime en HTTP POST-förfrågan med en JSON-body till den här URL:en. Förfrågningarna skickas i bakgrunden och kan ta flera minuter att komma fram; en förfrågan som misslyckas skickas inte igen. Kategorierna och nivåerna per projekt på fliken Aviseringar avgör vilka aviseringar som omfattas, även ändringar du gör själv. Att stänga av e-postaviseringar stoppar inte webhooken. Webhooken skickar endast när den är aktiverad och en URL är angiven. Din URL förblir sparad medan webhooken är inaktiverad — töm URL:en för att ta bort den." label.enable_webhook_notifications="Aktivera webhook-aviseringar" label.webhook_url_hint="Endast HTTPS. Lämna tomt för att ta bort webhooken." label.default_notification_types="Standardaviseringstyper för nya användare" diff --git a/app/Language/tr-TR.ini b/app/Language/tr-TR.ini index cbcf4fa14c..5a7eb75e61 100644 --- a/app/Language/tr-TR.ini +++ b/app/Language/tr-TR.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Yalnızca size atanan görevler, öğel label.notifications_muted="Sessizde" label.notifications_muted_description="Doğrudan @bahsetmeler dışında bildirim yok" label.webhook_notifications="Kişisel Webhook" -label.webhook_notifications_description="Bildirimlerinizi kendi HTTPS uç noktanıza gönderin. Alma hakkınız olan her proje bildirimi için Leantime bu URL'ye JSON gövdeli bir HTTP POST isteği gönderir. İstekler arka planda gönderilir ve ulaşması birkaç dakika sürebilir; başarısız olan bir istek yeniden denenmez. Hangi bildirimlerin gönderileceğini Bildirimler sekmesindeki ayarlarınız (bildirim alma, kategoriler ve proje bazındaki düzeyler) belirler. Webhook yalnızca etkinken ve bir URL ayarlanmışken gönderim yapar. Webhook devre dışıyken URL'niz kayıtlı kalır — kaldırmak için URL'yi temizleyin." +label.webhook_notifications_description="Bildirimlerinizi kendi HTTPS uç noktanıza gönderin. Alma hakkınız olan her proje bildirimi için Leantime bu URL'ye JSON gövdeli bir HTTP POST isteği gönderir. İstekler arka planda gönderilir ve ulaşması birkaç dakika sürebilir; başarısız olan bir istek yeniden denenmez. Hangi bildirimlerin gönderileceğini, kendi yaptığınız değişiklikler dahil, Bildirimler sekmesindeki kategoriler ve proje bazındaki düzeyler belirler. E-posta bildirimlerini kapatmak webhook'u durdurmaz. Webhook yalnızca etkinken ve bir URL ayarlanmışken gönderim yapar. Webhook devre dışıyken URL'niz kayıtlı kalır — kaldırmak için URL'yi temizleyin." label.enable_webhook_notifications="Webhook bildirimlerini etkinleştir" label.webhook_url_hint="Yalnızca HTTPS. Webhook'u kaldırmak için boş bırakın." label.default_notification_types="Yeni kullanıcılar için varsayılan bildirim türleri" diff --git a/app/Language/uk-UA.ini b/app/Language/uk-UA.ini index 764b2996d2..03edf1d452 100644 --- a/app/Language/uk-UA.ini +++ b/app/Language/uk-UA.ini @@ -846,7 +846,7 @@ label.project_assignment="Призначення проєкту" label.overview="Огляд" label.active="Активний" label.inactive="Неактивний" -label.receive_notifications="Отримувати сповіщення" +label.receive_notifications="Отримувати сповіщення електронною поштою" label.upload="Завантажити" label.ondate="на" label.label="Мітка" @@ -2620,7 +2620,7 @@ label.notifications_my_work_description="Лише призначені вам з label.notifications_muted="Приглушено" label.notifications_muted_description="Жодних сповіщень, крім прямих @згадок" label.webhook_notifications="Персональний вебхук" -label.webhook_notifications_description="Надсилайте свої сповіщення на власну HTTPS-адресу. Для кожного сповіщення проєкту, яке вам належить отримати, Leantime надсилає на цю URL-адресу один HTTP POST-запит із тілом у форматі JSON. Запити надсилаються у фоновому режимі, і їх доставка може тривати кілька хвилин; невдалий запит не повторюється. Які сповіщення надсилатимуться, визначають ваші налаштування на вкладці «Сповіщення» (отримання сповіщень, категорії та рівні для проєктів). Вебхук надсилає дані лише тоді, коли його ввімкнено й задано URL-адресу. Поки вебхук вимкнено, ваша URL-адреса залишається збереженою — очистіть її, щоб видалити." +label.webhook_notifications_description="Надсилайте свої сповіщення на власну HTTPS-адресу. Для кожного сповіщення проєкту, яке вам належить отримати, Leantime надсилає на цю URL-адресу один HTTP POST-запит із тілом у форматі JSON. Запити надсилаються у фоновому режимі, і їх доставка може тривати кілька хвилин; невдалий запит не повторюється. Які сповіщення надсилатимуться, визначають категорії та рівні для проєктів на вкладці «Сповіщення»; зміни, які ви вносите самі, теж надсилаються. Вимкнення сповіщень електронною поштою не зупиняє вебхук. Вебхук надсилає дані лише тоді, коли його ввімкнено й задано URL-адресу. Поки вебхук вимкнено, ваша URL-адреса залишається збереженою — очистіть її, щоб видалити." label.enable_webhook_notifications="Увімкнути сповіщення через вебхук" label.webhook_url_hint="Лише HTTPS. Залиште порожнім, щоб видалити вебхук." label.default_notification_types="Типи сповіщень за замовчуванням для нових користувачів" diff --git a/app/Language/vi-VN.ini b/app/Language/vi-VN.ini index 2e716814e4..eab5eb0c34 100644 --- a/app/Language/vi-VN.ini +++ b/app/Language/vi-VN.ini @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="Chỉ các công việc được giao c label.notifications_muted="Đã tắt tiếng" label.notifications_muted_description="Không có thông báo, trừ các lượt @nhắc đến trực tiếp" label.webhook_notifications="Webhook cá nhân" -label.webhook_notifications_description="Gửi thông báo đến endpoint HTTPS của riêng bạn. Với mỗi thông báo dự án mà bạn đủ điều kiện nhận, Leantime gửi một yêu cầu HTTP POST với nội dung JSON đến URL này. Các yêu cầu được gửi ở chế độ nền và có thể mất vài phút mới đến nơi; yêu cầu bị lỗi sẽ không được gửi lại. Các cài đặt của bạn trong tab Thông Báo (nhận thông báo, danh mục và mức theo dự án) quyết định thông báo nào đủ điều kiện. Webhook chỉ gửi khi được bật và đã đặt URL. URL của bạn vẫn được lưu khi webhook bị tắt — hãy xóa URL để gỡ bỏ nó." +label.webhook_notifications_description="Gửi thông báo đến endpoint HTTPS của riêng bạn. Với mỗi thông báo dự án mà bạn đủ điều kiện nhận, Leantime gửi một yêu cầu HTTP POST với nội dung JSON đến URL này. Các yêu cầu được gửi ở chế độ nền và có thể mất vài phút mới đến nơi; yêu cầu bị lỗi sẽ không được gửi lại. Danh mục và mức theo dự án trong tab Thông Báo quyết định thông báo nào đủ điều kiện, kể cả những thay đổi do chính bạn thực hiện. Tắt thông báo qua email không làm dừng webhook. Webhook chỉ gửi khi được bật và đã đặt URL. URL của bạn vẫn được lưu khi webhook bị tắt — hãy xóa URL để gỡ bỏ nó." label.enable_webhook_notifications="Bật thông báo qua webhook" label.webhook_url_hint="Chỉ HTTPS. Để trống để gỡ bỏ webhook." label.default_notification_types="Loại thông báo mặc định cho người dùng mới" diff --git a/app/Language/zh-CN.ini b/app/Language/zh-CN.ini index fbe41a1a62..e9dbb82edb 100644 --- a/app/Language/zh-CN.ini +++ b/app/Language/zh-CN.ini @@ -849,7 +849,7 @@ label.project_assignment="项目分配" label.overview="总览" label.active="有效" label.inactive="无效" -label.receive_notifications="接收通知" +label.receive_notifications="接收电子邮件通知" label.upload="上传" label.ondate="于" label.label="标签" @@ -2645,7 +2645,7 @@ label.notifications_my_work_description="仅限分配给你的任务、你的条 label.notifications_muted="已静音" label.notifications_muted_description="除直接 @提及外不接收任何通知" label.webhook_notifications="个人 Webhook" -label.webhook_notifications_description="将你的通知发送到你自己的 HTTPS 端点。对于你有资格接收的每条项目通知,Leantime 都会向此 URL 发送一个带 JSON 正文的 HTTP POST 请求。请求在后台发送,可能需要几分钟才能送达;失败的请求不会重试。你在通知选项卡中的设置(接收通知、类别和按项目的级别)决定哪些通知符合条件。仅当 Webhook 已启用且已设置 URL 时才会发送。禁用 Webhook 后 URL 仍会保留——清空 URL 即可将其删除。" +label.webhook_notifications_description="将你的通知发送到你自己的 HTTPS 端点。对于你有资格接收的每条项目通知,Leantime 都会向此 URL 发送一个带 JSON 正文的 HTTP POST 请求。请求在后台发送,可能需要几分钟才能送达;失败的请求不会重试。通知选项卡中的类别和按项目的级别决定哪些通知符合条件,你自己做的更改也会发送。关闭电子邮件通知不会停止 Webhook。仅当 Webhook 已启用且已设置 URL 时才会发送。禁用 Webhook 后 URL 仍会保留——清空 URL 即可将其删除。" label.enable_webhook_notifications="启用 Webhook 通知" label.webhook_url_hint="仅支持 HTTPS。留空即可删除 Webhook。" label.default_notification_types="新用户的默认通知类型" diff --git a/app/Language/zh-TW.ini b/app/Language/zh-TW.ini index 1c5fa2d036..44e0063237 100644 --- a/app/Language/zh-TW.ini +++ b/app/Language/zh-TW.ini @@ -849,7 +849,7 @@ label.project_assignment="專案分配" label.overview="總覽" label.active="有效" label.inactive="無效" -label.receive_notifications="接收通知" +label.receive_notifications="接收電子郵件通知" label.upload="上傳" label.ondate="開" label.label="標籤" @@ -2623,7 +2623,7 @@ label.notifications_my_work_description="僅限分配給您的任務、您的項 label.notifications_muted="已靜音" label.notifications_muted_description="除了直接 @提及外,不接收任何通知" label.webhook_notifications="個人 Webhook" -label.webhook_notifications_description="將您的通知傳送到您自己的 HTTPS 端點。對於您有資格接收的每則專案通知,Leantime 都會向此 URL 傳送一個帶有 JSON 內容的 HTTP POST 請求。請求會在背景傳送,可能需要幾分鐘才會送達;失敗的請求不會重試。您在通知分頁中的設定(接收通知、類別和個別專案層級)決定哪些通知符合資格。Webhook 只有在啟用且已設定 URL 時才會傳送。停用 Webhook 時,您的 URL 仍會保留 — 清除 URL 即可將其移除。" +label.webhook_notifications_description="將您的通知傳送到您自己的 HTTPS 端點。對於您有資格接收的每則專案通知,Leantime 都會向此 URL 傳送一個帶有 JSON 內容的 HTTP POST 請求。請求會在背景傳送,可能需要幾分鐘才會送達;失敗的請求不會重試。通知分頁中的類別和個別專案層級決定哪些通知符合資格,您自己所做的變更也會傳送。關閉電子郵件通知不會停止 Webhook。Webhook 只有在啟用且已設定 URL 時才會傳送。停用 Webhook 時,您的 URL 仍會保留 — 清除 URL 即可將其移除。" label.enable_webhook_notifications="啟用 Webhook 通知" label.webhook_url_hint="僅限 HTTPS。留空即可移除 Webhook。" label.default_notification_types="新使用者的預設通知類型" diff --git a/tests/Unit/app/Domain/Notifications/Services/WebhookRevocationTest.php b/tests/Unit/app/Domain/Notifications/Services/WebhookRevocationTest.php index 95c6039b2d..578f4fdf56 100644 --- a/tests/Unit/app/Domain/Notifications/Services/WebhookRevocationTest.php +++ b/tests/Unit/app/Domain/Notifications/Services/WebhookRevocationTest.php @@ -29,9 +29,9 @@ * repositories for every row of the batch, and those repositories cache: the user repository * memoizes getUser(), and each SettingCache keeps an in-memory copy of every key it read. So * two rows for the same recipient run in one batch, and right after the first post another - * request changes something: the user switches the webhook off, rotates its URL, turns - * notifications off, is deactivated, deleted, demoted or taken off the project team. The - * second row must follow that change. + * request changes something: the user switches the webhook off, rotates its URL, is + * deactivated, deleted, demoted or taken off the project team. The second row must follow + * that change. Switching email notifications off is not such a change: it governs email only. * * Nor does the queue fold two rows into one: the same notification raised twice in one second * is posted twice. @@ -264,11 +264,12 @@ public function test_a_rotated_url_receives_the_next_row_and_the_old_one_does_no $this->assertSame([self::OLD_ENDPOINT, self::NEW_ENDPOINT], $this->postedUrls()); } - public function test_turning_notifications_off_stops_the_next_row(): void + public function test_turning_email_notifications_off_does_not_stop_the_webhook(): void { + // "Receive email notifications" governs email only; the webhook has its own switch. $this->deliverTwoQueuedNotifications(fn () => $this->webUsers->patchUser(self::RECIPIENT_ID, ['notifications' => 0])); - $this->assertSame([self::OLD_ENDPOINT], $this->postedUrls()); + $this->assertSame([self::OLD_ENDPOINT, self::OLD_ENDPOINT], $this->postedUrls()); } public function test_deactivating_the_account_stops_the_next_row(): void diff --git a/tests/Unit/app/Domain/Notifications/Services/WebhooksServiceTest.php b/tests/Unit/app/Domain/Notifications/Services/WebhooksServiceTest.php index a3786e257d..f0ddbd3d22 100644 --- a/tests/Unit/app/Domain/Notifications/Services/WebhooksServiceTest.php +++ b/tests/Unit/app/Domain/Notifications/Services/WebhooksServiceTest.php @@ -405,14 +405,14 @@ public function test_queued_payload_is_scalar_only_and_carries_no_endpoint_or_ra } } - public function test_only_opted_in_recipients_are_queued_and_only_active_notifiable_users_with_project_access_are_posted(): void + public function test_only_opted_in_recipients_are_queued_and_only_active_users_with_project_access_are_posted(): void { $this->addTeamMember(7); // eligible $this->addTeamMember(8); // webhook switched off $this->addTeamMember(9); $this->world->users[9]['status'] = 'i'; // deactivated $this->addTeamMember(10); - $this->world->users[10]['notifications'] = 0; // master notification switch off + $this->world->users[10]['notifications'] = 0; // email switched off: governs email only $this->world->teams['11:'.self::PROJECT_ID] = true; // deleted user, relation row left behind $this->addUser(12); // @mentioned, but not on this restricted project foreach ([7, 9, 10, 11, 12] as $userId) { @@ -425,7 +425,7 @@ public function test_only_opted_in_recipients_are_queued_and_only_active_notifia $this->runWebhookQueue(); - $this->assertSame(['https://1.1.1.1/hooks/user-7'], $this->postedUrls(), 'Deactivated, notifications off, deleted and outside the project: never posted'); + $this->assertSame(['https://1.1.1.1/hooks/user-7', 'https://1.1.1.1/hooks/user-10'], $this->postedUrls(), 'Deactivated, deleted and outside the project: never posted; email switched off still gets the webhook'); $this->assertSame([], $this->queuedRows(), 'A row with nothing left to send is still handled, never left in the queue'); } @@ -570,7 +570,6 @@ public static function changesAfterQueueingProvider(): array 'user deleted' => [function (object $world) { unset($world->users[7]); }], - 'notifications switched off' => [fn (object $world) => $world->users[7]['notifications'] = 0], 'removed from the restricted project' => [function (object $world) { unset($world->teams['7:5']); }], diff --git a/tests/Unit/app/Domain/Projects/Services/ProjectsServiceTest.php b/tests/Unit/app/Domain/Projects/Services/ProjectsServiceTest.php index 9db58aa6cb..f30dcd8b53 100644 --- a/tests/Unit/app/Domain/Projects/Services/ProjectsServiceTest.php +++ b/tests/Unit/app/Domain/Projects/Services/ProjectsServiceTest.php @@ -132,9 +132,10 @@ private function makeService( * @param array $usersWithProjectAccess Who ProjectRepository::isUserAssignedToProject() lets into project 5. * @param array|false> $userOverrides zp_user column overrides by user id; false = user deleted. * @param Webhooks|null $webhooks Replaces the real Webhooks service (built over a recording transport) when given. + * @param array $collaborators Collaborators on the to-do the notification is about. * @return array{emailRecipients: array|null, messengerCalls: int, pushRecipients: array|null, inAppNotifications: array|null} */ - private function runNotifyProjectUsers(array $settings, array $usersWithProjectAccess = [1, 2, 3, 4, 5], array $userOverrides = [], ?Webhooks $webhooks = null): array + private function runNotifyProjectUsers(array $settings, array $usersWithProjectAccess = [1, 2, 3, 4, 5], array $userOverrides = [], ?Webhooks $webhooks = null, array $collaborators = []): array { $seen = ['emailRecipients' => null, 'messengerCalls' => 0, 'pushRecipients' => null, 'inAppNotifications' => null]; $this->queueTable = []; @@ -227,7 +228,7 @@ private function runNotifyProjectUsers(array $settings, array $usersWithProjectA $notification->subject = 'To-Do updated'; $notification->message = 'Ada updated "Ship it"'; $notification->url = ['url' => 'https://leantime.example.com/tickets/showTicket/42', 'text' => 'Open']; - $notification->entity = ['id' => 42, 'headline' => 'Ship it', 'description' => '@Six please review']; + $notification->entity = ['id' => 42, 'headline' => 'Ship it', 'description' => '@Six please review', 'collaborators' => $collaborators]; $this->makeService( projectRepo: $projectRepo, @@ -286,17 +287,17 @@ public function test_notify_project_users_queues_personal_webhooks_for_filtered_ $this->assertNotNull($seen['inAppNotifications'], 'In-app notifications are still created'); $this->assertSame([], $this->webhookPosts, 'No webhook is sent while the request is running'); $queuedRows = array_values($this->queueTable); - $this->assertSame([Workers::WEBHOOKS->value, Workers::WEBHOOKS->value], array_column($queuedRows, 'channel'), 'One webhooks-channel row per recipient, nothing on DEFAULT'); + $this->assertSame(array_fill(0, 3, Workers::WEBHOOKS->value), array_column($queuedRows, 'channel'), 'One webhooks-channel row per recipient, nothing on DEFAULT'); $this->assertSame( - [[2], [6]], + [[1], [2], [6]], array_map(fn (array $row) => unserialize($row['message'], ['allowed_classes' => false])['recipientIds'], $queuedRows), - 'Only filtered recipients who opted in (5 did not) are queued' + 'Only filtered recipients who opted in (5 did not) are queued, the author included' ); $this->runWebhookQueue(); $this->assertSame( - ['https://1.1.1.1/hooks/user-2', 'https://1.1.1.1/hooks/user-6'], + ['https://1.1.1.1/hooks/user-1', 'https://1.1.1.1/hooks/user-2', 'https://1.1.1.1/hooks/user-6'], $this->webhookPosts, 'Every queued recipient is delivered in one run' ); @@ -327,11 +328,76 @@ public static function bypassRecipientsWhoMayNotReceiveWebhooksProvider(): array return [ 'mentioned user who lost access to the restricted project' => [[1, 2, 3, 4, 5], []], 'mentioned user who was deactivated' => [[1, 2, 3, 4, 5, 6], [6 => ['status' => 'i']]], - 'mentioned user who switched notifications off' => [[1, 2, 3, 4, 5, 6], [6 => ['notifications' => 0]]], 'mentioned user who was deleted' => [[1, 2, 3, 4, 5, 6], [6 => false]], ]; } + /** + * "Receive email notifications" is about email. A user who moved their notifications to a + * webhook and switched email off still gets the webhook, whether they are on the team or + * reach the notification through a mention. + */ + public function test_notify_project_users_sends_personal_webhooks_to_users_who_switched_email_off(): void + { + $seen = $this->runNotifyProjectUsers( + $this->optedInWebhooks([2, 6]), + usersWithProjectAccess: [1, 2, 3, 4, 5, 6], + userOverrides: [2 => ['notifications' => 0], 6 => ['notifications' => 0]], + ); + $this->runWebhookQueue(); + + $this->assertNotContains(2, $seen['emailRecipients'], 'No email for a user who switched email off'); + $this->assertSame(['https://1.1.1.1/hooks/user-2', 'https://1.1.1.1/hooks/user-6'], $this->webhookPosts); + } + + /** + * The author's own changes reach their webhook (an integration keeping a full record), but + * never their email, and their own relevance and category settings still apply. + */ + public function test_notify_project_users_sends_the_authors_own_change_to_their_webhook_only(): void + { + $seen = $this->runNotifyProjectUsers($this->optedInWebhooks([1])); + $this->runWebhookQueue(); + + $this->assertNotContains(1, $seen['emailRecipients']); + $this->assertSame(['https://1.1.1.1/hooks/user-1'], $this->webhookPosts); + + $this->runNotifyProjectUsers($this->optedInWebhooks([1]) + ['usersettings.1.projectNotificationLevels' => json_encode([5 => 'muted'])]); + $this->runWebhookQueue(); + + $this->assertSame([], $this->webhookPosts, 'An author who muted the project gets nothing'); + } + + /** + * Collaborators bypass the filters, but an author who collaborates on the to-do is a candidate + * already: being a collaborator must not bring their own change back past their mute or + * category choice. Other collaborators keep the bypass. + * + * @dataProvider authorFilterSettingsProvider + */ + public function test_an_author_who_collaborates_on_the_to_do_still_gets_nothing_past_their_own_filters(array $authorSettings): void + { + $settings = $this->optedInWebhooks([1, 2]) + $authorSettings + [ + 'usersettings.2.projectNotificationLevels' => json_encode([5 => 'muted']), + ]; + + $this->runNotifyProjectUsers($settings, collaborators: [1, 2]); + $this->runWebhookQueue(); + + $this->assertSame(['https://1.1.1.1/hooks/user-2'], $this->webhookPosts, 'Collaborator 2 keeps the bypass; author 1 does not'); + } + + /** + * @return array}> + */ + public static function authorFilterSettingsProvider(): array + { + return [ + 'author muted the project' => [['usersettings.1.projectNotificationLevels' => json_encode([5 => 'muted'])]], + 'author switched the tasks category off' => [['usersettings.1.notificationEventTypes' => json_encode(['comments'])]], + ]; + } + public function test_notify_project_users_still_delivers_every_other_channel_when_webhooks_fail(): void { $webhooks = $this->make(Webhooks::class, [