1 find all tickets where:
5 Has values (talk or read) AND
6 Has values (bar and baz) AND
7 doesn't have values (bing or bong)
10 LimitCustomFieldValues {
11 my %args = ( CustomField => undef,
12 ClauseId => 'CustomFields',
14 ENTRYAGGREGATOR => undef,
18 unless ( $self->{'TicketAliases'}{$args{'ClauseId'}}{'CustomField'} ) {
19 $self->{'TicketAliases'}{$args{'ClauseId'}}{'CustomField'} = $self->NewAlias('CustomFields');
20 $self->Join(TABLE1 =>$self->{'TicketAliases'}{$args{'ClauseId'}}{'CustomField' },
22 TABLE2 => 'main', FIELD2 => 'QueueId');
24 if ($args{'OPERATOR'} =~ /!=|IS/i) {
30 # {{{ if it's a keyword
31 elsif ( $TYPES{ $restriction->{'FIELD'} } eq 'CUSTOMFIELD' ) {
34 my $TicketCFs = $self->Join( TYPE => 'left',
37 TABLE2 => 'TicketCustomFieldValues',
40 foreach my $value ( @{ $restriction->{'VALUES'} } ) {
41 $self->SUPER::Limit( ALIAS => $TicketCFs,
43 OPERATOR => $restriction->{'OPERATOR'},
45 QUOTEVALUE => $restriction->{'QUOTEVALUE'},
46 ENTRYAGGREGATOR => 'AND', );
48 if ( ( $restriction->{'OPERATOR'} =~ /^IS$/i ) or ( $restriction->{'OPERATOR'} eq '!=' ) ) {
52 #If we're trying to find tickets where the keyword isn't somethng, also check ones where it _IS_ null
53 if ( $restriction->{'OPERATOR'} eq '!=' ) {
54 $self->SUPER::Limit( ALIAS => $TicketCFs,
59 ENTRYAGGREGATOR => 'OR', );
62 $self->SUPER::Limit( LEFTJOIN => $TicketCFs,
63 FIELD => 'CustomField',
64 VALUE => $restriction->{'CUSTOMFIELD'},
65 ENTRYAGGREGATOR => 'OR' );