mirror of
https://github.com/ZoneMinder/zoneminder.git
synced 2026-03-19 22:37:36 -04:00
Merge branch 'storageareas' of github.com:connortechnology/ZoneMinder into storageareas
This commit is contained in:
@@ -205,6 +205,7 @@ CREATE TABLE `Events` (
|
||||
`Messaged` tinyint(3) unsigned NOT NULL default '0',
|
||||
`Executed` tinyint(3) unsigned NOT NULL default '0',
|
||||
`Notes` text,
|
||||
`StateId` int(10) unsigned NOT NULL,
|
||||
`Orientation` enum('0','90','180','270','hori','vert') NOT NULL default '0',
|
||||
PRIMARY KEY (`Id`,`MonitorId`),
|
||||
KEY `MonitorId` (`MonitorId`),
|
||||
|
||||
@@ -75,6 +75,8 @@ sub zmDbConnect {
|
||||
if ( $force ) {
|
||||
zmDbDisconnect();
|
||||
}
|
||||
my $options = shift;
|
||||
|
||||
if ( ( ! defined( $dbh ) ) or ! $dbh->ping() ) {
|
||||
my ( $host, $portOrSocket ) = ( $ZoneMinder::Config::Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ );
|
||||
my $socket;
|
||||
@@ -89,7 +91,7 @@ sub zmDbConnect {
|
||||
$socket = ";host=".$Config{ZM_DB_HOST};
|
||||
}
|
||||
$dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}
|
||||
.$socket
|
||||
.$socket . ($options?';'.join(';', map { $_.'='.$$options{$_} } keys %{$options} ) : '' )
|
||||
, $Config{ZM_DB_USER}
|
||||
, $Config{ZM_DB_PASS}
|
||||
);
|
||||
|
||||
@@ -116,7 +116,7 @@ GetOptions(
|
||||
'dir:s' =>\$updateDir
|
||||
) or pod2usage(-exitstatus => -1);
|
||||
|
||||
my $dbh = zmDbConnect();
|
||||
my $dbh = zmDbConnect(undef, { mysql_multi_statements=>1 } );
|
||||
$Config{ZM_DB_USER} = $dbUser;
|
||||
$Config{ZM_DB_PASS} = $dbPass;
|
||||
|
||||
@@ -449,47 +449,19 @@ if ( $version )
|
||||
my $dbh = shift;
|
||||
my $version = shift;
|
||||
|
||||
my ( $host, $port ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ );
|
||||
my $command = "mysql -h".$host;
|
||||
$command .= " -P".$port if defined($port);
|
||||
if ( $dbUser )
|
||||
{
|
||||
$command .= " -u".$dbUser;
|
||||
$command .= ' -p"'.$dbPass.'"' if $dbPass;
|
||||
}
|
||||
$command .= " ".$Config{ZM_DB_NAME}." < ";
|
||||
if ( $updateDir )
|
||||
{
|
||||
$command .= $updateDir;
|
||||
}
|
||||
else
|
||||
{
|
||||
$command .= $Config{ZM_PATH_DATA}."/db";
|
||||
}
|
||||
$command .= "/zm_update-".$version.".sql";
|
||||
my $file = ( $updateDir ? $updateDir : $Config{ZM_PATH_DATA}.'/db' ) . "/zm_update-$version.sql";
|
||||
|
||||
print( "Executing '$command'\n" ) if ( logDebugging() );
|
||||
my $output = qx($command);
|
||||
my $status = $? >> 8;
|
||||
if ( $status || logDebugging() )
|
||||
{
|
||||
chomp( $output );
|
||||
print( "Output: $output\n" );
|
||||
}
|
||||
if ( $status )
|
||||
{
|
||||
die( "Command '$command' exited with status: $status\n" );
|
||||
}
|
||||
else
|
||||
{
|
||||
print( "\nDatabase successfully upgraded to version $version.\n" );
|
||||
my $sql = "update Config set Value = ? where Name = 'ZM_DYN_DB_VERSION'";
|
||||
my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() );
|
||||
my $res = $sth->execute( $version ) or die( "Can't execute: ".$sth->errstr() );
|
||||
}
|
||||
open( my $fh, '<', $file ) or die "Unable to open $file $!";
|
||||
$/ = undef;
|
||||
my $sql = <$fh>;
|
||||
close $fh;
|
||||
$dbh->do($sql) or die $dbh->errstr();
|
||||
print( "\nDatabase successfully upgraded to version $version.\n" );
|
||||
$sql = "update Config set Value = ? where Name = 'ZM_DYN_DB_VERSION'";
|
||||
my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() );
|
||||
my $res = $sth->execute( $version ) or die( "Can't execute: ".$sth->errstr() );
|
||||
}
|
||||
|
||||
|
||||
print( "\nUpgrading database to version ".ZM_VERSION."\n" );
|
||||
|
||||
# Update config first of all
|
||||
|
||||
@@ -81,10 +81,26 @@ Event::Event( Monitor *p_monitor, struct timeval p_start_time, const std::string
|
||||
|
||||
Storage * storage = monitor->getStorage();
|
||||
|
||||
static char sql[ZM_SQL_MED_BUFSIZ];
|
||||
unsigned int state_id = 0;
|
||||
zmDbRow dbrow;
|
||||
if ( dbrow.fetch( "SELECT Id FROM States WHERE IsActive=1") ) {
|
||||
state_id = atoi(dbrow[0]);
|
||||
}
|
||||
|
||||
static char sql[ZM_SQL_MED_BUFSIZ];
|
||||
struct tm *stime = localtime( &start_time.tv_sec );
|
||||
snprintf( sql, sizeof(sql), "insert into Events ( MonitorId, StorageId, Name, StartTime, Width, Height, Cause, Notes, Orientation, Videoed ) values ( %d, %d, 'New Event', from_unixtime( %ld ), %d, %d, '%s', '%s', %d, %d )", monitor->Id(), storage->Id(), start_time.tv_sec, monitor->Width(), monitor->Height(), cause.c_str(), notes.c_str(), monitor->getOrientation(), videoEvent );
|
||||
snprintf( sql, sizeof(sql), "insert into Events ( MonitorId, StorageId, Name, StartTime, Width, Height, Cause, Notes, StateId, Orientation, Videoed ) values ( %d, %d, 'New Event', from_unixtime( %ld ), %d, %d, '%s', '%s', %d, %d )",
|
||||
monitor->Id(),
|
||||
storage->Id(),
|
||||
start_time.tv_sec,
|
||||
monitor->Width(),
|
||||
monitor->Height(),
|
||||
cause.c_str(),
|
||||
notes.c_str(),
|
||||
state_id,
|
||||
monitor->getOrientation(),
|
||||
videoEvent
|
||||
);
|
||||
if ( mysql_query( &dbconn, sql ) ) {
|
||||
Error( "Can't insert event: %s. sql was (%s)", mysql_error( &dbconn ), sql );
|
||||
exit( mysql_errno( &dbconn ) );
|
||||
|
||||
@@ -1196,6 +1196,7 @@ function parseFilter( &$filter, $saveToSession=false, $querySep='&' ) {
|
||||
case 'MaxScore':
|
||||
case 'Cause':
|
||||
case 'Notes':
|
||||
case 'StateId':
|
||||
case 'Archived':
|
||||
$filter['sql'] .= 'E.'.$filter['terms'][$i]['attr'];
|
||||
break;
|
||||
|
||||
@@ -127,6 +127,7 @@ $SLANG = array(
|
||||
'AttrMonitorName' => 'Monitor Name',
|
||||
'AttrStorageArea' => 'Storage Area',
|
||||
'AttrServer' => 'Server',
|
||||
'AttrStateId' => 'Run State',
|
||||
'AttrName' => 'Name',
|
||||
'AttrNotes' => 'Notes',
|
||||
'AttrSystemLoad' => 'System Load',
|
||||
|
||||
@@ -99,6 +99,7 @@ $attrTypes = array(
|
||||
'SystemLoad' => translate('AttrSystemLoad'),
|
||||
'StorageId' => translate('AttrStorageArea'),
|
||||
'ServerId' => translate('AttrServer'),
|
||||
'StateId' => translate('AttrStateId'),
|
||||
);
|
||||
$opTypes = array(
|
||||
'=' => translate('OpEq'),
|
||||
@@ -206,7 +207,20 @@ for ( $i = 0; isset($_REQUEST['filter']) && $i < count($_REQUEST['filter']['term
|
||||
<td><?php echo buildSelect( "filter[terms][$i][op]", $opTypes ); ?></td>
|
||||
<td><input name="filter[terms][<?php echo $i ?>][val]" id="filter[terms][<?php echo $i ?>][val]" value="<?php echo isset($_REQUEST['filter']['terms'][$i]['val'])?validHtmlStr($_REQUEST['filter']['terms'][$i]['val']):'' ?>"/><?php if ( $hasCal ) { ?><script type="text/javascript">Calendar.setup( { inputField: "filter[terms][<?php echo $i ?>][val]", ifFormat: "%Y-%m-%d", showOthers: true, weekNumbers: false });</script><?php } ?></td>
|
||||
<?php
|
||||
} elseif ( $_REQUEST['filter']['terms'][$i]['attr'] == "Weekday" ) {
|
||||
}
|
||||
elseif ( $_REQUEST['filter']['terms'][$i]['attr'] == "StateId" )
|
||||
{
|
||||
$states = array();
|
||||
foreach ( dbFetchAll( 'SELECT Id,Name FROM States ORDER BY lower(Name) ASC' ) as $state_row ) {
|
||||
$states[$state_row['Id']] = $state_row['Name'];
|
||||
}
|
||||
?>
|
||||
<td><?php echo buildSelect( "filter[terms][$i][op]", $opTypes ); ?></td>
|
||||
<td><?php echo buildSelect( "filter[terms][$i][val]", $states ); ?></td>
|
||||
<?php
|
||||
}
|
||||
elseif ( $_REQUEST['filter']['terms'][$i]['attr'] == "Weekday" )
|
||||
{
|
||||
?>
|
||||
<td><?php echo buildSelect( "filter[terms][$i][op]", $opTypes ); ?></td>
|
||||
<td><?php echo buildSelect( "filter[terms][$i][val]", $weekdays ); ?></td>
|
||||
|
||||
Reference in New Issue
Block a user