summaryrefslogtreecommitdiff
path: root/lib/Bookmarks/M/DB/Links.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Bookmarks/M/DB/Links.pm')
-rw-r--r--lib/Bookmarks/M/DB/Links.pm24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/Bookmarks/M/DB/Links.pm b/lib/Bookmarks/M/DB/Links.pm
index 5c0d37f..5103522 100644
--- a/lib/Bookmarks/M/DB/Links.pm
+++ b/lib/Bookmarks/M/DB/Links.pm
@@ -2,6 +2,7 @@ package Bookmarks::M::DB::Links;
use strict;
use MIME::Base64;
use Bookmarks::M::DB::LinksTags;
+use List::MoreUtils qw(uniq);
for my $col_name (qw(add_date last_access_date)) {
__PACKAGE__->has_a( $col_name => 'DateTime',
@@ -19,6 +20,29 @@ sub get_icon {
return decode_base64($self->icon()||'');
}
+sub search_complex {
+ my ($class, $query, @tags)=@_;
+
+ $query =~ s{^ +| +$}{}g;
+ $query =~ s{ +}{%}g;
+
+ my $iterator = $class->search_like(title => "%$query%", {order_by => 'access_count'});
+
+ my @result=();
+
+ while (my $link=$iterator->next()) {
+ my @link_tags = map {$_->pk} $link->tags();
+
+ # se @tags contiene roba non in @link_tags, i risultati sono diversi
+ # notare che @tags=() significa 'tutti'
+ if (scalar uniq(@link_tags,@tags) == scalar @link_tags) {
+ push @result,$link;
+ }
+ }
+
+ return @result;
+}
+
__PACKAGE__->has_many( tags => ['Bookmarks::M::DB::LinksTags' => 'tag'] );
=head1 NAME