Merge branch '201410_log-users' of https://github.com/davyrolink/phpservermon into davyrolink-201410_log-users
# Conflicts: # src/includes/psmconfig.inc.php # src/psm/Util/Install/Installer.phppull/307/head
						commit
						c811876c89
					
				| 
						 | 
				
			
			@ -221,18 +221,38 @@ 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,
 | 
			
		||||
        )
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,14 +60,6 @@ class LogController extends AbstractServerController {
 | 
			
		|||
		);
 | 
			
		||||
		$log_types = array('status', 'email', 'sms', 'pushover');
 | 
			
		||||
 | 
			
		||||
		// get users
 | 
			
		||||
		$users = $this->db->select(PSM_DB_PREFIX.'users', null, array('user_id','name'));
 | 
			
		||||
 | 
			
		||||
		$users_labels = array();
 | 
			
		||||
		foreach ($users as $user) {
 | 
			
		||||
			$users_labels[$user['user_id']] = $user['name'];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		foreach($log_types as $key) {
 | 
			
		||||
			$records = $this->getEntries($key);
 | 
			
		||||
			$log_count = count($records);
 | 
			
		||||
| 
						 | 
				
			
			@ -95,15 +87,12 @@ class LogController extends AbstractServerController {
 | 
			
		|||
				$record['datetime_format'] = psm_date($record['datetime']);
 | 
			
		||||
 | 
			
		||||
				// fix up user list
 | 
			
		||||
				if(!empty($record['user_id'])) {
 | 
			
		||||
                $users = $this->getLogUsers($record['log_id']);
 | 
			
		||||
				if(!empty($users)) {
 | 
			
		||||
					$names = array();
 | 
			
		||||
					$users = explode(',', $record['user_id']);
 | 
			
		||||
					foreach($users as $user_id) {
 | 
			
		||||
						if(isset($users_labels[$user_id])) {
 | 
			
		||||
							$names[] = $users_labels[$user_id];
 | 
			
		||||
					foreach($users as $user) {
 | 
			
		||||
                        $names[] = $user['name'];
 | 
			
		||||
					}
 | 
			
		||||
					}
 | 
			
		||||
					sort($names);
 | 
			
		||||
					$record['users'] = implode('<br/>', $names);
 | 
			
		||||
					$record['user_list'] = implode(' • ', $names);
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -135,10 +124,10 @@ class LogController extends AbstractServerController {
 | 
			
		|||
				'`servers`.`ip`, '.
 | 
			
		||||
				'`servers`.`port`, '.
 | 
			
		||||
				'`servers`.`type` AS server_type, '.
 | 
			
		||||
				'`log`.`log_id`, '.
 | 
			
		||||
				'`log`.`type`, '.
 | 
			
		||||
				'`log`.`message`, '.
 | 
			
		||||
				'`log`.`datetime`, '.
 | 
			
		||||
				'`log`.`user_id` '.
 | 
			
		||||
				'`log`.`datetime` '.
 | 
			
		||||
			'FROM `'.PSM_DB_PREFIX.'log` AS `log` '.
 | 
			
		||||
			'JOIN `'.PSM_DB_PREFIX.'servers` AS `servers` ON (`servers`.`server_id`=`log`.`server_id`) '.
 | 
			
		||||
			$sql_join .
 | 
			
		||||
| 
						 | 
				
			
			@ -148,4 +137,22 @@ class LogController extends AbstractServerController {
 | 
			
		|||
		);
 | 
			
		||||
		return $entries;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get all the user entries for a specific $log_id
 | 
			
		||||
     *
 | 
			
		||||
     * @param $log_id
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    protected function getLogUsers($log_id) {
 | 
			
		||||
        return $this->db->query(
 | 
			
		||||
            "SELECT
 | 
			
		||||
                u.`user_id`,
 | 
			
		||||
                u.`name`
 | 
			
		||||
            FROM `" . PSM_DB_PREFIX . "log_users` AS lu
 | 
			
		||||
            LEFT JOIN `" . PSM_DB_PREFIX . "users` AS u ON lu.`user_id` = u.`user_id`
 | 
			
		||||
            WHERE lu.`log_id` = " . (int)$log_id . "
 | 
			
		||||
            ORDER BY u.`name` ASC"
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -206,9 +206,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(500) NOT NULL,
 | 
			
		||||
| 
						 | 
				
			
			@ -440,5 +444,29 @@ class Installer {
 | 
			
		|||
		$queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `website_username` varchar(255) NULL, ADD `website_password` varchar(255) NULL AFTER `website_username`;";
 | 
			
		||||
 | 
			
		||||
		$this->execSQL($queries);
 | 
			
		||||
 | 
			
		||||
    // Create log_users table
 | 
			
		||||
        $this->execSQL("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;");
 | 
			
		||||
 | 
			
		||||
        // Migrate the data
 | 
			
		||||
        $logs = $this->db->select(PSM_DB_PREFIX . 'log', null, array('log_id', 'user_id'));
 | 
			
		||||
        foreach ($logs as $log) {
 | 
			
		||||
            // Validation
 | 
			
		||||
            if (empty($log['user_id']) || trim($log['user_id']) == '') {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Insert into new table
 | 
			
		||||
            foreach (explode(',', $log['user_id']) as $user_id) {
 | 
			
		||||
                psm_add_log_user($log['log_id'], $user_id);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Drop old user_id('s) column
 | 
			
		||||
        $this->execSQL("ALTER TABLE `" . PSM_DB_PREFIX . "log` DROP COLUMN `user_id`;");
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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	= utf8_decode(psm_parse_msg($this->status_new, 'email_subject', $this->server));
 | 
			
		||||
| 
						 | 
				
			
			@ -209,19 +207,21 @@ class StatusNotifier {
 | 
			
		|||
		$mail->Body		= utf8_decode($body);
 | 
			
		||||
		$mail->AltBody	= str_replace('<br/>', "\n", $body);
 | 
			
		||||
 | 
			
		||||
        if(psm_get_conf('log_email')) {
 | 
			
		||||
            $log_id = psm_add_log($this->server_id, 'email', $body);
 | 
			
		||||
   	    }
 | 
			
		||||
 | 
			
		||||
		// go through empl
 | 
			
		||||
	    foreach ($users as $user) {
 | 
			
		||||
            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,9 +231,21 @@ class StatusNotifier {
 | 
			
		|||
	 * @return boolean
 | 
			
		||||
	 */
 | 
			
		||||
	protected function notifyByPushover($users) {
 | 
			
		||||
		$userlist = array();
 | 
			
		||||
		$pushover = psm_build_pushover();
 | 
			
		||||
        // Remove users that have no pushover_key
 | 
			
		||||
        foreach($users as $k => $user) {
 | 
			
		||||
            if (trim($user['pushover_key']) == '') {
 | 
			
		||||
                unset($users[$k]);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 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 {
 | 
			
		||||
| 
						 | 
				
			
			@ -241,28 +253,29 @@ class StatusNotifier {
 | 
			
		|||
            $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);
 | 
			
		||||
 | 
			
		||||
		$pushover->setTitle(psm_parse_msg($this->status_new, 'pushover_title', $this->server));
 | 
			
		||||
		$pushover->setMessage(str_replace('<br/>', "\n", $message));
 | 
			
		||||
		$pushover->setUrl(psm_build_url());
 | 
			
		||||
		$pushover->setUrlTitle(psm_get_lang('system', 'title'));
 | 
			
		||||
 | 
			
		||||
	    foreach($users as $user) {
 | 
			
		||||
			if(trim($user['pushover_key']) == '') {
 | 
			
		||||
				continue;
 | 
			
		||||
        // Log
 | 
			
		||||
        if(psm_get_conf('log_pushover')) {
 | 
			
		||||
            $log_id = psm_add_log($this->server_id, 'pushover', $message);
 | 
			
		||||
   	    }
 | 
			
		||||
			$userlist[] = $user['user_id'];
 | 
			
		||||
 | 
			
		||||
	    foreach($users as $user) {
 | 
			
		||||
            // 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 +290,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')) {
 | 
			
		||||
            $log_id = psm_add_log($this->server_id, 'sms', $message);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// add all users to the recipients list
 | 
			
		||||
		foreach ($users as $user) {
 | 
			
		||||
			$userlist[] = $user['user_id'];
 | 
			
		||||
			$sms->addRecipients($user['mobile']);
 | 
			
		||||
            // Log
 | 
			
		||||
            if(!empty($log_id)) {
 | 
			
		||||
       	    	psm_add_log_user($log_id, $user['user_id']);
 | 
			
		||||
       	    }
 | 
			
		||||
 | 
			
		||||
		$message = psm_parse_msg($this->status_new, 'sms', $this->server);
 | 
			
		||||
			$sms->addRecipients($user['mobile']);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// 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;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue