diff --git a/db/zm_create.sql.in b/db/zm_create.sql.in index ea8257b75..0ad1b2c0b 100644 --- a/db/zm_create.sql.in +++ b/db/zm_create.sql.in @@ -426,6 +426,8 @@ CREATE TABLE `Logs` ( CREATE INDEX `Logs_TimeKey_idx` ON `Logs` (`TimeKey`); CREATE INDEX `Logs_Level_idx` ON `Logs` (`Level`); +CREATE INDEX `Logs_Component_idx` ON `Logs` (`Component`); + -- -- Table structure for table `Manufacturers` -- diff --git a/db/zm_update-1.33.13.sql b/db/zm_update-1.33.13.sql index 8114205c0..568d49699 100644 --- a/db/zm_update-1.33.13.sql +++ b/db/zm_update-1.33.13.sql @@ -1,6 +1,2 @@ --- --- Add primary keys for Logs and Stats tables --- - SELECT "Modifying Monitors MaxFPS to DECIMAL(5,3)"; ALTER TABLE `Monitors` MODIFY `MaxFPS` decimal(5,3) default NULL; diff --git a/db/zm_update-1.37.57.sql b/db/zm_update-1.37.57.sql new file mode 100644 index 000000000..aa9eb2491 --- /dev/null +++ b/db/zm_update-1.37.57.sql @@ -0,0 +1,22 @@ +-- +-- This adds Object_Types +-- + +SELECT 'Checking For Object_Types Table'; +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.TABLES + WHERE table_name = 'Object_Types' + AND table_schema = DATABASE() + ) > 0, +"SELECT 'Object_Types table exists'", +"CREATE TABLE Object_Types ( + Id INTEGER NOT NULL AUTO_INCREMENT, + Name VARCHAR(32) UNIQUE, + Human TEXT, + PRIMARY KEY (Id) +)" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; diff --git a/db/zm_update-1.37.58.sql b/db/zm_update-1.37.58.sql new file mode 100644 index 000000000..9a2a5f7fe --- /dev/null +++ b/db/zm_update-1.37.58.sql @@ -0,0 +1,50 @@ +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.STATISTICS + WHERE table_name = 'Logs' + AND table_schema = DATABASE() + AND index_name = 'Logs_Component_idx' + ) > 0, +"SELECT 'Logs_Component_idx already exists on Logs table'", +"CREATE INDEX `Logs_Component_idx` ON `Logs` (`Component`)" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; + +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.STATISTICS + WHERE table_name = 'Logs' + AND table_schema = DATABASE() + AND index_name = 'TimeKey' + ) > 0, +"DROP INDEX `TimeKey` ON Logs", +"SELECT 'TimeKey already removed from Logs table'" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; + +-- +-- This adds Object_Types +-- + +SELECT 'Checking For Object_Types Table'; +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.TABLES + WHERE table_name = 'Object_Types' + AND table_schema = DATABASE() + ) > 0, +"SELECT 'Object_Types table exists'", +"CREATE TABLE Object_Types ( + Id INTEGER NOT NULL AUTO_INCREMENT, + Name VARCHAR(32) UNIQUE, + Human TEXT, + PRIMARY KEY (Id) +)" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; diff --git a/distros/redhat/zoneminder.spec b/distros/redhat/zoneminder.spec index bf5e7988e..e8b6e1ccf 100644 --- a/distros/redhat/zoneminder.spec +++ b/distros/redhat/zoneminder.spec @@ -18,7 +18,7 @@ %global zmtargetdistro %{?rhel:el%{rhel}}%{!?rhel:fc%{fedora}} Name: zoneminder -Version: 1.37.57 +Version: 1.37.58 Release: 2%{?dist} Summary: A camera monitoring and analysis tool Group: System Environment/Daemons diff --git a/version.txt b/version.txt index 9459b808d..95fc26c1e 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.37.57 +1.37.58 diff --git a/web/ajax/stats.php b/web/ajax/stats.php index 98b07b01e..8c28cf6c3 100644 --- a/web/ajax/stats.php +++ b/web/ajax/stats.php @@ -17,14 +17,14 @@ if ($raw) { foreach ($stats as $stat) { $stat['ZoneName'] = validHtmlStr($stat['ZoneName']); $stat['PixelDiff'] = validHtmlStr($stat['PixelDiff']); - $stat['AlarmPixels'] = sprintf('%d (%d%%)', $stat['AlarmPixels'], (100*$stat['AlarmPixels']/$stat['Area'])); - $stat['FilterPixels'] = sprintf('%d (%d%%)', $stat['FilterPixels'], (100*$stat['FilterPixels']/$stat['Area'])); - $stat['BlobPixels'] = sprintf('%d (%d%%)', $stat['BlobPixels'], (100*$stat['BlobPixels']/$stat['Area'])); + $stat['AlarmPixels'] = sprintf('%d (%.1f%%)', $stat['AlarmPixels'], (100*$stat['AlarmPixels']/$stat['Area'])); + $stat['FilterPixels'] = sprintf('%d (%.1f%%)', $stat['FilterPixels'], (100*$stat['FilterPixels']/$stat['Area'])); + $stat['BlobPixels'] = sprintf('%d (%.1f%%)', $stat['BlobPixels'], (100*$stat['BlobPixels']/$stat['Area'])); $stat['Blobs'] = validHtmlStr($stat['Blobs']); if ($stat['Blobs'] > 1) { - $stat['BlobSizes'] = sprintf('%d-%d (%d%%-%d%%)', $stat['MinBlobSize'], $stat['MaxBlobSize'], (100*$stat['MinBlobSize']/$stat['Area']), (100*$stat['MaxBlobSize']/$stat['Area'])); + $stat['BlobSizes'] = sprintf('%d-%d (%.1f%%-%.1f%%)', $stat['MinBlobSize'], $stat['MaxBlobSize'], (100*$stat['MinBlobSize']/$stat['Area']), (100*$stat['MaxBlobSize']/$stat['Area'])); } else { - $stat['BlobSizes'] = sprintf('%d (%d%%)', $stat['MinBlobSize'], 100*$stat['MinBlobSize']/$stat['Area']); + $stat['BlobSizes'] = sprintf('%d (%.1f%%)', $stat['MinBlobSize'], 100*$stat['MinBlobSize']/$stat['Area']); } $stat['AlarmLimits'] = validHtmlStr($stat['MinX'].','.$stat['MinY'].'-'.$stat['MaxX'].','.$stat['MaxY']); $data['raw'][] = $stat; diff --git a/web/includes/Object.php b/web/includes/Object.php index db998c59f..df2588a46 100644 --- a/web/includes/Object.php +++ b/web/includes/Object.php @@ -203,27 +203,27 @@ class ZM_Object { $this->{$field} = implode(',', $value); } else if (is_string($value)) { if (array_key_exists($field, $this->defaults)) { - # Need filtering - if (is_array($this->defaults[$field]) && isset($this->defaults[$field]['filter_regexp'])) { - if (is_array($this->defaults[$field]['filter_regexp'])) { - foreach ($this->defaults[$field]['filter_regexp'] as $regexp) { - $this->{$field} = preg_replace($regexp, '', trim($value)); - } - } else { - $this->{$field} = preg_replace($this->defaults[$field]['filter_regexp'], '', trim($value)); - } - } else if ($value == '') { - if (is_array($this->defaults[$field])) { - $this->{$field} = $this->defaults[$field]['default']; - } else if (is_string($this->defaults[$field])) { -# if the default is a string, don't set it. Having a default for empty string is to set null for numbers. - $this->{$field} = $value; - } else { - $this->{$field} = $this->defaults[$field]; - } - } else { - $this->{$field} = $value; - } # need a default + # Need filtering + if (is_array($this->defaults[$field]) && isset($this->defaults[$field]['filter_regexp'])) { + if (is_array($this->defaults[$field]['filter_regexp'])) { + foreach ($this->defaults[$field]['filter_regexp'] as $regexp) { + $this->{$field} = preg_replace($regexp, '', trim($value)); + } + } else { + $this->{$field} = preg_replace($this->defaults[$field]['filter_regexp'], '', trim($value)); + } + } else if ($value == '') { + if (is_array($this->defaults[$field])) { + $this->{$field} = $this->defaults[$field]['default']; + } else if (is_string($this->defaults[$field])) { + # if the default is a string, don't set it. Having a default for empty string is to set null for numbers. + $this->{$field} = $value; + } else { + $this->{$field} = $this->defaults[$field]; + } + } else { + $this->{$field} = $value; + } # need a default } else { $this->{$field} = $value; } diff --git a/web/skins/classic/views/js/filter.js b/web/skins/classic/views/js/filter.js index b0527ad3b..d9d883242 100644 --- a/web/skins/classic/views/js/filter.js +++ b/web/skins/classic/views/js/filter.js @@ -382,9 +382,10 @@ function addTerm( element ) { var row = $j(element).closest('tr'); row.find('select').chosen('destroy'); var newRow = row.clone().insertAfter(row); - newRow.find('select').each( function() { //reset new row to default - this[0].selected = 'selected'; - }); + //newRow.find('select').each( function() { //reset new row to default + // if ($j(this).find('option').length > 0 ) + // this[0].selected = 'selected'; + //}); newRow.find('input[type="text"]').val(''); newRow[0].querySelectorAll("button[data-on-click-this]").forEach(function(el) { var fnName = el.getAttribute("data-on-click-this");