. * * @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://www.phpservermonitor.org/ * @since phpservermon 2.2.0 **/ namespace psm\Util\Updater; use psm\Service\Database; use psm\Service\User; /** * Run an update on all servers. * * If you provide a User service instance it will be * restricted to that user only. */ class Autorun { /** * Database service * @var \psm\Service\Database $db */ protected $db; /** * User service * @var \psm\Service\User $user */ protected $user; function __construct(Database $db) { $this->db = $db; } /** * Go :-) */ public function run() { // check if we need to restrict the servers to a certain user $sql_join = ''; if($this->user != null && $this->user->getUserLevel() > PSM_USER_ADMIN) { // restrict by user_id $sql_join = "JOIN `".PSM_DB_PREFIX."users_servers` AS `us` ON ( `us`.`user_id`={$this->user->getUserId()} AND `us`.`server_id`=`s`.`server_id` )"; } $sql = "SELECT `s`.`server_id`,`s`.`ip`,`s`.`port`,`s`.`label`,`s`.`type`,`s`.`pattern`,`s`.`status`,`s`.`active`,`s`.`email`,`s`.`sms` FROM `".PSM_DB_PREFIX."servers` AS `s` {$sql_join} WHERE `active`='yes' "; $servers = $this->db->query($sql); $updater = new StatusUpdater($this->db); $notifier = new StatusNotifier($this->db); $archiver = new StatusArchiver($this->db); $cleanup_date = new \DateTime(); $cleanup_date->modify('-1 month'); foreach($servers as $server) { $status_old = ($server['status'] == 'on') ? true : false; $status_new = $updater->update($server['server_id']); // notify the nerds if applicable $notifier->notify($server['server_id'], $status_old, $status_new); // clean-up time!! archive all records older than 1 month $archiver->archive($server['server_id'], $cleanup_date); } } /** * Set a user to restrict the servers being updated * @param \psm\Service\User $user */ public function setUser(User $user) { $this->user = $user; } }