diff --git a/web/includes/Monitor.php b/web/includes/Monitor.php index 528a7046f..d6383c242 100644 --- a/web/includes/Monitor.php +++ b/web/includes/Monitor.php @@ -164,46 +164,46 @@ class Monitor extends ZM_Object { ); public function Control() { - if ( !property_exists($this, 'Control') ) { - if ( $this->ControlId() ) + if (!property_exists($this, 'Control')) { + if ($this->ControlId()) $this->{'Control'} = Control::find_one(array('Id'=>$this->{'ControlId'})); - if ( !(property_exists($this, 'Control') and $this->{'Control'}) ) + if (!(property_exists($this, 'Control') and $this->{'Control'})) $this->{'Control'} = new Control(); } return $this->{'Control'}; } public function Server() { - if ( !property_exists($this, 'Server') ) { - if ( $this->ServerId() ) + if (!property_exists($this, 'Server')) { + if ($this->ServerId()) $this->{'Server'} = Server::find_one(array('Id'=>$this->{'ServerId'})); - if ( !property_exists($this, 'Server') ) { + if (!property_exists($this, 'Server')) { $this->{'Server'} = new Server(); } } return $this->{'Server'}; } - public function __call($fn, array $args){ - if ( count($args) ) { - if ( is_array($this->defaults[$fn]) and $this->defaults[$fn]['type'] == 'set' ) { + public function __call($fn, array $args) { + if (count($args)) { + if (is_array($this->defaults[$fn]) and $this->defaults[$fn]['type'] == 'set') { $this->{$fn} = is_array($args[0]) ? implode(',', $args[0]) : $args[0]; } else { $this->{$fn} = $args[0]; } } - if ( property_exists($this, $fn) ) { + if (property_exists($this, $fn)) { return $this->{$fn}; - } else if ( array_key_exists($fn, $this->defaults) ) { + } else if (array_key_exists($fn, $this->defaults)) { if ( is_array($this->defaults[$fn]) ) { return $this->defaults[$fn]['default']; } return $this->defaults[$fn]; - } else if ( array_key_exists($fn, $this->status_fields) ) { + } else if (array_key_exists($fn, $this->status_fields)) { $sql = 'SELECT * FROM `Monitor_Status` WHERE `MonitorId`=?'; $row = dbFetchOne($sql, NULL, array($this->{'Id'})); - if ( !$row ) { + if (!$row) { Warning('Unable to load Monitor status record for Id='.$this->{'Id'}.' using '.$sql); return null; } else { @@ -212,10 +212,10 @@ class Monitor extends ZM_Object { } } return $this->{$fn}; - } else if ( array_key_exists($fn, $this->summary_fields) ) { + } else if (array_key_exists($fn, $this->summary_fields)) { $sql = 'SELECT * FROM `Event_Summaries` WHERE `MonitorId`=?'; $row = dbFetchOne($sql, NULL, array($this->{'Id'})); - if ( !$row ) { + if (!$row) { Warning('Unable to load Event Summary record for Id='.$this->{'Id'}.' using '.$sql); return null; } else { @@ -233,7 +233,6 @@ class Monitor extends ZM_Object { } public function getStreamSrc($args, $querySep='&') { - $streamSrc = $this->Server()->UrlToZMS( ZM_MIN_STREAMING_PORT ? ZM_MIN_STREAMING_PORT+$this->{'Id'} : @@ -241,8 +240,8 @@ class Monitor extends ZM_Object { $args['monitor'] = $this->{'Id'}; - if ( ZM_OPT_USE_AUTH ) { - if ( ZM_AUTH_RELAY == 'hashed' ) { + if (ZM_OPT_USE_AUTH) { + if (ZM_AUTH_RELAY == 'hashed') { $args['auth'] = generateAuthHash(ZM_AUTH_HASH_IPS); } elseif ( ZM_AUTH_RELAY == 'plain' ) { $args['user'] = $_SESSION['username']; @@ -251,24 +250,24 @@ class Monitor extends ZM_Object { $args['user'] = $_SESSION['username']; } } - if ( (!isset($args['mode'])) or ( $args['mode'] != 'single' ) ) { + if ((!isset($args['mode'])) or ($args['mode'] != 'single')) { $args['connkey'] = $this->connKey(); } - if ( ZM_RAND_STREAM ) { + if (ZM_RAND_STREAM) { $args['rand'] = time(); } # zms doesn't support width & height, so if no scale is set, default it - if ( ! isset($args['scale']) ) { - if ( isset($args['width']) and intval($args['width']) ) { + if (!isset($args['scale'])) { + if (isset($args['width']) and intval($args['width'])) { $args['scale'] = intval((100*intval($args['width']))/$this->ViewWidth()); - } else if ( isset($args['height']) and intval($args['height']) ) { + } else if (isset($args['height']) and intval($args['height'])) { $args['scale'] = intval((100*intval($args['height']))/$this->ViewHeight()); } } - if ( isset($args['width']) ) + if (isset($args['width'])) unset($args['width']); - if ( isset($args['height']) ) + if (isset($args['height'])) unset($args['height']); $streamSrc .= '?'.http_build_query($args, '', $querySep); @@ -284,21 +283,21 @@ class Monitor extends ZM_Object { } public function ViewWidth($new = null) { - if ( $new ) + if ($new) $this->{'Width'} = $new; $field = ( $this->Orientation() == 'ROTATE_90' or $this->Orientation() == 'ROTATE_270' ) ? 'Height' : 'Width'; - if ( property_exists($this, $field) ) + if (property_exists($this, $field)) return $this->{$field}; return $this->defaults[$field]; } // end function Width public function ViewHeight($new=null) { - if ( $new ) + if ($new) $this->{'Height'} = $new; $field = ( $this->Orientation() == 'ROTATE_90' or $this->Orientation() == 'ROTATE_270' ) ? 'Width' : 'Height'; - if ( property_exists($this, $field) ) + if (property_exists($this, $field)) return $this->{$field}; return $this->defaults[$field]; } // end function Height @@ -311,50 +310,50 @@ class Monitor extends ZM_Object { // Validate that it's a valid colour (we seem to allow color names, not just hex). // This also helps prevent XSS. - if ( property_exists($this, $field) && preg_match('/^[#0-9a-zA-Z]+$/', $this->{$field})) { + if (property_exists($this, $field) && preg_match('/^[#0-9a-zA-Z]+$/', $this->{$field})) { return $this->{$field}; } return $this->defaults[$field]; } // end function SignalCheckColour - public static function find( $parameters = array(), $options = array() ) { + public static function find($parameters = array(), $options = array()) { return ZM_Object::_find(get_class(), $parameters, $options); } - public static function find_one( $parameters = array(), $options = array() ) { + public static function find_one($parameters = array(), $options = array()) { return ZM_Object::_find_one(get_class(), $parameters, $options); } - function zmcControl( $mode=false ) { - if ( !(property_exists($this,'Id') and $this->{'Id'}) ) { + function zmcControl($mode=false) { + if (!(property_exists($this,'Id') and $this->{'Id'})) { Warning('Attempt to control a monitor with no Id'); return; } - if ( (!defined('ZM_SERVER_ID')) or ( property_exists($this, 'ServerId') and (ZM_SERVER_ID==$this->{'ServerId'}) ) ) { - if ( $this->Type() == 'Local' ) { + if ((!defined('ZM_SERVER_ID')) or ( property_exists($this, 'ServerId') and (ZM_SERVER_ID==$this->{'ServerId'}) )) { + if ($this->Type() == 'Local') { $zmcArgs = '-d '.$this->{'Device'}; } else { $zmcArgs = '-m '.$this->{'Id'}; } - if ( $mode == 'stop' ) { + if ($mode == 'stop') { daemonControl('stop', 'zmc', $zmcArgs); } else { - if ( $mode == 'restart' ) { + if ($mode == 'restart') { daemonControl('stop', 'zmc', $zmcArgs); } - if ( $this->{'Function'} != 'None' ) { + if ($this->{'Function'} != 'None') { daemonControl('start', 'zmc', $zmcArgs); } } - } else if ( $this->ServerId() ) { + } else if ($this->ServerId()) { $Server = $this->Server(); $url = $Server->UrlToApi().'/monitors/daemonControl/'.$this->{'Id'}.'/'.$mode.'/zmc.json'; - if ( ZM_OPT_USE_AUTH ) { - if ( ZM_AUTH_RELAY == 'hashed' ) { + if (ZM_OPT_USE_AUTH) { + if (ZM_AUTH_RELAY == 'hashed') { $url .= '?auth='.generateAuthHash(ZM_AUTH_HASH_IPS); - } else if ( ZM_AUTH_RELAY == 'plain' ) { + } else if (ZM_AUTH_RELAY == 'plain') { $url .= '?user='.$_SESSION['username']; $url .= '?pass='.$_SESSION['password']; } else { @@ -364,13 +363,13 @@ class Monitor extends ZM_Object { } Debug('sending command to '.$url); - $context = stream_context_create(); + $context = stream_context_create(); try { $result = file_get_contents($url, false, $context); - if ( $result === FALSE ) { /* Handle error */ + if ($result === FALSE) { /* Handle error */ Error("Error restarting zmc using $url"); } - } catch ( Exception $e ) { + } catch (Exception $e) { Error("Except $e thrown trying to restart zmc"); } } else { @@ -378,19 +377,19 @@ class Monitor extends ZM_Object { } } // end function zmcControl - public function GroupIds( $new='' ) { - if ( $new != '' ) { - if ( !is_array($new) ) { + public function GroupIds($new='') { + if ($new != '') { + if (!is_array($new)) { $this->{'GroupIds'} = array($new); } else { $this->{'GroupIds'} = $new; } } - if ( !property_exists($this, 'GroupIds') ) { - if ( property_exists($this, 'Id') and $this->{'Id'} ) { - $this->{'GroupIds'} = dbFetchAll('SELECT `GroupId` FROM `Groups_Monitors` WHERE `MonitorId`=?', 'GroupId', array($this->{'Id'}) ); - if ( ! $this->{'GroupIds'} ) + if (!property_exists($this, 'GroupIds')) { + if (property_exists($this, 'Id') and $this->{'Id'}) { + $this->{'GroupIds'} = dbFetchAll('SELECT `GroupId` FROM `Groups_Monitors` WHERE `MonitorId`=?', 'GroupId', array($this->{'Id'})); + if (!$this->{'GroupIds'}) $this->{'GroupIds'} = array(); } else { $this->{'GroupIds'} = array(); @@ -400,8 +399,8 @@ class Monitor extends ZM_Object { } public function delete() { - if ( ! $this->{'Id'} ) { - Warning("Attempt to delete a monitor without id."); + if (!$this->{'Id'}) { + Warning('Attempt to delete a monitor without id.'); return; } $this->zmcControl('stop'); @@ -409,17 +408,17 @@ class Monitor extends ZM_Object { // If fast deletes are on, then zmaudit will clean everything else up later // If fast deletes are off and there are lots of events then this step may // well time out before completing, in which case zmaudit will still tidy up - if ( !ZM_OPT_FAST_DELETE ) { + if (!ZM_OPT_FAST_DELETE) { $markEids = dbFetchAll('SELECT Id FROM Events WHERE MonitorId=?', 'Id', array($this->{'Id'})); foreach ($markEids as $markEid) deleteEvent($markEid); - if ( $this->{'Name'} ) + if ($this->{'Name'}) deletePath(ZM_DIR_EVENTS.'/'.basename($this->{'Name'})); deletePath(ZM_DIR_EVENTS.'/'.$this->{'Id'}); $Storage = $this->Storage(); - if ( $Storage->Path() != ZM_DIR_EVENTS ) { - if ( $this->{'Name'} ) + if ($Storage->Path() != ZM_DIR_EVENTS) { + if ($this->{'Name'}) deletePath($Storage->Path().'/'.basename($this->{'Name'})); deletePath($Storage->Path().'/'.$this->{'Id'}); } @@ -435,14 +434,14 @@ class Monitor extends ZM_Object { } // end function delete public function Storage($new = null) { - if ( $new ) { + if ($new) { $this->{'Storage'} = $new; } - if ( ! ( property_exists($this, 'Storage') and $this->{'Storage'} ) ) { + if (!(property_exists($this, 'Storage') and $this->{'Storage'})) { $this->{'Storage'} = isset($this->{'StorageId'}) ? Storage::find_one(array('Id'=>$this->{'StorageId'})) : new Storage(NULL); - if ( ! $this->{'Storage'} ) + if (!$this->{'Storage'}) $this->{'Storage'} = new Storage(NULL); } return $this->{'Storage'}; @@ -450,42 +449,42 @@ class Monitor extends ZM_Object { public function Source( ) { $source = ''; - if ( $this->{'Type'} == 'Local' ) { + if ($this->{'Type'} == 'Local') { $source = $this->{'Device'}.' ('.$this->{'Channel'}.')'; - } else if ( $this->{'Type'} == 'Remote' ) { - $source = preg_replace( '/^.*@/', '', $this->{'Host'} ); - if ( $this->{'Port'} != '80' and $this->{'Port'} != '554' ) { + } else if ($this->{'Type'} == 'Remote') { + $source = preg_replace('/^.*@/', '', $this->{'Host'}); + if ($this->{'Port'} != '80' and $this->{'Port'} != '554') { $source .= ':'.$this->{'Port'}; } - } else if ( $this->{'Type'} == 'VNC' ) { + } else if ($this->{'Type'} == 'VNC') { $source = preg_replace( '/^.*@/', '', $this->{'Host'} ); - if ( $this->{'Port'} != '5900' ) { + if ($this->{'Port'} != '5900') { $source .= ':'.$this->{'Port'}; } - } else if ( $this->{'Type'} == 'Ffmpeg' || $this->{'Type'} == 'Libvlc' || $this->{'Type'} == 'WebSite' ) { - $url_parts = parse_url( $this->{'Path'} ); - if ( ZM_WEB_FILTER_SOURCE == 'Hostname' ) { + } else if ($this->{'Type'} == 'Ffmpeg' || $this->{'Type'} == 'Libvlc' || $this->{'Type'} == 'WebSite') { + $url_parts = parse_url($this->{'Path'}); + if (ZM_WEB_FILTER_SOURCE == 'Hostname') { # Filter out everything but the hostname - if ( isset($url_parts['host']) ) { + if (isset($url_parts['host'])) { $source = $url_parts['host']; } else { $source = $this->{'Path'}; } - } else if ( ZM_WEB_FILTER_SOURCE == 'NoCredentials' ) { + } else if (ZM_WEB_FILTER_SOURCE == 'NoCredentials') { # Filter out sensitive and common items unset($url_parts['user']); unset($url_parts['pass']); #unset($url_parts['scheme']); unset($url_parts['query']); #unset($url_parts['path']); - if ( isset($url_parts['port']) and ( $url_parts['port'] == '80' or $url_parts['port'] == '554' ) ) + if (isset($url_parts['port']) and ($url_parts['port'] == '80' or $url_parts['port'] == '554')) unset($url_parts['port']); $source = unparse_url($url_parts); } else { # Don't filter anything $source = $this->{'Path'}; } } - if ( $source == '' ) { + if ($source == '') { $source = 'Monitor ' . $this->{'Id'}; } return $source; @@ -493,7 +492,6 @@ class Monitor extends ZM_Object { public function UrlToIndex($port=null) { return $this->Server()->UrlToIndex($port); - //ZM_MIN_STREAMING_PORT ? (ZM_MIN_STREAMING_PORT+$this->Id()) : null); } public function sendControlCommand($command) { @@ -501,78 +499,78 @@ class Monitor extends ZM_Object { $options = array(); # Convert from a command line params to an option array - foreach ( explode(' ', $command) as $option ) { - if ( preg_match('/--([^=]+)(?:=(.+))?/', $option, $matches) ) { + foreach (explode(' ', $command) as $option) { + if (preg_match('/--([^=]+)(?:=(.+))?/', $option, $matches)) { $options[$matches[1]] = $matches[2]?$matches[2]:1; - } else if ( $option != '' and $option != 'quit' and $option != 'start' and $option != 'stop' ) { + } else if ($option != '' and $option != 'quit' and $option != 'start' and $option != 'stop') { Warning("Ignored command for zmcontrol $option in $command"); } } - if ( !count($options) ) { - if ( $command == 'quit' or $command == 'start' or $command == 'stop' ) { + if (!count($options)) { + if ($command == 'quit' or $command == 'start' or $command == 'stop') { # These are special as we now run zmcontrol as a daemon through zmdc. $status = daemonStatus('zmcontrol.pl', array('--id', $this->{'Id'})); Debug("Current status $status"); - if ( $status or ( (!defined('ZM_SERVER_ID')) or ( property_exists($this, 'ServerId') and (ZM_SERVER_ID==$this->{'ServerId'}) ) ) ) { + if ($status or ((!defined('ZM_SERVER_ID')) or (property_exists($this, 'ServerId') and (ZM_SERVER_ID==$this->{'ServerId'})))) { daemonControl($command, 'zmcontrol.pl', '--id '.$this->{'Id'}); return; } $options['command'] = $command; } else { - Warning("No commands to send to zmcontrol from $command"); + Warning('No commands to send to zmcontrol from '.$command); return false; } } - if ( (!defined('ZM_SERVER_ID')) or ( property_exists($this, 'ServerId') and (ZM_SERVER_ID==$this->{'ServerId'}) ) ) { + if ((!defined('ZM_SERVER_ID')) or (property_exists($this, 'ServerId') and (ZM_SERVER_ID==$this->{'ServerId'}))) { # Local Debug('Trying to send options ' . print_r($options, true)); $optionString = jsonEncode($options); - Debug("Trying to send options $optionString"); + Debug('Trying to send options '.$optionString); // Either connects to running zmcontrol.pl or runs zmcontrol.pl to send the command. $socket = socket_create(AF_UNIX, SOCK_STREAM, 0); - if ( $socket < 0 ) { + if ($socket < 0) { Error('socket_create() failed: '.socket_strerror($socket)); return false; } $sockFile = ZM_PATH_SOCKS.'/zmcontrol-'.$this->{'Id'}.'.sock'; - if ( @socket_connect($socket, $sockFile) ) { - if ( !socket_write($socket, $optionString) ) { + if (@socket_connect($socket, $sockFile)) { + if (!socket_write($socket, $optionString)) { Error('Can\'t write to control socket: '.socket_strerror(socket_last_error($socket))); return false; } - } else if ( $command != 'quit' ) { + } else if ($command != 'quit') { $command = ZM_PATH_BIN.'/zmcontrol.pl '.$command.' --id '.$this->{'Id'}; // Can't connect so use script $ctrlOutput = exec(escapeshellcmd($command)); } socket_close($socket); - } else if ( $this->ServerId() ) { + } else if ($this->ServerId()) { $Server = $this->Server(); $url = $Server->UrlToApi().'/monitors/daemonControl/'.$this->{'Id'}.'/'.$command.'/zmcontrol.pl.json'; - if ( ZM_OPT_USE_AUTH ) { - if ( ZM_AUTH_RELAY == 'hashed' ) { + if (ZM_OPT_USE_AUTH) { + if (ZM_AUTH_RELAY == 'hashed') { $url .= '?auth='.generateAuthHash(ZM_AUTH_HASH_IPS); - } else if ( ZM_AUTH_RELAY == 'plain' ) { + } else if (ZM_AUTH_RELAY == 'plain') { $url .= '?user='.$_SESSION['username']; $url .= '?pass='.$_SESSION['password']; - } else if ( ZM_AUTH_RELAY == 'none' ) { + } else if (ZM_AUTH_RELAY == 'none') { $url .= '?user='.$_SESSION['username']; } } - Debug("sending command to $url"); + Debug('sending command to '.$url); $context = stream_context_create(); try { $result = file_get_contents($url, false, $context); - if ( $result === FALSE ) { /* Handle error */ + if ($result === FALSE) { /* Handle error */ Error("Error sending command using $url"); return false; } - } catch ( Exception $e ) { + } catch (Exception $e) { Error("Exception $e thrown trying to send command to $url"); return false; } @@ -584,18 +582,18 @@ class Monitor extends ZM_Object { } // end function sendControlCommand($mid, $command) function Groups($new='') { - if ( $new != '' ) + if ($new != '') $this->Groups = $new; - if ( !property_exists($this, 'Groups') ) { + if (!property_exists($this, 'Groups')) { $this->Groups = Group::find(array('Id'=>$this->GroupIds())); } return $this->Groups; } function connKey($new='') { - if ( $new ) + if ($new) $this->connKey = $new; - if ( !isset($this->connKey) ) { - if ( !empty($GLOBALS['connkey']) ) { + if (!isset($this->connKey)) { + if (!empty($GLOBALS['connkey'])) { $this->connKey = $GLOBALS['connkey']; } else { $this->connKey = generateConnKey(); @@ -612,8 +610,8 @@ class Monitor extends ZM_Object { function canView() { global $user; if (!$user) { - # auth turned on and not logged in - return false; + # auth turned on and not logged in + return false; } if (!empty($user['MonitorIds']) ) { # For the purposes of viewing, having specified monitors trumps the Monitor->canView setting. @@ -625,7 +623,7 @@ class Monitor extends ZM_Object { } function AlarmCommand($cmd) { - if ( (!defined('ZM_SERVER_ID')) or ( property_exists($this, 'ServerId') and (ZM_SERVER_ID==$this->{'ServerId'}) ) ) { + if ((!defined('ZM_SERVER_ID')) or (property_exists($this, 'ServerId') and (ZM_SERVER_ID==$this->{'ServerId'}))) { switch ($cmd) { case 'on' : $cmd = ' -a'; break; case 'off': $cmd = ' -c'; break; @@ -642,7 +640,7 @@ class Monitor extends ZM_Object { return $output; } - if ( $this->ServerId() ) { + if ($this->ServerId()) { $Server = $this->Server(); $url = $Server->UrlToApi().'/monitors/alarm/id:'.$this->{'Id'}.'/command:'.$cmd.'.json'; @@ -654,15 +652,15 @@ class Monitor extends ZM_Object { $context = stream_context_create(); try { $result = file_get_contents($url, false, $context); - if ( $result === FALSE ) { /* Handle error */ + if ($result === FALSE) { /* Handle error */ Error('Error sending command using '.$url); return false; } - Debug("Result $result"); + Debug('Result '.$result); $json = json_decode($result, true); return $json['status']; - } catch ( Exception $e ) { + } catch (Exception $e) { Error("Exception $e thrown trying to send command to $url"); return false; } @@ -672,10 +670,10 @@ class Monitor extends ZM_Object { } function TriggerOn() { $output = $this->AlarmCommand('on'); - if ( $output and preg_match('/Alarmed event id: (\d+)$/', $output, $matches) ) { + if ($output and preg_match('/Alarmed event id: (\d+)$/', $output, $matches)) { return $matches[1]; } - Warning("No event returned from TriggerOn"); + Warning('No event returned from TriggerOn'); } function TriggerOff() { $output = $this->AlarmCommand('off');