diff --git a/README.rst b/README.rst index 26e51041..45b1685f 100644 --- a/README.rst +++ b/README.rst @@ -46,23 +46,24 @@ The following SMS gateways are currently available: * Inetworx - * Messagebird - * Mosms - -* Smsglobal - -* SMSit - +* Smsglobal - +* SMSit - * Spryng - * Textmarketer - * FreeVoipDeal - -* Nexmo - -* OctoPush - -* FreeMobile (FR) - +* Nexmo - +* OctoPush - +* FreeMobile (FR) - * Twilio - -* CM Telecom - -* GatewayAPI - -* SolutionsInfini - -* Plivo - -* Callr - +* CM Telecom - +* GatewayAPI - +* SolutionsInfini - +* Plivo - +* Callr - * SMSAPI - -* OVH SMS PRO - - +* OVH SMS PRO - +* PromoSMS - +* Infobip - Please note: for these gateways you will need an account with sufficient credits. diff --git a/composer.lock b/composer.lock index 3b8d7122..a391f5a2 100644 --- a/composer.lock +++ b/composer.lock @@ -277,16 +277,16 @@ }, { "name": "symfony/config", - "version": "v3.4.44", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "801a3bbc17fb1ba44b0d7d41a6db7a0b74953595" + "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/801a3bbc17fb1ba44b0d7d41a6db7a0b74953595", - "reference": "801a3bbc17fb1ba44b0d7d41a6db7a0b74953595", + "url": "https://api.github.com/repos/symfony/config/zipball/bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", + "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", "shasum": "" }, "require": { @@ -308,11 +308,6 @@ "symfony/yaml": "To use the yaml reference dumper" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Config\\": "" @@ -351,20 +346,20 @@ "type": "tidelift" } ], - "time": "2020-08-10T07:13:15+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.44", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "7d15cf4294d4f3610bc741c8fdd54a6baac586d4" + "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/7d15cf4294d4f3610bc741c8fdd54a6baac586d4", - "reference": "7d15cf4294d4f3610bc741c8fdd54a6baac586d4", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/51d2a2708c6ceadad84393f8581df1dcf9e5e84b", + "reference": "51d2a2708c6ceadad84393f8581df1dcf9e5e84b", "shasum": "" }, "require": { @@ -393,11 +388,6 @@ "symfony/yaml": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\DependencyInjection\\": "" @@ -436,20 +426,20 @@ "type": "tidelift" } ], - "time": "2020-08-10T07:13:15+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.44", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a0f6858fbf7a524747e87a4c336cab7d0b67c802" + "reference": "31fde73757b6bad247c54597beef974919ec6860" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0f6858fbf7a524747e87a4c336cab7d0b67c802", - "reference": "a0f6858fbf7a524747e87a4c336cab7d0b67c802", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", + "reference": "31fde73757b6bad247c54597beef974919ec6860", "shasum": "" }, "require": { @@ -461,6 +451,7 @@ "require-dev": { "psr/log": "~1.0", "symfony/config": "~2.8|~3.0|~4.0", + "symfony/debug": "~3.4|~4.4", "symfony/dependency-injection": "~3.3|~4.0", "symfony/expression-language": "~2.8|~3.0|~4.0", "symfony/stopwatch": "~2.8|~3.0|~4.0" @@ -470,11 +461,6 @@ "symfony/http-kernel": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" @@ -513,7 +499,7 @@ "type": "tidelift" } ], - "time": "2020-08-12T14:55:37+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/filesystem", @@ -581,16 +567,16 @@ }, { "name": "symfony/http-foundation", - "version": "v3.4.44", + "version": "v3.4.47", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "e5a42880895b43cd53d1a7b92bdcfb7d80c0af1c" + "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e5a42880895b43cd53d1a7b92bdcfb7d80c0af1c", - "reference": "e5a42880895b43cd53d1a7b92bdcfb7d80c0af1c", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b9885fcce6fe494201da4f70a9309770e9d13dc8", + "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8", "shasum": "" }, "require": { @@ -602,11 +588,6 @@ "symfony/expression-language": "~2.8|~3.0|~4.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" @@ -645,20 +626,20 @@ "type": "tidelift" } ], - "time": "2020-08-12T14:55:37+00:00" + "time": "2020-10-24T10:57:07+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.18.1", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" + "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", - "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/aed596913b70fae57be53d86faa2e9ef85a2297b", + "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b", "shasum": "" }, "require": { @@ -670,7 +651,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.19-dev" }, "thanks": { "name": "symfony/polyfill", @@ -721,20 +702,20 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T09:01:57+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.18.1", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" + "reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", - "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b5f7b932ee6fa802fc792eabd77c4c88084517ce", + "reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce", "shasum": "" }, "require": { @@ -746,7 +727,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.19-dev" }, "thanks": { "name": "symfony/polyfill", @@ -798,20 +779,20 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T09:01:57+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.18.1", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3" + "reference": "3fe414077251a81a1b15b1c709faf5c2fbae3d4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", - "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/3fe414077251a81a1b15b1c709faf5c2fbae3d4e", + "reference": "3fe414077251a81a1b15b1c709faf5c2fbae3d4e", "shasum": "" }, "require": { @@ -821,7 +802,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.19-dev" }, "thanks": { "name": "symfony/polyfill", @@ -875,7 +856,7 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T09:01:57+00:00" }, { "name": "twig/twig", diff --git a/config.php.sample b/config.php.sample index bf902aaa..a9537ed0 100644 --- a/config.php.sample +++ b/config.php.sample @@ -7,3 +7,4 @@ define('PSM_DB_HOST', 'localhost'); define('PSM_DB_PORT', '3306'); //3306 is the default port for MySQL. If no specfic port is used, leave it empty. define('PSM_BASE_URL', ''); define('PSM_WEBCRON_KEY', ''); +define('PSM_PUBLIC', false); diff --git a/docs/credits.rst b/docs/credits.rst index 83ee5bf7..e34fee17 100644 --- a/docs/credits.rst +++ b/docs/credits.rst @@ -93,6 +93,10 @@ The following people have contributed to the development of PHP Server Monitor: * Discord webhook support +* Łukasz Szczepański - https://github.com/NixNotCastey + + * PromoSMS gateway + Translators +++++++++++ diff --git a/docs/faq.rst b/docs/faq.rst index 04f6e05a..13c8454f 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -10,7 +10,7 @@ Users What are the differences between the user levels? ------------------------------------------------- -There are 2 user levels available: regular user and administrator. +There are 3 user levels available: anonymous, regular user and administrator. Administrators: @@ -24,6 +24,16 @@ Regular users: * View the history and logs of their assigned servers. * Run the updater on their assigned servers. +Anonymous: +Only meant for user '__PUBLIC__' and can't be assigned to any other user. + +* View the status of their assigned servers without password. + +I removed user '__PUBLIC__', what now? +-------------------------------------- + +* Go to users -> create new user. +* Set the username to '__PUBLIC__', level to 'anonymous' and the rest is up to you. Servers +++++++ @@ -101,6 +111,14 @@ After upgrading, my email stopped working. Run 'php composer.phar update' and you should be good to go! +Setting up a public page. +------------------------- + +1. Set PSM_PUBLIC to true in config.php. +2. If not yet existing, create a user with username '__PUBLIC__'. See Users -> "I removed user '__PUBLIC__', what now?" for help. +3. Add servers to user '__PUBLIC__'. +4. Go to /public.php. + Notifications +++++++++++++ diff --git a/public.php b/public.php new file mode 100644 index 00000000..9848ffbd --- /dev/null +++ b/public.php @@ -0,0 +1,40 @@ +. + * + * @package phpservermon + * @author Tim Zandbergen + * @copyright Copyright (c) 2008-2017 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://www.phpservermonitor.org/ + * @since phpservermon 3.6.0 + **/ + +namespace { + define('PSM_PUBLIC_PAGE', true); + + require __DIR__ . '/src/bootstrap.php'; + + $router->run('server_status'); + + // By destroying the session the login will show when going to another page + session_destroy(); + +} diff --git a/src/bootstrap.php b/src/bootstrap.php index 9037beef..e6dd3338 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -108,6 +108,19 @@ namespace { } } + // check for a public page var + // This should be defined in the config + if (!defined('PSM_PUBLIC')) { + define('PSM_PUBLIC', false); + } + + // check for a public page + // This variable is for internal use + // and should not be changed by the user manualy + if (!defined('PSM_PUBLIC_PAGE')) { + define('PSM_PUBLIC_PAGE', false); + } + $lang = psm_get_conf('language', 'en_US'); psm_load_lang($lang); } diff --git a/src/includes/functions.inc.php b/src/includes/functions.inc.php index 59717599..44b6d129 100644 --- a/src/includes/functions.inc.php +++ b/src/includes/functions.inc.php @@ -755,6 +755,9 @@ namespace { case 'smsglobal': $sms = new \psm\Txtmsg\Smsglobal(); break; + case 'infobip': + $sms = new \psm\Txtmsg\Infobip(); + break; case 'freevoipdeal': $sms = new \psm\Txtmsg\FreeVoipDeal(); break; @@ -799,6 +802,9 @@ namespace { case 'smsapi': $sms = new \psm\Txtmsg\SMSAPI(); break; + case 'promosms': + $sms = new \psm\Txtmsg\PromoSMS(); + break; } // copy login information from the config file diff --git a/src/lang/de_DE.lang.php b/src/lang/de_DE.lang.php index 6dcb6d58..ae0a7313 100644 --- a/src/lang/de_DE.lang.php +++ b/src/lang/de_DE.lang.php @@ -125,10 +125,10 @@ $sm_lang = array( 'email' => 'E-Mail', 'sms' => 'SMS', 'pushover' => 'Pushover', - 'no_logs' => 'Keine Logs vorhanden.', - 'clear' => 'Logs löschen', - 'delete_title' => 'Logs löschen', - 'delete_message' => 'Bist du sicher, dass du alle Logs löschen möchtest?', + 'no_logs' => 'Keine Protokolle vorhanden.', + 'clear' => 'Protokoll löschen', + 'delete_title' => 'Protokoll löschen', + 'delete_message' => 'Bist du sicher, dass du alle Protokolle löschen möchtest?', ), 'servers' => array( 'server' => 'Server', diff --git a/src/lang/en_US.lang.php b/src/lang/en_US.lang.php index c8e6fbe5..ff6895ac 100644 --- a/src/lang/en_US.lang.php +++ b/src/lang/en_US.lang.php @@ -106,7 +106,10 @@ $sm_lang = array( 'level' => 'Level', 'level_10' => 'Administrator', 'level_20' => 'User', - 'level_description' => 'Administrators have full access: they can manage servers, users and edit the global configuration.
Users can only view and run the updater for the servers that have been assigned to them.', + 'level_30' => 'Anonymous', + 'level_description' => 'Administrators have full access: they can manage servers, users and edit the + global configuration.
Users can only view and run the updater for the + servers that have been assigned to them.', 'mobile' => 'Mobile', 'email' => 'Email', 'pushover' => 'Pushover', @@ -154,6 +157,7 @@ $sm_lang = array( 'error_user_password_invalid' => 'The entered password is invalid.', 'error_user_password_no_match' => 'The entered passwords do not match.', 'error_user_admin_cant_be_deleted' => 'You can\'t remove the last administrator.', + 'error_user_cant_be_anonymous' => 'Only user \'__public__\' can have the level anonymous.' ), 'log' => array( 'title' => 'Log entries', diff --git a/src/psm/Module/AbstractController.php b/src/psm/Module/AbstractController.php index 284a0fef..d5cc0187 100644 --- a/src/psm/Module/AbstractController.php +++ b/src/psm/Module/AbstractController.php @@ -124,7 +124,7 @@ abstract class AbstractController implements ControllerInterface * @var int $user_level_required * @see setMinUserLevelRequired() */ - protected $user_level_required = PSM_USER_USER; + protected $user_level_required = (PSM_PUBLIC && PSM_PUBLIC_PAGE) ? PSM_USER_ANONYMOUS : PSM_USER_USER; /** * Required user level for certain actions diff --git a/src/psm/Module/User/Controller/UserController.php b/src/psm/Module/User/Controller/UserController.php index 91f0e423..ba55a0e2 100644 --- a/src/psm/Module/User/Controller/UserController.php +++ b/src/psm/Module/User/Controller/UserController.php @@ -282,12 +282,25 @@ class UserController extends AbstractController $user_validator->username($clean['user_name'], $user_id); $user_validator->email($clean['email']); $user_validator->level($clean['level']); + + // Won't allow anonymous level for users other than __PUBLIC__ + if ($clean['user_name'] !== "__PUBLIC__" && (int) $clean['level'] === (int) PSM_USER_ANONYMOUS) { + $this->addMessage(psm_get_lang('users', 'error_user_cant_be_anonymous'), 'error'); + $clean['level'] = PSM_USER_USER; + } // always validate password for new users, // but only validate it for existing users when they change it. - if ($user_id == 0 || ($user_id > 0 && $clean['password'] != '')) { + if (($user_id == 0 || ($user_id > 0 && $clean['password'] != '')) && $clean['user_name'] != '__PUBLIC__') { $user_validator->password($clean['password'], $clean['password_repeat']); } + + // Auto generate password for __PUBLIC__ user + if ($clean['user_name'] === '__PUBLIC__') { + $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%&*_"; + $clean['password'] = substr(str_shuffle($chars), 0, 24); + } + if ($user_id > 0) { $user_validator->userId($user_id); } diff --git a/src/psm/Service/User.php b/src/psm/Service/User.php index fb50e475..fce6213b 100644 --- a/src/psm/Service/User.php +++ b/src/psm/Service/User.php @@ -100,6 +100,17 @@ class User } $this->session = $session; + if (PSM_PUBLIC === true && PSM_PUBLIC_PAGE === true) { + $query_user = $this->db_connection->prepare('SELECT * FROM ' . + PSM_DB_PREFIX . 'users WHERE user_name = :user_name and level = :level'); + $query_user->bindValue(':user_name', "__PUBLIC__", \PDO::PARAM_STR); + $query_user->bindValue(':level', PSM_USER_ANONYMOUS, \PDO::PARAM_STR); + $query_user->execute(); + + // get result row (as an object) + $this->setUserLoggedIn($query_user->fetchObject()->user_id); + } + if ((!defined('PSM_INSTALL') || !PSM_INSTALL)) { // check the possible login actions: // 1. login via session data (happens each time user opens a page on your php project AFTER diff --git a/src/psm/Txtmsg/Infobip.php b/src/psm/Txtmsg/Infobip.php new file mode 100644 index 00000000..b5edc89d --- /dev/null +++ b/src/psm/Txtmsg/Infobip.php @@ -0,0 +1,91 @@ +. + * + * @package phpservermon + * @author Victor Macko + * @copyright Copyright (c) 2008-2017 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://www.phpservermonitor.org/ + * @since phpservermon 3.6.0 + **/ + +namespace psm\Txtmsg; + +class Infobip extends Core +{ + + /** + * Send sms using the infobip.com API + * + * @var string $message + * @var string $this->password + * @var array $this->recipients + * @var array $this->originator + * @var string $recipients + * + * @var resource $curl + * @var string $err + * @var mixed $result + * + * @var int $success + * @var string $error + * + * @return bool|string + */ + + + + public function sendSMS($message) + { + $success = 1; + $error = ''; + foreach ($this->recipients as $recipient) { + $ch = curl_init(); + curl_setopt( + $ch, + CURLOPT_URL, + "https://api.infobip.com/sms/1/text/query?username=" . $this->username . + "&password=" . $this->password . + "&to=" . $recipient . + "&text=" . urlencode($message) . + //add your sender id here + "&from=" + ); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $headers = array(); + $headers[] = "Content-Type: application/x-www-form-urlencoded"; + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + $result = curl_exec($ch); + curl_close($ch); + + // Check for errors + if (is_numeric(strpos($result, "FAILED"))) { + $error = $result; + $success = 0; + } + } + if ($success == 1) { + return 1; + } + return $error; + } +} + diff --git a/src/psm/Txtmsg/PromoSMS.php b/src/psm/Txtmsg/PromoSMS.php new file mode 100644 index 00000000..ccb024bb --- /dev/null +++ b/src/psm/Txtmsg/PromoSMS.php @@ -0,0 +1,93 @@ +. + * + * @package phpservermon + * @author Łukasz Szczepański + * @copyright Copyright (c) 2008-2017 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://www.phpservermonitor.org/ + * @since phpservermon 3.5 + **/ + +namespace psm\Txtmsg; + +class PromoSMS extends Core +{ + + /** + * Send sms using the PromoSMS API + * + * @var string $message + * @var string $this->password + * @var array $this->recipients + * @var array $headers + * + * @var resource $curl + * @var string $err + * @var int $success + * @var string $error + * + * @return bool|string + */ + + public function sendSMS($message) + { + $error = ""; + $success = 1; + + $headers = array(); + $headers[] = "Content-Type: application/x-www-form-urlencoded"; + $headers[] = "Accept: text/json"; + $headers[] = 'Authorization: Basic ' . base64_encode($this->username . ':' . $this->password); + + $curl = curl_init(); + curl_setopt_array($curl, array( + CURLOPT_URL => "https://promosms.com/api/rest/v3_2/sms", + CURLOPT_RETURNTRANSFER => true, + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 30, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_POST => true, + CURLOPT_HTTPHEADER => $headers, + CURLOPT_POSTFIELDS => http_build_query(array( + 'text' => htmlspecialchars($message), + 'type' => 1, + 'recipients' => $this->recipients, + )) + )); + + $result = curl_exec($curl); + $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); + $err = curl_errno($curl); + + if ($err != 0 || ($httpcode != '200' && $httpcode != '201' && $httpcode != '202' && $result != "1")) { + $success = 0; + $error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " . + curl_strerror($err) . ". Result: " . $result . ""; + } + curl_close($curl); + + if ($success) { + return 1; + } + return $error; + } +} \ No newline at end of file diff --git a/src/psm/Util/Install/Installer.php b/src/psm/Util/Install/Installer.php index fa011771..ab9e5fef 100644 --- a/src/psm/Util/Install/Installer.php +++ b/src/psm/Util/Install/Installer.php @@ -724,7 +724,6 @@ class Installer ('jabber_username', ''), ('jabber_domain', ''), ('jabber_password', '');"; - $this->execSQL($queries); } @@ -754,6 +753,11 @@ class Installer ADD `discord` VARCHAR( 255 ) NOT NULL AFTER `mobile`;"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `discord` ENUM( 'yes','no' ) NOT NULL DEFAULT 'yes' AFTER `sms`;"; + $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "users` ( + `user_name`, `level`, `name`, `email`) + VALUES ('__PUBLIC__', 30, 'Public page', 'publicpage@psm.psm')"; $this->execSQL($queries); + + $this->log('Public page is now available. Added user \'__PUBLIC__\'. See documentation for more info.'); } } diff --git a/src/psm/Util/User/UserValidator.php b/src/psm/Util/User/UserValidator.php index 65f322e0..b7277ce8 100644 --- a/src/psm/Util/User/UserValidator.php +++ b/src/psm/Util/User/UserValidator.php @@ -39,7 +39,7 @@ class UserValidator * Available editable user levels * @var array $user_levels */ - protected $user_levels = array(PSM_USER_ADMIN, PSM_USER_USER); + protected $user_levels = array(PSM_USER_ADMIN, PSM_USER_USER, PSM_USER_ANONYMOUS); /** * User service diff --git a/src/templates/default/module/user/profile.tpl.html b/src/templates/default/module/user/profile.tpl.html index 3cb8f315..57051839 100644 --- a/src/templates/default/module/user/profile.tpl.html +++ b/src/templates/default/module/user/profile.tpl.html @@ -37,7 +37,7 @@ {{ label_telegram_get_chat_id }} {{ macro.input_field("text", "telegram_id", null, "telegram_id", label_telegram_chat_id, telegram_id, label_telegram_chat_id, "255", "telegram_id_help", label_telegram_id_description) }} - + {{ macro.input_hidden("activate_telegram", "0") }} diff --git a/src/templates/default/static/js/scripts.js b/src/templates/default/static/js/scripts.js index acd8b2ca..5184e3fb 100644 --- a/src/templates/default/static/js/scripts.js +++ b/src/templates/default/static/js/scripts.js @@ -51,6 +51,7 @@ $().ready(function () { } $('#label').focus(); }); + $("#type").change(function () { switch ($("select#type option:checked").val()) { case "website": @@ -103,6 +104,21 @@ $("select#popular_ports").change(function () { } }).change(); +$("#user_name").change(function () +{ + switch ($("#user_name").val()) { + case "__PUBLIC__": + $('#password').parent().slideUp(); + $('#password_repeat').parent().slideUp(); + $("select#level").val('30'); + $("#name").val('Public page'); + break; + default: + $('#password').parent().slideDown(); + $('#password_repeat').parent().slideDown(); + } +}).change(); + function psm_xhr(mod, params, method, on_complete, options) { method = (typeof method === 'undefined') ? 'GET' : method;