diff --git a/src/includes/functions.inc.php b/src/includes/functions.inc.php
index e888a940..7b7a9ff3 100644
--- a/src/includes/functions.inc.php
+++ b/src/includes/functions.inc.php
@@ -199,22 +199,42 @@ function psm_update_conf($key, $value) {
* everything should have been handled when calling this function
*
* @param string $server_id
+ * @param string $type
* @param string $message
+ *
+ * @return int log_id
*/
-function psm_add_log($server_id, $type, $message, $user_id = null) {
+function psm_add_log($server_id, $type, $message) {
global $db;
- $db->save(
+ return $db->save(
PSM_DB_PREFIX.'log',
array(
'server_id' => $server_id,
'type' => $type,
'message' => $message,
- 'user_id' => ($user_id === null) ? '' : $user_id,
)
);
}
+/**
+ * This function just adds a user to the log_users table.
+ *
+ * @param $log_id
+ * @param $user_id
+ */
+function psm_add_log_user($log_id, $user_id) {
+ global $db;
+
+ $db->save(
+ PSM_DB_PREFIX . 'log_users',
+ array(
+ 'log_id' => $log_id,
+ 'user_id' => $user_id,
+ )
+ );
+}
+
/**
* This function adds the result of a check to the uptime table for logging purposes.
*
diff --git a/src/psm/Util/Install/Installer.class.php b/src/psm/Util/Install/Installer.class.php
index 30e3ad25..7fb96507 100644
--- a/src/psm/Util/Install/Installer.class.php
+++ b/src/psm/Util/Install/Installer.class.php
@@ -204,9 +204,13 @@ class Installer {
`type` enum('status','email','sms','pushover') 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 . 'log_users' => "CREATE TABLE `" . PSM_DB_PREFIX . "log_users` (
+ `log_id` int(11) UNSIGNED NOT NULL ,
+ `user_id` int(11) UNSIGNED NOT NULL ,
+ PRIMARY KEY (`log_id`, `user_id`),
+ ) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
PSM_DB_PREFIX . 'servers' => "CREATE TABLE `" . PSM_DB_PREFIX . "servers` (
`server_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`ip` varchar(100) NOT NULL,
diff --git a/src/psm/Util/Server/Updater/StatusNotifier.class.php b/src/psm/Util/Server/Updater/StatusNotifier.class.php
index 154b4c3e..1460b907 100644
--- a/src/psm/Util/Server/Updater/StatusNotifier.class.php
+++ b/src/psm/Util/Server/Updater/StatusNotifier.class.php
@@ -198,8 +198,6 @@ class StatusNotifier {
* @return boolean
*/
protected function notifyByEmail($users) {
- $userlist = array();
-
// build mail object with some default values
$mail = psm_build_mail();
$mail->Subject = psm_parse_msg($this->status_new, 'email_subject', $this->server);
@@ -209,19 +207,23 @@ class StatusNotifier {
$mail->Body = $body;
$mail->AltBody = str_replace('
', "\n", $body);
+ // Log
+ if(psm_get_conf('log_email')) {
+ $log_id = psm_add_log($this->server_id, 'email', $body);
+ }
+
// go through empl
foreach ($users as $user) {
+ // Log
+ if(!empty($log_id)) {
+ psm_add_log_user($log_id, $user['user_id']);
+ }
+
// we sent a seperate email to every single user.
- $userlist[] = $user['user_id'];
$mail->AddAddress($user['email'], $user['name']);
$mail->Send();
$mail->ClearAddresses();
}
-
- if(psm_get_conf('log_email')) {
- // save to log
- psm_add_log($this->server_id, 'email', $body, implode(',', $userlist));
- }
}
/**
@@ -231,38 +233,51 @@ class StatusNotifier {
* @return boolean
*/
protected function notifyByPushover($users) {
- $userlist = array();
- $pushover = psm_build_pushover();
+ // Clean-up users
+ foreach($users as $k => $user) {
+ if (trim($user['pushover_key']) == '') {
+ unset($users[$k]);
+ }
+ }
- if($this->status_new === true) {
- $pushover->setPriority(0);
- } else {
- $pushover->setPriority(2);
- $pushover->setRetry(300); //Used with Priority = 2; Pushover will resend the notification every 60 seconds until the user accepts.
- $pushover->setExpire(3600); //Used with Priority = 2; Pushover will resend the notification every 60 seconds for 3600 seconds. After that point, it stops sending notifications.
- }
- $message = psm_parse_msg($this->status_new, 'pushover_message', $this->server);
+ // Validation
+ if (empty($users)) {
+ return;
+ }
+ // Pushover
+ $message = psm_parse_msg($this->status_new, 'pushover_message', $this->server);
+ $pushover = psm_build_pushover();
+ if($this->status_new === true) {
+ $pushover->setPriority(0);
+ } else {
+ $pushover->setPriority(2);
+ $pushover->setRetry(300); //Used with Priority = 2; Pushover will resend the notification every 60 seconds until the user accepts.
+ $pushover->setExpire(3600); //Used with Priority = 2; Pushover will resend the notification every 60 seconds for 3600 seconds. After that point, it stops sending notifications.
+ }
$pushover->setTitle(psm_parse_msg($this->status_new, 'pushover_title', $this->server));
$pushover->setMessage(str_replace('
', "\n", $message));
$pushover->setUrl(psm_build_url());
$pushover->setUrlTitle(psm_get_lang('system', 'title'));
+ // Log
+ if(psm_get_conf('log_pushover')) {
+ $log_id = psm_add_log($this->server_id, 'pushover', $message);
+ }
+
foreach($users as $user) {
- if(trim($user['pushover_key']) == '') {
- continue;
- }
- $userlist[] = $user['user_id'];
+ // Log
+ if(!empty($log_id)) {
+ psm_add_log_user($log_id, $user['user_id']);
+ }
+
+ // Set recipient + send
$pushover->setUser($user['pushover_key']);
if($user['pushover_device'] != '') {
$pushover->setDevice($user['pushover_device']);
}
$pushover->send();
- }
-
- if(psm_get_conf('log_pushover')) {
- psm_add_log($this->server_id, 'pushover', $message, implode(',', $userlist));
- }
+ }
}
/**
@@ -277,24 +292,26 @@ class StatusNotifier {
return false;
}
- // we have to build an userlist for the log table..
- $userlist = array();
+ $message = psm_parse_msg($this->status_new, 'sms', $this->server);
+
+ // Log
+ if(psm_get_conf('log_sms')) {
+ psm_add_log($this->server_id, 'sms', $message);
+ }
// add all users to the recipients list
foreach ($users as $user) {
- $userlist[] = $user['user_id'];
+ // Log
+ if(!empty($log_id)) {
+ psm_add_log_user($log_id, $user['user_id']);
+ }
+
$sms->addRecipients($user['mobile']);
}
- $message = psm_parse_msg($this->status_new, 'sms', $this->server);
-
// Send sms
$result = $sms->sendSMS($message);
- if(psm_get_conf('log_sms')) {
- // save to log
- psm_add_log($this->server_id, 'sms', $message, implode(',', $userlist));
- }
return $result;
}