0 ) { if ( php_sapi_name() == 'cli' && empty($_SERVER['REMOTE_ADDR']) ) print("Warning, overriding installed $localConfigFile file with local copy\n"); else error_log("Warning, overriding installed $localConfigFile file with local copy"); $configFile = $localConfigFile; } # Process name, value pairs from the main config file first $configvals = process_configfile($configFile); # Search for user created config files. If one or more are found then # update our config value array with those values $configSubFolder = ZM_CONFIG_SUBDIR; if ( is_dir($configSubFolder) ) { if ( is_readable($configSubFolder) ) { foreach ( glob("$configSubFolder/*.conf") as $filename ) { //error_log("processing $filename"); $configvals = array_replace($configvals, process_configfile($filename)); } } else { error_log("WARNING: ZoneMinder configuration subfolder found but is not readable. Check folder permissions on $configSubFolder."); } } else { error_log("WARNING: ZoneMinder configuration subfolder found but is not a directory. Check $configSubFolder."); } # Now that our array our finalized, define each key => value # pair in the array as a constant foreach ( $configvals as $key => $value ) { define($key, $value); } // // This section is options normally derived from other options or configuration // define( 'ZMU_PATH', ZM_PATH_BIN.'/zmu' ); // Local path to the ZoneMinder Utility // // If setup supports Video 4 Linux v2 and/or v1 // define( 'ZM_HAS_V4L2', '@ZM_HAS_V4L2@' ); // V4L2 support enabled define( 'ZM_HAS_V4L1', '@ZM_HAS_V4L1@' ); // V4L1 support enabled define( 'ZM_HAS_V4L', '@ZM_HAS_V4L@' ); // V4L support enabled // // If ONVIF support has been built in // define( 'ZM_HAS_ONVIF', '@ZM_HAS_ONVIF@' ); // ONVIF support enabled // // If PCRE dev libraries are installed // define( 'ZM_PCRE', '@ZM_PCRE@' ); // PCRE support enabled // // Alarm states // define( 'STATE_IDLE', 0 ); define( 'STATE_PREALARM', 1 ); define( 'STATE_ALARM', 2 ); define( 'STATE_ALERT', 3 ); define( 'STATE_TAPE', 4 ); // // DVR Control Commands // define( 'MSG_CMD', 1 ); define( 'MSG_DATA_WATCH', 2 ); define( 'MSG_DATA_EVENT', 3 ); define( 'CMD_NONE', 0 ); define( 'CMD_PAUSE', 1 ); define( 'CMD_PLAY', 2 ); define( 'CMD_STOP', 3 ); define( 'CMD_FASTFWD', 4 ); define( 'CMD_SLOWFWD', 5 ); define( 'CMD_SLOWREV', 6 ); define( 'CMD_FASTREV', 7 ); define( 'CMD_ZOOMIN', 8 ); define( 'CMD_ZOOMOUT', 9 ); define( 'CMD_PAN', 10 ); define( 'CMD_SCALE', 11 ); define( 'CMD_PREV', 12 ); define( 'CMD_NEXT', 13 ); define( 'CMD_SEEK', 14 ); define( 'CMD_VARPLAY', 15 ); define( 'CMD_QUIT', 17 ); define( 'CMD_QUERY', 99 ); // // These are miscellaneous options you won't normally need to change // define( 'MAX_EVENTS', 10 ); // The maximum number of events to show in the monitor event listing define( 'RATE_BASE', 100 ); // The additional scaling factor used to help get fractional rates in integer format define( 'SCALE_BASE', 100 ); // The additional scaling factor used to help get fractional scales in integer format // // Date and time formats, not to be modified by language files // define( 'STRF_FMT_DATETIME_DB', '%Y-%m-%d %H:%M:%S' ); // Strftime format for database queries, don't change define( 'MYSQL_FMT_DATETIME_SHORT', '%y/%m/%d %H:%i:%S' ); // MySQL date_format shorter format for dates with time require_once('database.php'); require_once('logger.php'); loadConfig(); ZM\Logger::fetch()->initialise(); $GLOBALS['defaultUser'] = array( 'Username' => 'admin', 'Password' => '', 'Language' => '', 'Enabled' => 1, 'Stream' => 'View', 'Events' => 'Edit', 'Control' => 'Edit', 'Monitors' => 'Edit', 'Groups' => 'Edit', 'Devices' => 'Edit', 'System' => 'Edit', 'MaxBandwidth' => '', 'MonitorIds' => false ); function loadConfig( $defineConsts=true ) { global $config; global $dbConn; $config = array(); $result = $dbConn->query('SELECT Name,Value FROM Config'); if ( !$result ) echo mysql_error(); while( $row = dbFetchNext($result) ) { if ( $defineConsts ) define($row['Name'], $row['Value']); $config[$row['Name']] = $row; } } # end function loadConfig // For Human-readability, use ZM_SERVER_HOST or ZM_SERVER_NAME in zm.conf, and convert it here to a ZM_SERVER_ID if ( ! defined('ZM_SERVER_ID') ) { require_once('Server.php'); if ( defined('ZM_SERVER_NAME') and ZM_SERVER_NAME ) { # Use Server lookup so that it caches $Server = ZM\Server::find_one(array('Name'=>ZM_SERVER_NAME)); if ( !$Server ) { ZM\Error('Invalid Multi-Server configration detected. ZM_SERVER_NAME set to ' . ZM_SERVER_NAME . ' in zm.conf, but no corresponding entry found in Servers table.'); } else { define('ZM_SERVER_ID', $Server->Id()); } } else if ( defined('ZM_SERVER_HOST') and ZM_SERVER_HOST ) { $Server = ZM\Server::find_one(array('Name'=>ZM_SERVER_HOST)); if ( ! $Server ) { ZM\Error('Invalid Multi-Server configration detected. ZM_SERVER_HOST set to ' . ZM_SERVER_HOST . ' in zm.conf, but no corresponding entry found in Servers table.'); } else { define('ZM_SERVER_ID', $Server->Id()); } } } ini_set('date.timezone', ZM_TIMEZONE); function process_configfile($configFile) { if ( is_readable( $configFile ) ) { $configvals = array(); $cfg = fopen($configFile, 'r') or ZM\Error("Could not open config file: $configFile."); while ( !feof($cfg) ) { $str = fgets($cfg, 256); if ( preg_match('/^\s*(#.*)?$/', $str) ) { continue; } else if ( preg_match( '/^\s*([^=\s]+)\s*=\s*[\'"]*(.*?)[\'"]*\s*$/', $str, $matches )) { $configvals[$matches[1]] = $matches[2]; } else { ZM\Error("Malformed line in config $configFile\n$str"); } } fclose($cfg); return $configvals; } else { error_log("WARNING: ZoneMinder configuration file found but is not readable. Check file permissions on $configFile."); return false; } } ?>