Skip to content

Commit 79253dc

Browse files
pliablepixelsclaude
andcommitted
fix: address review feedback for tag filter handling
- Add IS NOT operator check alongside != in PHP FilterTerm.php (was already handled in Perl but missing from PHP) - Add defined() guard on $term->{val} in Perl Filter.pm to avoid uninitialized value warnings with malformed/legacy saved filters Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 1188635 commit 79253dc

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

scripts/ZoneMinder/lib/ZoneMinder/Filter.pm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,14 +322,14 @@ sub Sql {
322322
if ( $term->{op} ) {
323323
# Handle special tag values before generic operators to avoid
324324
# LEFT JOIN NULL comparison issues with EXISTS/NOT EXISTS
325-
if ( $term->{attr} eq 'Tags' and $term->{val} eq '0' ) {
325+
if ( $term->{attr} eq 'Tags' and defined($term->{val}) and $term->{val} eq '0' ) {
326326
# "No Tag": = means no tags (NOT EXISTS), != means has tags (EXISTS)
327327
if ($term->{op} eq '!=' or $term->{op} eq 'IS NOT') {
328328
$self->{Sql} .= 'EXISTS (SELECT NULL FROM `Events_Tags` AS ET WHERE ET.EventId = E.Id)';
329329
} else {
330330
$self->{Sql} .= 'NOT EXISTS (SELECT NULL FROM `Events_Tags` AS ET WHERE ET.EventId = E.Id)';
331331
}
332-
} elsif ( $term->{attr} eq 'Tags' and $term->{val} eq '-1' ) {
332+
} elsif ( $term->{attr} eq 'Tags' and defined($term->{val}) and $term->{val} eq '-1' ) {
333333
# "Any Tag": = means has tags (EXISTS), != means no tags (NOT EXISTS)
334334
if ($term->{op} eq '!=' or $term->{op} eq 'IS NOT') {
335335
$self->{Sql} .= 'NOT EXISTS (SELECT NULL FROM `Events_Tags` AS ET WHERE ET.EventId = E.Id)';

web/includes/FilterTerm.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -345,14 +345,14 @@ public function sql() {
345345
$sql .= '('.implode(' OR ', $subterms).')';
346346
} elseif (($this->attr === 'Tags') && ($values[0] === "'0'")) {
347347
// "No Tag": = means no tags (NOT EXISTS), != means has tags (EXISTS)
348-
if ($this->op === '!=') {
348+
if ($this->op === '!=' || $this->op === 'IS NOT') {
349349
$sql .= 'EXISTS (SELECT NULL FROM Events_Tags AS ET WHERE ET.EventId = E.Id)';
350350
} else {
351351
$sql .= 'NOT EXISTS (SELECT NULL FROM Events_Tags AS ET WHERE ET.EventId = E.Id)';
352352
}
353353
} elseif (($this->attr === 'Tags') && ($values[0] === "'-1'")) {
354354
// "Any Tag": = means has tags (EXISTS), != means no tags (NOT EXISTS)
355-
if ($this->op === '!=') {
355+
if ($this->op === '!=' || $this->op === 'IS NOT') {
356356
$sql .= 'NOT EXISTS (SELECT NULL FROM Events_Tags AS ET WHERE ET.EventId = E.Id)';
357357
} else {
358358
$sql .= 'EXISTS (SELECT NULL FROM Events_Tags AS ET WHERE ET.EventId = E.Id)';

0 commit comments

Comments
 (0)