Add config for ntfy

This commit is contained in:
James Cole
2024-12-09 06:27:37 +01:00
parent c841fa3620
commit 94085ee940
13 changed files with 396 additions and 137 deletions

View File

@@ -178,6 +178,17 @@ MANDRILL_SECRET=
SPARKPOST_SECRET= SPARKPOST_SECRET=
MAILERSEND_API_KEY= MAILERSEND_API_KEY=
#
# Ntfy notification settings.
# defaults to "https://ntfy.sh", but needs a topic or it won't work.
# authentication is recommended but not required.
#
NTFY_SERVER=
NTFY_TOPIC=
NTFY_AUTH_ENABLED=false
NTFY_AUTH_USERNAME=
NTFY_AUTH_PASSWORD=
# Firefly III can send you the following messages. # Firefly III can send you the following messages.
SEND_ERROR_MESSAGE=true SEND_ERROR_MESSAGE=true

View File

@@ -27,11 +27,11 @@ use FireflyIII\Events\Admin\InvitationCreated;
use FireflyIII\Events\AdminRequestedTestMessage; use FireflyIII\Events\AdminRequestedTestMessage;
use FireflyIII\Events\NewVersionAvailable; use FireflyIII\Events\NewVersionAvailable;
use FireflyIII\Events\Test\TestNotificationChannel; use FireflyIII\Events\Test\TestNotificationChannel;
use FireflyIII\Notifications\Admin\TestNotification;
use FireflyIII\Notifications\Admin\UserInvitation; use FireflyIII\Notifications\Admin\UserInvitation;
use FireflyIII\Notifications\Admin\VersionCheckResult; use FireflyIII\Notifications\Admin\VersionCheckResult;
use FireflyIII\Notifications\Test\TestNotificationDiscord; use FireflyIII\Notifications\Test\TestNotificationDiscord;
use FireflyIII\Notifications\Test\TestNotificationEmail; use FireflyIII\Notifications\Test\TestNotificationEmail;
use FireflyIII\Notifications\Test\TestNotificationNtfy;
use FireflyIII\Notifications\Test\TestNotificationSlack; use FireflyIII\Notifications\Test\TestNotificationSlack;
use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
@@ -131,8 +131,8 @@ class AdminEventHandler
case 'slack': case 'slack':
$class = TestNotificationSlack::class; $class = TestNotificationSlack::class;
break; break;
case 'discord': case 'ntfy':
$class = TestNotificationDiscord::class; $class = TestNotificationNtfy::class;
break; break;
default: default:
app('log')->error(sprintf('Unknown channel "%s" in sendTestNotification method.', $event->channel)); app('log')->error(sprintf('Unknown channel "%s" in sendTestNotification method.', $event->channel));

View File

@@ -42,6 +42,8 @@ class NotificationController extends Controller
$subTitleIcon = 'envelope-o'; $subTitleIcon = 'envelope-o';
$slackUrl = app('fireflyconfig')->get('slack_webhook_url', '')->data; $slackUrl = app('fireflyconfig')->get('slack_webhook_url', '')->data;
$channels = config('notifications.channels'); $channels = config('notifications.channels');
$forcedAvailability = [];
// admin notification settings: // admin notification settings:
@@ -52,8 +54,18 @@ class NotificationController extends Controller
} }
} }
// loop all channels
foreach ($channels as $channel => $info) {
$forcedAvailability[$channel] = true;
}
return view('admin.notifications.index', compact('title', 'subTitle', 'mainTitleIcon', 'subTitleIcon', 'channels', 'slackUrl', 'notifications')); // validate presence of of Ntfy settings.
if('' === (string)config('ntfy-notification-channel.topic')) {
Log::warning('No topic name for Ntfy, channel is disabled.');
$forcedAvailability['ntfy'] = false;
}
return view('admin.notifications.index', compact('title', 'subTitle', 'forcedAvailability', 'mainTitleIcon', 'subTitleIcon', 'channels', 'slackUrl', 'notifications'));
} }
public function postIndex(NotificationRequest $request): RedirectResponse public function postIndex(NotificationRequest $request): RedirectResponse
@@ -89,6 +101,7 @@ class NotificationController extends Controller
break; break;
case 'email': case 'email':
case 'slack': case 'slack':
case 'ntfy':
/** @var User $user */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
app('log')->debug(sprintf('Now in testNotification("%s") controller.', $channel)); app('log')->debug(sprintf('Now in testNotification("%s") controller.', $channel));

View File

@@ -1,114 +0,0 @@
<?php
/*
* TestNotification.php
* Copyright (c) 2022 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Notifications\Admin;
use FireflyIII\Support\Notifications\UrlValidator;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Messages\SlackMessage;
use Illuminate\Notifications\Notification;
/**
* Class TestNotification
*/
class TestNotification extends Notification
{
use Queueable;
private string $address;
/**
* Create a new notification instance.
*/
public function __construct(string $address)
{
$this->address = $address;
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*
* @return array
*/
public function toArray($notifiable)
{
return [
];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*
* @return MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage())
->markdown('emails.admin-test', ['email' => $this->address])
->subject((string)trans('email.admin_test_subject'))
;
}
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*
* @return SlackMessage
*/
public function toSlack($notifiable)
{
return (new SlackMessage())->content((string)trans('email.admin_test_subject'));
}
/**
* Get the notification's delivery channels.
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*
* @param mixed $notifiable
*
* @return array
*/
public function via($notifiable)
{
$slackUrl = app('fireflyconfig')->get('slack_webhook_url', '')->data;
if (UrlValidator::isValidWebhookURL($slackUrl)) {
return ['mail', 'slack'];
}
return ['mail'];
}
}

View File

@@ -28,11 +28,15 @@ use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Messages\SlackMessage;
use Illuminate\Notifications\Notification; use Illuminate\Notifications\Notification;
use Ntfy\Message;
use Wijourdil\NtfyNotificationChannel\Channels\NtfyChannel;
//use Illuminate\Notifications\Slack\SlackMessage;
/** /**
* Class TestNotification * Class TestNotification
*/ */
class TestNotificationDiscord extends Notification class TestNotificationNtfy extends Notification
{ {
use Queueable; use Queueable;
@@ -61,6 +65,18 @@ class TestNotificationDiscord extends Notification
]; ];
} }
public function toNtfy(mixed $notifiable): Message
{
$message = new Message();
$message->topic(config('ntfy-notification-channel.topic'));
$message->title((string)trans('email.admin_test_subject'));
$message->body((string)trans('email.admin_test_message', ['channel' => 'ntfy']));
$message->tags(['white_check_mark', 'ok_hand']);
return $message;
}
/** /**
* Get the mail representation of the notification. * Get the mail representation of the notification.
* *
@@ -83,13 +99,6 @@ class TestNotificationDiscord extends Notification
* *
*/ */
public function toSlack($notifiable) { public function toSlack($notifiable) {
// since it's an admin notificaiton, grab the URL from fireflyconfig
$url = app('fireflyconfig')->get('discord_webhook_url', '')->data;
return (new SlackMessage())
->content((string)trans('email.admin_test_subject'))
->to($url);
} }
/** /**
@@ -103,6 +112,6 @@ class TestNotificationDiscord extends Notification
*/ */
public function via($notifiable) public function via($notifiable)
{ {
return ['slack']; return [NtfyChannel::class];
} }
} }

View File

@@ -50,7 +50,6 @@ use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\UserGroup; use FireflyIII\Models\UserGroup;
use FireflyIII\Models\UserRole; use FireflyIII\Models\UserRole;
use FireflyIII\Models\Webhook; use FireflyIII\Models\Webhook;
use FireflyIII\Notifications\Admin\TestNotification;
use FireflyIII\Notifications\Admin\UserInvitation; use FireflyIII\Notifications\Admin\UserInvitation;
use FireflyIII\Notifications\Admin\UserRegistration; use FireflyIII\Notifications\Admin\UserRegistration;
use FireflyIII\Notifications\Admin\VersionCheckResult; use FireflyIII\Notifications\Admin\VersionCheckResult;

View File

@@ -110,7 +110,8 @@
"spatie/period": "^2.4", "spatie/period": "^2.4",
"symfony/expression-language": "^7.0", "symfony/expression-language": "^7.0",
"symfony/http-client": "^7.1", "symfony/http-client": "^7.1",
"symfony/mailgun-mailer": "^7.1" "symfony/mailgun-mailer": "^7.1",
"wijourdil/ntfy-notification-channel": "^3.0"
}, },
"require-dev": { "require-dev": {
"barryvdh/laravel-debugbar": "^3.9", "barryvdh/laravel-debugbar": "^3.9",

328
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "f813653aac7be9e344fb4ca91513df61", "content-hash": "a2800d2f481f640d8cd058b3b31e8962",
"packages": [ "packages": [
{ {
"name": "bacon/bacon-qr-code", "name": "bacon/bacon-qr-code",
@@ -7033,6 +7033,66 @@
], ],
"time": "2024-06-12T15:01:18+00:00" "time": "2024-06-12T15:01:18+00:00"
}, },
{
"name": "spatie/laravel-package-tools",
"version": "1.16.6",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-package-tools.git",
"reference": "1f26942dc1e5c49eacfced34fdbc29ed234bd7b3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/1f26942dc1e5c49eacfced34fdbc29ed234bd7b3",
"reference": "1f26942dc1e5c49eacfced34fdbc29ed234bd7b3",
"shasum": ""
},
"require": {
"illuminate/contracts": "^9.28|^10.0|^11.0",
"php": "^8.0"
},
"require-dev": {
"mockery/mockery": "^1.5",
"orchestra/testbench": "^7.7|^8.0",
"pestphp/pest": "^1.22",
"phpunit/phpunit": "^9.5.24",
"spatie/pest-plugin-test-time": "^1.1"
},
"type": "library",
"autoload": {
"psr-4": {
"Spatie\\LaravelPackageTools\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Freek Van der Herten",
"email": "freek@spatie.be",
"role": "Developer"
}
],
"description": "Tools for creating Laravel packages",
"homepage": "https://github.com/spatie/laravel-package-tools",
"keywords": [
"laravel-package-tools",
"spatie"
],
"support": {
"issues": "https://github.com/spatie/laravel-package-tools/issues",
"source": "https://github.com/spatie/laravel-package-tools/tree/1.16.6"
},
"funding": [
{
"url": "https://github.com/spatie",
"type": "github"
}
],
"time": "2024-11-18T15:02:02+00:00"
},
{ {
"name": "spatie/period", "name": "spatie/period",
"version": "2.4.0", "version": "2.4.0",
@@ -10093,6 +10153,145 @@
], ],
"time": "2024-09-25T14:20:29+00:00" "time": "2024-09-25T14:20:29+00:00"
}, },
{
"name": "thecodingmachine/safe",
"version": "v2.5.0",
"source": {
"type": "git",
"url": "https://github.com/thecodingmachine/safe.git",
"reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0",
"reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0",
"shasum": ""
},
"require": {
"php": "^8.0"
},
"require-dev": {
"phpstan/phpstan": "^1.5",
"phpunit/phpunit": "^9.5",
"squizlabs/php_codesniffer": "^3.2",
"thecodingmachine/phpstan-strict-rules": "^1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2.x-dev"
}
},
"autoload": {
"files": [
"deprecated/apc.php",
"deprecated/array.php",
"deprecated/datetime.php",
"deprecated/libevent.php",
"deprecated/misc.php",
"deprecated/password.php",
"deprecated/mssql.php",
"deprecated/stats.php",
"deprecated/strings.php",
"lib/special_cases.php",
"deprecated/mysqli.php",
"generated/apache.php",
"generated/apcu.php",
"generated/array.php",
"generated/bzip2.php",
"generated/calendar.php",
"generated/classobj.php",
"generated/com.php",
"generated/cubrid.php",
"generated/curl.php",
"generated/datetime.php",
"generated/dir.php",
"generated/eio.php",
"generated/errorfunc.php",
"generated/exec.php",
"generated/fileinfo.php",
"generated/filesystem.php",
"generated/filter.php",
"generated/fpm.php",
"generated/ftp.php",
"generated/funchand.php",
"generated/gettext.php",
"generated/gmp.php",
"generated/gnupg.php",
"generated/hash.php",
"generated/ibase.php",
"generated/ibmDb2.php",
"generated/iconv.php",
"generated/image.php",
"generated/imap.php",
"generated/info.php",
"generated/inotify.php",
"generated/json.php",
"generated/ldap.php",
"generated/libxml.php",
"generated/lzf.php",
"generated/mailparse.php",
"generated/mbstring.php",
"generated/misc.php",
"generated/mysql.php",
"generated/network.php",
"generated/oci8.php",
"generated/opcache.php",
"generated/openssl.php",
"generated/outcontrol.php",
"generated/pcntl.php",
"generated/pcre.php",
"generated/pgsql.php",
"generated/posix.php",
"generated/ps.php",
"generated/pspell.php",
"generated/readline.php",
"generated/rpminfo.php",
"generated/rrd.php",
"generated/sem.php",
"generated/session.php",
"generated/shmop.php",
"generated/sockets.php",
"generated/sodium.php",
"generated/solr.php",
"generated/spl.php",
"generated/sqlsrv.php",
"generated/ssdeep.php",
"generated/ssh2.php",
"generated/stream.php",
"generated/strings.php",
"generated/swoole.php",
"generated/uodbc.php",
"generated/uopz.php",
"generated/url.php",
"generated/var.php",
"generated/xdiff.php",
"generated/xml.php",
"generated/xmlrpc.php",
"generated/yaml.php",
"generated/yaz.php",
"generated/zip.php",
"generated/zlib.php"
],
"classmap": [
"lib/DateTime.php",
"lib/DateTimeImmutable.php",
"lib/Exceptions/",
"deprecated/Exceptions/",
"generated/Exceptions/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "PHP core functions that throw exceptions instead of returning FALSE on error",
"support": {
"issues": "https://github.com/thecodingmachine/safe/issues",
"source": "https://github.com/thecodingmachine/safe/tree/v2.5.0"
},
"time": "2023-04-05T11:54:14+00:00"
},
{ {
"name": "tijsverkoyen/css-to-inline-styles", "name": "tijsverkoyen/css-to-inline-styles",
"version": "v2.2.7", "version": "v2.2.7",
@@ -10225,6 +10424,58 @@
], ],
"time": "2024-11-17T15:59:19+00:00" "time": "2024-11-17T15:59:19+00:00"
}, },
{
"name": "verifiedjoseph/ntfy-php-library",
"version": "v4.6.2",
"source": {
"type": "git",
"url": "https://github.com/VerifiedJoseph/ntfy-php-library.git",
"reference": "0e5c22be5e1633534e41a5835a8975bec5ff4cef"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/VerifiedJoseph/ntfy-php-library/zipball/0e5c22be5e1633534e41a5835a8975bec5ff4cef",
"reference": "0e5c22be5e1633534e41a5835a8975bec5ff4cef",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"guzzlehttp/guzzle": "^7.4",
"php": "^8.1"
},
"require-dev": {
"phpstan/phpstan": "^1.0",
"phpunit/phpunit": "^10.5",
"squizlabs/php_codesniffer": "^3.7"
},
"type": "library",
"autoload": {
"psr-4": {
"Ntfy\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "VerifiedJoseph",
"homepage": "https://github.com/VerifiedJoseph"
}
],
"description": "PHP library for interacting with a Ntfy server",
"homepage": "https://github.com/VerifiedJoseph/ntfy-php-library",
"keywords": [
"Ntfy"
],
"support": {
"issues": "https://github.com/VerifiedJoseph/ntfy-php-library/issues",
"source": "https://github.com/VerifiedJoseph/ntfy-php-library/tree/v4.6.2"
},
"time": "2024-08-01T12:43:09+00:00"
},
{ {
"name": "vlucas/phpdotenv", "name": "vlucas/phpdotenv",
"version": "v5.6.1", "version": "v5.6.1",
@@ -10440,6 +10691,81 @@
"source": "https://github.com/webmozarts/assert/tree/1.11.0" "source": "https://github.com/webmozarts/assert/tree/1.11.0"
}, },
"time": "2022-06-03T18:03:27+00:00" "time": "2022-06-03T18:03:27+00:00"
},
{
"name": "wijourdil/ntfy-notification-channel",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/wijourdil/ntfy-notification-channel.git",
"reference": "508ad1f0e1852b0bed966e9ebbf6f760ca2bac7b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/wijourdil/ntfy-notification-channel/zipball/508ad1f0e1852b0bed966e9ebbf6f760ca2bac7b",
"reference": "508ad1f0e1852b0bed966e9ebbf6f760ca2bac7b",
"shasum": ""
},
"require": {
"illuminate/contracts": "^11.0",
"php": "^8.2",
"spatie/laravel-package-tools": "^1.13.0",
"thecodingmachine/safe": "^2.4",
"verifiedjoseph/ntfy-php-library": "^4.0",
"webmozart/assert": "^1.11"
},
"require-dev": {
"larastan/larastan": "^2.0.1",
"laravel/pint": "^1.0",
"nunomaduro/collision": "^8.1",
"orchestra/testbench": "^9.0",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-phpunit": "^1.0",
"phpstan/phpstan-webmozart-assert": "^1.2",
"phpunit/phpunit": "^10.1",
"thecodingmachine/phpstan-safe-rule": "^1.2"
},
"type": "library",
"extra": {
"laravel": {
"aliases": {
"NtfyNotificationChannel": "Wijourdil\\NtfyNotificationChannel\\Facades\\NtfyNotificationChannel"
},
"providers": [
"Wijourdil\\NtfyNotificationChannel\\NtfyNotificationChannelServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Wijourdil\\NtfyNotificationChannel\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Wilfried Jourdil",
"email": "wijourdil@protonmail.com",
"role": "Developer"
}
],
"description": "ntfy.sh Notification Channel for Laravel",
"homepage": "https://github.com/wijourdil/ntfy-notification-channel",
"keywords": [
"laravel",
"notification",
"ntfy-notification-channel",
"ntfy.sh",
"wijourdil"
],
"support": {
"issues": "https://github.com/wijourdil/ntfy-notification-channel/issues",
"source": "https://github.com/wijourdil/ntfy-notification-channel/tree/3.0.0"
},
"time": "2024-04-17T12:37:09+00:00"
} }
], ],
"packages-dev": [ "packages-dev": [

View File

@@ -24,7 +24,7 @@ return [
'channels' => [ 'channels' => [
'email' => ['enabled' => true, 'ui_configurable' => 0,], 'email' => ['enabled' => true, 'ui_configurable' => 0,],
'slack' => ['enabled' => true, 'ui_configurable' => 1,], 'slack' => ['enabled' => true, 'ui_configurable' => 1,],
'nfty' => ['enabled' => false, 'ui_configurable' => 0,], 'ntfy' => ['enabled' => true, 'ui_configurable' => 0,],
'pushover' => ['enabled' => false, 'ui_configurable' => 0,], 'pushover' => ['enabled' => false, 'ui_configurable' => 0,],
'gotify' => ['enabled' => false, 'ui_configurable' => 0,], 'gotify' => ['enabled' => false, 'ui_configurable' => 0,],
'pushbullet' => ['enabled' => false, 'ui_configurable' => 0,], 'pushbullet' => ['enabled' => false, 'ui_configurable' => 0,],

View File

@@ -0,0 +1,14 @@
<?php
// config for Wijourdil/NtfyNotificationChannel
return [
'server' => env('NTFY_SERVER', 'https://ntfy.sh'),
'topic' => env('NTFY_TOPIC', ''),
'authentication' => [
'enabled' => (bool) env('NTFY_AUTH_ENABLED', false),
'username' => env('NTFY_AUTH_USERNAME', ''),
'password' => env('NTFY_AUTH_PASSWORD', ''),
],
];

View File

@@ -34,6 +34,7 @@ return [
// admin test // admin test
'admin_test_subject' => 'A test message from your Firefly III installation', 'admin_test_subject' => 'A test message from your Firefly III installation',
'admin_test_body' => 'This is a test message from your Firefly III instance. It was sent to :email.', 'admin_test_body' => 'This is a test message from your Firefly III instance. It was sent to :email.',
'admin_test_message' => 'This is a test message from your Firefly III instance over channel ":channel".',
// Ignore this comment // Ignore this comment

View File

@@ -2500,8 +2500,7 @@ return [
'available_channels_expl' => 'These channels are available to send notifications over. To test your confiuration, use the buttons below. Please note that the buttons have no spam control.', 'available_channels_expl' => 'These channels are available to send notifications over. To test your confiuration, use the buttons below. Please note that the buttons have no spam control.',
'notification_channel_name_email' => 'Email', 'notification_channel_name_email' => 'Email',
'notification_channel_name_slack' => 'Slack', 'notification_channel_name_slack' => 'Slack',
'notification_channel_name_discord' => 'Discord', 'notification_channel_name_ntfy' => 'Ntfy.sh',
'notification_channel_name_nfty' => 'Nfty',
'notification_channel_name_pushover' => 'Pushover', 'notification_channel_name_pushover' => 'Pushover',
'notification_channel_name_gotify' => 'Gotify', 'notification_channel_name_gotify' => 'Gotify',
'notification_channel_name_pushbullet' => 'Pushbullet', 'notification_channel_name_pushbullet' => 'Pushbullet',
@@ -2509,7 +2508,7 @@ return [
'configure_channel_in_env' => 'needs environment variables', 'configure_channel_in_env' => 'needs environment variables',
'test_notification_channel_name_email' => 'Test email', 'test_notification_channel_name_email' => 'Test email',
'test_notification_channel_name_slack' => 'Test Slack', 'test_notification_channel_name_slack' => 'Test Slack',
'test_notification_channel_name_discord' => 'Test Discord', 'test_notification_channel_name_ntfy' => 'Test Ntfy.sh',
'split_transaction_title' => 'Description of the split transaction', 'split_transaction_title' => 'Description of the split transaction',
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.', 'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',

View File

@@ -48,11 +48,11 @@
<ul> <ul>
{% for name,info in channels %} {% for name,info in channels %}
<li> <li>
{% if info.enabled %} {% if true == info.enabled and true == forcedAvailability[name] %}
☑️ {{ trans('firefly.notification_channel_name_'~name) }} ☑️ {{ trans('firefly.notification_channel_name_'~name) }}
{% if 0 == info.ui_configurable %}({{ 'configure_channel_in_env'|_ }}) {% endif %} {% if 0 == info.ui_configurable %}({{ 'configure_channel_in_env'|_ }}) {% endif %}
{% endif %} {% endif %}
{% if not info.enabled %} {% if false == info.enabled or false == forcedAvailability[name] %}
⚠️ {{ trans('firefly.notification_channel_name_'~name) }} ({{ 'channel_not_available'|_ }}) ⚠️ {{ trans('firefly.notification_channel_name_'~name) }} ({{ 'channel_not_available'|_ }})
{% endif %} {% endif %}
</li> </li>
@@ -62,7 +62,7 @@
<div class="box-footer"> <div class="box-footer">
<div class="btn-group"> <div class="btn-group">
{% for name,info in channels %} {% for name,info in channels %}
{% if info.enabled %} {% if true == info.enabled and true == forcedAvailability[name] %}
<button type="submit" name="test_submit" value="{{ name }}" class="btn btn-default"> <button type="submit" name="test_submit" value="{{ name }}" class="btn btn-default">
{{ trans('firefly.test_notification_channel_name_'~name) }} {{ trans('firefly.test_notification_channel_name_'~name) }}
</button> </button>