Expand notifications settings.

This commit is contained in:
James Cole
2024-12-07 09:41:09 +01:00
parent 26948a058a
commit c06fb8daf6
6 changed files with 111 additions and 62 deletions

View File

@@ -65,38 +65,7 @@ class HomeController extends Controller
$email = $pref->data;
}
// admin notification settings:
$notifications = [];
foreach (config('notifications.notifications.owner') as $key => $info) {
if($info['enabled']) {
$notifications[$key] = app('fireflyconfig')->get(sprintf('notification_%s', $key), true)->data;
}
}
//
return view('admin.index', compact('title', 'mainTitleIcon', 'email', 'notifications'));
}
public function notifications(Request $request): RedirectResponse
{
foreach (config('notifications.notifications.owner') as $key => $info) {
$value = false;
if ($request->has(sprintf('notification_%s', $key))) {
$value = true;
}
app('fireflyconfig')->set(sprintf('notification_%s', $key), $value);
}
$url = (string)$request->get('slackUrl');
if ('' === $url) {
app('fireflyconfig')->delete('slack_webhook_url');
}
if (UrlValidator::isValidWebhookURL($url)) {
app('fireflyconfig')->set('slack_webhook_url', $url);
}
session()->flash('success', (string)trans('firefly.notification_settings_saved'));
return redirect(route('admin.index'));
return view('admin.index', compact('title', 'mainTitleIcon', 'email'));
}
/**
@@ -106,6 +75,7 @@ class HomeController extends Controller
*/
public function testMessage()
{
die('disabled.');
Log::channel('audit')->info('User sends test message.');
/** @var User $user */

View File

@@ -24,6 +24,8 @@ declare(strict_types=1);
namespace FireflyIII\Http\Controllers\Admin;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Http\Requests\NotificationRequest;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Log;
class NotificationController extends Controller
@@ -39,6 +41,27 @@ class NotificationController extends Controller
$discordUrl = app('fireflyconfig')->get('discord_webhook_url', '')->data;
$channels = config('notifications.channels');
return view('admin.notifications.index', compact('title', 'subTitle', 'mainTitleIcon', 'subTitleIcon', 'channels', 'slackUrl','discordUrl'));
// admin notification settings:
$notifications = [];
foreach (config('notifications.notifications.owner') as $key => $info) {
if($info['enabled']) {
$notifications[$key] = app('fireflyconfig')->get(sprintf('notification_%s', $key), true)->data;
}
}
return view('admin.notifications.index', compact('title', 'subTitle', 'mainTitleIcon', 'subTitleIcon', 'channels', 'slackUrl','discordUrl','notifications'));
}
public function postIndex(NotificationRequest $request): RedirectResponse {
var_dump($request->getAll());
exit;
// app('fireflyconfig')->set(sprintf('notification_%s', $key), $value);;
session()->flash('success', (string)trans('firefly.notification_settings_saved'));
return redirect(route('admin.index'));
}
}

View File

@@ -0,0 +1,70 @@
<?php
/*
* NotificationRequest.php
* Copyright (c) 2024 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\Http\Requests;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
class NotificationRequest extends FormRequest
{
use ChecksLogin;
use ConvertsDataTypes;
public function getAll(): array
{
$return = [];
foreach (config('notifications.notifications.owner') as $key => $info) {
$value = false;
if ($this->has(sprintf('notification_%s', $key))) {
$value = true;
}
$return[$key] = $value;
}
$return['discord_url'] = $this->convertString('discordUrl');
$return['slack_url'] = $this->convertString('slackUrl');
return $return;
// if (UrlValidator::isValidWebhookURL($url)) {
// app('fireflyconfig')->set('slack_webhook_url', $url);
// }
// }
//
//
// var_dump($this->all());
// exit;
// return [];
}
/**
* Rules for this request.
*/
public function rules(): array
{
// fixed
return [
//'password' => 'required',
];
}
}

View File

@@ -2481,7 +2481,8 @@ return [
'admin_maintanance_expl' => 'Some nifty buttons for Firefly III maintenance',
'admin_maintenance_clear_cache' => 'Clear cache',
'owner_notifications' => 'Admin notifications',
'owner_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. It will be sent over ALL configured channels. Some channels are configured in your environment variables, others can be set in your <a href="#">notifications settings</a>.',
'owner_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. It will be sent over ALL configured channels. Some channels are configured in your environment variables, others can be set here.',
'channel_settings' => 'Settings for notification channels',
'settings_notifications' => 'Settings for notifications',
'title_owner_notifications' => 'Owner notifications',
'owner_notification_check_user_new_reg' => 'User gets post-registration welcome message',

View File

@@ -17,7 +17,7 @@
</li>
<li><a href="{{ route('admin.links.index') }}">{{ 'journal_link_configuration'|_ }}</a></li>
<li><a href="{{ route('admin.update-check') }}">{{ 'update_check_title'|_ }}</a></li>
<li><a href="{{ route('admin.notifications') }}">{{ 'settings_notifications'|_ }}</a></li>
<li><a href="{{ route('admin.notification.index') }}">{{ 'settings_notifications'|_ }}</a></li>
</ul>
</div>
</div>
@@ -31,32 +31,6 @@
</ul>
</div>
</div>
<form action="{{ route('admin.notifications') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="box box-default">
<div class="box-header with-border">
<h3 class="box-title">{{ 'owner_notifications'|_ }}</h3>
</div>
<div class="box-body">
<p>
{{ 'owner_notifications_expl'|_ }}
</p>
{% for notification, value in notifications %}
<div class="checkbox">
<label>
<input value="1" {% if true == value %}checked{% endif %} type="checkbox" name="notification_{{ notification }}"> {{ trans('firefly.owner_notification_check_'~notification) }}
</label>
</div>
{% endfor %}
{# {{ ExpandedForm.text('slackUrl', slackUrl, {'label' : 'slack_url_label'|_}) }} #}
</div>
<div class="box-footer">
<button type="submit" class="btn btn-success">
<span class="fa fa-check-circle"></span> {{ ('save_notification_settings')|_ }}
</button>
</div>
</div>
</form>
</div>
<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
<div class="box box-default">

View File

@@ -4,7 +4,7 @@
{{ Breadcrumbs.render }}
{% endblock %}
{% block content %}
<div class="row" xmlns="http://www.w3.org/1999/html">
<div class="row">
<div class="col-lg-6 col-md-12 col-sm-12 col-xs-12">
<form action="{{ route('admin.notification.post') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
@@ -13,6 +13,17 @@
<h3 class="box-title">{{ 'notification_settings'|_ }}</h3>
</div>
<div class="box-body">
<p>
{{ trans('firefly.owner_notifications_expl') }}
</p>
{% for notification, value in notifications %}
<div class="checkbox">
<label>
<input value="1" {% if true == value %}checked{% endif %} type="checkbox" name="notification_{{ notification }}"> {{ trans('firefly.owner_notification_check_'~notification) }}
</label>
</div>
{% endfor %}
<p style="margin-top:2em;">{{ 'channel_settings'|_ }}</p>
{{ ExpandedForm.text('slackUrl', slackUrl, {'label' : 'slack_url_label'|_}) }}
{{ ExpandedForm.text('discordUrl', discordUrl, {'label' : 'discord_url_label'|_}) }}
</div>