Added support for Discord using Webhooks (#971)
* Added support for Discord using Webhooks * Bumped version * Fixed broken upgrade * Moved discord below Jabber * Fixed broken comment * Added missing translation * Updated version * Typo * Moved Discord under Jabber * Fixed icons * Moved Webhook and discord after Jabber Co-authored-by: Tim <TimZ99@users.noreply.github.com>pull/975/head
parent
fe9cdab437
commit
d0f5d18fc4
|
@ -5,7 +5,7 @@ PHP Server Monitor
|
||||||
:alt: Join the chat at https://gitter.im/erickrf/nlpnet
|
:alt: Join the chat at https://gitter.im/erickrf/nlpnet
|
||||||
:target: https://gitter.im/phpservermon/phpservermon
|
:target: https://gitter.im/phpservermon/phpservermon
|
||||||
|
|
||||||
Version 3.5.2
|
Version 3.6.0.beta2
|
||||||
|
|
||||||
PHP Server Monitor is a script that checks whether your websites and servers are up and running.
|
PHP Server Monitor is a script that checks whether your websites and servers are up and running.
|
||||||
It comes with a web based user interface where you can manage your services and websites,
|
It comes with a web based user interface where you can manage your services and websites,
|
||||||
|
@ -16,7 +16,7 @@ Features:
|
||||||
---------
|
---------
|
||||||
|
|
||||||
* Monitor services and websites (see below).
|
* Monitor services and websites (see below).
|
||||||
* Email, SMS, Pushover, Telegram and Jabber notifications.
|
* Email, SMS, Discord, Pushover, Telegram and Jabber notifications.
|
||||||
* View history graphs of uptime and latency.
|
* View history graphs of uptime and latency.
|
||||||
* User authentication with 2 levels (administrator and regular user).
|
* User authentication with 2 levels (administrator and regular user).
|
||||||
* Logs of connection errors, outgoing emails and text messages.
|
* Logs of connection errors, outgoing emails and text messages.
|
||||||
|
|
|
@ -51,9 +51,9 @@ copyright = u'2008-2017, Pepijn Over'
|
||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = '3.5'
|
version = '3.6'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '3.5.2'
|
release = '3.6.0.beta2'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
|
|
@ -89,6 +89,10 @@ The following people have contributed to the development of PHP Server Monitor:
|
||||||
|
|
||||||
* SMSAPI gateway
|
* SMSAPI gateway
|
||||||
|
|
||||||
|
* Daniel Krusky - https://github.com/dkrusky
|
||||||
|
|
||||||
|
* Discord webhook support
|
||||||
|
|
||||||
Translators
|
Translators
|
||||||
+++++++++++
|
+++++++++++
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
/**
|
/**
|
||||||
* Current PSM version
|
* Current PSM version
|
||||||
*/
|
*/
|
||||||
define('PSM_VERSION', '3.6.0.beta1');
|
define('PSM_VERSION', '3.6.0.beta2');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* URL to check for updates. Will not be checked if turned off on config page.
|
* URL to check for updates. Will not be checked if turned off on config page.
|
||||||
|
|
|
@ -50,9 +50,7 @@ $sm_lang = array(
|
||||||
'no' => 'No',
|
'no' => 'No',
|
||||||
'insert' => 'Insert',
|
'insert' => 'Insert',
|
||||||
'add_new' => 'Add new',
|
'add_new' => 'Add new',
|
||||||
'update_available' => 'A new version ({version}) is available. Click <a
|
'update_available' => 'A new version ({version}) is available. Click <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">here</a> to download the update.',
|
||||||
href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
|
|
||||||
rel="noopener">here</a> to download the update.',
|
|
||||||
'back_to_top' => 'Back to top',
|
'back_to_top' => 'Back to top',
|
||||||
'go_back' => 'Go back',
|
'go_back' => 'Go back',
|
||||||
'ok' => 'OK',
|
'ok' => 'OK',
|
||||||
|
@ -108,31 +106,25 @@ $sm_lang = array(
|
||||||
'level' => 'Level',
|
'level' => 'Level',
|
||||||
'level_10' => 'Administrator',
|
'level_10' => 'Administrator',
|
||||||
'level_20' => 'User',
|
'level_20' => 'User',
|
||||||
'level_description' => '<b>Administrators</b> have full access: they can manage servers, users and edit the
|
'level_description' => '<b>Administrators</b> have full access: they can manage servers, users and edit the global configuration.<br><b>Users</b> can only view and run the updater for the servers that have been assigned to them.',
|
||||||
global configuration.<br><b>Users</b> can only view and run the updater for the
|
|
||||||
servers that have been assigned to them.',
|
|
||||||
'mobile' => 'Mobile',
|
'mobile' => 'Mobile',
|
||||||
'email' => 'Email',
|
'email' => 'Email',
|
||||||
'pushover' => 'Pushover',
|
'pushover' => 'Pushover',
|
||||||
'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See <a
|
'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See <a href="https://pushover.net/" target="_blank">their website</a> for more info.',
|
||||||
href="https://pushover.net/" target="_blank">their website</a> for more info.',
|
|
||||||
'pushover_key' => 'Pushover Key',
|
'pushover_key' => 'Pushover Key',
|
||||||
'pushover_device' => 'Pushover Device',
|
'pushover_device' => 'Pushover Device',
|
||||||
'pushover_device_description' => 'Device name to send the message to. Leave empty to send it to all devices.',
|
'pushover_device_description' => 'Device name to send the message to. Leave empty to send it to all devices.',
|
||||||
|
'discord' => 'Discord',
|
||||||
|
'discord_label' => 'Discord',
|
||||||
|
'discord_description' => 'Put your <a href="https://discordjs.guide/popular-topics/webhooks.html" target="_blank">webhook</a> here.',
|
||||||
'telegram' => 'Telegram',
|
'telegram' => 'Telegram',
|
||||||
'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> is a chat app that
|
'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> is a chat app that makes it easy to get real-time notifications. Visit the <a href="http://docs.phpservermonitor.org/" target="_blank">documentation</a> for more info and an install guide.',
|
||||||
makes it easy to get real-time notifications. Visit the <a
|
|
||||||
href="http://docs.phpservermonitor.org/" target="_blank">documentation</a> for more
|
|
||||||
info and an install guide.',
|
|
||||||
'telegram_chat_id' => 'Telegram chat id',
|
'telegram_chat_id' => 'Telegram chat id',
|
||||||
'telegram_chat_id_description' => 'The message will be send to the corresponding chat.',
|
'telegram_chat_id_description' => 'The message will be send to the corresponding chat.',
|
||||||
'telegram_get_chat_id' => 'Click here to get your chat id',
|
'telegram_get_chat_id' => 'Click here to get your chat id',
|
||||||
'activate_telegram' => 'Activate Telegram notifications',
|
'activate_telegram' => 'Activate Telegram notifications',
|
||||||
'activate_telegram_description' => 'Allow Telegram notifications to be sent to the specified chat id. Without
|
'activate_telegram_description' => 'Allow Telegram notifications to be sent to the specified chat id. Without this permission, Telegram doesn\'t allow us to send notifications to you.',
|
||||||
this permission, Telegram doesn\'t allow us to send notifications to you.',
|
'telegram_bot_username_found' => 'The bot was found!<br><a href="%s" target="_blank" rel="noopener"><button class="btn btn-primary">Next step</button></a> <br>This will open a chat with the bot. Here you need to press start or type /start.',
|
||||||
'telegram_bot_username_found' => 'The bot was found!<br><a href="%s" target="_blank" rel="noopener"><button
|
|
||||||
class="btn btn-primary">Next step</button></a> <br>This will open a chat
|
|
||||||
with the bot. Here you need to press start or type /start.',
|
|
||||||
'telegram_bot_username_error_token' => '401 - Unauthorized. Please make sure that the API token is valid.',
|
'telegram_bot_username_error_token' => '401 - Unauthorized. Please make sure that the API token is valid.',
|
||||||
'telegram_bot_error' => 'An error has occurred while activating Telegram notification: %s',
|
'telegram_bot_error' => 'An error has occurred while activating Telegram notification: %s',
|
||||||
'jabber' => 'Jabber',
|
'jabber' => 'Jabber',
|
||||||
|
@ -153,8 +145,7 @@ $sm_lang = array(
|
||||||
'profile' => 'Profile',
|
'profile' => 'Profile',
|
||||||
'profile_updated' => 'Your profile has been updated.',
|
'profile_updated' => 'Your profile has been updated.',
|
||||||
'error_user_name_bad_length' => 'Usernames must be between 2 and 64 characters.',
|
'error_user_name_bad_length' => 'Usernames must be between 2 and 64 characters.',
|
||||||
'error_user_name_invalid' => 'The username may only contain alphabetic characters (a-z, A-Z), digits (0-9),
|
'error_user_name_invalid' => 'The username may only contain alphabetic characters (a-z, A-Z), digits (0-9), dots (.) and underscores (_).',
|
||||||
dots (.) and underscores (_).',
|
|
||||||
'error_user_name_exists' => 'The given username already exists in the database.',
|
'error_user_name_exists' => 'The given username already exists in the database.',
|
||||||
'error_user_email_bad_length' => 'Email addresses must be between 5 and 255 characters.',
|
'error_user_email_bad_length' => 'Email addresses must be between 5 and 255 characters.',
|
||||||
'error_user_email_invalid' => 'The email address is invalid.',
|
'error_user_email_invalid' => 'The email address is invalid.',
|
||||||
|
@ -170,6 +161,7 @@ $sm_lang = array(
|
||||||
'status' => 'Status',
|
'status' => 'Status',
|
||||||
'email' => 'Email',
|
'email' => 'Email',
|
||||||
'sms' => 'SMS',
|
'sms' => 'SMS',
|
||||||
|
'discord' => 'Discord',
|
||||||
'pushover' => 'Pushover',
|
'pushover' => 'Pushover',
|
||||||
'webhook' => 'Webhook',
|
'webhook' => 'Webhook',
|
||||||
'telegram' => 'Telegram',
|
'telegram' => 'Telegram',
|
||||||
|
@ -209,17 +201,13 @@ $sm_lang = array(
|
||||||
'type_service' => 'Service',
|
'type_service' => 'Service',
|
||||||
'type_ping' => 'Ping',
|
'type_ping' => 'Ping',
|
||||||
'pattern' => 'Search string/pattern',
|
'pattern' => 'Search string/pattern',
|
||||||
'pattern_description' => 'If this pattern is not found on the website, the server will be marked
|
'pattern_description' => 'If this pattern is not found on the website, the server will be marked online/offline. Regular expressions are allowed.',
|
||||||
online/offline. Regular expressions are allowed.',
|
|
||||||
'pattern_online' => 'Pattern indicates website is',
|
'pattern_online' => 'Pattern indicates website is',
|
||||||
'pattern_online_description' => 'Online: If this pattern was found on the website, the server will be marked
|
'pattern_online_description' => 'Online: If this pattern was found on the website, the server will be marked online. Offline: If this pattern was not found on the website, the server will be marked offline.',
|
||||||
online. Offline: If this pattern was not found on the website, the server
|
|
||||||
will be marked offline.',
|
|
||||||
'redirect_check' => 'Redirecting to another domain is',
|
'redirect_check' => 'Redirecting to another domain is',
|
||||||
'redirect_check_description' => 'Redirect to another domain is usually a bad sign.',
|
'redirect_check_description' => 'Redirect to another domain is usually a bad sign.',
|
||||||
'allow_http_status' => 'Allow HTTP status code',
|
'allow_http_status' => 'Allow HTTP status code',
|
||||||
'allow_http_status_description' => 'Mark website as online. HTTP Status codes lower then 400 are marked as
|
'allow_http_status_description' => 'Mark website as online. HTTP Status codes lower then 400 are marked as online by default. Seperate with |.',
|
||||||
online by default. Seperate with |.',
|
|
||||||
'header_name' => 'Header name',
|
'header_name' => 'Header name',
|
||||||
'header_value' => 'Header value',
|
'header_value' => 'Header value',
|
||||||
'header_name_description' => 'Case-sensitive.',
|
'header_name_description' => 'Case-sensitive.',
|
||||||
|
@ -237,6 +225,8 @@ $sm_lang = array(
|
||||||
'send_email' => 'Send Email',
|
'send_email' => 'Send Email',
|
||||||
'sms' => 'SMS',
|
'sms' => 'SMS',
|
||||||
'send_sms' => 'Send SMS',
|
'send_sms' => 'Send SMS',
|
||||||
|
'discord' => 'Discord',
|
||||||
|
'send_discord' => 'Send Discord notification',
|
||||||
'webhook' => 'Webhook',
|
'webhook' => 'Webhook',
|
||||||
'send_webhook' => 'Send Webhook notification',
|
'send_webhook' => 'Send Webhook notification',
|
||||||
'pushover' => 'Pushover',
|
'pushover' => 'Pushover',
|
||||||
|
@ -266,8 +256,7 @@ $sm_lang = array(
|
||||||
'warning_threshold' => 'Warning threshold',
|
'warning_threshold' => 'Warning threshold',
|
||||||
'warning_threshold_description' => 'Number of failed checks required before it is marked offline.',
|
'warning_threshold_description' => 'Number of failed checks required before it is marked offline.',
|
||||||
'ssl_cert_expiry_days' => 'SSL Certificate Validity',
|
'ssl_cert_expiry_days' => 'SSL Certificate Validity',
|
||||||
'ssl_cert_expiry_days_description' => 'The minimum remaining days the SSL certificate is still valid. Use 0 to
|
'ssl_cert_expiry_days_description' => 'The minimum remaining days the SSL certificate is still valid. Use 0 to disable check.',
|
||||||
disable check.',
|
|
||||||
'ssl_cert_expired' => 'SSL certificate expired since',
|
'ssl_cert_expired' => 'SSL certificate expired since',
|
||||||
'ssl_cert_expiring' => 'SSL certificate expiring:',
|
'ssl_cert_expiring' => 'SSL certificate expiring:',
|
||||||
'chart_last_week' => 'Last week',
|
'chart_last_week' => 'Last week',
|
||||||
|
@ -278,6 +267,7 @@ $sm_lang = array(
|
||||||
'chart_short_time_format' => '%H:%M',
|
'chart_short_time_format' => '%H:%M',
|
||||||
'warning_notifications_disabled_sms' => 'SMS notifications are disabled.',
|
'warning_notifications_disabled_sms' => 'SMS notifications are disabled.',
|
||||||
'warning_notifications_disabled_email' => 'Email notifications are disabled.',
|
'warning_notifications_disabled_email' => 'Email notifications are disabled.',
|
||||||
|
'warning_notifications_disabled_discord' => 'Discord notifications are disabled.',
|
||||||
'warning_notifications_disabled_webhook' => 'Webhook notifications are disabled.',
|
'warning_notifications_disabled_webhook' => 'Webhook notifications are disabled.',
|
||||||
'warning_notifications_disabled_pushover' => 'Pushover notifications are disabled.',
|
'warning_notifications_disabled_pushover' => 'Pushover notifications are disabled.',
|
||||||
'warning_notifications_disabled_telegram' => 'Telegram notifications are disabled.',
|
'warning_notifications_disabled_telegram' => 'Telegram notifications are disabled.',
|
||||||
|
@ -289,8 +279,7 @@ $sm_lang = array(
|
||||||
'error_server_ip_bad_website' => 'The website URL is not valid.',
|
'error_server_ip_bad_website' => 'The website URL is not valid.',
|
||||||
'error_server_type_invalid' => 'The selected server type is invalid.',
|
'error_server_type_invalid' => 'The selected server type is invalid.',
|
||||||
'error_server_warning_threshold_invalid' => 'The warning threshold must be a valid integer greater than 0.',
|
'error_server_warning_threshold_invalid' => 'The warning threshold must be a valid integer greater than 0.',
|
||||||
'error_server_ssl_cert_expiry_days' => 'The remaining days for SSL certificate validity must be a valid
|
'error_server_ssl_cert_expiry_days' => 'The remaining days for SSL certificate validity must be a valid integer greater than or equal to 0.',
|
||||||
integer greater than or equal to 0.',
|
|
||||||
),
|
),
|
||||||
'config' => array(
|
'config' => array(
|
||||||
'general' => 'General',
|
'general' => 'General',
|
||||||
|
@ -298,8 +287,7 @@ $sm_lang = array(
|
||||||
'language' => 'Language',
|
'language' => 'Language',
|
||||||
'show_update' => 'Check for updates?',
|
'show_update' => 'Check for updates?',
|
||||||
'password_encrypt_key' => 'The encryption key password',
|
'password_encrypt_key' => 'The encryption key password',
|
||||||
'password_encrypt_key_note' => 'This key is used to encrypt passwords that are stored on servers for access to
|
'password_encrypt_key_note' => 'This key is used to encrypt passwords that are stored on servers for access to websites. If the key will change the stored password is invalid!',
|
||||||
websites. If the key will change the stored password is invalid!',
|
|
||||||
'proxy' => 'Enable proxy',
|
'proxy' => 'Enable proxy',
|
||||||
'proxy_url' => 'Proxy URL',
|
'proxy_url' => 'Proxy URL',
|
||||||
'proxy_user' => 'Proxy username',
|
'proxy_user' => 'Proxy username',
|
||||||
|
@ -320,6 +308,8 @@ $sm_lang = array(
|
||||||
'sms_gateway_username' => 'Gateway username',
|
'sms_gateway_username' => 'Gateway username',
|
||||||
'sms_gateway_password' => 'Gateway password',
|
'sms_gateway_password' => 'Gateway password',
|
||||||
'sms_from' => 'Sender\'s phone number',
|
'sms_from' => 'Sender\'s phone number',
|
||||||
|
'discord_status' => 'Allow sending Discord messages',
|
||||||
|
'discord_description' => 'Discord is a service that makes it easy to get real-time notifications. See <a href="https://discord.com/" target="_blank">their website</a> for more info.',
|
||||||
'webhook_status' => 'Allow sending webhooks',
|
'webhook_status' => 'Allow sending webhooks',
|
||||||
'webhook_description' => 'Allow sending webhooks to services like slack. The message payload end endpoint are defined in the profile settings.',
|
'webhook_description' => 'Allow sending webhooks to services like slack. The message payload end endpoint are defined in the profile settings.',
|
||||||
'webhook_url' => 'Webhook Url',
|
'webhook_url' => 'Webhook Url',
|
||||||
|
@ -327,26 +317,16 @@ $sm_lang = array(
|
||||||
'webhook_json' => 'Webhook Json',
|
'webhook_json' => 'Webhook Json',
|
||||||
'webhook_json_description' => 'Customized Json, use #message as message variable.',
|
'webhook_json_description' => 'Customized Json, use #message as message variable.',
|
||||||
'pushover_status' => 'Allow sending Pushover messages',
|
'pushover_status' => 'Allow sending Pushover messages',
|
||||||
'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See <a
|
'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See <a href="https://pushover.net/" target="_blank">their website</a> for more info.',
|
||||||
href="https://pushover.net/" target="_blank">their website</a> for more info.',
|
|
||||||
'pushover_clone_app' => 'Click here to create your Pushover app',
|
'pushover_clone_app' => 'Click here to create your Pushover app',
|
||||||
'pushover_api_token' => 'Pushover App API Token',
|
'pushover_api_token' => 'Pushover App API Token',
|
||||||
'pushover_api_token_description' => 'Before you can use Pushover, you need to <a href="%1$s" target="_blank"
|
'pushover_api_token_description' => 'Before you can use Pushover, you need to <a href="%1$s" target="_blank" rel="noopener">register an App</a> at their website and enter the App API Token here.',
|
||||||
rel="noopener">register an App</a> at their website and enter the App API
|
|
||||||
Token here.',
|
|
||||||
'telegram_status' => 'Allow sending Telegram messages',
|
'telegram_status' => 'Allow sending Telegram messages',
|
||||||
'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> is a chat app that
|
'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> is a chat app that makes it easy to get real-time notifications. Visit the <a href="http://docs.phpservermonitor.org/" target="_blank">documentation</a> for more info and an install guide.',
|
||||||
makes it easy to get real-time notifications. Visit the <a
|
|
||||||
href="http://docs.phpservermonitor.org/" target="_blank">documentation</a> for more
|
|
||||||
info and an install guide.',
|
|
||||||
'telegram_api_token' => 'Telegram API Token',
|
'telegram_api_token' => 'Telegram API Token',
|
||||||
'telegram_api_token_description' => 'Before you can use Telegram, you need to get a API token. Visit the <a
|
'telegram_api_token_description' => 'Before you can use Telegram, you need to get a API token. Visit the <a href="http://docs.phpservermonitor.org/" target="_blank">documentation</a> for help.',
|
||||||
href="http://docs.phpservermonitor.org/"
|
|
||||||
target="_blank">documentation</a> for help.',
|
|
||||||
'jabber_status' => 'Allow sending Jabber (XMPP) messages',
|
'jabber_status' => 'Allow sending Jabber (XMPP) messages',
|
||||||
'jabber_description' => 'Visit the <a
|
'jabber_description' => 'Visit the <a href="http://docs.phpservermonitor.org/">documentation</a> for more info and an install guide.',
|
||||||
href="http://docs.phpservermonitor.org/">documentation</a> for more info and an
|
|
||||||
install guide.',
|
|
||||||
'jabber_host' => 'Host',
|
'jabber_host' => 'Host',
|
||||||
'jabber_host_description' => 'Host of your Jabber account provider. For Google Account use talk.google.com.',
|
'jabber_host_description' => 'Host of your Jabber account provider. For Google Account use talk.google.com.',
|
||||||
'jabber_port' => 'Port',
|
'jabber_port' => 'Port',
|
||||||
|
@ -359,26 +339,19 @@ $sm_lang = array(
|
||||||
'jabber_password_description' => 'Fill only to set or change.',
|
'jabber_password_description' => 'Fill only to set or change.',
|
||||||
'jabber_check' => 'Check your Jabber account if message was received.',
|
'jabber_check' => 'Check your Jabber account if message was received.',
|
||||||
'alert_type' => 'Select when you\'d like to be notified.',
|
'alert_type' => 'Select when you\'d like to be notified.',
|
||||||
'alert_type_description' => '<b>Status change:</b> You will receive a notification when a server has a change
|
'alert_type_description' => '<b>Status change:</b> You will receive a notification when a server has a change in status. So from online -> offline or offline -> online.<br><br><b>Offline:</b> You will receive a notification when a server goes offline for the *FIRST TIME ONLY*. For example, your cronjob is every 15 minutes and your server goes down at 1 am and stays down till 6 am. You will get 1 notification at 1 am and that\'s it.<br><br><b>Always:</b> You will receive a notification every time the script runs and a site is down, even if the site has been offline for hours.',
|
||||||
in status. So from online -> offline or offline -> online.<br><br><b>Offline:</b>
|
|
||||||
You will receive a notification when a server goes offline for the *FIRST TIME
|
|
||||||
ONLY*. For example, your cronjob is every 15 minutes and your server goes down at
|
|
||||||
1 am and stays down till 6 am. You will get 1 notification at 1 am and that\'s
|
|
||||||
it.<br><br><b>Always:</b> You will receive a notification every time the script
|
|
||||||
runs and a site is down, even if the site has been offline for hours.',
|
|
||||||
'alert_type_status' => 'Status change',
|
'alert_type_status' => 'Status change',
|
||||||
'alert_type_offline' => 'Offline',
|
'alert_type_offline' => 'Offline',
|
||||||
'alert_type_always' => 'Always',
|
'alert_type_always' => 'Always',
|
||||||
'combine_notifications' => 'Combine notifications',
|
'combine_notifications' => 'Combine notifications',
|
||||||
'combine_notifications_description' => 'Reduces the amount of notification by combining the notifications into
|
'combine_notifications_description' => 'Reduces the amount of notification by combining the notifications into 1 single notification. (This does not affect SMS notifications.)',
|
||||||
1 single notification. (This does not affect SMS notifications.)',
|
|
||||||
'alert_proxy' => 'Even if enabled, proxy is never used for services',
|
'alert_proxy' => 'Even if enabled, proxy is never used for services',
|
||||||
'alert_proxy_url' => 'Format: host:port',
|
'alert_proxy_url' => 'Format: host:port',
|
||||||
'log_status' => 'Log status',
|
'log_status' => 'Log status',
|
||||||
'log_status_description' => 'If log status is set to TRUE, the monitor will log the event whenever the
|
'log_status_description' => 'If log status is set to TRUE, the monitor will log the event whenever the notification settings are passed.',
|
||||||
notification settings are passed.',
|
|
||||||
'log_email' => 'Log emails sent by the script',
|
'log_email' => 'Log emails sent by the script',
|
||||||
'log_sms' => 'Log text messages sent by the script',
|
'log_sms' => 'Log text messages sent by the script',
|
||||||
|
'log_discord' => 'Log Discord messages sent by the script',
|
||||||
'log_pushover' => 'Log pushover messages sent by the script',
|
'log_pushover' => 'Log pushover messages sent by the script',
|
||||||
'log_webhook' => 'Log webhook messages sent by the script',
|
'log_webhook' => 'Log webhook messages sent by the script',
|
||||||
'log_telegram' => 'Log Telegram messages sent by the script',
|
'log_telegram' => 'Log Telegram messages sent by the script',
|
||||||
|
@ -386,12 +359,14 @@ $sm_lang = array(
|
||||||
'updated' => 'The configuration has been updated.',
|
'updated' => 'The configuration has been updated.',
|
||||||
'tab_email' => 'Email',
|
'tab_email' => 'Email',
|
||||||
'tab_sms' => 'SMS',
|
'tab_sms' => 'SMS',
|
||||||
|
'tab_discord' => 'Discord',
|
||||||
'tab_pushover' => 'Pushover',
|
'tab_pushover' => 'Pushover',
|
||||||
'tab_webhook' => 'Webhook',
|
'tab_webhook' => 'Webhook',
|
||||||
'tab_telegram' => 'Telegram',
|
'tab_telegram' => 'Telegram',
|
||||||
'tab_jabber' => 'Jabber',
|
'tab_jabber' => 'Jabber',
|
||||||
'settings_email' => 'Email settings',
|
'settings_email' => 'Email settings',
|
||||||
'settings_sms' => 'Text message settings',
|
'settings_sms' => 'Text message settings',
|
||||||
|
'settings_discord' => 'Discord settings',
|
||||||
'settings_pushover' => 'Pushover settings',
|
'settings_pushover' => 'Pushover settings',
|
||||||
'settings_webhook' => 'Webhook settings',
|
'settings_webhook' => 'Webhook settings',
|
||||||
'settings_telegram' => 'Telegram settings',
|
'settings_telegram' => 'Telegram settings',
|
||||||
|
@ -400,11 +375,12 @@ $sm_lang = array(
|
||||||
'settings_log' => 'Log settings',
|
'settings_log' => 'Log settings',
|
||||||
'settings_proxy' => 'Proxy settings',
|
'settings_proxy' => 'Proxy settings',
|
||||||
'auto_refresh' => 'Auto-refresh',
|
'auto_refresh' => 'Auto-refresh',
|
||||||
'auto_refresh_description' => 'Auto-refresh servers page.<br><span class="small">Time in seconds, if 0 the
|
'auto_refresh_description' => 'Auto-refresh servers page.<br><span class="small">Time in seconds, if 0 the page won\'t refresh.</span>',
|
||||||
page won\'t refresh.</span>',
|
|
||||||
'test' => 'Test',
|
'test' => 'Test',
|
||||||
'test_email' => 'An email will be sent to the address specified in your user profile.',
|
'test_email' => 'An email will be sent to the address specified in your user profile.',
|
||||||
'test_sms' => 'An SMS will be sent to the phone number specified in your user profile.',
|
'test_sms' => 'An SMS will be sent to the phone number specified in your user profile.',
|
||||||
|
'test_discord' => 'A Discord notification will be sent to the webhook specified in your user profile.',
|
||||||
|
'test_pushover' => 'A Pushover notification will be sent to the user key/device specified in your user profile.',
|
||||||
'test_pushover' => 'A Pushover notification will be sent to the user key/device specified in your user
|
'test_pushover' => 'A Pushover notification will be sent to the user key/device specified in your user
|
||||||
profile.',
|
profile.',
|
||||||
'test_webhook' => 'A webhook notification will be sent to the given url endpoint.',
|
'test_webhook' => 'A webhook notification will be sent to the given url endpoint.',
|
||||||
|
@ -418,28 +394,27 @@ $sm_lang = array(
|
||||||
'sms_sent' => 'SMS sent',
|
'sms_sent' => 'SMS sent',
|
||||||
'sms_error' => 'An error has occurred while sending the SMS: %s',
|
'sms_error' => 'An error has occurred while sending the SMS: %s',
|
||||||
'sms_error_nomobile' => 'Unable to send test SMS: no valid phone number found in your profile.',
|
'sms_error_nomobile' => 'Unable to send test SMS: no valid phone number found in your profile.',
|
||||||
|
'discord_sent' => 'Discord notification sent',
|
||||||
|
'discord_error' => 'An error has occurred while sending the Discord notification: %s',
|
||||||
|
'discord_error_nowebhook' => 'Unable to send test Discord notification: no valid Discord webhook found in your user profile.',
|
||||||
'webhook_sent' => 'Webhook notification sent',
|
'webhook_sent' => 'Webhook notification sent',
|
||||||
'webhook_error' => 'An error has occurred while sending the webhook notification: %s',
|
'webhook_error' => 'An error has occurred while sending the webhook notification: %s',
|
||||||
'webhook_error_nourl' => 'Unable to send test notification: no url found in user profile.',
|
'webhook_error_nourl' => 'Unable to send test notification: no url found in user profile.',
|
||||||
'webhook_error_nojson' => 'Unable to send test notification: no json found in user profile.',
|
'webhook_error_nojson' => 'Unable to send test notification: no json found in user profile.',
|
||||||
'pushover_sent' => 'Pushover notification sent',
|
'pushover_sent' => 'Pushover notification sent',
|
||||||
'pushover_error' => 'An error has occurred while sending the Pushover notification: %s',
|
'pushover_error' => 'An error has occurred while sending the Pushover notification: %s',
|
||||||
'pushover_error_noapp' => 'Unable to send test notification: no Pushover App API token found in the global
|
'pushover_error_noapp' => 'Unable to send test notification: no Pushover App API token found in the global configuration.',
|
||||||
configuration.',
|
|
||||||
'pushover_error_nokey' => 'Unable to send test notification: no Pushover key found in your profile.',
|
'pushover_error_nokey' => 'Unable to send test notification: no Pushover key found in your profile.',
|
||||||
'telegram_sent' => 'Telegram notification sent',
|
'telegram_sent' => 'Telegram notification sent',
|
||||||
'telegram_error' => 'An error has occurred while sending the Telegram notification: %s',
|
'telegram_error' => 'An error has occurred while sending the Telegram notification: %s',
|
||||||
'telegram_error_notoken' => 'Unable to send test notification: no Telegram API token found in the global
|
'telegram_error_notoken' => 'Unable to send test notification: no Telegram API token found in the global configuration.',
|
||||||
configuration.',
|
|
||||||
'telegram_error_noid' => 'Unable to send test notification: no chat id found in your profile.',
|
'telegram_error_noid' => 'Unable to send test notification: no chat id found in your profile.',
|
||||||
'jabber_sent' => 'Telegram notification sent',
|
'jabber_sent' => 'Telegram notification sent',
|
||||||
'jabber_error' => 'An error has occurred while sending the Telegram notification: %s',
|
'jabber_error' => 'An error has occurred while sending the Telegram notification: %s',
|
||||||
'jabber_error_noconfig' => 'Unable to send test notification: no Jabber account set in the global
|
'jabber_error_noconfig' => 'Unable to send test notification: no Jabber account set in the global configuration.',
|
||||||
configuration.',
|
|
||||||
'jabber_error_noaccount' => 'Unable to send test notification: no Jabber account found in your profile.',
|
'jabber_error_noaccount' => 'Unable to send test notification: no Jabber account found in your profile.',
|
||||||
'log_retention_period' => 'Log retention period',
|
'log_retention_period' => 'Log retention period',
|
||||||
'log_retention_period_description' => 'Number of days to keep logs of notifications and archives of server
|
'log_retention_period_description' => 'Number of days to keep logs of notifications and archives of server uptime. Enter 0 to disable log cleanup.',
|
||||||
uptime. Enter 0 to disable log cleanup.',
|
|
||||||
'log_retention_days' => 'days',
|
'log_retention_days' => 'days',
|
||||||
'user_agent' => 'User Agent',
|
'user_agent' => 'User Agent',
|
||||||
'user_agent_key_note' => 'Custom user agent used by monitor within communication with external services.',
|
'user_agent_key_note' => 'Custom user agent used by monitor within communication with external services.',
|
||||||
|
@ -447,23 +422,24 @@ $sm_lang = array(
|
||||||
'notifications' => array(
|
'notifications' => array(
|
||||||
'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, port=%PORT%. Error=%ERROR%',
|
'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, port=%PORT%. Error=%ERROR%',
|
||||||
'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN',
|
'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN',
|
||||||
|
'off_email_body' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
|
||||||
|
'off_discord_message' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
|
||||||
'off_email_body' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
|
'off_email_body' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
|
||||||
%PORT%<br>Error: %ERROR%<br>Date: %DATE%',
|
%PORT%<br>Error: %ERROR%<br>Date: %DATE%',
|
||||||
'off_webhook_title' => 'Server \'%LABEL%\' is DOWN',
|
'off_webhook_title' => 'Server \'%LABEL%\' is DOWN',
|
||||||
'off_webhook_message' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP:
|
'off_webhook_message' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP:
|
||||||
%IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
|
%IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
|
||||||
'off_pushover_title' => 'Server \'%LABEL%\' is DOWN',
|
'off_pushover_title' => 'Server \'%LABEL%\' is DOWN',
|
||||||
'off_pushover_message' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP:
|
'off_pushover_message' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
|
||||||
%IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
|
'off_telegram_message' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
|
||||||
'off_telegram_message' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP:
|
'off_jabber_message' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
|
||||||
%IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
|
|
||||||
'off_jabber_message' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP:
|
|
||||||
%IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
|
|
||||||
'on_sms' => 'Server \'%LABEL%\' is RUNNING: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
|
'on_sms' => 'Server \'%LABEL%\' is RUNNING: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
|
||||||
'on_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is RUNNING',
|
'on_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is RUNNING',
|
||||||
'on_email_body' => 'Server \'%LABEL%\' is running again, it was down for
|
'on_email_body' => 'Server \'%LABEL%\' is running again, it was down for
|
||||||
%LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
|
%LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
|
||||||
%DATE%',
|
%DATE%',
|
||||||
|
'on_discord_message' => 'Server \'%LABEL%\' is running again, it was down for:
|
||||||
|
%LAST_OFFLINE_DURATION%<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%',
|
||||||
'on_webhook_title' => 'Server \'%LABEL%\' is RUNNING',
|
'on_webhook_title' => 'Server \'%LABEL%\' is RUNNING',
|
||||||
'on_webhook_message' => 'Server \'%LABEL%\' is running again, it was down for
|
'on_webhook_message' => 'Server \'%LABEL%\' is running again, it was down for
|
||||||
%LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
|
%LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
|
||||||
|
@ -480,6 +456,8 @@ $sm_lang = array(
|
||||||
%DATE%',
|
%DATE%',
|
||||||
'combi_off_email_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error:
|
'combi_off_email_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error:
|
||||||
%ERROR%</li><li>Date: %DATE%</li></ul>',
|
%ERROR%</li><li>Date: %DATE%</li></ul>',
|
||||||
|
'combi_off_discord_message' => '- Server: %LABEL%<br>- IP: %IP%<br>- Port: %PORT%<br>- Error: %ERROR%<br>-
|
||||||
|
Date: %DATE%<br><br>',
|
||||||
'combi_off_webhook_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error:
|
'combi_off_webhook_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error:
|
||||||
%ERROR%</li><li>Date: %DATE%</li></ul>',
|
%ERROR%</li><li>Date: %DATE%</li></ul>',
|
||||||
'combi_off_pushover_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error:
|
'combi_off_pushover_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error:
|
||||||
|
@ -493,6 +471,8 @@ $sm_lang = array(
|
||||||
'combi_on_webhook_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port:
|
'combi_on_webhook_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port:
|
||||||
%PORT%</li><li>Downtime: %LAST_OFFLINE_DURATION%</li><li>Date:
|
%PORT%</li><li>Downtime: %LAST_OFFLINE_DURATION%</li><li>Date:
|
||||||
%DATE%</li></ul>',
|
%DATE%</li></ul>',
|
||||||
|
'combi_on_discord_message' => '- Server: %LABEL%<br>- IP: %IP%<br>- Port: %PORT%<br>-
|
||||||
|
Downtime: %LAST_OFFLINE_DURATION%<br>- Date: %DATE%<br><br>',
|
||||||
'combi_on_pushover_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port:
|
'combi_on_pushover_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port:
|
||||||
%PORT%</li><li>Downtime: %LAST_OFFLINE_DURATION%</li><li>Date:
|
%PORT%</li><li>Downtime: %LAST_OFFLINE_DURATION%</li><li>Date:
|
||||||
%DATE%</li></ul>',
|
%DATE%</li></ul>',
|
||||||
|
@ -504,6 +484,8 @@ $sm_lang = array(
|
||||||
'combi_webhook_subject' => '\'%UP%\' servers UP again, \'%DOWN%\' servers DOWN',
|
'combi_webhook_subject' => '\'%UP%\' servers UP again, \'%DOWN%\' servers DOWN',
|
||||||
'combi_pushover_subject' => '\'%UP%\' servers UP again, \'%DOWN%\' servers DOWN',
|
'combi_pushover_subject' => '\'%UP%\' servers UP again, \'%DOWN%\' servers DOWN',
|
||||||
'combi_email_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following
|
'combi_email_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following
|
||||||
|
servers are up again:</b><br>%UP_SERVERS%',
|
||||||
|
'combi_discord_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following
|
||||||
servers are up again:</b><br>%UP_SERVERS%',
|
servers are up again:</b><br>%UP_SERVERS%',
|
||||||
'combi_webhook_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following
|
'combi_webhook_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following
|
||||||
servers are up again:</b><br>%UP_SERVERS%',
|
servers are up again:</b><br>%UP_SERVERS%',
|
||||||
|
@ -529,8 +511,7 @@ $sm_lang = array(
|
||||||
'password_forgot' => 'Forgot password?',
|
'password_forgot' => 'Forgot password?',
|
||||||
'password_reset' => 'Reset password',
|
'password_reset' => 'Reset password',
|
||||||
'password_reset_email_subject' => 'Reset your password for PHP Server Monitor',
|
'password_reset_email_subject' => 'Reset your password for PHP Server Monitor',
|
||||||
'password_reset_email_body' => 'Please use the following link to reset your password. Please note it expires
|
'password_reset_email_body' => 'Please use the following link to reset your password. Please note it expires in 1 hour.<br><br>%link%',
|
||||||
in 1 hour.<br><br>%link%',
|
|
||||||
'error_user_incorrect' => 'The provided username could not be found.',
|
'error_user_incorrect' => 'The provided username could not be found.',
|
||||||
'error_login_incorrect' => 'The information is incorrect.',
|
'error_login_incorrect' => 'The information is incorrect.',
|
||||||
'error_login_passwords_nomatch' => 'The provided passwords do not match.',
|
'error_login_passwords_nomatch' => 'The provided passwords do not match.',
|
||||||
|
|
|
@ -43,6 +43,7 @@ class ConfigController extends AbstractController
|
||||||
'email_status',
|
'email_status',
|
||||||
'email_smtp',
|
'email_smtp',
|
||||||
'sms_status',
|
'sms_status',
|
||||||
|
'discord_status',
|
||||||
'pushover_status',
|
'pushover_status',
|
||||||
'webhook_status',
|
'webhook_status',
|
||||||
'telegram_status',
|
'telegram_status',
|
||||||
|
@ -50,6 +51,7 @@ class ConfigController extends AbstractController
|
||||||
'log_status',
|
'log_status',
|
||||||
'log_email',
|
'log_email',
|
||||||
'log_sms',
|
'log_sms',
|
||||||
|
'log_discord',
|
||||||
'log_pushover',
|
'log_pushover',
|
||||||
'log_webhook',
|
'log_webhook',
|
||||||
'log_telegram',
|
'log_telegram',
|
||||||
|
@ -212,7 +214,8 @@ class ConfigController extends AbstractController
|
||||||
|
|
||||||
$tpl_data[$this->default_tab . '_active'] = 'active';
|
$tpl_data[$this->default_tab . '_active'] = 'active';
|
||||||
|
|
||||||
$testmodals = array('email', 'sms', 'pushover','webhook', 'telegram', 'jabber');
|
$testmodals = array('email', 'sms', 'discord', 'webhook', 'pushover', 'telegram', 'jabber');
|
||||||
|
|
||||||
foreach ($testmodals as $modal_id) {
|
foreach ($testmodals as $modal_id) {
|
||||||
$modal = new \psm\Util\Module\Modal(
|
$modal = new \psm\Util\Module\Modal(
|
||||||
$this->twig,
|
$this->twig,
|
||||||
|
@ -274,6 +277,8 @@ class ConfigController extends AbstractController
|
||||||
$this->testEmail();
|
$this->testEmail();
|
||||||
} elseif (!empty($_POST['test_sms'])) {
|
} elseif (!empty($_POST['test_sms'])) {
|
||||||
$this->testSMS();
|
$this->testSMS();
|
||||||
|
} elseif (!empty($_POST['test_discord'])) {
|
||||||
|
$this->testDiscord();
|
||||||
} elseif (!empty($_POST['test_pushover'])) {
|
} elseif (!empty($_POST['test_pushover'])) {
|
||||||
$this->testPushover();
|
$this->testPushover();
|
||||||
}elseif (!empty($_POST['test_webhook'])) {
|
}elseif (!empty($_POST['test_webhook'])) {
|
||||||
|
@ -295,6 +300,8 @@ class ConfigController extends AbstractController
|
||||||
$this->default_tab = 'email';
|
$this->default_tab = 'email';
|
||||||
} elseif (isset($_POST['sms_submit']) || !empty($_POST['test_sms'])) {
|
} elseif (isset($_POST['sms_submit']) || !empty($_POST['test_sms'])) {
|
||||||
$this->default_tab = 'sms';
|
$this->default_tab = 'sms';
|
||||||
|
} elseif (isset($_POST['discord_submit']) || !empty($_POST['test_discord'])) {
|
||||||
|
$this->default_tab = 'discord';
|
||||||
} elseif (isset($_POST['pushover_submit']) || !empty($_POST['test_pushover'])) {
|
} elseif (isset($_POST['pushover_submit']) || !empty($_POST['test_pushover'])) {
|
||||||
$this->default_tab = 'pushover';
|
$this->default_tab = 'pushover';
|
||||||
} elseif (isset($_POST['webhook_submit']) || !empty($_POST['test_webhook'])) {
|
} elseif (isset($_POST['webhook_submit']) || !empty($_POST['test_webhook'])) {
|
||||||
|
@ -355,7 +362,60 @@ class ConfigController extends AbstractController
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute webhook test
|
* Execute Discord test
|
||||||
|
*
|
||||||
|
* @todo move test to separate class
|
||||||
|
*/
|
||||||
|
protected function testDiscord()
|
||||||
|
{
|
||||||
|
$user = $this->getUser()->getUser();
|
||||||
|
if (empty($user->discord)) {
|
||||||
|
$this->addMessage(psm_get_lang('config', 'discord_error_nowebhook'), 'error');
|
||||||
|
} else {
|
||||||
|
$success = 0;
|
||||||
|
$result = 'An unknown error has occurred.';
|
||||||
|
try {
|
||||||
|
$curl = curl_init($user->discord);
|
||||||
|
$json = json_decode(
|
||||||
|
'{"content":""}',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
$json['content'] = psm_get_lang('config', 'test_message');
|
||||||
|
$msg = "payload_json=" . urlencode(json_encode($json));
|
||||||
|
if(isset($curl)) {
|
||||||
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
|
||||||
|
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
|
||||||
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $msg);
|
||||||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
$result = curl_exec($curl);
|
||||||
|
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||||||
|
$err = curl_errno($curl);
|
||||||
|
|
||||||
|
if ($err != 0 || $httpcode != 204) {
|
||||||
|
$success = 0;
|
||||||
|
// $result = ($result == '') ? 'Wrong input, please check if all values are correct!' : $result;
|
||||||
|
$error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " .
|
||||||
|
curl_strerror($err) . ". \nResult: " . $result;
|
||||||
|
$result = $error;
|
||||||
|
} else {
|
||||||
|
$success = 1;
|
||||||
|
}
|
||||||
|
curl_close($curl);
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$success = 0;
|
||||||
|
$result = $e->getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($success === 1) {
|
||||||
|
$this->addMessage(psm_get_lang('config', 'discord_sent'), 'success');
|
||||||
|
} else {
|
||||||
|
$this->addMessage(sprintf(psm_get_lang('config', 'discord_error'), $result), 'error');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Execute webhook test
|
||||||
*
|
*
|
||||||
* @todo move test to separate class
|
* @todo move test to separate class
|
||||||
*/
|
*/
|
||||||
|
@ -382,6 +442,7 @@ class ConfigController extends AbstractController
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute pushover test
|
* Execute pushover test
|
||||||
*
|
*
|
||||||
|
@ -480,12 +541,14 @@ class ConfigController extends AbstractController
|
||||||
return array(
|
return array(
|
||||||
'label_tab_email' => psm_get_lang('config', 'tab_email'),
|
'label_tab_email' => psm_get_lang('config', 'tab_email'),
|
||||||
'label_tab_sms' => psm_get_lang('config', 'tab_sms'),
|
'label_tab_sms' => psm_get_lang('config', 'tab_sms'),
|
||||||
|
'label_tab_discord' => psm_get_lang('config', 'tab_discord'),
|
||||||
'label_tab_pushover' => psm_get_lang('config', 'tab_pushover'),
|
'label_tab_pushover' => psm_get_lang('config', 'tab_pushover'),
|
||||||
'label_tab_webhook' => psm_get_lang('config', 'tab_webhook'),
|
'label_tab_webhook' => psm_get_lang('config', 'tab_webhook'),
|
||||||
'label_tab_telegram' => psm_get_lang('config', 'tab_telegram'),
|
'label_tab_telegram' => psm_get_lang('config', 'tab_telegram'),
|
||||||
'label_tab_jabber' => psm_get_lang('config', 'tab_jabber'),
|
'label_tab_jabber' => psm_get_lang('config', 'tab_jabber'),
|
||||||
'label_settings_email' => psm_get_lang('config', 'settings_email'),
|
'label_settings_email' => psm_get_lang('config', 'settings_email'),
|
||||||
'label_settings_sms' => psm_get_lang('config', 'settings_sms'),
|
'label_settings_sms' => psm_get_lang('config', 'settings_sms'),
|
||||||
|
'label_settings_discord' => psm_get_lang('config', 'settings_discord'),
|
||||||
'label_settings_webhook' => psm_get_lang('config', 'settings_webhook'),
|
'label_settings_webhook' => psm_get_lang('config', 'settings_webhook'),
|
||||||
'label_settings_pushover' => psm_get_lang('config', 'settings_pushover'),
|
'label_settings_pushover' => psm_get_lang('config', 'settings_pushover'),
|
||||||
'label_settings_telegram' => psm_get_lang('config', 'settings_telegram'),
|
'label_settings_telegram' => psm_get_lang('config', 'settings_telegram'),
|
||||||
|
@ -517,6 +580,8 @@ class ConfigController extends AbstractController
|
||||||
'label_sms_gateway_username' => psm_get_lang('config', 'sms_gateway_username'),
|
'label_sms_gateway_username' => psm_get_lang('config', 'sms_gateway_username'),
|
||||||
'label_sms_gateway_password' => psm_get_lang('config', 'sms_gateway_password'),
|
'label_sms_gateway_password' => psm_get_lang('config', 'sms_gateway_password'),
|
||||||
'label_sms_from' => psm_get_lang('config', 'sms_from'),
|
'label_sms_from' => psm_get_lang('config', 'sms_from'),
|
||||||
|
'label_discord_status' => psm_get_lang('config', 'discord_status'),
|
||||||
|
'label_discord_description' => psm_get_lang('config', 'discord_description'),
|
||||||
'label_webhook_description' => psm_get_lang('config', 'webhook_description'),
|
'label_webhook_description' => psm_get_lang('config', 'webhook_description'),
|
||||||
'label_webhook_status' => psm_get_lang('config', 'webhook_status'),
|
'label_webhook_status' => psm_get_lang('config', 'webhook_status'),
|
||||||
'label_webhook_url' => psm_get_lang('config', 'webhook_url'),
|
'label_webhook_url' => psm_get_lang('config', 'webhook_url'),
|
||||||
|
@ -556,6 +621,7 @@ class ConfigController extends AbstractController
|
||||||
'label_log_status_description' => psm_get_lang('config', 'log_status_description'),
|
'label_log_status_description' => psm_get_lang('config', 'log_status_description'),
|
||||||
'label_log_email' => psm_get_lang('config', 'log_email'),
|
'label_log_email' => psm_get_lang('config', 'log_email'),
|
||||||
'label_log_sms' => psm_get_lang('config', 'log_sms'),
|
'label_log_sms' => psm_get_lang('config', 'log_sms'),
|
||||||
|
'label_log_discord' => psm_get_lang('config', 'log_discord'),
|
||||||
'label_log_pushover' => psm_get_lang('config', 'log_pushover'),
|
'label_log_pushover' => psm_get_lang('config', 'log_pushover'),
|
||||||
'label_log_webhook' => psm_get_lang('config', 'log_webhook'),
|
'label_log_webhook' => psm_get_lang('config', 'log_webhook'),
|
||||||
'label_log_telegram' => psm_get_lang('config', 'log_telegram'),
|
'label_log_telegram' => psm_get_lang('config', 'log_telegram'),
|
||||||
|
|
|
@ -81,6 +81,7 @@ abstract class AbstractServerController extends AbstractController
|
||||||
`s`.`active`,
|
`s`.`active`,
|
||||||
`s`.`email`,
|
`s`.`email`,
|
||||||
`s`.`sms`,
|
`s`.`sms`,
|
||||||
|
`s`.`discord`,
|
||||||
`s`.`webhook`,
|
`s`.`webhook`,
|
||||||
`s`.`pushover`,
|
`s`.`pushover`,
|
||||||
`s`.`telegram`,
|
`s`.`telegram`,
|
||||||
|
|
|
@ -55,6 +55,7 @@ class LogController extends AbstractServerController
|
||||||
'label_status' => psm_get_lang('log', 'status'),
|
'label_status' => psm_get_lang('log', 'status'),
|
||||||
'label_email' => psm_get_lang('log', 'email'),
|
'label_email' => psm_get_lang('log', 'email'),
|
||||||
'label_sms' => psm_get_lang('log', 'sms'),
|
'label_sms' => psm_get_lang('log', 'sms'),
|
||||||
|
'label_discord' => psm_get_lang('log', 'discord'),
|
||||||
'label_pushover' => psm_get_lang('log', 'pushover'),
|
'label_pushover' => psm_get_lang('log', 'pushover'),
|
||||||
'label_webhook' => psm_get_lang('log', 'webhook'),
|
'label_webhook' => psm_get_lang('log', 'webhook'),
|
||||||
'label_telegram' => psm_get_lang('log', 'telegram'),
|
'label_telegram' => psm_get_lang('log', 'telegram'),
|
||||||
|
@ -90,7 +91,7 @@ class LogController extends AbstractServerController
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$log_types = array('status', 'email', 'sms', 'pushover', 'webhook','telegram', 'jabber');
|
$log_types = array('status', 'email', 'sms', 'pushover', 'telegram', 'jabber', 'discord', 'webhook');
|
||||||
|
|
||||||
foreach ($log_types as $key) {
|
foreach ($log_types as $key) {
|
||||||
$records = $this->getEntries($key);
|
$records = $this->getEntries($key);
|
||||||
|
|
|
@ -100,6 +100,7 @@ class ServerController extends AbstractServerController
|
||||||
$icons = array(
|
$icons = array(
|
||||||
'email' => 'icon-envelope',
|
'email' => 'icon-envelope',
|
||||||
'sms' => 'icon-mobile',
|
'sms' => 'icon-mobile',
|
||||||
|
'discord' => 'icon-discord',
|
||||||
'pushover' => 'icon-pushover',
|
'pushover' => 'icon-pushover',
|
||||||
'webhook' => 'icon-webhook',
|
'webhook' => 'icon-webhook',
|
||||||
'telegram' => 'icon-telegram',
|
'telegram' => 'icon-telegram',
|
||||||
|
@ -131,6 +132,7 @@ class ServerController extends AbstractServerController
|
||||||
|
|
||||||
$tpl_data['config']['email'] = psm_get_conf('email_status');
|
$tpl_data['config']['email'] = psm_get_conf('email_status');
|
||||||
$tpl_data['config']['sms'] = psm_get_conf('sms_status');
|
$tpl_data['config']['sms'] = psm_get_conf('sms_status');
|
||||||
|
$tpl_data['config']['discord'] = psm_get_conf('discord_status');
|
||||||
$tpl_data['config']['webhook'] = psm_get_conf('webhook_status');
|
$tpl_data['config']['webhook'] = psm_get_conf('webhook_status');
|
||||||
$tpl_data['config']['pushover'] = psm_get_conf('pushover_status');
|
$tpl_data['config']['pushover'] = psm_get_conf('pushover_status');
|
||||||
$tpl_data['config']['telegram'] = psm_get_conf('telegram_status');
|
$tpl_data['config']['telegram'] = psm_get_conf('telegram_status');
|
||||||
|
@ -239,6 +241,7 @@ class ServerController extends AbstractServerController
|
||||||
'edit_active_selected' => $edit_server['active'],
|
'edit_active_selected' => $edit_server['active'],
|
||||||
'edit_email_selected' => $edit_server['email'],
|
'edit_email_selected' => $edit_server['email'],
|
||||||
'edit_sms_selected' => $edit_server['sms'],
|
'edit_sms_selected' => $edit_server['sms'],
|
||||||
|
'edit_discord_selected' => $edit_server['discord'],
|
||||||
'edit_webhook_selected' => $edit_server['webhook'],
|
'edit_webhook_selected' => $edit_server['webhook'],
|
||||||
'edit_pushover_selected' => $edit_server['pushover'],
|
'edit_pushover_selected' => $edit_server['pushover'],
|
||||||
'edit_telegram_selected' => $edit_server['telegram'],
|
'edit_telegram_selected' => $edit_server['telegram'],
|
||||||
|
@ -246,7 +249,7 @@ class ServerController extends AbstractServerController
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
$notifications = array('email', 'sms', 'pushover','webhook', 'telegram', 'jabber');
|
$notifications = array('email', 'sms', 'pushover', 'discord', 'webhook', 'telegram', 'jabber');
|
||||||
foreach ($notifications as $notification) {
|
foreach ($notifications as $notification) {
|
||||||
if (psm_get_conf($notification . '_status') == 0) {
|
if (psm_get_conf($notification . '_status') == 0) {
|
||||||
$tpl_data['warning_' . $notification] = true;
|
$tpl_data['warning_' . $notification] = true;
|
||||||
|
@ -314,6 +317,7 @@ class ServerController extends AbstractServerController
|
||||||
'active' => in_array($_POST['active'], array('yes', 'no')) ? $_POST['active'] : 'no',
|
'active' => in_array($_POST['active'], array('yes', 'no')) ? $_POST['active'] : 'no',
|
||||||
'email' => in_array($_POST['email'], array('yes', 'no')) ? $_POST['email'] : 'no',
|
'email' => in_array($_POST['email'], array('yes', 'no')) ? $_POST['email'] : 'no',
|
||||||
'sms' => in_array($_POST['sms'], array('yes', 'no')) ? $_POST['sms'] : 'no',
|
'sms' => in_array($_POST['sms'], array('yes', 'no')) ? $_POST['sms'] : 'no',
|
||||||
|
'discord' => in_array($_POST['discord'], array('yes', 'no')) ? $_POST['discord'] : 'no',
|
||||||
'pushover' => in_array($_POST['pushover'], array('yes', 'no')) ? $_POST['pushover'] : 'no',
|
'pushover' => in_array($_POST['pushover'], array('yes', 'no')) ? $_POST['pushover'] : 'no',
|
||||||
'webhook' => in_array($_POST['webhook'], array('yes', 'no')) ? $_POST['webhook'] : 'no',
|
'webhook' => in_array($_POST['webhook'], array('yes', 'no')) ? $_POST['webhook'] : 'no',
|
||||||
'telegram' => in_array($_POST['telegram'], array('yes', 'no')) ? $_POST['telegram'] : 'no',
|
'telegram' => in_array($_POST['telegram'], array('yes', 'no')) ? $_POST['telegram'] : 'no',
|
||||||
|
@ -593,14 +597,17 @@ class ServerController extends AbstractServerController
|
||||||
'label_send_email' => psm_get_lang('servers', 'send_email'),
|
'label_send_email' => psm_get_lang('servers', 'send_email'),
|
||||||
'label_sms' => psm_get_lang('servers', 'sms'),
|
'label_sms' => psm_get_lang('servers', 'sms'),
|
||||||
'label_send_sms' => psm_get_lang('servers', 'send_sms'),
|
'label_send_sms' => psm_get_lang('servers', 'send_sms'),
|
||||||
|
'label_discord' => psm_get_lang('servers', 'discord'),
|
||||||
|
'label_send_discord' => psm_get_lang('servers', 'send_discord'),
|
||||||
|
'label_pushover' => psm_get_lang('servers', 'pushover'),
|
||||||
'label_send_pushover' => psm_get_lang('servers', 'send_pushover'),
|
'label_send_pushover' => psm_get_lang('servers', 'send_pushover'),
|
||||||
'label_send_webhook' => psm_get_lang('servers', 'send_webhook'),
|
'label_send_webhook' => psm_get_lang('servers', 'send_webhook'),
|
||||||
'label_telegram' => psm_get_lang('servers', 'telegram'),
|
'label_telegram' => psm_get_lang('servers', 'telegram'),
|
||||||
'label_jabber' => psm_get_lang('servers', 'jabber'),
|
'label_jabber' => psm_get_lang('servers', 'jabber'),
|
||||||
|
'label_send_jabber' => psm_get_lang('servers', 'send_jabber'),
|
||||||
'label_webhook' => psm_get_lang('servers', 'webhook'),
|
'label_webhook' => psm_get_lang('servers', 'webhook'),
|
||||||
'label_pushover' => psm_get_lang('servers', 'pushover'),
|
'label_pushover' => psm_get_lang('servers', 'pushover'),
|
||||||
'label_send_telegram' => psm_get_lang('servers', 'send_telegram'),
|
'label_send_telegram' => psm_get_lang('servers', 'send_telegram'),
|
||||||
'label_send_jabber' => psm_get_lang('servers', 'send_jabber'),
|
|
||||||
'label_users' => psm_get_lang('servers', 'users'),
|
'label_users' => psm_get_lang('servers', 'users'),
|
||||||
'label_warning_threshold' => psm_get_lang('servers', 'warning_threshold'),
|
'label_warning_threshold' => psm_get_lang('servers', 'warning_threshold'),
|
||||||
'label_warning_threshold_description' => psm_get_lang('servers', 'warning_threshold_description'),
|
'label_warning_threshold_description' => psm_get_lang('servers', 'warning_threshold_description'),
|
||||||
|
|
|
@ -39,7 +39,7 @@ class ProfileController extends AbstractController
|
||||||
* @var array $profile_fields
|
* @var array $profile_fields
|
||||||
*/
|
*/
|
||||||
protected $profile_fields =
|
protected $profile_fields =
|
||||||
array('name', 'user_name', 'email', 'mobile', 'pushover_key', 'pushover_device','webhook_url', 'webhook_json', 'telegram_id', 'jabber');
|
array('name', 'user_name', 'email', 'mobile', 'pushover_key', 'pushover_device', 'discord', 'webhook_url', 'webhook_json', 'telegram_id', 'jabber');
|
||||||
|
|
||||||
public function __construct(Database $db, \Twig_Environment $twig)
|
public function __construct(Database $db, \Twig_Environment $twig)
|
||||||
{
|
{
|
||||||
|
@ -89,6 +89,10 @@ class ProfileController extends AbstractController
|
||||||
'label_pushover_key' => psm_get_lang('users', 'pushover_key'),
|
'label_pushover_key' => psm_get_lang('users', 'pushover_key'),
|
||||||
'label_pushover_device' => psm_get_lang('users', 'pushover_device'),
|
'label_pushover_device' => psm_get_lang('users', 'pushover_device'),
|
||||||
'label_pushover_device_description' => psm_get_lang('users', 'pushover_device_description'),
|
'label_pushover_device_description' => psm_get_lang('users', 'pushover_device_description'),
|
||||||
|
|
||||||
|
'label_discord' => psm_get_lang('users', 'discord'),
|
||||||
|
'label_discord_description' => psm_get_lang('users', 'discord_description'),
|
||||||
|
|
||||||
'label_telegram' => psm_get_lang('users', 'telegram'),
|
'label_telegram' => psm_get_lang('users', 'telegram'),
|
||||||
'label_telegram_description' => psm_get_lang('users', 'telegram_description'),
|
'label_telegram_description' => psm_get_lang('users', 'telegram_description'),
|
||||||
'label_telegram_chat_id' => psm_get_lang('users', 'telegram_chat_id'),
|
'label_telegram_chat_id' => psm_get_lang('users', 'telegram_chat_id'),
|
||||||
|
|
|
@ -158,6 +158,7 @@ class UserController extends AbstractController
|
||||||
'name',
|
'name',
|
||||||
'user_name',
|
'user_name',
|
||||||
'mobile',
|
'mobile',
|
||||||
|
'discord',
|
||||||
'webhook_url',
|
'webhook_url',
|
||||||
'webhook_json',
|
'webhook_json',
|
||||||
'pushover_key',
|
'pushover_key',
|
||||||
|
@ -257,6 +258,7 @@ class UserController extends AbstractController
|
||||||
'password_repeat',
|
'password_repeat',
|
||||||
'level',
|
'level',
|
||||||
'mobile',
|
'mobile',
|
||||||
|
'discord',
|
||||||
'webhook_url',
|
'webhook_url',
|
||||||
'webhook_json',
|
'webhook_json',
|
||||||
'pushover_key',
|
'pushover_key',
|
||||||
|
@ -396,6 +398,8 @@ class UserController extends AbstractController
|
||||||
'label_level' => psm_get_lang('users', 'level'),
|
'label_level' => psm_get_lang('users', 'level'),
|
||||||
'label_level_description' => psm_get_lang('users', 'level_description'),
|
'label_level_description' => psm_get_lang('users', 'level_description'),
|
||||||
'label_mobile' => psm_get_lang('users', 'mobile'),
|
'label_mobile' => psm_get_lang('users', 'mobile'),
|
||||||
|
'label_discord' => psm_get_lang('users', 'discord'),
|
||||||
|
'label_discord_description' => psm_get_lang('users', 'discord_description'),
|
||||||
'label_webhook' => psm_get_lang('users', 'webhook'),
|
'label_webhook' => psm_get_lang('users', 'webhook'),
|
||||||
'label_webhook_description' => psm_get_lang('users', 'webhook_description'),
|
'label_webhook_description' => psm_get_lang('users', 'webhook_description'),
|
||||||
'label_webhook_url' => psm_get_lang('users', 'webhook_url'),
|
'label_webhook_url' => psm_get_lang('users', 'webhook_url'),
|
||||||
|
|
|
@ -180,6 +180,8 @@ class Installer
|
||||||
('log_webhook', '1'),
|
('log_webhook', '1'),
|
||||||
('log_telegram', '1'),
|
('log_telegram', '1'),
|
||||||
('log_jabber', '1'),
|
('log_jabber', '1'),
|
||||||
|
('discord_status', '0'),
|
||||||
|
('log_jdiscord', '1'),
|
||||||
('log_retention_period', '365'),
|
('log_retention_period', '365'),
|
||||||
('version', '" . PSM_VERSION . "'),
|
('version', '" . PSM_VERSION . "'),
|
||||||
('version_update_check', '" . PSM_VERSION . "'),
|
('version_update_check', '" . PSM_VERSION . "'),
|
||||||
|
@ -214,6 +216,7 @@ class Installer
|
||||||
`level` tinyint(2) unsigned NOT NULL DEFAULT '20',
|
`level` tinyint(2) unsigned NOT NULL DEFAULT '20',
|
||||||
`name` varchar(255) NOT NULL,
|
`name` varchar(255) NOT NULL,
|
||||||
`mobile` varchar(15) NOT NULL,
|
`mobile` varchar(15) NOT NULL,
|
||||||
|
`discord` varchar(255) NOT NULL,
|
||||||
`pushover_key` varchar(255) NOT NULL,
|
`pushover_key` varchar(255) NOT NULL,
|
||||||
`pushover_device` varchar(255) NOT NULL,
|
`pushover_device` varchar(255) NOT NULL,
|
||||||
`webhook_url` varchar(255) NOT NULL,
|
`webhook_url` varchar(255) NOT NULL,
|
||||||
|
@ -239,7 +242,7 @@ class Installer
|
||||||
PSM_DB_PREFIX . 'log' => "CREATE TABLE `" . PSM_DB_PREFIX . "log` (
|
PSM_DB_PREFIX . 'log' => "CREATE TABLE `" . PSM_DB_PREFIX . "log` (
|
||||||
`log_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
`log_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
`server_id` int(11) unsigned NOT NULL,
|
`server_id` int(11) unsigned NOT NULL,
|
||||||
`type` enum('status','email','sms','pushover','webhook','telegram', 'jabber') NOT NULL,
|
`type` enum('status','email','sms','discord','pushover','webhook','telegram', 'jabber') NOT NULL,
|
||||||
`message` TEXT NOT NULL,
|
`message` TEXT NOT NULL,
|
||||||
`datetime` timestamp NOT NULL default CURRENT_TIMESTAMP,
|
`datetime` timestamp NOT NULL default CURRENT_TIMESTAMP,
|
||||||
PRIMARY KEY (`log_id`)
|
PRIMARY KEY (`log_id`)
|
||||||
|
@ -273,6 +276,7 @@ class Installer
|
||||||
`active` enum('yes','no') NOT NULL default 'yes',
|
`active` enum('yes','no') NOT NULL default 'yes',
|
||||||
`email` enum('yes','no') NOT NULL default 'yes',
|
`email` enum('yes','no') NOT NULL default 'yes',
|
||||||
`sms` enum('yes','no') NOT NULL default 'no',
|
`sms` enum('yes','no') NOT NULL default 'no',
|
||||||
|
`discord` enum('yes','no') NOT NULL default 'yes',
|
||||||
`pushover` enum('yes','no') NOT NULL default 'yes',
|
`pushover` enum('yes','no') NOT NULL default 'yes',
|
||||||
`webhook` enum('yes','no') NOT NULL default 'yes',
|
`webhook` enum('yes','no') NOT NULL default 'yes',
|
||||||
`telegram` enum('yes','no') NOT NULL default 'yes',
|
`telegram` enum('yes','no') NOT NULL default 'yes',
|
||||||
|
@ -725,25 +729,31 @@ class Installer
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Upgrade for v3.6.0 release
|
* Patch for v3.6.0 release
|
||||||
|
* Added support for Discord and webhooks
|
||||||
*/
|
*/
|
||||||
protected function upgrade360()
|
protected function upgrade360()
|
||||||
{
|
{
|
||||||
$queries = array();
|
$queries = array();
|
||||||
|
|
||||||
$queries[] = 'ALTER TABLE `' . PSM_DB_PREFIX . 'users`
|
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "users`
|
||||||
ADD `webhook_url` VARCHAR( 255 ) NOT NULL AFTER `telegram_id`;';
|
ADD `webhook_url` VARCHAR( 255 ) NOT NULL AFTER `telegram_id`;";
|
||||||
$queries[] = 'ALTER TABLE `' . PSM_DB_PREFIX . 'users`
|
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "users`
|
||||||
ADD `webhook_json` VARCHAR( 255 ) NOT NULL AFTER `telegram_id`;';
|
ADD `webhook_json` VARCHAR( 255 ) NOT NULL AFTER `telegram_id`;";
|
||||||
$queries[] = "ALTER TABLE `' . PSM_DB_PREFIX . 'log`
|
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "log`
|
||||||
CHANGE `type` `type` ENUM('status','email','sms','webhook','pushover','telegram','jabber')
|
CHANGE `type` `type` ENUM('status','email','sms','discord','webhook','pushover','telegram','jabber')
|
||||||
CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;";
|
CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;";
|
||||||
$queries[] = "ALTER TABLE `' . PSM_DB_PREFIX . 'servers`
|
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers`
|
||||||
ADD `webhook` ENUM( 'yes','no' ) NOT NULL DEFAULT 'yes' AFTER `telegram`;";
|
ADD `webhook` ENUM( 'yes','no' ) NOT NULL DEFAULT 'yes' AFTER `telegram`;";
|
||||||
$queries[] = "INSERT INTO `' . PSM_DB_PREFIX . 'config` (`key`, `value`) VALUE
|
$queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "config` (`key`, `value`) VALUE
|
||||||
|
('discord_status', '0'),
|
||||||
|
('log_discord', '1'),
|
||||||
('webhook_status', '0'),
|
('webhook_status', '0'),
|
||||||
('log_webhook', '1')";
|
('log_webhook', '1')";
|
||||||
|
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "users`
|
||||||
|
ADD `discord` VARCHAR( 255 ) NOT NULL AFTER `mobile`;";
|
||||||
|
$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers`
|
||||||
|
ADD `discord` ENUM( 'yes','no' ) NOT NULL DEFAULT 'yes' AFTER `sms`;";
|
||||||
$this->execSQL($queries);
|
$this->execSQL($queries);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,12 @@ class StatusNotifier
|
||||||
*/
|
*/
|
||||||
protected $send_sms = false;
|
protected $send_sms = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send Discord notification?
|
||||||
|
* @var boolean $send_discord
|
||||||
|
*/
|
||||||
|
protected $send_discord = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send Pushover notification?
|
* Send Pushover notification?
|
||||||
* @var boolean $send_pushover
|
* @var boolean $send_pushover
|
||||||
|
@ -134,6 +140,7 @@ class StatusNotifier
|
||||||
|
|
||||||
$this->send_emails = (bool)psm_get_conf('email_status');
|
$this->send_emails = (bool)psm_get_conf('email_status');
|
||||||
$this->send_sms = (bool)psm_get_conf('sms_status');
|
$this->send_sms = (bool)psm_get_conf('sms_status');
|
||||||
|
$this->send_discord = (bool)psm_get_conf('discord_status');
|
||||||
$this->send_webhook = (bool)psm_get_conf('webhook_status');
|
$this->send_webhook = (bool)psm_get_conf('webhook_status');
|
||||||
$this->send_pushover = (bool)psm_get_conf('pushover_status');
|
$this->send_pushover = (bool)psm_get_conf('pushover_status');
|
||||||
$this->send_telegram = (bool)psm_get_conf('telegram_status');
|
$this->send_telegram = (bool)psm_get_conf('telegram_status');
|
||||||
|
@ -156,6 +163,7 @@ class StatusNotifier
|
||||||
if (
|
if (
|
||||||
!$this->send_emails &&
|
!$this->send_emails &&
|
||||||
!$this->send_sms &&
|
!$this->send_sms &&
|
||||||
|
!$this->send_discord &&
|
||||||
!$this->send_webhook &&
|
!$this->send_webhook &&
|
||||||
!$this->send_pushover &&
|
!$this->send_pushover &&
|
||||||
!$this->send_telegram &&
|
!$this->send_telegram &&
|
||||||
|
@ -183,6 +191,7 @@ class StatusNotifier
|
||||||
'error',
|
'error',
|
||||||
'email',
|
'email',
|
||||||
'sms',
|
'sms',
|
||||||
|
'discord',
|
||||||
'webhook',
|
'webhook',
|
||||||
'pushover',
|
'pushover',
|
||||||
'telegram',
|
'telegram',
|
||||||
|
@ -254,11 +263,19 @@ class StatusNotifier
|
||||||
// yay lets wake those nerds up!
|
// yay lets wake those nerds up!
|
||||||
$this->notifyByTxtMsg($users);
|
$this->notifyByTxtMsg($users);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check if discord is enabled for this server
|
||||||
|
if ($this->send_discord && $this->server['discord'] == 'yes') {
|
||||||
|
// yay lets wake those nerds up!
|
||||||
|
$this->combine ? $this->setCombi('discord') : $this->notifyByDiscord($users);
|
||||||
|
}
|
||||||
|
|
||||||
// check if webhook is enabled for this server
|
// check if webhook is enabled for this server
|
||||||
if ($this->send_webhook && $this->server['webhook'] == 'yes') {
|
if ($this->send_webhook && $this->server['webhook'] == 'yes') {
|
||||||
// yay lets wake those nerds up!
|
// yay lets wake those nerds up!
|
||||||
$this->combine ? $this->setCombi('webhook') : $this->notifyByWebhook($users);
|
$this->combine ? $this->setCombi('webhook') : $this->notifyByWebhook($users);
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if pushover is enabled for this server
|
// check if pushover is enabled for this server
|
||||||
if ($this->send_pushover && $this->server['pushover'] == 'yes') {
|
if ($this->send_pushover && $this->server['pushover'] == 'yes') {
|
||||||
// yay lets wake those nerds up!
|
// yay lets wake those nerds up!
|
||||||
|
@ -430,6 +447,86 @@ class StatusNotifier
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This functions performs the discord notifications
|
||||||
|
*
|
||||||
|
* @param \PDOStatement $users
|
||||||
|
* @param array $combi contains message and subject (optional)
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function notifyByDiscord($users, $combi = array())
|
||||||
|
{
|
||||||
|
|
||||||
|
$message_log = key_exists('message', $combi) ?
|
||||||
|
$combi['message'] :
|
||||||
|
psm_parse_msg($this->status_new, 'discord_message', $this->server);
|
||||||
|
|
||||||
|
|
||||||
|
// Remove users that have no Discord webhook
|
||||||
|
foreach ($users as $k => $user) {
|
||||||
|
if (trim($user['discord']) == '') {
|
||||||
|
unset($users[$k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validation
|
||||||
|
if (empty($users)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fix message for Discord viewing
|
||||||
|
$message = str_replace(array('<b>', '</b>'), array('**', '**'), $message_log);
|
||||||
|
$message = str_replace(array('<ul>', '</ul>'), array('', ''), $message);
|
||||||
|
$message = str_replace(array('<br>', '</li>'), array("\n", "\n"), $message);
|
||||||
|
$message = str_replace('<li>', " * ", $message);
|
||||||
|
|
||||||
|
|
||||||
|
$json = json_decode(
|
||||||
|
'{"content":""}',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
$json['content'] = $message;
|
||||||
|
|
||||||
|
// Log
|
||||||
|
if (psm_get_conf('log_discord')) {
|
||||||
|
$log_id = psm_add_log($this->server_id, 'discord', $message_log);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($users as $user) {
|
||||||
|
// Log
|
||||||
|
if (!empty($log_id)) {
|
||||||
|
psm_add_log_user($log_id, $user['user_id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set discord webhook and send
|
||||||
|
try {
|
||||||
|
$msg = "payload_json=" . urlencode(json_encode($json));
|
||||||
|
$curl = curl_init(trim($user['discord']));
|
||||||
|
if(isset($curl)) {
|
||||||
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
|
||||||
|
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
|
||||||
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $msg);
|
||||||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
$result = curl_exec($curl);
|
||||||
|
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||||||
|
$err = curl_errno($curl);
|
||||||
|
|
||||||
|
if ($err != 0 || $httpcode != 204) {
|
||||||
|
// $result = ($result == '') ? 'Wrong input, please check if all values are correct!' : $result;
|
||||||
|
$error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " .
|
||||||
|
curl_strerror($err) . ". \nResult: " . $result;
|
||||||
|
$log_id = psm_add_log($this->server_id, 'discord', $error);
|
||||||
|
}
|
||||||
|
curl_close($curl);
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$log_id = psm_add_log($this->server_id, 'discord', $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This functions performs the pushover notifications
|
* This functions performs the pushover notifications
|
||||||
*
|
*
|
||||||
|
@ -673,7 +770,7 @@ class StatusNotifier
|
||||||
{
|
{
|
||||||
// find all the users with this server listed
|
// find all the users with this server listed
|
||||||
$users = $this->db->query('
|
$users = $this->db->query('
|
||||||
SELECT `u`.`user_id`, `u`.`name`,`u`.`email`, `u`.`mobile`, `u`.`pushover_key`, `u`.`webhook_url`,`u`.`webhook_json`,
|
SELECT `u`.`user_id`, `u`.`name`,`u`.`email`, `u`.`mobile`, `u`.`pushover_key`, `u`.`discord`, `u`.`webhook_url`,`u`.`webhook_json`,
|
||||||
`u`.`pushover_device`, `u`.`telegram_id`,
|
`u`.`pushover_device`, `u`.`telegram_id`,
|
||||||
`u`.`jabber`
|
`u`.`jabber`
|
||||||
FROM `' . PSM_DB_PREFIX . 'users` AS `u`
|
FROM `' . PSM_DB_PREFIX . 'users` AS `u`
|
||||||
|
|
|
@ -90,6 +90,7 @@
|
||||||
<script type="text/javascript" src="src/templates/default/static/plugin/bootstrap-select/dist/js/i18n/defaults-{{ language }}.min.js"></script>
|
<script type="text/javascript" src="src/templates/default/static/plugin/bootstrap-select/dist/js/i18n/defaults-{{ language }}.min.js"></script>
|
||||||
<script defer src="src/templates/default/static/plugin/font-awesome/js/solid.min.js"></script>
|
<script defer src="src/templates/default/static/plugin/font-awesome/js/solid.min.js"></script>
|
||||||
<script defer src="src/templates/default/static/plugin/font-awesome/js/fontawesome.min.js" data-auto-replace-svg="nest"></script>
|
<script defer src="src/templates/default/static/plugin/font-awesome/js/fontawesome.min.js" data-auto-replace-svg="nest"></script>
|
||||||
|
<script defer src="src/templates/default/static/plugin/font-awesome/js/brands.min.js" data-auto-replace-svg="nest"></script>
|
||||||
<script type="text/javascript" src="src/templates/default/static/js/scripts.js"></script>
|
<script type="text/javascript" src="src/templates/default/static/js/scripts.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,11 @@
|
||||||
role="tab" aria-controls="config-jabber" aria-selected="{% if jabber_active %}true{% else %}false{% endif %}">{{
|
role="tab" aria-controls="config-jabber" aria-selected="{% if jabber_active %}true{% else %}false{% endif %}">{{
|
||||||
label_tab_jabber }}</a>
|
label_tab_jabber }}</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link {{ discord_active }}" id="config-discord-tab" data-toggle="tab" href="#config-discord" role="tab"
|
||||||
|
aria-controls="config-discord" aria-selected="{% if discord_active %}true{% else %}false{% endif %}">{{
|
||||||
|
label_tab_discord }}</a>
|
||||||
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link {{ webhook_active }}" id="config-webhook-tab" data-toggle="tab" href="#config-webhook" role="tab"
|
<a class="nav-link {{ webhook_active }}" id="config-webhook-tab" data-toggle="tab" href="#config-webhook" role="tab"
|
||||||
aria-controls="config-webhook" aria-selected="{% if webhook_active %}true{% else %}false{% endif %}">{{
|
aria-controls="config-webhook" aria-selected="{% if webhook_active %}true{% else %}false{% endif %}">{{
|
||||||
|
@ -140,6 +145,18 @@
|
||||||
{{ macro.button_save("sms_submit", label_save) }}
|
{{ macro.button_save("sms_submit", label_save) }}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="tab-pane {{ discord_active }}" id="config-discord" role="tabpanel" aria-labelledby="config-discord-tab">
|
||||||
|
<fieldset>
|
||||||
|
<legend>{{ label_settings_discord }}</legend>
|
||||||
|
<!-- enable discord -->
|
||||||
|
{{ macro.input_checkbox("discord_status", "discord_status[]", label_discord_status, discord_status_checked) }}
|
||||||
|
<!-- enable discord log -->
|
||||||
|
{{ macro.input_checkbox("log_discord", "log_discord[]", label_log_discord, log_discord_checked) }}
|
||||||
|
{{ macro.button_test("testDiscord", label_test) }}
|
||||||
|
{{ macro.input_hidden("test_discord", "0") }}
|
||||||
|
{{ macro.button_save("discord_submit", label_save) }}
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
<div class="tab-pane {{ pushover_active }}" id="config-pushover" role="tabpanel" aria-labelledby="config-pushover-tab">
|
<div class="tab-pane {{ pushover_active }}" id="config-pushover" role="tabpanel" aria-labelledby="config-pushover-tab">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{{ label_settings_pushover }}</legend>
|
<legend>{{ label_settings_pushover }}</legend>
|
||||||
|
|
|
@ -63,10 +63,7 @@
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if server.telegram|lower == 'yes' and config.telegram|lower%}
|
{% if server.telegram|lower == 'yes' and config.telegram|lower%}
|
||||||
<span class="fa-layers">
|
<i class="fab fa-telegram" title="{{ label_telegram }}"></i>
|
||||||
<i class="fas fa-circle" title="{{ label_telegram }}"></i>
|
|
||||||
<span class="fa-layers-text fa-inverse" style="font-weight:400; font-size:75%">T</span>
|
|
||||||
</span>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if server.jabber|lower == 'yes'%}
|
{% if server.jabber|lower == 'yes'%}
|
||||||
<span class="fa-layers">
|
<span class="fa-layers">
|
||||||
|
@ -74,8 +71,14 @@
|
||||||
<span class="fa-layers-text fa-inverse" style="font-weight:400; font-size:75%">J</span>
|
<span class="fa-layers-text fa-inverse" style="font-weight:400; font-size:75%">J</span>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if server.discord|lower == 'yes' and config.discord|lower %}
|
||||||
|
<i class="fab fa-discord" title="{{ label_discord }}"></i>
|
||||||
|
{% endif %}
|
||||||
{% if server.webhook|lower == 'yes' and config.webhook|lower %}
|
{% if server.webhook|lower == 'yes' and config.webhook|lower %}
|
||||||
<i class="fas fa-hashtag" title="{{ label_webhook }}"></i>
|
<span class="fa-layers">
|
||||||
|
<i class="fas fa-circle" title="{{ label_webhook }}"></i>
|
||||||
|
<span class="fa-layers-text fa-inverse" style="font-weight:600; font-size:55%">W</span>
|
||||||
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
{% if user_level == 10 %}
|
{% if user_level == 10 %}
|
||||||
|
|
|
@ -144,6 +144,8 @@
|
||||||
{{ macro.input_select_monitoring("telegram", "telegram", label_send_telegram, edit_telegram_selected, label_yes, label_no, warning_telegram, label_warning_telegram) }}
|
{{ macro.input_select_monitoring("telegram", "telegram", label_send_telegram, edit_telegram_selected, label_yes, label_no, warning_telegram, label_warning_telegram) }}
|
||||||
<!-- Jabber -->
|
<!-- Jabber -->
|
||||||
{{ macro.input_select_monitoring("jabber", "jabber", label_send_jabber, edit_jabber_selected, label_yes, label_no, warning_jabber, label_warning_jabber) }}
|
{{ macro.input_select_monitoring("jabber", "jabber", label_send_jabber, edit_jabber_selected, label_yes, label_no, warning_jabber, label_warning_jabber) }}
|
||||||
|
<!-- Discord -->
|
||||||
|
{{ macro.input_select_monitoring("discord", "discord", label_send_discord, edit_discord_selected, label_yes, label_no, warning_discord, label_warning_discord) }}
|
||||||
<!-- Webhook -->
|
<!-- Webhook -->
|
||||||
{{ macro.input_select_monitoring("webhook", "webhook", label_send_webhook, edit_webhook_selected, label_yes, label_no, warning_webhook, label_warning_webhook) }}
|
{{ macro.input_select_monitoring("webhook", "webhook", label_send_webhook, edit_webhook_selected, label_yes, label_no, warning_webhook, label_warning_webhook) }}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -309,6 +309,19 @@
|
||||||
<noscript>⁇</noscript>
|
<noscript>⁇</noscript>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</li>
|
</li>
|
||||||
|
<li class="list-group-item">
|
||||||
|
{{ label_discord }}:
|
||||||
|
{% if discord|lower == 'yes' %}
|
||||||
|
<i class="fas fa-bell float-right"></i>
|
||||||
|
<noscript>✓</noscript>
|
||||||
|
{% elseif discord|lower == 'no' %}
|
||||||
|
<i class="fas fa-bell-slash float-right"></i>
|
||||||
|
<noscript>✕</noscript>
|
||||||
|
{% else %}
|
||||||
|
<i class="fas fa-question-circle float-right" title="Value from database should either be yes or no."></i>
|
||||||
|
<noscript>⁇</noscript>
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
{{ label_pushover }}:
|
{{ label_pushover }}:
|
||||||
{% if pushover|lower == 'yes' %}
|
{% if pushover|lower == 'yes' %}
|
||||||
|
|
|
@ -46,6 +46,11 @@
|
||||||
<!-- jabber -->
|
<!-- jabber -->
|
||||||
{{ macro.input_field("text", "jabber", null, "jabber", label_jabber, jabber, label_jabber, "255", "jabber_help", label_jabber_description) }}
|
{{ macro.input_field("text", "jabber", null, "jabber", label_jabber, jabber, label_jabber, "255", "jabber_help", label_jabber_description) }}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
<!-- Discord settings -->
|
||||||
|
<fieldset>
|
||||||
|
<legend>{{ label_discord }}</legend>
|
||||||
|
{{ macro.input_field("text", "discord", null, "discord", label_discord, discord, "https://discordapp.com/api/webhooks/xxxxx", "255", "discord_help", label_discord_description) }}
|
||||||
|
</fieldset>
|
||||||
<!-- Webhook settings -->
|
<!-- Webhook settings -->
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{{ label_webhook }}</legend>
|
<legend>{{ label_webhook }}</legend>
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
{{ macro.input_field("email", "email", null, "email", label_email, edit_value_email, null, "255") }}
|
{{ macro.input_field("email", "email", null, "email", label_email, edit_value_email, null, "255") }}
|
||||||
<!-- Mobile -->
|
<!-- Mobile -->
|
||||||
{{ macro.input_field("tel", "mobile", null, "mobile", label_mobile, edit_value_mobile, null, "20") }}
|
{{ macro.input_field("tel", "mobile", null, "mobile", label_mobile, edit_value_mobile, null, "20") }}
|
||||||
|
<!-- Discord -->
|
||||||
|
{{ macro.input_field("text", "discord", null, "discord", label_discord, edit_value_discord, null, "255") }}
|
||||||
<!-- Webhook_url -->
|
<!-- Webhook_url -->
|
||||||
{{ macro.input_field("text", "webhook_url", null, "webhook_url", label_webhook_url, edit_value_webhook_url, null, "255") }}
|
{{ macro.input_field("text", "webhook_url", null, "webhook_url", label_webhook_url, edit_value_webhook_url, null, "255") }}
|
||||||
<!-- Webhook_json -->
|
<!-- Webhook_json -->
|
||||||
|
|
Loading…
Reference in New Issue