Merge branch 'storageareas' of github.com:connortechnology/ZoneMinder into storageareas

This commit is contained in:
Isaac Connor
2017-01-15 13:35:45 -05:00
7 changed files with 50 additions and 43 deletions

View File

@@ -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`),

View File

@@ -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}
);

View File

@@ -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

View File

@@ -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 ) );

View File

@@ -1196,6 +1196,7 @@ function parseFilter( &$filter, $saveToSession=false, $querySep='&amp;' ) {
case 'MaxScore':
case 'Cause':
case 'Notes':
case 'StateId':
case 'Archived':
$filter['sql'] .= 'E.'.$filter['terms'][$i]['attr'];
break;

View File

@@ -127,6 +127,7 @@ $SLANG = array(
'AttrMonitorName' => 'Monitor Name',
'AttrStorageArea' => 'Storage Area',
'AttrServer' => 'Server',
'AttrStateId' => 'Run State',
'AttrName' => 'Name',
'AttrNotes' => 'Notes',
'AttrSystemLoad' => 'System Load',

View File

@@ -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>