108 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
package App::Netdisco::DB::ResultSet::DeviceModule;
 | 
						|
use base 'App::Netdisco::DB::ResultSet';
 | 
						|
 | 
						|
use strict;
 | 
						|
use warnings;
 | 
						|
 | 
						|
=head1 ADDITIONAL METHODS
 | 
						|
 | 
						|
=head2 search_by_field( \%cond, \%attrs? )
 | 
						|
 | 
						|
This variant of the standard C<search()> method returns a ResultSet of Device
 | 
						|
Module entries. It is written to support web forms which accept fields that
 | 
						|
match and locate Device Modules in the database.
 | 
						|
 | 
						|
The hashref parameter should contain fields from the Device Module table
 | 
						|
which will be intelligently used in a search query.
 | 
						|
 | 
						|
In addition, you can provide the key C<matchall> which, given a True or False
 | 
						|
value, controls whether fields must all match or whether any can match, to
 | 
						|
select a row.
 | 
						|
 | 
						|
Supported keys:
 | 
						|
 | 
						|
=over 4
 | 
						|
 | 
						|
=item matchall
 | 
						|
 | 
						|
If a True value, fields must all match to return a given row of the Device
 | 
						|
table, otherwise any field matching will cause the row to be included in
 | 
						|
results.
 | 
						|
 | 
						|
=item description
 | 
						|
 | 
						|
Can match the C<description> field as a substring.
 | 
						|
 | 
						|
=item name
 | 
						|
 | 
						|
Can match the C<name> field as a substring.
 | 
						|
 | 
						|
=item type
 | 
						|
 | 
						|
Can match the C<type> field as a substring.
 | 
						|
 | 
						|
=item model
 | 
						|
 | 
						|
Can match the C<model> field as a substring.
 | 
						|
 | 
						|
=item serial
 | 
						|
 | 
						|
Can match the C<serial> field as a substring.
 | 
						|
 | 
						|
=item class
 | 
						|
 | 
						|
Will match exactly the C<class> field.
 | 
						|
 | 
						|
=item ips
 | 
						|
 | 
						|
List of Device IPs containing modules.
 | 
						|
 | 
						|
=back
 | 
						|
 | 
						|
=cut
 | 
						|
 | 
						|
sub search_by_field {
 | 
						|
    my ( $rs, $p, $attrs ) = @_;
 | 
						|
 | 
						|
    die "condition parameter to search_by_field must be hashref\n"
 | 
						|
        if ref {} ne ref $p
 | 
						|
            or 0 == scalar keys %$p;
 | 
						|
 | 
						|
    my $op = $p->{matchall} ? '-and' : '-or';
 | 
						|
 | 
						|
    return $rs->search_rs( {}, $attrs )->search(
 | 
						|
        {   $op => [
 | 
						|
                (   $p->{description}
 | 
						|
                    ? ( 'me.description' =>
 | 
						|
                            { '-ilike' => "\%$p->{description}\%" } )
 | 
						|
                    : ()
 | 
						|
                ),
 | 
						|
                (   $p->{name}
 | 
						|
                    ? ( 'me.name' => { '-ilike' => "\%$p->{name}\%" } )
 | 
						|
                    : ()
 | 
						|
                ),
 | 
						|
                (   $p->{type}
 | 
						|
                    ? ( 'me.type' => { '-ilike' => "\%$p->{type}\%" } )
 | 
						|
                    : ()
 | 
						|
                ),
 | 
						|
                (   $p->{model}
 | 
						|
                    ? ( 'me.model' => { '-ilike' => "\%$p->{model}\%" } )
 | 
						|
                    : ()
 | 
						|
                ),
 | 
						|
                (   $p->{serial}
 | 
						|
                    ? ( 'me.serial' => { '-ilike' => "\%$p->{serial}\%" } )
 | 
						|
                    : ()
 | 
						|
                ),
 | 
						|
 | 
						|
                (   $p->{class}
 | 
						|
                    ? ( 'me.class' => { '-in' => $p->{class} } )
 | 
						|
                    : ()
 | 
						|
                ),
 | 
						|
                ( $p->{ips} ? ( 'me.ip' => { '-in' => $p->{ips} } ) : () ),
 | 
						|
            ],
 | 
						|
        }
 | 
						|
    );
 | 
						|
}
 | 
						|
 | 
						|
1;
 |