From 00e82fb75108981eb8fa637222c17ca304ec0321 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 25 Apr 2018 13:04:46 -0700 Subject: [PATCH] Implement MonitoServerId,StorageServerId,FilterServerID in Filters --- scripts/ZoneMinder/lib/ZoneMinder/Filter.pm | 11 +++++--- scripts/zmdc.pl.in | 6 ++--- web/includes/database.php | 2 +- web/includes/functions.php | 10 +++++++ web/lang/en_gb.php | 4 ++- web/skins/classic/views/filter.php | 7 +++-- web/skins/classic/views/js/filter.js | 29 +++++++++------------ 7 files changed, 41 insertions(+), 28 deletions(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Filter.pm b/scripts/ZoneMinder/lib/ZoneMinder/Filter.pm index 065a2339b..b78b801f1 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Filter.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Filter.pm @@ -160,9 +160,12 @@ sub Sql { if ( $term->{attr} =~ /^Monitor/ ) { my ( $temp_attr_name ) = $term->{attr} =~ /^Monitor(.+)$/; $self->{Sql} .= 'M.'.$temp_attr_name; - } elsif ( $term->{attr} =~ /^Server/ ) { + } elsif ( $term->{attr} eq 'ServerId' or $term->{attr} eq 'MonitorServerId' ) { + $self->{Sql} .= 'M.'.$term->{attr}; + } elsif ( $term->{attr} eq 'StorageServerId' ) { $self->{Sql} .= 'S.'.$term->{attr}; - + } elsif ( $term->{attr} eq 'FilterServerId' ) { + $self->{Sql} .= $Config{ZM_SERVER_ID}; # StartTime options } elsif ( $term->{attr} eq 'DateTime' ) { $self->{Sql} .= 'E.StartTime'; @@ -208,7 +211,7 @@ sub Sql { foreach my $temp_value ( split( /["'\s]*?,["'\s]*?/, $stripped_value ) ) { if ( $term->{attr} =~ /^MonitorName/ ) { $value = "'$temp_value'"; - } elsif ( $term->{attr} eq 'ServerId' ) { + } elsif ( $term->{attr} =~ /ServerId/) { Debug("ServerId, temp_value is ($temp_value) ($ZoneMinder::Config::Config{ZM_SERVER_ID})"); if ( $temp_value eq 'ZM_SERVER_ID' ) { $value = "'$ZoneMinder::Config::Config{ZM_SERVER_ID}'"; @@ -241,7 +244,7 @@ sub Sql { } $value = "'$value'"; } - } elsif ( $term->{attr} eq 'Date' or $term->{attr} eq 'StartDate' or $term->{attr} eq 'EndDate' ) { + } elsif ( $term->{attr} eq 'Date' or $term->{attr} eq 'StartDate' or $term->{attr} eq 'EndDate' ) { if ( $temp_value eq 'NULL' ) { $value = $temp_value; } else { diff --git a/scripts/zmdc.pl.in b/scripts/zmdc.pl.in index ab6d4e4c6..d7627ac42 100644 --- a/scripts/zmdc.pl.in +++ b/scripts/zmdc.pl.in @@ -346,14 +346,13 @@ sub run { } close(CLIENT); } else { - Fatal('Bogus descriptor'); + Error('Bogus descriptor'); } } elsif ( $nfound < 0 ) { if ( $! == EINTR ) { # Dead child, will be reaped #print( "Probable dead child\n" ); # See if it needs to start up again - restartPending(); } elsif ( $! == EPIPE ) { Error("Can't select: $!"); } else { @@ -361,12 +360,13 @@ sub run { } } else { #print( "Select timed out\n" ); - restartPending(); } + restartPending(); check_for_processes_to_kill(); } # end while + dPrint(ZoneMinder::Logger::INFO, 'Server exiting at ' .strftime( '%y/%m/%d %H:%M:%S', localtime() ) ."\n" diff --git a/web/includes/database.php b/web/includes/database.php index 82fc3c765..2c3a818c1 100644 --- a/web/includes/database.php +++ b/web/includes/database.php @@ -133,7 +133,7 @@ function dbQuery( $sql, $params=NULL ) { } } else { if ( defined('ZM_DB_DEBUG') ) { - Logger::Debug("SQL: $sql values:" . $params?implode(',',$params):'' ); + Logger::Debug("SQL: $sql values:" . ($params?implode(',',$params):'') ); } $result = $dbConn->query($sql); } diff --git a/web/includes/functions.php b/web/includes/functions.php index 2ae484784..1bca995b4 100644 --- a/web/includes/functions.php +++ b/web/includes/functions.php @@ -1004,8 +1004,15 @@ function parseFilter(&$filter, $saveToSession=false, $querySep='&') { $filter['sql'] .= 'M.'.preg_replace('/^Monitor/', '', $terms[$i]['attr']); break; case 'ServerId': + case 'MonitorServerId': $filter['sql'] .= 'M.ServerId'; break; + case 'StorageServerId': + $filter['sql'] .= 'S.ServerId'; + break; + case 'FilterServerId': + $filter['sql'] .= ZM_SERVER_ID; + break; # Unspecified start or end, so assume start, this is to support legacy filters case 'DateTime': $filter['sql'] .= 'E.StartTime'; @@ -1100,6 +1107,9 @@ function parseFilter(&$filter, $saveToSession=false, $querySep='&') { case 'Notes': $value = dbEscape($value); break; + case 'MonitorServerId': + case 'FilterServerId': + case 'StorageServerId': case 'ServerId': if ( $value == 'ZM_SERVER_ID' ) { $value = ZM_SERVER_ID; diff --git a/web/lang/en_gb.php b/web/lang/en_gb.php index 6e97eaab8..786d38dff 100644 --- a/web/lang/en_gb.php +++ b/web/lang/en_gb.php @@ -130,7 +130,9 @@ $SLANG = array( 'AttrMonitorId' => 'Monitor Id', 'AttrMonitorName' => 'Monitor Name', 'AttrStorageArea' => 'Storage Area', - 'AttrServer' => 'Server', + 'AttrFilterServer' => 'Server Filter is Running On', + 'AttrMonitorServer' => 'Server Monitor is Running On', + 'AttrStorageServer' => 'Server Hosting Storage', 'AttrStateId' => 'Run State', 'AttrName' => 'Name', 'AttrNotes' => 'Notes', diff --git a/web/skins/classic/views/filter.php b/web/skins/classic/views/filter.php index 5c639cecc..2f82fcd49 100644 --- a/web/skins/classic/views/filter.php +++ b/web/skins/classic/views/filter.php @@ -101,7 +101,10 @@ $attrTypes = array( 'DiskSpace' => translate('AttrDiskSpace'), 'SystemLoad' => translate('AttrSystemLoad'), 'StorageId' => translate('AttrStorageArea'), - 'ServerId' => translate('AttrServer'), + 'ServerId' => translate('AttrMonitorServer'), + 'FilterServerId' => translate('AttrFilterServer'), + 'MonitorServerId' => translate('AttrMonitorServer'), + 'StorageServerId' => translate('AttrStorageServer'), 'StateId' => translate('AttrStateId'), ); @@ -268,7 +271,7 @@ for ( $i=0; $i < count($terms); $i++ ) { diff --git a/web/skins/classic/views/js/filter.js b/web/skins/classic/views/js/filter.js index 4df73997e..f752dbff7 100644 --- a/web/skins/classic/views/js/filter.js +++ b/web/skins/classic/views/js/filter.js @@ -142,7 +142,9 @@ function parseRows (rows) { inputTds.eq(6).find(':input[value="-"]').prop('disabled', false); } - if (inputTds.eq(2).children().val() == "Archived") { //Archived types + var attr = inputTds.eq(2).children().val(); + + if ( attr == "Archived") { //Archived types inputTds.eq(3).html('equal to'); let archiveSelect = $j('').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]'); for (let i = 0; i < archiveTypes.length; i++) { @@ -151,7 +153,7 @@ function parseRows (rows) { let archiveVal = inputTds.eq(4).children().val(); inputTds.eq(4).html(archiveSelect).children().val(archiveVal).chosen({width: "101%"}); - } else if (inputTds.eq(2).children().val().indexOf('Weekday') >= 0) { //Weekday selection + } else if ( attr.indexOf('Weekday') >= 0 ) { //Weekday selection let weekdaySelect = $j('').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]'); for (let i = 0; i < weekdays.length; i++) { weekdaySelect.append(''); @@ -159,7 +161,7 @@ function parseRows (rows) { let weekdayVal = inputTds.eq(4).children().val(); inputTds.eq(4).html(weekdaySelect).children().val(weekdayVal).chosen({width: "101%"}); - } else if (inputTds.eq(2).children().val() == 'StateId') { //Run state + } else if ( attr == 'StateId' ) { //Run state let stateSelect = $j('').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]'); for (let key in states) { stateSelect.append(''); @@ -167,8 +169,7 @@ function parseRows (rows) { let stateVal = inputTds.eq(4).children().val(); inputTds.eq(4).html(stateSelect).children().val(stateVal).chosen({width: "101%"}); - - } else if (inputTds.eq(2).children().val() == 'ServerId') { //Select Server + } else if ( attr == 'ServerId' || attr == 'MonitorServerId' || attr == 'StorageServerId' || attr == 'FilterServerId' ) { //Select Server let serverSelect = $j('').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]'); for (let key in servers) { serverSelect.append(''); @@ -176,21 +177,15 @@ function parseRows (rows) { let serverVal = inputTds.eq(4).children().val(); inputTds.eq(4).html(serverSelect).children().val(serverVal).chosen({width: "101%"}); - } else if (inputTds.eq(2).children().val() == 'StorageId') { //Choose by storagearea + } else if ( attr == 'StorageId' ) { //Choose by storagearea let storageSelect = $j('').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]'); for ( key in storageareas ) { -console.log(key + ' ' + storageareas[key]); storageSelect.append(''); -} -/* - for (let i=0; i < storageareas.length; i++) { - storageSelect.append(''); } -*/ let storageVal = inputTds.eq(4).children().val(); inputTds.eq(4).html(storageSelect).children().val(storageVal).chosen({width: "101%"}); - } else if (inputTds.eq(2).children().val() == 'MonitorName') { //Monitor names + } else if ( attr == 'MonitorName' ) { //Monitor names let monitorSelect = $j('').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]'); for (let key in monitors) { monitorSelect.append(''); @@ -208,15 +203,15 @@ console.log(key + ' ' + storageareas[key]); let textVal = inputTds.eq(4).children().val(); inputTds.eq(4).html(textInput).children().val(textVal); } - if (inputTds.eq(2).children().val().endsWith('DateTime')) { //Start/End DateTime + if ( attr.endsWith('DateTime') ) { //Start/End DateTime inputTds.eq(4).children().datetimepicker({timeFormat: "HH:mm:ss", dateFormat: "yy-mm-dd", maxDate: 0, constrainInput: false}); - } else if (inputTds.eq(2).children().val().endsWith('Date')) { //Start/End Date + } else if ( attr.endsWith('Date') ) { //Start/End Date inputTds.eq(4).children().datepicker({dateFormat: "yy-mm-dd", maxDate: 0, constrainInput: false}); - } else if (inputTds.eq(2).children().val().endsWith('Time')) { //Start/End Time + } else if ( attr.endsWith('Time')) { //Start/End Time inputTds.eq(4).children().timepicker({timeFormat: "HH:mm:ss", constrainInput: false}); } - let attr = inputTds.find("[name$='attr\\]']") // Set attr list id and name + attr = inputTds.find("[name$='attr\\]']") // Set attr list id and name let term = attr.attr('name').split(/[[\]]{1,2}/); term.length--; term.shift();