summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authordakkar <dakkar@luxion>2005-11-10 20:19:29 +0000
committerdakkar <dakkar@luxion>2005-11-10 20:19:29 +0000
commitcac81c5c401813e609a9b3345eec91a570071fab (patch)
treef45a7079a2ed6f09413940299fc0848908fbe68d /lib
parent * cambiato ordinamento dei tag (ora è sempre alfabetico) (diff)
downloadBookmarks-cac81c5c401813e609a9b3345eec91a570071fab.tar.gz
Bookmarks-cac81c5c401813e609a9b3345eec91a570071fab.tar.bz2
Bookmarks-cac81c5c401813e609a9b3345eec91a570071fab.zip
aggiunta la funzionalità di ricerca, e "finiti" gli stili
Diffstat (limited to 'lib')
-rw-r--r--lib/Bookmarks.pm2
-rw-r--r--lib/Bookmarks/C/Main.pm26
-rw-r--r--lib/Bookmarks/M/DB/Links.pm24
3 files changed, 46 insertions, 6 deletions
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