relocate repo files so ND2 is the only code
This commit is contained in:
107
lib/App/Netdisco/DB/ResultSet/DeviceModule.pm
Normal file
107
lib/App/Netdisco/DB/ResultSet/DeviceModule.pm
Normal file
@@ -0,0 +1,107 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user