From ac60bf7de6819e1d673ec6669ac1e8833047b3ab Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Fri, 10 Jan 2014 17:17:41 +0100 Subject: [PATCH 01/31] Fixing back to top label --- classes/mod/modCore.class.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/classes/mod/modCore.class.php b/classes/mod/modCore.class.php index 1d986966..10e50677 100755 --- a/classes/mod/modCore.class.php +++ b/classes/mod/modCore.class.php @@ -91,6 +91,7 @@ abstract class modCore { // user wants updates, lets see what we can do $this->createHTMLUpdateAvailable(); } + $this->createHTMLLabels(); // add the module's custom template to the main template to get some content @@ -100,6 +101,7 @@ abstract class modCore { 'content' => $this->tpl->getTemplate($this->getTemplateId()), 'message' => ($this->message == '') ? ' ' : $this->message, 'html_footer' => $html_footer, + 'label_back_to_top' => sm_get_lang('system', 'back_to_top'), ) ); @@ -145,7 +147,6 @@ abstract class modCore { 'label_config' => sm_get_lang('system', 'config'), 'label_update' => sm_get_lang('system', 'update'), 'label_help' => sm_get_lang('system', 'help'), - 'label_back_to_top' => sm_get_lang('system', 'back_to_top'), ) ); } @@ -186,4 +187,4 @@ abstract class modCore { } } -?> \ No newline at end of file +?> From e5567bb465d9c5a7b12a5a9979988a226e667134 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Fri, 10 Jan 2014 18:31:57 +0100 Subject: [PATCH 02/31] testing new folder structure, implementing namespaces, changing function prefix to match namespace. --- config.inc.php.sample | 74 ------------ cron/status.cron.php | 8 +- index.php | 9 +- install.php | 23 ++-- src/bootstrap.php | 57 +++++++++ .../includes/config.inc.php.sample | 19 +-- .../includes/functions.inc.php | 84 ++++--------- {lang => src/lang}/de.lang.php | 0 {lang => src/lang}/en.lang.php | 0 {lang => src/lang}/fr.lang.php | 0 {lang => src/lang}/kr.lang.php | 0 {lang => src/lang}/nl.lang.php | 0 .../psm/Database.class.php | 8 +- .../psm/Module/Config.class.php | 78 ++++++------ .../psm/Module/Core.class.php | 42 +++---- .../psm/Module/Log.class.php | 30 ++--- .../psm/Module/Servers.class.php | 60 +++++----- .../psm/Module/Status.class.php | 10 +- .../psm/Module/Users.class.php | 46 ++++---- .../psm/Template.class.php | 111 +----------------- .../psm/Txtmsg/Clickatell.class.php | 6 +- .../psm/Txtmsg/Core.class.php | 4 +- .../psm/Txtmsg/Inetworx.class.php | 4 +- .../psm/Txtmsg/Mollie.class.php | 4 +- .../psm/Txtmsg/Mosms.class.php | 4 +- .../psm/Txtmsg/Spryng.class.php | 4 +- .../psm/Txtmsg/TxtmsgInterface.class.php | 4 +- .../psm/UpdaterStatus.class.php | 65 +++++----- {tpl => src/templates}/config.tpl.html | 0 {tpl => src/templates}/install.tpl.html | 0 {tpl => src/templates}/log.tpl.html | 0 {tpl => src/templates}/main.tpl.html | 0 {tpl => src/templates}/servers.tpl.html | 0 {tpl => src/templates}/status.tpl.html | 0 {tpl => src/templates}/users.tpl.html | 0 {classes => vendor}/phpmailer.class.php | 0 36 files changed, 319 insertions(+), 435 deletions(-) delete mode 100755 config.inc.php.sample create mode 100755 src/bootstrap.php rename classes/sm/smCore.class.php => src/includes/config.inc.php.sample (79%) rename functions.inc.php => src/includes/functions.inc.php (76%) rename {lang => src/lang}/de.lang.php (100%) rename {lang => src/lang}/en.lang.php (100%) rename {lang => src/lang}/fr.lang.php (100%) rename {lang => src/lang}/kr.lang.php (100%) rename {lang => src/lang}/nl.lang.php (100%) rename classes/sm/smDatabase.class.php => src/psm/Database.class.php (98%) rename classes/mod/modConfig.class.php => src/psm/Module/Config.class.php (66%) rename classes/mod/modCore.class.php => src/psm/Module/Core.class.php (81%) rename classes/mod/modLog.class.php => src/psm/Module/Log.class.php (82%) rename classes/mod/modServers.class.php => src/psm/Module/Servers.class.php (77%) rename classes/mod/modStatus.class.php => src/psm/Module/Status.class.php (92%) rename classes/mod/modUsers.class.php => src/psm/Module/Users.class.php (81%) rename classes/sm/smTemplate.class.php => src/psm/Template.class.php (67%) rename classes/txtmsg/txtmsgClickatell.class.php => src/psm/Txtmsg/Clickatell.class.php (96%) rename classes/txtmsg/txtmsgCore.class.php => src/psm/Txtmsg/Core.class.php (96%) rename classes/txtmsg/txtmsgInetworx.class.php => src/psm/Txtmsg/Inetworx.class.php (98%) rename classes/txtmsg/txtmsgMollie.class.php => src/psm/Txtmsg/Mollie.class.php (98%) rename classes/txtmsg/txtmsgMosms.class.php => src/psm/Txtmsg/Mosms.class.php (97%) rename classes/txtmsg/txtmsgSpryng.class.php => src/psm/Txtmsg/Spryng.class.php (97%) rename classes/txtmsg/txtmsgInterface.class.php => src/psm/Txtmsg/TxtmsgInterface.class.php (96%) rename classes/sm/smUpdaterStatus.class.php => src/psm/UpdaterStatus.class.php (84%) rename {tpl => src/templates}/config.tpl.html (100%) rename {tpl => src/templates}/install.tpl.html (100%) rename {tpl => src/templates}/log.tpl.html (100%) rename {tpl => src/templates}/main.tpl.html (100%) rename {tpl => src/templates}/servers.tpl.html (100%) rename {tpl => src/templates}/status.tpl.html (100%) rename {tpl => src/templates}/users.tpl.html (100%) rename {classes => vendor}/phpmailer.class.php (100%) diff --git a/config.inc.php.sample b/config.inc.php.sample deleted file mode 100755 index a9c0ec47..00000000 --- a/config.inc.php.sample +++ /dev/null @@ -1,74 +0,0 @@ -. - * - * @package phpservermon - * @author Pepijn Over - * @copyright Copyright (c) 2008-2014 Pepijn Over - * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 - * @version Release: @package_version@ - * @link http://phpservermon.neanderthal-technology.com/ - **/ - -######################################## -# -# START SERVER MONITOR CONFIGURATION -# -######################################## - -// Database information -// Prefix used for tables -define('SM_DB_PREFIX', 'monitor_'); -// Database username -define('SM_DB_USER', 'db_user'); -// Database password -define('SM_DB_PASS', 'db_pass'); -// Database name -define('SM_DB_NAME', 'db_name'); -// Database host -define('SM_DB_HOST', 'localhost'); - -######################################## -# -# END SERVER MONITOR CONFIGURATION -# -######################################## - -// Include paths -// Tell the script where to find the templates, css files and javascript files. -// If you haven't changed anything to the structure you should leave these unchanged -define('SM_PATH_TPL', 'tpl/'); -define('SM_PATH_CSS', 'inc/'); -define('SM_PATH_JS', 'inc/'); - -error_reporting(0); -ini_set('display_errors', 'Off'); - -require 'functions.inc.php'; -$db = new smDatabase(); - -sm_load_conf(); - -$lang = sm_get_conf('language'); - -if(!$lang) { - $lang = 'en'; -} -sm_load_lang($lang); - -?> \ No newline at end of file diff --git a/cron/status.cron.php b/cron/status.cron.php index d72e8a85..598373ef 100755 --- a/cron/status.cron.php +++ b/cron/status.cron.php @@ -26,16 +26,16 @@ **/ // include main configuration and functionality -require_once dirname(__FILE__) . '/../config.inc.php'; +require_once dirname(__FILE__) . '/../src/bootstrap.php'; // get the active servers from database $servers = $db->select( - SM_DB_PREFIX.'servers', + PSM_DB_PREFIX.'servers', array('active' => 'yes'), array('server_id', 'ip', 'port', 'label', 'type', 'status', 'active', 'email', 'sms') ); -$updater = new smUpdaterStatus(); +$updater = new \psm\UpdaterStatus(); foreach ($servers as $server) { $status_org = $server['status']; @@ -64,7 +64,7 @@ foreach ($servers as $server) { } $db->save( - SM_DB_PREFIX . 'servers', + PSM_DB_PREFIX . 'servers', $save, array('server_id' => $server['server_id']) ); diff --git a/index.php b/index.php index 21ed3175..8d4ad4cc 100755 --- a/index.php +++ b/index.php @@ -25,12 +25,9 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -if(!file_exists('config.inc.php')) { - die('Failed to locate config file. Please read README.md for more information on how to setup PHP Server Monitor.'); -} -require_once 'config.inc.php'; +require 'src/bootstrap.php'; -sm_no_cache(); +psm_no_cache(); if(isset($_GET['action']) && $_GET['action'] == 'check') { require 'cron/status.cron.php'; @@ -45,7 +42,7 @@ if(!in_array($type, $allowed_types)) { $type = $allowed_types[0]; } -eval('$mod = new mod'.ucfirst($type).'();'); +eval('$mod = new psm\Module\\'.ucfirst($type).'();'); // let the module prepare it's HTML code $mod->createHTML(); diff --git a/install.php b/install.php index 79680f8c..12ed24d2 100755 --- a/install.php +++ b/install.php @@ -28,14 +28,13 @@ // this script creates all the database tables required for server monitor error_reporting(0x0ffffff); -require 'config.inc.php'; +require 'src/bootstrap.php'; if(!function_exists('curl_init')) { die('PHP is installed without the cURL module. Please install cURL first.'); } -$tpl = new smTemplate(); -$tpl->addCSS('monitor.css', 'install'); +$tpl = new psm\Template(); $tpl->newTemplate('install', 'install.tpl.html'); @@ -53,7 +52,7 @@ if(!is_resource($db->getLink())) { $tables = array( 'users' => array( - 0 => "CREATE TABLE `" . SM_DB_PREFIX . "users` ( + 0 => "CREATE TABLE `" . PSM_DB_PREFIX . "users` ( `user_id` int(11) NOT NULL auto_increment, `server_id` varchar(255) NOT NULL, `name` varchar(255) NOT NULL, @@ -61,11 +60,11 @@ $tables = array( `email` varchar(255) NOT NULL, PRIMARY KEY (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", - 1 => "INSERT INTO `" . SM_DB_PREFIX . "users` (`server_id`, `name`, `mobile`, `email`) VALUES ('1,2', 'example_user', '0123456789', 'user@example.com')" + 1 => "INSERT INTO `" . PSM_DB_PREFIX . "users` (`server_id`, `name`, `mobile`, `email`) VALUES ('1,2', 'example_user', '0123456789', 'user@example.com')" ), 'log' => array( - 0 => "CREATE TABLE `" . SM_DB_PREFIX . "log` ( + 0 => "CREATE TABLE `" . PSM_DB_PREFIX . "log` ( `log_id` int(11) NOT NULL auto_increment, `server_id` int(11) NOT NULL, `type` enum('status','email','sms') NOT NULL, @@ -77,7 +76,7 @@ $tables = array( ), 'servers' => array( - 0 => "CREATE TABLE `" . SM_DB_PREFIX . "servers` ( + 0 => "CREATE TABLE `" . PSM_DB_PREFIX . "servers` ( `server_id` int(11) NOT NULL auto_increment, `ip` varchar(100) NOT NULL, `port` int(5) NOT NULL, @@ -93,18 +92,18 @@ $tables = array( `sms` enum('yes','no') NOT NULL default 'no', PRIMARY KEY (`server_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", - 1 => "INSERT INTO `" . SM_DB_PREFIX . "servers` (`ip`, `port`, `label`, `type`, `status`, `error`, `rtime`, `last_online`, `last_check`, `active`, `email`, `sms`) VALUES ('http://sourceforge.net/index.php', 80, 'SourceForge', 'website', 'on', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 'yes', 'yes', 'yes'), ('smtp.gmail.com', 465, 'Gmail SMTP', 'service', 'on', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 'yes', 'yes', 'yes')", + 1 => "INSERT INTO `" . PSM_DB_PREFIX . "servers` (`ip`, `port`, `label`, `type`, `status`, `error`, `rtime`, `last_online`, `last_check`, `active`, `email`, `sms`) VALUES ('http://sourceforge.net/index.php', 80, 'SourceForge', 'website', 'on', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 'yes', 'yes', 'yes'), ('smtp.gmail.com', 465, 'Gmail SMTP', 'service', 'on', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 'yes', 'yes', 'yes')", ), 'config' => array( - 0 => "CREATE TABLE `" . SM_DB_PREFIX . "config` ( + 0 => "CREATE TABLE `" . PSM_DB_PREFIX . "config` ( `config_id` int(11) NOT NULL AUTO_INCREMENT, `key` varchar(255) NOT NULL, `value` varchar(255) NOT NULL, PRIMARY KEY (`config_id`), KEY `key` (`key`(50)) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", - 1 => "INSERT INTO `" . SM_DB_PREFIX . "config` (`config_id`, `key`, `value`) VALUES + 1 => "INSERT INTO `" . PSM_DB_PREFIX . "config` (`config_id`, `key`, `value`) VALUES (null, 'language', 'en'), (null, 'email_status', '1'), (null, 'email_from_email', 'monitor@example.org'), @@ -128,10 +127,10 @@ $tables = array( $result = array(); foreach($tables as $name => $queries) { - $if_table_exists = $db->query('SHOW TABLES LIKE \'' . SM_DB_PREFIX . $name.'\''); + $if_table_exists = $db->query('SHOW TABLES LIKE \'' . PSM_DB_PREFIX . $name.'\''); if(!empty($if_table_exists)) { - $message = 'Table ' . SM_DB_PREFIX . $name . ' already exists in your database!'; + $message = 'Table ' . PSM_DB_PREFIX . $name . ' already exists in your database!'; } else { $message = ''; diff --git a/src/bootstrap.php b/src/bootstrap.php new file mode 100755 index 00000000..9f46d547 --- /dev/null +++ b/src/bootstrap.php @@ -0,0 +1,57 @@ + \ No newline at end of file diff --git a/classes/sm/smCore.class.php b/src/includes/config.inc.php.sample similarity index 79% rename from classes/sm/smCore.class.php rename to src/includes/config.inc.php.sample index 58f1dfd8..40cdca56 100755 --- a/classes/sm/smCore.class.php +++ b/src/includes/config.inc.php.sample @@ -25,13 +25,16 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -abstract class smCore { - public $db; - - function __construct() { - // add database handler - $this->db = $GLOBALS['db']; - } -} +define('SM_CONFIG', true); +// Prefix used for tables +define('SM_DB_PREFIX', 'monitor_'); +// Database username +define('SM_DB_USER', 'db_user'); +// Database password +define('SM_DB_PASS', 'db_pass'); +// Database name +define('SM_DB_NAME', 'db_name'); +// Database host +define('SM_DB_HOST', 'localhost'); ?> \ No newline at end of file diff --git a/functions.inc.php b/src/includes/functions.inc.php similarity index 76% rename from functions.inc.php rename to src/includes/functions.inc.php index f7a333ad..a65ef9dc 100755 --- a/functions.inc.php +++ b/src/includes/functions.inc.php @@ -25,38 +25,6 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -/** - * - * Autoload - * - */ -function __autoload($class) { - // first check if a subdir exists for the class - // it splits using uppercase chars - preg_match_all("/(\P{Lu}+)|(\p{Lu}+\P{Lu}*)/", $class, $subdir_matches); - - if(!empty($subdir_matches) && count($subdir_matches[0]) > 1) { - // okay we have some upper case, lets see if a dir exists - $dir = dirname(__FILE__) . '/classes/' . trim($subdir_matches[0][0]); - $file = $dir . '/' . trim($class) . '.class.php'; - - if(is_dir($dir) && file_exists($file)) { - require $file; - return $file; - } - } else { - $file = dirname(__FILE__).'/classes/'.trim(strtolower($class)).'.class.php'; - - if(file_exists($file)){ - require $file; - return $file; - } - } - - trigger_error("KERNEL_ERR : Unable to find file:\n\t\t[$file]\n\t associated with class:\n\t\t$class", E_USER_ERROR); - return false; -} - ############################################### # # Language functions @@ -67,9 +35,9 @@ function __autoload($class) { * Retrieve language settings from the selected language file * * @return string - * @see sm_load_lang() + * @see psm_load_lang() */ -function sm_get_lang() { +function psm_get_lang() { $args = func_get_args(); if(empty($args)) return $GLOBALS['sm_lang']; @@ -89,10 +57,10 @@ function sm_get_lang() { * Load language from the language file to the $GLOBALS['sm_lang'] variable * * @param string $lang language - * @see sm_get_lang() + * @see psm_get_lang() */ -function sm_load_lang($lang) { - $lang_file = dirname(__FILE__) . '/lang/' . $lang . '.lang.php'; +function psm_load_lang($lang) { + $lang_file = PSM_PATH_LANG . $lang . '.lang.php'; if(!file_exists($lang_file)) { die('unable to load language file: ' . $lang_file); @@ -107,11 +75,11 @@ function sm_load_lang($lang) { * Retrieve a list with keys of the available languages * * @return array - * @see sm_load_lang() + * @see psm_load_lang() */ -function sm_get_langs() { +function psm_get_langs() { $fn_ext = '.lang.php'; - $lang_files = glob(dirname(__FILE__) . '/lang/*' . $fn_ext); + $lang_files = glob(PSM_PATH_LANG . '*' . $fn_ext); $langs = array(); foreach($lang_files as $file) { @@ -122,13 +90,13 @@ function sm_get_langs() { /** * Get a setting from the config. - * The config must have been loaded first using sm_load_conf() + * The config must have been loaded first using psm_load_conf() * * @param string $key * @return string - * @see sm_load_conf() + * @see psm_load_conf() */ -function sm_get_conf($key) { +function psm_get_conf($key) { $result = (isset($GLOBALS['sm_config'][$key])) ? $GLOBALS['sm_config'][$key] : null; return $result; @@ -138,14 +106,14 @@ function sm_get_conf($key) { * Load config from the database to the $GLOBALS['sm_config'] variable * * @global object $db - * @see sm_get_conf() + * @see psm_get_conf() */ -function sm_load_conf() { +function psm_load_conf() { global $db; // load config from database into global scope $GLOBALS['sm_config'] = array(); - $config_db = $db->select(SM_DB_PREFIX . 'config', null, array('key', 'value')); + $config_db = $db->select(PSM_DB_PREFIX . 'config', null, array('key', 'value')); foreach($config_db as $setting) { $GLOBALS['sm_config'][$setting['key']] = $setting['value']; } @@ -170,11 +138,11 @@ function sm_load_conf() { * @param string $server_id * @param string $message */ -function sm_add_log($server_id, $type, $message, $user_id = null) { +function psm_add_log($server_id, $type, $message, $user_id = null) { global $db; $db->save( - SM_DB_PREFIX.'log', + PSM_DB_PREFIX.'log', array( 'server_id' => $server_id, 'type' => $type, @@ -192,10 +160,10 @@ function sm_add_log($server_id, $type, $message, $user_id = null) { * @param array $server information about the server which may be placed in a message: %KEY% will be replaced by your value * @return string parsed message */ -function sm_parse_msg($status, $type, $vars) { +function psm_parse_msg($status, $type, $vars) { $message = ''; - $message = sm_get_lang('notifications', $status . '_' . $type); + $message = psm_get_lang('notifications', $status . '_' . $type); if(!$message) { return $message; @@ -215,7 +183,7 @@ function sm_parse_msg($status, $type, $vars) { * @param string $href * @return string cURL result */ -function sm_curl_get($href) { +function psm_curl_get($href) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); @@ -236,7 +204,7 @@ function sm_curl_get($href) { * @return string * @todo add translation to timespan messages */ -function sm_timespan($time) { +function psm_timespan($time) { if ($time !== intval($time)) { $time = strtotime($time); } $d = time() - $time; if ($time < strtotime(date('Y-m-d 00:00:00')) - 60*60*24*3) { @@ -266,17 +234,17 @@ function sm_timespan($time) { * @global object $db * @return boolean */ -function sm_check_updates() { +function psm_check_updates() { global $db; - $last_update = sm_get_conf('last_update_check'); + $last_update = psm_get_conf('last_update_check'); if((time() - (7 * 24 * 60 * 60)) > $last_update) { // been more than a week since update, lets go // update "update-date" - $db->save(SM_DB_PREFIX . 'config', array('value' => time()), array('key' => 'last_update_check')); - $latest = sm_curl_get('http://phpservermon.neanderthal-technology.com/version'); - $current = sm_get_conf('version'); + $db->save(PSM_DB_PREFIX . 'config', array('value' => time()), array('key' => 'last_update_check')); + $latest = psm_curl_get('http://phpservermon.neanderthal-technology.com/version'); + $current = psm_get_conf('version'); if((int) $current < (int) $latest) { // new update available @@ -307,7 +275,7 @@ function pre($arr = null) { /** * Send headers to the browser to avoid caching */ -function sm_no_cache() { +function psm_no_cache() { header("Expires: Mon, 20 Dec 1998 01:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-cache, must-revalidate"); diff --git a/lang/de.lang.php b/src/lang/de.lang.php similarity index 100% rename from lang/de.lang.php rename to src/lang/de.lang.php diff --git a/lang/en.lang.php b/src/lang/en.lang.php similarity index 100% rename from lang/en.lang.php rename to src/lang/en.lang.php diff --git a/lang/fr.lang.php b/src/lang/fr.lang.php similarity index 100% rename from lang/fr.lang.php rename to src/lang/fr.lang.php diff --git a/lang/kr.lang.php b/src/lang/kr.lang.php similarity index 100% rename from lang/kr.lang.php rename to src/lang/kr.lang.php diff --git a/lang/nl.lang.php b/src/lang/nl.lang.php similarity index 100% rename from lang/nl.lang.php rename to src/lang/nl.lang.php diff --git a/classes/sm/smDatabase.class.php b/src/psm/Database.class.php similarity index 98% rename from classes/sm/smDatabase.class.php rename to src/psm/Database.class.php index 80c7bc43..3e3d6e87 100755 --- a/classes/sm/smDatabase.class.php +++ b/src/psm/Database.class.php @@ -25,7 +25,9 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -class smDatabase { +namespace psm; + +class Database { protected $debug = array(); protected $last_inserted_id; @@ -35,9 +37,9 @@ class smDatabase { function __construct() { // Initizale connection - $this->link = mysql_connect(SM_DB_HOST, SM_DB_USER, SM_DB_PASS); + $this->link = mysql_connect(PSM_DB_HOST, PSM_DB_USER, PSM_DB_PASS); - if (!mysql_select_db(SM_DB_NAME, $this->link)) { + if (!mysql_select_db(PSM_DB_NAME, $this->link)) { trigger_error(mysql_errno() . ": " . mysql_error()); } diff --git a/classes/mod/modConfig.class.php b/src/psm/Module/Config.class.php similarity index 66% rename from classes/mod/modConfig.class.php rename to src/psm/Module/Config.class.php index 15e97824..cbc0ee93 100755 --- a/classes/mod/modConfig.class.php +++ b/src/psm/Module/Config.class.php @@ -25,7 +25,9 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -class modConfig extends modCore { +namespace psm\Module; + +class Config extends Core { function __construct() { parent::__construct(); @@ -49,7 +51,7 @@ class modConfig extends modCore { */ public function populateFields() { $config_db = $this->db->select( - SM_DB_PREFIX . 'config', + PSM_DB_PREFIX . 'config', null, array('key', 'value') ); @@ -60,10 +62,10 @@ class modConfig extends modCore { } // generate language array - $lang_keys = sm_get_langs(); + $lang_keys = psm_get_langs(); $languages = array(); foreach($lang_keys as $key) { - $label = sm_get_lang('config', 'language_' . $key); + $label = psm_get_lang('config', 'language_' . $key); // if we don't have a proper label, just show the key.. // better something than nothing huh if($label == null) { @@ -125,10 +127,10 @@ class modConfig extends modCore { // save all values to the database foreach($clean as $key => $value) { // check if key already exists, otherwise add it - if(sm_get_conf($key) === null) { + if(psm_get_conf($key) === null) { // not yet set, add it $this->db->save( - SM_DB_PREFIX . 'config', + PSM_DB_PREFIX . 'config', array( 'key' => $key, 'value' => $value, @@ -137,16 +139,16 @@ class modConfig extends modCore { } else { // update $this->db->save( - SM_DB_PREFIX . 'config', + PSM_DB_PREFIX . 'config', array('value' => $value), array('key' => $key) ); } } - $this->message = sm_get_lang('config', 'updated'); + $this->message = psm_get_lang('config', 'updated'); - if($clean['language'] != sm_get_conf('language')) { + if($clean['language'] != psm_get_conf('language')) { header('Location: ' . $_SERVER['REQUEST_URI']); die(); } @@ -157,35 +159,35 @@ class modConfig extends modCore { $this->tpl->addTemplateData( $this->getTemplateId(), array( - 'label_settings_email' => sm_get_lang('config', 'settings_email'), - 'label_settings_sms' => sm_get_lang('config', 'settings_sms'), - 'label_settings_notification' => sm_get_lang('config', 'settings_notification'), - 'label_settings_log' => sm_get_lang('config', 'settings_log'), - 'label_general' => sm_get_lang('config', 'general'), - 'label_language' => sm_get_lang('config', 'language'), - 'label_show_update' => sm_get_lang('config', 'show_update'), - 'label_email_status' => sm_get_lang('config', 'email_status'), - 'label_email_from_email' => sm_get_lang('config', 'email_from_email'), - 'label_email_from_name' => sm_get_lang('config', 'email_from_name'), - 'label_sms_status' => sm_get_lang('config', 'sms_status'), - 'label_sms_gateway' => sm_get_lang('config', 'sms_gateway'), - 'label_sms_gateway_mosms' => sm_get_lang('config', 'sms_gateway_mosms'), - 'label_sms_gateway_mollie' => sm_get_lang('config', 'sms_gateway_mollie'), - 'label_sms_gateway_spryng' => sm_get_lang('config', 'sms_gateway_spryng'), - 'label_sms_gateway_inetworx' => sm_get_lang('config', 'sms_gateway_inetworx'), - 'label_sms_gateway_clickatell' => sm_get_lang('config', 'sms_gateway_clickatell'), - 'label_sms_gateway_username' => sm_get_lang('config', 'sms_gateway_username'), - 'label_sms_gateway_password' => sm_get_lang('config', 'sms_gateway_password'), - 'label_sms_from' => sm_get_lang('config', 'sms_from'), - 'label_alert_type' => sm_get_lang('config', 'alert_type'), - 'label_alert_type_description' => sm_get_lang('config', 'alert_type_description'), - 'label_alert_type_status' => sm_get_lang('config', 'alert_type_status'), - 'label_alert_type_offline' => sm_get_lang('config', 'alert_type_offline'), - 'label_alert_type_always' => sm_get_lang('config', 'alert_type_always'), - 'label_log_status' => sm_get_lang('config', 'log_status'), - 'label_log_email' => sm_get_lang('config', 'log_email'), - 'label_log_sms' => sm_get_lang('config', 'log_sms'), - 'label_auto_refresh_servers' => sm_get_lang('config', 'auto_refresh_servers'), + 'label_settings_email' => psm_get_lang('config', 'settings_email'), + 'label_settings_sms' => psm_get_lang('config', 'settings_sms'), + 'label_settings_notification' => psm_get_lang('config', 'settings_notification'), + 'label_settings_log' => psm_get_lang('config', 'settings_log'), + 'label_general' => psm_get_lang('config', 'general'), + 'label_language' => psm_get_lang('config', 'language'), + 'label_show_update' => psm_get_lang('config', 'show_update'), + 'label_email_status' => psm_get_lang('config', 'email_status'), + 'label_email_from_email' => psm_get_lang('config', 'email_from_email'), + 'label_email_from_name' => psm_get_lang('config', 'email_from_name'), + 'label_sms_status' => psm_get_lang('config', 'sms_status'), + 'label_sms_gateway' => psm_get_lang('config', 'sms_gateway'), + 'label_sms_gateway_mosms' => psm_get_lang('config', 'sms_gateway_mosms'), + 'label_sms_gateway_mollie' => psm_get_lang('config', 'sms_gateway_mollie'), + 'label_sms_gateway_spryng' => psm_get_lang('config', 'sms_gateway_spryng'), + 'label_sms_gateway_inetworx' => psm_get_lang('config', 'sms_gateway_inetworx'), + 'label_sms_gateway_clickatell' => psm_get_lang('config', 'sms_gateway_clickatell'), + 'label_sms_gateway_username' => psm_get_lang('config', 'sms_gateway_username'), + 'label_sms_gateway_password' => psm_get_lang('config', 'sms_gateway_password'), + 'label_sms_from' => psm_get_lang('config', 'sms_from'), + 'label_alert_type' => psm_get_lang('config', 'alert_type'), + '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_log_status' => psm_get_lang('config', 'log_status'), + 'label_log_email' => psm_get_lang('config', 'log_email'), + 'label_log_sms' => psm_get_lang('config', 'log_sms'), + 'label_auto_refresh_servers' => psm_get_lang('config', 'auto_refresh_servers'), ) ); diff --git a/classes/mod/modCore.class.php b/src/psm/Module/Core.class.php similarity index 81% rename from classes/mod/modCore.class.php rename to src/psm/Module/Core.class.php index 10e50677..32e202e7 100755 --- a/classes/mod/modCore.class.php +++ b/src/psm/Module/Core.class.php @@ -25,17 +25,19 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -abstract class modCore { +namespace psm\Module; + +abstract class Core { /** * Custom message - * @var string + * @var string $message */ public $message; /** * Current mode. Can be used by modules to determine * what to do - * @var string + * @var string $mode */ public $mode; @@ -47,13 +49,13 @@ abstract class modCore { /** * smDatabase object - * @var object + * @var object $db */ protected $db; /** - * smTemplate object - * @var object + * \psm\Template object + * @var object $tpl */ protected $tpl; @@ -67,8 +69,8 @@ abstract class modCore { function __construct() { global $db; - $this->db = ($db) ? $db : new smDatabase(); - $this->tpl = new smTemplate(); + $this->db = ($db) ? $db : new \psm\Database(); + $this->tpl = new \psm\Template(); } @@ -87,7 +89,7 @@ abstract class modCore { $html_footer = ''; } - if(sm_get_conf('show_update')) { + if(psm_get_conf('show_update')) { // user wants updates, lets see what we can do $this->createHTMLUpdateAvailable(); } @@ -101,7 +103,7 @@ abstract class modCore { 'content' => $this->tpl->getTemplate($this->getTemplateId()), 'message' => ($this->message == '') ? ' ' : $this->message, 'html_footer' => $html_footer, - 'label_back_to_top' => sm_get_lang('system', 'back_to_top'), + 'label_back_to_top' => psm_get_lang('system', 'back_to_top'), ) ); @@ -116,12 +118,12 @@ abstract class modCore { protected function createHTMLUpdateAvailable() { // check for updates? - if(sm_check_updates()) { + if(psm_check_updates()) { // yay, new update available =D $this->tpl->addTemplateData( 'main', array( - 'update_available' => '
'.sm_get_lang('system', 'update_available').'
', + 'update_available' => '
'.psm_get_lang('system', 'update_available').'
', ) ); } @@ -138,15 +140,15 @@ abstract class modCore { $this->tpl->addTemplateData( 'main', array( - 'title' => strtoupper(sm_get_lang('system', 'title')), - 'subtitle' => sm_get_lang('system', $type), + 'title' => strtoupper(psm_get_lang('system', 'title')), + 'subtitle' => psm_get_lang('system', $type), 'active_' . $type => 'active', - 'label_servers' => sm_get_lang('system', 'servers'), - 'label_users' => sm_get_lang('system', 'users'), - 'label_log' => sm_get_lang('system', 'log'), - 'label_config' => sm_get_lang('system', 'config'), - 'label_update' => sm_get_lang('system', 'update'), - 'label_help' => sm_get_lang('system', 'help'), + 'label_servers' => psm_get_lang('system', 'servers'), + 'label_users' => psm_get_lang('system', 'users'), + 'label_log' => psm_get_lang('system', 'log'), + 'label_config' => psm_get_lang('system', 'config'), + 'label_update' => psm_get_lang('system', 'update'), + 'label_help' => psm_get_lang('system', 'help'), ) ); } diff --git a/classes/mod/modLog.class.php b/src/psm/Module/Log.class.php similarity index 82% rename from classes/mod/modLog.class.php rename to src/psm/Module/Log.class.php index 515a74a1..2f05c10b 100755 --- a/classes/mod/modLog.class.php +++ b/src/psm/Module/Log.class.php @@ -25,10 +25,12 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ +namespace psm\Module; + /** * Log module. Create the page to view previous log messages */ -class modLog extends modCore { +class Log extends Core { function __construct() { parent::__construct(); @@ -36,8 +38,6 @@ class modLog extends modCore { // override parent::createHTML() public function createHTML() { - $this->tpl->addCSS('tabs.css', 'main'); - $this->createHTMLList(); return parent::createHTML(); @@ -55,7 +55,7 @@ class modLog extends modCore { $entries['sms'] = $this->getEntries('sms'); // get users - $users = $this->db->select(SM_DB_PREFIX.'users', null, array('user_id','name')); + $users = $this->db->select(PSM_DB_PREFIX.'users', null, array('user_id','name')); $users_labels = array(); foreach ($users as $user) { @@ -122,8 +122,8 @@ class modLog extends modCore { '\'%H:%i:%s %d-%m-%y\''. ') AS `datetime_format`, '. '`user_id` '. - 'FROM `'.SM_DB_PREFIX.'log` AS `log` '. - 'JOIN `'.SM_DB_PREFIX.'servers` AS `servers` ON (`servers`.`server_id`=`log`.`server_id`) '. + 'FROM `'.PSM_DB_PREFIX.'log` AS `log` '. + 'JOIN `'.PSM_DB_PREFIX.'servers` AS `servers` ON (`servers`.`server_id`=`log`.`server_id`) '. 'WHERE `log`.`type`=\''.$type.'\' '. 'ORDER BY `datetime` DESC '. 'LIMIT 0,20' @@ -136,15 +136,15 @@ class modLog extends modCore { $this->tpl->addTemplateData( $this->getTemplateId(), array( - 'label_status' => sm_get_lang('log', 'status'), - 'label_email' => sm_get_lang('log', 'email'), - 'label_sms' => sm_get_lang('log', 'sms'), - 'label_title' => sm_get_lang('log', 'title'), - 'label_server' => sm_get_lang('servers', 'server'), - 'label_type' => sm_get_lang('log', 'type'), - 'label_message' => sm_get_lang('system', 'message'), - 'label_date' => sm_get_lang('system', 'date'), - 'label_users' => ucfirst(sm_get_lang('system', 'users')), + 'label_status' => psm_get_lang('log', 'status'), + 'label_email' => psm_get_lang('log', 'email'), + 'label_sms' => psm_get_lang('log', 'sms'), + 'label_title' => psm_get_lang('log', 'title'), + 'label_server' => psm_get_lang('servers', 'server'), + 'label_type' => psm_get_lang('log', 'type'), + 'label_message' => psm_get_lang('system', 'message'), + 'label_date' => psm_get_lang('system', 'date'), + 'label_users' => ucfirst(psm_get_lang('system', 'users')), ) ); diff --git a/classes/mod/modServers.class.php b/src/psm/Module/Servers.class.php similarity index 77% rename from classes/mod/modServers.class.php rename to src/psm/Module/Servers.class.php index 0bb7aed8..c1114e31 100755 --- a/classes/mod/modServers.class.php +++ b/src/psm/Module/Servers.class.php @@ -25,10 +25,12 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ +namespace psm\Module; + /** * Server module. Add/edit/delete servers, show a list of all servers etc. */ -class modServers extends modCore { +class Servers extends Core { function __construct() { parent::__construct(); @@ -76,7 +78,7 @@ class modServers extends modCore { switch(intval($server_id)) { case 0: // insert mode - $tpl_data['titlemode'] = sm_get_lang('system', 'insert'); + $tpl_data['titlemode'] = psm_get_lang('system', 'insert'); $tpl_data['edit_server_id'] = '0'; break; default: @@ -84,7 +86,7 @@ class modServers extends modCore { // get server entry $edit_server = $this->db->selectRow( - SM_DB_PREFIX.'servers', + PSM_DB_PREFIX.'servers', array('server_id' => $server_id) ); if (empty($edit_server)) { @@ -93,7 +95,7 @@ class modServers extends modCore { } $tpl_data = array_merge($tpl_data, array( - 'titlemode' => sm_get_lang('system', 'edit') . ' ' . $edit_server['label'], + 'titlemode' => psm_get_lang('system', 'edit') . ' ' . $edit_server['label'], 'edit_server_id' => $edit_server['server_id'], 'edit_value_label' => $edit_server['label'], 'edit_value_ip' => $edit_server['ip'], @@ -143,7 +145,7 @@ class modServers extends modCore { '`active`, '. '`email`, '. '`sms` '. - 'FROM `'.SM_DB_PREFIX.'servers` '. + 'FROM `'.PSM_DB_PREFIX.'servers` '. 'ORDER BY `active` ASC, `status` DESC, `type` ASC, `label` ASC' ); @@ -162,7 +164,7 @@ class modServers extends modCore { $this->tpl->addTemplateDataRepeat($this->getTemplateId(), 'servers', $servers); // check if we need to add the auto refresh - $auto_refresh = sm_get_conf('auto_refresh_servers'); + $auto_refresh = psm_get_conf('auto_refresh_servers'); if(intval($auto_refresh) > 0) { // add it $this->tpl->newTemplate('main_auto_refresh', 'main.tpl.html'); @@ -192,16 +194,16 @@ class modServers extends modCore { if ((int) $_POST['server_id'] > 0) { // edit $this->db->save( - SM_DB_PREFIX.'servers', + PSM_DB_PREFIX.'servers', $clean, array('server_id' => $_POST['server_id']) ); - $this->message = sm_get_lang('servers', 'updated'); + $this->message = psm_get_lang('servers', 'updated'); } else { // add $clean['status'] = 'on'; - $this->db->save(SM_DB_PREFIX.'servers', $clean); - $this->message = sm_get_lang('servers', 'inserted'); + $this->db->save(PSM_DB_PREFIX.'servers', $clean); + $this->message = psm_get_lang('servers', 'inserted'); } } } @@ -212,12 +214,12 @@ class modServers extends modCore { protected function executeDelete() { // do delete $this->db->delete( - SM_DB_PREFIX . 'servers', + PSM_DB_PREFIX . 'servers', array( 'server_id' => $_GET['delete'] ) ); - $this->message = sm_get_lang('system', 'deleted'); + $this->message = psm_get_lang('system', 'deleted'); } // override parent::createHTMLLabels() @@ -225,23 +227,23 @@ class modServers extends modCore { $this->tpl->addTemplateData( $this->getTemplateId(), array( - 'label_label' => sm_get_lang('servers', 'label'), - 'label_domain' => sm_get_lang('servers', 'domain'), - 'label_port' => sm_get_lang('servers', 'port'), - 'label_type' => sm_get_lang('servers', 'type'), - 'label_last_check' => sm_get_lang('servers', 'last_check'), - 'label_rtime' => sm_get_lang('servers', 'rtime'), - 'label_last_online' => sm_get_lang('servers', 'last_online'), - 'label_monitoring' => sm_get_lang('servers', 'monitoring'), - 'label_send_email' => sm_get_lang('servers', 'send_email'), - 'label_send_sms' => sm_get_lang('servers', 'send_sms'), - 'label_action' => sm_get_lang('system', 'action'), - 'label_save' => sm_get_lang('system', 'save'), - 'label_edit' => sm_get_lang('system', 'edit') . ' ' . sm_get_lang('servers', 'server'), - 'label_delete' => sm_get_lang('system', 'delete') . ' ' . sm_get_lang('servers', 'server'), - 'label_yes' => sm_get_lang('system', 'yes'), - 'label_no' => sm_get_lang('system', 'no'), - 'label_add_new' => sm_get_lang('system', 'add_new'), + 'label_label' => psm_get_lang('servers', 'label'), + 'label_domain' => psm_get_lang('servers', 'domain'), + 'label_port' => psm_get_lang('servers', 'port'), + 'label_type' => psm_get_lang('servers', 'type'), + 'label_last_check' => psm_get_lang('servers', 'last_check'), + 'label_rtime' => psm_get_lang('servers', 'rtime'), + 'label_last_online' => psm_get_lang('servers', 'last_online'), + 'label_monitoring' => psm_get_lang('servers', 'monitoring'), + 'label_send_email' => psm_get_lang('servers', 'send_email'), + 'label_send_sms' => psm_get_lang('servers', 'send_sms'), + 'label_action' => psm_get_lang('system', 'action'), + 'label_save' => psm_get_lang('system', 'save'), + 'label_edit' => psm_get_lang('system', 'edit') . ' ' . psm_get_lang('servers', 'server'), + 'label_delete' => psm_get_lang('system', 'delete') . ' ' . psm_get_lang('servers', 'server'), + 'label_yes' => psm_get_lang('system', 'yes'), + 'label_no' => psm_get_lang('system', 'no'), + 'label_add_new' => psm_get_lang('system', 'add_new'), ) ); diff --git a/classes/mod/modStatus.class.php b/src/psm/Module/Status.class.php similarity index 92% rename from classes/mod/modStatus.class.php rename to src/psm/Module/Status.class.php index 44ece599..cdf6a54c 100755 --- a/classes/mod/modStatus.class.php +++ b/src/psm/Module/Status.class.php @@ -26,10 +26,12 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ +namespace psm\Module; + /** * Status module */ -class modStatus extends modCore { +class Status extends Core { function __construct() { parent::__construct(); @@ -52,7 +54,7 @@ class modStatus extends modCore { // get the active servers from database $servers = $this->db->select( - SM_DB_PREFIX.'servers', + PSM_DB_PREFIX.'servers', array('active' => 'yes'), array('server_id', 'label', 'status', 'last_online', 'last_check', 'rtime') ); @@ -70,8 +72,8 @@ class modStatus extends modCore { $this->tpl->addTemplateData($this->getTemplateId(), $tpl_data); foreach ($servers as $server) { - $server['last_checked_nice'] = sm_timespan($server['last_check']); - $server['last_online_nice'] = sm_timespan($server['last_online']); + $server['last_checked_nice'] = psm_timespan($server['last_check']); + $server['last_online_nice'] = psm_timespan($server['last_online']); if ($server['status'] == "off") { $offline[$server['server_id']] = $server; diff --git a/classes/mod/modUsers.class.php b/src/psm/Module/Users.class.php similarity index 81% rename from classes/mod/modUsers.class.php rename to src/psm/Module/Users.class.php index 8995c304..78dfb5df 100755 --- a/classes/mod/modUsers.class.php +++ b/src/psm/Module/Users.class.php @@ -25,11 +25,13 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ +namespace psm\Module; + /** * User module. Add, edit and delete users, or assign * servers to users. */ -class modUsers extends modCore { +class Users extends Core { public $servers; function __construct() { @@ -50,7 +52,7 @@ class modUsers extends modCore { } } - $this->servers = $this->db->select(SM_DB_PREFIX.'servers', null, array('server_id', 'label')); + $this->servers = $this->db->select(PSM_DB_PREFIX.'servers', null, array('server_id', 'label')); } // override parent::createHTML() @@ -81,7 +83,7 @@ class modUsers extends modCore { switch((int) $user_id) { case 0: // insert mode - $tpl_data['titlemode'] = sm_get_lang('system', 'insert'); + $tpl_data['titlemode'] = psm_get_lang('system', 'insert'); $tpl_data['edit_user_id'] = '0'; // add inactive class to all servers @@ -95,7 +97,7 @@ class modUsers extends modCore { // get user entry $edit_user = $this->db->selectRow( - SM_DB_PREFIX.'users', + PSM_DB_PREFIX.'users', array('user_id' => $user_id) ); if (empty($edit_user)) { @@ -104,7 +106,7 @@ class modUsers extends modCore { } $tpl_data = array_merge($tpl_data, array( - 'titlemode' => sm_get_lang('system', 'edit') . ' ' . $edit_user['name'], + 'titlemode' => psm_get_lang('system', 'edit') . ' ' . $edit_user['name'], 'edit_user_id' => $edit_user['user_id'], 'edit_value_name' => $edit_user['name'], 'edit_value_mobile' => $edit_user['mobile'], @@ -146,7 +148,7 @@ class modUsers extends modCore { // get users from database $users = $this->db->select( - SM_DB_PREFIX.'users', + PSM_DB_PREFIX.'users', null, null, null, @@ -193,15 +195,15 @@ class modUsers extends modCore { if ((int) $_POST['user_id'] > 0) { // edit $this->db->save( - SM_DB_PREFIX.'users', + PSM_DB_PREFIX.'users', $clean, array('user_id' => $_POST['user_id']) ); - $this->message = sm_get_lang('users', 'updated'); + $this->message = psm_get_lang('users', 'updated'); } else { // add - $this->db->save(SM_DB_PREFIX.'users', $clean); - $this->message = sm_get_lang('users', 'inserted'); + $this->db->save(PSM_DB_PREFIX.'users', $clean); + $this->message = psm_get_lang('users', 'inserted'); } } } @@ -212,12 +214,12 @@ class modUsers extends modCore { protected function executeDelete() { // do delete $this->db->delete( - SM_DB_PREFIX . 'users', + PSM_DB_PREFIX . 'users', array( 'user_id' => $_GET['delete'] ) ); - $this->message = sm_get_lang('system', 'deleted'); + $this->message = psm_get_lang('system', 'deleted'); } // override parent::createHTMLLabels() @@ -225,16 +227,16 @@ class modUsers extends modCore { $this->tpl->addTemplateData( $this->getTemplateId(), array( - 'label_users' => sm_get_lang('system', 'users'), - 'label_name' => sm_get_lang('users', 'name'), - 'label_mobile' => sm_get_lang('users', 'mobile'), - 'label_email' => sm_get_lang('users', 'email'), - 'label_servers' => sm_get_lang('system', 'servers'), - 'label_action' => sm_get_lang('system', 'action'), - 'label_save' => sm_get_lang('system', 'save'), - 'label_edit' => sm_get_lang('system', 'edit') . ' ' . sm_get_lang('users', 'user'), - 'label_delete' => sm_get_lang('system', 'delete') . ' ' . sm_get_lang('users', 'user'), - 'label_add_new' => sm_get_lang('system', 'add_new'), + 'label_users' => psm_get_lang('system', 'users'), + 'label_name' => psm_get_lang('users', 'name'), + 'label_mobile' => psm_get_lang('users', 'mobile'), + 'label_email' => psm_get_lang('users', 'email'), + 'label_servers' => psm_get_lang('system', 'servers'), + 'label_action' => psm_get_lang('system', 'action'), + 'label_save' => psm_get_lang('system', 'save'), + 'label_edit' => psm_get_lang('system', 'edit') . ' ' . psm_get_lang('users', 'user'), + 'label_delete' => psm_get_lang('system', 'delete') . ' ' . psm_get_lang('users', 'user'), + 'label_add_new' => psm_get_lang('system', 'add_new'), ) ); diff --git a/classes/sm/smTemplate.class.php b/src/psm/Template.class.php similarity index 67% rename from classes/sm/smTemplate.class.php rename to src/psm/Template.class.php index bcbd6da7..efc63787 100755 --- a/classes/sm/smTemplate.class.php +++ b/src/psm/Template.class.php @@ -25,9 +25,9 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -class smTemplate { - protected $css_files = array(); - protected $js_files = array(); +namespace psm; + +class Template { protected $output; protected $templates = array(); @@ -46,8 +46,8 @@ class smTemplate { public function newTemplate($id, $filename) { if (file_exists($filename)) { $this->templates[$id] = $this->parseFile($filename); - } elseif (file_exists(SM_PATH_TPL.$filename)) { - $this->templates[$id] = $this->parseFile(SM_PATH_TPL.$filename); + } elseif (file_exists(PSM_PATH_TPL.$filename)) { + $this->templates[$id] = $this->parseFile(PSM_PATH_TPL.$filename); } else { // file does not exist trigger_error('Template not found with id: '.$id.' and filename: '.$filename); @@ -159,9 +159,6 @@ class smTemplate { // check for tpl variables that have not been replaced. ie: {name}. ignore literal stuff, though. ie: {{name}} is {name} and should not be removed preg_match_all('~{?{(.+?)}}?~', $result, $matches); - // add css and javascript files to header - $result = $this->addHeaderFiles($id, $result); - foreach($matches[0] as $match) { if (substr($match, 0, 2) == '{{') { // literal! remove only first and last bracket! @@ -174,48 +171,6 @@ class smTemplate { return $result; } - /** - * Adds a css file to the list which will be added to the template when display() is called - * - * @param string $template_id - * @param string $filename - * @param string $path uses default set in config if non specified - */ - public function addCSS($filename, $template_id = 'main', $path = SM_PATH_CSS) { - if (!isset($this->css_files[$template_id])) { - $this->css_files[$template_id] = array(); - } - - // if file doesn't exist we assume it's inline - $type = (file_exists($path.$filename)) ? 'file' : 'inline'; - - $this->css_files[$template_id][$filename] = array( - 'file' => ($type == 'file') ? $path.$filename : $filename, - 'type' => $type - ); - } - - /** - * Adds a javascript file to the list which will be added to the template when display() is called - * - * @param string $template_id - * @param string $filename path to file or CSS code to be added inline - * @param string $path uses default set in config if non specified - */ - public function addJS($filename, $template_id = 'main', $path = SM_PATH_JS) { - if (!isset($this->js_files[$template_id])) { - $this->js_files[$template_id] = array(); - } - - // if file doesn't exist we assume it's inline - $type = (file_exists($path.$filename)) ? 'file' : 'inline'; - - $this->js_files[$template_id][$filename] = array( - 'file' => ($type == 'file') ? $path.$filename : $filename, - 'type' => $type - ); - } - /** * Get html code for a template, or if no template id given get all templates * @@ -232,62 +187,6 @@ class smTemplate { } } - /** - * Adds the CSS and JavaScript files to the header html. - * - * @param string $template_id - * @param string $html - * @return string new html code - */ - protected function addHeaderFiles($template_id, $html) { - // get code between tags - preg_match_all("{(.*?)<\/head>}is", $html, $matches); - - if (isset($matches[1][0]) && $matches[1][0] != '') { - $header = $matches[1][0]; - - if (isset($this->css_files[$template_id]) && !empty($this->css_files[$template_id])) { - $header .= "\t\n"; - - foreach($this->css_files[$template_id] as $filename => $info) { - switch($info['type']) { - case 'file': - $header .= "\t\n"; - break; - case 'inline': - $header .= - "\t\n"; - break; - } - } - } - - if (isset($this->js_files[$template_id]) && !empty($this->js_files[$template_id])) { - $header .= "\t\n"; - - foreach($this->js_files[$template_id] as $filename => $info) { - switch($info['type']) { - case 'file': - $header .= "\t\n"; - break; - case 'inline': - $header .= - "\t\n"; - break; - } - } - } - // add new header to html - $html = preg_replace('{'.$matches[1][0].'}is', $header, $html); - } - - return $html; - } - /** * * Get file content diff --git a/classes/txtmsg/txtmsgClickatell.class.php b/src/psm/Txtmsg/Clickatell.class.php similarity index 96% rename from classes/txtmsg/txtmsgClickatell.class.php rename to src/psm/Txtmsg/Clickatell.class.php index 8d826e13..a8bd7538 100755 --- a/classes/txtmsg/txtmsgClickatell.class.php +++ b/src/psm/Txtmsg/Clickatell.class.php @@ -25,7 +25,9 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -class txtmsgClickatell extends txtmsgCore { +namespace psm\Txtmsg; + +class Clickatell extends Core { // ========================================================================= // [ Fields ] // ========================================================================= @@ -59,7 +61,7 @@ class txtmsgClickatell extends txtmsgCore { protected function _auth_https_post($host, $path, $data) { $url = $host . $path . $data; - return sm_curl_get($url); + return psm_curl_get($url); } } diff --git a/classes/txtmsg/txtmsgCore.class.php b/src/psm/Txtmsg/Core.class.php similarity index 96% rename from classes/txtmsg/txtmsgCore.class.php rename to src/psm/Txtmsg/Core.class.php index d89229c5..b6726684 100755 --- a/classes/txtmsg/txtmsgCore.class.php +++ b/src/psm/Txtmsg/Core.class.php @@ -25,7 +25,9 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -abstract class txtmsgCore implements txtmsgInterface { +namespace psm\Txtmsg; + +abstract class Core implements TxtmsgInterface { protected $originator; protected $password; protected $recipients = array(); diff --git a/classes/txtmsg/txtmsgInetworx.class.php b/src/psm/Txtmsg/Inetworx.class.php similarity index 98% rename from classes/txtmsg/txtmsgInetworx.class.php rename to src/psm/Txtmsg/Inetworx.class.php index d066fb3d..a327e6b2 100755 --- a/classes/txtmsg/txtmsgInetworx.class.php +++ b/src/psm/Txtmsg/Inetworx.class.php @@ -25,7 +25,9 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -class txtmsgInetworx extends txtmsgCore { +namespace psm\Txtmsg; + +class Inetworx extends Core { // ========================================================================= // [ Fields ] // ========================================================================= diff --git a/classes/txtmsg/txtmsgMollie.class.php b/src/psm/Txtmsg/Mollie.class.php similarity index 98% rename from classes/txtmsg/txtmsgMollie.class.php rename to src/psm/Txtmsg/Mollie.class.php index c3d90711..cfa3d7ed 100755 --- a/classes/txtmsg/txtmsgMollie.class.php +++ b/src/psm/Txtmsg/Mollie.class.php @@ -25,7 +25,9 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -class txtmsgMollie extends txtmsgCore { +namespace psm\Txtmsg; + +class Mollie extends Core { // ========================================================================= // [ Fields ] // ========================================================================= diff --git a/classes/txtmsg/txtmsgMosms.class.php b/src/psm/Txtmsg/Mosms.class.php similarity index 97% rename from classes/txtmsg/txtmsgMosms.class.php rename to src/psm/Txtmsg/Mosms.class.php index 761a098e..8757cf4a 100755 --- a/classes/txtmsg/txtmsgMosms.class.php +++ b/src/psm/Txtmsg/Mosms.class.php @@ -26,7 +26,9 @@ * @since phpservermon 2.1 **/ -class txtmsgMosms extends txtmsgCore { +namespace psm\Txtmsg; + +class Mosms extends Core { // ========================================================================= // [ Fields ] // ========================================================================= diff --git a/classes/txtmsg/txtmsgSpryng.class.php b/src/psm/Txtmsg/Spryng.class.php similarity index 97% rename from classes/txtmsg/txtmsgSpryng.class.php rename to src/psm/Txtmsg/Spryng.class.php index 2ff19a70..3a81cfa0 100755 --- a/classes/txtmsg/txtmsgSpryng.class.php +++ b/src/psm/Txtmsg/Spryng.class.php @@ -25,7 +25,9 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -class txtmsgSpryng extends txtmsgCore { +namespace psm\Txtmsg; + +class Spryng extends Core { // ========================================================================= // [ Fields ] // ========================================================================= diff --git a/classes/txtmsg/txtmsgInterface.class.php b/src/psm/Txtmsg/TxtmsgInterface.class.php similarity index 96% rename from classes/txtmsg/txtmsgInterface.class.php rename to src/psm/Txtmsg/TxtmsgInterface.class.php index aa0e0a42..c5f9399d 100755 --- a/classes/txtmsg/txtmsgInterface.class.php +++ b/src/psm/Txtmsg/TxtmsgInterface.class.php @@ -25,7 +25,9 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -interface txtmsgInterface { +namespace psm\Txtmsg; + +interface TxtmsgInterface { public function setLogin($username, $password); public function setOriginator($originator); diff --git a/classes/sm/smUpdaterStatus.class.php b/src/psm/UpdaterStatus.class.php similarity index 84% rename from classes/sm/smUpdaterStatus.class.php rename to src/psm/UpdaterStatus.class.php index a55a3b51..3b1e2711 100755 --- a/classes/sm/smUpdaterStatus.class.php +++ b/src/psm/UpdaterStatus.class.php @@ -25,7 +25,9 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -class smUpdaterStatus extends smCore { +namespace psm; + +class UpdaterStatus { public $error; public $notify; public $rtime = 0; @@ -33,6 +35,13 @@ class smUpdaterStatus extends smCore { public $status_org = false; public $status_new = false; + public $db; + + function __construct() { + // add database handler + $this->db = $GLOBALS['db']; + } + /** * Set a new server * @@ -168,14 +177,14 @@ class smUpdaterStatus extends smCore { * */ public function notify() { - if(sm_get_conf('email_status') == false && sm_get_conf('sms_status') == false && sm_get_conf('log_status') == false) { + if(psm_get_conf('email_status') == false && psm_get_conf('sms_status') == false && psm_get_conf('log_status') == false) { // seems like we have nothing to do. skip the rest return false; } $notify = false; // check which type of alert the user wants - switch(sm_get_conf('alert_type')) { + switch(psm_get_conf('alert_type')) { case 'always': if($this->status_new == 'off') { // server is offline. we are in error state. @@ -201,22 +210,22 @@ class smUpdaterStatus extends smCore { } // first add to log (we use the same text as the SMS message because its short..) - if(sm_get_conf('log_status')) { - sm_add_log( + if(psm_get_conf('log_status')) { + psm_add_log( $this->server['server_id'], 'status', - sm_parse_msg($this->status_new, 'sms', $this->server) + psm_parse_msg($this->status_new, 'sms', $this->server) ); } // check if email is enabled for this server - if(sm_get_conf('email_status') && $this->server['email'] == 'yes') { + if(psm_get_conf('email_status') && $this->server['email'] == 'yes') { // send email $this->notifyByEmail(); } // check if sms is enabled for this server - if(sm_get_conf('sms_status') && $this->server['sms'] == 'yes') { + if(psm_get_conf('sms_status') && $this->server['sms'] == 'yes') { // yay lets wake those nerds up! $this->notifyByTxtMsg(); } @@ -233,7 +242,7 @@ class smUpdaterStatus extends smCore { // find all the users with this server listed $users = $this->db->select( - SM_DB_PREFIX . 'users', + PSM_DB_PREFIX . 'users', 'FIND_IN_SET(\''.$this->server['server_id'].'\', `server_id`) AND `email` != \'\'', array('user_id', 'name', 'email') ); @@ -243,14 +252,14 @@ class smUpdaterStatus extends smCore { } // build mail object with some default values - $mail = new phpmailer(); + $mail = new \phpmailer(); - $mail->From = sm_get_conf('email_from_email'); - $mail->FromName = sm_get_conf('email_from_name'); - $mail->Subject = sm_parse_msg($this->status_new, 'email_subject', $this->server); + $mail->From = psm_get_conf('email_from_email'); + $mail->FromName = psm_get_conf('email_from_name'); + $mail->Subject = psm_parse_msg($this->status_new, 'email_subject', $this->server); $mail->Priority = 1; - $body = sm_parse_msg($this->status_new, 'email_body', $this->server); + $body = psm_parse_msg($this->status_new, 'email_body', $this->server); $mail->Body = $body; $mail->AltBody = str_replace('
', "\n", $body); @@ -263,9 +272,9 @@ class smUpdaterStatus extends smCore { $mail->ClearAddresses(); } - if(sm_get_conf('log_email')) { + if(psm_get_conf('log_email')) { // save to log - sm_add_log($this->server['server_id'], 'email', $body, implode(',', $userlist)); + psm_add_log($this->server['server_id'], 'email', $body, implode(',', $userlist)); } } @@ -277,7 +286,7 @@ class smUpdaterStatus extends smCore { protected function notifyByTxtMsg() { // send sms to all users for this server using defined gateway $users = $this->db->select( - SM_DB_PREFIX . 'users', + PSM_DB_PREFIX . 'users', 'FIND_IN_SET(\''.$this->server['server_id'].'\', `server_id`) AND `mobile` != \'\'', array('user_id', 'name', 'mobile') ); @@ -291,28 +300,28 @@ class smUpdaterStatus extends smCore { // open the right class // not making this any more dynamic, because perhaps some gateways need custom settings (like Mollie) - switch(strtolower(sm_get_conf('sms_gateway'))) { + switch(strtolower(psm_get_conf('sms_gateway'))) { case 'mosms': - $sms = new txtmsgMosms(); + $sms = new \psm\Txtmsg\Mosms(); break; case 'inetworx': - $sms = new txtmsgInetworx(); + $sms = new \psm\Txtmsg\Inetworx(); break; case 'mollie': - $sms = new txtmsgMollie(); + $sms = new \psm\Txtmsg\Mollie(); $sms->setGateway(1); break; case 'spryng': - $sms = new txtmsgSpryng(); + $sms = new \psm\Txtmsg\Spryng(); break; case 'clickatell': - $sms = new txtmsgClickatell(); + $sms = new \psm\Txtmsg\Clickatell(); break; } // copy login information from the config file - $sms->setLogin(sm_get_conf('sms_gateway_username'), sm_get_conf('sms_gateway_password')); - $sms->setOriginator(sm_get_conf('sms_from')); + $sms->setLogin(psm_get_conf('sms_gateway_username'), psm_get_conf('sms_gateway_password')); + $sms->setOriginator(psm_get_conf('sms_from')); // add all users to the recipients list foreach ($users as $user) { @@ -320,14 +329,14 @@ class smUpdaterStatus extends smCore { $sms->addRecipients($user['mobile']); } - $message = sm_parse_msg($this->status_new, 'sms', $this->server); + $message = psm_parse_msg($this->status_new, 'sms', $this->server); // Send sms $result = $sms->sendSMS($message); - if(sm_get_conf('log_sms')) { + if(psm_get_conf('log_sms')) { // save to log - sm_add_log($this->server['server_id'], 'sms', $message, implode(',', $userlist)); + psm_add_log($this->server['server_id'], 'sms', $message, implode(',', $userlist)); } return $result; } diff --git a/tpl/config.tpl.html b/src/templates/config.tpl.html similarity index 100% rename from tpl/config.tpl.html rename to src/templates/config.tpl.html diff --git a/tpl/install.tpl.html b/src/templates/install.tpl.html similarity index 100% rename from tpl/install.tpl.html rename to src/templates/install.tpl.html diff --git a/tpl/log.tpl.html b/src/templates/log.tpl.html similarity index 100% rename from tpl/log.tpl.html rename to src/templates/log.tpl.html diff --git a/tpl/main.tpl.html b/src/templates/main.tpl.html similarity index 100% rename from tpl/main.tpl.html rename to src/templates/main.tpl.html diff --git a/tpl/servers.tpl.html b/src/templates/servers.tpl.html similarity index 100% rename from tpl/servers.tpl.html rename to src/templates/servers.tpl.html diff --git a/tpl/status.tpl.html b/src/templates/status.tpl.html similarity index 100% rename from tpl/status.tpl.html rename to src/templates/status.tpl.html diff --git a/tpl/users.tpl.html b/src/templates/users.tpl.html similarity index 100% rename from tpl/users.tpl.html rename to src/templates/users.tpl.html diff --git a/classes/phpmailer.class.php b/vendor/phpmailer.class.php similarity index 100% rename from classes/phpmailer.class.php rename to vendor/phpmailer.class.php From 50fc8e272f285ec32faa2ff466627c238edbebde Mon Sep 17 00:00:00 2001 From: Perri Date: Sat, 11 Jan 2014 21:32:14 +0000 Subject: [PATCH 03/31] Add IDE files to ignore list --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..538cecef --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +.idea/scopes/scope_settings.xml From c1f66a77e27b81f24d30cde63264c5d1dc9e860c Mon Sep 17 00:00:00 2001 From: Perri Date: Sat, 11 Jan 2014 21:43:43 +0000 Subject: [PATCH 04/31] PHPSTORM --- .idea/workspace.xml | 204 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 .idea/workspace.xml diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 00000000..30e281f3 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1389475537771 + 1389475537771 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 65a8cd9fa7ffbbe25598980778f6335644fef48b Mon Sep 17 00:00:00 2001 From: Perri Date: Sun, 12 Jan 2014 01:48:09 +0000 Subject: [PATCH 05/31] PHPSTORM --- .gitignore | 4 + .idea/workspace.xml | 204 -------------------------------------------- 2 files changed, 4 insertions(+), 204 deletions(-) delete mode 100644 .idea/workspace.xml diff --git a/.gitignore b/.gitignore index 538cecef..4d3d7e94 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ .idea/scopes/scope_settings.xml + +.idea/workspace.xml + +.idea/workspace.xml diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 30e281f3..00000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1389475537771 - 1389475537771 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 89ac08d65dcdd92e9343708279ef515298d90495 Mon Sep 17 00:00:00 2001 From: Perri Date: Sun, 12 Jan 2014 01:51:45 +0000 Subject: [PATCH 06/31] Use correct name for constants in config --- src/includes/config.inc.php.sample | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/includes/config.inc.php.sample b/src/includes/config.inc.php.sample index 40cdca56..6b740bcd 100755 --- a/src/includes/config.inc.php.sample +++ b/src/includes/config.inc.php.sample @@ -25,16 +25,16 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -define('SM_CONFIG', true); +define('PSM_CONFIG', true); // Prefix used for tables -define('SM_DB_PREFIX', 'monitor_'); +define('PSM_DB_PREFIX', 'monitor_'); // Database username -define('SM_DB_USER', 'db_user'); +define('PSM_DB_USER', 'db_user'); // Database password -define('SM_DB_PASS', 'db_pass'); +define('PSM_DB_PASS', 'db_pass'); // Database name -define('SM_DB_NAME', 'db_name'); +define('PSM_DB_NAME', 'db_name'); // Database host -define('SM_DB_HOST', 'localhost'); +define('PSM_DB_HOST', 'localhost'); ?> \ No newline at end of file From 712593096a9e1a8c2fdcec14e87a98adcd5213b8 Mon Sep 17 00:00:00 2001 From: Perri Date: Sun, 12 Jan 2014 05:19:14 +0000 Subject: [PATCH 07/31] Add Textmarketer gateway --- src/lang/de.lang.php | 3 +- src/lang/en.lang.php | 1 + src/lang/fr.lang.php | 1 + src/lang/kr.lang.php | 1 + src/lang/nl.lang.php | 1 + src/psm/Module/Config.class.php | 3 +- src/psm/Txtmsg/Textmarketer.php | 61 +++++++++++++++++++++++++++++++++ src/psm/UpdaterStatus.class.php | 3 ++ src/templates/config.tpl.html | 1 + 9 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 src/psm/Txtmsg/Textmarketer.php diff --git a/src/lang/de.lang.php b/src/lang/de.lang.php index 6b24e33a..cecdffae 100755 --- a/src/lang/de.lang.php +++ b/src/lang/de.lang.php @@ -97,7 +97,8 @@ $sm_lang = array( 'sms_gateway_mollie' => 'Mollie', 'sms_gateway_spryng' => 'Spryng', 'sms_gateway_inetworx' => 'Inetworx', - 'sms_gateway_clickatell' => 'Clickatell', + 'sms_gateway_clickatell' => 'Clickatell', + 'sms_gateway_textmarketer' => 'Textmarketer', 'sms_gateway_username' => 'Gateway Benutzername', 'sms_gateway_password' => 'Gateway Passwort', 'sms_from' => 'SMS Sendernummer', diff --git a/src/lang/en.lang.php b/src/lang/en.lang.php index 36680ed4..f7cc61df 100755 --- a/src/lang/en.lang.php +++ b/src/lang/en.lang.php @@ -98,6 +98,7 @@ $sm_lang = array( 'sms_gateway_spryng' => 'Spryng', 'sms_gateway_inetworx' => 'Inetworx', 'sms_gateway_clickatell' => 'Clickatell', + 'sms_gateway_textmarketer' => 'Textmarketer', 'sms_gateway_username' => 'Gateway username', 'sms_gateway_password' => 'Gateway password', 'sms_from' => 'Sender\'s phone number', diff --git a/src/lang/fr.lang.php b/src/lang/fr.lang.php index b0371b84..74be5b9a 100755 --- a/src/lang/fr.lang.php +++ b/src/lang/fr.lang.php @@ -98,6 +98,7 @@ $sm_lang = array( 'sms_gateway_spryng' => 'Spryng', 'sms_gateway_inetworx' => 'Inetworx', 'sms_gateway_clickatell' => 'Clickatell', + 'sms_gateway_textmarketer' => 'Textmarketer', 'sms_gateway_username' => 'Utilisateur sur la passerelle', 'sms_gateway_password' => 'Mot de passe sur la passerelle', 'sms_from' => 'SMS de l expéditeur', diff --git a/src/lang/kr.lang.php b/src/lang/kr.lang.php index 120f1485..8427bac2 100755 --- a/src/lang/kr.lang.php +++ b/src/lang/kr.lang.php @@ -99,6 +99,7 @@ $sm_lang = array( 'sms_gateway_spryng' => 'Spryng', 'sms_gateway_inetworx' => 'Inetworx', 'sms_gateway_clickatell' => 'Clickatell', + 'sms_gateway_textmarketer' => 'Textmarketer', 'sms_gateway_username' => 'Gateway username', 'sms_gateway_password' => 'Gateway password', 'sms_from' => 'Sender\'s phone number', diff --git a/src/lang/nl.lang.php b/src/lang/nl.lang.php index 4fb3d767..3c87f4e8 100755 --- a/src/lang/nl.lang.php +++ b/src/lang/nl.lang.php @@ -98,6 +98,7 @@ $sm_lang = array( 'sms_gateway_spryng' => 'Spryng', 'sms_gateway_inetworx' => 'Inetworx', 'sms_gateway_clickatell' => 'Clickatell', + 'sms_gateway_textmarketer' => 'Textmarketer', 'sms_gateway_username' => 'Gateway gebruikersnaam', 'sms_gateway_password' => 'Gateway wachtwoord', 'sms_from' => 'Telefoonnummer afzender', diff --git a/src/psm/Module/Config.class.php b/src/psm/Module/Config.class.php index cbc0ee93..66bb9fab 100755 --- a/src/psm/Module/Config.class.php +++ b/src/psm/Module/Config.class.php @@ -175,7 +175,8 @@ class Config extends Core { 'label_sms_gateway_mollie' => psm_get_lang('config', 'sms_gateway_mollie'), 'label_sms_gateway_spryng' => psm_get_lang('config', 'sms_gateway_spryng'), 'label_sms_gateway_inetworx' => psm_get_lang('config', 'sms_gateway_inetworx'), - 'label_sms_gateway_clickatell' => psm_get_lang('config', 'sms_gateway_clickatell'), + 'label_sms_gateway_clickatell' => psm_get_lang('config', 'sms_gateway_clickatell'), + 'label_sms_gateway_textmarketer' => psm_get_lang('config', 'sms_gateway_textmarketer'), 'label_sms_gateway_username' => psm_get_lang('config', 'sms_gateway_username'), 'label_sms_gateway_password' => psm_get_lang('config', 'sms_gateway_password'), 'label_sms_from' => psm_get_lang('config', 'sms_from'), diff --git a/src/psm/Txtmsg/Textmarketer.php b/src/psm/Txtmsg/Textmarketer.php new file mode 100644 index 00000000..9dc2d487 --- /dev/null +++ b/src/psm/Txtmsg/Textmarketer.php @@ -0,0 +1,61 @@ +. + * + * @package phpservermon + * @author Perri Vardy-Mason + * @copyright Copyright (c) 2008-2014 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://phpservermon.neanderthal-technology.com/ + * @since phpservermon 2.1 + **/ + +namespace psm\Txtmsg; + +class Textmarketer extends Core { + // ========================================================================= + // [ Fields ] + // ========================================================================= + public $gateway = 1; + public $resultcode = null; + public $resultmessage = null; + public $success = false; + public $successcount = 0; + + public function sendSMS($message) { + + $textmarketer_url = "https://api.textmarketer.co.uk/gateway/"; + $textmarketer_data = urlencode( $message ); + $textmarketer_origin = urlencode( 'SERVERALERT' ); + + + foreach( $this->recipients as $phone ){ + + $URL = $textmarketer_url."?username=" . $this->username . "&password=" . $this->password . "&to=" . $phone . "&message=" . $textmarketer_data . "&orig=" . $textmarketer_origin; + + $result = file_get_contents( $URL ); + + } + + return $result; + } + +} + +?> diff --git a/src/psm/UpdaterStatus.class.php b/src/psm/UpdaterStatus.class.php index 3b1e2711..db573cd2 100755 --- a/src/psm/UpdaterStatus.class.php +++ b/src/psm/UpdaterStatus.class.php @@ -317,6 +317,9 @@ class UpdaterStatus { case 'clickatell': $sms = new \psm\Txtmsg\Clickatell(); break; + case 'textmarketer': + $sms = new \psm\Txtmsg\Textmarketer(); + break; } // copy login information from the config file diff --git a/src/templates/config.tpl.html b/src/templates/config.tpl.html index 9b574c93..b1850e93 100755 --- a/src/templates/config.tpl.html +++ b/src/templates/config.tpl.html @@ -62,6 +62,7 @@ + From cd6be4252643aeb2d533b9b65a9df6f8f9001124 Mon Sep 17 00:00:00 2001 From: Perri Date: Sun, 12 Jan 2014 05:34:55 +0000 Subject: [PATCH 08/31] Add filtering to protect against XSS attacks --- src/psm/Module/Servers.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/psm/Module/Servers.class.php b/src/psm/Module/Servers.class.php index c1114e31..ac27c2ab 100755 --- a/src/psm/Module/Servers.class.php +++ b/src/psm/Module/Servers.class.php @@ -181,9 +181,9 @@ class Servers extends Core { // check for add/edit mode if (isset($_POST['label']) && isset($_POST['ip']) && isset($_POST['port'])) { $clean = array( - 'label' => $_POST['label'], - 'ip' => $_POST['ip'], - 'port' => $_POST['port'], + 'label' => strip_tags($_POST['label']), + 'ip' => strip_tags($_POST['ip']), + 'port' => strip_tags($_POST['port']), 'type' => $_POST['type'], 'active' => $_POST['active'], 'email' => $_POST['email'], From 5e57f618a3b3a6b30fa2fa58bda2fbb403ec238f Mon Sep 17 00:00:00 2001 From: Perri Date: Sun, 12 Jan 2014 06:02:33 +0000 Subject: [PATCH 09/31] Remove unnecessary line from comment in Textmarketer class --- src/psm/Txtmsg/Textmarketer.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/psm/Txtmsg/Textmarketer.php b/src/psm/Txtmsg/Textmarketer.php index 9dc2d487..0b7bf8c9 100644 --- a/src/psm/Txtmsg/Textmarketer.php +++ b/src/psm/Txtmsg/Textmarketer.php @@ -23,7 +23,6 @@ * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @version Release: @package_version@ * @link http://phpservermon.neanderthal-technology.com/ - * @since phpservermon 2.1 **/ namespace psm\Txtmsg; From 3fe4866ebfd10d538a187f6ead910fd69428aa45 Mon Sep 17 00:00:00 2001 From: Perri Date: Sun, 12 Jan 2014 12:32:54 +0000 Subject: [PATCH 10/31] Add PHPStorm files to ignore list --- .gitignore | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.gitignore b/.gitignore index 4d3d7e94..1b36b517 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,15 @@ .idea/workspace.xml .idea/workspace.xml + +.idea/encodings.xml + +.idea/misc.xml + +.idea/phpservermon.iml + +.idea/modules.xml + +.idea/vcs.xml + +.idea/* \ No newline at end of file From 5f8aa4c0039abe67ad4aab34c49965e186fd59c1 Mon Sep 17 00:00:00 2001 From: Perri Date: Sun, 12 Jan 2014 13:30:48 +0000 Subject: [PATCH 11/31] Minor spelling and grammar changes --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f42b3210..87fc67c7 100755 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ whether it is a "service" or a "website": This function takes care of that. You can enter a link to a website (for example ), it will use cURL to open the website and check the HTTP status code (see for details). - If the HTTP status code is in the 4xx range, it means an error occured and the website is not accesible to the public. + If the HTTP status code is in the 4xx range, it means an error occurred and the website is not accessible to the public. In that case the script will return a "status offline", and will start sending out notifications. Each server has it's own settings regarding notification. @@ -79,7 +79,7 @@ For example: define('SM_DB_USER', 'db_user'); To change your username you should ONLY change the 'db\_user' part. -Do NOT remove the quotes aroundyour username as that will result in an error. +Do NOT remove the quotes around your username as that will result in an error. ### 2. Upload files @@ -109,7 +109,7 @@ If it is your own server or you have shell access and permission to open the cro */15 * * * * root /usr/bin/php /var/www/html/phpservermon/cron/status.cron.php As you can see, this line will run the status.cron.php script every 15 minutes. Change the line to suit your needs. -If you do not have shell access, ask your webhosting to set it up for you. +If you do not have shell access, ask your web hosting provider to set it up for you. ### 6. Voila! @@ -119,7 +119,7 @@ If you do not have shell access, ask your webhosting to set it up for you. ### Language The server monitor uses language files. That means that any regular text you see on the screen can easily be -changed without having to digg through the code. These language files are stored in the directory "lang". +changed without having to dig through the code. These language files are stored in the directory "lang". The language that's being used by the monitor is defined in the config table. If you like you can make changes to the language file or even add a new one. From 2f8ab74cc6c8cd0f7e270cd9768442abe3588089 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Tue, 21 Jan 2014 22:16:22 +0100 Subject: [PATCH 12/31] adding config file and netbeans project dir to git ignore --- .gitignore | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index 1b36b517..e3dadd4a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1,3 @@ - -.idea/scopes/scope_settings.xml - -.idea/workspace.xml - -.idea/workspace.xml - -.idea/encodings.xml - -.idea/misc.xml - -.idea/phpservermon.iml - -.idea/modules.xml - -.idea/vcs.xml - -.idea/* \ No newline at end of file +.idea/* +/nbproject +/src/includes/config.inc.php From e279a179fd649a751806f759a67d9eb162a2c653 Mon Sep 17 00:00:00 2001 From: "Luiz Alberto S. Ribeiro" Date: Fri, 10 Jan 2014 14:55:23 -0300 Subject: [PATCH 13/31] add brazilian portuguese language --- lang/br.lang.php | 143 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 lang/br.lang.php diff --git a/lang/br.lang.php b/lang/br.lang.php new file mode 100644 index 00000000..bd144acd --- /dev/null +++ b/lang/br.lang.php @@ -0,0 +1,143 @@ +. + * + * @package phpservermon + * @author Pepijn Over + * @copyright Copyright (c) 2008-2014 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://phpservermon.neanderthal-technology.com/ + **/ + +$sm_lang = array( + 'system' => array( + 'title' => 'Server Monitor', + 'servers' => 'Servidores', + 'users' => 'Usuários', + 'log' => 'Log', + 'update' => 'Atualização', + 'config' => 'Configuração', + 'help' => 'Ajuda', + 'action' => 'Ação', + 'save' => 'Salvar', + 'edit' => 'Editar', + 'delete' => 'Excluir', + 'deleted' => 'Registro excluído', + 'date' => 'Data', + 'message' => 'Mensagem', + 'yes' => 'Sim', + 'no' => 'Não', + 'edit' => 'Editar', + 'insert' => 'Inserir', + 'add_new' => 'Adicionar novo?', + 'update_available' => 'Uma atualização disponível em http://phpservermon.sourceforge.net.', + 'back_to_top' => 'Voltar ao topo', + ), + 'users' => array( + 'user' => 'usuário', + 'name' => 'Nome', + 'mobile' => 'Celular', + 'email' => 'Email', + 'updated' => 'Usuário atualizado.', + 'inserted' => 'Usuário adicionado.', + ), + 'log' => array( + 'title' => 'Entradas do Log', + 'type' => 'Tipo', + 'status' => 'Status', + 'email' => 'Email', + 'sms' => 'SMS', + ), + 'servers' => array( + 'server' => 'Servidor', + 'label' => 'Etiqueta', + 'domain' => 'Domínio/IP', + 'port' => 'Porta', + 'type' => 'Tipo', + 'last_check' => 'Última verificação', + 'last_online' => 'Última vez online', + 'monitoring' => 'Monitoramento', + 'send_email' => 'Enviar Email', + 'send_sms' => 'Enviar SMS', + 'updated' => 'Servidor atualizado.', + 'inserted' => 'Servidor adicionar.', + 'rtime' => 'Tempo de resposta', + ), + 'config' => array( + 'general' => 'Geral', + 'language' => 'Idioma', + 'language_en' => 'Inglês', + 'language_nl' => 'Holandês', + 'language_fr' => 'Francês', + 'language_de' => 'Alemão', + 'language_kr' => 'Koreano', + 'language_br' => 'Portugês - Brasil', + 'show_update' => 'verificar atualizações semanalmente?', + 'email_status' => 'Habilitar envio de email?', + 'email_from_email' => 'Endereço do envio de email', + 'email_from_name' => 'Nome do envio de email', + 'sms_status' => 'Habilitar o envio de mensagem de texto?', + 'sms_gateway' => 'Gateway para o uso de envio de mensagens', + 'sms_gateway_mosms' => 'Mosms', + 'sms_gateway_mollie' => 'Mollie', + 'sms_gateway_spryng' => 'Spryng', + 'sms_gateway_inetworx' => 'Inetworx', + 'sms_gateway_clickatell' => 'Clickatell', + 'sms_gateway_username' => 'Usuário do Gateway', + 'sms_gateway_password' => 'Senha do Gateway', + 'sms_from' => 'Número de telefone de envio', + 'alert_type' => 'Selecione como você gostaria de ser notificado.
', + 'alert_type_description' => 'Mudança de Status: '. + 'Você receberá uma notificação quando o seridor tive uma mudança de status. De online -> offline ou offline -> online.
'. + '
Offline: '. + '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. '. + 'Você receberá uma notificação a 1:00 apenas
'. + '
Sempre: '. + '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_offline' => 'Offline', + 'alert_type_always' => 'Sempre', + 'log_status' => 'Log status
Se o status de registro é definido como TRUE, o monitor irá registrar o evento sempre que as configurações de notificação forem passadas
', + 'log_email' => 'Registrar no Log os envios de email feitos pelo script?', + 'log_sms' => 'Registrar no Log os envios de mensagens de texto feitos pelo script?', + 'updated' => 'A configuração foi atualizada.', + 'settings_email' => 'Configuração de email', + 'settings_sms' => 'Configuração de mensagens de texto', + 'settings_notification' => 'Configuração de notificações', + 'settings_log' => 'Configuração de Logs', + 'auto_refresh_servers' => + 'Atualizar automaticamente a página de servidores
'. + '
'. + 'Tempo em segundos, Se 0 a página não será atualizada.'. + '
', + ), + // for newlines in the email messages use
+ 'notifications' => array( + 'off_sms' => 'Servidor \'%LABEL%\' está OFFLINE: ip=%IP%, porta=%PORT%. Erro=%ERROR%', + 'off_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' está OFFLINE', + 'off_email_body' => "Falha ao conectar ao servidor:

Servidor: %LABEL%
IP: %IP%
Porta: %PORT%
Erro: %ERROR%
Data: %DATE%", + 'on_sms' => 'Servidor \'%LABEL%\' esta ONLINE: ip=%IP%, porta=%PORT%', + 'on_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' esta ONLINE', + 'on_email_body' => "Servidor '%LABEL%' esta ONLINE novamente:

Servidor: %LABEL%
IP: %IP%
Porta: %PORT%
Data: %DATE%", + ), +); + +?> \ No newline at end of file From 3596ff5bd8f303e6ec85e3e08689024e038fdcbe Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Tue, 21 Jan 2014 22:28:11 +0100 Subject: [PATCH 14/31] rearranging menu: moving config behind status --- src/templates/main.tpl.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/templates/main.tpl.html b/src/templates/main.tpl.html index 769026da..149eadae 100755 --- a/src/templates/main.tpl.html +++ b/src/templates/main.tpl.html @@ -42,12 +42,12 @@ - + From 3c344cba8e7cf0b6e9e140abd4284146bcc11936 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Tue, 21 Jan 2014 22:28:52 +0100 Subject: [PATCH 15/31] merging brazillian language --- README.md | 1 + {lang => src/lang}/br.lang.php | 3 ++- src/lang/en.lang.php | 1 + src/lang/fr.lang.php | 1 + src/lang/kr.lang.php | 1 + src/lang/nl.lang.php | 1 + 6 files changed, 7 insertions(+), 1 deletion(-) rename {lang => src/lang}/br.lang.php (98%) mode change 100644 => 100755 diff --git a/README.md b/README.md index 87fc67c7..00a56a0c 100755 --- a/README.md +++ b/README.md @@ -160,6 +160,7 @@ The second part is the actual message. There are a few variables you can use in * German translation - Brunbaur Herbert * French translation - David Ribeiro * Korean translation - Ik-Jun + * Brazillian translation - Luiz Alberto S. Ribeiro * Bootstrap implementation - Luiz Alberto S. Ribeiro * Mosms implementation - Andreas Ek * Status page - Michael Greenhill diff --git a/lang/br.lang.php b/src/lang/br.lang.php old mode 100644 new mode 100755 similarity index 98% rename from lang/br.lang.php rename to src/lang/br.lang.php index bd144acd..1264c4ea --- a/lang/br.lang.php +++ b/src/lang/br.lang.php @@ -18,7 +18,7 @@ * along with PHP Server Monitor. If not, see . * * @package phpservermon - * @author Pepijn Over + * @author Luiz Alberto S. Ribeiro * @copyright Copyright (c) 2008-2014 Pepijn Over * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @version Release: @package_version@ @@ -99,6 +99,7 @@ $sm_lang = array( 'sms_gateway_spryng' => 'Spryng', 'sms_gateway_inetworx' => 'Inetworx', 'sms_gateway_clickatell' => 'Clickatell', + 'sms_gateway_textmarketer' => 'Textmarketer', 'sms_gateway_username' => 'Usuário do Gateway', 'sms_gateway_password' => 'Senha do Gateway', 'sms_from' => 'Número de telefone de envio', diff --git a/src/lang/en.lang.php b/src/lang/en.lang.php index f7cc61df..757d0bb8 100755 --- a/src/lang/en.lang.php +++ b/src/lang/en.lang.php @@ -87,6 +87,7 @@ $sm_lang = array( 'language_fr' => 'French', 'language_de' => 'German', 'language_kr' => 'Korean', + 'language_br' => 'Portuguese - Brazilian', 'show_update' => 'Check for new updates weekly?', 'email_status' => 'Allow sending email?', 'email_from_email' => 'Email from address', diff --git a/src/lang/fr.lang.php b/src/lang/fr.lang.php index 74be5b9a..254ae908 100755 --- a/src/lang/fr.lang.php +++ b/src/lang/fr.lang.php @@ -87,6 +87,7 @@ $sm_lang = array( 'language_fr' => 'Francais', 'language_de' => 'German', 'language_kr' => 'Korean', + 'language_br' => 'Portuguese - Brazilian', 'show_update' => 'Vérifier les nouvelles mis à jour hebdomadairement?', 'email_status' => 'Autoriser l envoi de mail?', 'email_from_email' => 'Expéditeur', diff --git a/src/lang/kr.lang.php b/src/lang/kr.lang.php index 8427bac2..b4b07acd 100755 --- a/src/lang/kr.lang.php +++ b/src/lang/kr.lang.php @@ -88,6 +88,7 @@ $sm_lang = array( 'language_fr' => '프랑스', 'language_de' => '독일', 'language_kr' => '한국', + 'language_br' => 'Portuguese - Brazilian', 'show_update' => '매주 업데이트를 확인하시겠습니까?', 'email_status' => '메일전송 허용', 'email_from_email' => 'Email 주소', diff --git a/src/lang/nl.lang.php b/src/lang/nl.lang.php index 3c87f4e8..e82aaf97 100755 --- a/src/lang/nl.lang.php +++ b/src/lang/nl.lang.php @@ -87,6 +87,7 @@ $sm_lang = array( 'language_fr' => 'Frans', 'language_de' => 'Duits', 'language_kr' => 'Koreaans', + 'language_br' => 'Portugees - Braziliaans', 'show_update' => 'Check for new updates weekly?', 'email_status' => 'Sta email berichten toe?', 'email_from_email' => 'Email van adres', From 552187c2abca5012970abddd3272c67b04ff9409 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Tue, 21 Jan 2014 22:33:21 +0100 Subject: [PATCH 16/31] changing status page to use language file --- src/psm/Module/Status.class.php | 3 +++ src/templates/status.tpl.html | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/psm/Module/Status.class.php b/src/psm/Module/Status.class.php index cdf6a54c..19f5ae97 100755 --- a/src/psm/Module/Status.class.php +++ b/src/psm/Module/Status.class.php @@ -68,6 +68,9 @@ class Status extends Core { 'offline_fg' => '#f7cece', 'online_bg' => '#53a000', 'online_fg' => '#d8f7ce', + 'label_last_check' => psm_get_lang('servers', 'last_check'), + 'label_last_online' => psm_get_lang('servers', 'last_online'), + 'label_rtime' => psm_get_lang('servers', 'rtime'), ); $this->tpl->addTemplateData($this->getTemplateId(), $tpl_data); diff --git a/src/templates/status.tpl.html b/src/templates/status.tpl.html index a8f6024f..0d645fcd 100755 --- a/src/templates/status.tpl.html +++ b/src/templates/status.tpl.html @@ -52,8 +52,8 @@

{label}

-

Last online: {last_online_nice}

-

Last checked: {last_checked_nice}

+

{label_last_online}: {last_online_nice}

+

{label_last_check}: {last_checked_nice}

{servers_offline} @@ -62,8 +62,8 @@

{label}

-

Last checked: {last_checked_nice}

-

Latency: {rtime}s

+

{label_last_online}: {last_checked_nice}

+

{label_rtime}: {rtime}s

{servers_online} From 59ec03f97442ed91de0736b10eb389c5209e386a Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Tue, 21 Jan 2014 22:50:36 +0100 Subject: [PATCH 17/31] Adding "Service" namespace under psm and moving database + template handlers --- install.php | 4 ++-- src/bootstrap.php | 4 ++-- src/psm/Module/Core.class.php | 4 ++-- src/psm/{ => Service}/Database.class.php | 4 ++-- src/psm/{ => Service}/Template.class.php | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) rename src/psm/{ => Service}/Database.class.php (99%) rename src/psm/{ => Service}/Template.class.php (99%) diff --git a/install.php b/install.php index 12ed24d2..3dd19100 100755 --- a/install.php +++ b/install.php @@ -34,7 +34,7 @@ if(!function_exists('curl_init')) { die('PHP is installed without the cURL module. Please install cURL first.'); } -$tpl = new psm\Template(); +$tpl = new psm\Service\Template(); $tpl->newTemplate('install', 'install.tpl.html'); @@ -148,4 +148,4 @@ foreach($tables as $name => $queries) { $tpl->addTemplateDataRepeat('install', 'tables', $result); echo $tpl->display('install'); -?> \ No newline at end of file +?> diff --git a/src/bootstrap.php b/src/bootstrap.php index 9f46d547..cf1fd295 100755 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -43,7 +43,7 @@ if(!defined('PSM_CONFIG')) { } // init db connection -$db = new psm\Database(); +$db = new psm\Service\Database(); psm_load_conf(); @@ -54,4 +54,4 @@ if(!$lang) { } psm_load_lang($lang); -?> \ No newline at end of file +?> diff --git a/src/psm/Module/Core.class.php b/src/psm/Module/Core.class.php index 32e202e7..ce16403a 100755 --- a/src/psm/Module/Core.class.php +++ b/src/psm/Module/Core.class.php @@ -69,8 +69,8 @@ abstract class Core { function __construct() { global $db; - $this->db = ($db) ? $db : new \psm\Database(); - $this->tpl = new \psm\Template(); + $this->db = ($db) ? $db : new \psm\Service\Database(); + $this->tpl = new \psm\Service\Template(); } diff --git a/src/psm/Database.class.php b/src/psm/Service/Database.class.php similarity index 99% rename from src/psm/Database.class.php rename to src/psm/Service/Database.class.php index 3e3d6e87..300c6e32 100755 --- a/src/psm/Database.class.php +++ b/src/psm/Service/Database.class.php @@ -25,7 +25,7 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -namespace psm; +namespace psm\Service; class Database { @@ -367,4 +367,4 @@ class Database { } } -?> \ No newline at end of file +?> diff --git a/src/psm/Template.class.php b/src/psm/Service/Template.class.php similarity index 99% rename from src/psm/Template.class.php rename to src/psm/Service/Template.class.php index efc63787..f67c9624 100755 --- a/src/psm/Template.class.php +++ b/src/psm/Service/Template.class.php @@ -25,7 +25,7 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -namespace psm; +namespace psm\Service; class Template { protected $output; @@ -206,4 +206,4 @@ class Template { } } -?> \ No newline at end of file +?> From 003fc4569c05bd91afdbaf5795071866568b19ac Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Tue, 21 Jan 2014 23:09:51 +0100 Subject: [PATCH 18/31] updating changelog + readme credits --- CHANGELOG | 4 +++- README.md | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 203badb2..96e08b62 100755 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,9 +5,11 @@ ######################### - Merged PHP Server Monitor Plus project by Luiz Alberto S. Ribeiro (https://github.com/madeinnordeste/PHP-Server-Monitor-Plus). -- New layout (thanks to twitter bootstrap) -- Support for mosms provider by Andreas Ek (https://github.com/EkAndreas/PHP-Server-Monitor-Plus/commit/105c734a02477befc01831e3b9b2b8fefd9b5ca5). +- Support for mosms provider by Andreas Ek +- Support for Textmarketer provider by Perri Vardy-Mason - Language files are now automatically detected, instead of a hardcoded list. - Adding Korean language file (thanks to Ik-Jun). +- Adding Portuguese / Brazilian language file (thanks to Luiz Alberto S. Ribeiro). - Large status page by Michael Greenhill. ######################### diff --git a/README.md b/README.md index 00a56a0c..257f3219 100755 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ available: * Inetworx - * Clickatell - * Mosms - +* Textmarketer - For these gateways you need an account with sufficient credits. @@ -156,11 +157,12 @@ The second part is the actual message. There are a few variables you can use in ## CREDITS - * classes/phpmailer.class.php - Brent R. Matzelle + * Bugfixes & features - Perri Vardy-Mason + * PHP Mailer - Brent R. Matzelle * German translation - Brunbaur Herbert * French translation - David Ribeiro * Korean translation - Ik-Jun - * Brazillian translation - Luiz Alberto S. Ribeiro + * Brazilian translation - Luiz Alberto S. Ribeiro * Bootstrap implementation - Luiz Alberto S. Ribeiro * Mosms implementation - Andreas Ek * Status page - Michael Greenhill From fc54c909fce71a4ac4b8a1f51b09d776fc1ece00 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Tue, 21 Jan 2014 23:22:33 +0100 Subject: [PATCH 19/31] Moving status updater to own namespace --- cron/status.cron.php | 2 +- .../Updater/Status.class.php} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/psm/{UpdaterStatus.class.php => Util/Updater/Status.class.php} (99%) diff --git a/cron/status.cron.php b/cron/status.cron.php index 598373ef..d388db2c 100755 --- a/cron/status.cron.php +++ b/cron/status.cron.php @@ -35,7 +35,7 @@ $servers = $db->select( array('server_id', 'ip', 'port', 'label', 'type', 'status', 'active', 'email', 'sms') ); -$updater = new \psm\UpdaterStatus(); +$updater = new \psm\Util\Updater\Status(); foreach ($servers as $server) { $status_org = $server['status']; diff --git a/src/psm/UpdaterStatus.class.php b/src/psm/Util/Updater/Status.class.php similarity index 99% rename from src/psm/UpdaterStatus.class.php rename to src/psm/Util/Updater/Status.class.php index db573cd2..4d6357bb 100755 --- a/src/psm/UpdaterStatus.class.php +++ b/src/psm/Util/Updater/Status.class.php @@ -25,9 +25,9 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -namespace psm; +namespace psm\Util\Updater; -class UpdaterStatus { +class Status { public $error; public $notify; public $rtime = 0; From 355daae51cab500889127884e224accab38c9f0e Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Tue, 21 Jan 2014 23:36:18 +0100 Subject: [PATCH 20/31] adding @since tag to Marketer text class --- src/psm/Txtmsg/Textmarketer.php | 1 + 1 file changed, 1 insertion(+) mode change 100644 => 100755 src/psm/Txtmsg/Textmarketer.php diff --git a/src/psm/Txtmsg/Textmarketer.php b/src/psm/Txtmsg/Textmarketer.php old mode 100644 new mode 100755 index 0b7bf8c9..9dc2d487 --- a/src/psm/Txtmsg/Textmarketer.php +++ b/src/psm/Txtmsg/Textmarketer.php @@ -23,6 +23,7 @@ * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @version Release: @package_version@ * @link http://phpservermon.neanderthal-technology.com/ + * @since phpservermon 2.1 **/ namespace psm\Txtmsg; From 90b1ba5705c7a6ea240748b0e4ef346c13dbf704 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Wed, 29 Jan 2014 00:57:36 +0100 Subject: [PATCH 21/31] Overhauling the module part, the way the actions are processed (see setActions()), automatic method detection for these actions and some more. --- index.php | 5 +- ...ore.class.php => AbstractModule.class.php} | 139 ++++++++++++-- src/psm/Module/Config.class.php | 118 ++++++------ src/psm/Module/Log.class.php | 18 +- src/psm/Module/ModuleInterface.class.php | 46 +++++ src/psm/Module/Servers.class.php | 173 ++++++++---------- src/psm/Module/Status.class.php | 17 +- src/psm/Module/Users.class.php | 83 ++++----- src/templates/config.tpl.html | 4 +- src/templates/servers.tpl.html | 9 +- src/templates/users.tpl.html | 9 +- static/js/scripts.js | 6 +- 12 files changed, 364 insertions(+), 263 deletions(-) rename src/psm/Module/{Core.class.php => AbstractModule.class.php} (61%) create mode 100644 src/psm/Module/ModuleInterface.class.php diff --git a/index.php b/index.php index 8d4ad4cc..39210539 100755 --- a/index.php +++ b/index.php @@ -41,9 +41,10 @@ $allowed_types = array('servers', 'users', 'log', 'config', 'status'); if(!in_array($type, $allowed_types)) { $type = $allowed_types[0]; } +$tpl = new \psm\Service\Template(); -eval('$mod = new psm\Module\\'.ucfirst($type).'();'); +eval('$mod = new psm\Module\\'.ucfirst($type).'($db, $tpl);'); // let the module prepare it's HTML code -$mod->createHTML(); +$mod->initialize(); ?> \ No newline at end of file diff --git a/src/psm/Module/Core.class.php b/src/psm/Module/AbstractModule.class.php similarity index 61% rename from src/psm/Module/Core.class.php rename to src/psm/Module/AbstractModule.class.php index ce16403a..89cd58d6 100755 --- a/src/psm/Module/Core.class.php +++ b/src/psm/Module/AbstractModule.class.php @@ -26,13 +26,10 @@ **/ namespace psm\Module; +use psm\Service\Database; +use psm\Service\Template; -abstract class Core { - /** - * Custom message - * @var string $message - */ - public $message; +abstract class AbstractModule implements ModuleInterface { /** * Current mode. Can be used by modules to determine @@ -41,6 +38,27 @@ abstract class Core { */ public $mode; + /** + * Current action + * @var string $action + */ + protected $action; + + /** + * Default action + * @var string $action_default + * @see setActions() + */ + protected $action_default; + + /** + * Actions available for this module + * @var array $actions + * @see setActions() + * @see getAction() + */ + protected $actions = array(); + /** * Add footer to page? * @var boolean $add_footer @@ -48,14 +66,21 @@ abstract class Core { protected $add_footer = true; /** - * smDatabase object - * @var object $db + * Messages to show the user + * @var array $messages + * @see getMessage() + */ + protected $messages = array(); + + /** + * Database object + * @var \psm\Service\Database $db */ protected $db; /** - * \psm\Template object - * @var object $tpl + * Template object + * @var \psm\Service\Template $tpl */ protected $tpl; @@ -66,13 +91,48 @@ abstract class Core { */ protected $tpl_id; - function __construct() { - global $db; + function __construct(Database $db, Template $tpl) { + $this->db = $db; + $this->tpl = $tpl; + } - $this->db = ($db) ? $db : new \psm\Service\Database(); - $this->tpl = new \psm\Service\Template(); + /** + * Initialize the module + */ + public function initialize() { + // yeh baby, "initialize" me.. + // right, anyway, lets determine the aciton + $action = null; + if(isset($_GET['action'])) { + $action = $_GET['action']; + } elseif(isset($_POST['action'])) { + $action = $_POST['action']; + } + if($action !== null && in_array($action, $this->actions)) { + // we have an action + $this->initializeAction($action); + } elseif($this->action_default !== null) { + $this->initializeAction($this->action_default); + } else { + // else what..? + } + $this->createHTML(); + } + + /** + * Run a specified action + * + * For it to run, the "execute$action" method must exist + * @param string $action + */ + protected function initializeAction($action) { + $this->action = $action; + $method = 'execute' . ucfirst($action); + if(method_exists($this, $method)) { + $this->$method(); + } } /** @@ -80,7 +140,7 @@ abstract class Core { * First the createHTMLLabels() will be called to add all labels to the template, * Then the tpl_id set in $this->getTemplateId() will be added to the main template automatically */ - public function createHTML() { + protected function createHTML() { // add footer to page? if($this->add_footer) { $this->tpl->newTemplate('main_footer', 'main.tpl.html'); @@ -101,7 +161,7 @@ abstract class Core { 'main', array( 'content' => $this->tpl->getTemplate($this->getTemplateId()), - 'message' => ($this->message == '') ? ' ' : $this->message, + 'message' => (empty($this->messages)) ? ' ' : implode('
', $this->messages), 'html_footer' => $html_footer, 'label_back_to_top' => psm_get_lang('system', 'back_to_top'), ) @@ -187,6 +247,51 @@ abstract class Core { protected function addFooter($value) { $this->add_footer = $value; } + + /** + * Set actions available + * @param string|array $actions + * @param string $default default action + * @param boolean $append if TRUE, the actions will be added to the current actions + * @return psm\Module\AbstractModule + * @see getAction() + */ + protected function setActions($actions, $default = null, $append = true) { + if(!is_array($actions)) { + $actions = array($actions); + } + if($append) { + $this->actions = array_merge($actions); + } else { + $this->actions = $actions; + } + if($default !== null) { + $this->action_default = $default; + } + return $this; + } + + /** + * Get the current action + * @return string + * @see setActions() + */ + public function getAction() { + return $this->action; + } + + /** + * Add one or multiple message to the stack to be displayed to the user + * @param string|array $msg + * @return \psm\Module\AbstractModule + */ + public function addMessage($msg) { + if(!is_array($msg)) { + $msg = array($msg); + } + $this->messages = array_merge($this->messages, $msg); + return $this; + } } -?> +?> \ No newline at end of file diff --git a/src/psm/Module/Config.class.php b/src/psm/Module/Config.class.php index 66bb9fab..d8270848 100755 --- a/src/psm/Module/Config.class.php +++ b/src/psm/Module/Config.class.php @@ -26,30 +26,25 @@ **/ namespace psm\Module; +use psm\Service\Database; +use psm\Service\Template; -class Config extends Core { +class Config extends AbstractModule { - function __construct() { - parent::__construct(); + function __construct(Database $db, Template $tpl) { + parent::__construct($db, $tpl); - if(!empty($_POST)) { - $this->executeSave(); - } - } - - // override parent::createHTML() - public function createHTML() { - $this->setTemplateId('config', 'config.tpl.html'); - - $this->populateFields(); - - return parent::createHTML(); + $this->setActions(array( + 'index', 'save', + ), 'index'); } /** * Populate all the config fields with values from the database */ - public function populateFields() { + protected function executeIndex() { + $this->setTemplateId('config', 'config.tpl.html'); + $config_db = $this->db->select( PSM_DB_PREFIX . 'config', null, @@ -105,53 +100,56 @@ class Config extends Core { * and save it to the database */ protected function executeSave() { - // save new config - $clean = array( - 'language' => $_POST['language'], - 'show_update' => (isset($_POST['show_update'])) ? '1' : '0', - 'email_status' => (isset($_POST['email_status'])) ? '1' : '0', - 'email_from_name' => $_POST['email_from_name'], - 'email_from_email' => $_POST['email_from_email'], - 'sms_status' => (isset($_POST['sms_status'])) ? '1' : '0', - 'sms_gateway' => $_POST['sms_gateway'], - 'sms_gateway_username' => $_POST['sms_gateway_username'], - 'sms_gateway_password' => $_POST['sms_gateway_password'], - 'sms_from' => $_POST['sms_from'], - 'alert_type' => $_POST['alert_type'], - 'log_status' => (isset($_POST['log_status'])) ? '1' : '0', - 'log_email' => (isset($_POST['log_email'])) ? '1' : '0', - 'log_sms' => (isset($_POST['log_sms'])) ? '1' : '0', - 'auto_refresh_servers' => (isset($_POST['auto_refresh_servers'])) ? intval($_POST['auto_refresh_servers']) : '0', - ); + if(!empty($_POST)) { + // save new config + $clean = array( + 'language' => $_POST['language'], + 'show_update' => (isset($_POST['show_update'])) ? '1' : '0', + 'email_status' => (isset($_POST['email_status'])) ? '1' : '0', + 'email_from_name' => $_POST['email_from_name'], + 'email_from_email' => $_POST['email_from_email'], + 'sms_status' => (isset($_POST['sms_status'])) ? '1' : '0', + 'sms_gateway' => $_POST['sms_gateway'], + 'sms_gateway_username' => $_POST['sms_gateway_username'], + 'sms_gateway_password' => $_POST['sms_gateway_password'], + 'sms_from' => $_POST['sms_from'], + 'alert_type' => $_POST['alert_type'], + 'log_status' => (isset($_POST['log_status'])) ? '1' : '0', + 'log_email' => (isset($_POST['log_email'])) ? '1' : '0', + 'log_sms' => (isset($_POST['log_sms'])) ? '1' : '0', + 'auto_refresh_servers' => (isset($_POST['auto_refresh_servers'])) ? intval($_POST['auto_refresh_servers']) : '0', + ); - // save all values to the database - foreach($clean as $key => $value) { - // check if key already exists, otherwise add it - if(psm_get_conf($key) === null) { - // not yet set, add it - $this->db->save( - PSM_DB_PREFIX . 'config', - array( - 'key' => $key, - 'value' => $value, - ) - ); - } else { - // update - $this->db->save( - PSM_DB_PREFIX . 'config', - array('value' => $value), - array('key' => $key) - ); + // save all values to the database + foreach($clean as $key => $value) { + // check if key already exists, otherwise add it + if(psm_get_conf($key) === null) { + // not yet set, add it + $this->db->save( + PSM_DB_PREFIX . 'config', + array( + 'key' => $key, + 'value' => $value, + ) + ); + } else { + // update + $this->db->save( + PSM_DB_PREFIX . 'config', + array('value' => $value), + array('key' => $key) + ); + } + } + + $this->addMessage(psm_get_lang('config', 'updated')); + + if($clean['language'] != psm_get_conf('language')) { + header('Location: ' . $_SERVER['REQUEST_URI']); + die(); } } - - $this->message = psm_get_lang('config', 'updated'); - - if($clean['language'] != psm_get_conf('language')) { - header('Location: ' . $_SERVER['REQUEST_URI']); - die(); - } + $this->initializeAction('index'); } // override parent::createHTMLLabels() diff --git a/src/psm/Module/Log.class.php b/src/psm/Module/Log.class.php index 2f05c10b..6e6db989 100755 --- a/src/psm/Module/Log.class.php +++ b/src/psm/Module/Log.class.php @@ -26,27 +26,24 @@ **/ namespace psm\Module; +use psm\Service\Database; +use psm\Service\Template; /** * Log module. Create the page to view previous log messages */ -class Log extends Core { +class Log extends AbstractModule { - function __construct() { - parent::__construct(); - } + function __construct(Database $db, Template $tpl) { + parent::__construct($db, $tpl); - // override parent::createHTML() - public function createHTML() { - $this->createHTMLList(); - - return parent::createHTML(); + $this->setActions('index', 'index'); } /** * Prepare the template with a list of all log entries */ - protected function createHTMLList() { + protected function executeIndex() { $this->setTemplateId('log_list', 'log.tpl.html'); $entries = array(); @@ -97,7 +94,6 @@ class Log extends Core { ) ); } - } /** diff --git a/src/psm/Module/ModuleInterface.class.php b/src/psm/Module/ModuleInterface.class.php new file mode 100644 index 00000000..a9cadf6e --- /dev/null +++ b/src/psm/Module/ModuleInterface.class.php @@ -0,0 +1,46 @@ +. + * + * @package phpservermon + * @author Pepijn Over + * @copyright Copyright (c) 2008-2014 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://phpservermon.neanderthal-technology.com/ + * @since phpservermon 2.1 + **/ + +namespace psm\Module; +use psm\Service\Database; +use psm\Service\Template; + +/** + * Public API for all modules + */ +interface ModuleInterface { + + public function __construct(Database $db, Template $tpl); + + /** + * Initialize the module + */ + public function initialize(); +} + +?> \ No newline at end of file diff --git a/src/psm/Module/Servers.class.php b/src/psm/Module/Servers.class.php index ac27c2ab..b12fc519 100755 --- a/src/psm/Module/Servers.class.php +++ b/src/psm/Module/Servers.class.php @@ -26,99 +26,26 @@ **/ namespace psm\Module; +use psm\Service\Database; +use psm\Service\Template; /** * Server module. Add/edit/delete servers, show a list of all servers etc. */ -class Servers extends Core { +class Servers extends AbstractModule { - function __construct() { - parent::__construct(); + function __construct(Database $db, Template $tpl) { + parent::__construct($db, $tpl); - // check mode - if (isset($_GET['edit']) && is_numeric($_GET['edit'])) { - // edit mode or insert mode - $this->mode = 'update'; - } else { - $this->mode = 'list'; - - if(!empty($_POST)) { - $this->executeSave(); - } - if(isset($_GET['delete']) && is_numeric($_GET['delete'])) { - $this->executeDelete(); - } - } - } - - // override parent::createHTML() - public function createHTML() { - switch($this->mode) { - case 'list': - $this->createHTMLList(); - break; - case 'update': - $this->createHTMLUpdate(); - break; - } - - return parent::createHTML(); - } - - /** - * Prepare the template to show the update screen for a single server - */ - protected function createHTMLUpdate() { - $this->setTemplateId('servers_update', 'servers.tpl.html'); - - $server_id = $_GET['edit']; - - $tpl_data = array(); - - switch(intval($server_id)) { - case 0: - // insert mode - $tpl_data['titlemode'] = psm_get_lang('system', 'insert'); - $tpl_data['edit_server_id'] = '0'; - break; - default: - // edit mode - - // get server entry - $edit_server = $this->db->selectRow( - PSM_DB_PREFIX.'servers', - array('server_id' => $server_id) - ); - if (empty($edit_server)) { - $this->message = 'Invalid server id'; - return $this->createHTMLList(); - } - - $tpl_data = array_merge($tpl_data, array( - 'titlemode' => psm_get_lang('system', 'edit') . ' ' . $edit_server['label'], - 'edit_server_id' => $edit_server['server_id'], - 'edit_value_label' => $edit_server['label'], - 'edit_value_ip' => $edit_server['ip'], - 'edit_value_port' => $edit_server['port'], - 'edit_type_selected_' . $edit_server['type'] => 'selected="selected"', - 'edit_active_selected_' . $edit_server['active'] => 'selected="selected"', - 'edit_email_selected_' . $edit_server['email'] => 'selected="selected"', - 'edit_sms_selected_' . $edit_server['sms'] => 'selected="selected"', - )); - - break; - } - - $this->tpl->addTemplateData( - $this->getTemplateId(), - $tpl_data - ); + $this->setActions(array( + 'index', 'edit', 'save', 'delete', + ), 'index'); } /** * Prepare the template to show a list of all servers */ - protected function createHTMLList() { + protected function executeIndex() { $this->setTemplateId('servers_list', 'servers.tpl.html'); // get servers from database @@ -171,7 +98,55 @@ class Servers extends Core { $this->tpl->addTemplateData('main_auto_refresh', array('seconds' => $auto_refresh)); $this->tpl->addTemplateData('main', array('auto_refresh' => $this->tpl->getTemplate('main_auto_refresh'))); } + } + /** + * Prepare the template to show the update screen for a single server + */ + protected function executeEdit() { + $this->setTemplateId('servers_update', 'servers.tpl.html'); + + $server_id = isset($_GET['id']) ? intval($_GET['id']) : 0; + + $tpl_data = array(); + + switch(intval($server_id)) { + case 0: + // insert mode + $tpl_data['titlemode'] = psm_get_lang('system', 'insert'); + $tpl_data['edit_server_id'] = '0'; + break; + default: + // edit mode + // get server entry + $edit_server = $this->db->selectRow( + PSM_DB_PREFIX.'servers', + array('server_id' => $server_id) + ); + if (empty($edit_server)) { + $this->addMessage('Invalid server id'); + return $this->initializeAction('index'); + } + + $tpl_data = array_merge($tpl_data, array( + 'titlemode' => psm_get_lang('system', 'edit') . ' ' . $edit_server['label'], + 'edit_server_id' => $edit_server['server_id'], + 'edit_value_label' => $edit_server['label'], + 'edit_value_ip' => $edit_server['ip'], + 'edit_value_port' => $edit_server['port'], + 'edit_type_selected_' . $edit_server['type'] => 'selected="selected"', + 'edit_active_selected_' . $edit_server['active'] => 'selected="selected"', + 'edit_email_selected_' . $edit_server['email'] => 'selected="selected"', + 'edit_sms_selected_' . $edit_server['sms'] => 'selected="selected"', + )); + + break; + } + + $this->tpl->addTemplateData( + $this->getTemplateId(), + $tpl_data + ); } /** @@ -179,11 +154,14 @@ class Servers extends Core { */ protected function executeSave() { // check for add/edit mode - if (isset($_POST['label']) && isset($_POST['ip']) && isset($_POST['port'])) { + if(isset($_POST['label']) && isset($_POST['ip']) && isset($_POST['port'])) { + $server_id = isset($_GET['id']) ? intval($_GET['id']) : 0; + $clean = array( 'label' => strip_tags($_POST['label']), 'ip' => strip_tags($_POST['ip']), 'port' => strip_tags($_POST['port']), + // @todo validate the following values 'type' => $_POST['type'], 'active' => $_POST['active'], 'email' => $_POST['email'], @@ -191,35 +169,40 @@ class Servers extends Core { ); // check for edit or add - if ((int) $_POST['server_id'] > 0) { + if($server_id > 0) { // edit $this->db->save( PSM_DB_PREFIX.'servers', $clean, - array('server_id' => $_POST['server_id']) + array('server_id' => $server_id) ); - $this->message = psm_get_lang('servers', 'updated'); + $this->addMessage(psm_get_lang('servers', 'updated')); } else { // add $clean['status'] = 'on'; $this->db->save(PSM_DB_PREFIX.'servers', $clean); - $this->message = psm_get_lang('servers', 'inserted'); + $this->addMessage(psm_get_lang('servers', 'inserted')); } } + $this->initializeAction('index'); } /** * Executes the deletion of one of the servers */ protected function executeDelete() { - // do delete - $this->db->delete( - PSM_DB_PREFIX . 'servers', - array( - 'server_id' => $_GET['delete'] - ) - ); - $this->message = psm_get_lang('system', 'deleted'); + if(isset($_GET['id'])) { + $id = intval($_GET['id']); + // do delete + $this->db->delete( + PSM_DB_PREFIX . 'servers', + array( + 'server_id' => $id, + ) + ); + $this->addMessage(psm_get_lang('system', 'deleted')); + } + $this->initializeAction('index'); } // override parent::createHTMLLabels() diff --git a/src/psm/Module/Status.class.php b/src/psm/Module/Status.class.php index 19f5ae97..844bbe0b 100755 --- a/src/psm/Module/Status.class.php +++ b/src/psm/Module/Status.class.php @@ -27,28 +27,25 @@ **/ namespace psm\Module; +use psm\Service\Database; +use psm\Service\Template; /** * Status module */ -class Status extends Core { +class Status extends AbstractModule { - function __construct() { - parent::__construct(); - } + function __construct(Database $db, Template $tpl) { + parent::__construct($db, $tpl); - // override parent::createHTML() - public function createHTML() { - $this->createHTMLList(); - - return parent::createHTML(); + $this->setActions('index', 'index'); } /** * Prepare the template to show a list of all servers * @todo move the background colurs to the config */ - protected function createHTMLList() { + protected function executeIndex() { $this->setTemplateId('status', 'status.tpl.html'); $this->addFooter(false); diff --git a/src/psm/Module/Users.class.php b/src/psm/Module/Users.class.php index 78dfb5df..71649266 100755 --- a/src/psm/Module/Users.class.php +++ b/src/psm/Module/Users.class.php @@ -26,56 +26,33 @@ **/ namespace psm\Module; +use psm\Service\Database; +use psm\Service\Template; /** * User module. Add, edit and delete users, or assign * servers to users. */ -class Users extends Core { +class Users extends AbstractModule { public $servers; - function __construct() { - parent::__construct(); + function __construct(Database $db, Template $tpl) { + parent::__construct($db, $tpl); - // check mode - if (isset($_GET['edit']) && is_numeric($_GET['edit'])) { - // edit mode or insert mode - $this->mode = 'update'; - } else { - $this->mode = 'list'; - - if(!empty($_POST)) { - $this->executeSave(); - } - if(isset($_GET['delete']) && is_numeric($_GET['delete'])) { - $this->executeDelete(); - } - } + $this->setActions(array( + 'index', 'edit', 'delete', 'save', + ), 'index'); $this->servers = $this->db->select(PSM_DB_PREFIX.'servers', null, array('server_id', 'label')); } - // override parent::createHTML() - public function createHTML() { - switch($this->mode) { - case 'list': - $this->createHTMLList(); - break; - case 'update': - $this->createHTMLUpdate(); - break; - } - - return parent::createHTML(); - } - /** * Prepare the template to show the update screen for a user */ - protected function createHTMLUpdate() { + protected function executeEdit() { $this->setTemplateId('users_update', 'users.tpl.html'); - $user_id = $_GET['edit']; + $user_id = isset($_GET['id']) ? intval($_GET['id']) : 0; $tpl_data = array(); $servers_count = count($this->servers); @@ -94,15 +71,13 @@ class Users extends Core { break; default: // edit mode - - // get user entry $edit_user = $this->db->selectRow( PSM_DB_PREFIX.'users', array('user_id' => $user_id) ); if (empty($edit_user)) { - $this->message = 'Invalid user id'; - return $this->createHTMLList(); + $this->addMessage('Invalid user.'); + return $this->initializeAction('index'); } $tpl_data = array_merge($tpl_data, array( @@ -137,7 +112,7 @@ class Users extends Core { /** * Prepare the template to show a list of all users */ - protected function createHTMLList() { + protected function executeIndex() { $this->setTemplateId('users_list', 'users.tpl.html'); // build label array for the next loop @@ -174,7 +149,6 @@ class Users extends Core { } // add servers to template $this->tpl->addTemplateDataRepeat($this->getTemplateId(), 'users', $users); - } /** @@ -182,7 +156,6 @@ class Users extends Core { */ protected function executeSave() { // check for add/edit mode - if (isset($_POST['name']) && isset($_POST['mobile']) && isset($_POST['email'])) { $clean = array( 'name' => $_POST['name'], @@ -190,36 +163,42 @@ class Users extends Core { 'email' => $_POST['email'], 'server_id' => (isset($_POST['server_id'])) ? implode(',', $_POST['server_id']) : '' ); + $id = (isset($_GET['id'])) ? intval($_GET['id']) : 0; // check for edit or add - if ((int) $_POST['user_id'] > 0) { + if ((int) $id > 0) { // edit $this->db->save( PSM_DB_PREFIX.'users', $clean, - array('user_id' => $_POST['user_id']) + array('user_id' => $id) ); - $this->message = psm_get_lang('users', 'updated'); + $this->addMessage(psm_get_lang('users', 'updated')); } else { // add $this->db->save(PSM_DB_PREFIX.'users', $clean); - $this->message = psm_get_lang('users', 'inserted'); + $this->addMessage(psm_get_lang('users', 'inserted')); } } + $this->initializeAction('index'); } /** * Executes the deletion of a user */ protected function executeDelete() { - // do delete - $this->db->delete( - PSM_DB_PREFIX . 'users', - array( - 'user_id' => $_GET['delete'] - ) - ); - $this->message = psm_get_lang('system', 'deleted'); + $id = (isset($_GET['id'])) ? intval($_GET['id']) : 0; + + if($id > 0) { + $this->db->delete( + PSM_DB_PREFIX . 'users', + array( + 'user_id' => $id, + ) + ); + $this->addMessage(psm_get_lang('system', 'deleted')); + } + $this->initializeAction('index'); } // override parent::createHTMLLabels() diff --git a/src/templates/config.tpl.html b/src/templates/config.tpl.html index b1850e93..59d54d1a 100755 --- a/src/templates/config.tpl.html +++ b/src/templates/config.tpl.html @@ -1,7 +1,7 @@ {config_update}
-
+
{label_general}
@@ -118,9 +118,7 @@
- -
diff --git a/src/templates/servers.tpl.html b/src/templates/servers.tpl.html index 7c3c508e..32ef0ae6 100755 --- a/src/templates/servers.tpl.html +++ b/src/templates/servers.tpl.html @@ -6,7 +6,7 @@
- + {label_add_new} @@ -27,7 +27,7 @@ {email} {emp_servers} - + @@ -44,7 +44,7 @@
-
+
{titlemode}
@@ -81,9 +81,8 @@
- - +
diff --git a/static/js/scripts.js b/static/js/scripts.js index 973cc22f..9fe15d39 100644 --- a/static/js/scripts.js +++ b/static/js/scripts.js @@ -1,7 +1,7 @@ function sm_delete(id, type) { var del = confirm("Are you sure you want to delete this record?"); if (del == true) { - var loc = 'index.php?delete=' + id + '&type=' + type; + var loc = 'index.php?action=delete&id=' + id + '&type=' + type; window.location = loc; } } @@ -9,7 +9,7 @@ function sm_delete(id, type) { function trim(str) { return str.replace(/^\s+|\s+$/g,""); } - + //left trim function ltrim(str) { return str.replace(/^\s+/,""); @@ -18,4 +18,4 @@ function ltrim(str) { //right trim function rtrim(str) { return str.replace(/\s+$/,""); -} \ No newline at end of file +} \ No newline at end of file From 6075bc80aba863658c45af71ded25e9069c01fb0 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Sat, 8 Feb 2014 18:35:49 +0100 Subject: [PATCH 22/31] Changing Database service to accept custom db info in construct, no longer solely relying on config constants --- src/psm/Service/Database.class.php | 32 ++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/psm/Service/Database.class.php b/src/psm/Service/Database.class.php index 300c6e32..896eeaf7 100755 --- a/src/psm/Service/Database.class.php +++ b/src/psm/Service/Database.class.php @@ -35,17 +35,33 @@ class Database { protected $num_rows_found; protected $num_rows_returned; - function __construct() { - // Initizale connection - $this->link = mysql_connect(PSM_DB_HOST, PSM_DB_USER, PSM_DB_PASS); + function __construct($host = null, $user = null, $pass = null, $db = null) { + if($host != null && $user != null && $pass != null && $db != null) { + $this->connect($host, $user, $pass, $db); + } elseif(defined('PSM_DB_HOST') && defined('PSM_DB_USER') && defined('PSM_DB_PASS') && defined('PSM_DB_NAME')) { + $this->connect(PSM_DB_HOST, PSM_DB_USER, PSM_DB_PASS, PSM_DB_NAME); + } + } - if (!mysql_select_db(PSM_DB_NAME, $this->link)) { + /** + * Connect to the database + * @param string $host + * @param string $user + * @param string $pass + * @param string $db + * @return boolean + */ + protected function connect($host, $user, $pass, $db) { + $this->link = mysql_connect($host, $user, $pass); + + if (!mysql_select_db($db, $this->link)) { trigger_error(mysql_errno() . ": " . mysql_error()); + return false; } - // Setting the utf collection - mysql_query("SET NAMES utf8;", $this->getLink()); - mysql_query("SET CHARACTER SET 'utf8';", $this->getLink()); + mysql_query("SET NAMES utf8;", $this->link); + mysql_query("SET CHARACTER SET 'utf8';", $this->link); + return true; } /** @@ -367,4 +383,4 @@ class Database { } } -?> +?> \ No newline at end of file From 6e190639724dcb7216d935003999fd1c69b278fa Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Sat, 8 Feb 2014 18:40:22 +0100 Subject: [PATCH 23/31] Adding new install mode with upgrade support. Config file has been moved one more (and last..) time so its back in the root directory. --- ...config.inc.php.sample => config.php.sample | 6 - install.php | 126 +------ src/bootstrap.php | 37 +- src/includes/functions.inc.php | 12 +- src/lang/br.lang.php | 1 + src/lang/de.lang.php | 1 + src/lang/en.lang.php | 1 + src/lang/fr.lang.php | 1 + src/lang/kr.lang.php | 1 + src/lang/nl.lang.php | 1 + src/psm/Module/AbstractModule.class.php | 64 ++-- src/psm/Module/Install.class.php | 321 ++++++++++++++++++ src/psm/Util/Install/Queries.class.php | 132 +++++++ src/templates/install.tpl.html | 137 +++++--- src/templates/main.tpl.html | 76 ++--- src/templates/servers.tpl.html | 5 - src/templates/users.tpl.html | 3 - static/js/scripts.js | 15 + 18 files changed, 675 insertions(+), 265 deletions(-) rename src/includes/config.inc.php.sample => config.php.sample (92%) create mode 100644 src/psm/Module/Install.class.php create mode 100644 src/psm/Util/Install/Queries.class.php diff --git a/src/includes/config.inc.php.sample b/config.php.sample similarity index 92% rename from src/includes/config.inc.php.sample rename to config.php.sample index 6b740bcd..b36afe6d 100755 --- a/src/includes/config.inc.php.sample +++ b/config.php.sample @@ -26,15 +26,9 @@ **/ define('PSM_CONFIG', true); -// Prefix used for tables define('PSM_DB_PREFIX', 'monitor_'); -// Database username define('PSM_DB_USER', 'db_user'); -// Database password define('PSM_DB_PASS', 'db_pass'); -// Database name define('PSM_DB_NAME', 'db_name'); -// Database host define('PSM_DB_HOST', 'localhost'); - ?> \ No newline at end of file diff --git a/install.php b/install.php index 3dd19100..054283dc 100755 --- a/install.php +++ b/install.php @@ -25,127 +25,15 @@ * @link http://phpservermon.neanderthal-technology.com/ **/ -// this script creates all the database tables required for server monitor -error_reporting(0x0ffffff); +define('PSM_INSTALL', true); require 'src/bootstrap.php'; -if(!function_exists('curl_init')) { - die('PHP is installed without the cURL module. Please install cURL first.'); -} +psm_no_cache(); -$tpl = new psm\Service\Template(); +$type = 'install'; +$tpl = new \psm\Service\Template(); +$mod = new psm\Module\Install($db, $tpl); +$mod->initialize(); -$tpl->newTemplate('install', 'install.tpl.html'); - - -if(!is_resource($db->getLink())) { - // no valid db info - $tpl->addTemplatedata( - 'install', - array('error' => 'Couldn\'t connect to database!') - ); - echo $tpl->display('install'); - die(); -} - -$tables = array( - 'users' => - array( - 0 => "CREATE TABLE `" . PSM_DB_PREFIX . "users` ( - `user_id` int(11) NOT NULL auto_increment, - `server_id` varchar(255) NOT NULL, - `name` varchar(255) NOT NULL, - `mobile` varchar(15) NOT NULL, - `email` varchar(255) NOT NULL, - PRIMARY KEY (`user_id`) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", - 1 => "INSERT INTO `" . PSM_DB_PREFIX . "users` (`server_id`, `name`, `mobile`, `email`) VALUES ('1,2', 'example_user', '0123456789', 'user@example.com')" - ), - 'log' => - array( - 0 => "CREATE TABLE `" . PSM_DB_PREFIX . "log` ( - `log_id` int(11) NOT NULL auto_increment, - `server_id` int(11) NOT NULL, - `type` enum('status','email','sms') NOT NULL, - `message` varchar(255) NOT NULL, - `datetime` timestamp NOT NULL default CURRENT_TIMESTAMP, - `user_id` varchar(255) NOT NULL, - PRIMARY KEY (`log_id`) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", - ), - 'servers' => - array( - 0 => "CREATE TABLE `" . PSM_DB_PREFIX . "servers` ( - `server_id` int(11) NOT NULL auto_increment, - `ip` varchar(100) NOT NULL, - `port` int(5) NOT NULL, - `label` varchar(255) NOT NULL, - `type` enum('service','website') NOT NULL default 'service', - `status` enum('on','off') NOT NULL default 'on', - `error` varchar(255) NULL, - `rtime` FLOAT(9, 7) NULL, - `last_online` datetime NULL, - `last_check` datetime NULL, - `active` enum('yes','no') NOT NULL default 'yes', - `email` enum('yes','no') NOT NULL default 'yes', - `sms` enum('yes','no') NOT NULL default 'no', - PRIMARY KEY (`server_id`) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", - 1 => "INSERT INTO `" . PSM_DB_PREFIX . "servers` (`ip`, `port`, `label`, `type`, `status`, `error`, `rtime`, `last_online`, `last_check`, `active`, `email`, `sms`) VALUES ('http://sourceforge.net/index.php', 80, 'SourceForge', 'website', 'on', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 'yes', 'yes', 'yes'), ('smtp.gmail.com', 465, 'Gmail SMTP', 'service', 'on', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 'yes', 'yes', 'yes')", - ), - 'config' => - array( - 0 => "CREATE TABLE `" . PSM_DB_PREFIX . "config` ( - `config_id` int(11) NOT NULL AUTO_INCREMENT, - `key` varchar(255) NOT NULL, - `value` varchar(255) NOT NULL, - PRIMARY KEY (`config_id`), - KEY `key` (`key`(50)) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", - 1 => "INSERT INTO `" . PSM_DB_PREFIX . "config` (`config_id`, `key`, `value`) VALUES - (null, 'language', 'en'), - (null, 'email_status', '1'), - (null, 'email_from_email', 'monitor@example.org'), - (null, 'email_from_name', 'Server Monitor'), - (null, 'sms_status', '1'), - (null, 'sms_gateway', 'mollie'), - (null, 'sms_gateway_username', 'username'), - (null, 'sms_gateway_password', 'password'), - (null, 'sms_from', '1234567890'), - (null, 'alert_type', 'status'), - (null, 'log_status', '1'), - (null, 'log_email', '1'), - (null, 'log_sms', '1'), - (null, 'version', '200'), - (null, 'auto_refresh_servers', '0'), - (null, 'show_update', '1'), - (null, 'last_update_check', '0');", - ) -); - -$result = array(); - -foreach($tables as $name => $queries) { - $if_table_exists = $db->query('SHOW TABLES LIKE \'' . PSM_DB_PREFIX . $name.'\''); - - if(!empty($if_table_exists)) { - $message = 'Table ' . PSM_DB_PREFIX . $name . ' already exists in your database!'; - } else { - $message = ''; - - foreach($queries as $query) { - $message .= 'Executing ' . $query . '

'; - $db->query($query); - } - } - - $result[] = array( - 'name' => $name, - 'result' => $message, - ); -} -$tpl->addTemplateDataRepeat('install', 'tables', $result); - -echo $tpl->display('install'); -?> +?> \ No newline at end of file diff --git a/src/bootstrap.php b/src/bootstrap.php index cf1fd295..754e0609 100755 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -1,5 +1,6 @@ getLink() !== null) { -$lang = psm_get_conf('language'); - -if(!$lang) { - $lang = 'en'; + psm_load_conf(); +} else { + // no config yet! lets help them in the right direction + if(!defined('PSM_INSTALL')) { + header('Location: install.php'); + die(); + } } +$lang = psm_get_conf('language', 'en'); psm_load_lang($lang); -?> +?> \ No newline at end of file diff --git a/src/includes/functions.inc.php b/src/includes/functions.inc.php index a65ef9dc..774ac32f 100755 --- a/src/includes/functions.inc.php +++ b/src/includes/functions.inc.php @@ -93,11 +93,12 @@ function psm_get_langs() { * The config must have been loaded first using psm_load_conf() * * @param string $key + * @param mixed $alt if not set, return this alternative * @return string * @see psm_load_conf() */ -function psm_get_conf($key) { - $result = (isset($GLOBALS['sm_config'][$key])) ? $GLOBALS['sm_config'][$key] : null; +function psm_get_conf($key, $alt = null) { + $result = (isset($GLOBALS['sm_config'][$key])) ? $GLOBALS['sm_config'][$key] : $alt; return $result; } @@ -243,13 +244,10 @@ function psm_check_updates() { // been more than a week since update, lets go // update "update-date" $db->save(PSM_DB_PREFIX . 'config', array('value' => time()), array('key' => 'last_update_check')); - $latest = psm_curl_get('http://phpservermon.neanderthal-technology.com/version'); + $latest = psm_curl_get('http://phpservermon.neanderthal-technology.com/version.php'); $current = psm_get_conf('version'); - if((int) $current < (int) $latest) { - // new update available - return true; - } + return version_compare($latest, $current, '>'); } return false; } diff --git a/src/lang/br.lang.php b/src/lang/br.lang.php index 1264c4ea..8885ef36 100755 --- a/src/lang/br.lang.php +++ b/src/lang/br.lang.php @@ -34,6 +34,7 @@ $sm_lang = array( 'update' => 'Atualização', 'config' => 'Configuração', 'help' => 'Ajuda', + 'install' => 'Install', 'action' => 'Ação', 'save' => 'Salvar', 'edit' => 'Editar', diff --git a/src/lang/de.lang.php b/src/lang/de.lang.php index cecdffae..b8cb1f74 100755 --- a/src/lang/de.lang.php +++ b/src/lang/de.lang.php @@ -34,6 +34,7 @@ $sm_lang = array( 'update' => 'Updates', 'config' => 'Einstellungen', 'help' => 'Hilfe', + 'install' => 'Install', 'action' => 'Aktion', 'save' => 'Speichern', 'edit' => 'Bearbeiten', diff --git a/src/lang/en.lang.php b/src/lang/en.lang.php index 757d0bb8..c1ea45be 100755 --- a/src/lang/en.lang.php +++ b/src/lang/en.lang.php @@ -34,6 +34,7 @@ $sm_lang = array( 'update' => 'Update', 'config' => 'Config', 'help' => 'Help', + 'install' => 'Install', 'action' => 'Action', 'save' => 'Save', 'edit' => 'Edit', diff --git a/src/lang/fr.lang.php b/src/lang/fr.lang.php index 254ae908..02999319 100755 --- a/src/lang/fr.lang.php +++ b/src/lang/fr.lang.php @@ -34,6 +34,7 @@ $sm_lang = array( 'update' => 'Mise à jour', 'config' => 'Configuration', 'help' => 'Aide', + 'install' => 'Install', 'action' => 'Action', 'save' => 'Enregistrer', 'edit' => 'Editer', diff --git a/src/lang/kr.lang.php b/src/lang/kr.lang.php index b4b07acd..9d652df1 100755 --- a/src/lang/kr.lang.php +++ b/src/lang/kr.lang.php @@ -35,6 +35,7 @@ $sm_lang = array( 'update' => '업데이트', 'config' => '설정', 'help' => '도움말', + 'install' => 'Install', 'action' => 'Action', 'save' => '저장', 'edit' => '수정', diff --git a/src/lang/nl.lang.php b/src/lang/nl.lang.php index e82aaf97..463ff6aa 100755 --- a/src/lang/nl.lang.php +++ b/src/lang/nl.lang.php @@ -34,6 +34,7 @@ $sm_lang = array( 'update' => 'Update', 'config' => 'Config', 'help' => 'Help', + 'install' => 'Install', 'action' => 'Actie', 'save' => 'Opslaan', 'edit' => 'Wijzig', diff --git a/src/psm/Module/AbstractModule.class.php b/src/psm/Module/AbstractModule.class.php index 89cd58d6..15c46119 100755 --- a/src/psm/Module/AbstractModule.class.php +++ b/src/psm/Module/AbstractModule.class.php @@ -62,9 +62,17 @@ abstract class AbstractModule implements ModuleInterface { /** * Add footer to page? * @var boolean $add_footer + * @see addFooter() */ protected $add_footer = true; + /** + * Add menu to page? + * @var boolean $add_menu + * @see addMenu() + */ + protected $add_menu = true; + /** * Messages to show the user * @var array $messages @@ -141,34 +149,36 @@ abstract class AbstractModule implements ModuleInterface { * Then the tpl_id set in $this->getTemplateId() will be added to the main template automatically */ protected function createHTML() { - // add footer to page? - if($this->add_footer) { - $this->tpl->newTemplate('main_footer', 'main.tpl.html'); - $html_footer = $this->tpl->getTemplate('main_footer'); - } else { - $html_footer = ''; - } - if(psm_get_conf('show_update')) { // user wants updates, lets see what we can do $this->createHTMLUpdateAvailable(); } + $tpl_data = array( + 'message' => (empty($this->messages)) ? ' ' : implode('
', $this->messages), + ); + // add menu to page? + if($this->add_menu) { + $this->tpl->newTemplate('main_menu', 'main.tpl.html'); + $tpl_data['html_menu'] = $this->tpl->getTemplate('main_menu'); + } + // add footer to page? + if($this->add_footer) { + $this->tpl->newTemplate('main_footer', 'main.tpl.html'); + $tpl_data['html_footer'] = $this->tpl->getTemplate('main_footer'); + } - $this->createHTMLLabels(); + $tpl_id_content = $this->getTemplateId(); + if($tpl_id_content) { + $tpl_data['content'] = $this->tpl->getTemplate($tpl_id_content); + } // add the module's custom template to the main template to get some content - $this->tpl->addTemplatedata( - 'main', - array( - 'content' => $this->tpl->getTemplate($this->getTemplateId()), - 'message' => (empty($this->messages)) ? ' ' : implode('
', $this->messages), - 'html_footer' => $html_footer, - 'label_back_to_top' => psm_get_lang('system', 'back_to_top'), - ) - ); + $this->setTemplateId('main'); + $this->tpl->addTemplatedata($this->getTemplateId(), $tpl_data); + $this->createHTMLLabels(); // display main template - echo $this->tpl->display('main'); + echo $this->tpl->display($this->getTemplateId()); } /** @@ -180,12 +190,7 @@ abstract class AbstractModule implements ModuleInterface { if(psm_check_updates()) { // yay, new update available =D - $this->tpl->addTemplateData( - 'main', - array( - 'update_available' => '
'.psm_get_lang('system', 'update_available').'
', - ) - ); + $this->addMessage(psm_get_lang('system', 'update_available')); } } @@ -209,6 +214,7 @@ abstract class AbstractModule implements ModuleInterface { 'label_config' => psm_get_lang('system', 'config'), 'label_update' => psm_get_lang('system', 'update'), 'label_help' => psm_get_lang('system', 'help'), + 'label_back_to_top' => psm_get_lang('system', 'back_to_top'), ) ); } @@ -248,6 +254,14 @@ abstract class AbstractModule implements ModuleInterface { $this->add_footer = $value; } + /** + * Hide or show the menu of the page + * @param boolean $value + */ + protected function addMenu($value) { + $this->add_menu = $value; + } + /** * Set actions available * @param string|array $actions diff --git a/src/psm/Module/Install.class.php b/src/psm/Module/Install.class.php new file mode 100644 index 00000000..2b32864e --- /dev/null +++ b/src/psm/Module/Install.class.php @@ -0,0 +1,321 @@ +. + * + * @package phpservermon + * @author Pepijn Over + * @copyright Copyright (c) 2008-2014 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://phpservermon.neanderthal-technology.com/ + * @since phpservermon 2.1.0 + **/ + +namespace psm\Module; +use psm\Service\Database; +use psm\Service\Template; + +class Install extends AbstractModule { + + /** + * Result messages to add to the main template + * @var array $install_results + * @see addResult() + */ + protected $install_results = array(); + + /** + * Full path to config file + * @var string $path_config + */ + protected $path_config; + + /** + * Full path to old config file (2.0) + * @var string $path_config_old + */ + protected $path_config_old; + + function __construct(Database $db, Template $tpl) { + parent::__construct($db, $tpl); + + $this->path_config = PSM_PATH_SRC . '../config.php'; + $this->path_config_old = PSM_PATH_SRC . '../config.inc.php'; + + $this->setActions(array( + 'index', 'config', 'install' + ), 'index'); + } + + protected function createHTML() { + $tpl_id_custom = $this->getTemplateId(); + $this->setTemplateId('install', 'install.tpl.html'); + $html_install = ($tpl_id_custom) ? $this->tpl->getTemplate($tpl_id_custom) : ''; + + $html_results = ''; + if(!empty($this->install_results)) { + $this->tpl->newTemplate('install_results', 'install.tpl.html'); + $this->tpl->addTemplateDataRepeat('install_results', 'resultmsgs', $this->install_results); + $html_results = $this->tpl->getTemplate('install_results'); + } + $this->tpl->addTemplateData($this->getTemplateId(), array( + 'html_install' => $html_install, + 'html_results' => $html_results, + )); + + return parent::createHTML(); + } + + /** + * Generate the main install page with prerequisites + */ + protected function executeIndex() { + $this->addMenu(false); + $tpl_data = array(); + + // build prerequisites + $errors = 0; + + $phpv = phpversion(); + if(version_compare($phpv, '5.3.0', '<')) { + $errors++; + $this->addResult('PHP 5.3+ is required to run PHP Server Monitor.', 'error'); + } else { + $this->addResult('PHP version: ' . $phpv); + } + if(!function_exists('curl_init')) { + $this->addResult('PHP is installed without the cURL module. Please install cURL.', 'warning'); + } else { + $this->addResult('cURL installed'); + } + if(!function_exists('mysql_connect')) { + $errors++; + $this->addResult('php-mysql needs to be installed.', 'error'); + } + + if($errors > 0) { + // cannot continue + $this->addResult($errors . ' error(s) have been encountered. Please fix them and refresh this page.', 'error'); + } else { + if(defined('PSM_CONFIG')) { + $this->addResult('Configuration file found.'); + return $this->executeInstall(); + } else { + return $this->executeConfig(); + } + } + } + + /** + * Help the user create a new config file + */ + protected function executeConfig() { + if(defined('PSM_CONFIG')) { + return $this->executeInstall(); + } + // first detect "old" config file (2.0) + if(file_exists($this->path_config_old)) { + // oldtimer huh + $this->addResult('Configuration file for v2.0 found.'); + $this->addResult( + 'The location of the config file has been changed since the previous version.
' . + 'We will attempt to create a new config file for you.' + , 'warning'); + $values = $this->parseConfig20(); + } else { + // fresh install + $values = $_POST; + } + + $config = array( + 'host' => 'localhost', + 'name' => '', + 'user' => '', + 'pass' => '', + 'prefix' => 'psm_', + ); + $this->setTemplateId('install_config_new', 'install.tpl.html'); + + $changed = false; + foreach($config as $ckey => &$cvalue) { + if(isset($values[$ckey])) { + $changed = true; + $cvalue = $values[$ckey]; + } + } + // add config to template data for prefilling the form + $tpl_data = $config; + + if($changed) { + // test db connection + $this->db = new \psm\Service\Database( + $config['host'], + $config['user'], + $config['pass'], + $config['name'] + ); + + if(is_resource($this->db->getLink())) { + $this->addResult('Connection to MySQL successful.'); + $config_php = $this->writeConfigFile($config); + if($config_php === true) { + $this->addResult('Configuration file written successfully.'); + return $this->executeInstall(); + } else { + $this->addResult('Config file is not writable, we cannot save it for you.', 'error'); + $this->tpl->newTemplate('install_config_new_copy', 'install.tpl.html'); + $tpl_data['html_config_copy'] = $this->tpl->getTemplate('install_config_new_copy'); + $tpl_data['php_config'] = $config_php; + } + } else { + $this->addResult('Unable to connect to MySQL. Please check your information.', 'error'); + } + } + + $this->tpl->addTemplateData($this->getTemplateId(), $tpl_data); + } + + /** + * Parse the 2.0 config file for prefilling + * @return array + */ + protected function parseConfig20() { + $config_old = file_get_contents($this->path_config_old); + $vars = array( + 'prefix' => '', + 'user' => '', + 'pass' => '', + 'name' => '', + 'host' => '', + ); + $pattern = "/define\('SM_DB_{key}', '(.*?)'/u"; + + foreach($vars as $key => $value) { + $pattern_key = str_replace('{key}', strtoupper($key), $pattern); + preg_match($pattern_key, $config_old, $value_matches); + $vars[$key] = (isset($value_matches[1])) ? $value_matches[1] : ''; + } + + return $vars; + } + + /** + * Execute the upgrade process to a newer version + */ + protected function executeInstall() { + if(!defined('PSM_CONFIG')) { + $this->addResult('No valid configuration found.', 'error'); + return $this->executeConfig(); + } + if(!is_resource($this->db->getLink())) { + $this->addResult('MySQL connection failed.', 'error'); + return; + } + $queries = new \psm\Util\Install\Queries; + $tables = $queries->install(); + foreach($tables as $name => $sql) { + $if_table_exists = $this->db->query("SHOW TABLES LIKE '{$name}'"); + + if(!empty($if_table_exists)) { + $this->addResult('Table ' . $name . ' already exists in your database!'); + } else { + $this->db->query($sql); + $this->addResult('Table ' . $name . ' added.'); + } + } + $version_conf = $this->db->selectRow(PSM_DB_PREFIX . 'config', array('key' => 'version'), array('key', 'value')); + + if(empty($version_conf)) { + // fresh install + $version_from = null; + } else { + // existing install + $version_from = $version_conf['value']; + if(strpos($version_from, '.') === false) { + // yeah, my bad.. previous version did not follow proper naming scheme + $version_from = rtrim(chunk_split($version_from, 1, '.'), '.'); + } + $this->addResult('Upgrade detected, upgrading from ' . $version_from); + } + $this->addResult('Executing database changes for version ' . PSM_VERSION); + $install_queries = $queries->upgrade(PSM_VERSION, $version_from); + + foreach($install_queries as $sql) { + $this->db->query($sql); + } + + $this->addResult('Installation finished!'); + $this->setTemplateId('install_success', 'install.tpl.html'); + } + + /** + * Write config file with db variables + * @param array $db_vars prefix,user,pass,name,host + * @return boolean|string TRUE on success, string with config otherwise + */ + protected function writeConfigFile($db_vars) { + $config = + " $value) { + $line = "define('PSM_DB_{key}', '{value}');".PHP_EOL; + $line = str_replace( + array('{key}', '{value}'), + array(strtoupper($key), $value), + $line + ); + $config .= $line; + } + $config .= "?>".PHP_EOL; + if(is_writeable($this->path_config)) { + file_put_contents($this->path_config, $config); + return true; + } else { + return $config; + } + } + + /** + * Add install result to be added to the main template + * @param string|array $msg + * @param string $status success/warning/error + * @return \psm\Module\Install + */ + protected function addResult($msg, $status = 'success') { + if(!is_array($msg)) { + $msg = array($msg); + } + if($status == 'error') { + $shortcode = 'important'; + } else { + $shortcode = $status; + } + + foreach($msg as $m) { + $this->install_results[] = array( + 'message' => $m, + 'status' => strtoupper($status), + 'shortcode' => $shortcode, + ); + } + return $this; + } +} + +?> \ No newline at end of file diff --git a/src/psm/Util/Install/Queries.class.php b/src/psm/Util/Install/Queries.class.php new file mode 100644 index 00000000..4ce77c93 --- /dev/null +++ b/src/psm/Util/Install/Queries.class.php @@ -0,0 +1,132 @@ +. + * + * @package phpservermon + * @author Pepijn Over + * @copyright Copyright (c) 2008-2014 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://phpservermon.neanderthal-technology.com/ + * @since phpservermon 2.1.0 + **/ + +namespace psm\Util\Install; + +/** + * Query class provides al queries required for installing/upgrading. + */ +class Queries { + /** + * Retrieve table queries for install + * @return array + */ + public function install() { + $tables = array( + PSM_DB_PREFIX . 'users' => "CREATE TABLE `" . PSM_DB_PREFIX . "users` ( + `user_id` int(11) NOT NULL auto_increment, + `server_id` varchar(255) NOT NULL, + `name` varchar(255) NOT NULL, + `mobile` varchar(15) NOT NULL, + `email` varchar(255) NOT NULL, + PRIMARY KEY (`user_id`) + ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", + PSM_DB_PREFIX . 'log' => "CREATE TABLE `" . PSM_DB_PREFIX . "log` ( + `log_id` int(11) NOT NULL auto_increment, + `server_id` int(11) NOT NULL, + `type` enum('status','email','sms') NOT NULL, + `message` varchar(255) NOT NULL, + `datetime` timestamp NOT NULL default CURRENT_TIMESTAMP, + `user_id` varchar(255) NOT NULL, + PRIMARY KEY (`log_id`) + ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", + PSM_DB_PREFIX . 'servers' => "CREATE TABLE `" . PSM_DB_PREFIX . "servers` ( + `server_id` int(11) NOT NULL auto_increment, + `ip` varchar(100) NOT NULL, + `port` int(5) NOT NULL, + `label` varchar(255) NOT NULL, + `type` enum('service','website') NOT NULL default 'service', + `status` enum('on','off') NOT NULL default 'on', + `error` varchar(255) NULL, + `rtime` FLOAT(9, 7) NULL, + `last_online` datetime NULL, + `last_check` datetime NULL, + `active` enum('yes','no') NOT NULL default 'yes', + `email` enum('yes','no') NOT NULL default 'yes', + `sms` enum('yes','no') NOT NULL default 'no', + PRIMARY KEY (`server_id`) + ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", + PSM_DB_PREFIX . 'config' => "CREATE TABLE `" . PSM_DB_PREFIX . "config` ( + `key` varchar(255) NOT NULL, + `value` varchar(255) NOT NULL, + PRIMARY KEY (`key`) + ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", + ); + return $tables; + } + + /** + * Get queries for upgrading + * @param string $version + * @param string $version_from + * @return array + */ + public function upgrade($version, $version_from = null) { + $queries = array(); + + if($version_from === null) { + $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "users` (`server_id`, `name`, `mobile`, `email`) VALUES ('1,2', 'example_user', '0123456789', 'user@example.com')"; + $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "servers` (`ip`, `port`, `label`, `type`, `status`, `error`, `rtime`, `last_online`, `last_check`, `active`, `email`, `sms`) VALUES ('http://sourceforge.net/index.php', 80, 'SourceForge', 'website', 'on', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 'yes', 'yes', 'yes'), ('smtp.gmail.com', 465, 'Gmail SMTP', 'service', 'on', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 'yes', 'yes', 'yes')"; + $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "config` (`key`, `value`) VALUE + ('language', 'en'), + ('email_status', '1'), + ('email_from_email', 'monitor@example.org'), + ('email_from_name', 'Server Monitor'), + ('sms_status', '1'), + ('sms_gateway', 'mollie'), + ('sms_gateway_username', 'username'), + ('sms_gateway_password', 'password'), + ('sms_from', '1234567890'), + ('alert_type', 'status'), + ('log_status', '1'), + ('log_email', '1'), + ('log_sms', '1'), + ('version', '{$version}'), + ('auto_refresh_servers', '0'), + ('show_update', '1'), + ('last_update_check', '0');"; + } else { + if(version_compare($version_from, '2.1.0', '<')) { + // 2.0 upgrade + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "config` DROP `config_id`;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "config` ADD PRIMARY KEY ( `key` );"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "config` DROP INDEX `key`;"; + + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `error` `error` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `rtime` `rtime` FLOAT( 9, 7 ) NULL;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `last_online` `last_online` DATETIME NULL;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `last_check` `last_check` DATETIME NULL;"; + + } + $queries[] = "UPDATE `" . PSM_DB_PREFIX . "config` SET `value` = '{$version}' WHERE `key` = 'version';"; + } + return $queries; + } +} + +?> \ No newline at end of file diff --git a/src/templates/install.tpl.html b/src/templates/install.tpl.html index 18c7e270..48842200 100755 --- a/src/templates/install.tpl.html +++ b/src/templates/install.tpl.html @@ -1,53 +1,94 @@ - - - - - PHP Server Monitor - - - - - - - - - - - -
+
+

 PHP Server Monitor

+

 

+

+ PHP Server Monitor + Twitter Bootstrap +

+

PHP Server Monitor is a script that checks whether the servers on your list are up and running on the selected ports. It comes with a web based user interface where you can add and remove servers or websites from the MySQL database, and you can manage users for each server with a mobile number and email address.

+

To install PHP Server Monitor, please follow the instructions below.

+
+
+
{html_results}
+
+{html_install} + -
-

PHP Server Monitor

-

- PHP Server Monitor - Twitter Bootstrap -

-
+ +
+
+
+ +

Please enter your database info:

+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+{html_config_copy} +
+ -
-
- -
- Creating table {name}...

- {result} -
- - {tables} + +
+

Your config file:

+
Unable to save your configuration.
+

Please create a new file in the project directory called "config.php" and copy the information below.

+

After you have copied the configuration, press the button to continue.

+

+

+
+ -
- The installation is complete. Please check above if errors have occured.
- If no errors have occured, you can remove this file.

- Click here to go to your index -
+ +
+
+The installation is complete. Please check above if errors have occured.
+If no errors have occurred, you are good to go.

+Click here to go to the monitor +
+
+ -
-
- -
- - - - \ No newline at end of file + + +
+

{status}

+

{message}

+
+ +{resultmsgs} + \ No newline at end of file diff --git a/src/templates/main.tpl.html b/src/templates/main.tpl.html index 149eadae..020ede6b 100755 --- a/src/templates/main.tpl.html +++ b/src/templates/main.tpl.html @@ -19,6 +19,11 @@ + @@ -31,6 +36,36 @@ {title} +{html_menu} +
+ + + + + +
+ + +
+
+
{message}
+
+
+
{content}
+ + {html_footer} +
+ + + + + + - - - - - - -
- - -
- {content} -
- - {update_available} - {html_footer} -
- - - - - - - + diff --git a/src/templates/servers.tpl.html b/src/templates/servers.tpl.html index 32ef0ae6..0cf7c77b 100755 --- a/src/templates/servers.tpl.html +++ b/src/templates/servers.tpl.html @@ -1,10 +1,5 @@
- -
- {message} -
-
diff --git a/src/templates/users.tpl.html b/src/templates/users.tpl.html index bea30168..9c3c644e 100755 --- a/src/templates/users.tpl.html +++ b/src/templates/users.tpl.html @@ -1,8 +1,5 @@
-
- {message} -
diff --git a/static/js/scripts.js b/static/js/scripts.js index 9fe15d39..5078d79b 100644 --- a/static/js/scripts.js +++ b/static/js/scripts.js @@ -18,4 +18,19 @@ function ltrim(str) { //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(' ', ''); + if(t){ + flashmessage.slideDown(); + } + } } \ No newline at end of file From 9894399c2a16cab13ee68a0652d2580cba820d21 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Sat, 8 Feb 2014 19:36:17 +0100 Subject: [PATCH 24/31] updating readme for new install --- CHANGELOG | 6 +++-- README.md | 72 +++++++++++++++++++++++++++++++++---------------------- 2 files changed, 47 insertions(+), 31 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 96e08b62..54fa6ddb 100755 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,12 +5,14 @@ ######################### - Merged PHP Server Monitor Plus project by Luiz Alberto S. Ribeiro (https://github.com/madeinnordeste/PHP-Server-Monitor-Plus). -- New layout (thanks to twitter bootstrap) -- Support for mosms provider by Andreas Ek -- Support for Textmarketer provider by Perri Vardy-Mason +- New install module. +- Support for mosms provider by Andreas Ek. +- Support for Textmarketer provider by Perri Vardy-Mason. - Language files are now automatically detected, instead of a hardcoded list. - Adding Korean language file (thanks to Ik-Jun). - Adding Portuguese / Brazilian language file (thanks to Luiz Alberto S. Ribeiro). - Large status page by Michael Greenhill. +- New config file (see install instructions in README). ######################### # diff --git a/README.md b/README.md index 257f3219..e3767f76 100755 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ PHP Server Monitor is a script that checks whether the servers on your list are It comes with a web based user interface where you can add and remove servers or websites from the MySQL database, and you can manage users for each server with a mobile number and email address. -With version 2.0 there's the support for websites as well. On the "Add server" page, you can choose +With version 2 there's the support for websites as well. On the "Add server" page, you can choose whether it is a "service" or a "website": * Service @@ -27,8 +27,8 @@ whether it is a "service" or a "website": In that case the script will return a "status offline", and will start sending out notifications. Each server has it's own settings regarding notification. -You can choose for email notification or text message (SMS). As of version 2.0, there are 3 gateways -available: +You can choose for email notification or text message (SMS). +The following SMS gateways are currently available: * Mollie - * Spryng - @@ -46,60 +46,76 @@ The cron/status.cron.php can be added as a cronjob which will keep the server st I'd appreciate any feedback you might have regarding this script. Please leave it on the GitHub project page (tracker), or send me an email (see top of file for link). + ## DOWNLOAD The latest version can be found at . -You can also clone the git repo at . +You can also clone the git repo at if you want to contribute. ## REQUIREMENTS - * PHP 5 - * PHP packages: cURL + * PHP 5.3+ + * PHP packages: cURL, MySQL * MySQL Database - * FTP access ## INSTALL -By default the PHP Server Monitor does not come with any security methods. After uploading these files to -your public html folder these will be visible to everyone on the web. It is recommended to put a password -on this folder to prevent other people from playing with your tool. An example .htaccess login script can -be found in the example/ dir. To create your own username and password for the .htpasswd file, see - - ### 1. Configuration -Rename the config.inc.php.sample file to config.inc.php, then open the -config.inc.php file with a plain text editor such as Notepad. -The first thing to do now in order to get started, is to get your database login information -right. The information is stored using php's define() function. +The install script will guide you through setting up the configuration, but if you want to be ahead of the game, you can do this one first. +Rename the config.php.sample file to config.php, then open the config.php file with a plain text editor such as Notepad. +The first thing to do is to get your database login information right. +The information is stored using php's define() function. To change these values correctly, only update the second parameter of the function. For example: - define('SM_DB_USER', 'db_user'); + define('PSM_DB_USER', 'db_user'); To change your username you should ONLY change the 'db\_user' part. Do NOT remove the quotes around your username as that will result in an error. +If you do not feel comfortable doing this, skip this step and the install script will generate it for you. ### 2. Upload files The next step is to get your files onto your webserver where you can reach them. -You can rename the folder of the server monitor without trouble, but if you change the structure please make sure -to update the settings in the config.php file. +You can rename the folder of the server monitor without trouble. ### 3. Run install.php -Once your database login information is correct, you can run the install.php script located in the root dir. -This script will create all the database tables you will need. -After running the install.php script you can remove it. +You can now run the install.php script located in the root dir. ### 4. Configure your installation Open the main page of the server monitor, by simply calling index.php. In the menu on the top find "config", it will open a page where you can change the necessary information for your tool. -### 5. [optional] Add a cronjob + +## UPGRADE + +### From 2.0 + +The structure of the project has changed quite a bit since 2.0, but if you have not made any local changes the upgrade is quite easy. +The best thing to do is to replace all your current files with the new release, except for the config.inc.php file. +The config file has actually been renamed since 2.0, but if you keep it there while upgrading the install script will use it to prefill your database information. + + * Replace all files except(!) config.inc.php + * Navigate to install.php + * Follow the steps + * Remove the old config.inc.php file + + +## Security + +By default the PHP Server Monitor does not (yet) come with any security methods. After uploading these files to +your public html folder these will be visible to everyone on the web. It is recommended to put a password +on this folder to prevent other people from playing with your tool. An example .htaccess login script can +be found in the example/ dir. To create your own username and password for the .htpasswd file, see + + + +## Setting up a cronjob In order to keep the server monitor up to date, the monitor.php file has to run regularly. If you're running this on a linux machine, the easiest way is to add a cronjob. @@ -112,15 +128,13 @@ If it is your own server or you have shell access and permission to open the cro As you can see, this line will run the status.cron.php script every 15 minutes. Change the line to suit your needs. If you do not have shell access, ask your web hosting provider to set it up for you. -### 6. Voila! - ## CUSTOMIZING ### Language The server monitor uses language files. That means that any regular text you see on the screen can easily be -changed without having to dig through the code. These language files are stored in the directory "lang". +changed without having to dig through the code. These language files are stored in the directory "src/lang". The language that's being used by the monitor is defined in the config table. If you like you can make changes to the language file or even add a new one. @@ -148,12 +162,12 @@ The second part is the actual message. There are a few variables you can use in To add a new language, follow these steps: - * Create a new file in the directory "lang" named "mylanguage.lang.php". + * Create a new file in the directory "src/lang" named "mylanguage.lang.php". * Copy the contents of the file "en.lang.php" to your new file. * Your new language should now be available on the config page. * Translate the English stuff to your own language. * Send a copy to pep[at]neanderthal-technology.com so I can add it to the next release :) - * Or, send me a pull request on github. + * Or, send me a pull request on github (https://github.com/phpservermon/phpservermon). ## CREDITS From 947923c5d62bfdec002b3f039fabe73c9f81d1a7 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Sat, 8 Feb 2014 20:14:49 +0100 Subject: [PATCH 25/31] Adding regex support to search for patterns in the website body, thanks to Paul Feakins. --- CHANGELOG | 1 + README.md | 7 ++----- cron/status.cron.php | 2 +- src/lang/br.lang.php | 1 + src/lang/de.lang.php | 1 + src/lang/en.lang.php | 1 + src/lang/fr.lang.php | 1 + src/lang/kr.lang.php | 1 + src/lang/nl.lang.php | 1 + src/psm/Module/Servers.class.php | 4 ++++ src/psm/Util/Install/Queries.class.php | 3 +++ src/psm/Util/Updater/Status.class.php | 14 +++++++++++--- src/templates/servers.tpl.html | 6 ++++++ 13 files changed, 34 insertions(+), 9 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 54fa6ddb..f51b4c51 100755 --- a/CHANGELOG +++ b/CHANGELOG @@ -6,6 +6,7 @@ - Merged PHP Server Monitor Plus project by Luiz Alberto S. Ribeiro (https://github.com/madeinnordeste/PHP-Server-Monitor-Plus). -- New layout (thanks to twitter bootstrap) - New install module. +- Regex search on website has been added by Paul Feakins. - Support for mosms provider by Andreas Ek. - Support for Textmarketer provider by Perri Vardy-Mason. - Language files are now automatically detected, instead of a hardcoded list. diff --git a/README.md b/README.md index e3767f76..057fb35c 100755 --- a/README.md +++ b/README.md @@ -17,14 +17,11 @@ whether it is a "service" or a "website": * Website - The previous version only tried to establish a connection to the server on port 80. If you are running multiple - websites on 1 machine, there was no proper way to check each website for possible errors. Also it was impossible to make - sure your site was really up and running, all you knew was that the server was still online. - This function takes care of that. You can enter a link to a website (for example ), it will use cURL to open the website and check the HTTP status code (see for details). If the HTTP status code is in the 4xx range, it means an error occurred and the website is not accessible to the public. - In that case the script will return a "status offline", and will start sending out notifications. + You can also set a regular expression to match certain content on the page itself. If the regular expression returns no matches, the website is considered down. + In both cases the script will return a "status offline", and will start sending out notifications. Each server has it's own settings regarding notification. You can choose for email notification or text message (SMS). diff --git a/cron/status.cron.php b/cron/status.cron.php index d388db2c..9bd43e3a 100755 --- a/cron/status.cron.php +++ b/cron/status.cron.php @@ -32,7 +32,7 @@ require_once dirname(__FILE__) . '/../src/bootstrap.php'; $servers = $db->select( PSM_DB_PREFIX.'servers', array('active' => 'yes'), - array('server_id', 'ip', 'port', 'label', 'type', 'status', 'active', 'email', 'sms') + array('server_id', 'ip', 'port', 'label', 'type', 'pattern', 'status', 'active', 'email', 'sms') ); $updater = new \psm\Util\Updater\Status(); diff --git a/src/lang/br.lang.php b/src/lang/br.lang.php index 8885ef36..9a440a48 100755 --- a/src/lang/br.lang.php +++ b/src/lang/br.lang.php @@ -71,6 +71,7 @@ $sm_lang = array( 'domain' => 'Domínio/IP', 'port' => 'Porta', 'type' => 'Tipo', + 'pattern' => 'Search string/pattern', 'last_check' => 'Última verificação', 'last_online' => 'Última vez online', 'monitoring' => 'Monitoramento', diff --git a/src/lang/de.lang.php b/src/lang/de.lang.php index b8cb1f74..1b610e9d 100755 --- a/src/lang/de.lang.php +++ b/src/lang/de.lang.php @@ -71,6 +71,7 @@ $sm_lang = array( 'domain' => 'Domain/IP', 'port' => 'Port', 'type' => 'Type', + 'pattern' => 'Search string/pattern', 'last_check' => 'Letzter Check', 'last_online' => 'Letztes mal Online', 'monitoring' => 'Monitoring', diff --git a/src/lang/en.lang.php b/src/lang/en.lang.php index c1ea45be..b2c3cb07 100755 --- a/src/lang/en.lang.php +++ b/src/lang/en.lang.php @@ -71,6 +71,7 @@ $sm_lang = array( 'domain' => 'Domain/IP', 'port' => 'Port', 'type' => 'Type', + 'pattern' => 'Search string/pattern', 'last_check' => 'Last check', 'last_online' => 'Last online', 'monitoring' => 'Monitoring', diff --git a/src/lang/fr.lang.php b/src/lang/fr.lang.php index 02999319..767e25a7 100755 --- a/src/lang/fr.lang.php +++ b/src/lang/fr.lang.php @@ -71,6 +71,7 @@ $sm_lang = array( 'domain' => 'Domaine/IP', 'port' => 'Port', 'type' => 'Type', + 'pattern' => 'Search string/pattern', 'last_check' => 'Dernière vérification', 'last_online' => 'Dernière fois OK', 'monitoring' => 'Supervision', diff --git a/src/lang/kr.lang.php b/src/lang/kr.lang.php index 9d652df1..2c931de7 100755 --- a/src/lang/kr.lang.php +++ b/src/lang/kr.lang.php @@ -72,6 +72,7 @@ $sm_lang = array( 'domain' => 'Domain/IP', 'port' => 'Port', 'type' => 'Type', + 'pattern' => 'Search string/regex', 'last_check' => '최근체크', 'last_online' => '최근접속', 'monitoring' => '확인중', diff --git a/src/lang/nl.lang.php b/src/lang/nl.lang.php index 463ff6aa..dc227a65 100755 --- a/src/lang/nl.lang.php +++ b/src/lang/nl.lang.php @@ -71,6 +71,7 @@ $sm_lang = array( 'domain' => 'Domein/IP', 'port' => 'Poort', 'type' => 'Type', + 'pattern' => 'Zoek voor tekst/regex', 'last_check' => 'Laatst gecontroleerd', 'last_online' => 'Laatst online', 'monitoring' => 'Monitoring', diff --git a/src/psm/Module/Servers.class.php b/src/psm/Module/Servers.class.php index b12fc519..d19038f5 100755 --- a/src/psm/Module/Servers.class.php +++ b/src/psm/Module/Servers.class.php @@ -56,6 +56,7 @@ class Servers extends AbstractModule { '`port`, '. '`type`, '. '`label`, '. + '`pattern`, '. '`status`, '. '`error`, '. '`rtime`, '. @@ -134,6 +135,7 @@ class Servers extends AbstractModule { 'edit_value_label' => $edit_server['label'], 'edit_value_ip' => $edit_server['ip'], 'edit_value_port' => $edit_server['port'], + 'edit_value_pattern' => $edit_server['pattern'], 'edit_type_selected_' . $edit_server['type'] => 'selected="selected"', 'edit_active_selected_' . $edit_server['active'] => 'selected="selected"', 'edit_email_selected_' . $edit_server['email'] => 'selected="selected"', @@ -163,6 +165,7 @@ class Servers extends AbstractModule { 'port' => strip_tags($_POST['port']), // @todo validate the following values 'type' => $_POST['type'], + 'pattern' => $_POST['pattern'], 'active' => $_POST['active'], 'email' => $_POST['email'], 'sms' => $_POST['sms'], @@ -214,6 +217,7 @@ class Servers extends AbstractModule { 'label_domain' => psm_get_lang('servers', 'domain'), 'label_port' => psm_get_lang('servers', 'port'), 'label_type' => psm_get_lang('servers', 'type'), + 'label_pattern' => psm_get_lang('servers', 'pattern'), 'label_last_check' => psm_get_lang('servers', 'last_check'), 'label_rtime' => psm_get_lang('servers', 'rtime'), 'label_last_online' => psm_get_lang('servers', 'last_online'), diff --git a/src/psm/Util/Install/Queries.class.php b/src/psm/Util/Install/Queries.class.php index 4ce77c93..4c231881 100644 --- a/src/psm/Util/Install/Queries.class.php +++ b/src/psm/Util/Install/Queries.class.php @@ -61,6 +61,7 @@ class Queries { `port` int(5) NOT NULL, `label` varchar(255) NOT NULL, `type` enum('service','website') NOT NULL default 'service', + `pattern` varchar(255) NOT NULL, `status` enum('on','off') NOT NULL default 'on', `error` varchar(255) NULL, `rtime` FLOAT(9, 7) NULL, @@ -121,6 +122,8 @@ class Queries { $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `rtime` `rtime` FLOAT( 9, 7 ) NULL;"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `last_online` `last_online` DATETIME NULL;"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `last_check` `last_check` DATETIME NULL;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `pattern` VARCHAR( 255 ) NOT NULL AFTER `type`;"; + } $queries[] = "UPDATE `" . PSM_DB_PREFIX . "config` SET `value` = '{$version}' WHERE `key` = 'version';"; diff --git a/src/psm/Util/Updater/Status.class.php b/src/psm/Util/Updater/Status.class.php index 4d6357bb..38cc671a 100755 --- a/src/psm/Util/Updater/Status.class.php +++ b/src/psm/Util/Updater/Status.class.php @@ -130,10 +130,11 @@ class Status { curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'); // We're only interested in the header, because that should tell us plenty! + // unless we have a pattern to search for! curl_setopt($ch, CURLOPT_HEADER, true); - curl_setopt($ch, CURLOPT_NOBODY, true); + curl_setopt($ch, CURLOPT_NOBODY, ($this->server['pattern'] != '' ? false : true)); - $headers = curl_exec ($ch); + $curl_result = curl_exec ($ch); curl_close ($ch); $time = explode(" ", microtime()); @@ -141,7 +142,7 @@ class Status { $this->rtime = ($endtime - $starttime); // the first line would be the status code.. - $status_code = strtok($headers, "\r\n"); + $status_code = strtok($curl_result, "\r\n"); // keep it general // $code[1][0] = status code // $code[2][0] = name of status code @@ -163,6 +164,13 @@ class Status { $this->status_new = 'on'; } } + if($this->server['pattern'] != '') { + // Check to see if the pattern was found. + if(!preg_match("/{$this->server['pattern']}/i", $curl_result)) { + $this->server['error'] = $this->error = 'Pattern not found.'; + $this->status_new = 'off'; + } + } // check if server is available and rerun if asked. if($this->status_new == 'off' && $run < $max_runs) { diff --git a/src/templates/servers.tpl.html b/src/templates/servers.tpl.html index 0cf7c77b..49db8980 100755 --- a/src/templates/servers.tpl.html +++ b/src/templates/servers.tpl.html @@ -91,6 +91,12 @@
+
+ +
+ +
+
From 10f9d666d2f98a4cb764de19f7f9db0275eee402 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Sat, 8 Feb 2014 21:03:10 +0100 Subject: [PATCH 26/31] adding psm_update_conf() function --- src/includes/functions.inc.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/includes/functions.inc.php b/src/includes/functions.inc.php index 774ac32f..2394db59 100755 --- a/src/includes/functions.inc.php +++ b/src/includes/functions.inc.php @@ -125,6 +125,21 @@ function psm_load_conf() { } } +/** + * Update a config setting + * @global \psm\Service\Database $db + * @param string $key + * @param string $value + */ +function psm_update_conf($key, $value) { + global $db; + + $db->save( + PSM_DB_PREFIX.'config', + array('value' => $value), + array('key' => $key) + ); +} ############################################### # From 17c7f3b3c32d2ca0a8da780344a259de48fa93c3 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Sat, 8 Feb 2014 21:16:41 +0100 Subject: [PATCH 27/31] issue #9: adding check to prevent cronjob from running multiple times --- CHANGELOG | 1 + README.md | 3 +++ cron/status.cron.php | 11 +++++++++++ src/psm/Util/Install/Queries.class.php | 6 +++++- 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index f51b4c51..06f2226f 100755 --- a/CHANGELOG +++ b/CHANGELOG @@ -14,6 +14,7 @@ - Adding Portuguese / Brazilian language file (thanks to Luiz Alberto S. Ribeiro). - Large status page by Michael Greenhill. - New config file (see install instructions in README). +- Cronjob will be prevented from running multiple times at the same time (with a 10 mins timeout). ######################### # diff --git a/README.md b/README.md index 057fb35c..f0c93957 100755 --- a/README.md +++ b/README.md @@ -125,6 +125,9 @@ If it is your own server or you have shell access and permission to open the cro As you can see, this line will run the status.cron.php script every 15 minutes. Change the line to suit your needs. If you do not have shell access, ask your web hosting provider to set it up for you. +The update script has been designed to prevent itself from running multiple times. It has a maximum timeout of 10 minutes. +After that the script is assumed dead and the cronjob will run again. + ## CUSTOMIZING diff --git a/cron/status.cron.php b/cron/status.cron.php index 9bd43e3a..c059304f 100755 --- a/cron/status.cron.php +++ b/cron/status.cron.php @@ -28,6 +28,15 @@ // include main configuration and functionality require_once dirname(__FILE__) . '/../src/bootstrap.php'; +// prevent cron from running twice at the same time +// however if the cron has been running for 10 mins, we'll assume it died and run anyway +$time = time(); +if(psm_get_conf('cron_running') == 1 && ($time - psm_get_conf('cron_running_time') < 600)) { + die('Cron is already running. Exiting.'); +} +psm_update_conf('cron_running', 1); +psm_update_conf('cron_running_time', $time); + // get the active servers from database $servers = $db->select( PSM_DB_PREFIX.'servers', @@ -70,4 +79,6 @@ foreach ($servers as $server) { ); } +psm_update_conf('cron_running', 0); + ?> \ No newline at end of file diff --git a/src/psm/Util/Install/Queries.class.php b/src/psm/Util/Install/Queries.class.php index 4c231881..2729b170 100644 --- a/src/psm/Util/Install/Queries.class.php +++ b/src/psm/Util/Install/Queries.class.php @@ -110,13 +110,17 @@ class Queries { ('version', '{$version}'), ('auto_refresh_servers', '0'), ('show_update', '1'), - ('last_update_check', '0');"; + ('last_update_check', '0'), + ('cron_running', '0'), + ('cron_running_time', '0');"; } else { if(version_compare($version_from, '2.1.0', '<')) { // 2.0 upgrade $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "config` DROP `config_id`;"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "config` ADD PRIMARY KEY ( `key` );"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "config` DROP INDEX `key`;"; + $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "config` (`key`, `value`) VALUES ('cron_running', '0');"; + $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "config` (`key`, `value`) VALUES ('cron_running_time', '0');"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `error` `error` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL;"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `rtime` `rtime` FLOAT( 9, 7 ) NULL;"; From d6ff7bfbda2241c8cab5144601b4a1fef1a1bf00 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Sat, 8 Feb 2014 21:53:50 +0100 Subject: [PATCH 28/31] fixing logging status records --- src/psm/Util/Updater/Status.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/psm/Util/Updater/Status.class.php b/src/psm/Util/Updater/Status.class.php index 38cc671a..0b6b0c94 100755 --- a/src/psm/Util/Updater/Status.class.php +++ b/src/psm/Util/Updater/Status.class.php @@ -213,10 +213,6 @@ class Status { break; } - if(!$notify) { - return false; - } - // first add to log (we use the same text as the SMS message because its short..) if(psm_get_conf('log_status')) { psm_add_log( @@ -226,6 +222,10 @@ class Status { ); } + if(!$notify) { + return false; + } + // check if email is enabled for this server if(psm_get_conf('email_status') && $this->server['email'] == 'yes') { // send email From 377e3e485a3039d4dc9d034a09fcfe3e2062e609 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Sat, 8 Feb 2014 21:56:15 +0100 Subject: [PATCH 29/31] fixing status label in top menu --- src/lang/br.lang.php | 1 + src/lang/de.lang.php | 2 ++ src/lang/en.lang.php | 1 + src/lang/fr.lang.php | 1 + src/lang/kr.lang.php | 1 + src/lang/nl.lang.php | 1 + src/psm/Module/AbstractModule.class.php | 1 + src/templates/main.tpl.html | 4 ++-- 8 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lang/br.lang.php b/src/lang/br.lang.php index 9a440a48..2670cd4d 100755 --- a/src/lang/br.lang.php +++ b/src/lang/br.lang.php @@ -31,6 +31,7 @@ $sm_lang = array( 'servers' => 'Servidores', 'users' => 'Usuários', 'log' => 'Log', + 'status' => 'Status', 'update' => 'Atualização', 'config' => 'Configuração', 'help' => 'Ajuda', diff --git a/src/lang/de.lang.php b/src/lang/de.lang.php index 1b610e9d..ac8fe921 100755 --- a/src/lang/de.lang.php +++ b/src/lang/de.lang.php @@ -31,6 +31,7 @@ $sm_lang = array( 'servers' => 'Server', 'users' => 'Benutzer', 'log' => 'Log', + 'status' => 'Status', 'update' => 'Updates', 'config' => 'Einstellungen', 'help' => 'Hilfe', @@ -89,6 +90,7 @@ $sm_lang = array( 'language_fr' => 'French', 'language_de' => 'German', 'language_kr' => 'Korean', + 'language_br' => 'Portuguese - Brazilian', 'show_update' => 'Updats wöchentlich prüfen?', 'email_status' => 'Email senden erlauben?', 'email_from_email' => 'Email from address', diff --git a/src/lang/en.lang.php b/src/lang/en.lang.php index b2c3cb07..f54896ca 100755 --- a/src/lang/en.lang.php +++ b/src/lang/en.lang.php @@ -31,6 +31,7 @@ $sm_lang = array( 'servers' => 'Servers', 'users' => 'Users', 'log' => 'Log', + 'status' => 'Status', 'update' => 'Update', 'config' => 'Config', 'help' => 'Help', diff --git a/src/lang/fr.lang.php b/src/lang/fr.lang.php index 767e25a7..71915061 100755 --- a/src/lang/fr.lang.php +++ b/src/lang/fr.lang.php @@ -31,6 +31,7 @@ $sm_lang = array( 'servers' => 'Serveurs', 'users' => 'Utilisateurs', 'log' => 'Evenements', + 'status' => 'Status', 'update' => 'Mise à jour', 'config' => 'Configuration', 'help' => 'Aide', diff --git a/src/lang/kr.lang.php b/src/lang/kr.lang.php index 2c931de7..793a085c 100755 --- a/src/lang/kr.lang.php +++ b/src/lang/kr.lang.php @@ -32,6 +32,7 @@ $sm_lang = array( 'servers' => '서버목록', 'users' => '사용자', 'log' => '로그', + 'status' => 'Status', 'update' => '업데이트', 'config' => '설정', 'help' => '도움말', diff --git a/src/lang/nl.lang.php b/src/lang/nl.lang.php index dc227a65..3c786697 100755 --- a/src/lang/nl.lang.php +++ b/src/lang/nl.lang.php @@ -31,6 +31,7 @@ $sm_lang = array( 'servers' => 'Servers', 'users' => 'Gebruikers', 'log' => 'Log', + 'status' => 'Status', 'update' => 'Update', 'config' => 'Config', 'help' => 'Help', diff --git a/src/psm/Module/AbstractModule.class.php b/src/psm/Module/AbstractModule.class.php index 15c46119..ef1a5aba 100755 --- a/src/psm/Module/AbstractModule.class.php +++ b/src/psm/Module/AbstractModule.class.php @@ -211,6 +211,7 @@ abstract class AbstractModule implements ModuleInterface { 'label_servers' => psm_get_lang('system', 'servers'), 'label_users' => psm_get_lang('system', 'users'), 'label_log' => psm_get_lang('system', 'log'), + 'label_status' => psm_get_lang('system', 'status'), 'label_config' => psm_get_lang('system', 'config'), 'label_update' => psm_get_lang('system', 'update'), 'label_help' => psm_get_lang('system', 'help'), diff --git a/src/templates/main.tpl.html b/src/templates/main.tpl.html index 020ede6b..dfa1fdfc 100755 --- a/src/templates/main.tpl.html +++ b/src/templates/main.tpl.html @@ -78,7 +78,7 @@ {label_log}