232 lines
7.5 KiB
PHP
232 lines
7.5 KiB
PHP
<?php
|
|
//
|
|
// ZoneMinder web configuration file, $Date$, $Revision$
|
|
// Copyright (C) 2001-2008 Philip Coombes
|
|
//
|
|
// This program is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU General Public License
|
|
// as published by the Free Software Foundation; either version 2
|
|
// of the License, or (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program; if not, write to the Free Software
|
|
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
//
|
|
|
|
//
|
|
// This section contains options substituted by the zmconfig.pl utility, do not edit these directly
|
|
//
|
|
define( 'ZM_CONFIG', '@ZM_CONFIG@' ); // Path to config file
|
|
define( 'ZM_CONFIG_SUBDIR', '@ZM_CONFIG_SUBDIR@' ); // Path to config subfolder
|
|
// Define, and override any given in config file
|
|
define( 'ZM_VERSION', '@VERSION@' ); // Version
|
|
define( 'ZM_DIR_TEMP', '@ZM_TMPDIR@' );
|
|
define( 'ZM_DIR_CACHE', '@ZM_CACHEDIR@' );
|
|
global $configvals;
|
|
|
|
$configFile = ZM_CONFIG;
|
|
$localConfigFile = basename($configFile);
|
|
if ( file_exists($localConfigFile) && filesize($localConfigFile) > 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
|
|
//
|
|
define('ZM_HAS_V4L2', '@ZM_HAS_V4L2@'); // V4L2 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_UNKNOWN', 0);
|
|
define('STATE_IDLE', 1);
|
|
define('STATE_PREALARM', 2);
|
|
define('STATE_ALARM', 3);
|
|
define('STATE_ALERT', 4);
|
|
define('STATE_TAPE', 5);
|
|
|
|
//
|
|
// 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_MAXFPS', 18);
|
|
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',
|
|
'Snapshots' => '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) ) {
|
|
$config[$row['Name']] = $row;
|
|
|
|
if ( $defineConsts ) {
|
|
# Values in conf.d files override db so check if already defined and update value
|
|
if ( ! defined($row['Name']) ) {
|
|
define($row['Name'], $row['Value']);
|
|
} else {
|
|
$config[$row['Name']]['Value'] = constant($row['Name']);
|
|
}
|
|
}
|
|
}
|
|
return $config;
|
|
} # 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());
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( defined('ZM_TIMEZONE') and ZM_TIMEZONE )
|
|
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;
|
|
}
|
|
}
|
|
|
|
?>
|