From cac81c5c401813e609a9b3345eec91a570071fab Mon Sep 17 00:00:00 2001 From: dakkar Date: Thu, 10 Nov 2005 20:19:29 +0000 Subject: =?UTF-8?q?aggiunta=20la=20funzionalit=C3=A0=20di=20ricerca,=20e?= =?UTF-8?q?=20"finiti"=20gli=20stili?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/Bookmarks.pm | 2 +- lib/Bookmarks/C/Main.pm | 26 +++++++++++++++++++++----- lib/Bookmarks/M/DB/Links.pm | 24 ++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/Bookmarks.pm b/lib/Bookmarks.pm index 63d6578..89aa0c9 100644 --- a/lib/Bookmarks.pm +++ b/lib/Bookmarks.pm @@ -1,7 +1,7 @@ package Bookmarks; use strict; -use Catalyst qw/-Debug Prototype DefaultEnd Static::Simple/; +use Catalyst qw/Prototype DefaultEnd Static::Simple/; use HTML::Element; our $VERSION = '0.01'; diff --git a/lib/Bookmarks/C/Main.pm b/lib/Bookmarks/C/Main.pm index d957c5d..83edfa9 100644 --- a/lib/Bookmarks/C/Main.pm +++ b/lib/Bookmarks/C/Main.pm @@ -76,7 +76,7 @@ sub jump : Global { my ( $self, $c ) = @_; my $link=Bookmarks::M::DB::Links->retrieve($c->req->param('link')); - $link->access_count($link->access_count()+1); + $link->access_count(($link->access_count()||0)+1); $link->last_access_date(time()); $link->update(); @@ -177,8 +177,17 @@ sub complete_tag : Global { $c->res->body($c->prototype->auto_complete_result(\@tags)); } -=back +sub search : Global { + my ( $self, $c ) = @_; + + my $query=$c->req->param('q'); + my @tags=split /\s+/,$c->req->param('tags'); + + my @links=Bookmarks::M::DB::Links->search_complex($query,@tags); + $c->stash->{links}=[ @links ]; + $c->stash->{template}='results'; +} =head1 AUTHOR @@ -207,10 +216,17 @@ sub stylesheet { )->as_string(); } -sub tag_info { - my ($self, $tag)=@_; +sub tags { + my ($self)=@_; + return URI->new( + $self->{base} . 'tags' + )->as_string(); +} + +sub search { + my ($self)=@_; return URI->new( - $self->{base} . 'tag-info/' . $tag->name() + $self->{base} . 'search' )->as_string(); } 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 -- cgit v1.2.3