Updated default template

Fixes #685.
- Updated to Bootstrap V4.
- Changed jqPlot to Chart.js.
- Updated jQuery to the V3.
- Changed Bootstrap Multiselect to Bootstrap-select.
This commit is contained in:
TimZ99 2019-02-08 15:43:22 +01:00
parent 5424976400
commit 6c14709d7c
No known key found for this signature in database
GPG Key ID: 4D8268DC68E8339D
1871 changed files with 78450 additions and 21593 deletions

View File

@ -175,9 +175,13 @@ Vendors
The following libraries are being used by PHP Server Monitor: The following libraries are being used by PHP Server Monitor:
* jqPlot - http://www.jqplot.com * Chart.js - http://chartjs.org/
* Twitter Bootstrap - http://getbootstrap.com * Twitter Bootstrap - http://getbootstrap.com
* Bootstrap Multiselect - https://github.com/davidstutz/bootstrap-multiselect * jQuery - https://jquery.com
* Font Awesome - https://fontawesome.com
* Twig - https://twig.symfony.com
* Bootstrap-select - https://github.com/snapappointments/bootstrap-select
* PHP Mailer - https://github.com/PHPMailer/PHPMailer * PHP Mailer - https://github.com/PHPMailer/PHPMailer
* php-pushover - https://github.com/kryap/php-pushover * PHP-Pushover - https://github.com/kryap/php-pushover
* Twig - http://twig.sensiolabs.org * Symfony - https://symfony.com
* Random_compat - https://github.com/paragonie/random_compat

View File

@ -92,7 +92,7 @@ $sm_lang = array(
'level' => 'Ниво на достъп', 'level' => 'Ниво на достъп',
'level_10' => 'Администратор', 'level_10' => 'Администратор',
'level_20' => 'Потребител', 'level_20' => 'Потребител',
'level_description' => '<b>Администраторите</b> имат пълен достъп: могат да управляват сървърите, потребителите и да редактират глобалните настройки.<br/><b>Потребителите</b> могат само да виждат статуса на сървърите и да обнояват информацията за даден сървър, за който им е разрешен достъп.', 'level_description' => '<b>Администраторите</b> имат пълен достъп: могат да управляват сървърите, потребителите и да редактират глобалните настройки.<br><b>Потребителите</b> могат само да виждат статуса на сървърите и да обнояват информацията за даден сървър, за който им е разрешен достъп.',
'mobile' => 'Мобилен телефон', 'mobile' => 'Мобилен телефон',
'email' => 'Имейл', 'email' => 'Имейл',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -215,11 +215,11 @@ $sm_lang = array(
'pushover_api_token_description' => 'Преди да използвате Pushover, трябва да <a href="%1$s" target="_blank" rel="noopener">регистрирате свой App</a> в техния сайт и въведете вашия App API Token тук.', 'pushover_api_token_description' => 'Преди да използвате Pushover, трябва да <a href="%1$s" target="_blank" rel="noopener">регистрирате свой App</a> в техния сайт и въведете вашия App API Token тук.',
'alert_type' => 'Изберете кога желаете да получавате известия', 'alert_type' => 'Изберете кога желаете да получавате известия',
'alert_type_description' => '<b>Промяна на сатуса:</b><br>'. 'alert_type_description' => '<b>Промяна на сатуса:</b><br>'.
'Ще получавате известие когато има промяна със връзката на даден някой от описаните сървър или сайт. От Онлайн -> Офлайн и от Офлайн -> Онлайн.<br/>'. 'Ще получавате известие когато има промяна със връзката на даден някой от описаните сървър или сайт. От Онлайн -> Офлайн и от Офлайн -> Онлайн.<br>'.
'<br/><b>Офлайн</b><br>'. '<br><b>Офлайн</b><br>'.
'Ще получите известие когато връзката до сървъра е изгубена за *ПЪРВИ ПЪТ*. Например, '. 'Ще получите известие когато връзката до сървъра е изгубена за *ПЪРВИ ПЪТ*. Например, '.
'вашия cron скрипт проверява всеки 15 минути и връзката до сървъра е изгубена в 1 часа през нощта и не работи до 6 часа сутринта '. 'вашия cron скрипт проверява всеки 15 минути и връзката до сървъра е изгубена в 1 часа през нощта и не работи до 6 часа сутринта '.
'Вие ще получите едно известие в 1 часа за това<br/>'. 'Вие ще получите едно известие в 1 часа за това<br>'.
'<br><b>Винаги:</b><br> '. '<br><b>Винаги:</b><br> '.
'Ще получавате известие при всяка проверка на Вашия крон скрипт дори когато връзката до даден сървър или сайт е била прекъсната в продължение на часове.', 'Ще получавате известие при всяка проверка на Вашия крон скрипт дори когато връзката до даден сървър или сайт е била прекъсната в продължение на часове.',
'alert_type_status' => 'Промяна на статуса', 'alert_type_status' => 'Промяна на статуса',
@ -241,7 +241,7 @@ $sm_lang = array(
'settings_log' => 'Настройки на логовете', 'settings_log' => 'Настройки на логовете',
'auto_refresh' => 'Автоматично опресняване', 'auto_refresh' => 'Автоматично опресняване',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Автоматично опресняване на страницата.<br/>'. 'Автоматично опресняване на страницата.<br>'.
'<span class="small">'. '<span class="small">'.
'Времето е в секунди, ако е 0 страницата няма да се обновява.'. 'Времето е в секунди, ако е 0 страницата няма да се обновява.'.
'</span>', '</span>',
@ -266,18 +266,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Какъв брой дни да се пазят логовете от известията и архиви за ъптайм на сървърите. Въведете 0 ако желаете логовете да не се трият.', 'log_retention_period_description' => 'Какъв брой дни да се пазят логовете от известията и архиви за ъптайм на сървърите. Въведете 0 ако желаете логовете да не се трият.',
'log_retention_days' => 'дни', 'log_retention_days' => 'дни',
), ),
// За нов ред в имейл съобщението, моля използвайте тага <br/> // За нов ред в имейл съобщението, моля използвайте тага <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Сървър \'%LABEL%\' е Офлайн: ip=%IP%, port=%PORT%. Greshka=%ERROR%', 'off_sms' => 'Сървър \'%LABEL%\' е Офлайн: ip=%IP%, port=%PORT%. Greshka=%ERROR%',
'off_email_subject' => 'Връзката до \'%LABEL%\' е ИЗГУБЕНА', 'off_email_subject' => 'Връзката до \'%LABEL%\' е ИЗГУБЕНА',
'off_email_body' => "Неуспешно свързване:<br/><br/>Сървър: %LABEL%<br/>IP адрес: %IP%<br/>Порт: %PORT%<br/>Грешка: %ERROR%<br/>Днес: %DATE%", 'off_email_body' => "Неуспешно свързване:<br><br>Сървър: %LABEL%<br>IP адрес: %IP%<br>Порт: %PORT%<br>Грешка: %ERROR%<br>Днес: %DATE%",
'off_pushover_title' => 'Връзката до \'%LABEL%\' е ИЗГУБЕНА', 'off_pushover_title' => 'Връзката до \'%LABEL%\' е ИЗГУБЕНА',
'off_pushover_message' => "Неуспешно свързване:<br/><br/>Сървър: %LABEL%<br/>IP адрес: %IP%<br/>Порт: %PORT%<br/>Грешка: %ERROR%<br/>Днес: %DATE%", 'off_pushover_message' => "Неуспешно свързване:<br><br>Сървър: %LABEL%<br>IP адрес: %IP%<br>Порт: %PORT%<br>Грешка: %ERROR%<br>Днес: %DATE%",
'on_sms' => 'Сървър \'%LABEL%\' е Онлайн: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Сървър \'%LABEL%\' е Онлайн: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'Връзката до \'%LABEL%\' е ВЪЗСТАНОВЕНА', 'on_email_subject' => 'Връзката до \'%LABEL%\' е ВЪЗСТАНОВЕНА',
'on_email_body' => "Връзката до '%LABEL%' беше ВЪЗСТАНОВЕНА, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Сървър: %LABEL%<br/>IP адрес: %IP%<br/>Порт: %PORT%<br/>Днес: %DATE%", 'on_email_body' => "Връзката до '%LABEL%' беше ВЪЗСТАНОВЕНА, it was down for %LAST_OFFLINE_DURATION%:<br><br>Сървър: %LABEL%<br>IP адрес: %IP%<br>Порт: %PORT%<br>Днес: %DATE%",
'on_pushover_title' => 'Връзката до \'%LABEL%\' е ВЪЗСТАНОВЕНА', 'on_pushover_title' => 'Връзката до \'%LABEL%\' е ВЪЗСТАНОВЕНА',
'on_pushover_message' => "Връзката до '%LABEL%' беше ВЪЗСТАНОВЕНА, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Сървър: %LABEL%<br/>IP адрес: %IP%<br/>Порт: %PORT%<br/>Днес: %DATE%", 'on_pushover_message' => "Връзката до '%LABEL%' беше ВЪЗСТАНОВЕНА, it was down for %LAST_OFFLINE_DURATION%:<br><br>Сървър: %LABEL%<br>IP адрес: %IP%<br>Порт: %PORT%<br>Днес: %DATE%",
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Добре дошъл, %user_name%', 'welcome_usermenu' => 'Добре дошъл, %user_name%',
@ -294,7 +294,7 @@ $sm_lang = array(
'password_forgot' => 'Забравили сте паролата си?', 'password_forgot' => 'Забравили сте паролата си?',
'password_reset' => 'Възстановяване на паролата', 'password_reset' => 'Възстановяване на паролата',
'password_reset_email_subject' => 'Възстановяване на парола за PHP Сървър Мониторинг', 'password_reset_email_subject' => 'Възстановяване на парола за PHP Сървър Мониторинг',
'password_reset_email_body' => 'За да възстановите паролата си е нужно да кликнете на линка по-долу. Валидността на линка е един час.<br/><br/>%link%', 'password_reset_email_body' => 'За да възстановите паролата си е нужно да кликнете на линка по-долу. Валидността на линка е един час.<br><br>%link%',
'error_user_incorrect' => 'Потребителят не може да бъде намерен.', 'error_user_incorrect' => 'Потребителят не може да бъде намерен.',
'error_login_incorrect' => 'Информацията е грешна.', 'error_login_incorrect' => 'Информацията е грешна.',
'error_login_passwords_nomatch' => 'Паролите не съвпадат.', 'error_login_passwords_nomatch' => 'Паролите не съвпадат.',

View File

@ -93,7 +93,7 @@ $sm_lang = array(
'level' => 'Oprávnění', 'level' => 'Oprávnění',
'level_10' => 'Administrátor', 'level_10' => 'Administrátor',
'level_20' => 'Uživatel', 'level_20' => 'Uživatel',
'level_description' => '<b>Administrátor</b> má plný přístup: může spravovat servery, uživatele a upravit globální konfiguraci.<br/><b>Uživatel</b> má práva pouze na čtení a spustit aktualizaci serverů, které má přiřazeny.', 'level_description' => '<b>Administrátor</b> má plný přístup: může spravovat servery, uživatele a upravit globální konfiguraci.<br><b>Uživatel</b> má práva pouze na čtení a spustit aktualizaci serverů, které má přiřazeny.',
'mobile' => 'Mobil', 'mobile' => 'Mobil',
'email' => 'E-mail', 'email' => 'E-mail',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -137,7 +137,8 @@ $sm_lang = array(
'domain' => 'Doména/IP', 'domain' => 'Doména/IP',
'timeout' => 'Časový limit', 'timeout' => 'Časový limit',
'timeout_description' => 'Počet vteřin čekání na odpověď serveru.', 'timeout_description' => 'Počet vteřin čekání na odpověď serveru.',
'authentication_settings' => 'Nastavení autentizace (volitelný)', 'authentication_settings' => 'Nastavení autentizace',
'optional' => 'volitelný',
'website_username' => 'Uživatelské jméno', 'website_username' => 'Uživatelské jméno',
'website_username_description' => 'Uživatelské jméno pro přístup na stránku. (Pouze Apache autorizace je podporovaná.)', 'website_username_description' => 'Uživatelské jméno pro přístup na stránku. (Pouze Apache autorizace je podporovaná.)',
'website_password' => 'Heslo', 'website_password' => 'Heslo',
@ -228,9 +229,9 @@ $sm_lang = array(
'pushover_api_token_description' => 'Pře použitím Pushoveru se musíte <a href="%1$s" target="_blank" rel="noopener">registrovat</a> a získat API Token.', 'pushover_api_token_description' => 'Pře použitím Pushoveru se musíte <a href="%1$s" target="_blank" rel="noopener">registrovat</a> a získat API Token.',
'alert_type' => 'Zvolte kdy si přejete být upozorněni.', 'alert_type' => 'Zvolte kdy si přejete být upozorněni.',
'alert_type_description' => '<b>Změna stavu:</b> '. 'alert_type_description' => '<b>Změna stavu:</b> '.
'Obdržíte upozornění při změně stavu, tedy:online -> offline nebo offline -> online.<br/>'. 'Obdržíte upozornění při změně stavu, tedy:online -> offline nebo offline -> online.<br>'.
'<br /><b>Offline:</b> '. '<br /><b>Offline:</b> '.
'Obdržíte upozornění, kdy server přejde poprvé do offline stavu. Například, pokud je cron nastaven na 15 minut a sledovaný server bude offline mezi 01:00 a 06:00. Obdržíte upozornění pouze v 01:00. <br/>'. 'Obdržíte upozornění, kdy server přejde poprvé do offline stavu. Například, pokud je cron nastaven na 15 minut a sledovaný server bude offline mezi 01:00 a 06:00. Obdržíte upozornění pouze v 01:00. <br>'.
'<br><b>Vždy:</b> '. '<br><b>Vždy:</b> '.
'Obdržíte upozornění při každém spuštění kontroly, tedy i pokud bude server offline několik hodin.', 'Obdržíte upozornění při každém spuštění kontroly, tedy i pokud bude server offline několik hodin.',
'alert_type_status' => 'Změna stavu', 'alert_type_status' => 'Změna stavu',
@ -252,7 +253,7 @@ $sm_lang = array(
'settings_log' => 'Nastavení logu', 'settings_log' => 'Nastavení logu',
'auto_refresh' => 'Automaticky obnovit', 'auto_refresh' => 'Automaticky obnovit',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Automaticky obnovit stránku Servery.<br/>'. 'Automaticky obnovit stránku Servery.<br>'.
'<span class="small">'. '<span class="small">'.
'Čas v sekundách, 0 pro vypnutí automatického obnovení.'. 'Čas v sekundách, 0 pro vypnutí automatického obnovení.'.
'</span>', '</span>',
@ -277,18 +278,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Počet dnů po které budou zachovány logy upozornění. Vložte 0 pro vypnutí autorotace.', 'log_retention_period_description' => 'Počet dnů po které budou zachovány logy upozornění. Vložte 0 pro vypnutí autorotace.',
'log_retention_days' => 'dnů', 'log_retention_days' => 'dnů',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%',
'off_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je offline', 'off_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je offline',
'off_email_body' => 'Nebylo možné spojit se se serverem:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Chyba: %ERROR%<br/>Datum: %DATE%', 'off_email_body' => 'Nebylo možné spojit se se serverem:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Chyba: %ERROR%<br>Datum: %DATE%',
'off_pushover_title' => 'Server \'%LABEL%\' je offline', 'off_pushover_title' => 'Server \'%LABEL%\' je offline',
'off_pushover_message' => 'Nebylo možné spojit se se serverem:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Chyba: %ERROR%<br/>Datum: %DATE%', 'off_pushover_message' => 'Nebylo možné spojit se se serverem:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Chyba: %ERROR%<br>Datum: %DATE%',
'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je online', 'on_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je online',
'on_email_body' => "Server '%LABEL%' je opět online, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Datum: %DATE%", 'on_email_body' => "Server '%LABEL%' je opět online, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Datum: %DATE%",
'on_pushover_title' => 'Server \'%LABEL%\' je online', 'on_pushover_title' => 'Server \'%LABEL%\' je online',
'on_pushover_message' => 'Server \'%LABEL%\' je znovu online, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Datum: %DATE%', 'on_pushover_message' => 'Server \'%LABEL%\' je znovu online, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Datum: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Vítejte, %user_name%', 'welcome_usermenu' => 'Vítejte, %user_name%',
@ -305,7 +306,7 @@ $sm_lang = array(
'password_forgot' => 'Zapomenuté heslo?', 'password_forgot' => 'Zapomenuté heslo?',
'password_reset' => 'Obnovit heslo', 'password_reset' => 'Obnovit heslo',
'password_reset_email_subject' => 'Obnovit heslo pro PHP Server Monitor', 'password_reset_email_subject' => 'Obnovit heslo pro PHP Server Monitor',
'password_reset_email_body' => 'Použijte následující odkaz pro obnovení hesla. Odkaz je platný jednu hodinu.<br/><br/>%link%', 'password_reset_email_body' => 'Použijte následující odkaz pro obnovení hesla. Odkaz je platný jednu hodinu.<br><br>%link%',
'error_user_incorrect' => 'Zadané uživatelské jméno nebylo nalezeno.', 'error_user_incorrect' => 'Zadané uživatelské jméno nebylo nalezeno.',
'error_login_incorrect' => 'Přihlášení nebylo úspěšné.', 'error_login_incorrect' => 'Přihlášení nebylo úspěšné.',
'error_login_passwords_nomatch' => 'Zadaná hesla neodpovídají.', 'error_login_passwords_nomatch' => 'Zadaná hesla neodpovídají.',

View File

@ -90,7 +90,7 @@ $sm_lang = array(
'level' => 'Niveau', 'level' => 'Niveau',
'level_10' => 'Administrator', 'level_10' => 'Administrator',
'level_20' => 'Bruger', 'level_20' => 'Bruger',
'level_description' => '<b>Administratorer</b> har fuld adgang: De kan styre servere, brugere og indstillinger.<br/><b>Brugere</b> kan kun se og opdatere servere som er de har adgang til.', 'level_description' => '<b>Administratorer</b> har fuld adgang: De kan styre servere, brugere og indstillinger.<br><b>Brugere</b> kan kun se og opdatere servere som er de har adgang til.',
'mobile' => 'Mobil', 'mobile' => 'Mobil',
'email' => 'E-mail', 'email' => 'E-mail',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -213,11 +213,11 @@ $sm_lang = array(
'pushover_api_token_description' => 'Før du kan benytte Pushover, skal du <a href="%1$s" target="_blank" rel="noopener">registrere en app</a> på deres website og indtaste en App API Token her.', 'pushover_api_token_description' => 'Før du kan benytte Pushover, skal du <a href="%1$s" target="_blank" rel="noopener">registrere en app</a> på deres website og indtaste en App API Token her.',
'alert_type' => 'Vælg hvornår du vil modtage beskeden', 'alert_type' => 'Vælg hvornår du vil modtage beskeden',
'alert_type_description' => '<b>Status ændring:</b> '. 'alert_type_description' => '<b>Status ændring:</b> '.
'Du vil modtage en notifkation når en server har en ændring i status. Fra online -> offline eller offline -> online.<br/>'. 'Du vil modtage en notifkation når en server har en ændring i status. Fra online -> offline eller offline -> online.<br>'.
'<br /><b>Offline:</b> '. '<br /><b>Offline:</b> '.
'Du vil modtage en meddelelse, når en server går offline for første gang. Eksempelvis '. 'Du vil modtage en meddelelse, når en server går offline for første gang. Eksempelvis '.
'hvis dit cronjob kører hvert kvarter, og din server går ned kl 01 og kommer først op kl 06, '. 'hvis dit cronjob kører hvert kvarter, og din server går ned kl 01 og kommer først op kl 06, '.
' vil du kun modtage en mail kl 01.<br/>'. ' vil du kun modtage en mail kl 01.<br>'.
'<br><b>Altid:</b> '. '<br><b>Altid:</b> '.
'Du vil modtage en besked, hver gang scriptet kører og et websted er nede, selvom site har været offline i flere timer.', 'Du vil modtage en besked, hver gang scriptet kører og et websted er nede, selvom site har været offline i flere timer.',
'alert_type_status' => 'Status ændret', 'alert_type_status' => 'Status ændret',
@ -239,7 +239,7 @@ $sm_lang = array(
'settings_log' => 'Log indstillinger', 'settings_log' => 'Log indstillinger',
'auto_refresh' => 'Genopfrisk automatisk', 'auto_refresh' => 'Genopfrisk automatisk',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Genopfrisk automatisk serversider.<br/>'. 'Genopfrisk automatisk serversider.<br>'.
'<span class="small">'. '<span class="small">'.
'Tid i sekunder. Hvis 0 vil siden ikke genopfriske automatisk'. 'Tid i sekunder. Hvis 0 vil siden ikke genopfriske automatisk'.
'</span>', '</span>',
@ -264,18 +264,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Antal dage over hvor længe logs med notifikationer og arkiverede serveres oppetid skal gemmes. Indtast 0 for at deaktivere logoprydning.', 'log_retention_period_description' => 'Antal dage over hvor længe logs med notifikationer og arkiverede serveres oppetid skal gemmes. Indtast 0 for at deaktivere logoprydning.',
'log_retention_days' => 'dage', 'log_retention_days' => 'dage',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Serveren \'%LABEL%\' er NEDE: ip=%IP%, port=%PORT%. Fejl=%ERROR%', 'off_sms' => 'Serveren \'%LABEL%\' er NEDE: ip=%IP%, port=%PORT%. Fejl=%ERROR%',
'off_email_subject' => 'VIGTIGT: Server \'%LABEL%\' er NEDE', 'off_email_subject' => 'VIGTIGT: Server \'%LABEL%\' er NEDE',
'off_email_body' => "Det lykkedes ikke at oprette forbindelse til følgende server:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Fejl: %ERROR%<br/>Dato: %DATE%", 'off_email_body' => "Det lykkedes ikke at oprette forbindelse til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fejl: %ERROR%<br>Dato: %DATE%",
'off_pushover_title' => 'Serveren \'%LABEL%\' er NEDE', 'off_pushover_title' => 'Serveren \'%LABEL%\' er NEDE',
'off_pushover_message' => "Det lykkedes ikke at oprette forbindelse til følgende server:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Fejl: %ERROR%<br/>Dato: %DATE%", 'off_pushover_message' => "Det lykkedes ikke at oprette forbindelse til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fejl: %ERROR%<br>Dato: %DATE%",
'on_sms' => 'Serveren \'%LABEL%\' KØRER: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Serveren \'%LABEL%\' KØRER: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'VIGTIGT: Serveren \'%LABEL%\' KØRER', 'on_email_subject' => 'VIGTIGT: Serveren \'%LABEL%\' KØRER',
'on_email_body' => "Serveren '%LABEL%' kører igen, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Dato: %DATE%", 'on_email_body' => "Serveren '%LABEL%' kører igen, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato: %DATE%",
'on_pushover_title' => 'Serveren \'%LABEL%\' KØRER', 'on_pushover_title' => 'Serveren \'%LABEL%\' KØRER',
'on_pushover_message' => "Serveren '%LABEL%' kører igen, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Dato: %DATE%", 'on_pushover_message' => "Serveren '%LABEL%' kører igen, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato: %DATE%",
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Velkommen, %user_name%', 'welcome_usermenu' => 'Velkommen, %user_name%',
@ -292,7 +292,7 @@ $sm_lang = array(
'password_forgot' => 'Glemt adgangskode?', 'password_forgot' => 'Glemt adgangskode?',
'password_reset' => 'Nulstil adgangskode', 'password_reset' => 'Nulstil adgangskode',
'password_reset_email_subject' => 'Nulstil din adgangskode for PHP Server Monitor', 'password_reset_email_subject' => 'Nulstil din adgangskode for PHP Server Monitor',
'password_reset_email_body' => 'Brug venligst følgende link for at nulstille din adgangskode. Bemærk at linkets gyldighed udløber efter en time.<br/><br/>%link%', 'password_reset_email_body' => 'Brug venligst følgende link for at nulstille din adgangskode. Bemærk at linkets gyldighed udløber efter en time.<br><br>%link%',
'error_user_incorrect' => 'Det angivet brugernavn kunne ikke findes.', 'error_user_incorrect' => 'Det angivet brugernavn kunne ikke findes.',
'error_login_incorrect' => 'Oplysningerne stemmer ikke overens.', 'error_login_incorrect' => 'Oplysningerne stemmer ikke overens.',
'error_login_passwords_nomatch' => 'De angivne adgangskoder er ikke ens.', 'error_login_passwords_nomatch' => 'De angivne adgangskoder er ikke ens.',

View File

@ -92,7 +92,7 @@ $sm_lang = array(
'level' => 'Berechtigungsstufe', 'level' => 'Berechtigungsstufe',
'level_10' => 'Administrator', 'level_10' => 'Administrator',
'level_20' => 'Benutzer', 'level_20' => 'Benutzer',
'level_description' => '<b>Administratoren</b> haben vollen Zugriff — sie können Webseiten, Benutzer und globale Einstellungen verwalten.<br/><b>Benutzer</b> können nur (für ihnen zugeordnete Webseiten) Analysedaten einsehen und deren Aktualisierung veranlassen.', 'level_description' => '<b>Administratoren</b> haben vollen Zugriff — sie können Webseiten, Benutzer und globale Einstellungen verwalten.<br><b>Benutzer</b> können nur (für ihnen zugeordnete Webseiten) Analysedaten einsehen und deren Aktualisierung veranlassen.',
'mobile' => 'Mobil', 'mobile' => 'Mobil',
'email' => 'E-Mail', 'email' => 'E-Mail',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -216,12 +216,12 @@ $sm_lang = array(
'pushover_api_token_description' => 'Bevor Sie Pushover verwenden können, müssen Sie Ihre <a href="%1$s" target="_blank" rel="noopener">Anwendung hier registrieren</a> und Ihren Anwendungs-API-Token hier eingeben.', 'pushover_api_token_description' => 'Bevor Sie Pushover verwenden können, müssen Sie Ihre <a href="%1$s" target="_blank" rel="noopener">Anwendung hier registrieren</a> und Ihren Anwendungs-API-Token hier eingeben.',
'alert_type' => 'Wann möchten Sie benachrichtigt werden?', 'alert_type' => 'Wann möchten Sie benachrichtigt werden?',
'alert_type_description' => '<b>Status geändert:</b> '. 'alert_type_description' => '<b>Status geändert:</b> '.
'... wenn sich der Status ändert<br/>'. '... wenn sich der Status ändert<br>'.
'z. B. online -> offline oder offline -> online.<br/>'. 'z. B. online -> offline oder offline -> online.<br>'.
'<br/><b>Offline: </b>'. '<br><b>Offline: </b>'.
'Sie bekommen eine Benachrichtigung, wenn ein Server offline ist.<br/>'. 'Sie bekommen eine Benachrichtigung, wenn ein Server offline ist.<br>'.
'Es wird nur eine Mitteilung versendet.<br/>'. 'Es wird nur eine Mitteilung versendet.<br>'.
'<br/><b>Immer: </b>'. '<br><b>Immer: </b>'.
'Sie erhalten jedes Mal eine Benachrichtigung, sobald der CronJob oder das Skript ausgeführt werden, auch wenn der Dienst mehrere Stunden offline sein sollte.', 'Sie erhalten jedes Mal eine Benachrichtigung, sobald der CronJob oder das Skript ausgeführt werden, auch wenn der Dienst mehrere Stunden offline sein sollte.',
'alert_type_status' => 'Status geändert', 'alert_type_status' => 'Status geändert',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
@ -242,7 +242,7 @@ $sm_lang = array(
'settings_log' => 'Protokollierungseinstellungen', 'settings_log' => 'Protokollierungseinstellungen',
'auto_refresh' => 'Automatische Aktualisierung', 'auto_refresh' => 'Automatische Aktualisierung',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Automatische Aktualisierung der Server-Übersichtsseite<br/>'. 'Automatische Aktualisierung der Server-Übersichtsseite<br>'.
'<span class="small">'. '<span class="small">'.
'Zeit in Sekunden - die Ziffer \'0\' deaktiviert die automatische Aktualisierung.'. 'Zeit in Sekunden - die Ziffer \'0\' deaktiviert die automatische Aktualisierung.'.
'</span>', '</span>',
@ -267,18 +267,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Anzahl in Tagen bis zur automatischen Bereinigung/Löschung sämtlicher Protokollierungsdaten im System. Geben Sie die Ziffer \'0\' ein, um die automatische Bereinigung/Löschung zu deaktivieren.', 'log_retention_period_description' => 'Anzahl in Tagen bis zur automatischen Bereinigung/Löschung sämtlicher Protokollierungsdaten im System. Geben Sie die Ziffer \'0\' ein, um die automatische Bereinigung/Löschung zu deaktivieren.',
'log_retention_days' => 'Tage', 'log_retention_days' => 'Tage',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Dienst/Webseite \'%LABEL%\' ist offline: ip=%IP%, port=%PORT%. Fehler=%ERROR%', 'off_sms' => 'Dienst/Webseite \'%LABEL%\' ist offline: ip=%IP%, port=%PORT%. Fehler=%ERROR%',
'off_email_subject' => 'Warnung: Dienst/Webseite \'%LABEL%\' ist offline.', 'off_email_subject' => 'Warnung: Dienst/Webseite \'%LABEL%\' ist offline.',
'off_email_body' => "Kann keine funktionierende Verbindung zum Dienst bzw. der Webseite aufbauen:<br/><br/>Dienst/Webseite: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Fehler: %ERROR%<br/>Datum: %DATE% Uhr", 'off_email_body' => "Kann keine funktionierende Verbindung zum Dienst bzw. der Webseite aufbauen:<br><br>Dienst/Webseite: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fehler: %ERROR%<br>Datum: %DATE% Uhr",
'off_pushover_title' => 'Dienst/Webseite \'%LABEL%\' ist offline.', 'off_pushover_title' => 'Dienst/Webseite \'%LABEL%\' ist offline.',
'off_pushover_message' => "Kann keine funktionierende Verbindung zum Dienst bzw. der Webseite aufbauen:<br/><br/>Dienst/Webseite: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Fehler: %ERROR%<br/>Datum: %DATE% Uhr", 'off_pushover_message' => "Kann keine funktionierende Verbindung zum Dienst bzw. der Webseite aufbauen:<br><br>Dienst/Webseite: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fehler: %ERROR%<br>Datum: %DATE% Uhr",
'on_sms' => 'Dienst/Webseite \'%LABEL%\' ist wieder online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Dienst/Webseite \'%LABEL%\' ist wieder online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'Hinweis: Dienst/Webseite \'%LABEL%\' ist wieder online.', 'on_email_subject' => 'Hinweis: Dienst/Webseite \'%LABEL%\' ist wieder online.',
'on_email_body' => "Dienst/Webseite '%LABEL%' ist wieder erreichbar, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Datum: %DATE% Uhr", 'on_email_body' => "Dienst/Webseite '%LABEL%' ist wieder erreichbar, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Datum: %DATE% Uhr",
'on_pushover_title' => 'Dienst/Webseite \'%LABEL%\' ist wieder online.', 'on_pushover_title' => 'Dienst/Webseite \'%LABEL%\' ist wieder online.',
'on_pushover_message' => "Dienst/Webseite '%LABEL%' ist wieder erreichbar, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Datum: %DATE% Uhr", 'on_pushover_message' => "Dienst/Webseite '%LABEL%' ist wieder erreichbar, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Datum: %DATE% Uhr",
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => '%user_name%', 'welcome_usermenu' => '%user_name%',
@ -295,7 +295,7 @@ $sm_lang = array(
'password_forgot' => 'Passwort vergessen?', 'password_forgot' => 'Passwort vergessen?',
'password_reset' => 'Passwort zurücksetzen', 'password_reset' => 'Passwort zurücksetzen',
'password_reset_email_subject' => 'Setzen Sie Ihr Zugangspasswort für den Server Monitor', 'password_reset_email_subject' => 'Setzen Sie Ihr Zugangspasswort für den Server Monitor',
'password_reset_email_body' => 'Benutzen Sie bitte den folgenden Link, um Ihr Zugangspasswort zurückzusetzen. Bitte beachten Sie: Der Link verfällt in 1 Stunde.<br/><br/>%link%', 'password_reset_email_body' => 'Benutzen Sie bitte den folgenden Link, um Ihr Zugangspasswort zurückzusetzen. Bitte beachten Sie: Der Link verfällt in 1 Stunde.<br><br>%link%',
'error_user_incorrect' => 'Der angegebene Benutzername konnte nicht gefunden werden.', 'error_user_incorrect' => 'Der angegebene Benutzername konnte nicht gefunden werden.',
'error_login_incorrect' => 'Die angegebenen Informationen sind leider nicht korrekt.', 'error_login_incorrect' => 'Die angegebenen Informationen sind leider nicht korrekt.',
'error_login_passwords_nomatch' => 'Die angegebenen Passwörter stimmen nicht überein.', 'error_login_passwords_nomatch' => 'Die angegebenen Passwörter stimmen nicht überein.',

View File

@ -37,13 +37,14 @@ $sm_lang = array(
'save' => 'Save', 'save' => 'Save',
'edit' => 'Edit', 'edit' => 'Edit',
'delete' => 'Delete', 'delete' => 'Delete',
'view' => 'View',
'date' => 'Date', 'date' => 'Date',
'message' => 'Message', 'message' => 'Message',
'yes' => 'Yes', 'yes' => 'Yes',
'no' => 'No', 'no' => 'No',
'insert' => 'Insert', 'insert' => 'Insert',
'add_new' => 'Add new', 'add_new' => 'Add new',
'update_available' => 'A new version ({version}) is available from <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</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.',
'back_to_top' => 'Back to top', 'back_to_top' => 'Back to top',
'go_back' => 'Go back', 'go_back' => 'Go back',
'ok' => 'OK', 'ok' => 'OK',
@ -51,7 +52,6 @@ $sm_lang = array(
'cancel' => 'Cancel', 'cancel' => 'Cancel',
'none' => 'None', 'none' => 'None',
'activate' => 'Activate', 'activate' => 'Activate',
'advanced' => 'Advanced',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php // date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
@ -76,8 +76,9 @@ $sm_lang = array(
'minutes' => 'minutes', 'minutes' => 'minutes',
'second' => 'second', 'second' => 'second',
'seconds' => 'seconds', 'seconds' => 'seconds',
'online' => 'online', 'current' => 'current',
'offline' => 'offline', 'settings' => 'Settings',
'search' => 'Search'
), ),
'menu' => array( 'menu' => array(
'config' => 'Config', 'config' => 'Config',
@ -98,7 +99,7 @@ $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 global configuration.<br/><b>Users</b> can only view and run the updater for the servers that have been assigned to them.', '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.',
'mobile' => 'Mobile', 'mobile' => 'Mobile',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -153,13 +154,15 @@ $sm_lang = array(
'domain' => 'Domain/IP', 'domain' => 'Domain/IP',
'timeout' => 'Timeout', 'timeout' => 'Timeout',
'timeout_description' => 'Number of seconds to wait for the server to respond.', 'timeout_description' => 'Number of seconds to wait for the server to respond.',
'authentication_settings' => 'Authentication Settings (Optional)', 'authentication_settings' => 'Authentication Settings',
'optional' => 'Optional',
'website_username' => 'Username', 'website_username' => 'Username',
'website_username_description' => 'Username to access the site. (Only Apache authentication is supported.)', 'website_username_description' => 'Username to access the site. (Only Apache authentication is supported.)',
'website_password' => 'Password', 'website_password' => 'Password',
'website_password_description' => 'Password to access the site. The password is encrypted in the database.', 'website_password_description' => 'Password to access the site. The password is encrypted in the database.',
'fieldset_monitoring' => 'Monitoring', 'fieldset_monitoring' => 'Monitoring',
'fieldset_permissions' => 'Permissions', 'fieldset_permissions' => 'Permissions',
'permissions' => 'Server will be visible for the following users',
'port' => 'Port', 'port' => 'Port',
'custom_port' => 'Custom Port', 'custom_port' => 'Custom Port',
'popular_ports' => 'Popular Ports', 'popular_ports' => 'Popular Ports',
@ -167,7 +170,7 @@ $sm_lang = array(
'custom_request_method' => 'Custom request method', 'custom_request_method' => 'Custom request method',
'popular_request_methods' => 'Popular request methods', 'popular_request_methods' => 'Popular request methods',
'post_field' => 'Post field', 'post_field' => 'Post field',
'post_field_description' => 'The data that will be send using the request method above. Example: param1=val1&amp;param2=val2&...', 'post_field_description' => 'The data that will be send using the request method above.',
'please_select' => 'Please select', 'please_select' => 'Please select',
'type' => 'Type', 'type' => 'Type',
'type_website' => 'Website', 'type_website' => 'Website',
@ -180,16 +183,18 @@ $sm_lang = array(
'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 online by default. Seperate with |. Example: 401|403.', 'allow_http_status_description' => 'Mark website as online. HTTP Status codes lower then 400 are marked as online by default. Seperate with |.',
'header' => 'Header', 'header_name' => 'Header name',
'header_name_description' => 'Header name (case-sensitive)', 'header_value' => 'Header value',
'header_value_description' => 'Header value. Regular expressions are allowed.', 'header_name_description' => 'Case-sensitive.',
'header_value_description' => 'Regular expressions are allowed.',
'last_check' => 'Last check', 'last_check' => 'Last check',
'last_online' => 'Last online', 'last_online' => 'Last online',
'last_offline' => 'Last offline', 'last_offline' => 'Last offline',
'last_output' => 'Last positive output', 'last_output' => 'Last positive output',
'last_error' => 'Last error', 'last_error' => 'Last error',
'last_error_output' => 'Last error output', 'last_error_output' => 'Last error output',
'output' => 'Output',
'monitoring' => 'Monitoring', 'monitoring' => 'Monitoring',
'no_monitoring' => 'No monitoring', 'no_monitoring' => 'No monitoring',
'email' => 'Email', 'email' => 'Email',
@ -210,6 +215,8 @@ $sm_lang = array(
'latency_max' => 'Latency (maximum)', 'latency_max' => 'Latency (maximum)',
'latency_min' => 'Latency (minimum)', 'latency_min' => 'Latency (minimum)',
'latency_avg' => 'Latency (average)', 'latency_avg' => 'Latency (average)',
'online' => 'online',
'offline' => 'offline',
'uptime' => 'Uptime', 'uptime' => 'Uptime',
'year' => 'Year', 'year' => 'Year',
'month' => 'Month', 'month' => 'Month',
@ -274,22 +281,22 @@ $sm_lang = array(
'telegram_api_token_description' => 'Before you can use Telegram, you need to get a API token. Visit the <a href="http://docs.phpservermonitor.org/">documentation</a> for help.', 'telegram_api_token_description' => 'Before you can use Telegram, you need to get a API token. Visit the <a href="http://docs.phpservermonitor.org/">documentation</a> for help.',
'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> '. '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/>'. '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> '. '<br><b>Offline:</b> '.
'You will receive a notification when a server goes offline for the *FIRST TIME ONLY*. For example, '. '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. '. '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/>'. 'You will get 1 notification at 1 am and that\'s it.<br>'.
'<br><b>Always:</b> '. '<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.', '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 1 single notification. (This does not affect SMS notifications.)', 'combine_notifications_description' => 'Reduces the amount of notification by combining the notifications into 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' => '<b>Format:</b> 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 Notification settings are passed.', 'log_status_description' => 'If log status is set to TRUE, the monitor will log the event whenever the 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_pushover' => 'Log pushover messages sent by the script', 'log_pushover' => 'Log pushover messages sent by the script',
@ -308,7 +315,7 @@ $sm_lang = array(
'settings_proxy' => 'Proxy settings', 'settings_proxy' => 'Proxy settings',
'auto_refresh' => 'Auto-refresh', 'auto_refresh' => 'Auto-refresh',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Auto-refresh servers page.<br/>'. 'Auto-refresh servers page.<br>'.
'<span class="small">'. '<span class="small">'.
'Time in seconds, if 0 the page won\'t refresh.'. 'Time in seconds, if 0 the page won\'t refresh.'.
'</span>', '</span>',
@ -338,31 +345,31 @@ $sm_lang = array(
'log_retention_period_description' => 'Number of days to keep logs of notifications and archives of server uptime. Enter 0 to disable log cleanup.', 'log_retention_period_description' => 'Number of days to keep logs of notifications and archives of server uptime. Enter 0 to disable log cleanup.',
'log_retention_days' => 'days', 'log_retention_days' => 'days',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'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_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_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: %IP%<br/>Port: %PORT%<br/>Error: %ERROR%<br/>Date: %DATE%", '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%",
'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: %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 %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Date: %DATE%", '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: %DATE%",
'on_pushover_title' => 'Server \'%LABEL%\' is RUNNING', 'on_pushover_title' => 'Server \'%LABEL%\' is RUNNING',
'on_pushover_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_pushover_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_telegram_message' => 'Server \'%LABEL%\' is running again, it was down for :<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Downtime: %LAST_OFFLINE_DURATION%<br/>Date: %DATE%', 'on_telegram_message' => 'Server \'%LABEL%\' is running again, it was down for :<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Downtime: %LAST_OFFLINE_DURATION%<br>Date: %DATE%',
'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>", '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>",
'combi_off_pushover_message' => "<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error: %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: %ERROR%</li><li>Date: %DATE%</li></ul>",
'combi_off_telegram_message' => "- Server: %LABEL%<br/>- IP: %IP%<br/>- Port: %PORT%<br/>- Error: %ERROR%<br/>- Date: %DATE%<br/><br/>", 'combi_off_telegram_message' => "- Server: %LABEL%<br>- IP: %IP%<br>- Port: %PORT%<br>- Error: %ERROR%<br>- Date: %DATE%<br><br>",
'combi_on_email_message' => "<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Downtime: %LAST_OFFLINE_DURATION%</li><li>Date: %DATE%</li></ul>", 'combi_on_email_message' => "<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Downtime: %LAST_OFFLINE_DURATION%</li><li>Date: %DATE%</li></ul>",
'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: %DATE%</li></ul>', '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: %DATE%</li></ul>',
'combi_on_telegram_message' => '- Server: %LABEL%<br/>- IP: %IP%<br/>- Port: %PORT%<br/>- Downtime: %LAST_OFFLINE_DURATION%<br/>- Date: %DATE%<br/><br/>', 'combi_on_telegram_message' => '- Server: %LABEL%<br>- IP: %IP%<br>- Port: %PORT%<br>- Downtime: %LAST_OFFLINE_DURATION%<br>- Date: %DATE%<br><br>',
'combi_email_subject' => 'IMPORTANT: \'%UP%\' servers UP again, \'%DOWN%\' servers DOWN', 'combi_email_subject' => 'IMPORTANT: \'%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 servers are up again:</b><br/>%UP_SERVERS%', '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_pushover_message' => '<b>The following servers went down:</b><br/>%DOWN_SERVERS%<br/><b>The following servers are up again:</b><br/>%UP_SERVERS%', 'combi_pushover_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following servers are up again:</b><br>%UP_SERVERS%',
'combi_telegram_message' => '<b>The following servers went down:</b><br/>%DOWN_SERVERS%<br/><b>The following servers are up again:</b><br/>%UP_SERVERS%', 'combi_telegram_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following servers are up again:</b><br>%UP_SERVERS%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Welcome, %user_name%', 'welcome_usermenu' => 'Welcome, %user_name%',
@ -379,7 +386,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 in 1 hour.<br/><br/>%link%', 'password_reset_email_body' => 'Please use the following link to reset your password. Please note it expires 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.',

View File

@ -94,7 +94,7 @@ $sm_lang = array(
'level' => 'Nivel', 'level' => 'Nivel',
'level_10' => 'Administrador', 'level_10' => 'Administrador',
'level_20' => 'Usuarios', 'level_20' => 'Usuarios',
'level_description' => '<b>Administradores</b> tienen acceso completo: pueden administrar servidores, usuarios y editar la configuración global.<br/>Los <b>usuarios</b> sólo pueden ver y ejecutar el programa de actualización para los servidores que se han asignado a los mismos.', 'level_description' => '<b>Administradores</b> tienen acceso completo: pueden administrar servidores, usuarios y editar la configuración global.<br>Los <b>usuarios</b> sólo pueden ver y ejecutar el programa de actualización para los servidores que se han asignado a los mismos.',
'mobile' => 'Móvil', 'mobile' => 'Móvil',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -217,10 +217,10 @@ $sm_lang = array(
'pushover_api_token_description' => 'Antes de poder utilizar Pushover, necesita <a href="%1$s" target="_blank" rel="noopener"> registrar </a> su aplicación en la página web e ingresar el token API.', 'pushover_api_token_description' => 'Antes de poder utilizar Pushover, necesita <a href="%1$s" target="_blank" rel="noopener"> registrar </a> su aplicación en la página web e ingresar el token API.',
'alert_type' => '¿Cuándo desea recibir notificaciones ?', 'alert_type' => '¿Cuándo desea recibir notificaciones ?',
'alert_type_description' => '<b>... Al cambiar el estado:</b> '. 'alert_type_description' => '<b>... Al cambiar el estado:</b> '.
'p.ej. en línea -> fuera de línea o fuera de línea -> en línea.<br/>'. 'p.ej. en línea -> fuera de línea o fuera de línea -> en línea.<br>'.
'<br /><b>Fuera de Línea:</b> '. '<br /><b>Fuera de Línea:</b> '.
'Recibirá una notificación cuando el servidor esté fuera de línea.'. 'Recibirá una notificación cuando el servidor esté fuera de línea.'.
'Se envia un sólo mensaje cuando se detecte la caída por primera vez.<br/>'. 'Se envia un sólo mensaje cuando se detecte la caída por primera vez.<br>'.
'<br><b>Siempre:</b> '. '<br><b>Siempre:</b> '.
'Se le enviará una notificación cada vez que se ejecuta el script '. 'Se le enviará una notificación cada vez que se ejecuta el script '.
'aunqué el servicio puede haber estado fuera de línea por varias horas.', 'aunqué el servicio puede haber estado fuera de línea por varias horas.',
@ -243,7 +243,7 @@ $sm_lang = array(
'settings_log' => 'Log', 'settings_log' => 'Log',
'auto_refresh' => 'Refrescar automáticamente la página de servidores', 'auto_refresh' => 'Refrescar automáticamente la página de servidores',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Refrescar automáticamente la página de servidores.<br/>'. 'Refrescar automáticamente la página de servidores.<br>'.
'<span class="small">'. '<span class="small">'.
'Tiempo en segundos, indicar "0" para no actualizar.'. 'Tiempo en segundos, indicar "0" para no actualizar.'.
'</span>', '</span>',
@ -268,18 +268,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Número de días que se conservan registros de las notificaciones y los archivos de tiempo de actividad del servidor. Introduzca 0 para desactivar la limpieza de los registros.', 'log_retention_period_description' => 'Número de días que se conservan registros de las notificaciones y los archivos de tiempo de actividad del servidor. Introduzca 0 para desactivar la limpieza de los registros.',
'log_retention_days' => 'días', 'log_retention_days' => 'días',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Servidor \'%LABEL%\' está fuera de línea: ip=%IP%, puerto=%PORT%. error=%ERROR%', 'off_sms' => 'Servidor \'%LABEL%\' está fuera de línea: ip=%IP%, puerto=%PORT%. error=%ERROR%',
'off_email_subject' => 'Importante: Servidor \'%LABEL%\' está fuera de línea', 'off_email_subject' => 'Importante: Servidor \'%LABEL%\' está fuera de línea',
'off_email_body' => "No posible conectar al servidor:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto: %PORT%<br/>Error: %ERROR%<br/>Fecha: %DATE%", 'off_email_body' => "No posible conectar al servidor:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Puerto: %PORT%<br>Error: %ERROR%<br>Fecha: %DATE%",
'off_pushover_title' => 'Servidor \'%LABEL%\' está fuera de línea', 'off_pushover_title' => 'Servidor \'%LABEL%\' está fuera de línea',
'off_pushover_message' => "No posible conectar al servidor:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto: %PORT%<br/>Error: %ERROR%<br/>Fecha: %DATE%", 'off_pushover_message' => "No posible conectar al servidor:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Puerto: %PORT%<br>Error: %ERROR%<br>Fecha: %DATE%",
'on_sms' => 'Servidor \'%LABEL%\' ya está de nuevo funcionando en línea: ip=%IP%, puerto=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Servidor \'%LABEL%\' ya está de nuevo funcionando en línea: ip=%IP%, puerto=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'Importante: Servidor \'%LABEL%\' ya está de nuevo en línea', 'on_email_subject' => 'Importante: Servidor \'%LABEL%\' ya está de nuevo en línea',
'on_email_body' => "Servidor '%LABEL%' ya está funcionando en línea de nuevo, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto: %PORT%<br/>Fecha: %DATE%", 'on_email_body' => "Servidor '%LABEL%' ya está funcionando en línea de nuevo, it was down for %LAST_OFFLINE_DURATION%:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Puerto: %PORT%<br>Fecha: %DATE%",
'on_pushover_title' => 'Servidor \'%LABEL%\' ya está de nuevo en línea', 'on_pushover_title' => 'Servidor \'%LABEL%\' ya está de nuevo en línea',
'on_pushover_message' => "Servidor '%LABEL%' ya está funcionando en línea de nuevo, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto: %PORT%<br/>Fecha: %DATE%", 'on_pushover_message' => "Servidor '%LABEL%' ya está funcionando en línea de nuevo, it was down for %LAST_OFFLINE_DURATION%:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Puerto: %PORT%<br>Fecha: %DATE%",
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Bienvenido, %user_name%', 'welcome_usermenu' => 'Bienvenido, %user_name%',
@ -296,7 +296,7 @@ $sm_lang = array(
'password_forgot' => '¿Has olvidado tu contraseña?', 'password_forgot' => '¿Has olvidado tu contraseña?',
'password_reset' => 'Perdí mi contraseña', 'password_reset' => 'Perdí mi contraseña',
'password_reset_email_subject' => 'Restablecer la contraseña para PHP Server Monitor', 'password_reset_email_subject' => 'Restablecer la contraseña para PHP Server Monitor',
'password_reset_email_body' => 'Utilice el siguiente enlace para restablecer tu contraseña. Tenga en cuenta que expira de 1 hora.<br/><br/>%link%', 'password_reset_email_body' => 'Utilice el siguiente enlace para restablecer tu contraseña. Tenga en cuenta que expira de 1 hora.<br><br>%link%',
'error_user_incorrect' => 'El nombre de usuario proporcionado no se pudo encontrar.', 'error_user_incorrect' => 'El nombre de usuario proporcionado no se pudo encontrar.',
'error_login_incorrect' => 'La información es incorrecta.', 'error_login_incorrect' => 'La información es incorrecta.',
'error_login_passwords_nomatch' => 'Las contraseñas proporcionadas no coinciden.', 'error_login_passwords_nomatch' => 'Las contraseñas proporcionadas no coinciden.',

View File

@ -80,7 +80,7 @@ $sm_lang = array(
'level' => 'Tase', 'level' => 'Tase',
'level_10' => 'Administraator', 'level_10' => 'Administraator',
'level_20' => 'Kasutaja', 'level_20' => 'Kasutaja',
'level_description' => '<b>Administraatoritel</b> on täielik ligipääs: nad saavad hallata servereid, kasutajaid ja muuta globaalset konfiguratsiooni.<br/><b>Kasutajad</b> saavad ainult näha ja uuendada neid servereid, mis on neile määratud.', 'level_description' => '<b>Administraatoritel</b> on täielik ligipääs: nad saavad hallata servereid, kasutajaid ja muuta globaalset konfiguratsiooni.<br><b>Kasutajad</b> saavad ainult näha ja uuendada neid servereid, mis on neile määratud.',
'mobile' => 'Mobiil', 'mobile' => 'Mobiil',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -202,11 +202,11 @@ $sm_lang = array(
'pushover_api_token_description' => 'Enne, kui saad Pushoverida pead sa <a href="%1$s" target="_blank" rel="noopener">regristreerima äpi</a> nende kodulehel ja sisestama API žetooni siia.', 'pushover_api_token_description' => 'Enne, kui saad Pushoverida pead sa <a href="%1$s" target="_blank" rel="noopener">regristreerima äpi</a> nende kodulehel ja sisestama API žetooni siia.',
'alert_type' => 'Vali, millal sa sooviksid olla teavitatud.', 'alert_type' => 'Vali, millal sa sooviksid olla teavitatud.',
'alert_type_description' => '<b>Staatuse muutus:</b> '. 'alert_type_description' => '<b>Staatuse muutus:</b> '.
'Saate teavituse kui serveri staatuses toimub muudatusi. Seega kättesaadav -> võrgust väljas või võrgust väljas -> kättesaadav.<br/>'. 'Saate teavituse kui serveri staatuses toimub muudatusi. Seega kättesaadav -> võrgust väljas või võrgust väljas -> kättesaadav.<br>'.
'<br /><b>Võrgust väljas:</b> '. '<br /><b>Võrgust väljas:</b> '.
'Saate teavituse kui server läheb võrgust välja *ESIMEST KORDA*. Näiteks, '. 'Saate teavituse kui server läheb võrgust välja *ESIMEST KORDA*. Näiteks, '.
'sinu cronjob on iga 15 minuti tagant ja sulgub kell 1 öösel kuni kella 6ni hommikul. '. 'sinu cronjob on iga 15 minuti tagant ja sulgub kell 1 öösel kuni kella 6ni hommikul. '.
'Saate 1 teavituse kell 1 öösel ja see on kõik.<br/>'. 'Saate 1 teavituse kell 1 öösel ja see on kõik.<br>'.
'<br><b>Alati:</b> '. '<br><b>Alati:</b> '.
'Saate teavituse iga kord kui staatust uuendatakse, isegi kui leht on olnud maas juba tunde.', 'Saate teavituse iga kord kui staatust uuendatakse, isegi kui leht on olnud maas juba tunde.',
'alert_type_status' => 'Staatuse muutus', 'alert_type_status' => 'Staatuse muutus',
@ -228,7 +228,7 @@ $sm_lang = array(
'settings_log' => 'Logi seaded', 'settings_log' => 'Logi seaded',
'auto_refresh' => 'Automaatne värskendamine', 'auto_refresh' => 'Automaatne värskendamine',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Värskenda lehte automaatselt.<br/>'. 'Värskenda lehte automaatselt.<br>'.
'<span class="small">'. '<span class="small">'.
'Aeg sekundites, kui 0 siis lehte ei värskendata.'. 'Aeg sekundites, kui 0 siis lehte ei värskendata.'.
'</span>', '</span>',
@ -253,18 +253,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Arv päevi, mil hoida logid alles. Sisesta 0, et keelata logide puhastus.', 'log_retention_period_description' => 'Arv päevi, mil hoida logid alles. Sisesta 0, et keelata logide puhastus.',
'log_retention_days' => 'päeva', 'log_retention_days' => 'päeva',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' on MAAS: ip=%IP%, port=%PORT%. Error=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' on MAAS: ip=%IP%, port=%PORT%. Error=%ERROR%',
'off_email_subject' => 'TÄHTIS: Server \'%LABEL%\' is MAAS', 'off_email_subject' => 'TÄHTIS: Server \'%LABEL%\' is MAAS',
'off_email_body' => "Ühendus järgnevasse serverisse ebaõnnestus:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Error: %ERROR%<br/>Kuupäev: %DATE%", 'off_email_body' => "Ühendus järgnevasse serverisse ebaõnnestus:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Kuupäev: %DATE%",
'off_pushover_title' => 'Server \'%LABEL%\' on MAAS', 'off_pushover_title' => 'Server \'%LABEL%\' on MAAS',
'off_pushover_message' => "Ühendus järgnevasse serverisse ebaõnnestus:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Error: %ERROR%<br/>Kuupäev: %DATE%", 'off_pushover_message' => "Ühendus järgnevasse serverisse ebaõnnestus:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Kuupäev: %DATE%",
'on_sms' => 'Server \'%LABEL%\' on KÄTTESAADAV: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Server \'%LABEL%\' on KÄTTESAADAV: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'TÄHTIS: Server \'%LABEL%\' on kättesaadav', 'on_email_subject' => 'TÄHTIS: Server \'%LABEL%\' on kättesaadav',
'on_email_body' => "Server '%LABEL%' on jälle kättesaadav, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Kuupäev: %DATE%", 'on_email_body' => "Server '%LABEL%' on jälle kättesaadav, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Kuupäev: %DATE%",
'on_pushover_title' => 'Server \'%LABEL%\' on kättesaadav', 'on_pushover_title' => 'Server \'%LABEL%\' on kättesaadav',
'on_pushover_message' => 'Server \'%LABEL%\' on jälle kättesaadav, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Kuupäev: %DATE%', 'on_pushover_message' => 'Server \'%LABEL%\' on jälle kättesaadav, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Kuupäev: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Teretulemast, %user_name%', 'welcome_usermenu' => 'Teretulemast, %user_name%',
@ -281,7 +281,7 @@ $sm_lang = array(
'password_forgot' => 'Unustasid salasõna?', 'password_forgot' => 'Unustasid salasõna?',
'password_reset' => 'Lähtesta parool', 'password_reset' => 'Lähtesta parool',
'password_reset_email_subject' => 'Lähtestage oma PHP Serveri Monitori parool', 'password_reset_email_subject' => 'Lähtestage oma PHP Serveri Monitori parool',
'password_reset_email_body' => 'Palun kasutage järgnevat linki oma parooli lähtestamiseks. Palume tähendada, et see aegub 1 tunni jooksul.<br/><br/>%link%', 'password_reset_email_body' => 'Palun kasutage järgnevat linki oma parooli lähtestamiseks. Palume tähendada, et see aegub 1 tunni jooksul.<br><br>%link%',
'error_user_incorrect' => 'Antud kasutaja ei ole kehtiv.', 'error_user_incorrect' => 'Antud kasutaja ei ole kehtiv.',
'error_login_incorrect' => 'Informatsioon ei ole õige.', 'error_login_incorrect' => 'Informatsioon ei ole õige.',
'error_login_passwords_nomatch' => 'Sisestatud paroolid ei kattu.', 'error_login_passwords_nomatch' => 'Sisestatud paroolid ei kattu.',

View File

@ -80,7 +80,7 @@ $sm_lang = array(
'level' => 'سطح', 'level' => 'سطح',
'level_10' => 'مدیر', 'level_10' => 'مدیر',
'level_20' => 'کاربر', 'level_20' => 'کاربر',
'level_description' => '<b>مدیر</b> دسترسی کامل: این گروه ها توانایی مدیریت سرورها، کاربران و ویرایش تنظیمات عمومی را داردند.<br/><b>کاربران</b> تنها توانایی دیدن و بروزرسانی سرورهای اختصاص داده شده به خودشان را داردند.', 'level_description' => '<b>مدیر</b> دسترسی کامل: این گروه ها توانایی مدیریت سرورها، کاربران و ویرایش تنظیمات عمومی را داردند.<br><b>کاربران</b> تنها توانایی دیدن و بروزرسانی سرورهای اختصاص داده شده به خودشان را داردند.',
'mobile' => 'موبایل', 'mobile' => 'موبایل',
'email' => 'ایمیل', 'email' => 'ایمیل',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -202,7 +202,7 @@ $sm_lang = array(
'pushover_api_token_description' => 'قبل از استفاده از پوش آور، شما باید در سایت آن ها <a href="%1$s" target="_blank" rel="noopener">یک برنامه ثبت نام کنید</a> و رمز API برنامه پوش آور را اینجا وارد کنید.', 'pushover_api_token_description' => 'قبل از استفاده از پوش آور، شما باید در سایت آن ها <a href="%1$s" target="_blank" rel="noopener">یک برنامه ثبت نام کنید</a> و رمز API برنامه پوش آور را اینجا وارد کنید.',
'alert_type' => 'زمان دلخواه خورد برای دریافت اطلاعیه ها را انتخاب کنید.', 'alert_type' => 'زمان دلخواه خورد برای دریافت اطلاعیه ها را انتخاب کنید.',
'alert_type_description' => '<b>تغییر وضعیت:</b> '. 'alert_type_description' => '<b>تغییر وضعیت:</b> '.
'زمانی که وضعیت سرور تغییر کرد شما یک اطلاعیته دریافت خواهید کرد. از آنلاین -> آفلاین یا آفلاین -> آنلاین.<br/>'. 'زمانی که وضعیت سرور تغییر کرد شما یک اطلاعیته دریافت خواهید کرد. از آنلاین -> آفلاین یا آفلاین -> آنلاین.<br>'.
'<br /><b>آفلاین:</b> '. '<br /><b>آفلاین:</b> '.
'زمانی که یک سرور *فقط برای اولین بار* آفلاین شد شما یک اطلاعیه دریافت خواهید کرد. به عنوان مثال،'. 'زمانی که یک سرور *فقط برای اولین بار* آفلاین شد شما یک اطلاعیه دریافت خواهید کرد. به عنوان مثال،'.
'cronjob شما هر 15 دقیقه است و سرور شما در ساعت 1 صبح دان می شود و تا ساعت 6 صبح دان می ماند.'. 'cronjob شما هر 15 دقیقه است و سرور شما در ساعت 1 صبح دان می شود و تا ساعت 6 صبح دان می ماند.'.
@ -228,7 +228,7 @@ $sm_lang = array(
'settings_log' => 'تنظیمات لاگ', 'settings_log' => 'تنظیمات لاگ',
'auto_refresh' => 'رفرش خودکار', 'auto_refresh' => 'رفرش خودکار',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'رفرش خودکار صفحه سرورها.<br/>'. 'رفرش خودکار صفحه سرورها.<br>'.
'<span class="small">'. '<span class="small">'.
'زمان به ثنیه, اگر 0 باشد صفحه رفرش نخواهد شد.'. 'زمان به ثنیه, اگر 0 باشد صفحه رفرش نخواهد شد.'.
'</span>', '</span>',
@ -253,18 +253,18 @@ $sm_lang = array(
'log_retention_period_description' => 'تعداد روزها برای نگهداری لاگ اطلاعیه ها و آرشیو های آپ تایم های سرور. برای غیرفعال کردن پاکسازی لاگ 0 وارد کنید.', 'log_retention_period_description' => 'تعداد روزها برای نگهداری لاگ اطلاعیه ها و آرشیو های آپ تایم های سرور. برای غیرفعال کردن پاکسازی لاگ 0 وارد کنید.',
'log_retention_days' => 'روزها', 'log_retention_days' => 'روزها',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' دان است: آی پی=%IP%, پورت=%PORT%. خطا=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' دان است: آی پی=%IP%, پورت=%PORT%. خطا=%ERROR%',
'off_email_subject' => 'مهم: سرور \'%LABEL%\' دان است', 'off_email_subject' => 'مهم: سرور \'%LABEL%\' دان است',
'off_email_body' => "اتصال به سرور زیر با شکست مواجه شد:<br/><br/>سرور: %LABEL%<br/>آی پی: %IP%<br/>پورت: %PORT%<br/>خطا: %ERROR%<br/>تاریخ: %DATE%", 'off_email_body' => "اتصال به سرور زیر با شکست مواجه شد:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>خطا: %ERROR%<br>تاریخ: %DATE%",
'off_pushover_title' => 'سرور \'%LABEL%\' دان است', 'off_pushover_title' => 'سرور \'%LABEL%\' دان است',
'off_pushover_message' => "اتصال به سرور زیر با شکست مواجه شد:<br/><br/>سرور: %LABEL%<br/>آی پی: %IP%<br/>پورت: %PORT%<br/>خطا: %ERROR%<br/>تاریخ: %DATE%", 'off_pushover_message' => "اتصال به سرور زیر با شکست مواجه شد:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>خطا: %ERROR%<br>تاریخ: %DATE%",
'on_sms' => 'سرور \'%LABEL%\' در حال اجراست: آی پی=%IP%, پورت=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'سرور \'%LABEL%\' در حال اجراست: آی پی=%IP%, پورت=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'مهم: سرور \'%LABEL%\' در حال اجراست', 'on_email_subject' => 'مهم: سرور \'%LABEL%\' در حال اجراست',
'on_email_body' => "سرور '%LABEL%' دوباره در حال اجراست, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>سرور: %LABEL%<br/>آی پی: %IP%<br/>پورت: %PORT%<br/>تاریخ: %DATE%", 'on_email_body' => "سرور '%LABEL%' دوباره در حال اجراست, it was down for %LAST_OFFLINE_DURATION%:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>تاریخ: %DATE%",
'on_pushover_title' => 'سرور \'%LABEL%\' در حال اجراست', 'on_pushover_title' => 'سرور \'%LABEL%\' در حال اجراست',
'on_pushover_message' => 'سرور \'%LABEL%\' دوباره در حال اجراست, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>سرور: %LABEL%<br/>آی پی: %IP%<br/>پورت: %PORT%<br/>تاریخ: %DATE%', 'on_pushover_message' => 'سرور \'%LABEL%\' دوباره در حال اجراست, it was down for %LAST_OFFLINE_DURATION%:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>تاریخ: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'خوش آمدید, %user_name%', 'welcome_usermenu' => 'خوش آمدید, %user_name%',
@ -281,7 +281,7 @@ $sm_lang = array(
'password_forgot' => 'کلمه عبور خود را فراموش کرده اید؟', 'password_forgot' => 'کلمه عبور خود را فراموش کرده اید؟',
'password_reset' => 'بازنشانی کلمه عبور', 'password_reset' => 'بازنشانی کلمه عبور',
'password_reset_email_subject' => 'کلمه عبور خود را برای مانیتور سرور PHP بازنشانی کنید', 'password_reset_email_subject' => 'کلمه عبور خود را برای مانیتور سرور PHP بازنشانی کنید',
'password_reset_email_body' => 'لطفا برای بازنشانی کلمه عبور خود از این لینک استفاده کنید. لطفا توجه کنید تنها 1 ساعت وقت دارید.<br/><br/>%link%', 'password_reset_email_body' => 'لطفا برای بازنشانی کلمه عبور خود از این لینک استفاده کنید. لطفا توجه کنید تنها 1 ساعت وقت دارید.<br><br>%link%',
'error_user_incorrect' => 'نام کاربری ارائه شده یافته نشد.', 'error_user_incorrect' => 'نام کاربری ارائه شده یافته نشد.',
'error_login_incorrect' => 'اطلاعات نادرست است.', 'error_login_incorrect' => 'اطلاعات نادرست است.',
'error_login_passwords_nomatch' => 'کلمه های عبور یکسان نیستند.', 'error_login_passwords_nomatch' => 'کلمه های عبور یکسان نیستند.',

View File

@ -80,7 +80,7 @@ $sm_lang = array(
'level' => 'Taso', 'level' => 'Taso',
'level_10' => 'Järjestelmänvalvoja', 'level_10' => 'Järjestelmänvalvoja',
'level_20' => 'Käyttäjä', 'level_20' => 'Käyttäjä',
'level_description' => '<b>Järjestelmänvalvojilla</b> on täydet oikeudet: he voivat hallita palvelimia, käyttäjiä ja muokata ohjelmiston asetuksia.<br/><b>Käyttäjät</b> voivat vain nähdä ja päivittää palvelimia jotka on asetettu heille.', 'level_description' => '<b>Järjestelmänvalvojilla</b> on täydet oikeudet: he voivat hallita palvelimia, käyttäjiä ja muokata ohjelmiston asetuksia.<br><b>Käyttäjät</b> voivat vain nähdä ja päivittää palvelimia jotka on asetettu heille.',
'mobile' => 'Puhelin', 'mobile' => 'Puhelin',
'email' => 'Sähköposti', 'email' => 'Sähköposti',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -202,11 +202,11 @@ $sm_lang = array(
'pushover_api_token_description' => 'Ennen kuin voit käyttää Pushoveria, sinun täytyy <a href="%1$s" target="_blank" rel="noopener">rekisteröidä sovellus</a> heidän nettisivuillaan, ja kopioida API-avain tänne.', 'pushover_api_token_description' => 'Ennen kuin voit käyttää Pushoveria, sinun täytyy <a href="%1$s" target="_blank" rel="noopener">rekisteröidä sovellus</a> heidän nettisivuillaan, ja kopioida API-avain tänne.',
'alert_type' => 'Valitse milloin haluat ilmoituksia.', 'alert_type' => 'Valitse milloin haluat ilmoituksia.',
'alert_type_description' => '<b>Tilan muutos:</b> '. 'alert_type_description' => '<b>Tilan muutos:</b> '.
'Saat ilmoituksen kun palvelimen tila vaihtuu. Eli tilasta päällä -> sammunut tai sammunut -> päällä.<br/>'. 'Saat ilmoituksen kun palvelimen tila vaihtuu. Eli tilasta päällä -> sammunut tai sammunut -> päällä.<br>'.
'<br /><b>Sammunut:</b> '. '<br /><b>Sammunut:</b> '.
'Saat yhden ilmoituksen kun palvelimen tila vaihtuu sammuneeksi, mutta *VAIN ENSIMMÄISEN KERRAN*. Esimerkiksi, '. 'Saat yhden ilmoituksen kun palvelimen tila vaihtuu sammuneeksi, mutta *VAIN ENSIMMÄISEN KERRAN*. Esimerkiksi, '.
'jos tarkistus tehdään joka 15 minuutti, ja palvelin sammuu klo 1 ja pysyy sammuneena klo 6 asti. '. 'jos tarkistus tehdään joka 15 minuutti, ja palvelin sammuu klo 1 ja pysyy sammuneena klo 6 asti. '.
'Saat vain yhden ilmoituksen klo 1, ei muuta.<br/>'. 'Saat vain yhden ilmoituksen klo 1, ei muuta.<br>'.
'<br><b>Aina:</b> '. '<br><b>Aina:</b> '.
'Saat ilmoituksen joka kerta kun palvelin tarkistetaan, vaikka palvelin olisi ollut sammuneena tunteja.', 'Saat ilmoituksen joka kerta kun palvelin tarkistetaan, vaikka palvelin olisi ollut sammuneena tunteja.',
'alert_type_status' => 'Tilan muutos', 'alert_type_status' => 'Tilan muutos',
@ -228,7 +228,7 @@ $sm_lang = array(
'settings_log' => 'Tapahtumamerkintöjen asetukset', 'settings_log' => 'Tapahtumamerkintöjen asetukset',
'auto_refresh' => 'Automaattipäivitys', 'auto_refresh' => 'Automaattipäivitys',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Päivittää automaattisesti palvelimet-sivun.<br/>'. 'Päivittää automaattisesti palvelimet-sivun.<br>'.
'<span class="small">'. '<span class="small">'.
'Aika sekunteina, jos 0, sivu ei päivity automaattisesti.'. 'Aika sekunteina, jos 0, sivu ei päivity automaattisesti.'.
'</span>', '</span>',
@ -253,18 +253,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Kuinka monta päivää pitää palvelinten päälläoloaikoja ja muita tapahtumia. Aseta arvoksi 0 jos haluat pitää ne loputtomasti.', 'log_retention_period_description' => 'Kuinka monta päivää pitää palvelinten päälläoloaikoja ja muita tapahtumia. Aseta arvoksi 0 jos haluat pitää ne loputtomasti.',
'log_retention_days' => 'päivää', 'log_retention_days' => 'päivää',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'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_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_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: %IP%<br/>Port: %PORT%<br/>Error: %ERROR%<br/>Date: %DATE%", '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%",
'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 %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Date: %DATE%", '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: %DATE%",
'on_pushover_title' => 'Server \'%LABEL%\' is RUNNING', 'on_pushover_title' => 'Server \'%LABEL%\' is RUNNING',
'on_pushover_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_pushover_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%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Tervetuloa, %user_name%', 'welcome_usermenu' => 'Tervetuloa, %user_name%',
@ -281,7 +281,7 @@ $sm_lang = array(
'password_forgot' => 'Unohtuiko salasanasi?', 'password_forgot' => 'Unohtuiko salasanasi?',
'password_reset' => 'Resetoi salasanasi', 'password_reset' => 'Resetoi salasanasi',
'password_reset_email_subject' => 'Resetoi salasanasi PHP Server Monitoriin', 'password_reset_email_subject' => 'Resetoi salasanasi PHP Server Monitoriin',
'password_reset_email_body' => 'Ole hyvä ja käytä seuraavaa linkkiä restoidaksesi salasanasi. Huomaa että linkki vanhentuu tunnin sisällä.<br/><br/>%link%', 'password_reset_email_body' => 'Ole hyvä ja käytä seuraavaa linkkiä restoidaksesi salasanasi. Huomaa että linkki vanhentuu tunnin sisällä.<br><br>%link%',
'error_user_incorrect' => 'Annettua käyttäjänimeä ei löydetty.', 'error_user_incorrect' => 'Annettua käyttäjänimeä ei löydetty.',
'error_login_incorrect' => 'Antamasi tiedot eivät ole oikein.', 'error_login_incorrect' => 'Antamasi tiedot eivät ole oikein.',
'error_login_passwords_nomatch' => 'Annetut salasanat eivät täsmää.', 'error_login_passwords_nomatch' => 'Annetut salasanat eivät täsmää.',

View File

@ -93,7 +93,7 @@ $sm_lang = array(
'level' => 'Niveau', 'level' => 'Niveau',
'level_10' => 'Administrateur', 'level_10' => 'Administrateur',
'level_20' => 'Utilisateur', 'level_20' => 'Utilisateur',
'level_description' => 'Les <b>Administrateurs</b> ont un accès total. Ils peuvent gérer les serveurs, les utilisateurs et éditer la configuration globale.<br/>Les <b>Utilisateurs</b> ne peuvent que voir et mettre à jour les serveurs qui leur ont été assignés.', 'level_description' => 'Les <b>Administrateurs</b> ont un accès total. Ils peuvent gérer les serveurs, les utilisateurs et éditer la configuration globale.<br>Les <b>Utilisateurs</b> ne peuvent que voir et mettre à jour les serveurs qui leur ont été assignés.',
'mobile' => 'Téléphone', 'mobile' => 'Téléphone',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -216,12 +216,12 @@ $sm_lang = array(
'pushover_api_token_description' => 'Avant de pouvoir utiliser Pushover, vous devez <a href="%1$s" target="_blank" rel="noopener">créer une application</a> sur leur site web et entrer ici le jeton (Token) de l\'application.', 'pushover_api_token_description' => 'Avant de pouvoir utiliser Pushover, vous devez <a href="%1$s" target="_blank" rel="noopener">créer une application</a> sur leur site web et entrer ici le jeton (Token) de l\'application.',
'alert_type' => 'Choisissez quand vous souhaitez être notifié', 'alert_type' => 'Choisissez quand vous souhaitez être notifié',
'alert_type_description' => '<b>Changement d\'état : </b>'. 'alert_type_description' => '<b>Changement d\'état : </b>'.
'Vous recevez une notification chaque fois que le serveur change d\'état. C\'est-à-dire passe de l\'état OK à HORS SERVICE ou de HORS SERVICE à OK.<br/>'. 'Vous recevez une notification chaque fois que le serveur change d\'état. C\'est-à-dire passe de l\'état OK à HORS SERVICE ou de HORS SERVICE à OK.<br>'.
'<br/><b>Hors service : </b>'. '<br><b>Hors service : </b>'.
'Vous ne recevez une notification que quand le serveur passe de l\'état OK à HORS SERVICE. Par exemple, '. 'Vous ne recevez une notification que quand le serveur passe de l\'état OK à HORS SERVICE. Par exemple, '.
'Votre tâche planifiée s\'exécute toutes les 15 minutes et votre serveur passe à l\'état HORS SERVICE à 1 heure du matin et le reste jusqu\'à 6 heures du matin.'. 'Votre tâche planifiée s\'exécute toutes les 15 minutes et votre serveur passe à l\'état HORS SERVICE à 1 heure du matin et le reste jusqu\'à 6 heures du matin.'.
'Vous ne recevez qu\'une seule notification à 1 heure du matin.<br/>'. 'Vous ne recevez qu\'une seule notification à 1 heure du matin.<br>'.
'<br/><b>Toujours : </b>'. '<br><b>Toujours : </b>'.
'Vous recevez une notification à chaque exécution de la tâche planifiée si le serveur est à l\'état HORS SERVICE ', 'Vous recevez une notification à chaque exécution de la tâche planifiée si le serveur est à l\'état HORS SERVICE ',
'alert_type_status' => 'Changement d\'état', 'alert_type_status' => 'Changement d\'état',
'alert_type_offline' => 'Hors service', 'alert_type_offline' => 'Hors service',
@ -242,7 +242,7 @@ $sm_lang = array(
'settings_log' => 'Configuration des événements', 'settings_log' => 'Configuration des événements',
'auto_refresh' => 'Auto-rachaîchissement', 'auto_refresh' => 'Auto-rachaîchissement',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Auto-rachaîchissement de la page serveurs.<br/>'. 'Auto-rachaîchissement de la page serveurs.<br>'.
'<span class="small">'. '<span class="small">'.
'Temps en secondes. Si 0, la page n\'est pas rafraîchie.'. 'Temps en secondes. Si 0, la page n\'est pas rafraîchie.'.
'</span>', '</span>',
@ -267,18 +267,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Nombre de jours de conservation des événements envoyés et des temps de réponse des serveurs. Entrez 0 pour les conserver indéfiniment.', 'log_retention_period_description' => 'Nombre de jours de conservation des événements envoyés et des temps de réponse des serveurs. Entrez 0 pour les conserver indéfiniment.',
'log_retention_days' => 'jours', 'log_retention_days' => 'jours',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Le Serveur \'%LABEL%\' est HORS SERVICE: IP=%IP%, Port=%PORT%. Erreur=%ERROR%', 'off_sms' => 'Le Serveur \'%LABEL%\' est HORS SERVICE: IP=%IP%, Port=%PORT%. Erreur=%ERROR%',
'off_email_subject' => 'IMPORTANT: Le Serveur \'%LABEL%\' est HORS SERVICE', 'off_email_subject' => 'IMPORTANT: Le Serveur \'%LABEL%\' est HORS SERVICE',
'off_email_body' => "Impossible de se connecter au serveur suivant:<br/><br/>Serveur: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Erreur: %ERROR%<br/>Date: %DATE%", 'off_email_body' => "Impossible de se connecter au serveur suivant:<br><br>Serveur: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Erreur: %ERROR%<br>Date: %DATE%",
'off_pushover_title' => 'Le Serveur \'%LABEL%\' est HORS SERVICE', 'off_pushover_title' => 'Le Serveur \'%LABEL%\' est HORS SERVICE',
'off_pushover_message' => "Impossible de se connecter au serveur suivant:<br/><br/>Serveur: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Erreur: %ERROR%<br/>Date: %DATE%", 'off_pushover_message' => "Impossible de se connecter au serveur suivant:<br><br>Serveur: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Erreur: %ERROR%<br>Date: %DATE%",
'on_sms' => 'Le Serveur \'%LABEL%\' est OK: IP=%IP%, Port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Le Serveur \'%LABEL%\' est OK: IP=%IP%, Port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'IMPORTANT: Le Serveur \'%LABEL%\' est OK', 'on_email_subject' => 'IMPORTANT: Le Serveur \'%LABEL%\' est OK',
'on_email_body' => "Le Serveur '%LABEL%' est de nouveau OK, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Serveur: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Date: %DATE%", 'on_email_body' => "Le Serveur '%LABEL%' est de nouveau OK, it was down for %LAST_OFFLINE_DURATION%:<br><br>Serveur: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%",
'on_pushover_title' => 'Le Serveur \'%LABEL%\' est OK', 'on_pushover_title' => 'Le Serveur \'%LABEL%\' est OK',
'on_pushover_message' => "Le Serveur '%LABEL%' est de nouveau OK, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Serveur: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Date: %DATE%", 'on_pushover_message' => "Le Serveur '%LABEL%' est de nouveau OK, it was down for %LAST_OFFLINE_DURATION%:<br><br>Serveur: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%",
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Bonjour %user_name%', 'welcome_usermenu' => 'Bonjour %user_name%',
@ -295,7 +295,7 @@ $sm_lang = array(
'password_forgot' => 'Mot de passe oublié ?', 'password_forgot' => 'Mot de passe oublié ?',
'password_reset' => 'Réinitialiser le mot de passe', 'password_reset' => 'Réinitialiser le mot de passe',
'password_reset_email_subject' => 'Réinitialisation du mot de passe pour PHP Server Monitor', 'password_reset_email_subject' => 'Réinitialisation du mot de passe pour PHP Server Monitor',
'password_reset_email_body' => 'Cliquez sur le lien ci-dessous pour réinitialiser votre mot de passe. Veuillez noter qu\'il expire dans une heure.<br/><br/>%link%', 'password_reset_email_body' => 'Cliquez sur le lien ci-dessous pour réinitialiser votre mot de passe. Veuillez noter qu\'il expire dans une heure.<br><br>%link%',
'error_user_incorrect' => 'Nom d\'utilisateur invalide.', 'error_user_incorrect' => 'Nom d\'utilisateur invalide.',
'error_login_incorrect' => 'Informations incorrectes.', 'error_login_incorrect' => 'Informations incorrectes.',
'error_login_passwords_nomatch' => 'Mot de passe invalide.', 'error_login_passwords_nomatch' => 'Mot de passe invalide.',

View File

@ -92,7 +92,7 @@ $sm_lang = array(
'level' => 'Livello', 'level' => 'Livello',
'level_10' => 'Amministratore', 'level_10' => 'Amministratore',
'level_20' => 'Utente', 'level_20' => 'Utente',
'level_description' => 'Gli <b>Amministratori</b> hanno pieno accesso: possono gestire server, utenti e modificare la configurazione globale.<br/>Gli <b>Utenti</b> possono solo visualizzare ed eseguire l\'aggiornamento per i server a cui sono assegnati.', 'level_description' => 'Gli <b>Amministratori</b> hanno pieno accesso: possono gestire server, utenti e modificare la configurazione globale.<br>Gli <b>Utenti</b> possono solo visualizzare ed eseguire l\'aggiornamento per i server a cui sono assegnati.',
'mobile' => 'Cellulare', 'mobile' => 'Cellulare',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -215,11 +215,11 @@ $sm_lang = array(
'pushover_api_token_description' => 'Prima di poter usare Pushover, devi <a href="%1$s" target="_blank" rel="noopener">registrare un\'App</a> nel loro sito web ed inserire la \'App API Token\' qui.', 'pushover_api_token_description' => 'Prima di poter usare Pushover, devi <a href="%1$s" target="_blank" rel="noopener">registrare un\'App</a> nel loro sito web ed inserire la \'App API Token\' qui.',
'alert_type' => 'Seleziona quando vuoi essere notificato', 'alert_type' => 'Seleziona quando vuoi essere notificato',
'alert_type_description' => '<b>Cambio di Stato:</b> '. 'alert_type_description' => '<b>Cambio di Stato:</b> '.
'Riceverai una notifica solo quando un server cambierà stato. Quindi da online -> offline oppure da offline -> online.<br/>'. 'Riceverai una notifica solo quando un server cambierà stato. Quindi da online -> offline oppure da offline -> online.<br>'.
'<br /><b>Fuori linea:</b> '. '<br /><b>Fuori linea:</b> '.
'Riceverai una notifica solo quando un server andrà offline *SOLO LA PRIMA VOLTA*. Per esempio, '. 'Riceverai una notifica solo quando un server andrà offline *SOLO LA PRIMA VOLTA*. Per esempio, '.
'Se il tuo cronjob è impostato per controllare ogni 15 min e il tuo server andrà offline dalle 2AM alle 6AM. '. 'Se il tuo cronjob è impostato per controllare ogni 15 min e il tuo server andrà offline dalle 2AM alle 6AM. '.
'Riceverai una sola notifica alle 2AM e nient\'altro.<br/>'. 'Riceverai una sola notifica alle 2AM e nient\'altro.<br>'.
'<br><b>Sempre:</b> '. '<br><b>Sempre:</b> '.
'Riceverai una notifica ogni volta che lo script troverà un server down anche se è stato offline per ore.', 'Riceverai una notifica ogni volta che lo script troverà un server down anche se è stato offline per ore.',
'alert_type_status' => 'Cambio di Stato', 'alert_type_status' => 'Cambio di Stato',
@ -241,7 +241,7 @@ $sm_lang = array(
'settings_log' => 'Impostazioni Log', 'settings_log' => 'Impostazioni Log',
'auto_refresh' => 'Auto-Aggiornamento', 'auto_refresh' => 'Auto-Aggiornamento',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Auto-Aggiornamento pagina servers.<br/>'. 'Auto-Aggiornamento pagina servers.<br>'.
'<span class="small">'. '<span class="small">'.
'Tempo in secondi, se impostato a 0 la pagina non si aggiornerà.'. 'Tempo in secondi, se impostato a 0 la pagina non si aggiornerà.'.
'</span>', '</span>',
@ -266,18 +266,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Numero di giorni per la conservazione dei log delle notifiche e risultati monitoraggio. Inserire 0 (zero) per disabilitare la cancellazione dei log.', 'log_retention_period_description' => 'Numero di giorni per la conservazione dei log delle notifiche e risultati monitoraggio. Inserire 0 (zero) per disabilitare la cancellazione dei log.',
'log_retention_days' => 'giorni', 'log_retention_days' => 'giorni',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' INATTIVO: ip=%IP%, porta=%PORT%. Errore=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' INATTIVO: ip=%IP%, porta=%PORT%. Errore=%ERROR%',
'off_email_subject' => 'IMPORTANTE: Il Server \'%LABEL%\' è INATTIVO', 'off_email_subject' => 'IMPORTANTE: Il Server \'%LABEL%\' è INATTIVO',
'off_email_body' => "Impossibile connettersi al seguente server:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Porta: %PORT%<br/>Errore: %ERROR%<br/>Data: %DATE%", 'off_email_body' => "Impossibile connettersi al seguente server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Errore: %ERROR%<br>Data: %DATE%",
'off_pushover_title' => 'Server \'%LABEL%\' INATTIVO', 'off_pushover_title' => 'Server \'%LABEL%\' INATTIVO',
'off_pushover_message' => "Impossibile connettersi al seguente server:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Porta: %PORT%<br/>Errore: %ERROR%<br/>Data: %DATE%", 'off_pushover_message' => "Impossibile connettersi al seguente server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Errore: %ERROR%<br>Data: %DATE%",
'on_sms' => 'Server \'%LABEL%\' ATTIVO: ip=%IP%, porta=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Server \'%LABEL%\' ATTIVO: ip=%IP%, porta=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'IMPORTANTE: Server \'%LABEL%\' è ATTIVO', 'on_email_subject' => 'IMPORTANTE: Server \'%LABEL%\' è ATTIVO',
'on_email_body' => "Server '%LABEL%' è di nuovo attivo, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Porta: %PORT%<br/>Data: %DATE%", 'on_email_body' => "Server '%LABEL%' è di nuovo attivo, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Data: %DATE%",
'on_pushover_title' => 'Server \'%LABEL%\' ATTIVO', 'on_pushover_title' => 'Server \'%LABEL%\' ATTIVO',
'on_pushover_message' => "Server '%LABEL%' è di nuovo attivo, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Porta: %PORT%<br/>Data: %DATE%", 'on_pushover_message' => "Server '%LABEL%' è di nuovo attivo, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Data: %DATE%",
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Benvenuto, %user_name%', 'welcome_usermenu' => 'Benvenuto, %user_name%',
@ -294,7 +294,7 @@ $sm_lang = array(
'password_forgot' => 'Password dimenticata?', 'password_forgot' => 'Password dimenticata?',
'password_reset' => 'Reimposta password', 'password_reset' => 'Reimposta password',
'password_reset_email_subject' => 'Reimpossta la tua password per PHP Server Monitor', 'password_reset_email_subject' => 'Reimpossta la tua password per PHP Server Monitor',
'password_reset_email_body' => 'Usa il seguente link per reimpostare la tua password. Ricordati che scade tra un ora.<br/><br/>%link%', 'password_reset_email_body' => 'Usa il seguente link per reimpostare la tua password. Ricordati che scade tra un ora.<br><br>%link%',
'error_user_incorrect' => 'Il nome utente inserito non è staot trovato.', 'error_user_incorrect' => 'Il nome utente inserito non è staot trovato.',
'error_login_incorrect' => 'Le informazioni sono errate.', 'error_login_incorrect' => 'Le informazioni sono errate.',
'error_login_passwords_nomatch' => 'Le password inserite non sono valide.', 'error_login_passwords_nomatch' => 'Le password inserite non sono valide.',

View File

@ -80,7 +80,7 @@ $sm_lang = array(
'level' => 'レベル', 'level' => 'レベル',
'level_10' => '管理者(Administrator)', 'level_10' => '管理者(Administrator)',
'level_20' => 'ユーザー(User)', 'level_20' => 'ユーザー(User)',
'level_description' => '<b>管理者(Administrator)</b> はフルアクセス権があります:サーバーの管理、 ユーザーとグローバル設定を変更できます。<br/><b>ユーザー(Users)</b>は、割り当てられたサーバーのアップデータのみを表示して実行できます。', 'level_description' => '<b>管理者(Administrator)</b> はフルアクセス権があります:サーバーの管理、 ユーザーとグローバル設定を変更できます。<br><b>ユーザー(Users)</b>は、割り当てられたサーバーのアップデータのみを表示して実行できます。',
'mobile' => 'モバイル', 'mobile' => 'モバイル',
'email' => 'メールアドレス', 'email' => 'メールアドレス',
'pushover' => 'プッシュオーバー', 'pushover' => 'プッシュオーバー',
@ -124,7 +124,8 @@ $sm_lang = array(
'domain' => 'ドメイン/IP', 'domain' => 'ドメイン/IP',
'timeout' => 'タイムアウト', 'timeout' => 'タイムアウト',
'timeout_description' => '指定した秒数、サーバーのレスポンスを待ちます。', 'timeout_description' => '指定した秒数、サーバーのレスポンスを待ちます。',
'authentication_settings' => '認証設定(オプション)', 'authentication_settings' => '認証設定',
'optional' => 'オプション',
'website_username' => 'ユーザー名', 'website_username' => 'ユーザー名',
'website_username_description' => 'ユーザー名でウェブサイトにアクセスします。 (サポートはApache認証のみです。)', 'website_username_description' => 'ユーザー名でウェブサイトにアクセスします。 (サポートはApache認証のみです。)',
'website_password' => 'パスワード', 'website_password' => 'パスワード',
@ -219,18 +220,18 @@ $sm_lang = array(
'pushover_api_token_description' => 'プッシュオーバーを使用するには、事前にウェブサイトで<a href="%1$s" target="_blank" rel="noopener">アプリを登録</a>してApp APIトークンを入力する必要があります。', 'pushover_api_token_description' => 'プッシュオーバーを使用するには、事前にウェブサイトで<a href="%1$s" target="_blank" rel="noopener">アプリを登録</a>してApp APIトークンを入力する必要があります。',
'alert_type' => '通知するタイミングを選択', 'alert_type' => '通知するタイミングを選択',
'alert_type_description' => '<b>状態の変化:</b> '. 'alert_type_description' => '<b>状態の変化:</b> '.
'サーバーのステータスが変更されたときに通知を受け取ります。 だからオンライン -> オフラインまたはオフライン -> オンライン。<br/>'. 'サーバーのステータスが変更されたときに通知を受け取ります。 だからオンライン -> オフラインまたはオフライン -> オンライン。<br>'.
'<br /><b>オフライン:</b> '. '<br /><b>オフライン:</b> '.
'サーバーが*初めての間*オフラインになったときに通知を受け取ります。 例えば、'. 'サーバーが*初めての間*オフラインになったときに通知を受け取ります。 例えば、'.
'あなたのcronの仕事は15分ごとです。あなたのサーバーは午前1時にダウンし、午前6時まで停止します。 '. 'あなたのcronの仕事は15分ごとです。あなたのサーバーは午前1時にダウンし、午前6時まで停止します。 '.
'午前1時に1つの通知が届きます。<br/>'. '午前1時に1つの通知が届きます。<br>'.
'<br><b>常に:</b> '. '<br><b>常に:</b> '.
'サイトが数時間にわたってオフラインになっていても、スクリプトが実行され、サイトが停止するたびに通知を受け取ります。', 'サイトが数時間にわたってオフラインになっていても、スクリプトが実行され、サイトが停止するたびに通知を受け取ります。',
'alert_type_status' => '状況の変化', 'alert_type_status' => '状況の変化',
'alert_type_offline' => 'オフライン', 'alert_type_offline' => 'オフライン',
'alert_type_always' => '常に', 'alert_type_always' => '常に',
'alert_proxy' => '有効にしても、プロキシはサービスに使用されません', 'alert_proxy' => '有効にしても、プロキシはサービスに使用されません',
'alert_proxy_url' => '<b>フォーマット:</b> ホスト:ポート', 'alert_proxy_url' => 'フォーマット: ホスト:ポート',
'log_status' => 'ログステータス', 'log_status' => 'ログステータス',
'log_status_description' => 'ログステータスがTRUEに設定されている場合、モニターは通知設定が渡されるたびにイベントを記録します。', 'log_status_description' => 'ログステータスがTRUEに設定されている場合、モニターは通知設定が渡されるたびにイベントを記録します。',
'log_email' => 'スクリプトによって送信された電子メールを記録する', 'log_email' => 'スクリプトによって送信された電子メールを記録する',
@ -248,7 +249,7 @@ $sm_lang = array(
'settings_proxy' => 'プロキシ設定', 'settings_proxy' => 'プロキシ設定',
'auto_refresh' => '自動更新', 'auto_refresh' => '自動更新',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'サーバーページを自動更新します。<br/>'. 'サーバーページを自動更新します。<br>'.
'<span class="small">'. '<span class="small">'.
'時間を秒で指定し、0に設定すると更新しません。'. '時間を秒で指定し、0に設定すると更新しません。'.
'</span>', '</span>',
@ -273,18 +274,18 @@ $sm_lang = array(
'log_retention_period_description' => '通知のログおよびサーバー稼働時間のアーカイブを保持する日数。 ログのクリーンアップを無効にするには、0を入力します。', 'log_retention_period_description' => '通知のログおよびサーバー稼働時間のアーカイブを保持する日数。 ログのクリーンアップを無効にするには、0を入力します。',
'log_retention_days' => '日', 'log_retention_days' => '日',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'サーバー \'%LABEL%\' はダウンしています: ip=%IP%, ポート=%PORT%. エラー=%ERROR%', 'off_sms' => 'サーバー \'%LABEL%\' はダウンしています: ip=%IP%, ポート=%PORT%. エラー=%ERROR%',
'off_email_subject' => '重要: サーバー \'%LABEL%\' がダウンしています!', 'off_email_subject' => '重要: サーバー \'%LABEL%\' がダウンしています!',
'off_email_body' => "サーバーへの接続に失敗しました:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>エラー: %ERROR%<br/>日時: %DATE%", 'off_email_body' => "サーバーへの接続に失敗しました:<br><br>Server: %LABEL%<br>IP: %IP%<br>ポート: %PORT%<br>エラー: %ERROR%<br>日時: %DATE%",
'off_pushover_title' => 'サーバー \'%LABEL%\' がダウンしています!', 'off_pushover_title' => 'サーバー \'%LABEL%\' がダウンしています!',
'off_pushover_message' => "サーバーへの接続に失敗しました:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>エラー: %ERROR%<br/>日時: %DATE%", 'off_pushover_message' => "サーバーへの接続に失敗しました:<br><br>Server: %LABEL%<br>IP: %IP%<br>ポート: %PORT%<br>エラー: %ERROR%<br>日時: %DATE%",
'on_sms' => 'サーバー \'%LABEL%\' は動作しています: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'サーバー \'%LABEL%\' は動作しています: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => '重要: サーバー \'%LABEL%\' は動作しています', 'on_email_subject' => '重要: サーバー \'%LABEL%\' は動作しています',
'on_email_body' => "サーバー '%LABEL%' は動作中です, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>サーバー: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>日時: %DATE%", 'on_email_body' => "サーバー '%LABEL%' は動作中です, it was down for %LAST_OFFLINE_DURATION%:<br><br>サーバー: %LABEL%<br>IP: %IP%<br>ポート: %PORT%<br>日時: %DATE%",
'on_pushover_title' => 'サーバー \'%LABEL%\' は動作しています', 'on_pushover_title' => 'サーバー \'%LABEL%\' は動作しています',
'on_pushover_message' => "サーバー '%LABEL%' は動作中です, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>サーバー: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>日時: %DATE%", 'on_pushover_message' => "サーバー '%LABEL%' は動作中です, it was down for %LAST_OFFLINE_DURATION%:<br><br>サーバー: %LABEL%<br>IP: %IP%<br>ポート: %PORT%<br>日時: %DATE%",
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'ようこそ、 %user_name%', 'welcome_usermenu' => 'ようこそ、 %user_name%',

View File

@ -92,7 +92,7 @@ $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 global configuration.<br/><b>Users</b> can only view and run the updater for the servers that have been assigned to them.', '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.',
'mobile' => '휴대폰', 'mobile' => '휴대폰',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -214,12 +214,12 @@ $sm_lang = array(
'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" rel="noopener">register an App</a> at their website and enter the App API Token here.', '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.',
'alert_type' => '알림을 원하면 다음과 같이 변경하십시오.', 'alert_type' => '알림을 원하면 다음과 같이 변경하십시오.',
'alert_type_description' => '<b>상태 변경: </b><br/>'. 'alert_type_description' => '<b>상태 변경: </b><br>'.
'서버 상태가 변경이되면 알림을 받습니다. online -> offline -> online.<br/>'. '서버 상태가 변경이되면 알림을 받습니다. online -> offline -> online.<br>'.
'<br/><b>오프라인: </b><br/>'. '<br><b>오프라인: </b><br>'.
'서버가 첫번째로 오프라인이 되었을 때 알림을 받습니다. 예를들어, '. '서버가 첫번째로 오프라인이 되었을 때 알림을 받습니다. 예를들어, '.
'cron이 매 15분이고 오전1시 부터 오전6시까지 다운되었을때 오전1시에 한번 알림을 받습니다.<br />'. 'cron이 매 15분이고 오전1시 부터 오전6시까지 다운되었을때 오전1시에 한번 알림을 받습니다.<br />'.
'<br/><b>항상: </b><br/>'. '<br><b>항상: </b><br>'.
'사이트가 다운되었을 때 매시간 알림을 받습니다.', '사이트가 다운되었을 때 매시간 알림을 받습니다.',
'alert_type_status' => '상태 변경', 'alert_type_status' => '상태 변경',
@ -241,7 +241,7 @@ $sm_lang = array(
'settings_log' => '로그 설정', 'settings_log' => '로그 설정',
'auto_refresh' => 'Auto-refresh', 'auto_refresh' => 'Auto-refresh',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'서버페이지를 자동으로 새로고침.<br/>'. '서버페이지를 자동으로 새로고침.<br>'.
'<span class="small">'. '<span class="small">'.
'시간은 초(sec)로 설정을 하고, 0은 새로고침을 하지 않습니다.'. '시간은 초(sec)로 설정을 하고, 0은 새로고침을 하지 않습니다.'.
'</span>', '</span>',
@ -266,18 +266,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Number of days to keep logs of notifications and archives of server uptime. Enter 0 to disable log cleanup.', 'log_retention_period_description' => 'Number of days to keep logs of notifications and archives of server uptime. Enter 0 to disable log cleanup.',
'log_retention_days' => 'days', 'log_retention_days' => 'days',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => '서버(\'%LABEL%\')가 다운되었습니다. : ip=%IP%, port=%PORT%. Error=%ERROR%', 'off_sms' => '서버(\'%LABEL%\')가 다운되었습니다. : ip=%IP%, port=%PORT%. Error=%ERROR%',
'off_email_subject' => '중요: 서버(\'%LABEL%\')가 다운되었습니다.', 'off_email_subject' => '중요: 서버(\'%LABEL%\')가 다운되었습니다.',
'off_email_body' => "서버 접속을 실패하였습니다.<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Error: %ERROR%<br/>Date: %DATE%", 'off_email_body' => "서버 접속을 실패하였습니다.<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%",
'off_pushover_title' => '서버(\'%LABEL%\')가 다운되었습니다.', 'off_pushover_title' => '서버(\'%LABEL%\')가 다운되었습니다.',
'off_pushover_message' => "서버 접속을 실패하였습니다.<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Error: %ERROR%<br/>Date: %DATE%", 'off_pushover_message' => "서버 접속을 실패하였습니다.<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%",
'on_sms' => '서버(\'%LABEL%\') 가동중: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => '서버(\'%LABEL%\') 가동중: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => '중요: 서버(\'%LABEL%\')가 가동중입니다.', 'on_email_subject' => '중요: 서버(\'%LABEL%\')가 가동중입니다.',
'on_email_body' => "서버('%LABEL%')가 재가동됩니다., it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Date: %DATE%", 'on_email_body' => "서버('%LABEL%')가 재가동됩니다., it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%",
'on_pushover_title' => '서버(\'%LABEL%\')가 가동중입니다.', 'on_pushover_title' => '서버(\'%LABEL%\')가 가동중입니다.',
'on_pushover_message' => "서버('%LABEL%')가 재가동됩니다., it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Date: %DATE%", 'on_pushover_message' => "서버('%LABEL%')가 재가동됩니다., it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%",
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Welcome, %user_name%', 'welcome_usermenu' => 'Welcome, %user_name%',
@ -294,7 +294,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 in 1 hour.<br/><br/>%link%', 'password_reset_email_body' => 'Please use the following link to reset your password. Please note it expires 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.',

View File

@ -53,6 +53,8 @@ $sm_lang = array(
'ok' => 'OK', 'ok' => 'OK',
'bad' => 'niet goed', 'bad' => 'niet goed',
'cancel' => 'Cancel', 'cancel' => 'Cancel',
'none' => 'Geen',
'activate' => 'Activeer',
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Gisteren om %k:%M', 'yesterday_format' => 'Gisteren om %k:%M',
@ -64,18 +66,20 @@ $sm_lang = array(
'a_minute_ago' => 'een minuut geleden', 'a_minute_ago' => 'een minuut geleden',
'seconds_ago' => '%d seconden geleden', 'seconds_ago' => '%d seconden geleden',
'a_second_ago' => 'een seconde geleden', 'a_second_ago' => 'een seconde geleden',
'year' => 'year', 'year' => 'jaar',
'years' => 'years', 'years' => 'jaren',
'month' => 'month', 'month' => 'maand',
'months' => 'months', 'months' => 'maanden',
'day' => 'day', 'day' => 'dag',
'days' => 'days', 'days' => 'dagen',
'hour' => 'hour', 'hour' => 'uur',
'hours' => 'hours', 'hours' => 'uren',
'minute' => 'minute', 'minute' => 'minuut',
'minutes' => 'minutes', 'minutes' => 'minuten',
'second' => 'second', 'second' => 'seconde',
'seconds' => 'seconds', 'seconds' => 'seconden',
'current' => 'huidig',
'settings' => 'Instellingen',
), ),
'menu' => array( 'menu' => array(
'config' => 'Configuratie', 'config' => 'Configuratie',
@ -96,7 +100,7 @@ $sm_lang = array(
'level' => 'Level', 'level' => 'Level',
'level_10' => 'Beheerder', 'level_10' => 'Beheerder',
'level_20' => 'Gebruiker', 'level_20' => 'Gebruiker',
'level_description' => '<b>Beheerders</b> hebben volledige toegang: ze kunnen servers en gebruiker beheren en de globale configuratie aanpassen.<br/><b>Gebruikers</b> kunnen alleen de servers bekijken en op fouten testen die aan hun zijn toegewezen.', 'level_description' => '<b>Beheerders</b> hebben volledige toegang: ze kunnen servers en gebruiker beheren en de globale configuratie aanpassen.<br><b>Gebruikers</b> kunnen alleen de servers bekijken en op fouten testen die aan hun zijn toegewezen.',
'mobile' => 'Mobiel', 'mobile' => 'Mobiel',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -104,6 +108,12 @@ $sm_lang = array(
'pushover_key' => 'Pushover Key', 'pushover_key' => 'Pushover Key',
'pushover_device' => 'Pushover Device', 'pushover_device' => 'Pushover Device',
'pushover_device_description' => 'Apparaat waar de berichten naar toe gaan. Laat leeg voor alle apparaten.', 'pushover_device_description' => 'Apparaat waar de berichten naar toe gaan. Laat leeg voor alle apparaten.',
'telegram' => 'Telegram',
'telegram_chat_id' => 'Telegram chat id',
'telegram_get_chat_id' => 'Klik hier om je chat id te vinden',
'activate_telegram' => 'Activeer Telegram notificaties',
'telegram_bot_username_found' => 'De Telegram bot is gevonden! <br><a href="%s" target="_blank" rel="noopener"><button class="btn btn-primary">Volgende stap</button></a> <br>Dit zal een chat met de bot openen. Klik vervolgens op start of typ /start.',
'telegram_bot_error' => 'Er is een error voorgekomen tijdens de activatie van Telegram notificaties: %s',
'delete_title' => 'Verwijder gebruiker', 'delete_title' => 'Verwijder gebruiker',
'delete_message' => 'Weet je zeker dat je deze gebruiker wilt verwijderen: \'%1\'?', 'delete_message' => 'Weet je zeker dat je deze gebruiker wilt verwijderen: \'%1\'?',
'deleted' => 'Gebruiker verwijderd.', 'deleted' => 'Gebruiker verwijderd.',
@ -128,6 +138,7 @@ $sm_lang = array(
'email' => 'Email', 'email' => 'Email',
'sms' => 'SMS', 'sms' => 'SMS',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'telegram' => 'Telegram',
'no_logs' => 'Geen logs', 'no_logs' => 'Geen logs',
'clear' => 'Logboek opschonen', 'clear' => 'Logboek opschonen',
'delete_title' => 'Logboek opschonen', 'delete_title' => 'Logboek opschonen',
@ -140,19 +151,35 @@ $sm_lang = array(
'domain' => 'Domein/IP', 'domain' => 'Domein/IP',
'timeout' => 'Timeout', 'timeout' => 'Timeout',
'timeout_description' => 'Aantal seconden te wachten op een reactie van de server.', 'timeout_description' => 'Aantal seconden te wachten op een reactie van de server.',
'authentication_settings' => 'Authenticatie instellingen',
'optional' => 'Optioneel',
'website_username' => 'Gebruikersnaam',
'website_password' => 'Wachtwoord',
'port' => 'Poort', 'port' => 'Poort',
'custom_port' => 'Aangepaste poort',
'popular_ports' => 'Populaire poorten',
'post_field' => 'POST veld',
'please_select' => 'Selecteer',
'type' => 'Type', 'type' => 'Type',
'type_website' => 'Website', 'type_website' => 'Website',
'type_service' => 'Service', 'type_service' => 'Service',
'type_ping' => 'Ping',
'pattern' => 'Zoek voor tekst/regex', 'pattern' => 'Zoek voor tekst/regex',
'pattern_description' => 'Als dit patroon niet gevonden wordt op de website, zal de server als offline gemarkeerd worden. Regular expressions zijn toegestaan.', 'pattern_description' => 'Als dit patroon niet gevonden wordt op de website, zal de server als offline gemarkeerd worden. Regular expressions zijn toegestaan.',
'redirect_check' => 'Omleiden naar een ander domein is', 'redirect_check' => 'Omleiden naar een ander domein is',
'redirect_check_description' => 'Een omleiding naar een ander domein is meestal een slecht teken.', 'redirect_check_description' => 'Een omleiding naar een ander domein is meestal een slecht teken.',
'allow_http_status' => 'Sta HTTP status code toe', 'allow_http_status' => 'Sta HTTP status code toe',
'allow_http_status_description' => 'Markeer website als online. HTTP status code lager dan 400 worden standaard als online gemarkeerd. Scheiden met |. Bijvoorbeeld: 401|403.', 'allow_http_status_description' => 'Markeer website als online. HTTP status code lager dan 400 worden standaard als online gemarkeerd. Scheiden met |.',
'header_name' => 'Header naam',
'header_value' => 'Header waarde',
'header_name_description' => 'Hoofdlettergevoelig',
'last_check' => 'Laatst gecontroleerd', 'last_check' => 'Laatst gecontroleerd',
'last_online' => 'Laatst online', 'last_online' => 'Laatst online',
'last_offline' => 'Laatst offline', 'last_offline' => 'Laatst offline',
'last_output' => 'Laatste succesvole uitvoer',
'last_error' => 'Laatste error',
'last_error_output' => 'Laatste error uitvoer',
'output' => 'Uitvoer',
'monitoring' => 'Monitoring', 'monitoring' => 'Monitoring',
'no_monitoring' => 'Geen monitoring', 'no_monitoring' => 'Geen monitoring',
'email' => 'Email', 'email' => 'Email',
@ -160,6 +187,9 @@ $sm_lang = array(
'sms' => 'SMS', 'sms' => 'SMS',
'send_sms' => 'Stuur SMS', 'send_sms' => 'Stuur SMS',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'send_pushover' => 'Stuur Pushover notificatie',
'telegram' => 'Telegram',
'send_telegram' => 'Stuur Telegram notificatie',
'users' => 'Gebruikers', 'users' => 'Gebruikers',
'delete_title' => 'Verwijder server', 'delete_title' => 'Verwijder server',
'delete_message' => 'Weet je zeker dat je deze server wilt verwijderen: \'%1\'?', 'delete_message' => 'Weet je zeker dat je deze server wilt verwijderen: \'%1\'?',
@ -170,13 +200,15 @@ $sm_lang = array(
'latency_max' => 'Latency (maximum)', 'latency_max' => 'Latency (maximum)',
'latency_min' => 'Latency (minimum)', 'latency_min' => 'Latency (minimum)',
'latency_avg' => 'Latency (gemiddeld)', 'latency_avg' => 'Latency (gemiddeld)',
'online' => 'online',
'offline' => 'offline',
'uptime' => 'Uptime', 'uptime' => 'Uptime',
'year' => 'Jaar', 'year' => 'Jaar',
'month' => 'Maand', 'month' => 'Maand',
'week' => 'Week', 'week' => 'Week',
'day' => 'Dag', 'day' => 'Dag',
'hour' => 'Uur', 'hour' => 'Uur',
'warning_threshold' => 'Warning threshold', 'warning_threshold' => 'Waarschuwingsdrempel',
'warning_threshold_description' => 'Aantal mislukte pogingen voordat de server als offline gemarkeerd wordt.', 'warning_threshold_description' => 'Aantal mislukte pogingen voordat de server als offline gemarkeerd wordt.',
'chart_last_week' => 'Afgelopen week', 'chart_last_week' => 'Afgelopen week',
'chart_history' => 'Geschiedenis', 'chart_history' => 'Geschiedenis',
@ -187,6 +219,7 @@ $sm_lang = array(
'warning_notifications_disabled_sms' => 'SMS notificaties zijn uitgeschakeld.', 'warning_notifications_disabled_sms' => 'SMS notificaties zijn uitgeschakeld.',
'warning_notifications_disabled_email' => 'Email notificaties zijn uitgeschakeld.', 'warning_notifications_disabled_email' => 'Email notificaties zijn uitgeschakeld.',
'warning_notifications_disabled_pushover' => 'Pushover notificaties zijn uitgeschakeld.', 'warning_notifications_disabled_pushover' => 'Pushover notificaties zijn uitgeschakeld.',
'warning_notifications_disabled_telegram' => 'Telegram notificaties zijn uitgeschakeld.',
'error_server_no_match' => 'Server niet gevonden.', 'error_server_no_match' => 'Server niet gevonden.',
'error_server_label_bad_length' => 'Het label moet tussen de 1 en 255 karakters lang zijn.', 'error_server_label_bad_length' => 'Het label moet tussen de 1 en 255 karakters lang zijn.',
'error_server_ip_bad_length' => 'Het domein / IP moet tussen de 1 en 255 karakters lang zijn.', 'error_server_ip_bad_length' => 'Het domein / IP moet tussen de 1 en 255 karakters lang zijn.',
@ -220,27 +253,35 @@ $sm_lang = array(
'pushover_clone_app' => 'Klik hier om je Pushover app te maken', 'pushover_clone_app' => 'Klik hier om je Pushover app te maken',
'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token' => 'Pushover App API Token',
'pushover_api_token_description' => 'Voordat je Pushover kunt gebruiken moet je een <a href="%1$s" target="_blank" rel="noopener">App registreren</a> via hun website, en daarvan de App API Token hier invullen.', 'pushover_api_token_description' => 'Voordat je Pushover kunt gebruiken moet je een <a href="%1$s" target="_blank" rel="noopener">App registreren</a> via hun website, en daarvan de App API Token hier invullen.',
'telegram_status' => 'Sta Telegram berichten toe?',
'telegram_api_token' => 'Telegram API Token',
'alert_type' => 'Selecteer wanneer je een notificatie wilt', 'alert_type' => 'Selecteer wanneer je een notificatie wilt',
'alert_type_description' => '<b>Status verandert:</b> Je ontvangt alleen bericht wanneer een server van status verandert. Dus van online -> offline of offline -> online.<br/><br /><b>Offline:</b> Je ontvangt bericht wanneer een server offline gaat voor de *EERSTE KEER*. Bijvoorbeeld, je cronjob draait iedere 15 min en je server gaat down om 01:00 en blijft offline tot 06:00. Je krijgt 1 bericht om 01:00 en dat is het.<br/><br/><b>Altijd:</b> Je krijgt een bericht elke keer dat het script draait en een website is down, ook al is de site al een paar uur offline.', 'alert_type_description' => '<b>Status verandert:</b> Je ontvangt alleen bericht wanneer een server van status verandert. Dus van online -> offline of offline -> online.<br><br /><b>Offline:</b> Je ontvangt bericht wanneer een server offline gaat voor de *EERSTE KEER*. Bijvoorbeeld, je cronjob draait iedere 15 min en je server gaat down om 01:00 en blijft offline tot 06:00. Je krijgt 1 bericht om 01:00 en dat is het.<br><br><b>Altijd:</b> Je krijgt een bericht elke keer dat het script draait en een website is down, ook al is de site al een paar uur offline.',
'alert_type_status' => 'Status verandering', 'alert_type_status' => 'Status verandering',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
'alert_type_always' => 'Altijd', 'alert_type_always' => 'Altijd',
'combine_notifications' => 'Combineer notificaties',
'alert_proxy_url' => 'Formaat: host:poort',
'log_status' => 'Log status', 'log_status' => 'Log status',
'log_status_description' => 'Als de log status aan staat, zal de monitor een log aanmaken elke keer dat hij door de notificatie instellingen komt.', 'log_status_description' => 'Als de log status aan staat, zal de monitor een log aanmaken elke keer dat hij door de notificatie instellingen komt.',
'log_email' => 'Log emails verstuurd bij het script?', 'log_email' => 'Log emails verstuurd bij het script?',
'log_sms' => 'Log sms berichten verstuurd bij het script?', 'log_sms' => 'Log sms berichten verstuurd bij het script?',
'log_pushover' => 'Log Pushover berichten verstuurd bij het script?', 'log_pushover' => 'Log Pushover berichten verstuurd bij het script?',
'log_telegram' => 'Log Telegram berichten verstuurd bij het script?',
'updated' => 'De configuratie is gewijzigd.', 'updated' => 'De configuratie is gewijzigd.',
'tab_email' => 'Email', 'tab_email' => 'Email',
'tab_sms' => 'SMS', 'tab_sms' => 'SMS',
'tab_pushover' => 'Pushover', 'tab_pushover' => 'Pushover',
'tab_telegram' => 'Telegram',
'settings_email' => 'Email instellingen', 'settings_email' => 'Email instellingen',
'settings_sms' => 'SMS instellingen', 'settings_sms' => 'SMS instellingen',
'settings_pushover' => 'Pushover instellingen', 'settings_pushover' => 'Pushover instellingen',
'settings_telegram' => 'Telegram instellingen',
'settings_notification' => 'Notificatie instellingen', 'settings_notification' => 'Notificatie instellingen',
'settings_log' => 'Log instellingen', 'settings_log' => 'Log instellingen',
'auto_refresh' => 'Auto-refresh', 'settings_proxy' => 'Proxy instellingen',
'auto_refresh_servers' => 'Auto-herladen servers pagina.<br/><span class="small">Tijd in seconden, als de tijd 0 is wordt de pagina niet ververst.</span>', 'auto_refresh' => 'Herlaad automatisch',
'auto_refresh_servers' => 'Auto-herladen servers pagina.<br><span class="small">Tijd in seconden, als de tijd 0 is wordt de pagina niet ververst.</span>',
'seconds' => 'seconden', 'seconds' => 'seconden',
'test' => 'Test', 'test' => 'Test',
'test_email' => 'Er zal een email verstuurd worden naar het email adres in je profiel.', 'test_email' => 'Er zal een email verstuurd worden naar het email adres in je profiel.',
@ -258,6 +299,10 @@ $sm_lang = array(
'pushover_error' => 'De volgende fout is opgetreden bij het versturen van de Pushover notificatie: %s', 'pushover_error' => 'De volgende fout is opgetreden bij het versturen van de Pushover notificatie: %s',
'pushover_error_noapp' => 'Kan test notificatie niet verzenden: er is geen Pushover App API token gevonden in de algemene configuratie.', 'pushover_error_noapp' => 'Kan test notificatie niet verzenden: er is geen Pushover App API token gevonden in de algemene configuratie.',
'pushover_error_nokey' => 'Kan test notificatie niet verzenden: er is geen Pushover key gevonden in je profiel.', 'pushover_error_nokey' => 'Kan test notificatie niet verzenden: er is geen Pushover key gevonden in je profiel.',
'telegram_sent' => 'Telegram notificatie verstuurd',
'telegram_error' => 'Er is een error voorgekomen tijdens het versturen van de Telegram notificatie: %s',
'telegram_error_notoken' => 'Niet mogelijk on test notificatie te versturen: Telegram API token niet gevonden in globale instellingen.',
'telegram_error_noid' => 'Niet mogelijk on test notificatie te versturen: chat id niet gevonden op profiel.',
'log_retention_period' => 'Log retentie periode', 'log_retention_period' => 'Log retentie periode',
'log_retention_period_description' => 'Aantal dagen dat logs van notificaties en archieven van server uptime worden bewaard. Vul 0 in om log opruiming uit te zetten.', 'log_retention_period_description' => 'Aantal dagen dat logs van notificaties en archieven van server uptime worden bewaard. Vul 0 in om log opruiming uit te zetten.',
'log_retention_days' => 'dagen', 'log_retention_days' => 'dagen',
@ -265,14 +310,15 @@ $sm_lang = array(
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server %LABEL% is DOWN: ip=%IP%, poort=%PORT%. Fout=%ERROR%', 'off_sms' => 'Server %LABEL% is DOWN: ip=%IP%, poort=%PORT%. Fout=%ERROR%',
'off_email_subject' => 'BELANGRIJK: Server %LABEL% is DOWN', 'off_email_subject' => 'BELANGRIJK: Server %LABEL% is DOWN',
'off_email_body' => 'De server kon niet worden bereikt:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Poort: %PORT%<br/>Fout: %ERROR%<br/>Datum: %DATE%', 'off_email_body' => 'De server kon niet worden bereikt:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort: %PORT%<br>Fout: %ERROR%<br>Datum: %DATE%',
'off_pushover_title' => 'Server %LABEL% is DOWN', 'off_pushover_title' => 'Server %LABEL% is DOWN',
'off_pushover_message' => 'De server kon niet worden bereikt:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Poort: %PORT%<br/>Fout: %ERROR%<br/>Datum: %DATE%', 'off_pushover_message' => 'De server kon niet worden bereikt:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort: %PORT%<br>Fout: %ERROR%<br>Datum: %DATE%',
'off_telegram_message' => 'De server kon niet worden bereikt:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort: %PORT%<br>Fout: %ERROR%<br>Datum: %DATE%',
'on_sms' => 'Server %LABEL% is RUNNING: ip=%IP%, poort=%PORT%, tijd offline=%LAST_OFFLINE_DURATION%', 'on_sms' => 'Server %LABEL% is RUNNING: ip=%IP%, poort=%PORT%, tijd offline=%LAST_OFFLINE_DURATION%',
'on_email_subject' => 'BELANGRIJK: Server %LABEL% is RUNNING', 'on_email_subject' => 'BELANGRIJK: Server %LABEL% is RUNNING',
'on_email_body' => 'Server %LABEL% is na %LAST_OFFLINE_DURATION% weer online:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Poort: %PORT%<br/>Datum: %DATE%', 'on_email_body' => 'Server %LABEL% is na %LAST_OFFLINE_DURATION% weer online:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort: %PORT%<br>Datum: %DATE%',
'on_pushover_title' => 'Server %LABEL% is RUNNING', 'on_pushover_title' => 'Server %LABEL% is RUNNING',
'on_pushover_message' => 'Server %LABEL% is na %LAST_OFFLINE_DURATION% weer online:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Poort: %PORT%<br/>Datum: %DATE%', 'on_pushover_message' => 'Server %LABEL% is na %LAST_OFFLINE_DURATION% weer online:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort: %PORT%<br>Datum: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Welkom, %user_name%', 'welcome_usermenu' => 'Welkom, %user_name%',
@ -289,7 +335,7 @@ $sm_lang = array(
'password_forgot' => 'Wachtwoord vergeten?', 'password_forgot' => 'Wachtwoord vergeten?',
'password_reset' => 'Wachtwoord herstellen', 'password_reset' => 'Wachtwoord herstellen',
'password_reset_email_subject' => 'Wijzig je wachtwoord voor PHP Server Monitor', 'password_reset_email_subject' => 'Wijzig je wachtwoord voor PHP Server Monitor',
'password_reset_email_body' => 'Gebruik de onderstaande link om je wachtwoord te wijzigen. Let op, deze link verloopt na 1 uur.<br/><br/>%link%', 'password_reset_email_body' => 'Gebruik de onderstaande link om je wachtwoord te wijzigen. Let op, deze link verloopt na 1 uur.<br><br>%link%',
'error_user_incorrect' => 'De opgegeven gebruikersnaam is onjuist.', 'error_user_incorrect' => 'De opgegeven gebruikersnaam is onjuist.',
'error_login_incorrect' => 'De informatie is niet juist.', 'error_login_incorrect' => 'De informatie is niet juist.',
'error_login_passwords_nomatch' => 'De ingevulde wachtwoorden komen niet overeen.', 'error_login_passwords_nomatch' => 'De ingevulde wachtwoorden komen niet overeen.',

View File

@ -73,8 +73,6 @@ $sm_lang = array(
'minutes' => 'minutter', 'minutes' => 'minutter',
'second' => 'sekund', 'second' => 'sekund',
'seconds' => 'sekunder', 'seconds' => 'sekunder',
'online' => 'online',
'offline' => 'offline',
), ),
'menu' => array( 'menu' => array(
'config' => 'Konfig', 'config' => 'Konfig',
@ -95,7 +93,7 @@ $sm_lang = array(
'level' => 'Level', 'level' => 'Level',
'level_10' => 'Administrator', 'level_10' => 'Administrator',
'level_20' => 'Bruker', 'level_20' => 'Bruker',
'level_description' => '<b>Administratorer</b> har full tilgang: de kan administrere servere, brukere og redigere den globale konfigurasjonen.<br/><b>Brukere</b> kan bare vise og kjøre oppdatering for serverne som er tildelt dem.', 'level_description' => '<b>Administratorer</b> har full tilgang: de kan administrere servere, brukere og redigere den globale konfigurasjonen.<br><b>Brukere</b> kan bare vise og kjøre oppdatering for serverne som er tildelt dem.',
'mobile' => 'Mobil', 'mobile' => 'Mobil',
'email' => 'E-post', 'email' => 'E-post',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -150,7 +148,8 @@ $sm_lang = array(
'domain' => 'Domene/IP', 'domain' => 'Domene/IP',
'timeout' => 'Timeout', 'timeout' => 'Timeout',
'timeout_description' => 'Antall sekunder å vente på at serveren skal svare.', 'timeout_description' => 'Antall sekunder å vente på at serveren skal svare.',
'authentication_settings' => 'Autentiseringsinnstillinger (ValgfrittF)', 'authentication_settings' => 'Autentiseringsinnstillinger',
'optional' => 'ValgfrittF',
'website_username' => 'Brukernavn', 'website_username' => 'Brukernavn',
'website_username_description' => 'Brukernavn for å få tilgang til nettstedet. (Kun Apache-godkjenning støttes.)', 'website_username_description' => 'Brukernavn for å få tilgang til nettstedet. (Kun Apache-godkjenning støttes.)',
'website_password' => 'Password', 'website_password' => 'Password',
@ -169,9 +168,10 @@ $sm_lang = array(
'pattern_description' => 'Hvis dette mønsteret ikke er funnet på nettstedet, blir serveren merket online/offline. Vanlige uttrykk er tillatt.', 'pattern_description' => 'Hvis dette mønsteret ikke er funnet på nettstedet, blir serveren merket online/offline. Vanlige uttrykk er tillatt.',
'pattern_online' => 'Mønster indikerer at nettstedet er', 'pattern_online' => 'Mønster indikerer at nettstedet er',
'pattern_online_description' => 'Online: Hvis dette mønsteret ikke er funnet på nettstedet, blir serveren merket online. Offline: Hvis dette mønsteret ikke er funnet på nettstedet, blir serveren merket offline.', 'pattern_online_description' => 'Online: Hvis dette mønsteret ikke er funnet på nettstedet, blir serveren merket online. Offline: Hvis dette mønsteret ikke er funnet på nettstedet, blir serveren merket offline.',
'header' => 'Overskrift', 'header_name' => 'Overskriftnavn',
'header_name_description' => 'Overskriftnavn (versalsensitivt)', 'header_value' => 'Overskriftsverdi',
'header_value_description' => 'Overskriftsverdi. Vanlige uttrykk er tillatt.', 'header_name_description' => 'Versalsensitivt.',
'header_value_description' => 'Vanlige uttrykk er tillatt.',
'last_check' => 'Siste sjekk', 'last_check' => 'Siste sjekk',
'last_online' => 'Sist online', 'last_online' => 'Sist online',
'last_offline' => 'Sist offline', 'last_offline' => 'Sist offline',
@ -195,6 +195,8 @@ $sm_lang = array(
'latency_max' => 'Ventetid (maximum)', 'latency_max' => 'Ventetid (maximum)',
'latency_min' => 'Ventetid (minimum)', 'latency_min' => 'Ventetid (minimum)',
'latency_avg' => 'Ventetid (gjennomsnitt)', 'latency_avg' => 'Ventetid (gjennomsnitt)',
'online' => 'online',
'offline' => 'offline',
'uptime' => 'Oppetid', 'uptime' => 'Oppetid',
'year' => 'År', 'year' => 'År',
'month' => 'Måned', 'month' => 'Måned',
@ -259,18 +261,18 @@ $sm_lang = array(
'telegram_api_token_description' => 'Før du kan bruke Telegram, må du få en API-token. Gå til <a href="http://docs.phpservermonitor.org/">dokumentasjonen</a> for å få hjelp.', 'telegram_api_token_description' => 'Før du kan bruke Telegram, må du få en API-token. Gå til <a href="http://docs.phpservermonitor.org/">dokumentasjonen</a> for å få hjelp.',
'alert_type' => 'Velg når du vil bli varslet.', 'alert_type' => 'Velg når du vil bli varslet.',
'alert_type_description' => '<b>Statusendring:</b> '. 'alert_type_description' => '<b>Statusendring:</b> '.
'Du vil motta et varsel når en server har endret status. Så fra online -> offline eller offline -> online.<br/>'. 'Du vil motta et varsel når en server har endret status. Så fra online -> offline eller offline -> online.<br>'.
'<br /><b>Offline:</b> '. '<br /><b>Offline:</b> '.
'Du vil motta et varsel når en server går offline for *FØRSTE GANG BARE*. For eksempel,'. 'Du vil motta et varsel når en server går offline for *FØRSTE GANG BARE*. For eksempel,'.
'din cronjob er hver 15 minutter og serveren din går ned klokken 01:00 og holder seg ned til 06:00. '. 'din cronjob er hver 15 minutter og serveren din går ned klokken 01:00 og holder seg ned til 06:00. '.
'Du får 1 melding klokken 01:00 og det er det.<br/>'. 'Du får 1 melding klokken 01:00 og det er det.<br>'.
'<br><b>Alltid:</b> '. '<br><b>Alltid:</b> '.
'Du vil motta et varsel hver gang scriptet kjører, og et nettsted er nede, selv om nettstedet har vært offline i flere timer.', 'Du vil motta et varsel hver gang scriptet kjører, og et nettsted er nede, selv om nettstedet har vært offline i flere timer.',
'alert_type_status' => 'Statusendring', 'alert_type_status' => 'Statusendring',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
'alert_type_always' => 'Alltid', 'alert_type_always' => 'Alltid',
'alert_proxy' => 'Selv om aktivert, blir proxy aldri brukt for tjenester', 'alert_proxy' => 'Selv om aktivert, blir proxy aldri brukt for tjenester',
'alert_proxy_url' => '<b>Format:</b> Vert:Port', 'alert_proxy_url' => 'Format: Vert:Port',
'log_status' => 'Logg status', 'log_status' => 'Logg status',
'log_status_description' => 'Hvis loggstatus er satt til SANT, logger monitoren på hendelsen når meldingsinnstillingene er bestått.', 'log_status_description' => 'Hvis loggstatus er satt til SANT, logger monitoren på hendelsen når meldingsinnstillingene er bestått.',
'log_email' => 'Logg e-post sendt av skriptet', 'log_email' => 'Logg e-post sendt av skriptet',
@ -291,7 +293,7 @@ $sm_lang = array(
'settings_proxy' => 'Proxy innstillinger', 'settings_proxy' => 'Proxy innstillinger',
'auto_refresh' => 'Auto-refresh', 'auto_refresh' => 'Auto-refresh',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Auto-refresh server side.<br/>'. 'Auto-refresh server side.<br>'.
'<span class="small">'. '<span class="small">'.
'Tid i sekunder, hvis 0 siden ikke blir oppdatert.'. 'Tid i sekunder, hvis 0 siden ikke blir oppdatert.'.
'</span>', '</span>',
@ -321,20 +323,20 @@ $sm_lang = array(
'log_retention_period_description' => 'Antall dager for å holde logger over varsler og arkiver av serveroppetid. Skriv 0 for å deaktivere loggopprydding.', 'log_retention_period_description' => 'Antall dager for å holde logger over varsler og arkiver av serveroppetid. Skriv 0 for å deaktivere loggopprydding.',
'log_retention_days' => 'dager', 'log_retention_days' => 'dager',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Serveren \'%LABEL%\' er NEDE: ip=%IP%, port=%PORT%. Feil=%ERROR%', 'off_sms' => 'Serveren \'%LABEL%\' er NEDE: ip=%IP%, port=%PORT%. Feil=%ERROR%',
'off_email_subject' => 'VIKTIG: Serveren \'%LABEL%\' er NEDE', 'off_email_subject' => 'VIKTIG: Serveren \'%LABEL%\' er NEDE',
'off_email_body' => "Kunne ikke koble til følgende server:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Feil: %ERROR%<br/>Dato: %DATE%", 'off_email_body' => "Kunne ikke koble til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Feil: %ERROR%<br>Dato: %DATE%",
'off_pushover_title' => 'Server \'%LABEL%\' er NEDE', 'off_pushover_title' => 'Server \'%LABEL%\' er NEDE',
'off_pushover_message' => "Kunne ikke koble til følgende server:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Feil: %ERROR%<br/>Dato: %DATE%", 'off_pushover_message' => "Kunne ikke koble til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Feil: %ERROR%<br>Dato: %DATE%",
'off_telegram_message' => "Kunne ikke koble til følgende server:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Feil: %ERROR%<br/>Dato: %DATE%", 'off_telegram_message' => "Kunne ikke koble til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Feil: %ERROR%<br>Dato: %DATE%",
'on_sms' => 'Server \'%LABEL%\' er OPPE igjen: ip=%IP%, port=%PORT%, det var nede i %LAST_OFFLINE_DURATION%', 'on_sms' => 'Server \'%LABEL%\' er OPPE igjen: ip=%IP%, port=%PORT%, det var nede i %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'VIKTIG: Server \'%LABEL%\' er OPPE', 'on_email_subject' => 'VIKTIG: Server \'%LABEL%\' er OPPE',
'on_email_body' => "Server '%LABEL%' er oppe igjen, det var nede i %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Dato: %DATE%", 'on_email_body' => "Server '%LABEL%' er oppe igjen, det var nede i %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato: %DATE%",
'on_pushover_title' => 'Server \'%LABEL%\' er OPPE', 'on_pushover_title' => 'Server \'%LABEL%\' er OPPE',
'on_pushover_message' => 'Server \'%LABEL%\' er oppe igjen, det var nede i %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Dato: %DATE%', 'on_pushover_message' => 'Server \'%LABEL%\' er oppe igjen, det var nede i %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato: %DATE%',
'on_telegram_message' => 'Server \'%LABEL%\' er oppe igjen, det var nede i %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Dato: %DATE%', 'on_telegram_message' => 'Server \'%LABEL%\' er oppe igjen, det var nede i %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Velkommen, %user_name%', 'welcome_usermenu' => 'Velkommen, %user_name%',
@ -351,7 +353,7 @@ $sm_lang = array(
'password_forgot' => 'Glemt passordet?', 'password_forgot' => 'Glemt passordet?',
'password_reset' => 'Tilbakestille passord', 'password_reset' => 'Tilbakestille passord',
'password_reset_email_subject' => 'Tilbakestill passordet ditt for PHP Server Monitor', 'password_reset_email_subject' => 'Tilbakestill passordet ditt for PHP Server Monitor',
'password_reset_email_body' => 'Vennligst bruk følgende link for å tilbakestille passordet ditt. Vær oppmerksom på at det utløper om 1 time.<br/><br/>%link%', 'password_reset_email_body' => 'Vennligst bruk følgende link for å tilbakestille passordet ditt. Vær oppmerksom på at det utløper om 1 time.<br><br>%link%',
'error_user_incorrect' => 'Det oppgitte brukernavnet ble ikke funnet.', 'error_user_incorrect' => 'Det oppgitte brukernavnet ble ikke funnet.',
'error_login_incorrect' => 'Informasjonen er feil.', 'error_login_incorrect' => 'Informasjonen er feil.',
'error_login_passwords_nomatch' => 'De oppgitte passordene stemmer ikke overens.', 'error_login_passwords_nomatch' => 'De oppgitte passordene stemmer ikke overens.',

View File

@ -92,7 +92,7 @@ $sm_lang = array(
'level' => 'Poziom', 'level' => 'Poziom',
'level_10' => 'Administrator', 'level_10' => 'Administrator',
'level_20' => 'Użytkownik', 'level_20' => 'Użytkownik',
'level_description' => '<b>Administratorzy</b> posiadają pełny dostęp: mogą zarządzać serwerami, użytkownikami oraz edytować konfigurację globalną.<br/><b>Użytkownicy</b> mogą podejrzeć serwer oraz uruchomić aktualizację statusu dla serwerów do nich przypisanych.', 'level_description' => '<b>Administratorzy</b> posiadają pełny dostęp: mogą zarządzać serwerami, użytkownikami oraz edytować konfigurację globalną.<br><b>Użytkownicy</b> mogą podejrzeć serwer oraz uruchomić aktualizację statusu dla serwerów do nich przypisanych.',
'mobile' => 'Telefon', 'mobile' => 'Telefon',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -215,11 +215,11 @@ $sm_lang = array(
'pushover_api_token_description' => 'Zanim zaczniesz używać Pushover, musisz <a href="%1$s" target="_blank" rel="noopener"> zarejestrować aplikację</a> na ich stronie internetowej i wpisać tutaj App API Token.', 'pushover_api_token_description' => 'Zanim zaczniesz używać Pushover, musisz <a href="%1$s" target="_blank" rel="noopener"> zarejestrować aplikację</a> na ich stronie internetowej i wpisać tutaj App API Token.',
'alert_type' => 'Wybierz kiedy chcesz być powiadomiony.', 'alert_type' => 'Wybierz kiedy chcesz być powiadomiony.',
'alert_type_description' => '<b>Zmiana statusu:</b> '. 'alert_type_description' => '<b>Zmiana statusu:</b> '.
'Otrzymasz powiadomienie gdy serwer zmieni status. Z online -> offline lub offline -> online.<br/>'. 'Otrzymasz powiadomienie gdy serwer zmieni status. Z online -> offline lub offline -> online.<br>'.
'<br /><b>Offline:</b> '. '<br /><b>Offline:</b> '.
'Otrzymasz powiadomienie gdy serwer zmieni status na offline po raz pierwszy. Na przykład, '. 'Otrzymasz powiadomienie gdy serwer zmieni status na offline po raz pierwszy. Na przykład, '.
'Twój cronjob uruchamia się co 15 minut, a Twój serwer przestaje odpowiadać o 13 i nie działa do 18. '. 'Twój cronjob uruchamia się co 15 minut, a Twój serwer przestaje odpowiadać o 13 i nie działa do 18. '.
'Otrzymasz *TYLKO* jedno powiadomienie o 13.<br/>'. 'Otrzymasz *TYLKO* jedno powiadomienie o 13.<br>'.
'<br><b>Zawsze:</b> '. '<br><b>Zawsze:</b> '.
'Otrzymasz powiadomienie za każdym razem gdy skrypt zostanie uruchomiony a strona będzie niedostępna.', 'Otrzymasz powiadomienie za każdym razem gdy skrypt zostanie uruchomiony a strona będzie niedostępna.',
'alert_type_status' => 'Zmiana statusu', 'alert_type_status' => 'Zmiana statusu',
@ -241,7 +241,7 @@ $sm_lang = array(
'settings_log' => 'Ustawienia Logowania', 'settings_log' => 'Ustawienia Logowania',
'auto_refresh' => 'Auto-odświeżanie', 'auto_refresh' => 'Auto-odświeżanie',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Auto-odświeżanie strony serwera.<br/>'. 'Auto-odświeżanie strony serwera.<br>'.
'<span class="small">'. '<span class="small">'.
'Czas w sekundach, dla czasu 0 strona nie będzie odświeżana.'. 'Czas w sekundach, dla czasu 0 strona nie będzie odświeżana.'.
'</span>', '</span>',
@ -266,18 +266,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Liczba dni przez którą należy przetrzymywać logi powiadomień i archiwizować uptime serwera. Wpisz 0 aby wyłączyć czyszczenie logów.', 'log_retention_period_description' => 'Liczba dni przez którą należy przetrzymywać logi powiadomień i archiwizować uptime serwera. Wpisz 0 aby wyłączyć czyszczenie logów.',
'log_retention_days' => 'dni', 'log_retention_days' => 'dni',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Serwer \'%LABEL%\' przestał odpowiadać: ip=%IP%, port=%PORT%. Błąd=%ERROR%', 'off_sms' => 'Serwer \'%LABEL%\' przestał odpowiadać: ip=%IP%, port=%PORT%. Błąd=%ERROR%',
'off_email_subject' => 'Uwaga: Serwer \'%LABEL%\' nie odpowiada', 'off_email_subject' => 'Uwaga: Serwer \'%LABEL%\' nie odpowiada',
'off_email_body' => "Błąd połączenia do serwera:<br/><br/>Serwer: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Błąd: %ERROR%<br/>Data: %DATE%", 'off_email_body' => "Błąd połączenia do serwera:<br><br>Serwer: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Błąd: %ERROR%<br>Data: %DATE%",
'off_pushover_title' => 'Serwer \'%LABEL%\' nie odpowiada', 'off_pushover_title' => 'Serwer \'%LABEL%\' nie odpowiada',
'off_pushover_message' => "Błąd połączenia do serwera:<br/><br/>Serwer: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Błąd: %ERROR%<br/>Data: %DATE%", 'off_pushover_message' => "Błąd połączenia do serwera:<br><br>Serwer: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Błąd: %ERROR%<br>Data: %DATE%",
'on_sms' => 'Serwer \'%LABEL%\' działa poprawnie: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Serwer \'%LABEL%\' działa poprawnie: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'Uwaga: Serwer \'%LABEL%\' działa poprawnie', 'on_email_subject' => 'Uwaga: Serwer \'%LABEL%\' działa poprawnie',
'on_email_body' => "Serwer '%LABEL%' znów odpowiada, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Serwer: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Data: %DATE%", 'on_email_body' => "Serwer '%LABEL%' znów odpowiada, it was down for %LAST_OFFLINE_DURATION%:<br><br>Serwer: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Data: %DATE%",
'on_pushover_title' => 'Serwer \'%LABEL%\' działa poprawnie', 'on_pushover_title' => 'Serwer \'%LABEL%\' działa poprawnie',
'on_pushover_message' => 'Serwer \'%LABEL%\' znów działa poprawnie, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Serwer: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Data: %DATE%', 'on_pushover_message' => 'Serwer \'%LABEL%\' znów działa poprawnie, it was down for %LAST_OFFLINE_DURATION%:<br><br>Serwer: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Data: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Witaj, %user_name%', 'welcome_usermenu' => 'Witaj, %user_name%',
@ -294,7 +294,7 @@ $sm_lang = array(
'password_forgot' => 'Zapomniałeś hasła?', 'password_forgot' => 'Zapomniałeś hasła?',
'password_reset' => 'Zresetuj hasło', 'password_reset' => 'Zresetuj hasło',
'password_reset_email_subject' => 'Zresetuj hasło do monitoringu', 'password_reset_email_subject' => 'Zresetuj hasło do monitoringu',
'password_reset_email_body' => 'Aby zresetować hasło użyj tego linku. Ważność linku to jedna godzina.<br/><br/>%link%', 'password_reset_email_body' => 'Aby zresetować hasło użyj tego linku. Ważność linku to jedna godzina.<br><br>%link%',
'error_user_incorrect' => 'Brak użytkownika o takim loginie.', 'error_user_incorrect' => 'Brak użytkownika o takim loginie.',
'error_login_incorrect' => 'Login lub hasło jest błędne.', 'error_login_incorrect' => 'Login lub hasło jest błędne.',
'error_login_passwords_nomatch' => 'Podane hasła nie pasują do siebie.', 'error_login_passwords_nomatch' => 'Podane hasła nie pasują do siebie.',

View File

@ -92,7 +92,7 @@ $sm_lang = array(
'level' => 'Nível', 'level' => 'Nível',
'level_10' => 'Administrador', 'level_10' => 'Administrador',
'level_20' => 'Usuário', 'level_20' => 'Usuário',
'level_description' => '<b>Administradores</b> Tem total acesso: podem gerenciar servidores, usuários e configurações globais.<br/><b>Usuários</b> só podem executar atualizações para servidores que lhe foram atribuídos.', 'level_description' => '<b>Administradores</b> Tem total acesso: podem gerenciar servidores, usuários e configurações globais.<br><b>Usuários</b> só podem executar atualizações para servidores que lhe foram atribuídos.',
'mobile' => 'Celular', 'mobile' => 'Celular',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -215,11 +215,11 @@ $sm_lang = array(
'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.', '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.',
'alert_type' => 'Selecione como você gostaria de ser notificado.', 'alert_type' => 'Selecione como você gostaria de ser notificado.',
'alert_type_description' => '<b>Mudança de Status:</b> '. 'alert_type_description' => '<b>Mudança de Status:</b> '.
'Você receberá uma notificação quando o seridor tive uma mudança de status. De online -> offline ou offline -> online.<br/>'. 'Você receberá uma notificação quando o seridor tive uma mudança de status. De online -> offline ou offline -> online.<br>'.
'<br /><b>Offline:</b> '. '<br /><b>Offline:</b> '.
'Você receberá uma notificação quando o servidor fica OFFLINE (Pela primeira vez). Por exemplo, '. 'Você receberá uma notificação quando o servidor fica OFFLINE (Pela primeira vez). Por exemplo, '.
'A cronjob é a cada 15 minutos e seu servidor caiu em 1:00 e permanece offline até 6 am. '. 'A cronjob é a cada 15 minutos e seu servidor caiu em 1:00 e permanece offline até 6 am. '.
'Você receberá uma notificação a 1:00 apenas<br/>'. 'Você receberá uma notificação a 1:00 apenas<br>'.
'<br><b>Sempre:</b> '. '<br><b>Sempre:</b> '.
'Você receberá uma notificação toda vez que o script é executado e um site esta offline, mesmo se o site tenha ficado offline por horas.', 'Você receberá uma notificação toda vez que o script é executado e um site esta offline, mesmo se o site tenha ficado offline por horas.',
'alert_type_status' => 'Mudança de Status', 'alert_type_status' => 'Mudança de Status',
@ -241,7 +241,7 @@ $sm_lang = array(
'settings_log' => 'Configuração de Logs', 'settings_log' => 'Configuração de Logs',
'auto_refresh' => 'Atualizar automaticamente', 'auto_refresh' => 'Atualizar automaticamente',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Atualizar automaticamente a página de servidores.<br/>'. 'Atualizar automaticamente a página de servidores.<br>'.
'<span class="small">'. '<span class="small">'.
'Tempo em segundos, Se 0 a página não será atualizada.'. 'Tempo em segundos, Se 0 a página não será atualizada.'.
'</span>', '</span>',
@ -266,18 +266,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Número de dias para manter os registros de notificações e arquivos de tempo de atividade do servidor. Digite 0 para desativar a limpeza de registro.', 'log_retention_period_description' => 'Número de dias para manter os registros de notificações e arquivos de tempo de atividade do servidor. Digite 0 para desativar a limpeza de registro.',
'log_retention_days' => 'dias', 'log_retention_days' => 'dias',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Servidor \'%LABEL%\' está OFFLINE: ip=%IP%, porta=%PORT%. Erro=%ERROR%', 'off_sms' => 'Servidor \'%LABEL%\' está OFFLINE: ip=%IP%, porta=%PORT%. Erro=%ERROR%',
'off_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' está OFFLINE', 'off_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' está OFFLINE',
'off_email_body' => "Falha ao conectar ao servidor:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Porta: %PORT%<br/>Erro: %ERROR%<br/>Data: %DATE%", 'off_email_body' => "Falha ao conectar ao servidor:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Erro: %ERROR%<br>Data: %DATE%",
'off_pushover_title' => 'Servidor \'%LABEL%\' está OFFLINE', 'off_pushover_title' => 'Servidor \'%LABEL%\' está OFFLINE',
'off_pushover_message' => "Falha ao conectar ao servidor:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Porta: %PORT%<br/>Erro: %ERROR%<br/>Data: %DATE%", 'off_pushover_message' => "Falha ao conectar ao servidor:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Erro: %ERROR%<br>Data: %DATE%",
'on_sms' => 'Servidor \'%LABEL%\' esta ONLINE: ip=%IP%, porta=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Servidor \'%LABEL%\' esta ONLINE: ip=%IP%, porta=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' esta ONLINE', 'on_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' esta ONLINE',
'on_email_body' => "Servidor '%LABEL%' esta ONLINE novamente, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Porta: %PORT%<br/>Data: %DATE%", 'on_email_body' => "Servidor '%LABEL%' esta ONLINE novamente, it was down for %LAST_OFFLINE_DURATION%:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Data: %DATE%",
'on_pushover_title' => 'Servidor \'%LABEL%\' esta ONLINE', 'on_pushover_title' => 'Servidor \'%LABEL%\' esta ONLINE',
'on_pushover_message' => "Servidor '%LABEL%' esta ONLINE novamente, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Porta: %PORT%<br/>Data: %DATE%", 'on_pushover_message' => "Servidor '%LABEL%' esta ONLINE novamente, it was down for %LAST_OFFLINE_DURATION%:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Data: %DATE%",
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Bem vindo, %user_name%', 'welcome_usermenu' => 'Bem vindo, %user_name%',
@ -294,7 +294,7 @@ $sm_lang = array(
'password_forgot' => 'Perdeu a senha?', 'password_forgot' => 'Perdeu a senha?',
'password_reset' => 'Redefinir senha', 'password_reset' => 'Redefinir senha',
'password_reset_email_subject' => 'Redefinir sua senha para PHP Server Monitor', 'password_reset_email_subject' => 'Redefinir sua senha para PHP Server Monitor',
'password_reset_email_body' => 'Por favor use o link para redefinir sua senha. Este link irá expirar em 1 hora.<br/><br/>%link%', 'password_reset_email_body' => 'Por favor use o link para redefinir sua senha. Este link irá expirar em 1 hora.<br><br>%link%',
'error_user_incorrect' => 'O username não pode ser encontrado.', 'error_user_incorrect' => 'O username não pode ser encontrado.',
'error_login_incorrect' => 'As informações são incorretas.', 'error_login_incorrect' => 'As informações são incorretas.',
'error_login_passwords_nomatch' => 'A senha informada não é válida.', 'error_login_passwords_nomatch' => 'A senha informada não é válida.',

View File

@ -74,8 +74,6 @@ $sm_lang = array(
'minutes' => 'минут', 'minutes' => 'минут',
'second' => 'секунда', 'second' => 'секунда',
'seconds' => 'секунд', 'seconds' => 'секунд',
'online' => 'онлайн',
'offline' => 'оффлайн',
), ),
'menu' => array( 'menu' => array(
'config' => 'Параметры', 'config' => 'Параметры',
@ -96,7 +94,7 @@ $sm_lang = array(
'level' => 'Уровень', 'level' => 'Уровень',
'level_10' => 'Администратор', 'level_10' => 'Администратор',
'level_20' => 'Пользователь', 'level_20' => 'Пользователь',
'level_description' => '<b>Администраторы</b> имеют полный доступ: они могут управлять серверами, пользователями и изменять общую конфигурацию.<br/><b>Пользователи</b> могут только просматривать и запускать проверку для серверов, которые были к ним прикреплены.', 'level_description' => '<b>Администраторы</b> имеют полный доступ: они могут управлять серверами, пользователями и изменять общую конфигурацию.<br><b>Пользователи</b> могут только просматривать и запускать проверку для серверов, которые были к ним прикреплены.',
'mobile' => 'Телефон', 'mobile' => 'Телефон',
'email' => 'E-mail', 'email' => 'E-mail',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -151,7 +149,8 @@ $sm_lang = array(
'domain' => 'Домен/IP', 'domain' => 'Домен/IP',
'timeout' => 'Тайм-аут', 'timeout' => 'Тайм-аут',
'timeout_description' => 'Количество секунд ожидания ответа сервера.', 'timeout_description' => 'Количество секунд ожидания ответа сервера.',
'authentication_settings' => 'Настройки аутентификации (необязательно)', 'authentication_settings' => 'Настройки аутентификации',
'optional' => 'необязательно',
'website_username' => 'Имя пользователя', 'website_username' => 'Имя пользователя',
'website_username_description' => 'Имя пользователя для доступа к сайту. (Поддерживается только Apache authentication.)', 'website_username_description' => 'Имя пользователя для доступа к сайту. (Поддерживается только Apache authentication.)',
'website_password' => 'Пароль', 'website_password' => 'Пароль',
@ -170,9 +169,10 @@ $sm_lang = array(
'pattern_description' => 'Если текст по шаблону не найден на сайте, сервер будет помечен как Оффлайн. Регулярные выражения допустимы.', 'pattern_description' => 'Если текст по шаблону не найден на сайте, сервер будет помечен как Оффлайн. Регулярные выражения допустимы.',
'pattern_online' => 'Шаблон указывает что вебсайт:', 'pattern_online' => 'Шаблон указывает что вебсайт:',
'pattern_online_description' => 'Online: Если этот шаблон не найден на веб-сайте, сервер будет отмечен Онлайн. Offline: Если этот шаблон не найден на веб-сайте, сервер будет отмечен как Оффлайн.', 'pattern_online_description' => 'Online: Если этот шаблон не найден на веб-сайте, сервер будет отмечен Онлайн. Offline: Если этот шаблон не найден на веб-сайте, сервер будет отмечен как Оффлайн.',
'header' => 'Заголовок', 'header_name' => 'Название заголовка',
'header_name_description' => 'Название заголовка (с учетом регистра)', 'header_value' => 'Значение заголовка',
'header_value_description' => 'Значение заголовка. Разрешены регулярные выражения.', 'header_name_description' => 'с учетом регистра.',
'header_value_description' => 'Разрешены регулярные выражения.',
'last_check' => 'Последняя проверка', 'last_check' => 'Последняя проверка',
'last_online' => 'Был онлайн', 'last_online' => 'Был онлайн',
'last_offline' => 'Был оффлайн', 'last_offline' => 'Был оффлайн',
@ -196,6 +196,8 @@ $sm_lang = array(
'latency_max' => 'Задержка (максимальная)', 'latency_max' => 'Задержка (максимальная)',
'latency_min' => 'Задержка (минимальная)', 'latency_min' => 'Задержка (минимальная)',
'latency_avg' => 'Задержка (средняя)', 'latency_avg' => 'Задержка (средняя)',
'online' => 'онлайн',
'offline' => 'оффлайн',
'uptime' => 'Аптайм', 'uptime' => 'Аптайм',
'year' => 'Год', 'year' => 'Год',
'month' => 'Месяц', 'month' => 'Месяц',
@ -260,18 +262,18 @@ $sm_lang = array(
'telegram_api_token_description' => 'Прежде чем вы сможете начать пользоваться Telegram, вам необходимо получить API Token. Посетите <a href="http://docs.phpservermonitor.org/">раздел документации</a> для получения помощи.', 'telegram_api_token_description' => 'Прежде чем вы сможете начать пользоваться Telegram, вам необходимо получить API Token. Посетите <a href="http://docs.phpservermonitor.org/">раздел документации</a> для получения помощи.',
'alert_type' => 'Тип уведомлений', 'alert_type' => 'Тип уведомлений',
'alert_type_description' => '<b>Изменение статуса:</b> '. 'alert_type_description' => '<b>Изменение статуса:</b> '.
'Вы получите уведомление об изменение статуса. Для онлайн -> оффлайн или офлайн -> онлайн.<br/>'. 'Вы получите уведомление об изменение статуса. Для онлайн -> оффлайн или офлайн -> онлайн.<br>'.
'<br /><b>Оффлайн:</b> '. '<br /><b>Оффлайн:</b> '.
'Вы получите уведомление только когда сервер перейдет в статус оффлайн. Например, '. 'Вы получите уведомление только когда сервер перейдет в статус оффлайн. Например, '.
'задание Cron выставлено на каждые 15 минут. Сервер перейдет в статус оффлайн в 1:00 и не измениться до 6:00. '. 'задание Cron выставлено на каждые 15 минут. Сервер перейдет в статус оффлайн в 1:00 и не измениться до 6:00. '.
'Вы получите 1 уведомление только в 1:00<br/>'. 'Вы получите 1 уведомление только в 1:00<br>'.
'<br><b>Всегда:</b> '. '<br><b>Всегда:</b> '.
'Вы будете получать уведомление при каждом запуске скрипта проверки, как только сервер перейдет в статус оффлайн, даже если сервер находится в этом статусе несколько часов.', 'Вы будете получать уведомление при каждом запуске скрипта проверки, как только сервер перейдет в статус оффлайн, даже если сервер находится в этом статусе несколько часов.',
'alert_type_status' => 'Изменение статуса', 'alert_type_status' => 'Изменение статуса',
'alert_type_offline' => 'Оффлайн', 'alert_type_offline' => 'Оффлайн',
'alert_type_always' => 'Всегда', 'alert_type_always' => 'Всегда',
'alert_proxy' => 'Даже если включено, прокси никогда не используется для сервисов', 'alert_proxy' => 'Даже если включено, прокси никогда не используется для сервисов',
'alert_proxy_url' => '<b>Формат:</b> адрес:порт', 'alert_proxy_url' => 'Формат: адрес:порт',
'log_status' => 'Лог статусов', 'log_status' => 'Лог статусов',
'log_status_description' => 'Если лог статусов включен, монитор будет логировать все события выбранные в типе уведомлений.', 'log_status_description' => 'Если лог статусов включен, монитор будет логировать все события выбранные в типе уведомлений.',
'log_email' => 'Логировать уведомления отправленые по E-mail', 'log_email' => 'Логировать уведомления отправленые по E-mail',
@ -292,7 +294,7 @@ $sm_lang = array(
'settings_proxy' => 'Настройка прокси', 'settings_proxy' => 'Настройка прокси',
'auto_refresh' => 'Авто-обновление', 'auto_refresh' => 'Авто-обновление',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Авто-обновление страницы статуса серверов.<br/>'. 'Авто-обновление страницы статуса серверов.<br>'.
'<span class="small">'. '<span class="small">'.
'Время в секундах. Если указано 0, то страница не будет обновляться.'. 'Время в секундах. Если указано 0, то страница не будет обновляться.'.
'</span>', '</span>',
@ -322,20 +324,20 @@ $sm_lang = array(
'log_retention_period_description' => 'Количество дней хранения логов уведомлений и архива аптайма серверов. Введите 0 для выключения очистки логов.', 'log_retention_period_description' => 'Количество дней хранения логов уведомлений и архива аптайма серверов. Введите 0 для выключения очистки логов.',
'log_retention_days' => 'дней', 'log_retention_days' => 'дней',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Сервер \'%LABEL%\' сейчас НЕДОСТУПЕН: IP=%IP%, Порт=%PORT%. Ошибка=%ERROR%', 'off_sms' => 'Сервер \'%LABEL%\' сейчас НЕДОСТУПЕН: IP=%IP%, Порт=%PORT%. Ошибка=%ERROR%',
'off_email_subject' => 'ВАЖНО: сервер \'%LABEL%\' сейчас НЕДОСТУПЕН', 'off_email_subject' => 'ВАЖНО: сервер \'%LABEL%\' сейчас НЕДОСТУПЕН',
'off_email_body' => "Невозможно подключиться к следующему серверу:<br/><br/>Сервер: %LABEL%<br/>IP: %IP%<br/>Порт: %PORT%<br/>Ошибка: %ERROR%<br/>Дата: %DATE%", 'off_email_body' => "Невозможно подключиться к следующему серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Ошибка: %ERROR%<br>Дата: %DATE%",
'off_pushover_title' => 'Cервер \'%LABEL%\' сейчас НЕДОСТУПЕН', 'off_pushover_title' => 'Cервер \'%LABEL%\' сейчас НЕДОСТУПЕН',
'off_pushover_message' => "Невозможно подключиться к следующему серверу:<br/><br/>Сервер: %LABEL%<br/>IP: %IP%<br/>Порт: %PORT%<br/>Ошибка: %ERROR%<br/>Дата: %DATE%", 'off_pushover_message' => "Невозможно подключиться к следующему серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Ошибка: %ERROR%<br>Дата: %DATE%",
'off_telegram_message' => "Невозможно подключиться к следующему серверу:<br/><br/>Сервер: %LABEL%<br/>IP: %IP%<br/>Порт: %PORT%<br/>Ошибка: %ERROR%<br/>Дата: %DATE%", 'off_telegram_message' => "Невозможно подключиться к следующему серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Ошибка: %ERROR%<br>Дата: %DATE%",
'on_sms' => 'Сервер \'%LABEL%\' снова ДОСТУПЕН: IP=%IP%, Порт=%PORT%. Был недоступен: %LAST_OFFLINE_DURATION%', 'on_sms' => 'Сервер \'%LABEL%\' снова ДОСТУПЕН: IP=%IP%, Порт=%PORT%. Был недоступен: %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'ВАЖНО: Сервер \'%LABEL%\' сейчас ДОСТУПЕН', 'on_email_subject' => 'ВАЖНО: Сервер \'%LABEL%\' сейчас ДОСТУПЕН',
'on_email_body' => "Сервер '%LABEL%' снова доступен.<br/>Был недоступен: %LAST_OFFLINE_DURATION%<br/><br/>Сервер: %LABEL%<br/>IP: %IP%<br/>Порт: %PORT%<br/>Дата: %DATE%", 'on_email_body' => "Сервер '%LABEL%' снова доступен.<br>Был недоступен: %LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Дата: %DATE%",
'on_pushover_title' => 'Сервер \'%LABEL%\' сейчас ДОСТУПЕН', 'on_pushover_title' => 'Сервер \'%LABEL%\' сейчас ДОСТУПЕН',
'on_pushover_message' => 'Сервер \'%LABEL%\' снова доступен.<br/>Был недоступен: %LAST_OFFLINE_DURATION%<br/><br/>Сервер: %LABEL%<br/>IP: %IP%<br/>Порт: %PORT%<br/>Дата: %DATE%', 'on_pushover_message' => 'Сервер \'%LABEL%\' снова доступен.<br>Был недоступен: %LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Дата: %DATE%',
'on_telegram_message' => 'Сервер \'%LABEL%\' снова доступен.<br/>Был недоступен: %LAST_OFFLINE_DURATION%<br/><br/>Сервер: %LABEL%<br/>IP: %IP%<br/>Порт: %PORT%<br/>Дата: %DATE%', 'on_telegram_message' => 'Сервер \'%LABEL%\' снова доступен.<br>Был недоступен: %LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Дата: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Здравствуйте, %user_name%', 'welcome_usermenu' => 'Здравствуйте, %user_name%',
@ -352,7 +354,7 @@ $sm_lang = array(
'password_forgot' => 'Забыли пароль?', 'password_forgot' => 'Забыли пароль?',
'password_reset' => 'Сбросить пароль', 'password_reset' => 'Сбросить пароль',
'password_reset_email_subject' => 'Сброс пароля для PHP Server Monitor', 'password_reset_email_subject' => 'Сброс пароля для PHP Server Monitor',
'password_reset_email_body' => 'Пожалуйста, используйте следующую ссылку для сброса пароля. Ссылка действительна 1 час.<br/><br/>%link%', 'password_reset_email_body' => 'Пожалуйста, используйте следующую ссылку для сброса пароля. Ссылка действительна 1 час.<br><br>%link%',
'error_user_incorrect' => 'Пользователь с указаными данными не найден.', 'error_user_incorrect' => 'Пользователь с указаными данными не найден.',
'error_login_incorrect' => 'Информация указана неверно.', 'error_login_incorrect' => 'Информация указана неверно.',
'error_login_passwords_nomatch' => 'Пароль указан неверно.', 'error_login_passwords_nomatch' => 'Пароль указан неверно.',

View File

@ -80,7 +80,7 @@ $sm_lang = array(
'level' => 'Oprávnenie', 'level' => 'Oprávnenie',
'level_10' => 'Administrátor', 'level_10' => 'Administrátor',
'level_20' => 'Užívateľ', 'level_20' => 'Užívateľ',
'level_description' => '<b>Administrátor</b> má plný prístup: môže spravovať servery, užívateľov a upraviť globálnu konfiguráciu.<br/><b>Uživatel</b> má práva len na čítanie a spustiť aktualizáciu serverov, ktoré má priradené.', 'level_description' => '<b>Administrátor</b> má plný prístup: môže spravovať servery, užívateľov a upraviť globálnu konfiguráciu.<br><b>Uživatel</b> má práva len na čítanie a spustiť aktualizáciu serverov, ktoré má priradené.',
'mobile' => 'Mobil', 'mobile' => 'Mobil',
'email' => 'E-mail', 'email' => 'E-mail',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -124,7 +124,8 @@ $sm_lang = array(
'domain' => 'Doména/IP', 'domain' => 'Doména/IP',
'timeout' => 'Časový limit', 'timeout' => 'Časový limit',
'timeout_description' => 'Počet sekúnd čakania na odpoveď serveru.', 'timeout_description' => 'Počet sekúnd čakania na odpoveď serveru.',
'authentication_settings' => 'Nastavenie autentizacie (voliteľný)', 'authentication_settings' => 'Nastavenie autentizacie',
'optional' => 'voliteľný',
'website_username' => 'Užívateľské meno', 'website_username' => 'Užívateľské meno',
'website_username_description' => 'Užívateľské meno pre prístup na stránku. (Len Apache autorizácia je podporovaná.)', 'website_username_description' => 'Užívateľské meno pre prístup na stránku. (Len Apache autorizácia je podporovaná.)',
'website_password' => 'Heslo', 'website_password' => 'Heslo',
@ -214,11 +215,11 @@ $sm_lang = array(
'pushover_api_token_description' => 'Pred použitím Pushoveru sa musíte <a href="%1$s" target="_blank" rel="noopener">registrovať</a> a získať API Token.', 'pushover_api_token_description' => 'Pred použitím Pushoveru sa musíte <a href="%1$s" target="_blank" rel="noopener">registrovať</a> a získať API Token.',
'alert_type' => 'Zvoľte kedy si prajete byť upozornení.', 'alert_type' => 'Zvoľte kedy si prajete byť upozornení.',
'alert_type_description' => '<b>Zmena stavu:</b> '. 'alert_type_description' => '<b>Zmena stavu:</b> '.
'Obdržíte upozornenie pri zmene stavu, teda: online -> offline alebo offline -> online.<br/>'. 'Obdržíte upozornenie pri zmene stavu, teda: online -> offline alebo offline -> online.<br>'.
'<br /><b>Offline:</b> '. '<br /><b>Offline:</b> '.
'Obdržíte upozornenie, keď server prejde *PO PRVÝ KRÁT* do offline stavu. Napríklad, '. 'Obdržíte upozornenie, keď server prejde *PO PRVÝ KRÁT* do offline stavu. Napríklad, '.
'pokiaľ je cron nastavený na 15 minút a sledovaný server bude offline mezi 01:00 a 06:00, '. 'pokiaľ je cron nastavený na 15 minút a sledovaný server bude offline mezi 01:00 a 06:00, '.
'tak obdržíte upozornenie iba o 01:00.<br/>'. 'tak obdržíte upozornenie iba o 01:00.<br>'.
'<br><b>Vždy:</b> '. '<br><b>Vždy:</b> '.
'Obdržíte upozornenie pri každom spustení kontroly, teda aj pokiaľ bude server offline niekoľko hodín.', 'Obdržíte upozornenie pri každom spustení kontroly, teda aj pokiaľ bude server offline niekoľko hodín.',
'alert_type_status' => 'Zmena stavu', 'alert_type_status' => 'Zmena stavu',
@ -240,7 +241,7 @@ $sm_lang = array(
'settings_log' => 'Nastavenie logu', 'settings_log' => 'Nastavenie logu',
'auto_refresh' => 'Automaticky obnoviť', 'auto_refresh' => 'Automaticky obnoviť',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Automaticky obnoviť stránku Servery.<br/>'. 'Automaticky obnoviť stránku Servery.<br>'.
'<span class="small">'. '<span class="small">'.
'Čas v sekundách, 0 pre vypnutie automatického obnovenia.'. 'Čas v sekundách, 0 pre vypnutie automatického obnovenia.'.
'</span>', '</span>',
@ -265,18 +266,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Počet dní po které budú uchované logy upozornení. Vložte 0 pre vypnutie autorotáce.', 'log_retention_period_description' => 'Počet dní po které budú uchované logy upozornení. Vložte 0 pre vypnutie autorotáce.',
'log_retention_days' => 'dní', 'log_retention_days' => 'dní',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%',
'off_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je offline', 'off_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je offline',
'off_email_body' => 'Nebolo možné spojiť sa so serverom:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Chyba: %ERROR%<br/>Dátum: %DATE%', 'off_email_body' => 'Nebolo možné spojiť sa so serverom:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Chyba: %ERROR%<br>Dátum: %DATE%',
'off_pushover_title' => 'Server \'%LABEL%\' je offline', 'off_pushover_title' => 'Server \'%LABEL%\' je offline',
'off_pushover_message' => 'Nebolo možné spojiť sa so serverom:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Chyba: %ERROR%<br/>Dátum: %DATE%', 'off_pushover_message' => 'Nebolo možné spojiť sa so serverom:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Chyba: %ERROR%<br>Dátum: %DATE%',
'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je online', 'on_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je online',
'on_email_body' => "Server '%LABEL%' je opäť online, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Dátum: %DATE%", 'on_email_body' => "Server '%LABEL%' je opäť online, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dátum: %DATE%",
'on_pushover_title' => 'Server \'%LABEL%\' je online', 'on_pushover_title' => 'Server \'%LABEL%\' je online',
'on_pushover_message' => 'Server \'%LABEL%\' je znovu online, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Dátum: %DATE%', 'on_pushover_message' => 'Server \'%LABEL%\' je znovu online, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dátum: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Vitajte, %user_name%', 'welcome_usermenu' => 'Vitajte, %user_name%',
@ -293,7 +294,7 @@ $sm_lang = array(
'password_forgot' => 'Zabudnuté heslo?', 'password_forgot' => 'Zabudnuté heslo?',
'password_reset' => 'Obnoviť heslo', 'password_reset' => 'Obnoviť heslo',
'password_reset_email_subject' => 'Obnoviť heslo pre PHP Server Monitor', 'password_reset_email_subject' => 'Obnoviť heslo pre PHP Server Monitor',
'password_reset_email_body' => 'Použite následujúci odkaz pre obnovenie hesla. Odkaz je platný jednu hodinu.<br/><br/>%link%', 'password_reset_email_body' => 'Použite následujúci odkaz pre obnovenie hesla. Odkaz je platný jednu hodinu.<br><br>%link%',
'error_user_incorrect' => 'Zadané užívateľské meno nebolo nájdené.', 'error_user_incorrect' => 'Zadané užívateľské meno nebolo nájdené.',
'error_login_incorrect' => 'Prihlásenie nebolo úspešné.', 'error_login_incorrect' => 'Prihlásenie nebolo úspešné.',
'error_login_passwords_nomatch' => 'Zadané heslá sa nezhodujú.', 'error_login_passwords_nomatch' => 'Zadané heslá sa nezhodujú.',

View File

@ -78,7 +78,7 @@ $sm_lang = array(
'level' => 'Nivo dostopa', 'level' => 'Nivo dostopa',
'level_10' => 'Administrator', 'level_10' => 'Administrator',
'level_20' => 'Uporabnik', 'level_20' => 'Uporabnik',
'level_description' => '<b>Administratorji</b> imajo poln dostop: lahko upravljajo strežnike, uporabnike in urejajo globalne nastavitve.<br/><b>Uporabniki</b> lahko samo vidijo status in poganjajo posodobitev statusa za strežnike, ki so jim bili dodeljeni.', 'level_description' => '<b>Administratorji</b> imajo poln dostop: lahko upravljajo strežnike, uporabnike in urejajo globalne nastavitve.<br><b>Uporabniki</b> lahko samo vidijo status in poganjajo posodobitev statusa za strežnike, ki so jim bili dodeljeni.',
'mobile' => 'Mobilni telefon', 'mobile' => 'Mobilni telefon',
'email' => 'E-pošta', 'email' => 'E-pošta',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -200,11 +200,11 @@ $sm_lang = array(
'pushover_api_token_description' => 'Pred uporabo storitve Pushover, morate na njihovi spletni strani <a href="%1$s" target="_blank" rel="noopener">registrirati aplikacijo</a>, tukaj pa vnesti API žeton.', 'pushover_api_token_description' => 'Pred uporabo storitve Pushover, morate na njihovi spletni strani <a href="%1$s" target="_blank" rel="noopener">registrirati aplikacijo</a>, tukaj pa vnesti API žeton.',
'alert_type' => 'Izberite kdaj naj se vam pošljejo obvestila.', 'alert_type' => 'Izberite kdaj naj se vam pošljejo obvestila.',
'alert_type_description' => '<b>Sprememba statusa:</b> '. 'alert_type_description' => '<b>Sprememba statusa:</b> '.
'Obvestilo boste dobili ob vsaki spremembi statusa, torej iz delujoč -> nedelujoč ter nedelujoč -> delujoč.<br/>'. 'Obvestilo boste dobili ob vsaki spremembi statusa, torej iz delujoč -> nedelujoč ter nedelujoč -> delujoč.<br>'.
'<br /><b>Nedelujoč:</b> '. '<br /><b>Nedelujoč:</b> '.
'Obvestilo boste dobili samo, ko se bo strežnik PRVIKRAT prenehal odzivati. Na primer:'. 'Obvestilo boste dobili samo, ko se bo strežnik PRVIKRAT prenehal odzivati. Na primer:'.
'nastavljeno imate preverjanje strežnikov vsakih 15 minut. Strežnik preneha delovati ob 13h in ostane nedelujoč do 18h. '. 'nastavljeno imate preverjanje strežnikov vsakih 15 minut. Strežnik preneha delovati ob 13h in ostane nedelujoč do 18h. '.
'Dobili boste obvestilo samo ob 13h.<br/>'. 'Dobili boste obvestilo samo ob 13h.<br>'.
'<br><b>Vedno:</b> '. '<br><b>Vedno:</b> '.
'Obvestilo boste dobili vedno, ko se izvede skripta za preverjanje in strežnik ne deluje, pa čeprav bo strežnik nedelujoč več ur.', 'Obvestilo boste dobili vedno, ko se izvede skripta za preverjanje in strežnik ne deluje, pa čeprav bo strežnik nedelujoč več ur.',
'alert_type_status' => 'Sprememba statusa', 'alert_type_status' => 'Sprememba statusa',
@ -226,7 +226,7 @@ $sm_lang = array(
'settings_log' => 'Hramba dnevniških zapisov', 'settings_log' => 'Hramba dnevniških zapisov',
'auto_refresh' => 'Samodejno posodabljanje', 'auto_refresh' => 'Samodejno posodabljanje',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Samodejno posodabljanje pregleda statusa strežnikov.<br/>'. 'Samodejno posodabljanje pregleda statusa strežnikov.<br>'.
'<span class="small">'. '<span class="small">'.
'Čas v sekundah. Če je vrednost 0 se stran ne bo samodejno posodabljala.'. 'Čas v sekundah. Če je vrednost 0 se stran ne bo samodejno posodabljala.'.
'</span>', '</span>',
@ -251,18 +251,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Število dni, ko naj se hranijo podatki o obvestilih in statusu strežnikov. Če želite podatke hraniti trajno, vnesite 0.', 'log_retention_period_description' => 'Število dni, ko naj se hranijo podatki o obvestilih in statusu strežnikov. Če želite podatke hraniti trajno, vnesite 0.',
'log_retention_days' => 'dni', 'log_retention_days' => 'dni',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Streznik \'%LABEL%\' NE deluje: IP=%IP%, vrata=%PORT%. Napaka=%ERROR%', 'off_sms' => 'Streznik \'%LABEL%\' NE deluje: IP=%IP%, vrata=%PORT%. Napaka=%ERROR%',
'off_email_subject' => 'POMEMBNO: Strežnik \'%LABEL%\' NE deluje', 'off_email_subject' => 'POMEMBNO: Strežnik \'%LABEL%\' NE deluje',
'off_email_body' => "Pri povezovanju na streznik je prislo do napake:<br/><br/>Streznik: %LABEL%<br/>IP: %IP%<br/>vrata: %PORT%<br/>Napaka: %ERROR%<br/>Datum: %DATE%", 'off_email_body' => "Pri povezovanju na streznik je prislo do napake:<br><br>Streznik: %LABEL%<br>IP: %IP%<br>vrata: %PORT%<br>Napaka: %ERROR%<br>Datum: %DATE%",
'off_pushover_title' => 'Streznik \'%LABEL%\' NE deluje', 'off_pushover_title' => 'Streznik \'%LABEL%\' NE deluje',
'off_pushover_message' => "Ni se mogoče povezati na naslednji streznik:<br/><br/>Streznik: %LABEL%<br/>IP: %IP%<br/>Vrata: %PORT%<br/>Error: %ERROR%<br/>Datum: %DATE%", 'off_pushover_message' => "Ni se mogoče povezati na naslednji streznik:<br><br>Streznik: %LABEL%<br>IP: %IP%<br>Vrata: %PORT%<br>Error: %ERROR%<br>Datum: %DATE%",
'on_sms' => 'Streznik \'%LABEL%\' deluje: IP=%IP%, vrata=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Streznik \'%LABEL%\' deluje: IP=%IP%, vrata=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'OBVESTILO: Streznik \'%LABEL%\' ponovno deluje', 'on_email_subject' => 'OBVESTILO: Streznik \'%LABEL%\' ponovno deluje',
'on_email_body' => "Streznik '%LABEL%' ponovno deluje, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Strežnik: %LABEL%<br/>IP: %IP%<br/>Vrata: %PORT%<br/>Datum: %DATE%", 'on_email_body' => "Streznik '%LABEL%' ponovno deluje, it was down for %LAST_OFFLINE_DURATION%:<br><br>Strežnik: %LABEL%<br>IP: %IP%<br>Vrata: %PORT%<br>Datum: %DATE%",
'on_pushover_title' => 'Streznik \'%LABEL%\' deluje', 'on_pushover_title' => 'Streznik \'%LABEL%\' deluje',
'on_pushover_message' => 'Streznik \'%LABEL%\' ponovno deluje, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Vrata: %PORT%<br/>Datum: %DATE%', 'on_pushover_message' => 'Streznik \'%LABEL%\' ponovno deluje, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Vrata: %PORT%<br>Datum: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Pozdravljeni, %user_name%', 'welcome_usermenu' => 'Pozdravljeni, %user_name%',
@ -279,7 +279,7 @@ $sm_lang = array(
'password_forgot' => 'Pozabljeno geslo?', 'password_forgot' => 'Pozabljeno geslo?',
'password_reset' => 'Ponastavitev gesla', 'password_reset' => 'Ponastavitev gesla',
'password_reset_email_subject' => 'Ponastavite svoje geslo za PHP Server Monitor', 'password_reset_email_subject' => 'Ponastavite svoje geslo za PHP Server Monitor',
'password_reset_email_body' => 'Za ponastavitev gesla uporabite spodnjo povezavo. Pomembno: povezava poteče v 1 uri.<br/><br/>%link%', 'password_reset_email_body' => 'Za ponastavitev gesla uporabite spodnjo povezavo. Pomembno: povezava poteče v 1 uri.<br><br>%link%',
'error_user_incorrect' => 'Vpisanega uporabniškega imena ne najdem.', 'error_user_incorrect' => 'Vpisanega uporabniškega imena ne najdem.',
'error_login_incorrect' => 'Podatki so napačni.', 'error_login_incorrect' => 'Podatki so napačni.',
'error_login_passwords_nomatch' => 'Vneseno geslo ni pravilno.', 'error_login_passwords_nomatch' => 'Vneseno geslo ni pravilno.',

View File

@ -92,7 +92,7 @@ $sm_lang = array(
'level' => 'Nivå', 'level' => 'Nivå',
'level_10' => 'Administratör', 'level_10' => 'Administratör',
'level_20' => 'Användare', 'level_20' => 'Användare',
'level_description' => '<b>Administratörer</b> har fulla rättigheter: de kan hantera servrar, användare och redigera gemensamma inställningar.<br/><b>Användare</b> kan bara se och köra uppdateraren för de servrar som de blivit tilldelade.', 'level_description' => '<b>Administratörer</b> har fulla rättigheter: de kan hantera servrar, användare och redigera gemensamma inställningar.<br><b>Användare</b> kan bara se och köra uppdateraren för de servrar som de blivit tilldelade.',
'mobile' => 'Mobilnummer', 'mobile' => 'Mobilnummer',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -215,11 +215,11 @@ $sm_lang = array(
'pushover_api_token_description' => 'Innan du kan använda Pushover behöver du <a href="%1$s" target="_blank" rel="noopener">registrera en App</a> på deras webbsida och skriva in App API Token här.', 'pushover_api_token_description' => 'Innan du kan använda Pushover behöver du <a href="%1$s" target="_blank" rel="noopener">registrera en App</a> på deras webbsida och skriva in App API Token här.',
'alert_type' => 'Välj när du vill bli meddelad.', 'alert_type' => 'Välj när du vill bli meddelad.',
'alert_type_description' => '<b>Statusförändring:</b> '. 'alert_type_description' => '<b>Statusförändring:</b> '.
'Du får ett meddelande när status ändras. Så från online -> offline eller offline -> online.<br/>'. 'Du får ett meddelande när status ändras. Så från online -> offline eller offline -> online.<br>'.
'<br /><b>Offline:</b> '. '<br /><b>Offline:</b> '.
'Du får ett meddelande när en server går offline *FÖR FÖRSTA GÅNGEN* Exempelvis, '. 'Du får ett meddelande när en server går offline *FÖR FÖRSTA GÅNGEN* Exempelvis, '.
'ditt cronjob körs var 15 minut och din server går ned kl 1 och är nere till kl 6. '. 'ditt cronjob körs var 15 minut och din server går ned kl 1 och är nere till kl 6. '.
'Du kommer få 1 meddelande kl 1 och inga mer.<br/>'. 'Du kommer få 1 meddelande kl 1 och inga mer.<br>'.
'<br><b>Alltid:</b> '. '<br><b>Alltid:</b> '.
'Du kommer få ett meddelande varje gång kontrollen görs, även om servern har varit offline under en längre tid.', 'Du kommer få ett meddelande varje gång kontrollen görs, även om servern har varit offline under en längre tid.',
'alert_type_status' => 'Statusförändring', 'alert_type_status' => 'Statusförändring',
@ -241,7 +241,7 @@ $sm_lang = array(
'settings_log' => 'Logg-inställningar', 'settings_log' => 'Logg-inställningar',
'auto_refresh' => 'Auto-uppdatera', 'auto_refresh' => 'Auto-uppdatera',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Auto-uppdatera status-sidan.<br/>'. 'Auto-uppdatera status-sidan.<br>'.
'<span class="small">'. '<span class="small">'.
'Tid i sekunder, om "0" så uppdateras sidan inte automatiskt.'. 'Tid i sekunder, om "0" så uppdateras sidan inte automatiskt.'.
'</span>', '</span>',
@ -266,18 +266,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Antal dagar loggar över meddelande och uptime sparas. 0 innebär att loggrensning är avstängd.', 'log_retention_period_description' => 'Antal dagar loggar över meddelande och uptime sparas. 0 innebär att loggrensning är avstängd.',
'log_retention_days' => 'dagar', 'log_retention_days' => 'dagar',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' är NERE: ip=%IP%, port=%PORT%. Fel=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' är NERE: ip=%IP%, port=%PORT%. Fel=%ERROR%',
'off_email_subject' => 'VIKTIGT: Server \'%LABEL%\' är NERE', 'off_email_subject' => 'VIKTIGT: Server \'%LABEL%\' är NERE',
'off_email_body' => "Kunde inte ansluta till följande server:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Fel: %ERROR%<br/>Tid: %DATE%", 'off_email_body' => "Kunde inte ansluta till följande server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fel: %ERROR%<br>Tid: %DATE%",
'off_pushover_title' => 'Server \'%LABEL%\' är NERE', 'off_pushover_title' => 'Server \'%LABEL%\' är NERE',
'off_pushover_message' => "Kunde inte ansluta till följande server:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Fel: %ERROR%<br/>Tid: %DATE%", 'off_pushover_message' => "Kunde inte ansluta till följande server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fel: %ERROR%<br>Tid: %DATE%",
'on_sms' => 'Server \'%LABEL%\' är UPPE: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Server \'%LABEL%\' är UPPE: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'VIKTIGT: Server \'%LABEL%\' är UPPE', 'on_email_subject' => 'VIKTIGT: Server \'%LABEL%\' är UPPE',
'on_email_body' => "Server '%LABEL%' är uppe igen, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Tid: %DATE%", 'on_email_body' => "Server '%LABEL%' är uppe igen, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Tid: %DATE%",
'on_pushover_title' => 'Server \'%LABEL%\' är UPPE', 'on_pushover_title' => 'Server \'%LABEL%\' är UPPE',
'on_pushover_message' => 'Server \'%LABEL%\' är uppe igen, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Tid: %DATE%', 'on_pushover_message' => 'Server \'%LABEL%\' är uppe igen, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Tid: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Välkommen, %user_name%', 'welcome_usermenu' => 'Välkommen, %user_name%',
@ -294,7 +294,7 @@ $sm_lang = array(
'password_forgot' => 'Glömt lösenord?', 'password_forgot' => 'Glömt lösenord?',
'password_reset' => 'Återställ lösenord', 'password_reset' => 'Återställ lösenord',
'password_reset_email_subject' => 'Password reset for PHP Server Monitor', 'password_reset_email_subject' => 'Password reset for PHP Server Monitor',
'password_reset_email_body' => 'Anv&auml;nd f&ouml;ljande l&auml;nk f&ouml;r att &aring;terst&auml;lla ditt l&ouml;senord. T&auml;nk p&aring; att l&auml;nken bara &auml;r giltig 1 timme.<br/><br/>%link%', 'password_reset_email_body' => 'Anv&auml;nd f&ouml;ljande l&auml;nk f&ouml;r att &aring;terst&auml;lla ditt l&ouml;senord. T&auml;nk p&aring; att l&auml;nken bara &auml;r giltig 1 timme.<br><br>%link%',
'error_user_incorrect' => 'Användaren kunde inte hittas.', 'error_user_incorrect' => 'Användaren kunde inte hittas.',
'error_login_incorrect' => 'Informationen är felaktig.', 'error_login_incorrect' => 'Informationen är felaktig.',
'error_login_passwords_nomatch' => 'Lösenorden stämmer inte överens.', 'error_login_passwords_nomatch' => 'Lösenorden stämmer inte överens.',

View File

@ -92,7 +92,7 @@ $sm_lang = array(
'level' => 'Seviye', 'level' => 'Seviye',
'level_10' => 'Yönetici', 'level_10' => 'Yönetici',
'level_20' => 'Kullanıcı', 'level_20' => 'Kullanıcı',
'level_description' => '<b>Yöneticiler</b> tüm yetkilere sahiptir: Onlar sunucuları, kullanıcıları yönetebilir genel ayarlamaları düzenleyebilirler.<br/> <b>Kullanıcılar</b> sadece görüntüleyebilir ve onlara atanmış sunucu güncelleyicileri çalıştırabilirler.', 'level_description' => '<b>Yöneticiler</b> tüm yetkilere sahiptir: Onlar sunucuları, kullanıcıları yönetebilir genel ayarlamaları düzenleyebilirler.<br> <b>Kullanıcılar</b> sadece görüntüleyebilir ve onlara atanmış sunucu güncelleyicileri çalıştırabilirler.',
'mobile' => 'Mobil', 'mobile' => 'Mobil',
'email' => 'E-posta', 'email' => 'E-posta',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -215,11 +215,11 @@ $sm_lang = array(
'pushover_api_token_description' => 'Pushover kullanmadan önce, <a href="%1$s" target="_blank" rel="noopener">Pushover sitesi üzerinden</a> bir uygulama oluşturmalısınız ve API Token bilgilerini buraya yazmalısınız.', 'pushover_api_token_description' => 'Pushover kullanmadan önce, <a href="%1$s" target="_blank" rel="noopener">Pushover sitesi üzerinden</a> bir uygulama oluşturmalısınız ve API Token bilgilerini buraya yazmalısınız.',
'alert_type' => 'Ne zaman uyarılmak istediğinizi seçin.', 'alert_type' => 'Ne zaman uyarılmak istediğinizi seçin.',
'alert_type_description' => '<b>Durum değişikliği:</b> '. 'alert_type_description' => '<b>Durum değişikliği:</b> '.
'Sunucu durumu değişiklik durumunda bildirim alacaksınız. Sunucu çevrimiçi durumundan çevrimdışı durumuna veya çevrimdışı durumundan çevrim için durumuna geçtiğinde.<br/>'. 'Sunucu durumu değişiklik durumunda bildirim alacaksınız. Sunucu çevrimiçi durumundan çevrimdışı durumuna veya çevrimdışı durumundan çevrim için durumuna geçtiğinde.<br>'.
'<br /><b>Çevrimdışı:</b> '. '<br /><b>Çevrimdışı:</b> '.
'Sunucu çevrim dışı duruma geçtiğinde bildirim alırsınız. *SADECE İLK GEÇTİĞİNDE*. Örneğin, '. 'Sunucu çevrim dışı duruma geçtiğinde bildirim alırsınız. *SADECE İLK GEÇTİĞİNDE*. Örneğin, '.
'Cronjob her 15 dakikada bir çalışıyorsa ve sunucu 1\'de gidip 6\'ya kadar kapalı kalırsa. '. 'Cronjob her 15 dakikada bir çalışıyorsa ve sunucu 1\'de gidip 6\'ya kadar kapalı kalırsa. '.
'Sadece size saat 1\'de bildirim gönderilecektir.<br/>'. 'Sadece size saat 1\'de bildirim gönderilecektir.<br>'.
'<br><b>Daima:</b> '. '<br><b>Daima:</b> '.
'Site çevrimdışı olduğu her zaman size bildirim gönderilecektir, site saatler boyunca kapalı kalse bile.', 'Site çevrimdışı olduğu her zaman size bildirim gönderilecektir, site saatler boyunca kapalı kalse bile.',
'alert_type_status' => 'Durum değişikliği', 'alert_type_status' => 'Durum değişikliği',
@ -241,7 +241,7 @@ $sm_lang = array(
'settings_log' => 'Log ayarları', 'settings_log' => 'Log ayarları',
'auto_refresh' => 'Otomatik Yenileme', 'auto_refresh' => 'Otomatik Yenileme',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Otomatik yenileme sunucu sayfası<br/>'. 'Otomatik yenileme sunucu sayfası<br>'.
'<span class="small">'. '<span class="small">'.
'Eğer sayfa yenilenmez ise.'. 'Eğer sayfa yenilenmez ise.'.
'</span>', '</span>',
@ -266,18 +266,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Bildirim loglarının ve sunucunun çalışma zamanlarının arşivinin saklanması için gün sayısı. Logların temizlenmesini kapatmak için 0 giriniz.', 'log_retention_period_description' => 'Bildirim loglarının ve sunucunun çalışma zamanlarının arşivinin saklanması için gün sayısı. Logların temizlenmesini kapatmak için 0 giriniz.',
'log_retention_days' => 'gün', 'log_retention_days' => 'gün',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => '\'%LABEL%\' isimli sunucu KAPANDI: ip=%IP%, port=%PORT%. Error=%ERROR%', 'off_sms' => '\'%LABEL%\' isimli sunucu KAPANDI: ip=%IP%, port=%PORT%. Error=%ERROR%',
'off_email_subject' => 'ÖNEMLİ: \'%LABEL%\' isimli sunucu KAPANDI.', 'off_email_subject' => 'ÖNEMLİ: \'%LABEL%\' isimli sunucu KAPANDI.',
'off_email_body' => "Aşağıdaki sunuculara erişim sağlanamıyor:<br/><br/>Sunucu: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Hata: %ERROR%<br/>Tarih: %DATE%", 'off_email_body' => "Aşağıdaki sunuculara erişim sağlanamıyor:<br><br>Sunucu: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Hata: %ERROR%<br>Tarih: %DATE%",
'off_pushover_title' => '\'%LABEL%\' isimli sunucu KAPANDI.', 'off_pushover_title' => '\'%LABEL%\' isimli sunucu KAPANDI.',
'off_pushover_message' => "Aşağıdaki nuculara erişim sağlanamıyor:<br/><br/>Sunucu: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Hata: %ERROR%<br/>Tarih: %DATE%", 'off_pushover_message' => "Aşağıdaki nuculara erişim sağlanamıyor:<br><br>Sunucu: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Hata: %ERROR%<br>Tarih: %DATE%",
'on_sms' => '\'%LABEL%\' isimli sunucu YAYINDA: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => '\'%LABEL%\' isimli sunucu YAYINDA: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'ÖNEMLİ:\'%LABEL%\' isimli sunucu YAYINDA.', 'on_email_subject' => 'ÖNEMLİ:\'%LABEL%\' isimli sunucu YAYINDA.',
'on_email_body' => "'%LABEL%' isimli sunucu tekrar yayında, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Sunucu: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Tarih: %DATE%", 'on_email_body' => "'%LABEL%' isimli sunucu tekrar yayında, it was down for %LAST_OFFLINE_DURATION%:<br><br>Sunucu: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Tarih: %DATE%",
'on_pushover_title' => '\'%LABEL%\' isimli sunucu YAYINDA', 'on_pushover_title' => '\'%LABEL%\' isimli sunucu YAYINDA',
'on_pushover_message' => '\'%LABEL%\' isimli sunucu tekrar yayında, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Sunucu: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Tarih: %DATE%', 'on_pushover_message' => '\'%LABEL%\' isimli sunucu tekrar yayında, it was down for %LAST_OFFLINE_DURATION%:<br><br>Sunucu: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Tarih: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Hoşgeldin, %user_name%', 'welcome_usermenu' => 'Hoşgeldin, %user_name%',
@ -294,7 +294,7 @@ $sm_lang = array(
'password_forgot' => 'Şifreni mi unuttun?', 'password_forgot' => 'Şifreni mi unuttun?',
'password_reset' => 'Şifreni yenile', 'password_reset' => 'Şifreni yenile',
'password_reset_email_subject' => 'PHP Server Monitor için şifreni yenile', 'password_reset_email_subject' => 'PHP Server Monitor için şifreni yenile',
'password_reset_email_body' => 'Aşağıdaki bağlantıyı kullanarak şifrenizi güncelleyiniz. Bağlantı 1 saat sonra geçerliliğini kaybedecektir.<br/><br/>%link%', 'password_reset_email_body' => 'Aşağıdaki bağlantıyı kullanarak şifrenizi güncelleyiniz. Bağlantı 1 saat sonra geçerliliğini kaybedecektir.<br><br>%link%',
'error_user_incorrect' => 'Kullanıcı adı bulunamadı.', 'error_user_incorrect' => 'Kullanıcı adı bulunamadı.',
'error_login_incorrect' => 'Bilgi yanlış.', 'error_login_incorrect' => 'Bilgi yanlış.',
'error_login_passwords_nomatch' => 'Şifreleriniz uyuşmuyor.', 'error_login_passwords_nomatch' => 'Şifreleriniz uyuşmuyor.',

View File

@ -78,7 +78,7 @@ $sm_lang = array(
'level' => 'Cấp độ', 'level' => 'Cấp độ',
'level_10' => 'Administrator', 'level_10' => 'Administrator',
'level_20' => 'User', 'level_20' => 'User',
'level_description' => '<b>Administrators</b> có toàn quyền: họ có thể quản lý server, người dùng và chỉnh sửa cấu hình.<br/><b>Users</b> chỉ xem và chạy cập nhật cho servers được giao cho họ.', 'level_description' => '<b>Administrators</b> có toàn quyền: họ có thể quản lý server, người dùng và chỉnh sửa cấu hình.<br><b>Users</b> chỉ xem và chạy cập nhật cho servers được giao cho họ.',
'mobile' => 'Di động', 'mobile' => 'Di động',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -200,11 +200,11 @@ $sm_lang = array(
'pushover_api_token_description' => 'Trước khi bạn có thể sử dụng Pushover, bạn cần phải <a href="%1$s" target="_blank" rel="noopener">đăng ký một ứng dụng</a> tại trang web của họ và nhập Token App API ở đây.', 'pushover_api_token_description' => 'Trước khi bạn có thể sử dụng Pushover, bạn cần phải <a href="%1$s" target="_blank" rel="noopener">đăng ký một ứng dụng</a> tại trang web của họ và nhập Token App API ở đây.',
'alert_type' => 'Chọn khi bạn muốn được thông báo.', 'alert_type' => 'Chọn khi bạn muốn được thông báo.',
'alert_type_description' => '<b>Thay đổi trạng thái:</b> '. 'alert_type_description' => '<b>Thay đổi trạng thái:</b> '.
'Bạn sẽ nhận được thông báo khi một máy chủ có một sự thay đổi trạng thái. Từ online -> offline hoặc offline -> online.<br/>'. 'Bạn sẽ nhận được thông báo khi một máy chủ có một sự thay đổi trạng thái. Từ online -> offline hoặc offline -> online.<br>'.
'<br /><b>Offline:</b> '. '<br /><b>Offline:</b> '.
'Bạn sẽ nhận được thông báo khi một máy chủ offline *MỘT LẦN DUY NHẤT*. Ví dụ, '. 'Bạn sẽ nhận được thông báo khi một máy chủ offline *MỘT LẦN DUY NHẤT*. Ví dụ, '.
'cronjob của bạn hoạt động mỗi 15 phút và server của bạn down tại 01h00 cho đến 6h00. '. 'cronjob của bạn hoạt động mỗi 15 phút và server của bạn down tại 01h00 cho đến 6h00. '.
'Bạn sẽ nhận được 1 thông báo lúc 01h00 và đó là nó.<br/>'. 'Bạn sẽ nhận được 1 thông báo lúc 01h00 và đó là nó.<br>'.
'<br><b>Always:</b> '. '<br><b>Always:</b> '.
'Bạn sẽ nhận được thông báo mỗi khi chạy đoạn script và một trang web tắt, ngay cả khi trang web đã được offline trong nhiều giờ.', 'Bạn sẽ nhận được thông báo mỗi khi chạy đoạn script và một trang web tắt, ngay cả khi trang web đã được offline trong nhiều giờ.',
'alert_type_status' => 'Thay đổi trạng thái', 'alert_type_status' => 'Thay đổi trạng thái',
@ -226,7 +226,7 @@ $sm_lang = array(
'settings_log' => 'Thiết lặp Log', 'settings_log' => 'Thiết lặp Log',
'auto_refresh' => 'Tự động làm mới', 'auto_refresh' => 'Tự động làm mới',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'Tự động làm mới servers page.<br/>'. 'Tự động làm mới servers page.<br>'.
'<span class="small">'. '<span class="small">'.
'Trong vài giây, nếu 0 trang sẽ không làm mới.'. 'Trong vài giây, nếu 0 trang sẽ không làm mới.'.
'</span>', '</span>',
@ -251,18 +251,18 @@ $sm_lang = array(
'log_retention_period_description' => 'Số ngày để giữ các bản ghi của các thông báo và tài liệu lưu trữ của thời gian hoạt động máy chủ. Nhập 0 để vô hiệu hóa dọn dẹp log.', 'log_retention_period_description' => 'Số ngày để giữ các bản ghi của các thông báo và tài liệu lưu trữ của thời gian hoạt động máy chủ. Nhập 0 để vô hiệu hóa dọn dẹp log.',
'log_retention_days' => 'ngày', 'log_retention_days' => 'ngày',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, cổng=%PORT%. Lỗi=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, cổng=%PORT%. Lỗi=%ERROR%',
'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN', 'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN',
'off_email_body' => "Không thể kết nối đến máy chủ sau:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Cổng: %PORT%<br/>Lỗi: %ERROR%<br/>Thời gian: %DATE%", 'off_email_body' => "Không thể kết nối đến máy chủ sau:<br><br>Server: %LABEL%<br>IP: %IP%<br>Cổng: %PORT%<br>Lỗi: %ERROR%<br>Thời gian: %DATE%",
'off_pushover_title' => 'Server \'%LABEL%\' is DOWN', 'off_pushover_title' => 'Server \'%LABEL%\' is DOWN',
'off_pushover_message' => "Không thể kết nối đến máy chủ:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Cổng: %PORT%<br/>Lỗi: %ERROR%<br/>Thời gian: %DATE%", 'off_pushover_message' => "Không thể kết nối đến máy chủ:<br><br>Server: %LABEL%<br>IP: %IP%<br>Cổng: %PORT%<br>Lỗi: %ERROR%<br>Thời gian: %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%\' hoạt động', 'on_email_subject' => 'IMPORTANT: Server \'%LABEL%\' hoạt động',
'on_email_body' => "Server '%LABEL%' hoạt động lại, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Cổng: %PORT%<br/>Thời gian: %DATE%", 'on_email_body' => "Server '%LABEL%' hoạt động lại, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Cổng: %PORT%<br>Thời gian: %DATE%",
'on_pushover_title' => 'Server \'%LABEL%\' hoạt động', 'on_pushover_title' => 'Server \'%LABEL%\' hoạt động',
'on_pushover_message' => 'Server \'%LABEL%\' hoạt động lại, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>Cổng: %PORT%<br/>Thời gian: %DATE%', 'on_pushover_message' => 'Server \'%LABEL%\' hoạt động lại, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Cổng: %PORT%<br>Thời gian: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Chào mừng, %user_name%', 'welcome_usermenu' => 'Chào mừng, %user_name%',
@ -279,7 +279,7 @@ $sm_lang = array(
'password_forgot' => 'Quên mật khẩu?', 'password_forgot' => 'Quên mật khẩu?',
'password_reset' => 'Khôi phục mật khẩu', 'password_reset' => 'Khôi phục mật khẩu',
'password_reset_email_subject' => 'Khôi phục lại mật khẩu của bạn cho PHP Server Monitor', 'password_reset_email_subject' => 'Khôi phục lại mật khẩu của bạn cho PHP Server Monitor',
'password_reset_email_body' => 'Vui lòng sử dụng liên kết sau đây để thiết lập lại mật khẩu của bạn. Xin lưu ý nó hết hạn trong 1 giờ.<br/><br/>%link%', 'password_reset_email_body' => 'Vui lòng sử dụng liên kết sau đây để thiết lập lại mật khẩu của bạn. Xin lưu ý nó hết hạn trong 1 giờ.<br><br>%link%',
'error_user_incorrect' => 'Tên người dùng cung cấp không thể tìm thấy.', 'error_user_incorrect' => 'Tên người dùng cung cấp không thể tìm thấy.',
'error_login_incorrect' => 'Thông tin không đúng.', 'error_login_incorrect' => 'Thông tin không đúng.',
'error_login_passwords_nomatch' => 'Mật khẩu được cung cấp không phù hợp.', 'error_login_passwords_nomatch' => 'Mật khẩu được cung cấp không phù hợp.',

View File

@ -92,7 +92,7 @@ $sm_lang = array(
'level' => '等级', 'level' => '等级',
'level_10' => '超级管理员', 'level_10' => '超级管理员',
'level_20' => '普通用户', 'level_20' => '普通用户',
'level_description' => '<b>超级管理员</b> 拥有所有权限: 管理服务器, 用户 以及修改设置.<br/><b>普通用户</b> 只能查看及更新自己名下所属的服务器.', 'level_description' => '<b>超级管理员</b> 拥有所有权限: 管理服务器, 用户 以及修改设置.<br><b>普通用户</b> 只能查看及更新自己名下所属的服务器.',
'mobile' => '手机', 'mobile' => '手机',
'email' => '邮件', 'email' => '邮件',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
@ -136,7 +136,8 @@ $sm_lang = array(
'domain' => 'URL/IP', 'domain' => 'URL/IP',
'timeout' => '超时时间', 'timeout' => '超时时间',
'timeout_description' => '等待服务器响应的时间.', 'timeout_description' => '等待服务器响应的时间.',
'authentication_settings' => '访问权限设置 (可选)', 'authentication_settings' => '访问权限设置',
'optional' => '可选',
'website_username' => '用户名', 'website_username' => '用户名',
'website_username_description' => '网站分配的用户名.', 'website_username_description' => '网站分配的用户名.',
'website_password' => '密码', 'website_password' => '密码',
@ -231,18 +232,18 @@ $sm_lang = array(
'pushover_api_token_description' => '请先 <a href="%1$s" target="_blank" rel="noopener">注册Pushover</a> 并获取 Api Token.', 'pushover_api_token_description' => '请先 <a href="%1$s" target="_blank" rel="noopener">注册Pushover</a> 并获取 Api Token.',
'alert_type' => '如果想要收到提醒请选中此项.', 'alert_type' => '如果想要收到提醒请选中此项.',
'alert_type_description' => '<b>状态变化:</b> '. 'alert_type_description' => '<b>状态变化:</b> '.
'业务 online -> offline 或 offline -> online 的状态变化将会收到提醒.<br/>'. '业务 online -> offline 或 offline -> online 的状态变化将会收到提醒.<br>'.
'<br /><b>离线状态:</b> '. '<br /><b>离线状态:</b> '.
'服务器首次发生离线状态将会收到提醒 ,如:'. '服务器首次发生离线状态将会收到提醒 ,如:'.
'cronjob 设定为15分钟执行一次 服务器从1:00-6:00一直处于当状态'. 'cronjob 设定为15分钟执行一次 服务器从1:00-6:00一直处于当状态'.
'那么你将于1:00首次发现脱机时收到一条提醒之后不会重复提醒.<br/>'. '那么你将于1:00首次发现脱机时收到一条提醒之后不会重复提醒.<br>'.
'<br><b>总是提醒:</b> '. '<br><b>总是提醒:</b> '.
'每次脚本执行或站点离线(即使站点离线很久已提醒过)均发送提醒.', '每次脚本执行或站点离线(即使站点离线很久已提醒过)均发送提醒.',
'alert_type_status' => '状态变化', 'alert_type_status' => '状态变化',
'alert_type_offline' => '离线状态', 'alert_type_offline' => '离线状态',
'alert_type_always' => '总是提醒', 'alert_type_always' => '总是提醒',
'alert_proxy' => '代理只用于 URL 监控,如没有用户名密码,请留空', 'alert_proxy' => '代理只用于 URL 监控,如没有用户名密码,请留空',
'alert_proxy_url' => '<b>格式:</b> Host:Port', 'alert_proxy_url' => '格式: Host:Port',
'log_status' => '状态记录', 'log_status' => '状态记录',
'log_status_description' => '如果状态记录设置为开, 提醒发送时均会保存记录.', 'log_status_description' => '如果状态记录设置为开, 提醒发送时均会保存记录.',
'log_email' => '记录脚本所发邮件?', 'log_email' => '记录脚本所发邮件?',
@ -260,7 +261,7 @@ $sm_lang = array(
'settings_proxy' => '代理设置', 'settings_proxy' => '代理设置',
'auto_refresh' => '自动刷新', 'auto_refresh' => '自动刷新',
'auto_refresh_servers' => 'auto_refresh_servers' =>
'自动刷新服务器页.<br/>'. '自动刷新服务器页.<br>'.
'<span class="small">'. '<span class="small">'.
'单位为秒, 设置为 0 则不自动刷新.'. '单位为秒, 设置为 0 则不自动刷新.'.
'</span>', '</span>',
@ -285,18 +286,18 @@ $sm_lang = array(
'log_retention_period_description' => '日志存档保留时间0为禁用日志清理', 'log_retention_period_description' => '日志存档保留时间0为禁用日志清理',
'log_retention_days' => '天', 'log_retention_days' => '天',
), ),
// for newlines in the email messages use <br/> // for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => '监控项 \'%LABEL%:%PORT%\' 异常. %ERROR% %IP%', 'off_sms' => '监控项 \'%LABEL%:%PORT%\' 异常. %ERROR% %IP%',
'off_email_subject' => 'IMPORTANT: 服务器 \'%LABEL%\' 宕机', 'off_email_subject' => 'IMPORTANT: 服务器 \'%LABEL%\' 宕机',
'off_email_body' => "无法连接到以下服务器:<br/><br/>服务器: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>错误: %ERROR%<br/>日期: %DATE%", 'off_email_body' => "无法连接到以下服务器:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>错误: %ERROR%<br>日期: %DATE%",
'off_pushover_title' => '服务器 \'%LABEL%\' 宕机', 'off_pushover_title' => '服务器 \'%LABEL%\' 宕机',
'off_pushover_message' => "无法连接到以下服务器:<br/><br/>服务器: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>错误: %ERROR%<br/>日期: %DATE%", 'off_pushover_message' => "无法连接到以下服务器:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>错误: %ERROR%<br>日期: %DATE%",
'on_sms' => '服务器 \'%LABEL%\' 运行中: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => '服务器 \'%LABEL%\' 运行中: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'IMPORTANT: 服务器 \'%LABEL%\' 运行中', 'on_email_subject' => 'IMPORTANT: 服务器 \'%LABEL%\' 运行中',
'on_email_body' => "服务器 '%LABEL%' 恢复运行, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>服务器: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>日期: %DATE%", 'on_email_body' => "服务器 '%LABEL%' 恢复运行, it was down for %LAST_OFFLINE_DURATION%:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>日期: %DATE%",
'on_pushover_title' => '服务器 \'%LABEL%\' 运行中', 'on_pushover_title' => '服务器 \'%LABEL%\' 运行中',
'on_pushover_message' => "服务器 '%LABEL%' 恢复运行, it was down for %LAST_OFFLINE_DURATION%:<br/><br/>服务器: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>日期: %DATE%", 'on_pushover_message' => "服务器 '%LABEL%' 恢复运行, it was down for %LAST_OFFLINE_DURATION%:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>日期: %DATE%",
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => '欢迎, %user_name%', 'welcome_usermenu' => '欢迎, %user_name%',
@ -313,7 +314,7 @@ $sm_lang = array(
'password_forgot' => '忘记密码?', 'password_forgot' => '忘记密码?',
'password_reset' => '重设密码', 'password_reset' => '重设密码',
'password_reset_email_subject' => '重设你的密码', 'password_reset_email_subject' => '重设你的密码',
'password_reset_email_body' => '点击以下链接重设密码. 链接1小时内有效.<br/><br/>%link%', 'password_reset_email_body' => '点击以下链接重设密码. 链接1小时内有效.<br><br>%link%',
'error_user_incorrect' => '该用户不存在.', 'error_user_incorrect' => '该用户不存在.',
'error_login_incorrect' => '登录信息不正确.', 'error_login_incorrect' => '登录信息不正确.',
'error_login_passwords_nomatch' => '密码不符.', 'error_login_passwords_nomatch' => '密码不符.',

View File

@ -266,6 +266,7 @@ abstract class AbstractController implements ControllerInterface {
'label_logout' => psm_get_lang('login', 'logout'), 'label_logout' => psm_get_lang('login', 'logout'),
'url_profile' => psm_build_url(array('mod' => 'user_profile')), 'url_profile' => psm_build_url(array('mod' => 'user_profile')),
'url_logout' => psm_build_url(array('logout' => 1)), 'url_logout' => psm_build_url(array('logout' => 1)),
'label_current' => psm_get_lang('system', 'current'),
); );
switch ($ulvl) { switch ($ulvl) {
@ -350,26 +351,30 @@ abstract class AbstractController implements ControllerInterface {
/** /**
* Add one or multiple message to the stack to be displayed to the user * Add one or multiple message to the stack to be displayed to the user
* @param string|array $msg * @param string|array $msg
* @param string $shortcode info/success/warning/error * @param string $shortcode primary/success/warning/danger
* @return \psm\Module\ControllerInterface * @return \psm\Module\ControllerInterface
* @see getMessages() * @see getMessages()
*/ */
public function addMessage($msg, $shortcode = 'info') { public function addMessage($msg, $shortcode = 'primary') {
if (!is_array($msg)) { if (!is_array($msg)) {
$msg = array($msg); $msg = array($msg);
} }
$class= $shortcode;
switch ($shortcode) { switch ($shortcode) {
case 'error': case 'error':
$icon = 'exclamation-sign'; $icon = 'exclamation-circle';
$class= 'danger';
break; break;
case 'success': case 'success':
$icon = 'ok-sign'; $icon = 'check-circle';
break; break;
case 'warning': case 'warning':
$icon = 'question-sign'; $icon = 'exclamation-triangle';
break; break;
case 'primary':
default: default:
$icon = 'info-sign'; $icon = 'info-circle';
$shortcode = 'info';
break; break;
} }
@ -377,6 +382,7 @@ abstract class AbstractController implements ControllerInterface {
$this->messages[] = array( $this->messages[] = array(
'message' => $m, 'message' => $m,
'shortcode' => $shortcode, 'shortcode' => $shortcode,
'class' => $class,
'icon' => $icon, 'icon' => $icon,
); );
} }

View File

@ -120,23 +120,42 @@ class ConfigController extends AbstractController {
// generate sms_gateway array // generate sms_gateway array
$sms_gateways = psm_get_sms_gateways(); $sms_gateways = psm_get_sms_gateways();
$tpl_data['sms_gateway_current'] = (isset($config['sms_gateway'])) $tpl_data['sms_gateway'] = array();
? $config['sms_gateway']
: current($sms_gateways);
$tpl_data['sms_gateways'] = array();
foreach ($sms_gateways as $sms_gateway => $label) { foreach ($sms_gateways as $sms_gateway => $label) {
$tpl_data['sms_gateways'][] = array( $tpl_data['sms_gateway'][] = array(
'value' => $sms_gateway, 'value' => $sms_gateway,
'label' => $label, 'label' => $label,
); );
} }
// @todo these selected values can easily be rewritten in the template using twig
$tpl_data['alert_type_selected_'.$config['alert_type']] = 'selected="selected"'; foreach (array("status", "offline", "always") as $alert_type) {
$smtp_sec = isset($config['email_smtp_security']) ? $config['email_smtp_security'] : ''; $tpl_data['alert_type'][] = array(
$tpl_data['email_smtp_security_selected_'.$smtp_sec] = 'selected="selected"'; 'value' => $alert_type,
$tpl_data['auto_refresh_servers'] = (isset($config['auto_refresh_servers'])) ? $config['auto_refresh_servers'] : '0'; 'label' => psm_get_lang('config', 'alert_type_'.$alert_type),
$tpl_data['log_retention_period'] = (isset($config['log_retention_period'])) ? $config['log_retention_period'] : '365'; );
$tpl_data['password_encrypt_key'] = (isset($config['password_encrypt_key'])) ? $config['password_encrypt_key'] : sha1(microtime()); }
$tpl_data['email_smtp_security'] = array(
array(
'value' => '',
'label' => psm_get_lang('config', 'email_smtp_security_none')
),
array(
'value' => 'ssl',
'label' => 'SSL'
),
array(
'value' => 'tls',
'label' => 'TLS'
)
);
$tpl_data['sms_gateway_selected'] = isset($config['sms_gateway']) ? $config['sms_gateway'] : current($sms_gateways);
$tpl_data['alert_type_selected'] = isset($config['alert_type']) ? $config['alert_type'] : '';
$tpl_data['email_smtp_security_selected'] = isset($config['email_smtp_security']) ? $config['email_smtp_security'] : '';
$tpl_data['auto_refresh_servers'] = isset($config['auto_refresh_servers']) ? $config['auto_refresh_servers'] : '0';
$tpl_data['log_retention_period'] = isset($config['log_retention_period']) ? $config['log_retention_period'] : '365';
$tpl_data['password_encrypt_key'] = isset($config['password_encrypt_key']) ? $config['password_encrypt_key'] : sha1(microtime());
foreach ($this->checkboxes as $input_key) { foreach ($this->checkboxes as $input_key) {
$tpl_data[$input_key.'_checked'] = $tpl_data[$input_key.'_checked'] =
@ -369,7 +388,6 @@ class ConfigController extends AbstractController {
'label_email_smtp_host' => psm_get_lang('config', 'email_smtp_host'), 'label_email_smtp_host' => psm_get_lang('config', 'email_smtp_host'),
'label_email_smtp_port' => psm_get_lang('config', 'email_smtp_port'), 'label_email_smtp_port' => psm_get_lang('config', 'email_smtp_port'),
'label_email_smtp_security' => psm_get_lang('config', 'email_smtp_security'), 'label_email_smtp_security' => psm_get_lang('config', 'email_smtp_security'),
'label_email_smtp_security_none' => psm_get_lang('config', 'email_smtp_security_none'),
'label_email_smtp_username' => psm_get_lang('config', 'email_smtp_username'), 'label_email_smtp_username' => psm_get_lang('config', 'email_smtp_username'),
'label_email_smtp_password' => psm_get_lang('config', 'email_smtp_password'), 'label_email_smtp_password' => psm_get_lang('config', 'email_smtp_password'),
'label_email_smtp_noauth' => psm_get_lang('config', 'email_smtp_noauth'), 'label_email_smtp_noauth' => psm_get_lang('config', 'email_smtp_noauth'),
@ -393,9 +411,6 @@ class ConfigController extends AbstractController {
'label_telegram_api_token_description' => psm_get_lang('config', 'telegram_api_token_description'), 'label_telegram_api_token_description' => psm_get_lang('config', 'telegram_api_token_description'),
'label_alert_type' => psm_get_lang('config', 'alert_type'), 'label_alert_type' => psm_get_lang('config', 'alert_type'),
'label_alert_type_description' => psm_get_lang('config', 'alert_type_description'), 'label_alert_type_description' => psm_get_lang('config', 'alert_type_description'),
'label_alert_type_status' => psm_get_lang('config', 'alert_type_status'),
'label_alert_type_offline' => psm_get_lang('config', 'alert_type_offline'),
'label_alert_type_always' => psm_get_lang('config', 'alert_type_always'),
'label_combine_notifications' => psm_get_lang('config', 'combine_notifications'), 'label_combine_notifications' => psm_get_lang('config', 'combine_notifications'),
'label_combine_notifications_description' => psm_get_lang('config', 'combine_notifications_description'), 'label_combine_notifications_description' => psm_get_lang('config', 'combine_notifications_description'),
'label_log_status' => psm_get_lang('config', 'log_status'), 'label_log_status' => psm_get_lang('config', 'log_status'),
@ -414,6 +429,8 @@ class ConfigController extends AbstractController {
'label_log_retention_period' => psm_get_lang('config', 'log_retention_period'), 'label_log_retention_period' => psm_get_lang('config', 'log_retention_period'),
'label_log_retention_period_description' => psm_get_lang('config', 'log_retention_period_description'), 'label_log_retention_period_description' => psm_get_lang('config', 'log_retention_period_description'),
'label_log_retention_days' => psm_get_lang('config', 'log_retention_days'), 'label_log_retention_days' => psm_get_lang('config', 'log_retention_days'),
'label_days' => psm_get_lang('config', 'log_retention_days'),
); );
} }
} }

View File

@ -76,7 +76,8 @@ class InstallController extends AbstractController {
$this->addMessage('PHP version: '.$phpv, 'success'); $this->addMessage('PHP version: '.$phpv, 'success');
} }
if (version_compare(PHP_RELEASE_VERSION, '7', '<')) { if (version_compare(PHP_RELEASE_VERSION, '7', '<')) {
$this->addMessage('PHP 5 reaches the end of life (January 1, 2019), please update to PHP 7. PHP supported versions can be found <a href="https://secure.php.net/supported-versions.php">here</a>.', 'warning'); // TODO PHP 5 has reached the end of life. Add warning for those who still use it.
$this->addMessage('PHP 5 reaches the end of life (January 1, 2019), please update to PHP 7. PHP supported versions can be found <a href="https://secure.php.net/supported-versions.php" target="_blank" rel="noopener">here</a>.', 'warning');
} }
if (!function_exists('curl_init')) { if (!function_exists('curl_init')) {
$this->addMessage('PHP is installed without the cURL module. Please install cURL.', 'warning'); $this->addMessage('PHP is installed without the cURL module. Please install cURL.', 'warning');
@ -88,7 +89,7 @@ class InstallController extends AbstractController {
$this->addMessage('The PDO MySQL driver needs to be installed.', 'error'); $this->addMessage('The PDO MySQL driver needs to be installed.', 'error');
} }
if (!ini_get('date.timezone')) { if (!ini_get('date.timezone')) {
$this->addMessage('You should set a timezone in your php.ini file (e.g. \'date.timezone = UTC\'). See <a href="http://www.php.net/manual/en/timezones.php" target="_blank">this page</a> for more info.', 'warning'); $this->addMessage('You should set a timezone in your php.ini file (e.g. \'date.timezone = UTC\'). See <a href="http://www.php.net/manual/en/timezones.php" target="_blank" rel="noopener">this page</a> for more info.', 'warning');
} }
if ($errors > 0) { if ($errors > 0) {
@ -172,11 +173,18 @@ class InstallController extends AbstractController {
if ($this->db->status()) { if ($this->db->status()) {
if ($this->isUpgrade()) { if ($this->isUpgrade()) {
// upgrade // upgrade
if (version_compare($this->getPreviousVersion(), '3.0.0', '<')) { $version_from = $this->getPreviousVersion();
if (version_compare($version_from, '3.0.0', '<')) {
// upgrade from before 3.0, does not have passwords yet.. create new user first // upgrade from before 3.0, does not have passwords yet.. create new user first
$this->addMessage('Your current version does not have an authentication system, but since v3.0 access to the monitor is restricted by user accounts. Please set up a new account to be able to login after the upgrade, and which you can use to change the passwords for your other accounts.', 'info'); $this->addMessage('Your current version does not have an authentication system, but since v3.0 access to the monitor is restricted by user accounts. Please set up a new account to be able to login after the upgrade, and which you can use to change the passwords for your other accounts.');
$tpl_name = 'module/install/config_new_user.tpl.html'; $tpl_name = 'module/install/config_new_user.tpl.html';
} else { }
elseif (version_compare($version_from, PSM_VERSION, '=')) {
$this->addMessage('Your installation is already at the latest version.', 'success');
$tpl_name = 'module/install/success.tpl.html';
}
else {
$this->addMessage('We have discovered a previous version.');
$tpl_name = 'module/install/config_upgrade.tpl.html'; $tpl_name = 'module/install/config_upgrade.tpl.html';
$tpl_data['version'] = PSM_VERSION; $tpl_data['version'] = PSM_VERSION;
} }
@ -226,7 +234,7 @@ class InstallController extends AbstractController {
$installer = new \psm\Util\Install\Installer($this->db, $logger); $installer = new \psm\Util\Install\Installer($this->db, $logger);
if ($this->isUpgrade()) { if ($this->isUpgrade()) {
$this->addMessage('Upgrade process started.', 'info'); $this->addMessage('Upgrade process started.');
$version_from = $this->getPreviousVersion(); $version_from = $this->getPreviousVersion();
if ($version_from === false) { if ($version_from === false) {
@ -237,7 +245,7 @@ class InstallController extends AbstractController {
} elseif (version_compare($version_from, PSM_VERSION, '>')) { } elseif (version_compare($version_from, PSM_VERSION, '>')) {
$this->addMessage('This installer does not support downgrading, sorry.', 'error'); $this->addMessage('This installer does not support downgrading, sorry.', 'error');
} else { } else {
$this->addMessage('Upgrading from '.$version_from.' to '.PSM_VERSION, 'info'); $this->addMessage('Upgrading from '.$version_from.' to '.PSM_VERSION);
$installer->upgrade($version_from, PSM_VERSION); $installer->upgrade($version_from, PSM_VERSION);
} }

View File

@ -118,11 +118,6 @@ abstract class AbstractServerController extends AbstractController {
null : "(".$server['last_offline_duration'].")"; null : "(".$server['last_offline_duration'].")";
} }
$server['last_check'] = psm_timespan($server['last_check']); $server['last_check'] = psm_timespan($server['last_check']);
$server['active'] = psm_get_lang('system', $server['active']);
$server['email'] = psm_get_lang('system', $server['email']);
$server['sms'] = psm_get_lang('system', $server['sms']);
$server['pushover'] = psm_get_lang('system', $server['pushover']);
$server['telegram'] = psm_get_lang('system', $server['telegram']);
if ($server['status'] == 'on' && $server['warning_threshold_counter'] > 0) { if ($server['status'] == 'on' && $server['warning_threshold_counter'] > 0) {
$server['status'] = 'warning'; $server['status'] = 'warning';

View File

@ -59,17 +59,28 @@ class LogController extends AbstractServerController {
'label_date' => psm_get_lang('system', 'date'), 'label_date' => psm_get_lang('system', 'date'),
'label_users' => ucfirst(psm_get_lang('menu', 'user')), 'label_users' => ucfirst(psm_get_lang('menu', 'user')),
'label_no_logs' => psm_get_lang('log', 'no_logs'), 'label_no_logs' => psm_get_lang('log', 'no_logs'),
'label_clear_log' => psm_get_lang('log', 'clear'),
'tabs' => array(), 'tabs' => array(),
); );
$sidebar = new \psm\Util\Module\Sidebar($this->twig);
$this->setSidebar($sidebar);
if ($this->getUser()->getUserLevel() == PSM_USER_ADMIN) { if ($this->getUser()->getUserLevel() == PSM_USER_ADMIN) {
$modal = new \psm\Util\Module\Modal($this->twig, 'delete', \psm\Util\Module\Modal::MODAL_TYPE_DANGER); $modal = new \psm\Util\Module\Modal($this->twig, 'delete', \psm\Util\Module\Modal::MODAL_TYPE_DANGER);
$this->addModal($modal); $this->addModal($modal);
$modal->setTitle(psm_get_lang('log', 'delete_title')); $modal->setTitle(psm_get_lang('log', 'delete_title'));
$modal->setMessage(psm_get_lang('log', 'delete_message')); $modal->setMessage(psm_get_lang('log', 'delete_message'));
$modal->setOKButtonLabel(psm_get_lang('system', 'delete')); $modal->setOKButtonLabel(psm_get_lang('system', 'delete'));
$tpl_data['has_admin_actions'] = true;
$sidebar->addButton(
'clear_logn',
psm_get_lang('log', 'clear'),
psm_build_url(array('mod' => 'server_log', 'action' => 'delete')),
'trash',
'danger show-modal',
psm_get_lang('log', 'delete_title'),
'delete'
);
} }
$log_types = array('status', 'email', 'sms', 'pushover', 'telegram'); $log_types = array('status', 'email', 'sms', 'pushover', 'telegram');
@ -80,6 +91,7 @@ class LogController extends AbstractServerController {
$tab_data = array( $tab_data = array(
'id' => $key, 'id' => $key,
'label' => psm_get_lang('log', $key),
'has_users' => ($key == 'status') ? false : true, 'has_users' => ($key == 'status') ? false : true,
'no_logs' => ($log_count == 0) ? true : false, 'no_logs' => ($log_count == 0) ? true : false,
'tab_active' => ($key == 'status') ? 'active' : '', 'tab_active' => ($key == 'status') ? 'active' : '',
@ -87,10 +99,9 @@ class LogController extends AbstractServerController {
for ($x = 0; $x < $log_count; $x++) { for ($x = 0; $x < $log_count; $x++) {
$record = &$records[$x]; $record = &$records[$x];
$record['class'] = ($x & 1) ? 'odd' : 'even';
$record['users'] = ''; $record['users'] = '';
$record['server'] = $record['label']; $record['server'] = $record['label'];
$record['type_icon'] = ($record['server_type'] == 'website') ? 'icon-globe' : 'icon-cog'; $record['type_icon'] = ($record['server_type'] == 'website') ? 'globe-americas' : 'cogs';
$record['type_title'] = psm_get_lang('servers', 'type_'.$record['server_type']); $record['type_title'] = psm_get_lang('servers', 'type_'.$record['server_type']);
$ip = '('.$record['ip']; $ip = '('.$record['ip'];
if (!empty($record['port']) && (($record['server_type'] != 'website') || ($record['port'] != 80))) { if (!empty($record['port']) && (($record['server_type'] != 'website') || ($record['port'] != 80))) {
@ -113,10 +124,6 @@ class LogController extends AbstractServerController {
} }
$tab_data['entries'] = $records; $tab_data['entries'] = $records;
$tpl_data['tabs'][] = $tab_data; $tpl_data['tabs'][] = $tab_data;
$tpl_data['url_delete'] = psm_build_url(array(
'mod' => 'server_log',
'action' => 'delete',
));
} }
return $this->twig->render('module/server/log.tpl.html', $tpl_data); return $this->twig->render('module/server/log.tpl.html', $tpl_data);
} }

View File

@ -77,7 +77,9 @@ class ServerController extends AbstractServerController {
'add_new', 'add_new',
psm_get_lang('system', 'add_new'), psm_get_lang('system', 'add_new'),
psm_build_url(array('mod' => 'server', 'action' => 'edit')), psm_build_url(array('mod' => 'server', 'action' => 'edit')),
'plus icon-white', 'success' 'plus',
'success',
psm_get_lang('system', 'add_new')
); );
} }
@ -85,7 +87,9 @@ class ServerController extends AbstractServerController {
'update', 'update',
psm_get_lang('menu', 'server_update'), psm_get_lang('menu', 'server_update'),
psm_build_url(array('mod' => 'server_update')), psm_build_url(array('mod' => 'server_update')),
'refresh' 'sync-alt',
'primary',
psm_get_lang('menu', 'server_update')
); );
$icons = array( $icons = array(
@ -99,32 +103,14 @@ class ServerController extends AbstractServerController {
$server_count = count($servers); $server_count = count($servers);
for ($x = 0; $x < $server_count; $x++) { for ($x = 0; $x < $server_count; $x++) {
$servers[$x]['class'] = ($x & 1) ? 'odd' : 'even';
if ($servers[$x]['type'] == 'website') { if ($servers[$x]['type'] == 'website') {
$servers[$x]['type_icon'] = 'icon-globe';
// add link to label // add link to label
$ip = $servers[$x]['ip']; $ip = $servers[$x]['ip'];
if (!empty($servers[$x]['port']) && ($servers[$x]['port'] != 80)) { $servers[$x]['ip'] = '<a href="'.$servers[$x]['ip'].'" target="_blank" rel="noopener">'.$ip.'</a>';
$ip .= ' : '.$servers[$x]['port'];
}
$servers[$x]['ip'] = '<a href="'.$servers[$x]['ip'].'" target="_blank">'.$ip.'</a>';
$servers[$x]['ip_short'] = $ip;
} else {
$servers[$x]['type_icon'] = 'icon-cog';
$servers[$x]['ip_short'] = $servers[$x]['ip'].' : '.$servers[$x]['port'];
} }
if (($servers[$x]['active'] == 'yes')) { if (($servers[$x]['active'] == 'yes')) {
$servers[$x]['active_icon'] = 'icon-eye-open';
$servers[$x]['active_title'] = psm_get_lang('servers', 'monitoring'); $servers[$x]['active_title'] = psm_get_lang('servers', 'monitoring');
foreach ($icons as $i_id => $i_icon) {
if (psm_get_conf($i_id.'_status') && $servers[$x][$i_id] == 'yes') {
$servers[$x][$i_id.'_icon'] = $i_icon;
}
}
} else { } else {
$servers[$x]['active_icon'] = 'icon-eye-close';
$servers[$x]['active_title'] = psm_get_lang('servers', 'no_monitoring'); $servers[$x]['active_title'] = psm_get_lang('servers', 'no_monitoring');
} }
@ -178,7 +164,11 @@ class ServerController extends AbstractServerController {
$user_idc_selected = $this->getServerUsers($this->server_id); $user_idc_selected = $this->getServerUsers($this->server_id);
foreach ($tpl_data['users'] as &$user) { foreach ($tpl_data['users'] as &$user) {
if (in_array($user['user_id'], $user_idc_selected)) { $user['id'] = $user['user_id'];
unset($user['user_id']);
$user['label'] = $user['name'];
unset($user['name']);
if (in_array($user['id'], $user_idc_selected)) {
$user['edit_selected'] = 'selected="selected"'; $user['edit_selected'] = 'selected="selected"';
} }
} }
@ -199,7 +189,6 @@ class ServerController extends AbstractServerController {
'edit_value_request_method' => $edit_server['request_method'], 'edit_value_request_method' => $edit_server['request_method'],
'edit_value_post_field' => $edit_server['post_field'], 'edit_value_post_field' => $edit_server['post_field'],
'edit_value_timeout' => $edit_server['timeout'], 'edit_value_timeout' => $edit_server['timeout'],
'default_value_timeout' => PSM_CURL_TIMEOUT,
'edit_value_pattern' => $edit_server['pattern'], 'edit_value_pattern' => $edit_server['pattern'],
'edit_pattern_selected_'.$edit_server['pattern_online'] => 'selected="selected"', 'edit_pattern_selected_'.$edit_server['pattern_online'] => 'selected="selected"',
'edit_redirect_check_selected_'.$edit_server['redirect_check'] => 'selected="selected"', 'edit_redirect_check_selected_'.$edit_server['redirect_check'] => 'selected="selected"',
@ -210,11 +199,11 @@ class ServerController extends AbstractServerController {
'edit_website_username' => $edit_server['website_username'], 'edit_website_username' => $edit_server['website_username'],
'edit_website_password' => empty($edit_server['website_password']) ? '' : sha1($edit_server['website_password']), 'edit_website_password' => empty($edit_server['website_password']) ? '' : sha1($edit_server['website_password']),
'edit_type_selected_'.$edit_server['type'] => 'selected="selected"', 'edit_type_selected_'.$edit_server['type'] => 'selected="selected"',
'edit_active_selected_'.$edit_server['active'] => 'selected="selected"', 'edit_active_selected' => $edit_server['active'],
'edit_email_selected_'.$edit_server['email'] => 'selected="selected"', 'edit_email_selected' => $edit_server['email'],
'edit_sms_selected_'.$edit_server['sms'] => 'selected="selected"', 'edit_sms_selected' => $edit_server['sms'],
'edit_pushover_selected_'.$edit_server['pushover'] => 'selected="selected"', 'edit_pushover_selected' => $edit_server['pushover'],
'edit_telegram_selected_'.$edit_server['telegram'] => 'selected="selected"', 'edit_telegram_selected' => $edit_server['telegram'],
)); ));
} }
@ -222,7 +211,6 @@ class ServerController extends AbstractServerController {
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;
$tpl_data['control_class_'.$notification] = 'warning';
$tpl_data['label_warning_'.$notification] = psm_get_lang( $tpl_data['label_warning_'.$notification] = psm_get_lang(
'servers', 'warning_notifications_disabled_'.$notification 'servers', 'warning_notifications_disabled_'.$notification
); );
@ -277,7 +265,6 @@ class ServerController extends AbstractServerController {
'allow_http_status' => psm_POST('allow_http_status', ''), 'allow_http_status' => psm_POST('allow_http_status', ''),
'header_name' => psm_POST('header_name', ''), 'header_name' => psm_POST('header_name', ''),
'header_value' => psm_POST('header_value', ''), 'header_value' => psm_POST('header_value', ''),
'rtime' => psm_POST('rtime', '0.0000000'),
'warning_threshold' => intval(psm_POST('warning_threshold', 0)), 'warning_threshold' => intval(psm_POST('warning_threshold', 0)),
'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',
@ -421,6 +408,20 @@ class ServerController extends AbstractServerController {
$history = new \psm\Util\Server\HistoryGraph($this->db, $this->twig); $history = new \psm\Util\Server\HistoryGraph($this->db, $this->twig);
$tpl_data['html_history'] = $history->createHTML($this->server_id); $tpl_data['html_history'] = $history->createHTML($this->server_id);
$sidebar = new \psm\Util\Module\Sidebar($this->twig);
$this->setSidebar($sidebar);
// check which module the user came from, and add a link accordingly
$back_to = isset($_GET['back_to']) && $_GET['back_to'] == 'server_status' ? $_GET['back_to'] : 'server';
$sidebar->addButton(
'go_back',
psm_get_lang('system', 'go_back'),
psm_build_url(array('mod' => $back_to)),
'angle-left',
'link',
psm_get_lang('system', 'go_back')
);
// add edit/delete buttons for admins // add edit/delete buttons for admins
if ($this->getUser()->getUserLevel() == PSM_USER_ADMIN) { if ($this->getUser()->getUserLevel() == PSM_USER_ADMIN) {
$tpl_data['has_admin_actions'] = true; $tpl_data['has_admin_actions'] = true;
@ -431,6 +432,15 @@ class ServerController extends AbstractServerController {
$modal->setTitle(psm_get_lang('servers', 'delete_title')); $modal->setTitle(psm_get_lang('servers', 'delete_title'));
$modal->setMessage(psm_get_lang('servers', 'delete_message')); $modal->setMessage(psm_get_lang('servers', 'delete_message'));
$modal->setOKButtonLabel(psm_get_lang('system', 'delete')); $modal->setOKButtonLabel(psm_get_lang('system', 'delete'));
$sidebar->addButton(
'edit',
psm_get_lang('system', 'edit'),
psm_build_url(array('mod' => 'server', 'action' => 'edit', 'id' => $this->server_id, 'back_to' => 'view')),
'edit',
'primary',
psm_get_lang('system', 'edit')
);
} }
// add all available servers to the menu // add all available servers to the menu
@ -443,19 +453,6 @@ class ServerController extends AbstractServerController {
'label' => $server_available['label'], 'label' => $server_available['label'],
); );
} }
$sidebar = new \psm\Util\Module\Sidebar($this->twig);
$this->setSidebar($sidebar);
// check which module the user came from, and add a link accordingly
$back_to = isset($_GET['back_to']) && $_GET['back_to'] == 'server_status' ? $_GET['back_to'] : 'server';
$sidebar->addButton(
'go_back',
psm_get_lang('system', 'go_back'),
psm_build_url(array('mod' => $back_to)),
'th-list'
);
return $this->twig->render('module/server/server/view.tpl.html', $tpl_data); return $this->twig->render('module/server/server/view.tpl.html', $tpl_data);
} }
@ -467,12 +464,14 @@ class ServerController extends AbstractServerController {
'label_timeout' => psm_get_lang('servers', 'timeout'), 'label_timeout' => psm_get_lang('servers', 'timeout'),
'label_timeout_description' => psm_get_lang('servers', 'timeout_description'), 'label_timeout_description' => psm_get_lang('servers', 'timeout_description'),
'label_authentication_settings' => psm_get_lang('servers', 'authentication_settings'), 'label_authentication_settings' => psm_get_lang('servers', 'authentication_settings'),
'label_optional' => psm_get_lang('servers', 'optional'),
'label_website_username' => psm_get_lang('servers', 'website_username'), 'label_website_username' => psm_get_lang('servers', 'website_username'),
'label_website_username_description' => psm_get_lang('servers', 'website_username_description'), 'label_website_username_description' => psm_get_lang('servers', 'website_username_description'),
'label_website_password' => psm_get_lang('servers', 'website_password'), 'label_website_password' => psm_get_lang('servers', 'website_password'),
'label_website_password_description' => psm_get_lang('servers', 'website_password_description'), 'label_website_password_description' => psm_get_lang('servers', 'website_password_description'),
'label_fieldset_monitoring' => psm_get_lang('servers', 'fieldset_monitoring'), 'label_fieldset_monitoring' => psm_get_lang('servers', 'fieldset_monitoring'),
'label_fieldset_permissions' => psm_get_lang('servers', 'fieldset_permissions'), 'label_fieldset_permissions' => psm_get_lang('servers', 'fieldset_permissions'),
'label_permissions' => psm_get_lang('servers', 'permissions'),
'label_port' => psm_get_lang('servers', 'port'), 'label_port' => psm_get_lang('servers', 'port'),
'label_custom_port' => psm_get_lang('servers', 'custom_port'), 'label_custom_port' => psm_get_lang('servers', 'custom_port'),
'label_popular_ports' => psm_get_lang('servers', 'popular_ports'), 'label_popular_ports' => psm_get_lang('servers', 'popular_ports'),
@ -495,7 +494,8 @@ class ServerController extends AbstractServerController {
'label_redirect_check_description' => psm_get_lang('servers', 'redirect_check_description'), 'label_redirect_check_description' => psm_get_lang('servers', 'redirect_check_description'),
'label_allow_http_status' => psm_get_lang('servers', 'allow_http_status'), 'label_allow_http_status' => psm_get_lang('servers', 'allow_http_status'),
'label_allow_http_status_description' => psm_get_lang('servers', 'allow_http_status_description'), 'label_allow_http_status_description' => psm_get_lang('servers', 'allow_http_status_description'),
'label_header' => psm_get_lang('servers', 'header'), 'label_header_name' => psm_get_lang('servers', 'header_name'),
'label_header_value' => psm_get_lang('servers', 'header_value'),
'label_header_name_description' => psm_get_lang('servers', 'header_name_description'), 'label_header_name_description' => psm_get_lang('servers', 'header_name_description'),
'label_header_value_description' => psm_get_lang('servers', 'header_value_description'), 'label_header_value_description' => psm_get_lang('servers', 'header_value_description'),
'label_last_check' => psm_get_lang('servers', 'last_check'), 'label_last_check' => psm_get_lang('servers', 'last_check'),
@ -510,8 +510,10 @@ 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_pushover' => psm_get_lang('servers', 'pushover'), 'label_send_pushover' => psm_get_lang('servers', 'send_pushover'),
'label_telegram' => psm_get_lang('servers', 'telegram'), 'label_telegram' => psm_get_lang('servers', 'telegram'),
'label_pushover' => psm_get_lang('servers', 'pushover'),
'label_send_telegram' => psm_get_lang('servers', 'send_telegram'),
'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'),
@ -520,14 +522,19 @@ class ServerController extends AbstractServerController {
'label_go_back' => psm_get_lang('system', 'go_back'), 'label_go_back' => psm_get_lang('system', 'go_back'),
'label_edit' => psm_get_lang('system', 'edit'), 'label_edit' => psm_get_lang('system', 'edit'),
'label_delete' => psm_get_lang('system', 'delete'), 'label_delete' => psm_get_lang('system', 'delete'),
'label_view' => psm_get_lang('system', 'view'),
'label_yes' => psm_get_lang('system', 'yes'), 'label_yes' => psm_get_lang('system', 'yes'),
'label_no' => psm_get_lang('system', 'no'), 'label_no' => psm_get_lang('system', 'no'),
'label_add_new' => psm_get_lang('system', 'add_new'), 'label_add_new' => psm_get_lang('system', 'add_new'),
'label_advanced' => psm_get_lang('system', 'advanced'), 'label_seconds' => psm_get_lang('config', 'seconds'),
'label_online' => psm_get_lang('system', 'online'), 'label_online' => psm_get_lang('servers', 'online'),
'label_offline' => psm_get_lang('system', 'offline'), 'label_offline' => psm_get_lang('servers', 'offline'),
'label_ok' => psm_get_lang('system', 'ok'), 'label_ok' => psm_get_lang('system', 'ok'),
'label_bad' => psm_get_lang('system', 'bad'), 'label_bad' => psm_get_lang('system', 'bad'),
'default_value_timeout' => PSM_CURL_TIMEOUT,
'label_settings' => psm_get_lang('system', 'settings'),
'label_output' => psm_get_lang('servers', 'output'),
'label_search' => psm_get_lang('system', 'search'),
); );
} }

View File

@ -53,9 +53,12 @@ class StatusController extends AbstractServerController {
// add header accessories // add header accessories
$layout = $this->getUser()->getUserPref('status_layout', 0); $layout = $this->getUser()->getUserPref('status_layout', 0);
$layout_data = array( $layout_data = array(
'label_none' => psm_get_lang('system', 'none'),
'label_last_check' => psm_get_lang('servers', 'last_check'), 'label_last_check' => psm_get_lang('servers', 'last_check'),
'label_last_online' => psm_get_lang('servers', 'last_online'), 'label_last_online' => psm_get_lang('servers', 'last_online'),
'label_last_offline' => psm_get_lang('servers', 'last_offline'), 'label_last_offline' => psm_get_lang('servers', 'last_offline'),
'label_online' => psm_get_lang('servers', 'online'),
'label_offline' => psm_get_lang('servers', 'offline'),
'label_rtime' => psm_get_lang('servers', 'latency'), 'label_rtime' => psm_get_lang('servers', 'latency'),
'block_layout_active' => ($layout == 0) ? 'active' : '', 'block_layout_active' => ($layout == 0) ? 'active' : '',
'list_layout_active' => ($layout != 0) ? 'active' : '', 'list_layout_active' => ($layout != 0) ? 'active' : '',

View File

@ -35,7 +35,7 @@ class ProfileController extends AbstractController {
* Editable fields for the profile * Editable fields for the profile
* @var array $profile_fields * @var array $profile_fields
*/ */
protected $profile_fields = array('name', 'user_name', 'mobile', 'pushover_key', 'pushover_device', 'telegram_id', 'email'); protected $profile_fields = array('name', 'user_name', 'email', 'mobile', 'pushover_key', 'pushover_device', 'telegram_id');
function __construct(Database $db, \Twig_Environment $twig) { function __construct(Database $db, \Twig_Environment $twig) {
parent::__construct($db, $twig); parent::__construct($db, $twig);
@ -54,13 +54,14 @@ class ProfileController extends AbstractController {
$this->twig->addGlobal('subtitle', psm_get_lang('users', 'profile')); $this->twig->addGlobal('subtitle', psm_get_lang('users', 'profile'));
$user = $this->getUser()->getUser(null, true); $user = $this->getUser()->getUser(null, true);
$modal = new \psm\Util\Module\Modal($this->twig, 'activate'.ucfirst('telegram'), \psm\Util\Module\Modal::MODAL_TYPE_OKCANCEL); $modal = new \psm\Util\Module\Modal($this->twig, 'activate' . ucfirst('telegram'), \psm\Util\Module\Modal::MODAL_TYPE_OKCANCEL);
$this->addModal($modal); $this->addModal($modal);
$modal->setTitle(psm_get_lang('users', 'activate_telegram')); $modal->setTitle(psm_get_lang('users', 'activate_telegram'));
$modal->setMessage(psm_get_lang('users', 'activate_telegram_description')); $modal->setMessage(psm_get_lang('users', 'activate_telegram_description'));
$modal->setOKButtonLabel(psm_get_lang('system', 'activate')); $modal->setOKButtonLabel(psm_get_lang('system', 'activate'));
$tpl_data = array( $tpl_data = array(
'label_general' => psm_get_lang('config', 'general'),
'label_name' => psm_get_lang('users', 'name'), 'label_name' => psm_get_lang('users', 'name'),
'label_user_name' => psm_get_lang('users', 'user_name'), 'label_user_name' => psm_get_lang('users', 'user_name'),
'label_password' => psm_get_lang('users', 'password'), 'label_password' => psm_get_lang('users', 'password'),
@ -85,7 +86,7 @@ class ProfileController extends AbstractController {
'mod' => 'user_profile', 'mod' => 'user_profile',
'action' => 'save', 'action' => 'save',
)), )),
'level' => psm_get_lang('users', 'level_'.$user->level), 'level' => psm_get_lang('users', 'level_' . $user->level),
'placeholder_password' => psm_get_lang('users', 'password_leave_blank'), 'placeholder_password' => psm_get_lang('users', 'password_leave_blank'),
); );
foreach ($this->profile_fields as $field) { foreach ($this->profile_fields as $field) {
@ -127,7 +128,7 @@ class ProfileController extends AbstractController {
$validator->password($clean['password'], $clean['password_repeat']); $validator->password($clean['password'], $clean['password_repeat']);
} }
} catch (\InvalidArgumentException $e) { } catch (\InvalidArgumentException $e) {
$this->addMessage(psm_get_lang('users', 'error_'.$e->getMessage()), 'error'); $this->addMessage(psm_get_lang('users', 'error_' . $e->getMessage()), 'error');
return $this->executeIndex(); return $this->executeIndex();
} }
if (!empty($clean['password'])) { if (!empty($clean['password'])) {
@ -136,7 +137,7 @@ class ProfileController extends AbstractController {
unset($clean['password']); unset($clean['password']);
unset($clean['password_repeat']); unset($clean['password_repeat']);
$this->db->save(PSM_DB_PREFIX.'users', $clean, array('user_id' => $this->getUser()->getUserId())); $this->db->save(PSM_DB_PREFIX . 'users', $clean, array('user_id' => $this->getUser()->getUserId()));
$this->container->get('event')->dispatch( $this->container->get('event')->dispatch(
\psm\Module\User\UserEvents::USER_EDIT, \psm\Module\User\UserEvents::USER_EDIT,
new \psm\Module\User\Event\UserEvent($this->getUser()->getUserId()) new \psm\Module\User\Event\UserEvent($this->getUser()->getUserId())
@ -161,22 +162,24 @@ class ProfileController extends AbstractController {
if (empty($apiToken)) { if (empty($apiToken)) {
$this->addMessage(psm_get_lang('config', 'telegram_error_notoken'), 'error'); $this->addMessage(psm_get_lang('config', 'telegram_error_notoken'), 'error');
} else { return;
$result = $telegram->getBotUsername();
if (isset($result['ok']) && $result['ok'] != false) {
$url = "https://t.me/".$result["result"]["username"];
$this->addMessage(sprintf(psm_get_lang('users', 'telegram_bot_username_found'), $url), 'success');
} else {
if (isset($result['error_code']) && $result['error_code'] == 401) {
$error = psm_get_lang('users', 'telegram_bot_username_error_token');
} elseif (isset($result['description'])) {
$error = $result['description'];
} else {
$error = 'Unknown';
}
$this->addMessage(sprintf(psm_get_lang('users', 'telegram_bot_error'), $error), 'error');
}
} }
$result = $telegram->getBotUsername();
if (isset($result['ok']) && $result['ok'] != false) {
$url = "https://t.me/" . $result["result"]["username"];
$this->addMessage(sprintf(psm_get_lang('users', 'telegram_bot_username_found'), $url), 'success');
return;
}
if (isset($result['error_code']) && $result['error_code'] == 401) {
$error = psm_get_lang('users', 'telegram_bot_username_error_token');
} elseif (isset($result['description'])) {
$error = $result['description'];
} else {
$error = 'Unknown';
}
$this->addMessage(sprintf(psm_get_lang('users', 'telegram_bot_error'), $error), 'error');
} }
} }

View File

@ -34,7 +34,7 @@ use psm\Service\Database;
* servers to users. * servers to users.
*/ */
class UserController extends AbstractController { class UserController extends AbstractController {
public $servers; public $servers = array();
function __construct(Database $db, \Twig_Environment $twig) { function __construct(Database $db, \Twig_Environment $twig) {
parent::__construct($db, $twig); parent::__construct($db, $twig);
@ -71,7 +71,9 @@ class UserController extends AbstractController {
'add_new', 'add_new',
psm_get_lang('system', 'add_new'), psm_get_lang('system', 'add_new'),
psm_build_url(array('mod' => 'user', 'action' => 'edit')), psm_build_url(array('mod' => 'user', 'action' => 'edit')),
'plus icon-white', 'success' 'plus icon-white',
'success',
psm_get_lang('system', 'add_new')
); );
$modal = new \psm\Util\Module\Modal($this->twig, 'delete', \psm\Util\Module\Modal::MODAL_TYPE_DANGER); $modal = new \psm\Util\Module\Modal($this->twig, 'delete', \psm\Util\Module\Modal::MODAL_TYPE_DANGER);
@ -342,12 +344,12 @@ class UserController extends AbstractController {
'label_telegram_id_description' => psm_get_lang('users', 'telegram_chat_id_description'), 'label_telegram_id_description' => psm_get_lang('users', 'telegram_chat_id_description'),
'label_email' => psm_get_lang('users', 'email'), 'label_email' => psm_get_lang('users', 'email'),
'label_servers' => psm_get_lang('menu', 'server'), 'label_servers' => psm_get_lang('menu', 'server'),
'label_action' => psm_get_lang('system', 'action'),
'label_save' => psm_get_lang('system', 'save'), 'label_save' => psm_get_lang('system', 'save'),
'label_go_back' => psm_get_lang('system', 'go_back'), 'label_go_back' => psm_get_lang('system', 'go_back'),
'label_edit' => psm_get_lang('system', 'edit'), 'label_edit' => psm_get_lang('system', 'edit'),
'label_delete' => psm_get_lang('system', 'delete'), 'label_delete' => psm_get_lang('system', 'delete'),
'label_add_new' => psm_get_lang('system', 'add_new'), 'label_add_new' => psm_get_lang('system', 'add_new'),
'label_search' => psm_get_lang('system', 'search'),
); );
} }

View File

@ -230,6 +230,7 @@ class Router {
); );
$twig->addGlobal('direction_current', psm_get_lang('locale_dir')); $twig->addGlobal('direction_current', psm_get_lang('locale_dir'));
$twig->addGlobal('language_current', psm_get_lang('locale_tag')); $twig->addGlobal('language_current', psm_get_lang('locale_tag'));
$twig->addGlobal('language', psm_get_lang('locale')[1]);
return $twig; return $twig;
} }

View File

@ -111,20 +111,19 @@ class Sidebar implements SidebarInterface {
* @param boolean $url_is_onclick if you want onclick rather than url, change this to true * @param boolean $url_is_onclick if you want onclick rather than url, change this to true
* @return \psm\Util\Module\Sidebar * @return \psm\Util\Module\Sidebar
*/ */
public function addButton($id, $label, $url, $icon = null, $btn_class = null, $url_is_onclick = false) { public function addButton($id, $label, $url, $icon = null, $btn_class = 'link', $title = '', $modal_id = null) {
if (!isset($this->items['button'])) { if (!isset($this->items['button'])) {
$this->items['button'] = array(); $this->items['button'] = array();
} }
if (!$url_is_onclick) {
$url = "psm_goTo('".$url."');";
}
$this->items['button'][$id] = array( $this->items['button'][$id] = array(
'id' => $id, 'id' => $id,
'label' => $label, 'label' => $label,
'onclick' => str_replace('"', '\"', $url), 'url' => str_replace('"', '\"', $url),
'icon' => $icon, 'icon' => $icon,
'btn_class'=> $btn_class, 'btn_class'=> $btn_class,
'title'=> $title,
'modal_id'=> $modal_id
); );
return $this; return $this;
} }

View File

@ -82,21 +82,14 @@ class HistoryGraph {
continue; continue;
} }
$graph['info'][] = array( $graph['info'][] = array(
'label' => psm_get_lang('servers', $field), 'label' => psm_get_lang('servers', $field),
'value' => sprintf($format, $graph[$field]), 'value' => sprintf($format, $graph[$field]),
); );
} }
} }
$tpl_data = array( $tpl_data = array(
'graphs' => $graphs, 'graphs' => $graphs,
'label_server' => psm_get_lang('servers', 'server'),
'day_format' => psm_get_lang('servers', 'chart_day_format'),
'long_date_format' => psm_get_lang('servers', 'chart_long_date_format'),
'short_date_format' => psm_get_lang('servers', 'chart_short_date_format'),
'short_time_format' => psm_get_lang('servers', 'chart_short_time_format'),
); );
return $this->twig->render('module/server/history.tpl.html', $tpl_data); return $this->twig->render('module/server/history.tpl.html', $tpl_data);
} }
@ -108,24 +101,27 @@ class HistoryGraph {
* @return array * @return array
*/ */
public function generateGraphUptime($server_id, $start_time, $end_time) { public function generateGraphUptime($server_id, $start_time, $end_time) {
$lines = array( $lines = array(
'latency' => array(), 'latency' => array(),
); );
$cb_if_up = function($uptime_record) {
return ($uptime_record['status'] == 1); $hour = new \DateTime('-1 hour');
}; $day = new \DateTime('-1 day');
$week = new \DateTime('-1 week');
$records = $this->getRecords('uptime', $server_id, $start_time, $end_time); $records = $this->getRecords('uptime', $server_id, $start_time, $end_time);
$data = $this->generateGraphLines($records, $lines, $cb_if_up, 'latency', $start_time, $end_time, true); $data = $this->generateGraphLines($records, $lines, 'latency', $hour, $end_time, true);
$data['title'] = psm_get_lang('servers', 'chart_last_week'); $data['title'] = psm_get_lang('servers', 'chart_last_week');
$data['plotmode'] = 'hour'; $data['id'] = 'history_short';
$data['unit'] = 'minute';
$data['buttons'] = array(); $data['buttons'] = array();
$data['buttons'][] = array('mode' => 'hour', 'label' => psm_get_lang('servers', 'hour'), 'class_active' => 'btn-info'); $data['button_name'] = 'timeframe_short';
$data['buttons'][] = array('mode' => 'day', 'label' => psm_get_lang('servers', 'day')); $data['buttons'][] = array('unit' => 'minute', 'time' => $hour->getTimestamp()*1000, 'label' => psm_get_lang('servers', 'hour'), 'class_active' => 'active');
$data['buttons'][] = array('mode' => 'week', 'label' => psm_get_lang('servers', 'week')); $data['buttons'][] = array('unit' => 'hour', 'time' => $day->getTimestamp()*1000, 'label' => psm_get_lang('servers', 'day'));
// make sure to add chart id after buttons so its added to those tmeplates as well $data['buttons'][] = array('unit' => 'day', 'time' => $week->getTimestamp()*1000, 'label' => psm_get_lang('servers', 'week'));
$data['chart_id'] = $server_id.'_uptime';
return $data; return $data;
} }
@ -139,28 +135,27 @@ class HistoryGraph {
*/ */
public function generateGraphHistory($server_id, $start_time, $end_time) { public function generateGraphHistory($server_id, $start_time, $end_time) {
$lines = array( $lines = array(
'latency_min' => array(),
'latency_avg' => array(), 'latency_avg' => array(),
'latency_max' => array(), 'latency_max' => array(),
'latency_min' => array(),
); );
$server = $this->db->selectRow(PSM_DB_PREFIX.'servers', array('server_id' => $server_id), array('warning_threshold'));
$cb_if_up = function($uptime_record) use($server) { $week = new \DateTime('-2 week 0:0:0');
return ($uptime_record['checks_failed'] < $server['warning_threshold']); $month = new \DateTime('-1 month -1 week 0:0:0');
}; $year = new \DateTime('-1 year -1 week 0:0:0');
$records = $this->getRecords('history', $server_id, $start_time, $end_time);
$records = $this->getRecords('history', $server_id, $month, $end_time);
// dont add uptime for now because we have no way to calculate accurate uptimes for archived records // dont add uptime for now because we have no way to calculate accurate uptimes for archived records
$data = $this->generateGraphLines($records, $lines, $cb_if_up, 'latency_avg', $start_time, $end_time, false); $data = $this->generateGraphLines($records, $lines, 'latency_avg', $start_time, $end_time, false);
$data['title'] = psm_get_lang('servers', 'chart_history'); $data['title'] = psm_get_lang('servers', 'chart_history');
$data['plotmode'] = 'month'; $data['id'] = 'history_long';
$data['unit'] = 'week';
$data['buttons'] = array(); $data['buttons'] = array();
$data['buttons'][] = array('mode' => 'week2', 'label' => psm_get_lang('servers', 'week')); $data['button_name'] = 'timeframe_long';
$data['buttons'][] = array('mode' => 'month', 'label' => psm_get_lang('servers', 'month'), 'class_active' => 'btn-info'); $data['buttons'][] = array('unit' => 'day', 'time' => $week->getTimestamp()*1000, 'label' => psm_get_lang('servers', 'week'));
$data['buttons'][] = array('mode' => 'year', 'label' => psm_get_lang('servers', 'year')); $data['buttons'][] = array('unit' => 'week', 'time' => $month->getTimestamp()*1000, 'label' => psm_get_lang('servers', 'month'), 'class_active' => 'active');
// make sure to add chart id after buttons so its added to those tmeplates as well $data['buttons'][] = array('unit' => 'month', 'time' => $year->getTimestamp()*1000, 'label' => psm_get_lang('servers', 'year'));
$data['chart_id'] = $server_id.'_history';
return $data; return $data;
} }
@ -201,73 +196,99 @@ class HistoryGraph {
* @param boolean $add_uptime add uptime calculation? * @param boolean $add_uptime add uptime calculation?
* @return array * @return array
*/ */
protected function generateGraphLines($records, $lines, $cb_if_up, $latency_avg_key, $start_time, $end_time, $add_uptime = false) { protected function generateGraphLines($records, $lines, $latency_avg_key, $start_time, $end_time, $add_uptime = false) {
$now = new \DateTime();
$data = array(); $data = array();
// PLEASE NOTE: all times are in microseconds! because of javascript. // PLEASE NOTE: all times are in microseconds! because of javascript.
$last_date = 0;
$latency_avg = 0; $latency_avg = 0;
$series = array();
// number of microseconds of downtime
$time_down = 0;
$down = array(); $downtime = array();
$prev_down = false;
$prev_up = array();
$prev_up['status'] = false;
$prev_up['value'] = 0.0;
$line_type = 'unknown';
// Create the list of points and server down zones // Create the list of points and server down zones
foreach ($records as $uptime) { foreach ($records as $record) {
$time = strtotime($uptime['date']) * 1000; $time = strtotime($record['date']);
// use the first line to calculate average latency // use the first line to calculate average latency
$latency_avg += (float) $uptime[$latency_avg_key]; $latency_avg += (float) $record[$latency_avg_key];
if ($cb_if_up($uptime)) {
// The server is up foreach ($lines as $key => $value) {
foreach ($lines as $key => $value) { // add the value for each of the different lines
// add the value for each of the different lines if (isset($record[$key])) {
if (isset($uptime[$key])) { if (isset($record['status'])){
$lines[$key][] = '['.number_format($time, 0, '', '').','.round((float) $uptime[$key], 4).']'; $line_type = 'short';
// down
if ($record['status'] == 0){
$lines['online'][] = $prev_up['status']
// Previous datapoint was online
? '{ x: '.($time*1000).', y: '.$prev_up['value'].'}'
// Previous datapoint was offline
: '{ x: '.($time*1000).', y: null}';
$lines['offline'][] = '{ x: '.($time*1000).', y:0.1}';
$prev_up['status'] = false;
}
// up
else {
$lines['offline'][] = $prev_up['status']
// Previous datapoint was online
? '{ x: '.($time*1000).', y:null}'
// Previous datapoint was offline
: '{ x: '.($time*1000).', y:0.1}';
$lines['online'][] = '{ x: '.($time*1000).', y: '.round((float) $record[$key], 4).'}';
$prev_up['status'] = true;
$prev_up['value'] = round((float) $record[$key], 4);
}
}
else {
$lines[$key][] = '{ x: \''.$record['date'].'\', y: '.$record[$key].'}';
} }
} }
if ($last_date) {
// Was down before.
// Record the first and last date as a string in the down array
$down[] = '['.number_format($last_date, 0, '', '').','.number_format($time, 0, '', '').']';
// add the number of microseconds of downtime to counter for %
$time_down += ($time - $last_date);
$last_date = 0;
}
} else {
// The server is down
if (!$last_date) {
$last_date = $time;
}
} }
}
if (!$prev_up['status'] && $line_type == 'short') {
// Was down before.
// Record the first and last date as a string in the down array
$lines['offline'][] = '{ x: '.($now->getTimestamp()*1000).', y:0.1}';
// TODO
// add the number of microseconds of downtime to counter for %
//$time_down += ($time - $now->getTimestamp());
} }
$lines_merged = array();
$lines_merged = array();
foreach ($lines as $line_key => $line_value) { foreach ($lines as $line_key => $line_value) {
if (empty($line_value)) { if (empty($line_value)) {
continue; continue;
} }
$lines_merged[] = '['.implode(',', $line_value).']'; $lines_merged[$line_key]['value'] = implode(', ', $line_value);
$series[] = "{label: '".psm_get_lang('servers', $line_key)."'}"; $lines_merged[$line_key]['name'] = psm_get_lang('servers', $line_key);
} }
if ($last_date) {
// TODO
/*if (isset($last_date)) {
// if last_date is still set, the last check was "down" and we are still in down mode // if last_date is still set, the last check was "down" and we are still in down mode
$down[] = '['.number_format($last_date, 0, '', '').',0]'; $downtime[] = '{ x: '.($last_date*1000).', y:0.0}';
$time_down += (($end_time->getTimestamp() * 1000) - $last_date);
$time_down += ($end_time->getTimestamp() - $last_date);
} }
if ($add_uptime) { if ($add_uptime) {
$data['uptime'] = 100 - (($time_down / ($end_time->getTimestamp() - $start_time->getTimestamp())) / 10); $data['uptime'] = 100 - (($time_down / ($end_time->getTimestamp() - $start_time->getTimestamp())) / 10);
} }*/
$data['latency_avg'] = count($records) > 0 ? ($latency_avg / count($records)) : 0; $data['latency_avg'] = count($records) > 0 ? ($latency_avg / count($records)) : 0;
$data['server_lines'] = sizeof($lines_merged) ? '['.implode(',', $lines_merged).']' : ''; $data['lines'] = sizeof($lines_merged) ? $lines_merged : '';
$data['server_down'] = sizeof($down) ? '['.implode(',', $down).']' : ''; $data['end_timestamp'] = number_format($end_time->getTimestamp(), 0, '', '')*1000;
$data['series'] = sizeof($series) ? '['.implode(',', $series).']' : ''; $data['start_timestamp'] = number_format($start_time->getTimestamp(), 0, '', '')*1000;
$data['end_timestamp'] = number_format($end_time->getTimestamp() * 1000, 0, '', '');
return $data; return $data;
} }
} }

View File

@ -334,7 +334,6 @@ class StatusNotifier {
* @return string|null * @return string|null
*/ */
protected function createCombiSubject($method, $user_id){ protected function createCombiSubject($method, $user_id){
//die(var_dump($GLOBALS['sm_lang_default']['notifications']['combi_'.$method.'_subject']));
$vars = array('DOWN' => $this->combiNotification['count'][$user_id]['off'], 'UP' => $this->combiNotification['count'][$user_id]['on']); $vars = array('DOWN' => $this->combiNotification['count'][$user_id]['off'], 'UP' => $this->combiNotification['count'][$user_id]['on']);
$translation = isset($GLOBALS['sm_lang_default']['notifications']['combi_'.$method.'_subject']) ? $translation = isset($GLOBALS['sm_lang_default']['notifications']['combi_'.$method.'_subject']) ?
psm_parse_msg(null, $method.'_subject', $vars, true) : psm_parse_msg(null, $method.'_subject', $vars, true) :

View File

@ -1,79 +1,84 @@
{% block header %} <!doctype html>
<!DOCTYPE html>
<html lang="{{ language_current }}" dir="{{ direction_current }}" class="{{ direction_current }}"> <html lang="{{ language_current }}" dir="{{ direction_current }}" class="{{ direction_current }}">
<head>
<meta charset="utf-8"> <head>
<title>{{ title }}</title> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, minimum-scale=1"> <title>{{ title }}</title>
<meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="noindex" /> <meta name="description" content="PHP Server Monitor - {{ subtitle }}">
<meta name="theme-color" content="#424242"> <meta name="robots" content="noindex" />
<meta name="theme-color" content="#424242">
<link rel="icon" type="image/x-icon" href="favicon.ico" /> <link rel="icon" type="image/x-icon" href="favicon.ico" />
<link rel="icon" type="image/png" href="favicon.png" /> <link rel="icon" type="image/png" href="favicon.png" />
<link rel="apple-touch-icon" href="favicon.png" /> <link rel="apple-touch-icon" href="favicon.png" />
<!-- Le styles --> <link href="static/css/bootstrap.min.css" rel="stylesheet">
<link href="static/plugin/twitter-bootstrap/css/bootstrap.min.css" rel="stylesheet"> <link href="static/plugin/bootstrap-select/dist/css/bootstrap-select.min.css" rel="stylesheet">
<link href="static/plugin/twitter-bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet"> <link href="static/css/style.min.css" rel="stylesheet">
<link href="static/plugin/bootstrap-multiselect/bootstrap-multiselect.min.css" rel="stylesheet"> <!--[if lt IE 9]>
<link href="static/css/style.css" rel="stylesheet"> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--> <![endif]-->
<script type="text/javascript" src="static/plugin/jquery-1.8.3.min.js"></script> </head>
<script type="text/javascript" src="static/plugin/twitter-bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript" src="static/plugin/bootstrap-multiselect/bootstrap-multiselect.min.js"></script>
<script type="text/javascript" src="static/js/scripts.js"></script>
</head>
{% endblock %}
<body data-spy="scroll" data-target=".subnav" data-offset="50" class="{{ body_class }}">
<!-- navbar -->
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="index.php">{{ title }}</a>
{{ html_menu|raw }}
</div>
</div>
</div>
<!-- /navbar -->
<body>
<nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href="index.php">{{ title }}</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar" aria-controls="navbar"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbar">
{{ html_menu|raw }}
</div>
</nav>
{{ html_modal|raw }} {{ html_modal|raw }}
<!-- container --> <main role="main" class="container">
<div id="main-container"> <noscript>
<div class="page-header"> <div class="alert alert-danger" role="alert">
<div class="header-label"><h1>{{ subtitle }}</h1></div> <b>Javascript is disabled!</b> For PHP Server Monitor to work properly enabling javascript is required!
<div class="header-accessories">{{ header_accessories|raw }}</div>
</div>
<div id="main-content">
{{ html_sidebar|raw }}
<div id="page-container">
<div id="flashmessage" class="hide">
{% for msg in messages %}
<div class="alert alert-{{ msg.shortcode }}">
<p class="pull-left span1"><i class="icon-{{ msg.icon }}"></i></p>
<p>{{ msg.message|raw }}</p>
</div>
{% endfor %}
</div>
{{ html_content|raw }}
</div> </div>
</noscript>
{% if not user_level %}<h1>{{ subtitle }}</h1>{% endif %}
<div class="container">{{ header_accessories|raw }}</div>
{% for msg in messages %}
<div class="alert alert-{{ msg.class }}" role="alert">
<i class="fas fa-{{ msg.icon }}"></i> {{ msg.message|raw }}
</div> </div>
{% if add_footer %} {% endfor %}
{% block footer %} <div class="container">
<footer class="footer"> <div class="row">{{ html_sidebar|raw }}</div>
<p class="pull-right"><a href="#">{{ label_back_to_top }}</a></p> <div class="row">{{ html_content|raw }}</div>
<p class="powered"><small>Powered by <a href="http://www.phpservermonitor.org/" target="_blank">PHP Server Monitor {{ version }}</a>.<br/>{{ update_available }}</small></p> </div>
</footer> </main>
{% endblock %} {% if add_footer %}
{% endif %} {% block footer %}
</div> <footer class="footer">
<!-- /container --> <div class="container">
</body> <span class="text-muted">
</html> Powered by
<a href="http://www.phpservermonitor.org/" target="_blank" rel="noopener">
PHP Server Monitor {{ version }}.
</a>
{{ update_available }} <a href="#" class="float-right">{{ label_back_to_top }}</a>
</span>
</div>
</footer>
{% endblock %}
{% endif %}
<script src="static/plugin/jquery/jquery-3.3.1.min.js"></script>
<script src="static/plugin/popper.js/popper.min.js"></script>
<script src="static/plugin/bootstrap/js/dist/index.js"></script>
<script src="static/plugin/bootstrap/js/dist/util.js"></script>
<script src="static/plugin/bootstrap/js/dist/tab.js"></script>
<script src="static/plugin/bootstrap/js/dist/dropdown.js"></script>
<script src="static/plugin/bootstrap/js/dist/collapse.js"></script>
<script src="static/plugin/bootstrap/js/dist/button.js"></script>
{% if html_modal|raw %}<script src="static/plugin/bootstrap/js/dist/modal.js"></script>{% endif %}
<script type="text/javascript" src="static/plugin/bootstrap-select/dist/js/bootstrap-select.min.js"></script>
<script type="text/javascript" src="static/plugin/bootstrap-select/dist/js/i18n/defaults-{{ language }}.min.js"></script>
<script defer src="static/plugin/font-awesome/js/solid.min.js"></script>
<script defer src="static/plugin/font-awesome/js/fontawesome.min.js" data-auto-replace-svg="nest"></script>
<script type="text/javascript" src="static/js/scripts.js"></script>
</body>
</html>

View File

@ -1,3 +1,114 @@
{% macro csrf_input() %} {% macro input_csrf() %}
<input type="hidden" name="csrf" value="{{ csrf_token(csrf_key|default('')) }}" /> <input type="hidden" name="csrf" value="{{ csrf_token(csrf_key|default('')) }}" />
{% endmacro %} {% endmacro input_csrf %}
{% macro input_checkbox(id, name, label, checked, help, help_label) %}
<div class="form-group">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="{{ id }}" name="{{ name }}"
{% if help %}aria-describedby="{{ help }}"{% endif %} {{ checked }}>
<label class="custom-control-label" for="{{ id }}">{{ label }}</label>
{% if help %}
<small id="{{ help }}" class="form-text text-muted">{{
help_label|striptags('<a>,<b>,<br>')|raw }}</small>
{% endif %}
</div>
</div>
{% endmacro input_checkbox %}
{% macro input_select(id, name, label, options, current, help, help_label) %}
<div class="form-group">
<label for="{{ id }}">{{ label }}</label>
<select id="{{ id }}" name="{{ name }}" class="custom-select" {% if help %}aria-describedby="{{ help }}"{% endif %}>
{% for option in options %}
<option value="{{ option.value }}" {% if option.value == current %} selected="selected" {% endif %}>
{{ option.label }}
</option>
{% endfor %}
</select>
{% if help %}
<small id="{{ help }}" class="form-text text-muted">{{
help_label|striptags('<a>,<b>,<br>')|raw }}</small>
{% endif %}
</div>
{% endmacro input_select %}
{% macro input_select_multiple(id, name, label, placeholder, options, select_message) %}
<div class="form-group">
<label for="{{ id }}">{{ label }}</label>
<select class="selectpicker" id="{{ id }}" name="{{ name }}" data-select-on-tab="true" data-live-search="true"
data-live-search-placeholder="{{ placeholder }}" data-selected-text-format="count > 3" data-actions-box="true"
data-none-selected-text="{{ select_message }}" multiple>
{% for option in options %}
<option value="{{ option.id }}" {{ option.edit_selected|raw }}> {{ option.label }}</option>
{% endfor %}
</select>
</div>
{% endmacro input_select_multiple %}
{% macro input_select_monitoring(id, name, label, current, label_yes, label_no, warning, warning_label) %}
<div class="form-group form-row">
{% if warning %}
<div class="alert alert-warning col-md-12" role="alert">
<i class="fas fa-exclamation-triangle" title="Warning"></i> {{ warning_label }}
</div>
{% endif %}
<label for="{{ id }}" class="col-form-label col-md-3">{{ label }}</label>
<div class="col-md-9 p-0">
<select id="{{ id }}" name="{{ name }}" class="custom-select">
<option value="yes" {% if current == "yes" %} selected="selected" {% endif %}>{{ label_yes }}</option>
<option value="no" {% if current == "no" %} selected="selected" {% endif %}>{{ label_no }}</option>
</select>
</div>
</div>
{% endmacro %}
{% macro input_field(type, id, class, name, label, value, placeholder, max, help, help_label, side_label, readonly, required, autofocus, autocomplete, disabled) %}
<div class="form-group {% if class %}{{ class }}{% endif %}">
<label for="{{ id }}">{{ label }}</label>
{% if side_label and help %}
<div class="input-group">
{% endif %}
<input type="{{ type }}" class="form-control" id="{{ id }}"
{% if name %}name="{{ name }}"{% endif %}
{% if placeholder != null %}placeholder="{{ placeholder }}"{% endif %}
{% if value != null %}value="{{ value }}"{% endif %}
{% if max != null %}maxlength="{{ max }}"{% endif %}
{% if help %}aria-describedby="{{ help }}"{% endif %}
{% if readonly %}readonly onfocus="this.removeAttribute('readonly');"{% endif %}
{% if required %}required{% endif %}
{% if disabled %}disabled{% endif %}
{% if autocomplete %}autocomplete="{{ autocomplete }}"{% endif %}
{% if autofocus %}autofocus{% endif %}>
{% if help %}
{% if help_label %}
<small id="{{ help }}" class="form-text text-muted">{{ help_label|striptags('<a>,<b>,<br>')|raw }}</small>
{% endif %}
{% if side_label %}
<div class="input-group-prepend">
<span class="input-group-text" id="{{ help }}">{{ side_label }}</span>
</div>
</div>
{% endif %}
{% endif %}
</div>
{% endmacro input_field %}
{% macro input_hidden(name, value) %}
<input type="hidden" name="{{ name }}" value="{{ value }}">
{% endmacro input_hidden %}
{% macro button_test(data_modal_id, label) %}
<button class="btn btn-primary show-modal" data-toggle="modal" data-modal-id="{{ data_modal_id }}">{{ label }}</button>
{% endmacro button_test %}
{% macro button_save(name, label) %}
<button class="btn btn-success" type="submit" {% if name %}name="{{ name }}"{% endif %}>{{ label }}</button>
{% endmacro button_save %}
{% macro table_search(label) %}
<div class="searchbar mb-3">
<input class="search_input" type="search" name="" maxlength="255" placeholder="{{ label }}..." aria-label="{{ label }}">
<a href="#" class="search_icon"><i class="fas fa-search"></i><p>0</p></a>
</div>
{% endmacro table_search %}

View File

@ -1,22 +1,24 @@
<div class="nav-collapse"> <ul class="navbar-nav mr-auto">
<ul class="nav"> {% for item in menu %}
{% for item in menu %} <li class="nav-item {{ item.active }}">
<li class="{{ item.active }}"><a href="{{ item.url|raw }}">{{ item.label }}</a></li> <a class="nav-link" href="{{ item.url|raw }}">{{ item.label }}{% if item.active %}<span class="sr-only"> ({{ label_current }})</span>{% endif %}</a>
{% endfor %}
<li id="nav_option_help">
<a href="http://www.phpservermonitor.org/support" target="_blank" rel="noopener">{{ label_help }}</a>
</li>
</ul>
<ul class="nav pull-right">
<li class="dropdown visible-desktop">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ label_usermenu }} <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="{{ url_profile|raw }}"><i class="icon-cog"></i>&nbsp;{{ label_profile }}</a></li>
<li><a href="{{ url_logout|raw }}"><i class="icon-off"></i>&nbsp;{{ label_logout }}</a></li>
</ul>
</li> </li>
<li class="hidden-desktop divider"></li> {% endfor %}
<li class="hidden-desktop"><a href="{{ url_profile|raw }}">{{ label_profile }}</a></li> </ul>
<li class="hidden-desktop"><a href="{{ url_logout|raw }}">{{ label_logout }}</a></li> <ul class="navbar-nav">
</ul>
</div> <li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ label_usermenu }}
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ url_profile|raw }}">{{ label_profile }} </a>
<a class="dropdown-item" href="{{ url_logout|raw }}">{{ label_logout }} </a>
</div>
</li>
<!--
<li class="nav-item">
<i class="text-white fas fa-universal-access fa-lg nav-link"></i>
</li>
-->
</ul>

View File

@ -1,326 +1,157 @@
{% import 'main/macros.tpl.html' as macro %} {% import 'main/macros.tpl.html' as macro %}
<form class="form-horizontal" name="edit_config" action="index.php?mod=config&amp;action=save" id="edit_config" method="post"> <form name="edit_config" class="col-md-6 pl-0 pr-0" action="index.php?mod=config&action=save" id="edit_config" method="post">
<ul class="nav nav-tabs"> <!-- Nav tabs -->
<li class="{{ general_active }}"><a href="#config-general" data-toggle="tab">{{ label_general }}</a></li> <ul class="nav nav-tabs" id="config_tab" role="tablist">
<li class="{{ email_active }}"><a href="#config-email" data-toggle="tab">{{ label_tab_email }}</a></li> <li class="nav-item">
<li class="{{ sms_active }}"><a href="#config-sms" data-toggle="tab">{{ label_tab_sms }}</a></li> <a class="nav-link {{ general_active }}" id="config-general-tab" data-toggle="tab" href="#config-general"
<li class="{{ pushover_active }}"><a href="#config-pushover" data-toggle="tab">{{ label_tab_pushover }}</a></li> role="tab" aria-controls="config-general" aria-selected="{% if general_active %}true{% else %}false{% endif %}">{{
<li class="{{ telegram_active }}"><a href="#config-telegram" data-toggle="tab">{{ label_tab_telegram }}</a></li> label_general }}</a>
</li>
<li class="nav-item">
<a class="nav-link {{ email_active }}" id="config-email-tab" data-toggle="tab" href="#config-email" role="tab"
aria-controls="config-email" aria-selected="{% if email_active %}true{% else %}false{% endif %}">{{
label_tab_email }}</a>
</li>
<li class="nav-item">
<a class="nav-link {{ sms_active }}" id="config-sms-tab" data-toggle="tab" href="#config-sms" role="tab"
aria-controls="config-sms" aria-selected="{% if sms_active %}true{% else %}false{% endif %}">{{
label_tab_sms }}</a>
</li>
<li class="nav-item">
<a class="nav-link {{ pushover_active }}" id="config-pushover-tab" data-toggle="tab" href="#config-pushover"
role="tab" aria-controls="config-pushover" aria-selected="{% if pushover_active %}true{% else %}false{% endif %}">{{
label_tab_pushover }}</a>
</li>
<li class="nav-item">
<a class="nav-link {{ telegram_active }}" id="config-telegram-tab" data-toggle="tab" href="#config-telegram"
role="tab" aria-controls="config-telegram" aria-selected="{% if telegram_active %}true{% else %}false{% endif %}">{{
label_tab_telegram }}</a>
</li>
</ul> </ul>
<div class="tab-content well"> <!-- Tab panes -->
<div id="config-general" class="tab-pane {{ general_active }}"> <div class="tab-content">
<div class="tab-pane {{ general_active }}" id="config-general" role="tabpanel" aria-labelledby="config-general-tab">
<!-- General settings -->
<fieldset> <fieldset>
<legend>{{ label_general }}</legend> <legend>{{ label_general }}</legend>
<div class="control-group"> <!-- Update check -->
<label class="control-label" for="language">{{ label_language }}</label> {{ macro.input_checkbox("show_update", "show_update[]", label_show_update, show_update_checked) }}
<div class="controls"> <!-- Language -->
<select id="language" name="language"> {{ macro.input_select("language", "language", label_language, languages, language_current) }}
{% for language in languages %} <!-- Auto refresh -->
<option value="{{ language.value }}" {% if language.value == language_current %} selected="selected" {% endif %}>{{ {{ macro.input_field("text", "auto_refresh", null, "auto_refresh", label_auto_refresh, auto_refresh, "0", "10", "auto_refresh_help", null, label_seconds) }}
language.label }}</option> <!-- Password encryption key -->
{% endfor %} <!-- TODO how does the encryption function works currently? -->
</select> {{ macro.input_field("text", "password_encrypt_key", null, "password_encrypt_key", label_password_encrypt_key, password_encrypt_key, "cab03a766...", "40", "password_encrypt_key_help", label_password_encrypt_key_note) }}
</div>
</div>
<div class="control-group">
<div class="controls">
<label class="checkbox" for="show_update"><input type="checkbox" id="show_update" name="show_update[]"
{{ show_update_checked|raw }} /> {{ label_show_update }}</label>
</div>
</div>
<div class="control-group">
<label class="control-label" for="auto_refresh_servers">{{ label_auto_refresh }}</label>
<div class="controls">
<input type="text" class="input-mini" id="auto_refresh_servers" name="auto_refresh_servers" value="{{ auto_refresh_servers }}"
maxlength="10" data-toggle="tooltip" title="{{ label_auto_refresh_servers }}" />&nbsp;{{
label_seconds }}
</div>
</div>
<div class="control-group">
<label class="control-label" for="password_encrypt_key">
{{ label_password_encrypt_key }}
</label>
<div class="controls">
<input type="text" class="input-xxlarge" id="password_encrypt_key" name="password_encrypt_key" value="{{ password_encrypt_key }}"
maxlength="40" data-toggle="tooltip" title="{{ label_password_encrypt_key_note }}" />
</div>
</div>
</fieldset> </fieldset>
<!-- Notification settings -->
<fieldset> <fieldset>
<legend>{{ label_settings_notification }}</legend> <legend>{{ label_settings_notification }}</legend>
<div class="control-group"> <!-- Combine notifications -->
<div class="controls"> {{ macro.input_checkbox("combine_notifications", "combine_notifications[]", label_combine_notifications, combine_notifications_checked, "combine_notifications_help", label_combine_notifications_description) }}
<label class="checkbox"><input type="checkbox" id="combine_notifications" name="combine_notifications[]" {{ combine_notifications_checked|raw }} data-toggle="tooltip" /> {{ label_combine_notifications }}</label> <!-- Alert type -->
<p class="help-block">{{ label_combine_notifications_description }}</p> {{ macro.input_select("alert_type", "alert_type", label_alert_type, alert_type, alert_type_selected, "alert_type_help", label_alert_type_description) }}
</div>
</div>
<div class="control-group">
<label class="control-label" for="alert_type">{{ label_alert_type }}</label>
<div class="controls">
<select id="alert_type" name="alert_type">
<option value="status" {{ alert_type_selected_status|raw }}>{{ label_alert_type_status }}</option>
<option value="offline" {{ alert_type_selected_offline|raw }}>{{ label_alert_type_offline }}</option>
<option value="always" {{ alert_type_selected_always|raw }}>{{ label_alert_type_always }}</option>
</select>
<p class="help-block">{{ label_alert_type_description|raw }}</p>
</div>
</div>
</fieldset> </fieldset>
<!-- Log settings -->
<fieldset> <fieldset>
<legend>{{ label_settings_log }}</legend> <legend>{{ label_settings_log }}</legend>
<div class="control-group"> <!-- log_enabled -->
<div class="controls"> {{ macro.input_checkbox("log_status", "log_status[]", label_log_status, log_status_checked, "log_status_help", label_log_status_description ) }}
<label class="checkbox"><input type="checkbox" id="log_status" name="log_status[]" {{ log_status_checked|raw <!-- log retention period -->
}} data-toggle="tooltip" title="{{ label_log_status_description }}" /> {{ label_log_status }}</label> {{ macro.input_field("text", "log_retention_period", null, "log_retention_period", label_log_retention_period, log_retention_period, "0", "3", "log_retention_period_help", null, label_days) }}
</div> </fieldset>
</div> <!-- Proxy settings -->
<div class="control-group"> <fieldset>
<label class="control-label" for="log_retention_period">{{ label_log_retention_period }}</label>
<div class="controls">
<input type="text" class="input-mini" id="log_retention_period" name="log_retention_period" value="{{ log_retention_period }}"
data-toggle="tooltip" title="{{ label_log_retention_period_description }}" />&nbsp;{{
label_log_retention_days }}
</div>
</div>
<legend>{{ label_settings_proxy }}</legend> <legend>{{ label_settings_proxy }}</legend>
<div class="control-group"> <!-- enable proxy -->
<div class="controls"> {{ macro.input_checkbox("proxy", "proxy[]", label_proxy, proxy_checked, "proxy_help", label_alert_proxy ) }}
<label class="checkbox" for="proxy"><input type="checkbox" id="proxy" name="proxy[]" {{ proxy_checked|raw <!-- proxy url -->
}} />{{ label_proxy }}</label> {{ macro.input_field("text", "proxy_url", null, "proxy_url", label_proxy_url, proxy_url, label_proxy_url, null, "proxy_url_help", label_alert_proxy_url) }}
<p class="help-block">{{ label_alert_proxy|raw }}</p> <!-- proxy user -->
</div> {{ macro.input_field("text", "proxy_user", null, "proxy_user", label_proxy_user, proxy_user, label_proxy_user, null, null, null, null, true) }}
</div> <!-- proxy password -->
<div class="control-group"> {{ macro.input_field("password", "proxy_password", null, "proxy_password", label_proxy_password, proxy_password, label_proxy_password, null, null, null, null, true) }}
<label class="control-label" for="proxy_url">{{ label_proxy_url }}</label> {{ macro.button_save("general_submit", label_save) }}
<div class="controls">
<input type="text" id="proxy_url" name="proxy_url" value="{{ proxy_url }}" maxlength="100" placeholder="{{ label_proxy_url }}"
/>
<p class="help-block">{{ label_alert_proxy_url|raw }}</p>
</div>
</div>
<div class="control-group">
<label class="control-label" for="proxy_user">{{ label_proxy_user }}</label>
<div class="controls">
<input type="text" id="proxy_user" name="proxy_user" value="{{ proxy_user }}" maxlength="100" placeholder="{{ label_proxy_user }}"
/>
</div>
</div>
<div class="control-group">
<label class="control-label" for="proxy_password">{{ label_proxy_password }}</label>
<div class="controls">
<input type="password" id="proxy_password" name="proxy_password" value="{{ proxy_password }}" maxlength="100" placeholder="{{ label_proxy_password }}"
/>
</div>
</div>
<div class="form-actions">
<button class="btn btn-success" type="submit" name="general_submit">{{ label_save }}</button>
</div>
</fieldset> </fieldset>
</div> </div>
<div id="config-email" class="tab-pane {{ email_active }}"> <div class="tab-pane {{ email_active }}" id="config-email" role="tabpanel" aria-labelledby="config-email-tab">
<fieldset> <fieldset>
<legend>{{ label_settings_email }}</legend> <legend>{{ label_settings_email }}</legend>
<div class="control-group"> <!-- enable email -->
<div class="controls"> {{ macro.input_checkbox("email_status", "email_status[]", label_email_status, email_status_checked) }}
<label class="checkbox" for="email_status"><input type="checkbox" id="email_status" name="email_status[]" <!-- enable email log -->
{{ email_status_checked|raw }} /> {{ label_email_status }}</label> {{ macro.input_checkbox("log_email", "log_email[]", label_log_email, log_email_checked) }}
</div> <!-- email name -->
</div> {{ macro.input_field("text", "email_from_name", null, "email_from_name", label_email_from_name, email_from_name, label_email_from_name, "255") }}
<div class="control-group"> <!-- email address -->
<div class="controls"> {{ macro.input_field("email", "email_from_email", null, "email_from_email", label_email_from_email, email_from_email, label_email_from_email, "255") }}
<label class="checkbox"><input type="checkbox" id="log_email" name="log_email[]" {{ log_email_checked|raw </fieldset>
}} /> {{ label_log_email }}</label> <fieldset>
</div> <legend>SMTP</legend>
</div> <!-- enable smtp -->
<div class="control-group"> {{ macro.input_checkbox("email_smtp", "email_smtp[]", label_email_smtp, email_smtp_checked) }}
<label class="control-label" for="email_from_name">{{ label_email_from_name }}</label> <!-- smtp host -->
<div class="controls"> {{ macro.input_field("text", "email_smtp_host", null, "email_smtp_host", label_email_smtp_host, email_smtp_host, label_email_smtp_host, "255") }}
<input type="text" id="email_from_name" name="email_from_name" value="{{ email_from_name }}" maxlength="255" /> <!-- smtp security -->
</div> {{ macro.input_select("email_smtp_security", "email_smtp_security", label_email_smtp_security, email_smtp_security, email_smtp_security_selected) }}
</div> <!-- email user -->
<div class="control-group"> {{ macro.input_field("text", "email_smtp_username", null, "email_smtp_username", label_email_smtp_username, email_smtp_username, label_email_smtp_username, "255") }}
<label class="control-label" for="email_from_email">{{ label_email_from_email }}</label> <!-- email password -->
<div class="controls"> {{ macro.input_field("password", "email_smtp_password", null, "email_smtp_password", label_email_smtp_password, email_smtp_password, label_email_smtp_password, "255", null, null, null, true) }}
<input type="text" id="email_from_email" name="email_from_email" value="{{ email_from_email }}" maxlength="255" /> {{ macro.button_test("testEmail", label_test) }}
</div> {{ macro.input_hidden("test_email", "0") }}
</div> {{ macro.button_save("email_submit", label_save) }}
<div class="control-group">
<div class="controls">
<label class="checkbox" for="email_smtp"><input type="checkbox" id="email_smtp" name="email_smtp[]"
{{ email_smtp_checked|raw }} />{{ label_email_smtp }}</label>
</div>
</div>
<div class="control-group">
<label class="control-label" for="email_smtp_host">{{ label_email_smtp_host }}</label>
<div class="controls">
<input type="text" id="email_smtp_host" name="email_smtp_host" value="{{ email_smtp_host }}" maxlength="100" placeholder="{{ label_email_smtp_host }}"
/>
<input type="text" class="input-small" id="email_smtp_port" name="email_smtp_port" value="{{ email_smtp_port }}" maxlength="10"
placeholder="{{ label_email_smtp_port }}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="email_smtp_security">{{ label_email_smtp_security }}</label>
<div class="controls">
<select id="email_smtp_security" name="email_smtp_security">
<option value="" {{ email_smtp_security_selected_|raw }}>{{ label_email_smtp_security_none }}</option>
<option value="ssl" {{ email_smtp_security_selected_ssl|raw }}>SSL</option>
<option value="tls" {{ email_smtp_security_selected_tls|raw }}>TLS</option>
</select>
</div>
</div>
<div class="control-group">
<label class="control-label" for="email_smtp_username">{{ label_email_smtp_username }}</label>
<div class="controls">
<input type="text" id="email_smtp_username" name="email_smtp_username" value="{{ email_smtp_username }}" maxlength="100"
placeholder="{{ label_email_smtp_noauth }}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="email_smtp_password">{{ label_email_smtp_password }}</label>
<div class="controls">
<input type="password" id="email_smtp_password" name="email_smtp_password" value="{{ email_smtp_password }}" maxlength="100"
placeholder="{{ label_email_smtp_noauth }}" />
</div>
</div>
<div class="control-group">
<div class="controls">
<button class="btn btn-primary show-modal" data-modal-id="testEmail">{{ label_test }}</button>
<input type="hidden" name="test_email" value="0" />
</div>
</div>
<div class="form-actions">
<button class="btn btn-success" type="submit" name="email_submit">{{ label_save }}</button>
</div>
</fieldset> </fieldset>
</div> </div>
<div id="config-sms" class="tab-pane {{ sms_active }}"> <div class="tab-pane {{ sms_active }}" id="config-sms" role="tabpanel" aria-labelledby="config-sms-tab">
<fieldset> <fieldset>
<legend>{{ label_settings_sms }}</legend> <legend>{{ label_settings_sms }}</legend>
<div class="control-group"> <!-- enable sms -->
<div class="controls"> {{ macro.input_checkbox("sms_status", "sms_status[]", label_sms_status, sms_status_checked) }}
<label class="checkbox" for="sms_status"><input type="checkbox" id="sms_status" name="sms_status[]" <!-- enable sms log -->
{{ sms_status_checked|raw }} /> {{ label_sms_status }}</label> {{ macro.input_checkbox("log_sms", "log_sms", label_log_sms, log_sms_checked) }}
</div> <!-- sms gateway -->
</div> {{ macro.input_select("sms_gateway", "sms_gateway", label_sms_gateway, sms_gateway, sms_gateway_selected) }}
<div class="control-group"> <!-- sms user -->
<div class="controls"> {{ macro.input_field("text", "sms_gateway_username", null, "sms_gateway_username", label_sms_gateway_username, sms_gateway_username, label_sms_gateway_username, "255") }}
<label class="checkbox"><input type="checkbox" id="log_sms" name="log_sms[]" {{ log_sms_checked|raw <!-- sms password / API key-->
}} /> {{ label_log_sms }}</label> {{ macro.input_field("text", "sms_gateway_password", null, "sms_gateway_password", label_sms_gateway_password, sms_gateway_password, label_sms_gateway_password, "255") }}
</div> <!-- sms sender number-->
</div> {{ macro.input_field("text", "sms_from", null, "sms_from", label_sms_from, sms_from, "+31123456789", "255") }}
<div class="control-group">
<label class="control-label" for="sms_gateway">{{ label_sms_gateway }}</label> {{ macro.button_test("testSms", label_test) }}
<div class="controls"> {{ macro.input_hidden("test_sms", "0") }}
<select id="sms_gateway" name="sms_gateway"> {{ macro.button_save("sms_submit", label_save) }}
{% for sms_gateway in sms_gateways %}
<option value="{{ sms_gateway.value }}" {% if sms_gateway.value==sms_gateway_current %} selected="selected" {% endif %}>{{
sms_gateway.label }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="control-group">
<label class="control-label" for="sms_gateway_username">{{ label_sms_gateway_username }}</label>
<div class="controls">
<input type="text" id="sms_gateway_username" name="sms_gateway_username" value="{{ sms_gateway_username }}" maxlength="255"
/>
</div>
</div>
<div class="control-group">
<label class="control-label" for="sms_gateway_password">{{ label_sms_gateway_password }}</label>
<div class="controls">
<input type="password" id="sms_gateway_password" name="sms_gateway_password" value="{{ sms_gateway_password }}" maxlength="255"
/>
</div>
</div>
<div class="control-group">
<label class="control-label" for="sms_from">{{ label_sms_from }}</label>
<div class="controls">
<input type="text" id="sms_from" name="sms_from" value="{{ sms_from }}" maxlength="255" />
</div>
</div>
<div class="control-group">
<div class="controls">
<button class="btn btn-primary show-modal" data-modal-id="testSms">{{ label_test }}</button>
<input type="hidden" name="test_sms" value="0" />
</div>
</div>
<div class="form-actions">
<button class="btn btn-success" type="submit" name="sms_submit">{{ label_save }}</button>
</div>
</fieldset> </fieldset>
</div> </div>
<div id="config-pushover" class="tab-pane {{ pushover_active }}"> <div class="tab-pane {{ pushover_active }}" id="config-pushover" role="tabpanel" aria-labelledby="config-telegram-tab">
<fieldset> <fieldset>
<legend>{{ label_settings_pushover }}</legend> <legend>{{ label_settings_pushover }}</legend>
<div class="control-group"> <!-- enable pushover -->
<div class="controls"> {{ macro.input_checkbox("pushover_status", "pushover_status", label_pushover_status, log_pushover_status) }}
<label class="checkbox" for="pushover_status"><input type="checkbox" id="pushover_status" name="pushover_status[]" <!-- enable pushover log -->
{{ pushover_status_checked|raw }} /> {{ label_pushover_status }}</label> {{ macro.input_checkbox("log_pushover", "log_pushover", label_log_pushover, log_pushover_checked) }}
<p class="help-block">{{ label_pushover_description|raw }}</p> <!-- pushover key -->
</div> {{ macro.input_field("text", "pushover_api_token", null, "pushover_api_token", label_pushover_api_token, pushover_api_token, label_pushover_api_token, "255", "pushover_api_token_help", label_pushover_api_token_description) }}
</div> {{ macro.button_test("testPushover", label_test) }}
<div class="control-group"> {{ macro.input_hidden("test_pushover", "0") }}
<div class="controls"> {{ macro.button_save("pushover_submit", label_save) }}
<label class="checkbox"><input type="checkbox" id="log_pushover" name="log_pushover[]" {{ log_pushover_checked|raw
}} /> {{ label_log_pushover }}</label>
</div>
</div>
<div class="control-group">
<label class="control-label" for="pushover_api_token">{{ label_pushover_api_token }}</label>
<div class="controls">
<p><button class="btn btn-primary" onclick="window.open('{{ pushover_clone_url }}');return false;">{{
label_pushover_clone_app }}</button></p>
<input type="text" id="pushover_api_token" name="pushover_api_token" value="{{ pushover_api_token }}" maxlength="255" />
<p class="help-block">{{ label_pushover_api_token_description|raw }}</p>
</div>
</div>
<div class="control-group">
<div class="controls">
<button class="btn btn-primary show-modal" data-modal-id="testPushover">{{ label_test }}</button>
<input type="hidden" name="test_pushover" value="0" />
</div>
</div>
<div class="form-actions">
<button class="btn btn-success" type="submit" name="pushover_submit">{{ label_save }}</button>
</div>
</fieldset> </fieldset>
</div> </div>
<div id="config-telegram" class="tab-pane {{ telegram_active }}"> <div class="tab-pane {{ telegram_active }}" id="config-telegram" role="tabpanel" aria-labelledby="config-pushover-tab">
<fieldset> <fieldset>
<legend>{{ label_settings_telegram }}</legend> <legend>{{ label_settings_telegram }}</legend>
<div class="control-group"> <!-- enable telegram -->
<div class="controls"> {{ macro.input_checkbox("telegram_status", "telegram_status[]", label_telegram_status, telegram_status_checked) }}
<label class="checkbox" for="telegram_status"><input type="checkbox" id="telegram_status" name="telegram_status[]" <!-- enable telegram log -->
{{ telegram_status_checked|raw }} /> {{ label_telegram_status }}</label> {{ macro.input_checkbox("log_telegram", "log_telegram[]", label_log_telegram, log_telegram_checked) }}
<p class="help-block">{{ label_telegram_description|raw }}</p> <!-- telegram key -->
</div> {{ macro.input_field("text", "telegram_api_token", null, "telegram_api_token", label_telegram_api_token, telegram_api_token, label_telegram_api_token, "255", "telegram_api_token_help", label_telegram_api_token_description) }}
</div> {{ macro.button_test("testTelegram", label_test) }}
<div class="control-group"> {{ macro.input_hidden("test_telegram", "0") }}
<div class="controls"> {{ macro.button_save("telegram_submit", label_save) }}
<label class="checkbox"><input type="checkbox" id="log_telegram" name="log_telegram[]" {{ log_telegram_checked|raw
}} /> {{ label_log_telegram }}</label>
</div>
</div>
<div class="control-group">
<label class="control-label" for="telegram_api_token">{{ label_telegram_api_token }}</label>
<div class="controls">
<input type="text" id="telegram_api_token" name="telegram_api_token" value="{{ telegram_api_token }}" maxlength="255" />
<p class="help-block">{{ label_telegram_api_token_description|raw }}</p>
</div>
</div>
<div class="control-group">
<div class="controls">
<button class="btn btn-primary show-modal" data-modal-id="testTelegram">{{ label_test }}</button>
<input type="hidden" name="test_telegram" value="0" />
</div>
</div>
<div class="form-actions">
<button class="btn btn-success" type="submit" name="telegram_submit">{{ label_save }}</button>
</div>
</fieldset> </fieldset>
</div> </div>
</div> </div>
{{ macro.csrf_input() }} {{ macro.input_csrf() }}
</form> </form>

View File

@ -1,2 +1,3 @@
<h2>{{ label_title }}</h2> <h2>{{ label_title }}</h2>
<div class="w-100"></div>
<p>{{ label_description }}</p> <p>{{ label_description }}</p>

View File

@ -3,73 +3,57 @@
{% import 'main/macros.tpl.html' as macro %} {% import 'main/macros.tpl.html' as macro %}
{% block install %} {% block install %}
<div class="row-fluid"> <div class="row">
<div class="span12">{{ block('results') }}</div> <div class="col-md-12">{{ block('results') }}</div>
</div> </div>
<div class="row-fluid"> <div class="row">
<div class="span6"> <div class="col-md-6">
<form id="psm_config" class="form-horizontal" action="install.php?action=config" method="post"> <form id="psm_config" action="install.php?action=config" method="post">
{{ macro.csrf_input() }} {{ macro.input_csrf() }}
<p>Please enter the application url:</p> <p>Please enter the application url:</p>
<div class="control-group"> <div class="form-group">
<label class="control-label" for="base_url">Application base url</label> <label class="col-form-label" for="base_url">Application base url</label>
<div class="controls"> <input type="text" id="base_url" name="base_url" value="{{ base_url }}" />
<input type="text" id="base_url" name="base_url" value="{{ base_url }}" />
</div>
</div> </div>
<p>Please enter your database info:</p> <p>Please enter your database info:</p>
<div class="control-group"> <div class="form-group">
<label class="control-label" for="host">Database host</label> <label class="col-form-label" for="host">Database host</label>
<div class="controls"> <input type="text" id="host" name="db_host" value="{{ db_host }}" />
<input type="text" id="host" name="db_host" value="{{ db_host }}" />
</div>
</div> </div>
<div class="control-group"> <div class="form-group">
<label class="control-label" for="host">Database port</label> <label class="col-form-label" for="host">Database port</label>
<div class="controls"> <input type="text" id="port" name="db_port" value="{{ db_port }}" placeholder="3306 most likely, may be empty" />
<input type="text" id="port" name="db_port" value="{{ db_port }}" placeholder="3306 most likely, may be empty" />
</div>
</div> </div>
<div class="control-group"> <div class="form-group">
<label class="control-label" for="name">Database name</label> <label class="col-form-label" for="name">Database name</label>
<div class="controls"> <input type="text" id="name" name="db_name" value="{{ db_name }}" placeholder="db name" />
<input type="text" id="name" name="db_name" value="{{ db_name }}" placeholder="db name" />
</div>
</div> </div>
<div class="control-group"> <div class="form-group">
<label class="control-label" for="user">Database user</label> <label class="col-form-label" for="user">Database user</label>
<div class="controls"> <input type="text" id="user" name="db_user" value="{{ db_user }}" placeholder="db user" />
<input type="text" id="user" name="db_user" value="{{ db_user }}" placeholder="db user" />
</div>
</div> </div>
<div class="control-group"> <div class="form-group">
<label class="control-label" for="pass">Database password</label> <label class="col-form-label" for="pass">Database password</label>
<div class="controls"> <input type="password" id="pass" name="db_pass" value="{{ db_pass }}" placeholder="db password" />
<input type="password" id="pass" name="db_pass" value="{{ db_pass }}" placeholder="db password" />
</div>
</div> </div>
<div class="control-group"> <div class="form-group">
<label class="control-label" for="prefix">Table prefix</label> <label class="col-form-label" for="prefix">Table prefix</label>
<div class="controls"> <input type="text" id="prefix" name="db_prefix" value="{{ db_prefix }}" />
<input type="text" id="prefix" name="db_prefix" value="{{ db_prefix }}" />
</div>
</div> </div>
<div class="control-group"> <div class="form-group">
<div class="controls"> <button type="submit" class="btn">Save configuration</button>
<button type="submit" class="btn">Save configuration</button>
</div>
</div> </div>
</form> </form>
</div> </div>
{% if include_config_new_copy %} {% if include_config_new_copy %}
<div class="span6"> <div class="col-md-6">
<h3>Your config file:</h3> <h3>Your config file:</h3>
<div class="alert alert-error">Unable to save your configuration.</div> <div class="alert alert-danger">Unable to save your configuration.</div>
<p>Your database information is valid, however we are unable to create the configuration file automatically. <p>Your database information is valid, however we are unable to create the configuration file automatically.
Please create a new file in the project directory called "config.php" and copy the information below.</p> Please create a new file in the project directory called "config.php" and copy the information below.</p>
<p>After you have copied the configuration, press the button to continue.</p> <p>After you have copied the configuration, press the button to continue.</p>
<p class="pull-left"><textarea rows="10">{{ php_config }}</textarea></p> <p class="pull-left"><textarea rows="10">{{ php_config }}</textarea></p>
<p class="offset2"><input type="submit" class="btn btn-primary" value="I have saved the configuration" onclick="location.reload(true);" /></p> <p class="col-md-offset-2"><input type="submit" class="btn btn-primary" value="I have saved the configuration" onclick="location.reload(true);" /></p>
</div> </div>
{% endif %} {% endif %}
</div> </div>

View File

@ -7,40 +7,35 @@
<p>Next, please set up a new account to access your monitor:</p> <p>Next, please set up a new account to access your monitor:</p>
{{ block('results') }} {{ block('results') }}
<p>&nbsp;</p> <p>&nbsp;</p>
<div class="row-fluid"> <form name="psm_config" class="col-md-6 pl-0 pr-0" action="install.php?action=install" id="psm_config" method="post">
<div class="span6"> {{ macro.input_csrf() }}
<form id="psm_config" class="form-horizontal" action="install.php?action=install" method="post"> <fieldset>
{{ macro.csrf_input() }} <legend>Administrator</legend>
<div class="control-group"> <div class="col">
<label class="control-label" for="username">Username</label> <!-- Username -->
<div class="controls"> <div class="form-group">
<input type="text" id="username" name="username" value="{{ username }}"> <label for="username">Username</label>
</div> <input type="text" class="form-control" autocomplete="nickname" name="username" id="username" maxlength="255"
</div> required autofocus>
<div class="control-group"> </div>
<label class="control-label" for="password">Password</label> <!-- Password -->
<div class="controls"> <div class="form-group">
<input type="password" id="password" name="password" value=""> <label for="password">Password</label>
</div> <input type="password" class="form-control" name="password" id="password" maxlength="255"
</div> required>
<div class="control-group"> </div>
<label class="control-label" for="password_repeat">Password repeat</label> <!-- Password repeat -->
<div class="controls"> <div class="form-group">
<input type="password" id="password_repeat" name="password_repeat" value=""> <label for="password_repeat">Password repeat</label>
</div> <input type="password" class="form-control" name="password_repeat" id="password_repeat" maxlength="255"
</div> required>
<div class="control-group"> </div>
<label class="control-label" for="email">Email</label> <!-- Email -->
<div class="controls"> <div class="form-group">
<input type="text" id="email" name="email" value="{{ email }}" /> <label for="email">Email</label>
</div> <input type="email" class="form-control" autocomplete="email" name="email" id="email" maxlength="255"
</div> required>
<div class="control-group"> </div>
<div class="controls"> <button class="btn btn-success btn-lg" type="submit">Install</button>
<button type="submit" class="btn btn-primary btn-large">Install</button> </fieldset>
</div>
</div>
</form>
</div>
</div>
{% endblock %} {% endblock %}

View File

@ -1,8 +1,9 @@
{% extends "module/install/main.tpl.html" %} {% extends "module/install/main.tpl.html" %}
{% use "module/install/results.tpl.html" %}
{% block install %} {% block install %}
<p>We have discovered a previous version.</p> {{ block('results') }}
<p>In the next step we will upgrade your database to the latest version.</p> <p>In the next step we will upgrade your database to the latest version.</p>
<p>&nbsp;</p> <p>&nbsp;</p>
<p><a class="btn btn-primary btn-large" href="install.php?action=install">Upgrade to {{ version }}</a></p> <p><a class="btn btn-primary btn-lg" href="install.php?action=install">Upgrade to {{ version }}</a></p>
{% endblock %} {% endblock %}

View File

@ -8,8 +8,5 @@
It is recommended you fix any errors before continuing. It is recommended you fix any errors before continuing.
</p> </p>
{{ block('results') }} {{ block('results') }}
<p>&nbsp;</p> <a class="btn btn-primary btn-lg" href="install.php?action=config">Let's go</a>
<p>
<a class="btn btn-primary btn-large" href="install.php?action=config">Let's go</a>
</p>
{% endblock %} {% endblock %}

View File

@ -1,8 +1,9 @@
<div class="hero-unit"> <div class="jumbotron w-100">
<div class="install_header"> <div class="row">
<p class="pull-left"><a href="http://www.phpservermonitor.org/"><img class="pull-left" src="static/phpservermon.png" alt="" /></a></p> <a href="http://www.phpservermonitor.org/">
<h2>&nbsp;PHP Server Monitor</h2> <img class="img-responsive" src="static/phpservermon.png" alt="PHPServerMonitor logo" />
<p class="clearfix"></p> </a>
</div> <h2>&nbsp;PHP Server Monitor</h2>
</div>
{% block install %} {% endblock %} {% block install %} {% endblock %}
</div> </div>

View File

@ -1,12 +1,13 @@
{% block results %} {% block results %}
{% if messages %} {% if messages %}
{% for msg in messages %} {% for msg in messages %}
<div> <div class="row">
<p class="pull-left"><span class="label label-{{ msg.shortcode }}">{{ msg.shortcode }}</span></p> <div class="col-md-1"><span class="badge badge-{{ msg.class }}">{{ msg.shortcode }}</span></div>
{% autoescape false %} {% autoescape false %}
<p class="offset1">{{ msg.message }}</p> <div class="col-md-11">{{ msg.message }}</div>
{% endautoescape %} {% endautoescape %}
</div> </div>
{% endfor %} {% endfor %}
<div class="w-100 mb-4"></div>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@ -2,19 +2,18 @@
{% use "module/install/results.tpl.html" %} {% use "module/install/results.tpl.html" %}
{% block install %} {% block install %}
<div class="row-fluid"> <div class="row">
<div class="span12">{{ block('results') }}</div> <div class="col-md-12">{{ block('results') }}</div>
</div> </div>
<div class="row-fluid"> <div class="row">
<div class="span12"> <div class="col-md-12">
<p>&nbsp;</p> <p>&nbsp;</p>
<p>The installation is complete. Please check above if errors have occurred.<br> <p>The installation is complete. Please check above if errors have occurred.<br>
If no errors have occurred, you are good to go.<br><br></p> If no errors have occurred, you are good to go.</p>
<p> <div class="w-100 mb-4"></div>
<a class="btn btn-primary btn-large" href="index.php">Go to your monitor</a> <a class="btn btn-primary btn-lg" href="index.php">Go to your monitor</a>
<a class="btn btn-large" target="_blank" href="http://www.phpservermonitor.org/">PHP Server Monitor</a> <a class="btn btn-secondary btn-lg" target="_blank" rel="noopener" href="http://www.phpservermonitor.org/">PHP Server Monitor</a>
<a class="btn btn-large" target="_blank" href="http://docs.phpservermonitor.org/">Documentation</a> <a class="btn btn-secondary btn-lg" target="_blank" rel="noopener" href="http://docs.phpservermonitor.org/">Documentation</a>
</p>
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

View File

@ -1,55 +1,142 @@
<link href="static/plugin/jqplot/jquery.jqplot.min.css" rel="stylesheet" > <script type="text/javascript" src="static/plugin/momentjs/moment.js"></script>
<!--[if lt IE 9]><script type="text/javascript" src="static/plugin/excanvas.js"></script><![endif]--> <script type="text/javascript" src="static/plugin/chartjs/chart-2.7.3.min.js"></script>
<script type="text/javascript" src="static/plugin/jqplot/jquery.jqplot.min.js"></script>
<script type="text/javascript" src="static/plugin/jqplot/jqplot.canvasOverlay.min.js"></script>
<script type="text/javascript" src="static/plugin/jqplot/jqplot.cursor.min.js"></script>
<script type="text/javascript" src="static/plugin/jqplot/jqplot.dateAxisRenderer.min.js"></script>
<script type="text/javascript" src="static/plugin/jqplot/jqplot.highlighter.min.js"></script>
<link href="static/css/history.css" rel="stylesheet" >
<script type="text/javascript">
var day_format = '{{ day_format }}';
var long_date_format = '{{ long_date_format }}';
var short_date_format = '{{ short_date_format }}';
var short_time_format = '{{ short_time_format }}';
</script>
<script type="text/javascript" src="static/js/history.js"></script>
<div id="history-panel">
{% for graph in graphs %} {% for graph in graphs %}
<div class="chart-row"> <div class="chart-container col-10" style="position: relative; width:60vw">
<div class="chart-container"> <canvas id="{{ graph.id }}">Your browser does not support the canvas element.</canvas>
<div class="chart-content">
<div id="chart{{ graph.chart_id }}" class="chart" data-title="{{ graph.title }}" data-plotMode="{{ graph.plotmode }}" data-endTime="{{ graph.end_timestamp }}" data-series="{{ graph.series|raw }}" data-lines="{{ graph.server_lines }}" data-down="{{ graph.server_down }}"></div>
</div>
</div>
<div class="info-container">
<div class="info-content">
<div class="info-dropdown btn-group">
<button class="btn dropdown-toggle" data-toggle="dropdown"><i class="icon-info-sign"></i></button>
<ul class="dropdown-menu">
{% for record in graph.info %}
<li><span>{{ record.label }}: {{ record.value }}</span></li>
{% endfor %}
</ul>
</div>
<div class="server-info">
<ul>
{% for record in graph.info %}
<li><span>{{ record.label }}: {{ record.value }}</span></li>
{% endfor %}
</ul>
</div>
</div>
<div class="chart-selector">
<div class="btn-group">
{% for button in graph.buttons %}
<button class="btn {{ button.class_active }}" data-chartId="{{ graph.chart_id }}" data-chartMode="{{ button.mode }}" >{{ button.label }}</button>
{% endfor %}
</div>
</div>
</div>
</div> </div>
<div style="clear: both;">&nbsp;</div> <div class="col-md-2">
<div class="btn-group btn-group-toggle" data-toggle="buttons">
{% for button in graph.buttons %}
<label class="btn btn-secondary {{ button.class_active }}">
<input type="radio" name="{{ graph.button_name }}" value="{{ button.time }}" id="{{ button.unit }}" autocomplete="off" {% if button.class_active %} checked {% endif %}> {{ button.label }}
</label>
{% endfor %}
</div>
</div>
{% if graph.id == 'history_short' %}
<script>
var historyShort = new Chart(document.getElementById("{{ graph.id }}").getContext('2d'), {
type: 'line',
data: {
datasets: [
{
data: [{{ graph.lines.offline.value }}],
label: '{{ graph.lines.offline.name }}',
backgroundColor: '#dc3545',
borderColor: '#dc3545',
borderWidth: 2,
radius: 0,
pointStyle: 'crossRot',
fill: true,
spanGaps: false,
},
{
data: [{{ graph.lines.online.value }}],
label: '{{graph.lines.online.name }}',
fill: false,
spanGaps: false,
backgroundColor: '#28a745',
borderColor: '#28a745',
lineTension: 0,
steppedLine: true
},
]
},
options: {
scales: {
yAxes: [{
ticks: {
min: 0.0
}
}],
xAxes: [{
type: 'time',
time: {
unit: '{{ graph.unit }}',
minUnit: 'hour',
min: {{ graph.start_timestamp }},
max: {{ graph.end_timestamp }},
},
distribution: 'linear',
ticks: {
source: 'auto',
}
}]
}
}
});
</script>
{% elseif graph.id == 'history_long' %}
<script>
var colors = {
/*
ChartJS example colors
red: 'rgb(255, 99, 132)',
orange: 'rgb(255, 159, 64)',
yellow: 'rgb(255, 205, 86)',
green: 'rgb(75, 192, 192)',
blue: 'rgb(54, 162, 235)',
purple: 'rgb(153, 102, 255)',
grey: 'rgb(201, 203, 207)'
*/
latency_min: 'rgb(255, 99, 132)',
latency_avg: 'rgb(54, 162, 235)',
latency_max: 'rgb(255, 205, 86)'
}
var historyLong = new Chart(document.getElementById("{{ graph.id }}").getContext('2d'), {
type: 'line',
data: {
datasets: [
{% for key,line in graph.lines %}
{
data: [{{ line.value|raw }}],
label: '{{ line.name }}',
backgroundColor: colors['{{key}}'],
borderColor: colors['{{key}}'],
},
{% endfor %}
]
},
options: {
animation: {
easing: 'easeInOutExpo',
},
tooltips: {
mode: 'index'
},
scales: {
yAxes: [{
ticks: {
min: 0.0
}
}],
xAxes: [{
type: 'time',
time: {
unit: '{{ graph.unit }}',
minUnit: 'day',
min: {{ graph.start_timestamp }},
max: {{ graph.end_timestamp }},
},
distribution: 'linear',
ticks: {
source: 'auto',
}
}]
}
}
});
</script>
{% else %}
<script>
alert('Graph is missing the \'javascript part\'.');
</script>
{% endif %}
{% endfor %} {% endfor %}
</div> <script>
document.onreadystatechange = function () {
if (document.readyState === 'interactive') {
$.getScript("static/js/history.js");
}
}
</script>

View File

@ -1,67 +1,41 @@
{% if has_admin_actions %} <!-- Nav tabs -->
<a class="btn btn-danger show-modal" href="{{ url_delete|raw }}" title="Delete" data-modal-id="delete" data-modal-param="{{ label }}"> <ul class="nav nav-tabs" style="width:100%" id="log_tab" role="tablist">
<i class="icon-trash icon-white"></i>&nbsp;{{ label_clear_log }} {% for tab in tabs %}
</a> <li class="nav-item">
<br><br> <a class="nav-link {{ tab.tab_active }}" id="log-{{ tab.id }}-tab" data-toggle="tab" href="#log-{{ tab.id }}" role="tab" aria-controls="log-{{ tab.id }}" aria-selected="{% if tab.tab_active %}true{% else %}false{% endif %}">{{ tab.label }}</a>
{% endif %} </li>
<div class="tabbable"> {% endfor %}
<ul class="nav nav-tabs"> </ul>
<li class="active"><a href="#log_status_content" data-toggle="tab">{{ label_status }}</a></li> <div class="tab-content">
<li><a href="#log_email_content" data-toggle="tab">{{ label_email }}</a></li> {% for tab in tabs %}
<li><a href="#log_sms_content" data-toggle="tab">{{ label_sms }}</a></li> <div class="tab-pane {{ tab.tab_active }}" id="log-{{ tab.id }}" role="tabpanel" aria-labelledby="log-{{ tab.id }}-tab">
<li><a href="#log_pushover_content" data-toggle="tab">{{ label_pushover }}</a></li> <div class="table-responsive">
<li><a href="#log_telegram_content" data-toggle="tab">{{ label_telegram }}</a></li> <table class="table table-striped table-hover">
</ul>
<div class="tab-content well">
{% for tab in tabs %}
<div class="tab-pane {{ tab.tab_active }}" id="log_{{ tab.id }}_content">
<table class="table table-bordered table-striped">
<thead> <thead>
<tr> <tr>
<th class="hidden-phone">{{ label_server }}</th> <th scope="col">{{ label_server }}</th>
<th class="hidden-phone">{{ label_message }}</th> <th scope="col">{{ label_message }}</th>
<th class="hidden-phone">{{ label_date }}</th> <th scope="col">{{ label_date }}</th>
{% if tab.has_users %} <th class="hidden-phone">{{ label_users }}</th> {% endif %} {% if tab.has_users %}<th scope="col">{{ label_users }}</th>{% endif %}
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for entry in tab.entries %} {% for entry in tab.entries %}
<tr class="{{ entry.class }}"> <tr>
<td> <th scope="row"><i class="fas fa-{{ entry.type_icon }}" title="{{ entry.type_title }}"></i> {{ entry.server }} {{ entry.ip }}</th>
<div class="table-body"> <td>{{ entry.message|raw }}</td>
<div class="table-cell"> <td>{{ entry.datetime_format }}</td>
<div class="visible-phone pull-right"> {% if tab.has_users %}<td>{{ entry.user_list|raw }}</td>{% endif %}
&nbsp;{{ entry.datetime_format }}
</div>
<i class="{{ entry.type_icon }}" title="{{ entry.type_title }}"></i> <span class="title">{{ entry.server }}</span> {{ entry.ip }}
</div>
</div>
<div class="visible-phone">
<div class="table-separator"/></div>
<div class="table-body">
<div class="table-cell-details">{{ entry.message|raw }}</div>
</div>
</div>
{% if tab.has_users %}<div class="visible-phone">
<div class="table-separator"/></div>
<div class="table-body">
<div class="table-cell-details">{{ label_users }}: {{ entry.user_list|raw }}</div>
</div>
</div>{% endif %}
</td>
<td class="hidden-phone">{{ entry.message|raw }}</td>
<td class="hidden-phone tight">{{ entry.datetime_format }}</td>
{% if tab.has_users %}<td class="hidden-phone tight">{{ entry.users|raw }}</td>{% endif %}
</tr> </tr>
{% endfor %} {% endfor %}
{% if tab.no_logs %} {% if tab.no_logs %}
<tr class="{{ class }}"> <tr>
<td colspan="4" class="cell-center">{{ label_no_logs }}</td> <td colspan="4" class="cell-center">{{ label_no_logs }}</td>
</tr> </tr>
{% endif %} {% endif %}
</tbody> </tbody>
</table> </table>
</div> </div>
{% endfor %}
</div> </div>
</div> {% endfor %}
</div>

View File

@ -1,81 +1,94 @@
<table class="table table-bordered table-striped"> {% import 'main/macros.tpl.html' as macro %}
<thead> {{ macro.table_search(label_search) }}
<tr> <div class="table-responsive">
<th class="hidden-phone">&nbsp;</th> <table class="table table-striped table-hover table-bordered">
<th class="hidden-phone">{{ label_label }}</th> <thead>
<th class="hidden-phone">{{ label_domain }}</th> <tr>
<th class="visible-desktop">{{ label_port }}</th> <!--class="d-none d-lg-table-cell"-->
<th class="visible-desktop">{{ label_type }}</th> <th scope="col">{{ label_label }}</th>
<th class="hidden-phone">{{ label_rtime }}</th> <th scope="col">{{ label_domain }}</th>
<th class="hidden-phone">{{ label_last_online }}</th> <th scope="col">{{ label_port }}</th>
<th class="hidden-phone">{{ label_last_offline }}</th> <th scope="col">{{ label_type }}</th>
<th class="hidden-phone">{{ label_monitoring }}</th> <th scope="col">{{ label_rtime }}</th>
<th class="hidden-phone">{{ label_action }}</th> <th scope="col">{{ label_last_online }}</th>
</tr> <th scope="col">{{ label_last_offline }}</th>
</thead> <th scope="col">{{ label_monitoring }}</th>
<tbody> {% if user_level == 10 %}
{% for server in servers %} <th scope="col">&#32</th>
<tr> {% endif %}
<td class="hidden-phone"><div class="table-cell-title"><span class="label label-status-{{ server.status }}"><a href="{{ server.url_view|raw }}" title="{{ server.error }}">{{ server.status }}</a></span></div></td> </tr>
<td class="hidden-phone"><div class="table-cell-title"><a href="{{ server.url_view|raw }}">{{ server.label }}</a></div></td> <tr class="warning no-result">
<td class="nowrap visible-tablet"><div class="table-cell-title"><i class="{{ server.type_icon }}" title="{{ server.type }}"></i> {{ server.ip_short|raw }}</div></td> <td colspan="4"><i class="fas fa-exclamation-triangle"></i> No result</td>
<td class="nowrap visible-desktop"><div class="table-cell-title">{{ server.ip|raw }}</div></td> </tr>
<td class="nowrap visible-desktop"><div class="table-cell-title">{{ server.port }}</div></td> </thead>
<td class="nowrap visible-desktop"><div class="table-cell-title">{{ server.type }}</div></td> <tbody>
<td class="nowrap hidden-phone"><div class="table-cell-title">{{ server.rtime }} s</div></td> {% for server in servers %}
<td class="nowrap hidden-phone"><div class="table-cell-title">{{ server.last_online }}</div></td> <tr>
<td class="nowrap hidden-phone"><div class="table-cell-title">{{ server.last_offline }} {{ server.last_offline_duration }}</div></td> <th scope="row">
<td class="tight hidden-phone"> {% if server.status|lower == 'on' %}
<div class="table-cell-title"> <i class="fas fa-check-circle" title="{{ server.status }}"></i>&nbsp;
<i class="{{ server.active_icon }}" title="{{ server.active_title }}"></i> {% elseif server.status|lower == 'warning' %}
<i class="{{ server.email_icon }}" title="{{ label_email }}"></i> <i class="fas fa-exclamation-triangle" title="{{ server.status }}"></i>&nbsp;
<i class="{{ server.sms_icon }}" title="{{ label_sms }}"></i> {% elseif server.status|lower == 'off' %}
<i class="{{ server.pushover_icon }}" title="Pushover"></i> <i class="fas fa-times-circle" title="{{ server.status }}"></i>&nbsp;
<i class="{{ server.telegram_icon }}" title="Telegram"></i>
</div>
</td>
<td class="tight hidden-phone">
<div class="table-cell-title">
<a class="btn btn-small" href="{{ server.url_view|raw }}"><i class="icon-chart"></i></a>
{% if user_level == 10 %}
<a class="btn btn-small" href="{{ server.url_edit|raw }}" title="{{ label_edit }}"><i class="icon-pencil"></i></a>
<a class="btn btn-small btn-danger show-modal" href="{{ server.url_delete|raw }}" title="{{ label_delete }}" data-modal-id="delete" data-modal-param="{{ server.label }}"><i class="icon-remove icon-white"></i></a>
{% endif %} {% endif %}
</div> <a href="{{ server.url_view|raw }}" title="{{ label_view }}">
</td> {{ server.label }}
<td class="visible-phone"> </a>
<div class="table-body"> </th>
<div class="table-cell-title"> <td>{{ server.ip|raw }}</td>
<span class="label label-status-{{ server.status }}"><a href="{{ server.url_view|raw }}" title="{{ server.error }}">{{ server.status }}</a></span> <td>{{ server.port }}</td>
<a class="title" href="{{ server.url_view|raw }}">{{ server.label }}</a> <td>{{ server.type }}</td>
</div> <td>{{ server.rtime }}</td>
<div class="table-cell tight"> <td>{{ server.last_online }}</td>
&nbsp;<a class="btn btn-small" href="{{ server.url_view|raw }}"><i class="icon-chart"></i></a> <td>{{ server.last_offline }}</td>
{% if user_level == 10 %} <td>
<a class="btn btn-small" href="{{ server.url_edit|raw }}" title="{{ label_edit }}"><i class="icon-pencil"></i></a> {% if server.active|lower == 'yes'%}
<a class="btn btn-small btn-danger show-modal" href="{{ server.url_delete|raw }}" title="{{ label_delete }}" data-modal-id="delete" data-modal-param="{{ server.label }}"><i class="icon-remove icon-white"></i></a> <i class="fas fa-eye" title="{{ server.active_title }}"></i>
{% endif %} {% else %}
</div> <i class="fas fa-eye-slash" title="{{ server.active_title }}"></i>
</div> {% endif %}
<div class="table-body"> {% if server.email|lower == 'yes'%}
<div class="table-row"> <i class="fas fa-envelope" title="{{ label_email }}"></i>
<div class="table-cell"><i class="{{ server.type_icon }}" title="{{ server.type }}"></i> {{ server.ip_short|raw }}</div> {% endif %}
<div class="table-cell tight"> {% if server.sms|lower == 'yes'%}
<i class="{{ server.active_icon }}" title="{{ server.active_title }}"></i> <i class="fas fa-sms" title="{{ label_sms }}"></i>
<i class="{{ server.email_icon }}" title="{{ label_email }}"></i> {% endif %}
<i class="{{ server.sms_icon }}" title="{{ label_sms }}"></i> {% if server.pushover|lower == 'yes'%}
<i class="{{ server.pushover_icon }}" title="Pushover"></i> <span class="fa-layers">
<i class="{{ server.telegram_icon }}" title="Telegram"></i> <i class="fas fa-circle" title="{{ label_pushover }}"></i>
<span class="fa-layers-text fa-inverse" style="font-weight:400; font-size:75%">P</span>
</span>
{% endif %}
{% if server.telegram|lower == 'yes'%}
<span class="fa-layers">
<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 %}
</td>
{% if user_level == 10 %}
<td>
<div class="item-action dropdown">
<a data-toggle="dropdown" class="icon"><i class="fas fa-ellipsis-v"></i></a>
<div class="dropdown-menu">
<a class="dropdown-item" href="{{ server.url_view|raw }}" title="{{ label_view }}">
<i class="fas fa-eye"></i> {{ label_view }}
</a>
<a class="dropdown-item" href="{{ server.url_edit|raw }}" title="{{ label_edit }}">
<i class="fas fa-edit"></i> {{ label_edit }}
</a>
<a class="dropdown-item show-modal" href="{{ server.url_delete|raw }}" title="{{ label_delete }}" data-modal-id="delete"
data-modal-param="{{ server.server_name }}">
<i class="fas fa-trash"></i> {{ label_delete }}
</a>
</div> </div>
</div> </div>
</div> </td>
<div class="table-body"> {% endif %}
<div class="table-row"><div class="table-cell-details tight">{{ label_rtime }}: &nbsp;</div><div class="table-cell-details">{{ server.rtime }} s</div></div> </tr>
<div class="table-row"><div class="table-cell-details tight">{{ label_last_online }}: &nbsp;</div><div class="table-cell-details">{{ server.last_online }}</div></div> {% endfor %}
<div class="table-row"><div class="table-cell-details tight">{{ label_last_offline }}: &nbsp;</div><div class="table-cell-details">{{ server.last_offline }} {{ server.last_offline_duration }}</div></div> </tbody>
</div> </table>
</td> </div>
</tr>
{% endfor %}
</tbody>
</table>

View File

@ -1,235 +1,153 @@
{% import 'main/macros.tpl.html' as macro %} {% import 'main/macros.tpl.html' as macro %}
<form class="form-horizontal well" action="{{ url_save|raw }}" method="post" autocomplete="off"> <form name="edit_server" action="{{ url_save|raw }}" class="col-md-6 pl-0 pr-0" id="edit_server" method="post"
{{ macro.csrf_input() }} autocomplete="off">
<fieldset> <fieldset>
<legend>{{ titlemode }}</legend> <legend>{{ titlemode }}</legend>
<div class="control-group"> <div class="col">
<label class="control-label" for="label">{{ label_label }}</label> <!-- Label -->
<div class="controls"> {{ macro.input_field("text", "label", null, "label", label_label, edit_value_label, null, "255", null, null, null, null, true, true) }}
<input type="text" id="label" name="label" value="{{ edit_value_label }}" maxlength="255" /> <!-- IP -->
</div> {{ macro.input_field("text", "ip", null, "ip", label_domain, edit_value_ip, null, "255", null, null, null, null, true) }}
</div> <!-- Type -->
<div class="control-group"> <div class="form-group">
<label class="control-label" for="ip">{{ label_domain }}</label> <label for="type">{{ label_type }}</label>
<div class="controls"> <select id="type" name="type" class="custom-select" required>
<input type="text" id="ip" name="ip" value="{{ edit_value_ip }}" maxlength="500" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="type">{{ label_type }}</label>
<div class="controls">
<select id="type" name="type">
<option value="">{{ label_please_select }}</option> <option value="">{{ label_please_select }}</option>
<option value="ping" {{ edit_type_selected_ping|raw }}>{{ label_ping }}</option> <option value="ping" {{ edit_type_selected_ping|raw }}>{{ label_ping }}</option>
<option value="service" {{ edit_type_selected_service|raw }}>{{ label_service }}</option> <option value="service" {{ edit_type_selected_service|raw }}>{{ label_service }}</option>
<option value="website" {{ edit_type_selected_website|raw }}>{{ label_website }}</option> <option value="website" {{ edit_type_selected_website|raw }}>{{ label_website }}</option>
</select>
</div>
</div>
<div class="control-group popularPortsGroup types typeService">
<label class="control-label" for="popularPorts">{{ label_port }}</label>
<div class="controls">
<select id="popularPorts" name="popularPorts">
<option value="">{{ label_please_select }}</option>
<option value="custom">{{ label_custom_port }}</option>
<optgroup label="{{ label_popular_ports }}">
<option value="80">HTTP (80)</option>
<option value="443">HTTPS (443)</option>
<option value="21">FTP (21)</option>
<option value="25">SMTP (25)</option>
<option value="465">SMTP Secure (465)</option>
<option value="110">POP3 (110)</option>
<option value="995">POP3 Secure (995)</option>
<option value="143">IMAP (143)</option>
<option value="993">IMAP over SSL (993)</option>
<option value="22">SSH (22)</option>
<option value="389">LDAP (389)</option>
<option value="3306">MySQL (3306)</option>
<option value="115">SFTP (115)</option>
<option value="43">WHOIS (43)</option>
<option value="53">BIND (53)</option>
<option value="3389">RDP (3389)</option>
</optgroup>
</select> </select>
</div> </div>
</div> <!-- Port -->
<div class="control-group portGroup types typeService"> <div class="form-group types typeService">
<label class="control-label" for="port">{{ label_custom_port }}</label> <label for="popular_ports">{{ label_port }}</label>
<div class="controls"> <select id="popular_ports" name="popular_ports" class="custom-select">
<input class="input-mini" type="text" id="port" name="port" value="{{ edit_value_port }}" maxlength="5" /> <option {% if not edit_value_port %}selected {% endif %} disabled>{{ label_please_select }}</option>
</div> <option {% if edit_value_port not in [0, 80, 443, 21, 25, 465, 110, 995, 143, 993, 22, 389, 3306, 115, 43, 53,
</div> 3389] %} selected {% endif %} value="custom">{{ label_custom_port }}</option>
<div class="control-group popularRequestMethodsGroup types typeWebsite"> <optgroup label="{{ label_popular_ports }}">
<label class="control-label" for="popularRequestMethods">{{ label_request_method }}</label> <option {% if edit_value_port==80 %}selected {% endif %}value="80">HTTP (80)</option>
<div class="controls"> <option {% if edit_value_port==443 %}selected {% endif %}value="443">HTTPS (443)</option>
<select id="popularRequestMethods" name="popularRequestMethods"> <option {% if edit_value_port==21 %}selected {% endif %}value="21">FTP (21)</option>
<option value="">{{ label_none }}</option> <option {% if edit_value_port==25 %}selected {% endif %}value="25">SMTP (25)</option>
<optgroup label="{{ label_popular_request_methods }}"> <option {% if edit_value_port==465 %}selected {% endif %}value="465">SMTP Secure (465)</option>
<option value="GET">GET</option> <option {% if edit_value_port==110 %}selected {% endif %}value="110">POP3 (110)</option>
<option value="HEAD">HEAD</option> <option {% if edit_value_port==995 %}selected {% endif %}value="995">POP3 Secure (995)</option>
<option value="POST">POST</option> <option {% if edit_value_port==143 %}selected {% endif %}value="143">IMAP (143)</option>
<option value="PUT">PUT</option> <option {% if edit_value_port==993 %}selected {% endif %}value="993">IMAP over SSL (993)</option>
<option value="DELETE">DELETE</option> <option {% if edit_value_port==22 %}selected {% endif %}value="22">SSH (22)</option>
<option value="CONNECT">CONNECT</option> <option {% if edit_value_port==389 %}selected {% endif %}value="389">LDAP (389)</option>
<option value="OPTIONS">OPTIONS</option> <option {% if edit_value_port==3306 %}selected {% endif %}value="3306">MySQL (3306)</option>
<option value="TRACE">TRACE</option> <option {% if edit_value_port==115 %}selected {% endif %}value="115">SFTP (115)</option>
<option value="PATCH">PATCH</option> <option {% if edit_value_port==43 %}selected {% endif %}value="43">WHOIS (43)</option>
<option {% if edit_value_port==53 %}selected {% endif %}value="53">BIND (53)</option>
<option {% if edit_value_port==3389 %}selected {% endif %}value="3389">RDP (3389)</option>
</optgroup> </optgroup>
<option value="custom">{{ label_custom_request_method }}</option>
</select> </select>
</div> </div>
</div> <!-- Custom port -->
<div class="control-group requestMethodGroup types typeWebsite"> {{ macro.input_field("number", "port", "port types typeService", "port", label_custom_port, edit_value_port, null, "5") }}
<label class="control-label" for="requestMethod">{{ label_custom_request_method }}</label> <!-- Request method -->
<div class="controls"> <div class="form-group types typeWebsite">
<input class="input" type="text" id="requestMethod" name="request_method" value="{{ edit_value_request_method }}" maxlength="50" /> <label for="popular_request_methods">{{ label_request_method }}</label>
</div> <select id="popular_request_methods" name="popular_request_methods" class="custom-select">
</div> <option value="">{{ label_none }}</option>
<div class="control-group postGroup types typeWebsite"> <optgroup label="{{ label_popular_request_methods }}">
<label class="control-label" for="postField">{{ label_post_field }}</label> <option {% if edit_value_request_method|upper=='GET' %}selected {% endif %}value="GET">GET</option>
<div class="controls"> <option {% if edit_value_request_method|upper=='HEAD' %}selected {% endif %}value="HEAD">HEAD</option>
<input class="input" type="text" id="postField" name="post_field" value="{{ edit_value_post_field }}" maxlength="255" data-toggle="tooltip" title="{{ label_post_field_description}}"/> <option {% if edit_value_request_method|upper=='POST' %}selected {% endif %}value="POST">POST</option>
</div> <option {% if edit_value_request_method|upper=='PUT' %}selected {% endif %}value="PUT">PUT</option>
</div> <option {% if edit_value_request_method|upper=='DELETE' %}selected {% endif %}value="DELETE">DELETE</option>
<div class="control-group types typeWebsite"> <option {% if edit_value_request_method|upper=='CONNECT' %}selected {% endif %}value="CONNECT">CONNECT</option>
<label class="control-label" for="pattern">{{ label_pattern }}</label> <option {% if edit_value_request_method|upper=='OPTIONS' %}selected {% endif %}value="OPTIONS">OPTIONS</option>
<div class="controls"> <option {% if edit_value_request_method|upper=='TRACE' %}selected {% endif %}value="TRACE">TRACE</option>
<input type="text" id="pattern" name="pattern" value="{{ edit_value_pattern }}" maxlength="255" data-toggle="tooltip" title="{{ label_pattern_description }}" /> <option {% if edit_value_request_method|upper=='PATCH' %}selected {% endif %}value="PATCH">PATCH</option>
</div> </optgroup>
</div> <option {% if edit_value_request_method|upper not in ['', 'GET' , 'HEAD' , 'POST' , 'PUT' , 'DELETE' , 'CONNECT' ,
<div class="control-group types typeWebsite"> 'OPTIONS' , 'TRACE' , 'PATCH' ] %} selected {% endif %} value="custom">{{ label_custom_request_method }}</option>
<label class="control-label" for="pattern_online">{{ label_pattern_online }}</label>
<div class="controls">
<select id="pattern_online" name="pattern_online" data-toggle="tooltip" title="{{ label_pattern_online_description}}">
<option value="yes" {{ edit_pattern_selected_yes|raw }}>{{ label_online }}</option>
<option value="no" {{ edit_pattern_selected_no|raw }}>{{ label_offline }}</option>
</select> </select>
</div> </div>
</div> <!-- Custom request method -->
<div class="control-group types typeWebsite"> {{ macro.input_field("text", "request_method", "requestMethod types typeWebsite", "request_method", label_custom_request_method, edit_value_request_method, null, "50") }}
<label class="control-label" for="redirect_check">{{ label_redirect_check }}</label> <!-- Post field -->
<div class="controls"> {{ macro.input_field("text", "post_field", "types typeWebsite typeGroup", "post_field", label_post_field, edit_value_post_field, "param1=val1&param2=val2&...", "50", 'post_field_help', label_post_field_description) }}
<select id="redirect_check" name="redirect_check" data-toggle="tooltip" title="{{ label_redirect_check_description}}"> <!-- Pattern -->
<option value="ok" {{ edit_redirect_check_selected_ok|raw }}>{{ label_ok }}</option> {{ macro.input_field("text", "pattern", "types typeWebsite", "pattern", label_pattern, edit_value_pattern, null, "255", 'pattern_help', label_pattern_description) }}
<option value="bad" {{ edit_redirect_check_selected_bad|raw }}>{{ label_bad }}</option> <!-- Pattern online/offline (Didn't use the macro because of the custom col.) -->
</select> <div class="form-group form-row types typeWebsite">
<label for="pattern_online" class="col-form-label col-md-6">{{ label_pattern_online }}</label>
<div class="col-md-6 p-0">
<select id="pattern_online" name="pattern_online" class="custom-select" aria-describedby="pattern_online">
<option value="yes" {{ edit_pattern_selected_yes|raw }}>{{ label_online }}</option>
<option value="no" {{ edit_pattern_selected_no|raw }}>{{ label_offline }}</option>
</select>
</div>
<small id="pattern_online_help" class="form-text text-muted p-1">{{ label_pattern_online_description }}</small>
</div> </div>
</div> <!-- Redirect check (Didn't use the macro because of the custom col.) -->
<div class="control-group types typeWebsite"> <div class="form-group form-row types typeWebsite">
<label class="control-label" for="allow_http_status">{{ label_allow_http_status }}</label> <label for="redirect_check" class="col-form-label col-md-7">{{ label_redirect_check }}</label>
<div class="controls"> <div class="col-md-5 p-0">
<input type="text" id="allow_http_status" name="allow_http_status" value="{{ edit_value_allow_http_status }}" maxlength="255" data-toggle="tooltip" title="{{ label_allow_http_status_description }}" /> <select id="redirect_check" name="redirect_check" class="custom-select" aria-describedby="redirect_check_help">
<option value="ok" {{ edit_redirect_check_selected_ok|raw }}>{{ label_ok }}</option>
<option value="bad" {{ edit_redirect_check_selected_bad|raw }}>{{ label_bad }}</option>
</select>
</div>
<small id="redirect_check_help" class="form-text text-muted p-1">{{ label_redirect_check_description }}</small>
</div>
<!-- Allow HTTP codes -->
{{ macro.input_field("text", "allow_http_status", "types typeWebsite", "allow_http_status", label_allow_http_status, edit_value_allow_http_status, "401|403", "255", 'allow_http_status_help', label_allow_http_status_description) }}
<!-- Header (Didn't use the macro because of the custom col.) -->
<div class="form-group form-row types typeWebsite">
<div class="col-md-6">
<label for="header_name">{{ label_header_name }}</label>
<input type="text" class="form-control" name="header_name" id="header_name" value="{{ edit_value_header_name }}"
maxlength="255" aria-describedby="header_name_help">
<small id="header_name_help" class="form-text text-muted">{{ label_header_name_description }}</small>
</div>
<div class="col-md-6">
<label for="header_value">{{ label_header_value }}</label>
<input type="text" class="form-control" name="header_value" id="header_value" value="{{ edit_value_header_value }}"
maxlength="255" aria-describedby="header_value_help">
<small id="header_value_help" class="form-text text-muted">{{ label_header_value_description }}</small>
</div> </div>
</div> </div>
<div class="control-group types typeWebsite"> <!-- Warning threshold -->
<label class="control-label" for="header_name">{{ label_header }}</label> {{ macro.input_field("number", "warning_threshold", null, "warning_threshold", label_warning_threshold, edit_value_warning_threshold, "0", "5", 'warning_threshold_help', label_warning_threshold_description) }}
<div class="controls"> <!-- Timeout -->
<input type="text" id="header_name" name="header_name" value="{{ edit_value_header_name }}" maxlength="255" data-toggle="tooltip" title="{{ label_header_name_description }}" /> {{ macro.input_field("number", "timeout", null, "timeout", label_timeout, edit_value_timeout, null, "10", 'timeout_help', label_timeout_description) }}
<input type="text" id="header_value" name="header_value" value="{{ edit_value_header_value }}" maxlength="255" data-toggle="tooltip" title="{{ label_header_value_description }}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="warning_threshold">{{ label_warning_threshold }}</label>
<div class="controls">
<input class="input-mini" type="text" id="warning_threshold" name="warning_threshold" value="{{ edit_value_warning_threshold }}" maxlength="5" data-toggle="tooltip" title="{{ label_warning_threshold_description }}" />
</div>
</div>
<div class="control-group types typeWebsite">
<label class="control-label" for="timeout">{{ label_timeout }}</label>
<div class="controls">
<input class="input-mini" type="text" id="timeout" name="timeout" value="{{ edit_value_timeout }}" placeholder="{{ default_value_timeout }}" maxlength="10" data-toggle="tooltip" title="{{ label_timeout_description }}" /> s
</div>
</div> </div>
</fieldset> </fieldset>
<fieldset class="types typeWebsite">
<fieldset> <legend>{{ label_authentication_settings }} ({{ label_optional }})</legend>
<legend class="types typeWebsite">{{ label_authentication_settings}}</legend> <div class="col">
<div class="control-group types typeWebsite"> <!-- Website username -->
<label class="control-label" for="website_username">{{ label_website_username }}</label> {{ macro.input_field("text", "website_username", null, "website_username", label_website_username, edit_value_website_username, null, "255", 'website_username_help', label_website_username_description, null, true, null, null, true) }}
<div class="controls"> <!-- website password -->
<input type="text" id="website_username" name="website_username" value="{{ edit_website_username }}" data-toggle="tooltip" title="{{ label_website_username_description }}" autocomplete="off" readonly onfocus="this.removeAttribute('readonly');"/> {{ macro.input_field("password", "website_password", null, "website_password", label_website_password, edit_value_website_password, null, "10", 'website_password_help', label_website_password_description, null, true, null, null, true) }}
</div>
</div>
<div class="control-group types typeWebsite">
<label class="control-label" for="website_password">{{ label_website_password }}</label>
<div class="controls">
<input type="password" id="website_password" name="website_password" value="{{ edit_website_password }}" data-toggle="tooltip" title="{{ label_website_password_description }}" autocomplete="off" readonly onfocus="this.removeAttribute('readonly');"/>
</div>
</div> </div>
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>{{ label_fieldset_monitoring }}</legend> <legend>{{ label_fieldset_monitoring }}</legend>
<div class="control-group"> <div class="col">
<label class="control-label" for="active">{{ label_monitoring }}</label> <!-- Monitor -->
<div class="controls"> {{ macro.input_select_monitoring("active", "active", label_monitoring, edit_active_selected, label_yes, label_no) }}
<select id="active" name="active"> <!-- Email -->
<option value="yes" {{ edit_active_selected_yes|raw }}>{{ label_yes }}</option> {{ macro.input_select_monitoring("email", "email", label_send_email, edit_email_selected, label_yes, label_no, warning_email, label_warning_email) }}
<option value="no" {{ edit_active_selected_no|raw }}>{{ label_no }}</option> <!-- SMS -->
</select> {{ macro.input_select_monitoring("sms", "sms", label_send_sms, edit_sms_selected, label_yes, label_no, warning_sms, label_warning_sms) }}
</div> <!-- Pushover -->
</div> {{ macro.input_select_monitoring("pushover", "pushover", label_send_pushover, edit_pushover_selected, label_yes, label_no, warning_pushover, label_warning_pushover) }}
<div class="control-group {{ control_class_email }}"> <!-- Telegram -->
<label class="control-label" for="email">{{ label_send_email }} {{ macro.input_select_monitoring("telegram", "telegram", label_send_telegram, edit_telegram_selected, label_yes, label_no, warning_telegram, label_warning_telegram) }}
{% if warning_email %} <p class="help-inline"><i class="icon-warning-sign" data-toggle="tooltip" title="{{ label_warning_email }}"></i></p> {% endif %}
</label>
<div class="controls">
<select id="email" name="email">
<option value="yes" {{ edit_email_selected_yes|raw }}>{{ label_yes }}</option>
<option value="no" {{ edit_email_selected_no|raw }}>{{ label_no }}</option>
</select>
</div>
</div>
<div class="control-group {{ control_class_sms }}">
<label class="control-label" for="sms">{{ label_send_sms }}
{% if warning_sms %} <p class="help-inline"><i class="icon-warning-sign" data-toggle="tooltip" title="{{ label_warning_sms }}"></i></p> {% endif %}
</label>
<div class="controls">
<select id="sms" name="sms">
<option value="yes" {{ edit_sms_selected_yes|raw }}>{{ label_yes }}</option>
<option value="no" {{ edit_sms_selected_no|raw }}>{{ label_no }}</option>
</select>
</div>
</div>
<div class="control-group {{ control_class_pushover }}">
<label class="control-label" for="pushover">{{ label_pushover }}
{% if warning_pushover %} <p class="help-inline"><i class="icon-warning-sign" data-toggle="tooltip" title="{{ label_warning_pushover }}"></i></p> {% endif %}
</label>
<div class="controls">
<select id="pushover" name="pushover">
<option value="yes" {{ edit_pushover_selected_yes|raw }}>{{ label_yes }}</option>
<option value="no" {{ edit_pushover_selected_no|raw }}>{{ label_no }}</option>
</select>
</div>
</div>
<div class="control-group {{ control_class_telegram }}">
<label class="control-label" for="telegram">{{ label_telegram }}
{% if warning_telegram %} <p class="help-inline"><i class="icon-warning-sign" data-toggle="tooltip" title="{{ label_warning_telegram }}"></i></p> {% endif %}
</label>
<div class="controls">
<select id="telegram" name="telegram">
<option value="yes" {{ edit_telegram_selected_yes|raw }}>{{ label_yes }}</option>
<option value="no" {{ edit_telegram_selected_no|raw }}>{{ label_no }}</option>
</select>
</div>
</div> </div>
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>{{ label_fieldset_permissions }}</legend> <legend>{{ label_fieldset_permissions }}</legend>
<div class="control-group"> <!-- Permissions -->
<label class="control-label" for="user_id">{{ label_users }}</label> {{ macro.input_select_multiple("user_id", "user_id[]", label_permissions, label_search, users, label_please_select) }}
<div class="controls"> {{ macro.button_save(null, label_save) }}
<select class="multiselect" multiple="multiple" id="user_id" name="user_id[]"> <a class="btn" href="{{ url_go_back|raw }}">{{ label_go_back }}</a>
{% for user in users %}
<option value="{{ user.user_id }}" {{ user.edit_selected|raw }}> {{ user.name }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="form-actions">
<button class="btn btn-success" type="submit">{{ label_save }}</button>
<a class="btn" href="{{ url_go_back|raw }}" >{{ label_go_back }}</a>
</div>
</fieldset> </fieldset>
</form> {{ macro.input_csrf() }}
</form>

View File

@ -1,127 +1,302 @@
<table class="table table-bordered"> <div class="container">
<colgroup> <div class="row">
<col class="oce-first" /> <div class="card text-white text-center col-md-2 pl-0 pr-0 mb-4 {% if status|lower == 'on' %}bg-success{% elseif status|lower == 'warning' %}bg-warning{% elseif status|lower == 'off' %}bg-danger{% endif %}">
<col /> <div class="card-body d-flex align-items-center justify-content-center">
</colgroup> {% if status|lower == 'on' %}
<thead> <i class="fas fa-check-circle fa-6x"></i>
<tr class="head"> {% elseif status|lower == 'warning' %}
<th colspan="2"> <i class="fas fa-exclamation-triangle fa-6x"></i>
<div class="btn-group"> {% elseif status|lower == 'off' %}
<button class="btn btn-success dropdown-toggle" data-toggle="dropdown"> <i class="fas fa-times-circle fa-6x"></i>
<i class="icon-th icon-white"></i>&nbsp;{{ label }} {% else %}
<span class="caret"></span> <i class="fas fa-question-circle fa-6x"></i>
</button>
<ul class="dropdown-menu">
{% for option in options %}
<li class="{{ option.class_active }}"><a href="{{ option.url|raw }}">{{ option.label }}</a>
{% endfor %}
</ul>
</div>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ label_status }}:</td>
<td>
<span class="label label-status-{{ status }}">
<a href="#" title="{{ error }}">{{ status }}</a>
</span>&nbsp;{{ error }}
</td>
</tr>
<tr>
<td>{{ label_type }}:</td>
<td>{{ type }}</td>
</tr>
<tr>
<td>{{ label_domain }}:</td>
<td>{{ ip|raw }}</td>
</tr>
<tr>
<td>{{ label_port }}:</td>
<td>{{ port }}</td>
</tr>
<tr>
<td>{{ label_last_check }}:</td>
<td>{{ last_check }}</td>
</tr>
<tr>
<td>{{ label_last_online }}:</td>
<td>{{ last_online }}</td>
</tr>
<tr>
<td>{{ label_last_offline }}:</td>
<td>{{ last_offline }} {{ last_offline_duration }}</td>
</tr>
<tr>
<td>{{ label_rtime }}:</td>
<td>{{ rtime }} s</td>
</tr>
<tr>
<td>{{ label_monitoring }}:</td>
<td>{{ active }}</td>
</tr>
<tr>
<td>{{ label_email }}:</td>
<td>{{ email }}</td>
</tr>
<tr>
<td>{{ label_sms }}:</td>
<td>{{ sms }}</td>
</tr>
<tr>
<td>{{ label_pushover }}:</td>
<td>{{ pushover }}</td>
</tr>
<tr>
<td>{{ label_telegram }}:</td>
<td>{{ telegram }}</td>
</tr>
<tr>
<td>{{ label_timeout }}:</td>
<td>{{ timeout }} s</td>
</tr>
<tr>
<td>{{ label_website_username }}:</td>
<td>{{ website_username }}</td>
</tr>
<tr>
<td>{{ label_website_password }}:</td>
<td>
{% if (website_password is not empty) %}
******
{% endif %} {% endif %}
</td> </div>
</tr> </div>
<tr> <div class="card col-md-5 ml-auto pl-0 pr-0 mb-4">
<td id="advanced">{{ label_advanced }}&nbsp;<i class="icon-expand-arrow"></i></td> <div class="card-header">
<td>&nbsp;</td> {{ label }}
</tr> </div>
<tr class="advanced"> <ul class="list-group list-group-flush">
<td>{{ label_last_error }}:</td> <li class="list-group-item">
<td>{{ last_error }}</td> <dl class="row">
</tr> <dt class="col-md-4">{{ label_domain }}:</dt>
<tr class="advanced"> <dd class="col-md-8">{{ ip|raw }}</dd>
<td>{{ label_last_output }}:</td> </dl>
<td>{{ last_output }}</td> </li>
</tr> {% if type|lower == 'service' %}
<tr class="advanced"> <li class="list-group-item">
<td>{{ label_last_error_output }}:</td> <dl class="row">
<td>{{ last_error_output }}</td> <dt class="col-md-4">{{ label_port }}:</dt>
</tr> <dd class="col-md-8">{{ port }}</dd>
{% if has_admin_actions %} </dl>
<tr> </li>
<td class="hidden-small">&nbsp;</td> {% endif %}
<td class="action-small" colspan="2"> <li class="list-group-item">
<a class="btn btn-success" href="{{ url_edit|raw }}"> <dl class="row">
<i class="icon-edit icon-white"></i>&nbsp;{{ label_edit }} <dt class="col-md-4">{{ label_status }}:</dt>
</a> <dd class="col-md-8">{{ status }}</dd>
<a class="btn btn-danger show-modal" href="{{ url_delete|raw }}" data-modal-id="delete" data-modal-param="{{ label }}"> </dl>
<i class="icon-remove icon-white"></i>&nbsp;{{ label_delete }} </li>
</a> <li class="list-group-item">
</td> <dl class="row">
</tr> <dt class="col-md-4">{{ label_rtime }}:</dt>
{% endif %} <dd class="col-md-8">{{ rtime }} {{ label_seconds }}</dd>
</tbody> </dl>
</table> </li>
{{ html_history|raw }} </ul>
</div>
<div class="card col-md-4 ml-auto pl-0 pr-0 mb-4">
<div class="card-header">
{{ label_settings }}
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_type }}:</dt>
<dd class="col-md-6">{{ type }}</dd>
</dl>
</li>
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_warning_threshold }}:</dt>
<dd class="col-md-6">{{ warning_threshold }}</dd>
</dl>
</li>
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_timeout }}:</dt>
<dd class="col-md-6">{{ timeout }} {{ label_seconds }}</dd>
</dl>
</li>
</ul>
</div>
<!--
{% if type|lower == 'website' %}
<div class="card col-md-3 pl-0 pr-0 mb-4">
<div class="card-header">
{{ label_authentication_settings }}
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_website_username }}:</dt>
<dd class="col-md-6">{% if website_username is not empty %}{{ website_username }}{% else %}-{% endif %}</dd>
</dl>
</li>
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_website_password }}:</dt>
<dd class="col-md-6">{% if website_password is not empty %}******{% else %}-{% endif %}</dd>
</dl>
</li>
</ul>
</div><div class="card col-md-4 pl-0 pr-0 mb-4 ml-auto">
<div class="card-header">
{{ label_settings }}
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_header_name }}:</dt>
<dd class="col-md-6">{% if header_name is not empty %}{{ header_name }}{% else %}-{% endif %}</dd>
</dl>
</li>
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_header_value }}:</dt>
<dd class="col-md-6">{% if header_value is not empty %}{{ header_value }}{% else %}-{% endif %}</dd>
</dl>
</li>
</ul>
</div>
<div class="card col-md-4 pl-0 pr-0 mb-4 ml-auto">
<div class="card-header">
{{ label_settings }}
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_request_method }}:</dt>
<dd class="col-md-6">{% if request_method is not empty %}{{ request_method }}{% else %}-{% endif %}</dd>
</dl>
</li>
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_post_field }}:</dt>
<dd class="col-md-6">{% if post_field is not empty %}{{ post_field }}{% else %}-{% endif %}</dd>
</dl>
</li>
</ul>
</div>
<div class="card col-md-4 pl-0 pr-0 mb-4">
<div class="card-header">
{{ label_settings }}
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_pattern_online }}:</dt>
<dd class="col-md-6">{% if pattern_online == 'yes' %}{{ label_online }}{% else %}{{ label_offline }}{% endif %}</dd>
</dl>
</li>
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_pattern }}:</dt>
<dd class="col-md-6">{% if pattern is not empty %}{{ pattern }}{% else %}-{% endif %}</dd>
</dl>
</li>
</ul>
</div>
<div class="card col-md-3 pl-0 pr-0 mb-4 ml-auto">
<div class="card-header">
{{ label_settings }}
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_request_method }}:</dt>
<dd class="col-md-6">{% if request_method is not empty %}{{ request_method }}{% else %}-{% endif %}</dd>
</dl>
</li>
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_post_field }}:</dt>
<dd class="col-md-6">{% if post_field is not empty %}{{ post_field }}{% else %}-{% endif %}</dd>
</dl>
</li>
</ul>
</div>
<div class="card col-md-4 pl-0 pr-0 mb-4 ml-auto">
<div class="card-header">
{{ label_settings }}
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_redirect_check }}:</dt>
<dd class="col-md-6">{% if redirect_check is not empty %}{{ redirect_check }}{% else %}-{% endif %}</dd>
</dl>
</li>
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_allow_http_status }}:</dt>
<dd class="col-md-6">{% if allow_http_status is not empty %}{{ allow_http_status }}{% else %}-{% endif %}</dd>
</dl>
</li>
</ul>
</div>
{% endif %}
-->
<div class="card col-md-3 pl-0 pr-0 mb-4">
<div class="card-header">
{{ label_status }}
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_last_online }}:</dt>
<dd class="col-md-6">{{ last_online }}</dd>
</dl>
</li>
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_last_offline }}:</dt>
<dd class="col-md-6">{{ last_offline }}</dd>
</dl>
</li>
<li class="list-group-item">
<dl class="row">
<dt class="col-md-6">{{ label_last_check }}:</dt>
<dd class="col-md-6">{{ last_check }}</dd>
</dl>
</li>
</ul>
</div>
<div class="card col-md-6 ml-auto pl-0 pr-0 mb-4">
<div class="card-header">
{{ label_output }}
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">
<dl class="row">
<dt class="col-md-3">{{ label_last_error }}:</dt>
<dd class="col-md-9">{{ last_error }}</dd>
</dl>
</li>
<li class="list-group-item">
<dl class="row">
<dt class="col-md-3">{{ label_last_output }}:</dt>
<dd class="col-md-9">{{ last_output }}</dd>
</dl>
</li>
<li class="list-group-item">
<dl class="row">
<dt class="col-md-3">{{ label_last_error_output }}:</dt>
<dd class="col-md-9">{{ last_error_output }}</dd>
</dl>
</li>
</ul>
</div>
<div class="card col-md-2 ml-auto pl-0 pr-0 mb-4">
<div class="card-header">
{{ label_fieldset_monitoring }}
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">
{{ label_monitoring }}:
{% if active|lower == 'yes' %}
<i class="fas fa-eye float-right"></i>
{% elseif active|lower == 'no' %}
<i class="fas fa-eye-slash float-right"></i>
{% else %}
<i class="fas fa-question-circle float-right" title="Value from database should either be yes or no."></i>
{% endif %}
</li>
<li class="list-group-item">
{{ label_email }}:
{% if email|lower == 'yes' %}
<i class="fas fa-bell float-right"></i>
{% elseif email|lower == 'no' %}
<i class="fas fa-bell-slash float-right"></i>
{% else %}
<i class="fas fa-question-circle float-right" title="Value from database should either be yes or no."></i>
{% endif %}
</li>
<li class="list-group-item">
{{ label_sms }}:
{% if sms|lower == 'yes' %}
<i class="fas fa-bell float-right"></i>
{% elseif sms|lower == 'no' %}
<i class="fas fa-bell-slash float-right"></i>
{% else %}
<i class="fas fa-question-circle float-right" title="Value from database should either be yes or no."></i>
{% endif %}
</li>
<li class="list-group-item">
{{ label_pushover }}:
{% if pushover|lower == 'yes' %}
<i class="fas fa-bell float-right"></i>
{% elseif pushover|lower == 'no' %}
<i class="fas fa-bell-slash float-right"></i>
{% else %}
<i class="fas fa-question-circle float-right" title="Value from database should either be yes or no."></i>
{% endif %}
</li>
<li class="list-group-item">
{{ label_telegram }}:
{% if telegram|lower == 'yes' %}
<i class="fas fa-bell float-right"></i>
{% elseif telegram|lower == 'no' %}
<i class="fas fa-bell-slash float-right"></i>
{% else %}
<i class="fas fa-question-circle float-right" title="Value from database should either be yes or no."></i>
{% endif %}
</li>
</ul>
</div>
</div>
<div class="row">
{{ html_history|raw }}
</div>
</div>

View File

@ -1,4 +1,14 @@
<div class="btn-group" data-toggle="buttons-radio"> <div class="row">
<button class="btn {{ block_layout_active }}" data-toggle="tab" data-target="#flow-layout" onclick="psm_saveLayout(0)"><i class="icon-th-large"></i></button> <div class="float-right btn-group btn-group-sm mb-3" role="group">
<button class="btn {{ list_layout_active }}" data-toggle="tab" data-target="#list-layout" onclick="psm_saveLayout(1)"><i class="icon-th-list"></i></button> <button type="button" class="btn btn-secondary {% if block_layout_active %} active {% endif %}"
id="block-layout" aria-label="Block layout"
onclick="psm_saveLayout(0)">
<i class="fas fa-th"></i>
</button>
<button type="button" class="btn btn-secondary {% if list_layout_active %} active {% endif %}"
id="table-layout" aria-label="List layout"
onclick="psm_saveLayout(1)">
<i class="fas fa-bars"></i>
</button>
</div>
</div> </div>

View File

@ -1,66 +1,89 @@
<div class="tab-content"> <div class="container">
<input type="hidden" name="saveLayout_csrf" value="{{ csrf_token(csrf_key|default('')) }}" /> <input type="hidden" name="saveLayout_csrf" value="{{ csrf_token(csrf_key|default('')) }}" />
<div id="flow-layout" class="tab-pane {{ block_layout_active }}"> <div id="flow-layout" class="{{ block_layout_active }}" aria-labelledby="block-layout">
<div class="entity-container"> <div class="row">
{% for server in servers_offline %} {% for server in servers_offline %}
<div class="offline"> <div class="col-sm-4 col-md-3">
<div class="entity {{ server.class_warning }}" onclick="window.location.href='{{ server.url_view|raw }}'"> <div class="card text-white bg-danger mb-3" onclick="window.location.href='{{ server.url_view|raw }}'">
<h2>{{ server.label }}</h2> <div class="card-header">{{ server.label }}<span class="sr-only"> ({{ label_offline }})</span></div>
<p>{{ label_last_online }}: {{ server.last_online_nice }}</p> <div class="card-body">
<p>{{ label_last_check }}: {{ server.last_checked_nice }}</p> <p class="card-text">
{{ label_last_online }}: {{ server.last_online_nice }}<br>
{{ label_last_check }}: {{ server.last_checked_nice }}
</p>
</div>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}
{% for server in servers_online %} {% for server in servers_online %}
<div class="online"> <div class="col-sm-4 col-md-3">
<div class="entity" onclick="window.location.href='{{ server.url_view|raw }}'"> <div class="card text-white bg-success mb-3" onclick="window.location.href='{{ server.url_view|raw }}'">
<h2>{{ server.label }}</h2> <div class="card-header">{{ server.label }}<span class="sr-only"> ({{ label_online }})</span></div>
<p>{{ label_last_online }}: {{ server.last_online_nice }}</p> <div class="card-body">
<p>{{ label_last_offline }}: {{ server.last_offline_nice }} {{ server.last_offline_duration_nice }}</p> <p class="card-text">
<p>{{ label_rtime }}: {{ server.rtime }}s</p> {{ label_last_online }}: {{ server.last_online_nice }}<br>
{{ label_last_offline }}: {{ server.last_offline_nice }} {{ server.last_offline_duration_nice }}<br>
{{ label_rtime }}: {{ server.rtime }}
</p>
</div>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}
{% if not servers_offline and not servers_online %}
{{ label_none }}
<!-- TODO knop om nieuwe server toe te voegen -->
{% endif %}
</div> </div>
</div> </div>
<div id="list-layout" class="tab-pane {{ list_layout_active }}"> <div id="list-layout" class="{{ list_layout_active }}" aria-labelledby="block-layout">
<div class="entity-container"> <div class="row table-responsive">
<table class="table table-bordered"> {% if servers_offline or servers_online %}
<table class="table table-bordered table-hover">
{% if servers_offline %}
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">{{ label_last_online }}</th>
<th scope="col">{{ label_last_check }}</th>
<th scope="col">{{ label_rtime }}</th>
</tr>
</thead>
<tbody> <tbody>
{% for server in servers_offline %} {% for server in servers_offline %}
<tr class="row-offline" onclick="window.location.href='{{ server.url_view|raw }}'"> <tr class="bg-danger text-white" onclick="window.location.href='{{ server.url_view|raw }}'">
<td class="{{ server.class_warning }}"><div class="server-name">{{ server.label }}</div> <th>{{ server.label }}<span class="sr-only"> ({{ label_offline }})</span></th>
<div class="visible-phone"> <td>{{ server.last_online_nice }}</td>
<div class="table-body"> <td>{{ server.last_checked_nice }}</td>
<div class="table-row"><div class="table-cell-details tight">{{ label_last_online }}: &nbsp;</div><div class="table-cell-details">{{ server.last_online_nice }}</div></div> <td></td>
<div class="table-row"><div class="table-cell-details tight">{{ label_last_check }}: &nbsp;</div><div class="table-cell-details">{{ server.last_checked_nice }}</div></div>
<div class="table-row"><div class="table-cell-details tight">&nbsp;</div><div class="table-cell-details">&nbsp;</div></div>
</div>
</div>
</td>
<td class="{{ server.class_warning }} hidden-phone">{{ label_last_online }}: {{ server.last_online_nice }}</td>
<td class="{{ server.class_warning }} hidden-phone">{{ label_last_check }}: {{ server.last_checked_nice }}</td>
<td class="{{ server.class_warning }} hidden-phone"></td>
</tr>
{% endfor %}
{% for server in servers_online %}
<tr class="row-online" onclick="window.location.href='{{ server.url_view|raw }}'">
<td><div class="server-name">{{ server.label }}</div>
<div class="visible-phone">
<div class="table-body">
<div class="table-row"><div class="table-cell-details tight">{{ label_last_online }}: &nbsp;</div><div class="table-cell-details">{{ server.last_online_nice }}</div></div>
<div class="table-row"><div class="table-cell-details tight">{{ label_last_offline }}: &nbsp;</div><div class="table-cell-details">{{ server.last_offline_nice }} {{ server.last_offline_duration_nice }}</div></div>
<div class="table-row"><div class="table-cell-details tight">{{ label_rtime }}: &nbsp;</div><div class="table-cell-details">{{ server.rtime }}</div></div>
</div>
</div>
</td>
<td class="hidden-phone">{{ label_last_online }}: {{ server.last_online_nice }}</td>
<td class="hidden-phone">{{ label_last_offline }}: {{ server.last_offline_nice }} {{ server.last_offline_duration_nice }}</td>
<td class="hidden-phone">{{ label_rtime }}: {{ server.rtime }}s</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
{% endif %}
{% if servers_online %}
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">{{ label_last_online }}</th>
<th scope="col">{{ label_last_offline }}</th>
<th scope="col">{{ label_rtime }}</th>
</tr>
</thead>
<tbody>
{% for server in servers_online %}
<tr class="bg-success text-white" onclick="window.location.href='{{ server.url_view|raw }}'">
<th>{{ server.label }}<span class="sr-only"> ({{ label_online }})</span></th>
<td>{{ server.last_online_nice }}</td>
<td>{{ server.last_offline_nice }} {{ server.last_offline_duration_nice }}</td>
<td>{{ server.rtime }}s</td>
</tr>
{% endfor %}
</tbody>
{% endif %}
</table> </table>
{% else %}
{{ label_none }}
<!-- TODO knop om nieuwe server toe te voegen -->
{% endif %}
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,10 +1,9 @@
{% import 'main/macros.tpl.html' as macro %} {% import 'main/macros.tpl.html' as macro %}
<div class="container"> <form class="form-forgot text-center" method="POST">
<form class="form-signin" method="post"> {{ macro.input_csrf() }}
{{ macro.csrf_input() }} <h1 class="h3 mb-3 font-weight-normal">{{ title_forgot }}</h1>
<h3 class="form-signin-heading">{{ title_forgot }}</h3> <label for="input-username" class="sr-only">{{ label_username }}</label>
<input type="text" name="user_name" class="input-block-level" placeholder="{{ label_username }}" value="{{ value_user_name }}" required> <input type="text" name="user_name" id="input-username" class="form-control mb-3" value="{{ value_user_name }}" placeholder="{{ label_username }}" required autofocus>
<button class="btn btn-primary" type="submit">{{ label_submit }}</button> <button class="btn btn-lg btn-primary btn-block" type="submit">{{ label_submit }}</button>
<a class="btn" href="?">{{ label_go_back }}</a> <a class="btn" href="?">{{ label_go_back }}</a>
</form> </form>
</div>

View File

@ -1,15 +1,16 @@
{% import 'main/macros.tpl.html' as macro %} {% import 'main/macros.tpl.html' as macro %}
<div class="container"> <form class="form-signin text-center" method="POST">
<form class="form-signin" method="post"> {{ macro.input_csrf() }}
{{ macro.csrf_input() }} <h1 class="h3 mb-3 font-weight-normal">{{ title_sign_in }}</h1>
<h3 class="form-signin-heading">{{ title_sign_in }}</h3> <label for="input-username" class="sr-only">{{ label_username }}</label>
<input type="text" name="user_name" class="input-block-level" placeholder="{{ label_username }}" value="{{ value_user_name }}" required> <input type="text" name="user_name" id="input-username" class="form-control" value="{{ value_user_name }}" placeholder="{{ label_username }}" required autofocus>
<input type="password" name="user_password" class="input-block-level" placeholder="{{ label_password }}" required> <label for="input-password" class="sr-only">{{ label_password }}</label>
<input type="hidden" name="action" value="login"> <input type="password" id="input-password" name="user_password" class="form-control" placeholder="{{ label_password }}" required>
<label class="checkbox"> <input type="hidden" name="action" value="login">
<input type="checkbox" name="user_rememberme" value="1" {{ value_rememberme }}> {{ label_remember_me }} <div class="custom-control custom-checkbox my-1 mr-sm-2">
</label> <input type="checkbox" name="user_rememberme" value="1" class="custom-control-input" id="input-rememberme" {{ value_rememberme }}>
<button class="btn btn-primary" type="submit">{{ label_login }}</button> <label class="custom-control-label" for="input-rememberme">{{ label_remember_me }}</label>
<a class="btn" href="?action=forgot">{{ label_password_forgot }}</a> </div>
</form> <button class="btn btn-lg btn-primary btn-block" type="submit">{{ label_login }}</button>
</div> <a class="btn" href="?action=forgot">{{ label_password_forgot }}</a>
</form>

View File

@ -1,12 +1,13 @@
{% import 'main/macros.tpl.html' as macro %} {% import 'main/macros.tpl.html' as macro %}
<div class="container"> <form class="form-reset text-center" method="POST">
<form class="form-signin" method="post"> {{ macro.input_csrf() }}
{{ macro.csrf_input() }} <h1 class="h3 mb-3 font-weight-normal">{{ title_reset }}</h1>
<h3 class="form-signin-heading">{{ title_reset }}</h3> <label for="input-username" class="sr-only">{{ label_username }}</label>
<input type="text" name="user_name" class="input-block-level" placeholder="{{ label_username }}" value="{{ value_user_name }}" required disabled="disabled"> <input type="text" name="user_name" id="input-username" class="form-control" value="{{ value_user_name }}" required disabled>
<input type="password" name="user_password_new" class="input-block-level" placeholder="{{ label_password }}" required autocomplete="off"> <label for="input-password" class="sr-only">{{ label_password }}</label>
<input type="password" name="user_password_repeat" class="input-block-level" placeholder="{{ label_password_repeat }}" required autocomplete="off"> <input type="password" id="input-password" name="user_password_new" class="form-control" placeholder="{{ label_password }}" required autofocus>
<button class="btn btn-primary" type="submit">{{ label_reset }}</button> <label for="input-password-repeat" class="sr-only">{{ label_password_repeat }}</label>
<a class="btn" href="?">{{ label_go_back }}</a> <input type="password" id="input-password-repeat" name="user_password_repeat" class="form-control mb-3" placeholder="{{ label_password_repeat }}" required>
</form> <button class="btn btn-lg btn-primary btn-block" type="submit">{{ label_reset }}</button>
</div> <a class="btn" href="?">{{ label_go_back }}</a>
</form>

View File

@ -1,92 +1,42 @@
{% import 'main/macros.tpl.html' as macro %} {% import 'main/macros.tpl.html' as macro %}
<form class="form-horizontal well" action="{{ form_action|raw }}" method="post"> <form name="edit_profile" class="col-md-6 pl-0 pr-0" action="{{ form_action|raw }}" id="edit_profile" method="post">
{{ macro.csrf_input() }} {{ macro.input_csrf() }}
<!-- General settings -->
<fieldset> <fieldset>
<div class="row-fluid"> <legend>{{ label_general }}</legend>
<div class="span6"> <!-- Username -->
<div class="control-group"> {{ macro.input_field("text", "user_name", null, "user_name", label_user_name, user_name, label_user_name, "64", null, null, null, null, true, true, "username") }}
<label class="control-label" for="user_name">{{ label_user_name }}</label> <!-- Name -->
<div class="controls"> {{ macro.input_field("text", "name", null, "name", label_name, name, label_name, "255", null, null, null, null, true, null, "name") }}
<input type="text" id="user_name" name="user_name" value="{{ user_name }}" maxlength="64" required autofocus=> <!-- Level -->
</div> {{ macro.input_field("text", "level", null, "level", label_level, level, label_level, null, null, null, null, null, null, null, null, true) }}
</div> <!-- Password -->
<div class="control-group"> {{ macro.input_field("password", "password", null, "password", label_password, null, placeholder_password, "255", null, null, null, null, null, null, "new-password") }}
<label class="control-label" for="name">{{ label_name }}</label> <!-- Password repeat -->
<div class="controls"> {{ macro.input_field("password", "password_repeat", null, "password_repeat", label_password_repeat, null, placeholder_password, "255", null, null, null, null, null, null, "new-password") }}
<input type="text" id="name" name="name" value="{{ name }}" maxlength="255" required> <!-- Email -->
</div> {{ macro.input_field("email", "email", null, "email", label_email, email, label_email, "255", null, null, null, null, true, null, "email") }}
</div> <!-- Mobile -->
<div class="control-group"> {{ macro.input_field("tel", "mobile", null, "mobile", label_mobile, mobile, label_mobile, "15", null, null, null, null, null, null, "tel") }}
<label class="control-label" for="level">{{ label_level }}</label> </fieldset>
<div class="controls"><input type="text" value="{{ level }}" disabled="disabled" /></div> <!-- Pushover settings -->
</div> <fieldset>
<div class="control-group"> <legend>{{ label_pushover }}</legend>
<label class="control-label" for="password">{{ label_password }}</label> <!-- pushover key -->
<div class="controls"> {{ macro.input_field("text", "pushover_key", null, "pushover_key", label_pushover_key, pushover_key, label_pushover_key, "255", "pushover_key_help", pushover_key_description) }}
<input type="password" id="password" name="password" maxlength="255" placeholder="{{ placeholder_password }}" /> <!-- pushover device -->
</div> {{ macro.input_field("text", "pushover_device", null, "pushover_device", label_pushover_device, pushover_device, label_pushover_device, "255", "pushover_device_help", pushover_device_description) }}
</div> </fieldset>
<div class="control-group"> <!-- Telegram settings -->
<label class="control-label" for="password_repeat">{{ label_password_repeat }}</label> <fieldset>
<div class="controls"> <legend>{{ label_telegram }}</legend>
<input type="password" id="password_repeat" name="password_repeat" maxlength="255" placeholder="{{ placeholder_password }}" /> <!-- telegram id -->
</div> <div class="form-group">
</div> <a class="btn btn-primary mb-2" href="{{ telegram_get_chat_id_url }}">{{ label_telegram_get_chat_id }}</a>
<div class="control-group">
<label class="control-label" for="email">{{ label_email }}</label>
<div class="controls">
<input type="text" id="email" name="email" value="{{ email }}" maxlength="255" required>
</div>
</div>
<div class="control-group">
<label class="control-label" for="email">{{ label_mobile }}</label>
<div class="controls">
<input type="text" id="mobile" name="mobile" value="{{ mobile }}" maxlength="15" />
</div>
</div>
</div> </div>
<div class="span6"> {{ macro.input_field("text", "telegram_id", null, "telegram_id", label_telegram_chat_id, telegram_id, label_telegram_chat_id, "255", "telegram_id_help", telegram_id_description) }}
<div class="control-group"> <button class="btn btn-primary show-modal" data-toggle="modal" data-modal-id="activateTelegram">{{ label_activate_telegram }}</button>
<label class="control-label">{{ label_pushover }}</label> {{ macro.input_hidden("activate_telegram", "0") }}
<div class="controls">{{ label_pushover_description|raw }} </div> {{ macro.button_save(null, label_save) }}
</div> </fieldset>
<div class="control-group"> </form>
<label class="control-label" for="mobile">{{ label_pushover_key }}</label>
<div class="controls">
<input type="text" id="pushover_key" name="pushover_key" value="{{ pushover_key }}" maxlength="255" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="mobile">{{ label_pushover_device }}</label>
<div class="controls">
<input type="text" id="pushover_device" name="pushover_device" value="{{ pushover_device }}" maxlength="255" data-toggle="tooltip" title="{{ label_pushover_device_description }}" />
</div>
</div>
<div class="control-group">
</div>
<div class="control-group">
<label class="control-label">{{ label_telegram }}</label>
<div class="controls">{{ label_telegram_description|raw }} <br><p><button class="btn btn-primary" onclick="window.open('{{ telegram_get_chat_id_url }}');return false;">{{ label_telegram_get_chat_id }}</button></p></div>
</div>
<div class="control-group">
<label class="control-label" for="mobile">{{ label_telegram_chat_id }}</label>
<div class="controls">
<input type="text" id="telegram_id" name="telegram_id" value="{{ telegram_id }}" maxlength="255" data-toggle="tooltip" title="{{ label_telegram_chat_id_description }}" />
</div>
</div>
<div class="control-group">
<div class="controls">
<button class="btn btn-primary show-modal" data-modal-id="activateTelegram">{{ label_activate_telegram }}</button>
<input type="hidden" name="activate_telegram" value="0" />
</div>
</div>
</div>
</div>
<div class="row-fluid">
<div class="form-actions">
<button class="btn btn-success" type="submit">{{ label_save }}</button>
</div>
</div>
</fieldset>
</form>

View File

@ -1,66 +1,49 @@
<table class="table table-bordered table-striped"> {% import 'main/macros.tpl.html' as macro %}
<thead> {{ macro.table_search(label_search) }}
<tr> <div class="table-responsive">
<th class="hidden-phone">{{ label_user }}</th> <table class="table table-striped table-hover table-bordered">
<th class="visible-desktop">{{ label_name }}</th> <thead>
<th class="visible-desktop">{{ label_level }}</th> <tr>
<th class="hidden-phone">{{ label_email }}</th> <th scope="col">{{ label_user }}</th>
<th class="hidden-phone">{{ label_mobile }}</th> <th scope="col" class="d-none d-lg-table-cell">{{ label_name }}</th>
<th class="hidden-phone">{{ label_servers }}</th> <th scope="col" class="d-none d-lg-table-cell">{{ label_level }}</th>
<th class="hidden-phone tight">{{ label_action }}</th> <th scope="col">{{ label_email }}</th>
</tr> <th scope="col">{{ label_mobile }}</th>
</thead> <th scope="col">{{ label_servers }}</th>
<tbody> <th scope="col">&#32</th>
{% for user in users %} </tr>
<tr> </thead>
<td> <tbody>
<div class="table-body"> {% for user in users %}
<div class="table-cell-title"> <tr>
<span class="nowrap"> <th scope="row">
<span class="hidden-desktop"> {% if user.level == '10' %}
{% if user.level == '10' %} <i class="fas fa-user-astronaut d-lg-none" title="{{ user.level_text }}"></i>&nbsp;
<i class="icon-admin" title="{{ user.level_text }}"></i>&nbsp; {% elseif user.level == '20' %}
{% elseif user.level == '20' %} <i class="fas fa-user d-lg-none" title="{{ user.level_text }}"></i>&nbsp;
<i class="icon-user" title="{{ user.level_text }}"></i>&nbsp; {% endif %}
{% endif %} {{ user.user_name }} <span class="d-lg-none">({{ user.name }})</span></th>
</span> <td class="d-none d-lg-table-cell">{{ user.name }}</td>
<span class="title">{{ user.user_name }}</span> <td class="d-none d-lg-table-cell">{{ user.level_text }}</td>
</span> <td>{{ user.email }}</td>
<span class="hidden-desktop">({{ user.name }})</span> <td>{{ user.mobile }}</td>
</div> <td>{% for server in user.emp_servers %} {{ server.label }}<br /> {% endfor %}</td>
<div class="table-cell tight"> <td>
<div class="visible-phone"> <div class="item-action dropdown">
<a class="btn btn-small" href="{{ user.url_edit|raw }}" title="{{ user.label_edit }}"> <a data-toggle="dropdown" class="icon"><i class="fas fa-ellipsis-v"></i></a>
<i class="icon-pencil"></i> <div class="dropdown-menu">
</a> <a class="dropdown-item" href="{{ user.url_edit|raw }}" title="{{ label_edit }}">
<a class="btn btn-small btn-danger show-modal" href="{{ user.url_delete|raw }}" title="{{ label_delete }}" data-modal-id="delete" data-modal-param="{{ user.user_name }}"> <i class="fas fa-edit"></i> {{ label_edit }}
<i class="icon-remove icon-white"></i> </a>
</a> <a class="dropdown-item show-modal" href="{{ user.url_delete|raw }}" title="{{ label_delete }}" data-modal-id="delete"
data-modal-param="{{ user.user_name }}">
<i class="fas fa-trash"></i> {{ label_delete }}
</a>
</div>
</div> </div>
</div> </td>
</div> </tr>
<div class="visible-phone"> {% endfor %}
<div class="table-body"> </tbody>
<div class="table-row"><div class="table-cell-details tight">{{ label_email }}:&nbsp;</div><div class="table-cell-details">{{ user.email }}</div></div> </table>
<div class="table-row"><div class="table-cell-details tight">{{ label_mobile }}:&nbsp;</div><div class="table-cell-details">{{ user.mobile }}</div></div> </div>
<div class="table-row"><div class="table-cell-details tight">{{ label_servers }}:&nbsp;</div><div class="table-cell-details">{% for server in user.emp_servers %} {{ server.label }}<br/> {% endfor %}</div></div>
</div>
</div>
</td>
<td class="visible-desktop nowrap"><div class="table-cell-title">{{ user.name }}</div></td>
<td class="visible-desktop tight"><div class="table-cell-title">{{ user.level_text }}</div></td>
<td class="hidden-phone tight"><div class="table-cell-title">{{ user.email }}</div></td>
<td class="hidden-phone tight"><div class="table-cell-title">{{ user.mobile }}</div></td>
<td class="hidden-phone"><div class="table-cell-title">{% for server in user.emp_servers %} {{ server.label }}<br/> {% endfor %}</div></td>
<td class="hidden-phone tight">
<a class="btn btn-small" href="{{ user.url_edit|raw }}" title="{{ label_edit }}">
<i class="icon-pencil"></i>
</a>
<a class="btn btn-small btn-danger show-modal" href="{{ user.url_delete|raw }}" title="{{ label_delete }}" data-modal-id="delete" data-modal-param="{{ user.user_name }}">
<i class="icon-remove icon-white"></i>
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@ -1,94 +1,33 @@
{% import 'main/macros.tpl.html' as macro %} {% import 'main/macros.tpl.html' as macro %}
<form class="form-horizontal well" action="{{ url_save|raw }}" method="post"> <form name="edit_user" action="{{ url_save|raw }}" class="col-md-6 pl-0 pr-0" id="edit_user" method="post" autocomplete="off">
{{ macro.csrf_input() }}
<fieldset> <fieldset>
<legend>{{ titlemode }}</legend> <legend>{{ titlemode }}</legend>
<div class="control-group"> <div class="col">
<label class="control-label" for="user_name">{{ label_user_name }}</label> <!-- Username -->
<div class="controls"> {{ macro.input_field("text", "user_name", null, "user_name", label_user_name, edit_value_user_name, null, "255", null, null, null, true, true) }}
<input type="text" id="user_name" name="user_name" value="{{ edit_value_user_name }}" maxlength="64" required> <!-- Name -->
</div> {{ macro.input_field("text", "name", null, "name", label_name, edit_value_name, null, "255", null, null, null, true) }}
<!-- Level -->
{{ macro.input_select("level", "level", label_level, levels, user_level) }}
<!-- Password -->
{{ macro.input_field("password", "password", null, "password", label_password, edit_value_password, placeholder_password, "255") }}
<!-- Password repeat -->
{{ macro.input_field("password", "password_repeat", null, "password_repeat", label_password_repeat, edit_value_password_repeat, placeholder_password, "255") }}
<!-- Email -->
{{ macro.input_field("email", "email", null, "email", label_email, edit_value_email, null, "255") }}
<!-- Mobile -->
{{ macro.input_field("tel", "mobile", null, "mobile", label_mobile, edit_value_mobile, null, "20") }}
<!-- Pushover_key -->
{{ macro.input_field("text", "pushover_key", null, "pushover_key", label_pushover_key, edit_value_pushover_key, null, "255") }}
<!-- Pushover_device -->
{{ macro.input_field("text", "pushover_device", null, "pushover_device", label_pushover_device, edit_value_pushover_device, null, "255") }}
<!-- Telegram_id -->
{{ macro.input_field("text", "telegram_id", null, "telegram_id", label_telegram_id, edit_value_telegram_id, null, "255") }}
<!-- Servers -->
{{ macro.input_select_multiple("server_id", "server_id[]", label_servers, label_search, servers, label_please_select) }}
</div> </div>
<div class="control-group"> {{ macro.button_save(null, label_save) }}
<label class="control-label" for="name">{{ label_name }}</label> <a class="btn" href="{{ url_go_back|raw }}">{{ label_go_back }}</a>
<div class="controls"> </fieldset>
<input type="text" id="name" name="name" value="{{ edit_value_name }}" maxlength="255" required> {{ macro.input_csrf() }}
</div> </form>
</div>
<div class="control-group">
<label class="control-label" for="level">{{ label_level }}</label>
<div class="controls">
<select id="level" name="level">
{% for level in levels %}
<option value="{{ level.value }}" {% if level.value == user_level %} selected="selected" {% endif %}>{{ level.label }}</option>
{% endfor %}
</select>
<p class="help-block">{{ label_level_description|raw }}</p>
</div>
</div>
<div class="control-group">
<label class="control-label" for="password">{{ label_password }}</label>
<div class="controls">
<input type="password" id="password" name="password" maxlength="255" placeholder="{{ placeholder_password }}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="password_repeat">{{ label_password_repeat }}</label>
<div class="controls">
<input type="password" id="password_repeat" name="password_repeat" maxlength="255" placeholder="{{ placeholder_password }}" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="email">{{ label_email }}</label>
<div class="controls">
<input type="text" id="email" name="email" value="{{ edit_value_email }}" maxlength="255" required>
</div>
</div>
<div class="control-group">
<label class="control-label" for="mobile">{{ label_mobile }}</label>
<div class="controls">
<input type="text" id="mobile" name="mobile" value="{{ edit_value_mobile }}" maxlength="15" />
</div>
</div>
<div class="control-group">
<label class="control-label">{{ label_pushover }}</label>
<div class="controls">{{ label_pushover_description|raw }} </div>
</div>
<div class="control-group">
<label class="control-label" for="pushover_key">{{ label_pushover_key }}</label>
<div class="controls">
<input type="text" id="pushover_key" name="pushover_key" value="{{ edit_value_pushover_key }}" maxlength="255" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="pushover_device">{{ label_pushover_device }}</label>
<div class="controls">
<input type="text" id="pushover_device" name="pushover_device" value="{{ edit_value_pushover_device }}" maxlength="255" data-toggle="tooltip" title="{{ label_pushover_device_description }}" />
</div>
</div>
<div class="control-group">
<label class="control-label">{{ label_telegram }}</label>
<div class="controls">{{ label_telegram_description|raw }} </div>
</div>
<div class="control-group">
<label class="control-label" for="telegram_id">{{ label_telegram_id }}</label>
<div class="controls">
<input type="text" id="telegram_id" name="telegram_id" value="{{ edit_value_telegram_id }}" maxlength="255" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="server_id">{{ label_servers }}</label>
<div class="controls">
<select class="multiselect" multiple="multiple" id="server_id" name="server_id[]">
{% for server in servers %}
<option value="{{ server.server_id }}" {{ server.edit_selected }}> {{ server.label }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="form-actions">
<button class="btn btn-success" type="submit">{{ label_save }}</button>
<button class="btn" onclick="history.back();return false;" >{{ label_go_back }}</button>
</div>
</fieldset>
</form>

View File

@ -1,14 +1,18 @@
<div id="{{ modal_id }}Modal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="{{ modal_id }}ModalLabel" aria-hidden="true"> <div class="modal fade" id="{{ modal_id }}Modal" tabindex="-1" role="dialog" aria-labelledby="{{ modal_id }}ModalLabel" aria-hidden="true">
<div class="modal-header"> <div class="modal-dialog modal-dialog-centered" role="document">
<h3 id="{{ modal_id }}ModalLabel">{{ modal_title }}</h3> <div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="{{ modal_id }}ModalLabel">{{ modal_title }}</h5>
</div>
<div class="modal-body">
{{ modal_body|raw }}
</div>
<div class="modal-footer">
{% if has_cancel %}
<button type="button" class="btn btn-secondary" data-dismiss="modal">{{ label_cancel }}</button>
{% endif %}
<button type="button" class="btn btn-{{ modal_button_type }} modalOKButton">{{ modal_button_label }}</button>
</div>
</div>
</div> </div>
<div class="modal-body"> </div>
<p>{{ modal_body|raw }}</p>
</div>
<div class="modal-footer">
{% if has_cancel %}
<button class="btn btn-default" data-dismiss="modal" aria-hidden="true">{{ label_cancel }}</button>
{% endif %}
<button class="btn btn-{{ modal_button_type }} modalOKButton" >{{ modal_button_label }}</button>
</div>
</div>

View File

@ -1,26 +1,15 @@
<div id="sidebar-container"> {% for item in items %}
<div class="sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header">{{ subtitle }}</li>
{% for item in items %}
<li class="{{ item.class_active }}">
{% if item.type == 'link' %} {% if item.type == 'link' %}
<a href="{{ item.url|raw }}"><i class="icon-{{ item.icon }}"></i>&nbsp;{{ item.label }}</a> <a class="nav-link {{ item.url|raw }} {{ item.class_active }}"><i class="fas fa-{{ item.icon }}"></i>&nbsp;{{ item.label }}</a>
{% elseif item.type == 'button' %} {% elseif item.type == 'button' %}
<button class="btn btn-{{ item.btn_class }}" onclick="{{ item.onclick|raw }}"><i class="icon-{{ item.icon }}"></i>&nbsp;{{ item.label }}</button> <a class="btn btn-{{ item.btn_class }} mr-2 mb-3 {{ item.class_active }}" title="{{ item.title }}" href="{{ item.url|raw }}" {% if item.modal_id != null %}data-toggle="modal" data-modal-id="{{ item.modal_id }}"{% endif %}><i class="fas fa-{{ item.icon }}"></i>&nbsp;{{ item.label }}</a>
{% elseif item.type == 'dropdown' %} {% elseif item.type == 'dropdown' %}
<div class="btn-group"> <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" aria-haspopup="true" aria-expanded="false"><i class="fas fa-{{ item.icon }}"></i>&nbsp;{{ item.label }}</a>
<button class="btn btn-{{ item.btn_class }} dropdown-toggle" data-toggle="dropdown"><i class="icon-{{ item.icon }}"></i>&nbsp;{{ item.label }} <span class="caret"></span></button> <div class="dropdown-menu">
<ul class="dropdown-menu"> {% for option in item.options %}
{% for option in item.options %} <a class="dropdown-item" href="{{ option.url|raw }}">{{ option.label }}</a>
<li class="{{ option.class_active }}"><a href="{{ option.url|raw }}">{{ option.label }}</a></li> {% endfor %}
{% endfor %}
</ul>
</div> </div>
{% endif %} {% endif %}
</li> {% endfor %}
{% endfor %} <div class="w-100"></div>
</ul>
<div class="clearfix"></div>
</div>
</div>

2
static/css/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,81 +0,0 @@
#main-container {
overflow: hidden;
}
#history-panel {
width: 100%;
max-width: 1100px;
}
.chart-row {
margin-bottom: 20px;
}
.chart-row:after {
clear:both;
}
.chart-container {
float: left;
width: 100%;
margin-right: -260px;
}
.chart-content {
margin-right: 260px;
}
.info-container {
float: right;
width: 250px;
}
.info-dropdown {
display: none;
}
.chart {
height: 300px;
width: 100%;
}
.server-info {
padding-top: 40px;
height: 200px;
}
.server-info ul {
list-style: none;
margin: 0;
}
.chart-selector {
}
@media (max-width: 767px) {
.chart-container {
margin-right: 0;
}
.chart-content {
margin-right: 0;
}
.info-container {
float: none;
clear: both;
width: 100%;
}
.info-dropdown {
display: block;
float: left;
}
.server-info {
display: none;
}
.chart-selector {
float: right;
}
}

2
static/css/search.min.css vendored Normal file
View File

@ -0,0 +1,2 @@
.search_input{color:white;border:0;outline:0;background:none;max-width:386px;width:0;caret-color:transparent;line-height:44px;-webkit-transition:width 0.4s linear;transition:width 0.4s linear}.search_input:not(:placeholder-shown){padding:0 10px;width:100%;max-width:450px;caret-color:red;-webkit-transition:width 0.4s linear;transition:width 0.4s linear}.searchbar{height:66px;max-width:450px;background-color:#353b48;border-radius:40px;padding:10px}.searchbar:hover>.search_icon{background:white;color:#e74c3c}.searchbar:hover>.search_input{padding:0 10px;max-width:450px;width:80%;min-width:100px;caret-color:red;-webkit-transition:width 0.4s linear;transition:width 0.4s linear}.search_icon{height:44px;width:44px;float:right;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:50%;color:white}.search_icon p{height:0.6em;font-weight:bold}
/*# sourceMappingURL=search.min.css.map */

View File

@ -0,0 +1,9 @@
{
"version": 3,
"mappings": "AAAA,AAAA,aAAa,AAAA,CACT,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,CAAC,CACV,UAAU,CAAE,IAAI,CAChB,SAAS,CAAE,KAAK,CAChB,KAAK,CAAE,CAAC,CACR,WAAW,CAAC,WAAW,CACvB,WAAW,CAAE,IAAI,CACjB,UAAU,CAAE,iBAAiB,CAQhC,AAjBD,AAUI,aAVS,AAUR,IAAK,CAAA,kBAAkB,CAAE,CACtB,OAAO,CAAE,MAAM,CACf,KAAK,CAAE,IAAI,CACX,SAAS,CAAE,KAAK,CAChB,WAAW,CAAC,GAAG,CACf,UAAU,CAAE,iBAAiB,CAChC,AAGL,AAAA,UAAU,AAAC,CACP,MAAM,CAAE,IAAI,CACZ,SAAS,CAAE,KAAK,CAChB,gBAAgB,CAAE,OAAO,CACzB,aAAa,CAAE,IAAI,CACnB,OAAO,CAAE,IAAI,CAehB,AApBD,AAOQ,UAPE,AAML,MAAM,CACD,YAAY,AAAA,CACV,UAAU,CAAE,KAAK,CACjB,KAAK,CAAE,OAAO,CACjB,AAVT,AAWQ,UAXE,AAML,MAAM,CAKD,aAAa,AAAA,CACX,OAAO,CAAE,MAAM,CACf,SAAS,CAAE,KAAK,CAChB,KAAK,CAAE,GAAG,CACV,SAAS,CAAE,KAAK,CAChB,WAAW,CAAC,GAAG,CACf,UAAU,CAAE,iBAAiB,CAChC,AAIT,AAAA,YAAY,AAAA,CACR,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,CACX,KAAK,CAAE,KAAK,CACZ,OAAO,CAAE,IAAI,CACb,eAAe,CAAE,MAAM,CACvB,WAAW,CAAE,MAAM,CACnB,aAAa,CAAE,GAAG,CAClB,KAAK,CAAC,KAAK,CAKd,AAbD,AASI,YATQ,CASR,CAAC,AAAC,CACE,MAAM,CAAE,KAAK,CACb,WAAW,CAAE,IAAI,CACpB",
"sources": [
"../scss/search.scss"
],
"names": [],
"file": "search.min.css"
}

View File

@ -1,681 +0,0 @@
body {
padding-top: 40px;
padding-left: 0px;
padding-right: 0px;
-webkit-text-size-adjust: none;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: moz-none;
-ms-user-select: none;
user-select: none;
}
body.black_background {
background: black;
}
body.black_background .page-header {
border-bottom: 0;
}
body.black_background .page-header h1 {
color: #888;
}
.navbar-fixed-top {
position: fixed;
margin: 0;
}
.navbar-fixed-top .navbar-inner {
padding-left: 0;
padding-right: 0;
}
.sidebar-nav .btn {
margin: 5px 0;
min-width: 100px;
}
.navbar .nav .divider {
height: 1px;
overflow: hidden;
background-color: #444;
}
#main-container {
padding-left: 20px;
padding-right: 20px;
}
#main-content {
display: table;
width: 100%;
}
#sidebar-container {
display: table-cell;
vertical-align: top;
width: 1px;
white-space: nowrap;
}
#page-container {
display: table-cell;
vertical-align: top;
}
.powered {
display: inline-block;
white-space: nowrap;
}
.page-header {
display: table;
width: 100%;
}
.header-label {
display: table-cell;
}
.header-accessories {
display: table-cell;
white-space: nowrap;
text-align: right;
}
.header-accessories .btn-group {
display: inline-block;
vertical-align: bottom;
}
table {
background-color: white;
}
.tab-content {
display: block;
width: auto;
padding-top: 0;
padding-bottom: 0;
}
.tab-content.well {
padding-top: 19px;
}
.nav-tabs {
position: relative;
top: 1px;
margin-left: 10px;
margin-bottom: 0;
border: 0;
}
.nav-tabs > .active > a, .nav-tabs > .active > a:hover {
background-color: #f5f5f5;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
.nav-tabs > li > a, .nav-tabs > li > a:hover {
padding: 8px 8px;
}
/** Rtl language Style */
.rtl{
direction:rtl;
}
.rtl body,.rtl p,.rtl input,.rtl button,.rtl select,.rtl textarea,.rtl .jqplot-target{
font-family:sans-serif;
}
.rtl .navbar .brand{
float:right;
}
.rtl .navbar .nav{
float:right;
}
.rtl .navbar .nav.pull-right{
float:left;
}
.rtl .pull-right{
float:left;
}
.rtl .pull-left{
float:right;
}
.rtl .navbar .nav>li{
float:right;
}
.rtl .header-accessories{
text-align:left;
}
.rtl .form-horizontal .control-label{
float:right;
}
.rtl .btn-group .btn{
float:right;
}
.rtl .nav-tabs>li,.rtl .nav-pills>li{
float:right;
}
.rtl .form-horizontal .controls{
margin-right:190px;
}
.rtl .radio input[type="radio"],
.rtl .checkbox input[type="checkbox"]{
float:right;
margin-right:-18px;
}
.rtl .radio,
.rtl .checkbox{
padding-right:18px;
}
.rtl .entity{
text-align: right;
margin-left:20px;
margin-right:0;
}
.rtl .btn-group .btn:last-child{
margin-left:0;
-webkit-border-top-left-radius:4px;
-moz-border-radius-topleft:4px;
border-top-left-radius:4px;
-webkit-border-bottom-left-radius:4px;
-moz-border-radius-bottomleft:4px;
border-bottom-left-radius:4px;
-webkit-border-top-right-radius:0;
-moz-border-radius-topright:0;
border-top-right-radius:0;
-webkit-border-bottom-right-radius:0;
-moz-border-radius-bottomright:0;
border-bottom-right-radius:0;
}
.rtl .btn-group .btn:first-child{
-webkit-border-top-right-radius:4px;
-moz-border-radius-topright:4px;
border-top-right-radius:4px;
-webkit-border-bottom-right-radius:4px;
-moz-border-radius-bottomright:4px;
border-bottom-right-radius:4px;
-webkit-border-top-left-radius:0;
-moz-border-radius-topleft:0;
border-top-left-radius:0;
-webkit-border-bottom-left-radius:0;
-moz-border-radius-bottomleft:0;
border-bottom-left-radius:0;
}
.rtl .table th, .rtl .table td {
text-align:right;
}
.rtl .dropdown-menu{
right:0;
left:inherit;
}
/* Tables */
.align-middle {
vertical-align: middle;
}
.tight {
width: 10px;
white-space: nowrap;
}
.nowrap {
white-space: nowrap;
}
.table-body {
display: table;
width: 100%;
}
.table-row {
display: table-row
}
.table-cell {
display: table-cell;
vertical-align: top;
}
.table-cell-title {
display: table-cell;
vertical-align: middle;
height: 32px;
}
.table-cell-title .label {
position: relative;
top: -2px;
}
.table-separator {
margin: 4px 0;
border-top: 1px solid #EEE;
border-bottom: 1px solid #FFF;
}
td.cell-center {
text-align: center;
}
@media (max-width: 767px) {
.table-cell .title, .table-cell-title .title {
font-size: 1.1em;
font-weight: bold;
}
}
.table-cell-details {
display: table-cell;
font-size: 11px;
font-style: italic;
line-height: 13px;
}
/* Form */
legend {
margin-top: 0px;
margin-bottom: 0px;
}
.form-horizontal .control-label {
width: 180px;
}
.form-horizontal .controls {
margin-left: 190px;
}
.form-horizontal .form-actions {
padding-left: 190px;
margin-bottom: 0;
}
.form-horizontal label {
font-weight: bold;
}
.help-block {
font-style: italic;
color: #666;
}
/* Status page */
h2 {
font-size: 16px;
line-height: 12px;
}
h2 small {
font-size: 18px;
}
.offline, .online {
display: inline-block;
width: 100%;
max-width: 320px;
}
.entity {
text-align: left;
padding: 10px;
box-shadow: 0px 0px 5px #666;
border-radius: 3px;
margin-right: 20px;
margin-bottom: 20px;
cursor: pointer;
}
.entity h2 {
margin-bottom: 10px;
}
.entity p {
margin: 0;
padding: 0;
}
.offline .entity {
background: #a00000;
color: #f7cece;
border: 2px solid #f7cece;
}
.offline .entity.warning {
background: #FAA732;
color: #F3F3B1;
border: 2px solid #F3F3B1;
}
.online .entity {
background: #53a000;
color: #d8f7ce;
border: 2px solid #d8f7ce;
}
.entity-container table td {
padding: 6px 8px;
vertical-align: middle;
}
.row-offline, .row-online {
cursor: pointer;
}
.row-offline td, .row-offline tr:hover td {
background: #a00000 !important;
color: #f7cece;
}
.row-offline td.warning, .row-offline tr:hover tr.warning {
background: #FAA732 !important;
color: #F3F3B1;
}
.row-online td, .row-online tr:hover td {
background: #53a000 !important;
color: #d8f7ce;
}
.entity-container .server-name {
display: inline-block;
font-size: 1.15em;
line-height: 18px;
font-weight: bold;
white-space: nowrap;
}
.visible-small {
display: none;
}
td.visible-desktop, th.visible-desktop,
td.hidden-phone, th.hidden-phone,
td.hidden-tablet, th.hidden-tablet {
display: table-cell;
}
span.visible-desktop, span.visible-desktop,
span.hidden-phone, span.hidden-phone,
span.hidden-tablet, span.hidden-tablet {
display: inline-block;
}
span.visible-phone, span.visible-phone,
span.visible-tablet, span.visible-tablet,
span.hidden-desktop, span.hidden-desktop {
display: none;
}
@media (min-width: 980px) {
.hidden-desktop {
display: none !important;
}
}
@media (max-width: 979px) {
#sidebar-container {
display: table-row;
}
#page-container {
display: table-row;
}
.sidebar-nav .nav-list {
padding: 0;
}
.sidebar-nav li.nav-header {
display: none;
}
.sidebar-nav li {
float: left;
margin-right: 15px;
}
.navbar .brand {
margin-left: -10px;
}
.visible-desktop {
display: none !important;
}
.tab-content.well {
padding-left: 10px;
padding-right: 10px;
}
}
@media (max-width: 767px) {
td.visible-phone, th.visible-phone,
td.hidden-desktop, th.hidden-desktop {
display: table-cell;
}
span.visible-phone, span.visible-phone,
span.hidden-desktop, span.hidden-desktop {
display: inline-block;
}
td.hidden-phone, th.hidden-phone,
td.visible-desktop, th.visible-desktop {
display: none;
}
span.hidden-phone, span.hidden-phone,
span.visible-desktop, span.visible-desktop {
display: none;
}
}
@media (min-width: 768px) and (max-width: 979px) {
td.visible-tablet, th.visible-tablet,
td.hidden-desktop, th.hidden-desktop {
display: table-cell;
}
span.visible-tablet, span.visible-tablet,
span.hidden-desktop, span.hidden-desktop {
display: inline-block;
}
td.hidden-tablet, th.hidden-tablet,
td.visible-desktop, th.visible-desktop {
display: none;
}
span.hidden-tablet, span.hidden-tablet,
span.visible-desktop, span.visible-desktop {
display: none;
}
}
@media (max-width: 479px) {
#main-container, .container-fluid {
padding-left: 10px;
padding-right: 10px;
}
.form-horizontal .controls {
margin-left: 0px;
}
.form-horizontal .form-actions {
padding-left: 10px;
text-align: center;
}
.entity-container {
text-align: center;
}
.entity {
margin: 0 10px 20px 10px;
}
.hidden-small {
display: none !important;
}
.action-small {
text-align: center !important;
background-color: white;
}
.visible-small {
display: block;
}
td.visible-small {
display: table-cell;
}
}
body.install{
padding-top:20px;
}
.install_header h2 {
line-height: 100px;
}
.install_header img {
height: 100px;
}
.label-status-on, .label-status-off, .label-status-warning {
vertical-align: baseline;
}
.label-status-on {
background-color: #468847;
}
.label-status-off,
.label-error {
background-color: #B94A48;
}
.label-status-warning {
background-color: #FAA732;
}
.label a{
color:#FFF;
text-decoration:none;
}
.footer{
margin-top:20px;
border-top:1px solid #EEEEEE;
padding-top:10px;
}
.footer a{
font-weight:bold;
}
div.tabbable ul.nav-tabs li{
font-weight:bold;
}
legend{
border-color: -moz-use-text-color -moz-use-text-color #CCCCCC;
margin-bottom: 10px;
}
.form-actions {
background-color: transparent;
}
.form-signin {
max-width: 300px;
padding: 19px 29px 29px;
margin: 0 auto 20px;
background-color: #fff;
border: 1px solid #e5e5e5;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
-moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
box-shadow: 0 1px 2px rgba(0,0,0,.05);
}
.form-signin .form-signin-heading,
.form-signin .checkbox {
margin-bottom: 10px;
}
.form-signin input[type="text"],
.form-signin input[type="password"] {
font-size: 16px;
height: auto;
margin-bottom: 15px;
padding: 7px 9px;
}
.dropdown-menu span {
display: block;
padding: 3px 15px;
clear: both;
font-weight: normal;
line-height: 18px;
color: #333333;
white-space: nowrap;
}
#flashmessage {
max-width: 350px;
margin: auto;
margin-bottom: 18px;
}
.oce-first{
background-color:#eee;
}
/* Bootstrap 2.3.2 added icons */
.icon-hdd {
background-position: 0 -144px;
}
.icon-bullhorn {
background-position: -24px -144px;
}
.icon-bell {
background-position: -48px -144px;
}
.icon-certificate {
background-position: -72px -144px;
}
.icon-thumbs-up {
background-position: -96px -144px;
}
.icon-thumbs-down {
background-position: -120px -144px;
}
.icon-hand-right {
background-position: -144px -144px;
}
.icon-hand-left {
background-position: -168px -144px;
}
.icon-hand-up {
background-position: -192px -144px;
}
.icon-hand-down {
background-position: -216px -144px;
}
.icon-circle-arrow-right {
background-position: -240px -144px;
}
.icon-circle-arrow-left {
background-position: -264px -144px;
}
.icon-circle-arrow-up {
background-position: -288px -144px;
}
.icon-circle-arrow-down {
background-position: -312px -144px;
}
.icon-globe {
background-position: -336px -144px;
}
.icon-wrench {
background-position: -360px -144px;
}
.icon-tasks {
background-position: -384px -144px;
}
.icon-filter {
background-position: -408px -144px;
}
.icon-briefcase {
background-position: -432px -144px;
}
.icon-fullscreen {
background-position: -456px -144px;
}
/* personal added icons */
.icon-chart {
background-position: 0px -168px;
}
.icon-mobile {
background-position: -24px -168px;
}
.icon-admin {
background-position: -48px -168px;
}
.icon-pushover {
background-position: -72px -168px;
}
.icon-telegram {
background-position: -96px -168px;
}
.icon-expand-arrow {
background-position: -312px -120px;
}

2
static/css/style.min.css vendored Normal file
View File

@ -0,0 +1,2 @@
html{position:relative;min-height:100%}html[dir='rtl'] #auto_refresh_servers,html[dir='rtl'] #log_retention_period{border-left-width:0px}html[dir='rtl'] #auto_refresh_servers_input,html[dir='rtl'] #log_retention_period_input{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0;border-bottom-right-radius:0}body{padding-top:4.5rem;margin-bottom:80px}.footer{position:absolute;bottom:0;width:100%;height:60px;line-height:60px;background-color:#f5f5f5}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.64)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,0.85)}dl,dt,dd{margin-bottom:0}footer .text-muted{color:#4C5557 !important}a,button,.nav-link{min-height:44px !important;min-width:44px !important}a.icon{text-decoration:none;cursor:pointer;padding-left:10px}#auto_refresh_servers,#log_retention_period{border-right-width:0px}#auto_refresh_servers_input,#log_retention_period_input{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-top-left-radius:0;border-bottom-left-radius:0}form.form-signin input[type="text"],form.form-reset input[type="text"]{border-bottom-left-radius:0;border-bottom-right-radius:0}form.form-signin input[type="password"]{border-top-left-radius:0;border-top-right-radius:0}form.form-reset input#input-password{border-radius:0}form.form-reset input#input-password-repeat{border-top-left-radius:0;border-top-right-radius:0}form.form-signin,form.form-forgot,form.form-reset{margin:auto}table tr[visible='false'],.no-result{display:none}table tr[visible='true']{display:table-row}.search_input{color:white;border:0;outline:0;background:none;width:0;caret-color:transparent;line-height:44px;-webkit-transition:width 0.4s linear;transition:width 0.4s linear}.search_input:not(:placeholder-shown){padding:0 10px;width:100%;max-width:450px;caret-color:red;-webkit-transition:width 0.4s linear;transition:width 0.4s linear}.searchbar{height:66px;background-color:#353b48;border-radius:40px;padding:10px}.searchbar:hover>.search_icon{background:white;color:#e74c3c}.searchbar:hover>.search_input{padding:0 10px;width:100%;max-width:450px;caret-color:red;-webkit-transition:width 0.4s linear;transition:width 0.4s linear}.search_icon{height:44px;width:44px;float:right;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:50%;color:white}.search_icon p{height:0.6em;font-weight:bold}
/*# sourceMappingURL=style.min.css.map */

View File

@ -0,0 +1,9 @@
{
"version": 3,
"mappings": "AAAA,AAAA,IAAI,AAAC,CACJ,QAAQ,CAAE,QAAQ,CAClB,UAAU,CAAE,IAAI,CAChB,AACD,AACI,IADA,CAAA,AAAA,GAAC,CAAI,KAAK,AAAT,EACD,qBAAqB,CADzB,IAAI,CAAA,AAAA,GAAC,CAAI,KAAK,AAAT,EAED,qBAAqB,AAAC,CAClB,iBAAiB,CAAE,GACvB,CAAC,AAJL,AAKI,IALA,CAAA,AAAA,GAAC,CAAI,KAAK,AAAT,EAKD,2BAA2B,CAL/B,IAAI,CAAA,AAAA,GAAC,CAAI,KAAK,AAAT,EAMD,2BAA2B,AAAC,CACxB,sBAAsB,CAAE,MAAM,CAC9B,yBAAyB,CAAE,MAAM,CACjC,uBAAuB,CAAE,CAAC,CAC1B,0BAA0B,CAAE,CAAC,CAChC,AAEL,AAAA,IAAI,AAAC,CACJ,WAAW,CAAE,MAAM,CACnB,aAAa,CAAE,IAAI,CACnB,AACD,AAAA,OAAO,AAAC,CACP,QAAQ,CAAE,QAAQ,CAClB,MAAM,CAAE,CAAC,CACT,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CACZ,WAAW,CAAE,IAAI,CACjB,gBAAgB,CAAE,OAAO,CACzB,AACD,AAAA,YAAY,CAAC,WAAW,CAAC,SAAS,AAAC,CAC/B,KAAK,CAAE,sBAAqB,CAK/B,AAND,AAEI,YAFQ,CAAC,WAAW,CAAC,SAAS,AAE7B,MAAM,CAFX,YAAY,CAAC,WAAW,CAAC,SAAS,AAG7B,MAAM,AAAC,CACJ,KAAK,CAAE,sBAAqB,CAC/B,AAEL,AAAA,EAAE,CAAE,EAAE,CAAE,EAAE,AAAA,CACN,aAAa,CAAE,CAAC,CACnB,AACD,AAAA,MAAM,CAAC,WAAW,AAAC,CACf,KAAK,CAAE,OAAO,CAAA,UAAU,CAC3B,AACD,AAAA,CAAC,CACD,MAAM,CACN,SAAS,AAAC,CACT,UAAU,CAAE,IAAI,CAAA,UAAU,CAC1B,SAAS,CAAE,IAAI,CAAA,UAAU,CACzB,AACD,AAAA,CAAC,AAAA,KAAK,AAAC,CACH,eAAe,CAAE,IAAI,CACrB,MAAM,CAAE,OAAO,CACf,YAAY,CAAE,IAAI,CACrB,AACD,AAAA,qBAAqB,CACrB,qBAAqB,AAAC,CACrB,kBAAkB,CAAE,GACrB,CAAC,AACD,AAAA,2BAA2B,CAC3B,2BAA2B,AAAC,CAC3B,uBAAuB,CAAE,MAAM,CAC/B,0BAA0B,CAAE,MAAM,CAClC,sBAAsB,CAAE,CAAC,CACzB,yBAAyB,CAAE,CAAC,CAC5B,AACD,AAAA,IAAI,AAAA,YAAY,CAAC,KAAK,CAAA,AAAA,IAAC,CAAK,MAAM,AAAX,EACvB,IAAI,AAAA,WAAW,CAAC,KAAK,CAAA,AAAA,IAAC,CAAK,MAAM,AAAX,CAAa,CAClC,yBAAyB,CAAE,CAAC,CAC5B,0BAA0B,CAAE,CAAC,CAC7B,AACD,AAAA,IAAI,AAAA,YAAY,CAAC,KAAK,CAAA,AAAA,IAAC,CAAK,UAAU,AAAf,CAAiB,CACvC,sBAAsB,CAAE,CAAC,CACzB,uBAAuB,CAAE,CAAC,CAC1B,AACD,AACI,IADA,AAAA,WAAW,CACX,KAAK,AAAA,eAAe,AAAE,CAClB,aAAa,CAAE,CAAC,CACnB,AAHL,AAII,IAJA,AAAA,WAAW,CAIX,KAAK,AAAA,sBAAsB,AAAC,CACxB,sBAAsB,CAAE,CAAC,CACzB,uBAAuB,CAAE,CAAC,CAC7B,AAEL,AAAA,IAAI,AAAA,YAAY,CAChB,IAAI,AAAA,YAAY,CAChB,IAAI,AAAA,WAAW,AAAC,CACf,MAAM,CAAE,IAAI,CACZ,AACD,AAAA,KAAK,CAAC,EAAE,CAAA,AAAA,OAAC,CAAQ,OAAO,AAAf,EACT,UAAU,AAAA,CACR,OAAO,CAAC,IAAI,CACb,AACD,AAAA,KAAK,CAAC,EAAE,CAAA,AAAA,OAAC,CAAQ,MAAM,AAAd,CAAe,CACtB,OAAO,CAAC,SAAS,CAClB,AAED,AAAA,aAAa,AAAA,CACT,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,CAAC,CACV,UAAU,CAAE,IAAI,CAChB,KAAK,CAAE,CAAC,CACR,WAAW,CAAC,WAAW,CACvB,WAAW,CAAE,IAAI,CACjB,UAAU,CAAE,iBAAiB,CAQhC,AAhBD,AASI,aATS,AASR,IAAK,CAAA,kBAAkB,CAAE,CACtB,OAAO,CAAE,MAAM,CACf,KAAK,CAAE,IAAI,CACX,SAAS,CAAE,KAAK,CAChB,WAAW,CAAC,GAAG,CACf,UAAU,CAAE,iBAAiB,CAChC,AAGL,AAAA,UAAU,AAAC,CACP,MAAM,CAAE,IAAI,CACZ,gBAAgB,CAAE,OAAO,CACzB,aAAa,CAAE,IAAI,CACnB,OAAO,CAAE,IAAI,CAchB,AAlBD,AAMQ,UANE,AAKL,MAAM,CACD,YAAY,AAAA,CACV,UAAU,CAAE,KAAK,CACjB,KAAK,CAAE,OAAO,CACjB,AATT,AAUQ,UAVE,AAKL,MAAM,CAKD,aAAa,AAAA,CACX,OAAO,CAAE,MAAM,CACf,KAAK,CAAE,IAAI,CACX,SAAS,CAAE,KAAK,CAChB,WAAW,CAAC,GAAG,CACf,UAAU,CAAE,iBAAiB,CAChC,AAIT,AAAA,YAAY,AAAA,CACR,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,CACX,KAAK,CAAE,KAAK,CACZ,OAAO,CAAE,IAAI,CACb,eAAe,CAAE,MAAM,CACvB,WAAW,CAAE,MAAM,CACnB,aAAa,CAAE,GAAG,CAClB,KAAK,CAAC,KAAK,CAKd,AAbD,AASI,YATQ,CASR,CAAC,AAAC,CACE,MAAM,CAAE,KAAK,CACb,WAAW,CAAE,IAAI,CACpB",
"sources": [
"../scss/style.scss"
],
"names": [],
"file": "style.min.css"
}

View File

@ -1,164 +1,13 @@
$().ready(function() function updateScale(chart, min, unit) {
{ chart.options.scales.xAxes[0].time.min = min;
$('.chart').each(function() { chart.options.scales.xAxes[0].time.unit = unit;
var $this = $(this); // 0 to disable animation
create_plot($this); chart.update(0);
});
$(window).resize(function(){
$('.chart').each(function() {
var plot = $(this).data('psm_plot');
if(plot)
plot.replot( );
});
});
$('.chart-selector .btn').click(function(){
var $btn = $(this);
var chartID = $btn.attr('data-chartId');
var chartMode = $btn.attr('data-chartMode');
create_plot($('#chart' + chartID), chartMode);
$btn.siblings('.btn-info').removeClass('btn-info');
$btn.addClass('btn-info');
});
});
function create_plot($this, mode)
{
if(!$this) return;
var plot = $this.data('psm_plot');
if(plot) {
plot.destroy();
$this.removeData('psm_plot');
}
if($this.attr('data-endTime')) {
var d = new Date(parseInt($this.attr('data-endTime')));
} else {
var d = new Date();
}
var time = d.getTime();
var lines = $this.attr('data-lines');
if(!lines) {
lines = [[[0, 0]]];
}
else if(typeof(lines) == 'string') {
lines = eval(lines);
}
mode = mode || $this.attr('data-plotMode') || 'hour';
$this.attr('data-plotMode', mode);
var timeStamp, tickFormat;
var showMarker = false;
var showLegend = true;
switch(mode)
{
case 'year':
timeStamp = 1000 * 60 * 60 * 24 * 365.25;
tickFormat = day_format;
break;
case 'month':
timeStamp = 1000 * 60 * 60 * 24 * 30;
tickFormat = day_format;
break;
case 'week':
case 'week2':
timeStamp = 1000 * 60 * 60 * 24 * 7;
tickFormat = short_date_format;
showMarker = (mode == 'week2');
break;
case 'day':
timeStamp = 1000 * 60 * 60 *24;
tickFormat = short_time_format;
break;
case 'hour':
default:
showMarker = true;
timeStamp = 1000 * 60 * 60;
tickFormat = short_time_format;
break;
}
var downArray = new Array();
var down = $this.attr('data-down');
if(down) {
if(typeof(down) == 'string') {
down = eval(down);
}
for (var index = 0; index < down.length; ++index) {
var interval = down[index];
var d = new $.jsDate(interval[0]);
downArray.push({rectangle: {
xmin: interval[0],
xmax: interval[1] || time,
yOffset: '1px',
color: '#fe5d5d',
showTooltip: true,
showTooltipPrecision: 1.0,
tooltipFormatString: "&darr; " + d.strftime(long_date_format)
}});
}
}
var series = eval($this.attr('data-series'));
if(Array.isArray(series)) {
for (var i=0; i<series.length; i++)
{
$.extend(true, series[i], {
markerOptions: {
show: showMarker
},
lineWidth: 1
});
}
} else {
series = [{}];
showLegend = false;
}
plot = $.jqplot($this.attr('id'), lines, {
title: $this.attr('data-title'),
series: series,
legend: {
show: showLegend,
placement: 'insideGrid',
location: 'nw'
},
axes : {
xaxis:{
renderer:$.jqplot.DateAxisRenderer,
tickOptions : { formatString: tickFormat },
min: time - timeStamp,
max: time
},
yaxis:{
min: 0
}
},
highlighter: {
show: true,
sizeAdjust: 7.5,
useAxesFormatters: false,
tooltipContentEditor: function(str, seriesIndex, pointIndex, plot)
{
var point = plot.series[seriesIndex].data[pointIndex];
var d = new $.jsDate(point[0]);
return "&uarr; " + d.strftime(long_date_format) + ' - ' + $.jqplot.sprintf('%.3fs', point[1]);
}
},
canvasOverlay: {
show: true,
objects: downArray
},
cursor:{
show: true,
zoom: true,
showTooltip:false,
dblClickReset: true,
constrainZoomTo: 'x'
}
});
$this.data('psm_plot', plot);
} }
$('input[name=timeframe_short]').change(function() {
updateScale(historyShort, parseInt($('input[name=timeframe_short]:checked').val()), $('input[name=timeframe_short]:checked')[0].id);
});
$('input[name=timeframe_long]').change(function() {
updateScale(historyLong, parseInt($('input[name=timeframe_long]:checked').val()), $('input[name=timeframe_long]:checked')[0].id);
});

View File

@ -1,4 +1,4 @@
$().ready(function() { $().ready(function () {
$('.show-modal').click(function (e) { $('.show-modal').click(function (e) {
var $this = $(this); var $this = $(this);
if ($this.is('a')) { if ($this.is('a')) {
@ -14,11 +14,10 @@ $().ready(function() {
var ary = param.split(','); var ary = param.split(',');
for (var index = 0; index < ary.length && index < 9; ++index) { for (var index = 0; index < ary.length && index < 9; ++index) {
var value = ary[index]; var value = ary[index];
$($modal).find('span.modalP' + (index+1)).text(value); $($modal).find('span.modalP' + (index + 1)).text(value);
} }
} }
scroll(0, 0); $modal.modal();
$modal.modal('show');
} else { } else {
// Just in case we forgot the dialog box // Just in case we forgot the dialog box
var conf = confirm("Are you sure?"); var conf = confirm("Are you sure?");
@ -29,142 +28,83 @@ $().ready(function() {
return false; return false;
}); });
$('.modalOKButton').click(function(e) { $('.modalOKButton').click(function (e) {
var $this = $(this); var $origin = $(this).data('modal-origin');
var $origin = $this.data('modal-origin');
if ($origin.is('a')) { if ($origin.is('a')) {
window.location = $origin.attr('href'); window.location = $origin.attr('href');
} else { }
else {
$origin.next('input[type=hidden]').attr('value', 1); $origin.next('input[type=hidden]').attr('value', 1);
$origin.closest('form').submit(); $origin.closest('form').submit();
} }
return false; return false;
}); });
$('select.multiselect').multiselect({
includeSelectAllOption: true,
maxHeight: 400,
enableCaseInsensitiveFiltering: true
});
psm_flash_message(); if ($('#list-layout').length > 0) {
psm_tooltips(); $("#list-layout").hide();
$("#flow-layout").hide();
// popularPorts if ($("#list-layout").hasClass('active')) {
// initial $("#list-layout").show();
$('.portGroup').hide(); }
var portInput = $('#port').val(); if ($("#flow-layout").hasClass('active')) {
$("#flow-layout").show();
if (portInput != '') { }
var findPopularPorts = $('#popularPorts').find('option[value=' + portInput + ']');
if (findPopularPorts.length) {
$(findPopularPorts).attr("selected", "selected");
} else {
$('#popularPorts').find('option[value=custom]').attr("selected", "selected");
$('.portGroup').slideDown();
}
} }
$('#label').focus();
$('#popularPorts').change(function () {
changePopular($(this).val(), $('#type').val());
});
// popularRequestMethods
// initial
$('.requestMethodGroup').hide();
var requestMethodInput = $('#requestMethod').val();
if (requestMethodInput != '') {
var findPopularRequestMethods = $('#popularRequestMethods').find('option[value=' + requestMethodInput + ']');
if (findPopularRequestMethods.length) {
$(findPopularRequestMethods).attr("selected", "selected");
} else {
$('#popularRequestMethods').find('option[value=custom]').attr("selected", "selected");
$('.requestMethodGroup').slideDown();
}
}
$('#popularRequestMethods').change(function () {
changePopular($(this).val(), $('#type').val());
});
// server type
$('.types').hide();
changeTypeSwitch($('#type').val());
$('#type').change(function () {
changeTypeSwitch($('#type').val());
});
// advanced information
$(".advanced").hide();
var advanced = 0;
$("#advanced").click(
function() {
advancedSwitch((advanced += 1) % 2);
});
}); });
$("#type").change(function () {
function advancedSwitch(statusInput) { switch ($("select#type option:checked").val()) {
switch (statusInput) { case "website":
case 0: $('.typeService').slideUp();
$(".advanced").slideUp();
break;
case 1:
$(".advanced").slideDown();
break;
default:
$(".advanced").hide();
}
}
function changeTypeSwitch(typeInput) {
switch (typeInput) {
case 'service':
$('.types').slideUp();
$('.typeService').slideDown();
changePopular($('#popularPorts').val(), typeInput, true);
break;
case 'website':
$('.types').slideUp();
$('.typeWebsite').slideDown(); $('.typeWebsite').slideDown();
changePopular($('#popularRequestMethods').val(), typeInput, true); $("select#popular_request_methods").change();
break;
case "service":
$('.typeWebsite').slideUp();
$('.typeService').slideDown();
$("select#popular_ports").change();
break; break;
default: default:
$('.types').slideUp(); $('.types').slideUp();
} }
} }).change();
function changePopular(inputValue, typeInput, changedType = false) { $("select#popular_request_methods").change(function () {
if (typeInput === 'website') { if ($("select#type option:checked").val() != "website") return;
htmlClass = '.requestMethodGroup'; switch ($("select#popular_request_methods option:checked").val()) {
htmlID = '#requestMethod'; case "":
postClass = '.postGroup'; $('.requestMethod').slideUp();
} else if (typeInput === 'service') { $('#request_method').val($("select#popular_request_methods option:checked").val());
htmlClass = '.portGroup'; break;
htmlID = '#port'; case "custom":
} $('.requestMethod').slideDown();
$('#request_method').focus();
if (typeInput === 'website' && inputValue === '') { break;
changedType ? $(postClass).hide() : $(postClass).slideUp(); default:
} else { $('#request_method').val($("select#popular_request_methods option:checked").val());
$(postClass).slideDown(); $('.requestMethod').slideUp();
}
if (inputValue === 'custom') {
$(htmlClass).slideDown();
return;
} }
}).change();
changedType ? $(htmlClass).hide() : $(htmlClass).slideUp(); $("select#popular_ports").change(function () {
$(htmlID).val(inputValue); if ($("select#type option:checked").val() != "service") return;
switch ($("select#popular_ports option:checked").val()) {
case "0":
case "":
$('#port').val($("select#popular_ports option:checked").val());
$('.port').slideUp();
break;
case "custom":
$('.port').slideDown();
$('#port').focus();
break;
default:
$('#port').val($("select#popular_ports option:checked").val());
$('.port').slideUp();
}
}).change();
}
function psm_xhr(mod, params, method, on_complete, options) { function psm_xhr(mod, params, method, on_complete, options) {
method = (typeof method === 'undefined') ? 'GET' : method; method = (typeof method === 'undefined') ? 'GET' : method;
@ -172,7 +112,7 @@ function psm_xhr(mod, params, method, on_complete, options) {
data: params, data: params,
type: method, type: method,
success: on_complete, success: on_complete,
error: function(jqjqXHR, textStatus, errorThrown) { error: function (jqjqXHR, textStatus, errorThrown) {
psm_flash_message(errorThrown); psm_flash_message(errorThrown);
} }
}; };
@ -184,6 +124,20 @@ function psm_xhr(mod, params, method, on_complete, options) {
} }
function psm_saveLayout(layout) { function psm_saveLayout(layout) {
if (layout) {
$("#list-layout").show();
$("#flow-layout").hide();
$("#block-layout").removeClass('active');
$("#table-layout").addClass('active');
}
else {
$("#list-layout").hide();
$("#flow-layout").show();
$("#block-layout").addClass('active');
$("#table-layout").removeClass('active');
}
var params = { var params = {
action: 'saveLayout', action: 'saveLayout',
csrf: $("input[name=saveLayout_csrf]").val(), csrf: $("input[name=saveLayout_csrf]").val(),
@ -192,47 +146,13 @@ function psm_saveLayout(layout) {
psm_xhr('server_status', params, 'POST'); psm_xhr('server_status', params, 'POST');
} }
function psm_tooltips() { if ($(".search_input").length > 0) {
$('input[data-toggle="tooltip"]').tooltip({ $.getScript("static/js/search.js");
'trigger':'hover', $('<link>')
'placement': 'right', .appendTo('head')
'container': 'body' .attr({
}); type: 'text/css',
$('i[data-toggle="tooltip"]').tooltip({ rel: 'stylesheet',
'trigger':'hover', href: 'static/css/search.min.css'
'placement': 'bottom' });
});
}
function psm_goTo(url) {
window.location = url;
}
function trim(str) {
return str.replace(/^\s+|\s+$/g,"");
}
//left trim
function ltrim(str) {
return str.replace(/^\s+/,"");
}
//right trim
function rtrim(str) {
return str.replace(/\s+$/,"");
}
function psm_flash_message(message) {
var flashmessage = $('#flashmessage');
if(flashmessage.length){
if(typeof message !== 'undefined') {
flashmessage.html(message);
}
var t = flashmessage.html();
var c = trim(t);
var t = c.replace('&nbsp;', '');
if (t) {
flashmessage.slideDown();
}
}
} }

36
static/js/search.js Normal file
View File

@ -0,0 +1,36 @@
$('.search_icon p').hide();
$(".search_input").keyup(function () {
var searchTerm = $(".search_input").val().toLowerCase();
$("table tbody tr").each(function (e) {
col1 = this.cells[0].innerText.toLowerCase().indexOf(searchTerm);
col2 = this.cells[1].innerText.toLowerCase().indexOf(searchTerm);
if (col1 >= 0) {
$(this).attr('visible', 'true');
}
else if (col2 >= 0) {
$(this).attr('visible', 'true');
}
else {
$(this).attr('visible', 'false');
}
});
var jobCount = $('table tbody tr[visible="true"]').length;
if($(".search_input").is(":placeholder-shown")){
$('.search_icon i').show();
$('.search_icon p').hide();
}
else{
$('.search_icon i').hide();
$('.search_icon p').show();
}
$('.search_icon p').text(jobCount);
if (jobCount == '0') {
$('.no-result').show();
}
else {
$('.no-result').hide();
}
});

View File

@ -1 +0,0 @@
span.multiselect-native-select{position:relative}span.multiselect-native-select select{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px -1px -1px -3px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;left:50%;top:30px}.multiselect-container{position:absolute;list-style-type:none;margin:0;padding:0}.multiselect-container .input-group{margin:5px}.multiselect-container .multiselect-reset .input-group{width:93%}.multiselect-container>li{padding:0}.multiselect-container>li>a.multiselect-all label{font-weight:700}.multiselect-container>li.multiselect-group label{margin:0;padding:3px 20px;height:100%;font-weight:700}.multiselect-container>li.multiselect-group-clickable label{cursor:pointer}.multiselect-container>li>a{padding:0}.multiselect-container>li>a>label{margin:0;height:100%;cursor:pointer;font-weight:400;padding:3px 20px 3px 40px}.multiselect-container>li>a>label.checkbox,.multiselect-container>li>a>label.radio{margin:0}.multiselect-container>li>a>label>input[type=checkbox]{margin-bottom:5px}.btn-group>.btn-group:nth-child(2)>.multiselect.btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.form-inline .multiselect-container label.checkbox,.form-inline .multiselect-container label.radio{padding:3px 20px 3px 40px}.form-inline .multiselect-container li a label.checkbox input[type=checkbox],.form-inline .multiselect-container li a label.radio input[type=radio]{margin-left:-20px;margin-right:0}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2012-2018 SnapAppointments, LLC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,394 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
select.bs-select-hidden,
.bootstrap-select > select.bs-select-hidden,
select.selectpicker {
display: none !important;
}
.bootstrap-select {
width: 220px \0;
/*IE9 and below*/
vertical-align: middle;
}
.bootstrap-select > .dropdown-toggle {
position: relative;
width: 100%;
z-index: 1;
text-align: right;
white-space: nowrap;
}
.bootstrap-select > .dropdown-toggle.bs-placeholder,
.bootstrap-select > .dropdown-toggle.bs-placeholder:hover,
.bootstrap-select > .dropdown-toggle.bs-placeholder:focus,
.bootstrap-select > .dropdown-toggle.bs-placeholder:active {
color: #999;
}
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:hover,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:hover,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:hover,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:hover,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:hover,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:hover,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:focus,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:focus,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:focus,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:focus,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:focus,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:focus,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:active,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:active,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:active,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:active,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:active,
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:active {
color: rgba(255, 255, 255, 0.5);
}
.bootstrap-select > select {
position: absolute !important;
bottom: 0;
left: 50%;
display: block !important;
width: 0.5px !important;
height: 100% !important;
padding: 0 !important;
opacity: 0 !important;
border: none;
}
.bootstrap-select > select.mobile-device {
top: 0;
left: 0;
display: block !important;
width: 100% !important;
z-index: 2;
}
.has-error .bootstrap-select .dropdown-toggle,
.error .bootstrap-select .dropdown-toggle,
.bootstrap-select.is-invalid .dropdown-toggle,
.was-validated .bootstrap-select .selectpicker:invalid + .dropdown-toggle {
border-color: #b94a48;
}
.bootstrap-select.is-valid .dropdown-toggle,
.was-validated .bootstrap-select .selectpicker:valid + .dropdown-toggle {
border-color: #28a745;
}
.bootstrap-select.fit-width {
width: auto !important;
}
.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
width: 220px;
}
.bootstrap-select > select.mobile-device:focus + .dropdown-toggle,
.bootstrap-select .dropdown-toggle:focus {
outline: thin dotted #333333 !important;
outline: 5px auto -webkit-focus-ring-color !important;
outline-offset: -2px;
}
.bootstrap-select.form-control {
margin-bottom: 0;
padding: 0;
border: none;
}
:not(.input-group) > .bootstrap-select.form-control:not([class*="col-"]) {
width: 100%;
}
.bootstrap-select.form-control.input-group-btn {
z-index: auto;
}
.bootstrap-select.form-control.input-group-btn:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
.bootstrap-select:not(.input-group-btn),
.bootstrap-select[class*="col-"] {
float: none;
display: inline-block;
margin-left: 0;
}
.bootstrap-select.dropdown-menu-right,
.bootstrap-select[class*="col-"].dropdown-menu-right,
.row .bootstrap-select[class*="col-"].dropdown-menu-right {
float: right;
}
.form-inline .bootstrap-select,
.form-horizontal .bootstrap-select,
.form-group .bootstrap-select {
margin-bottom: 0;
}
.form-group-lg .bootstrap-select.form-control,
.form-group-sm .bootstrap-select.form-control {
padding: 0;
}
.form-group-lg .bootstrap-select.form-control .dropdown-toggle,
.form-group-sm .bootstrap-select.form-control .dropdown-toggle {
height: 100%;
font-size: inherit;
line-height: inherit;
border-radius: inherit;
}
.bootstrap-select.form-control-sm .dropdown-toggle,
.bootstrap-select.form-control-lg .dropdown-toggle {
font-size: inherit;
line-height: inherit;
border-radius: inherit;
}
.bootstrap-select.form-control-sm .dropdown-toggle {
padding: 0.25rem 0.5rem;
}
.bootstrap-select.form-control-lg .dropdown-toggle {
padding: 0.5rem 1rem;
}
.form-inline .bootstrap-select .form-control {
width: 100%;
}
.bootstrap-select.disabled,
.bootstrap-select > .disabled {
cursor: not-allowed;
}
.bootstrap-select.disabled:focus,
.bootstrap-select > .disabled:focus {
outline: none !important;
}
.bootstrap-select.bs-container {
position: absolute;
top: 0;
left: 0;
height: 0 !important;
padding: 0 !important;
}
.bootstrap-select.bs-container .dropdown-menu {
z-index: 1060;
}
.bootstrap-select .dropdown-toggle:before {
content: '';
display: inline-block;
}
.bootstrap-select .dropdown-toggle .filter-option {
position: absolute;
top: 0;
left: 0;
padding-top: inherit;
padding-right: inherit;
padding-bottom: inherit;
padding-left: inherit;
height: 100%;
width: 100%;
text-align: left;
}
.bootstrap-select .dropdown-toggle .filter-option-inner {
padding-right: inherit;
}
.bootstrap-select .dropdown-toggle .filter-option-inner-inner {
overflow: hidden;
}
.bootstrap-select .dropdown-toggle .caret {
position: absolute;
top: 50%;
right: 12px;
margin-top: -2px;
vertical-align: middle;
}
.input-group .bootstrap-select.form-control .dropdown-toggle {
border-radius: inherit;
}
.bootstrap-select[class*="col-"] .dropdown-toggle {
width: 100%;
}
.bootstrap-select .dropdown-menu {
min-width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.bootstrap-select .dropdown-menu > .inner:focus {
outline: none !important;
}
.bootstrap-select .dropdown-menu.inner {
position: static;
float: none;
border: 0;
padding: 0;
margin: 0;
border-radius: 0;
-webkit-box-shadow: none;
box-shadow: none;
}
.bootstrap-select .dropdown-menu li {
position: relative;
}
.bootstrap-select .dropdown-menu li.active small {
color: rgba(255, 255, 255, 0.5) !important;
}
.bootstrap-select .dropdown-menu li.disabled a {
cursor: not-allowed;
}
.bootstrap-select .dropdown-menu li a {
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.bootstrap-select .dropdown-menu li a.opt {
position: relative;
padding-left: 2.25em;
}
.bootstrap-select .dropdown-menu li a span.check-mark {
display: none;
}
.bootstrap-select .dropdown-menu li a span.text {
display: inline-block;
}
.bootstrap-select .dropdown-menu li small {
padding-left: 0.5em;
}
.bootstrap-select .dropdown-menu .notify {
position: absolute;
bottom: 5px;
width: 96%;
margin: 0 2%;
min-height: 26px;
padding: 3px 5px;
background: #f5f5f5;
border: 1px solid #e3e3e3;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
pointer-events: none;
opacity: 0.9;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.bootstrap-select .no-results {
padding: 3px;
background: #f5f5f5;
margin: 0 5px;
white-space: nowrap;
}
.bootstrap-select.fit-width .dropdown-toggle .filter-option {
position: static;
display: inline;
padding: 0;
}
.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner,
.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner-inner {
display: inline;
}
.bootstrap-select.fit-width .dropdown-toggle .caret {
position: static;
top: auto;
margin-top: -1px;
}
.bootstrap-select.show-tick .dropdown-menu .selected span.check-mark {
position: absolute;
display: inline-block;
right: 15px;
top: 5px;
}
.bootstrap-select.show-tick .dropdown-menu li a span.text {
margin-right: 34px;
}
.bootstrap-select .bs-ok-default:after {
content: '';
display: block;
width: 0.5em;
height: 1em;
border-style: solid;
border-width: 0 0.26em 0.26em 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
.bootstrap-select.show-menu-arrow.open > .dropdown-toggle,
.bootstrap-select.show-menu-arrow.show > .dropdown-toggle {
z-index: 1061;
}
.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:before {
content: '';
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-bottom: 7px solid rgba(204, 204, 204, 0.2);
position: absolute;
bottom: -4px;
left: 9px;
display: none;
}
.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:after {
content: '';
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid white;
position: absolute;
bottom: -4px;
left: 10px;
display: none;
}
.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:before {
bottom: auto;
top: -4px;
border-top: 7px solid rgba(204, 204, 204, 0.2);
border-bottom: 0;
}
.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:after {
bottom: auto;
top: -4px;
border-top: 6px solid white;
border-bottom: 0;
}
.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:before {
right: 12px;
left: auto;
}
.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:after {
right: 13px;
left: auto;
}
.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:before,
.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:before,
.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:after,
.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:after {
display: block;
}
.bs-searchbox,
.bs-actionsbox,
.bs-donebutton {
padding: 4px 8px;
}
.bs-actionsbox {
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.bs-actionsbox .btn-group button {
width: 50%;
}
.bs-donebutton {
float: left;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.bs-donebutton .btn-group button {
width: 100%;
}
.bs-searchbox + .bs-actionsbox {
padding: 0 8px 4px;
}
.bs-searchbox .form-control {
margin-bottom: 0;
width: 100%;
float: none;
}
/*# sourceMappingURL=bootstrap-select.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'ምንም አልተመረጠም',
noneResultsText: 'ከ{0} ጋር ተመሳሳይ ውጤት የለም',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} ምርጫ ተመርጧል' : '{0} ምርጫዎች ተመርጠዋል';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'ገደብ ላይ ተደርሷል (ቢበዛ {n} ምርጫ)' : 'ገደብ ላይ ተደርሷል (ቢበዛ {n} ምርጫዎች)',
(numGroup == 1) ? 'የቡድን ገደብ ላይ ተደርሷል (ቢበዛ {n} ምርጫ)' : 'የቡድን ገደብ ላይ ተደርሷል (ቢበዛ {n} ምርጫዎች)'
];
},
selectAllText: 'ሁሉም ይመረጥ',
deselectAllText: 'ሁሉም አይመረጥ',
multipleSeparator: ' ፣ '
};
})(jQuery);
}));

View File

@ -0,0 +1,8 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
!function(e,t){void 0===e&&void 0!==window&&(e=window),"function"==typeof define&&define.amd?define(["jquery"],function(e){return t(e)}):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(e.jQuery)}(this,function(e){e.fn.selectpicker.defaults={noneSelectedText:"\u121d\u1295\u121d \u12a0\u120d\u1270\u1218\u1228\u1320\u121d",noneResultsText:"\u12a8{0} \u130b\u122d \u1270\u1218\u1233\u1233\u12ed \u12cd\u1324\u1275 \u12e8\u1208\u121d",countSelectedText:function(e,t){return 1==e?"{0} \u121d\u122d\u132b \u1270\u1218\u122d\u1327\u120d":"{0} \u121d\u122d\u132b\u12ce\u127d \u1270\u1218\u122d\u1320\u12cb\u120d"},maxOptionsText:function(e,t){return[1==e?"\u1308\u12f0\u1265 \u120b\u12ed \u1270\u12f0\u122d\u1237\u120d (\u1262\u1260\u12db {n} \u121d\u122d\u132b)":"\u1308\u12f0\u1265 \u120b\u12ed \u1270\u12f0\u122d\u1237\u120d (\u1262\u1260\u12db {n} \u121d\u122d\u132b\u12ce\u127d)",1==t?"\u12e8\u1261\u12f5\u1295 \u1308\u12f0\u1265 \u120b\u12ed \u1270\u12f0\u122d\u1237\u120d (\u1262\u1260\u12db {n} \u121d\u122d\u132b)":"\u12e8\u1261\u12f5\u1295 \u1308\u12f0\u1265 \u120b\u12ed \u1270\u12f0\u122d\u1237\u120d (\u1262\u1260\u12db {n} \u121d\u122d\u132b\u12ce\u127d)"]},selectAllText:"\u1201\u1209\u121d \u12ed\u1218\u1228\u1325",deselectAllText:"\u1201\u1209\u121d \u12a0\u12ed\u1218\u1228\u1325",multipleSeparator:" \u1363 "}});

View File

@ -0,0 +1,50 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
/*!
* Translated default messages for bootstrap-select.
* Locale: AR (Arabic)
* Author: Yasser Lotfy <y_l@alive.com>
*/
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'لم يتم إختيار شئ',
noneResultsText: 'لا توجد نتائج مطابقة لـ {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} خيار تم إختياره' : '{0} خيارات تمت إختيارها';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'تخطى الحد المسموح ({n} خيار بحد أقصى)' : 'تخطى الحد المسموح ({n} خيارات بحد أقصى)',
(numGroup == 1) ? 'تخطى الحد المسموح للمجموعة ({n} خيار بحد أقصى)' : 'تخطى الحد المسموح للمجموعة ({n} خيارات بحد أقصى)'
];
},
selectAllText: 'إختيار الجميع',
deselectAllText: 'إلغاء إختيار الجميع',
multipleSeparator: '، '
};
})(jQuery);
}));

View File

@ -0,0 +1,8 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
!function(e,t){void 0===e&&void 0!==window&&(e=window),"function"==typeof define&&define.amd?define(["jquery"],function(e){return t(e)}):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(e.jQuery)}(this,function(e){e.fn.selectpicker.defaults={noneSelectedText:"\u0644\u0645 \u064a\u062a\u0645 \u0625\u062e\u062a\u064a\u0627\u0631 \u0634\u0626",noneResultsText:"\u0644\u0627 \u062a\u0648\u062c\u062f \u0646\u062a\u0627\u0626\u062c \u0645\u0637\u0627\u0628\u0642\u0629 \u0644\u0640 {0}",countSelectedText:function(e,t){return 1==e?"{0} \u062e\u064a\u0627\u0631 \u062a\u0645 \u0625\u062e\u062a\u064a\u0627\u0631\u0647":"{0} \u062e\u064a\u0627\u0631\u0627\u062a \u062a\u0645\u062a \u0625\u062e\u062a\u064a\u0627\u0631\u0647\u0627"},maxOptionsText:function(e,t){return[1==e?"\u062a\u062e\u0637\u0649 \u0627\u0644\u062d\u062f \u0627\u0644\u0645\u0633\u0645\u0648\u062d ({n} \u062e\u064a\u0627\u0631 \u0628\u062d\u062f \u0623\u0642\u0635\u0649)":"\u062a\u062e\u0637\u0649 \u0627\u0644\u062d\u062f \u0627\u0644\u0645\u0633\u0645\u0648\u062d ({n} \u062e\u064a\u0627\u0631\u0627\u062a \u0628\u062d\u062f \u0623\u0642\u0635\u0649)",1==t?"\u062a\u062e\u0637\u0649 \u0627\u0644\u062d\u062f \u0627\u0644\u0645\u0633\u0645\u0648\u062d \u0644\u0644\u0645\u062c\u0645\u0648\u0639\u0629 ({n} \u062e\u064a\u0627\u0631 \u0628\u062d\u062f \u0623\u0642\u0635\u0649)":"\u062a\u062e\u0637\u0649 \u0627\u0644\u062d\u062f \u0627\u0644\u0645\u0633\u0645\u0648\u062d \u0644\u0644\u0645\u062c\u0645\u0648\u0639\u0629 ({n} \u062e\u064a\u0627\u0631\u0627\u062a \u0628\u062d\u062f \u0623\u0642\u0635\u0649)"]},selectAllText:"\u0625\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u062c\u0645\u064a\u0639",deselectAllText:"\u0625\u0644\u063a\u0627\u0621 \u0625\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u062c\u0645\u064a\u0639",multipleSeparator:"\u060c "}});

View File

@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Нищо избрано',
noneResultsText: 'Няма резултат за {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} избран елемент' : '{0} избрани елемента';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Лимита е достигнат ({n} елемент максимум)' : 'Лимита е достигнат ({n} елемента максимум)',
(numGroup == 1) ? 'Груповия лимит е достигнат ({n} елемент максимум)' : 'Груповия лимит е достигнат ({n} елемента максимум)'
];
},
selectAllText: 'Избери всички',
deselectAllText: 'Размаркирай всички',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@ -0,0 +1,8 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
!function(e,t){void 0===e&&void 0!==window&&(e=window),"function"==typeof define&&define.amd?define(["jquery"],function(e){return t(e)}):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(e.jQuery)}(this,function(e){e.fn.selectpicker.defaults={noneSelectedText:"\u041d\u0438\u0449\u043e \u0438\u0437\u0431\u0440\u0430\u043d\u043e",noneResultsText:"\u041d\u044f\u043c\u0430 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442 \u0437\u0430 {0}",countSelectedText:function(e,t){return 1==e?"{0} \u0438\u0437\u0431\u0440\u0430\u043d \u0435\u043b\u0435\u043c\u0435\u043d\u0442":"{0} \u0438\u0437\u0431\u0440\u0430\u043d\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430"},maxOptionsText:function(e,t){return[1==e?"\u041b\u0438\u043c\u0438\u0442\u0430 \u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0430\u0442 ({n} \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c)":"\u041b\u0438\u043c\u0438\u0442\u0430 \u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0430\u0442 ({n} \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c)",1==t?"\u0413\u0440\u0443\u043f\u043e\u0432\u0438\u044f \u043b\u0438\u043c\u0438\u0442 \u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0430\u0442 ({n} \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c)":"\u0413\u0440\u0443\u043f\u043e\u0432\u0438\u044f \u043b\u0438\u043c\u0438\u0442 \u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0430\u0442 ({n} \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c)"]},selectAllText:"\u0418\u0437\u0431\u0435\u0440\u0438 \u0432\u0441\u0438\u0447\u043a\u0438",deselectAllText:"\u0420\u0430\u0437\u043c\u0430\u0440\u043a\u0438\u0440\u0430\u0439 \u0432\u0441\u0438\u0447\u043a\u0438",multipleSeparator:", "}});

View File

@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Nic není vybráno',
noneResultsText: 'Žádné výsledky {0}',
countSelectedText: 'Označeno {0} z {1}',
maxOptionsText: ['Limit překročen ({n} {var} max)', 'Limit skupiny překročen ({n} {var} max)', ['položek', 'položka']],
multipleSeparator: ', ',
selectAllText: 'Vybrat Vše',
deselectAllText: 'Odznačit Vše'
};
})(jQuery);
}));

View File

@ -0,0 +1,8 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
!function(e,n){void 0===e&&void 0!==window&&(e=window),"function"==typeof define&&define.amd?define(["jquery"],function(e){return n(e)}):"object"==typeof module&&module.exports?module.exports=n(require("jquery")):n(e.jQuery)}(this,function(e){e.fn.selectpicker.defaults={noneSelectedText:"Nic nen\xed vybr\xe1no",noneResultsText:"\u017d\xe1dn\xe9 v\xfdsledky {0}",countSelectedText:"Ozna\u010deno {0} z {1}",maxOptionsText:["Limit p\u0159ekro\u010den ({n} {var} max)","Limit skupiny p\u0159ekro\u010den ({n} {var} max)",["polo\u017eek","polo\u017eka"]],multipleSeparator:", ",selectAllText:"Vybrat V\u0161e",deselectAllText:"Odzna\u010dit V\u0161e"}});

View File

@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Intet valgt',
noneResultsText: 'Ingen resultater fundet {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} valgt' : '{0} valgt';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Begrænsning nået (max {n} valgt)' : 'Begrænsning nået (max {n} valgte)',
(numGroup == 1) ? 'Gruppe-begrænsning nået (max {n} valgt)' : 'Gruppe-begrænsning nået (max {n} valgte)'
];
},
selectAllText: 'Markér alle',
deselectAllText: 'Afmarkér alle',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@ -0,0 +1,8 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
!function(e,n){void 0===e&&void 0!==window&&(e=window),"function"==typeof define&&define.amd?define(["jquery"],function(e){return n(e)}):"object"==typeof module&&module.exports?module.exports=n(require("jquery")):n(e.jQuery)}(this,function(e){e.fn.selectpicker.defaults={noneSelectedText:"Intet valgt",noneResultsText:"Ingen resultater fundet {0}",countSelectedText:function(e,n){return"{0} valgt"},maxOptionsText:function(e,n){return[1==e?"Begr\xe6nsning n\xe5et (max {n} valgt)":"Begr\xe6nsning n\xe5et (max {n} valgte)",1==n?"Gruppe-begr\xe6nsning n\xe5et (max {n} valgt)":"Gruppe-begr\xe6nsning n\xe5et (max {n} valgte)"]},selectAllText:"Mark\xe9r alle",deselectAllText:"Afmark\xe9r alle",multipleSeparator:", "}});

View File

@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Bitte wählen...',
noneResultsText: 'Keine Ergebnisse für {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} Element ausgewählt' : '{0} Elemente ausgewählt';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Limit erreicht ({n} Element max.)' : 'Limit erreicht ({n} Elemente max.)',
(numGroup == 1) ? 'Gruppen-Limit erreicht ({n} Element max.)' : 'Gruppen-Limit erreicht ({n} Elemente max.)'
];
},
selectAllText: 'Alles auswählen',
deselectAllText: 'Nichts auswählen',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@ -0,0 +1,8 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
!function(e,t){void 0===e&&void 0!==window&&(e=window),"function"==typeof define&&define.amd?define(["jquery"],function(e){return t(e)}):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(e.jQuery)}(this,function(e){e.fn.selectpicker.defaults={noneSelectedText:"Bitte w\xe4hlen...",noneResultsText:"Keine Ergebnisse f\xfcr {0}",countSelectedText:function(e,t){return 1==e?"{0} Element ausgew\xe4hlt":"{0} Elemente ausgew\xe4hlt"},maxOptionsText:function(e,t){return[1==e?"Limit erreicht ({n} Element max.)":"Limit erreicht ({n} Elemente max.)",1==t?"Gruppen-Limit erreicht ({n} Element max.)":"Gruppen-Limit erreicht ({n} Elemente max.)"]},selectAllText:"Alles ausw\xe4hlen",deselectAllText:"Nichts ausw\xe4hlen",multipleSeparator:", "}});

View File

@ -0,0 +1,45 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'Nothing selected',
noneResultsText: 'No results match {0}',
countSelectedText: function (numSelected, numTotal) {
return (numSelected == 1) ? '{0} item selected' : '{0} items selected';
},
maxOptionsText: function (numAll, numGroup) {
return [
(numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',
(numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'
];
},
selectAllText: 'Select All',
deselectAllText: 'Deselect All',
multipleSeparator: ', '
};
})(jQuery);
}));

View File

@ -0,0 +1,8 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
!function(e,t){void 0===e&&void 0!==window&&(e=window),"function"==typeof define&&define.amd?define(["jquery"],function(e){return t(e)}):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(e.jQuery)}(this,function(e){e.fn.selectpicker.defaults={noneSelectedText:"Nothing selected",noneResultsText:"No results match {0}",countSelectedText:function(e,t){return 1==e?"{0} item selected":"{0} items selected"},maxOptionsText:function(e,t){return[1==e?"Limit reached ({n} item max)":"Limit reached ({n} items max)",1==t?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)"]},selectAllText:"Select All",deselectAllText:"Deselect All",multipleSeparator:", "}});

View File

@ -0,0 +1,38 @@
/*!
* Bootstrap-select v1.13.5 (https://developer.snapappointments.com/bootstrap-select)
*
* Copyright 2012-2018 SnapAppointments, LLC
* Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
*/
(function (root, factory) {
if (root === undefined && window !== undefined) root = window;
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof module === 'object' && module.exports) {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(root["jQuery"]);
}
}(this, function (jQuery) {
(function ($) {
$.fn.selectpicker.defaults = {
noneSelectedText: 'No hay selección',
noneResultsText: 'No hay resultados {0}',
countSelectedText: 'Seleccionados {0} de {1}',
maxOptionsText: ['Límite alcanzado ({n} {var} max)', 'Límite del grupo alcanzado({n} {var} max)', ['elementos', 'element']],
multipleSeparator: ', ',
selectAllText: 'Seleccionar Todos',
deselectAllText: 'Desmarcar Todos'
};
})(jQuery);
}));

Some files were not shown because too many files have changed in this diff Show More