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',
inflate => sub { DateTime->from_epoch( epoch => $_[0] ) },
deflate => 'epoch',
);
}
sub set_icon {
my ($self,$icon)=@_;
$self->icon(encode_base64($icon||''));
}
sub get_icon {
my ($self)=@_;
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();
if (scalar uniq(@link_tags,@tags) == scalar @link_tags) {
push @result,$link;
}
}
return @result;
}
__PACKAGE__->has_many( tags => ['Bookmarks::M::DB::LinksTags' => 'tag'] );
1;