From 27cff350e9e5fb832185bc14dee35b5b8f942a81 Mon Sep 17 00:00:00 2001 From: dakkar Date: Wed, 9 Nov 2005 17:14:54 +0000 Subject: =?UTF-8?q?=20*=20passati=20i=20template=20a=20HTML4,=20altrimenti?= =?UTF-8?q?=20l'autocompletamento=20non=20va=20=20*=20aggiunto=20autocompl?= =?UTF-8?q?etamento=20per=20i=20nomi=20di=20tag=20=20*=20migliorato=20il?= =?UTF-8?q?=20caricatore=20da=20YAML=20=20*=20aggiunto=20un=20convertitore?= =?UTF-8?q?=20XBEL=20->=20YAML=20=20*=20aggiunto=20campo=20'tipo=20icona'?= =?UTF-8?q?=20=20*=20aggiunta=20funzionalit=C3=A0=20di=20edit=20e=20delete?= =?UTF-8?q?=20di=20link=20=20*=20dopo=20ogni=20update=20di=20un=20link,=20?= =?UTF-8?q?i=20tag=20non=20pi=C3=B9=20riferiti=20vengono=20cancellati=20?= =?UTF-8?q?=20*=20migliorato=20il=20recupero=20favicon,=20con=20tipo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/Bookmarks.pm | 1 + lib/Bookmarks/C/Main.pm | 92 ++++++++++++++++++++++++++++++++++------------ lib/Bookmarks/M/DB/Tags.pm | 14 ++++++- lib/Bookmarks/Utils.pm | 16 ++++++-- lib/Bookmarks/V/TT.pm | 12 ------ 5 files changed, 95 insertions(+), 40 deletions(-) (limited to 'lib') diff --git a/lib/Bookmarks.pm b/lib/Bookmarks.pm index fb88958..810a64f 100644 --- a/lib/Bookmarks.pm +++ b/lib/Bookmarks.pm @@ -2,6 +2,7 @@ package Bookmarks; use strict; use Catalyst qw/-Debug Prototype DefaultEnd/; +use HTML::Element; our $VERSION = '0.01'; diff --git a/lib/Bookmarks/C/Main.pm b/lib/Bookmarks/C/Main.pm index b6170c0..d4c5a66 100644 --- a/lib/Bookmarks/C/Main.pm +++ b/lib/Bookmarks/C/Main.pm @@ -61,7 +61,7 @@ sub icon : Global { my $link=Bookmarks::M::DB::Links->retrieve($c->req->param('link')); my $icon=$link->get_icon(); if ($icon) { - $c->res->content_type('image/x-icon'); + $c->res->content_type($link->icon_type()); $c->res->body($icon); } else { @@ -100,31 +100,41 @@ sub add : Global { # POST: accept data and create link+tags elsif ($c->req->method eq 'POST') { my ($dblink)=Bookmarks::M::DB::Links->search({url=>$pre_link{url}}); - if (!defined $dblink) { # devo crearlo - $dblink=Bookmarks::M::DB::Links->create({}); - $dblink->add_date(time()); - $dblink->access_count(0); + + if (defined $dblink) { + Bookmarks::M::DB::LinksTags->search({ + link => $dblink->pk() + })->delete_all(); + } + + if (defined $dblink and $c->req->param('delete')) { + $dblink->delete(); } - $dblink->set(%pre_link); - $dblink->set_icon(Bookmarks::Utils::get_site_icon($pre_link{url})); - $dblink->update(); - - # tags - Bookmarks::M::DB::LinksTags->search({ - link => $dblink->pk() - })->delete_all(); - - for my $tagname (@tags) { - my $dbtag=Bookmarks::M::DB::Tags->find_or_create({ - name => $tagname, - }); - - Bookmarks::M::DB::LinksTags->find_or_create({ - tag => $dbtag->pk(), - link => $dblink->pk(), - }); + else { + if (!defined $dblink) { # devo crearlo + $dblink=Bookmarks::M::DB::Links->create({}); + $dblink->add_date(time()); + $dblink->access_count(0); + } + + $dblink->set(%pre_link); + $dblink->set_icon(Bookmarks::Utils::get_site_icon($pre_link{url})); + $dblink->update(); + + for my $tagname (@tags) { + my $dbtag=Bookmarks::M::DB::Tags->find_or_create({ + name => $tagname, + }); + + Bookmarks::M::DB::LinksTags->find_or_create({ + tag => $dbtag->pk(), + link => $dblink->pk(), + }); + } } + Bookmarks::M::DB::Tags->cleanup(); + if ($c->req->param('close')) { $c->stash->{template}='closewin'; } @@ -134,6 +144,28 @@ sub add : Global { } } +sub edit : Global { + my ( $self, $c ) = @_; + + my $link=Bookmarks::M::DB::Links->retrieve($c->req->param('link')); + + $c->stash->{link}=$link; + $c->stash->{tags}=[ map {$_->name()} $link->tags() ]; + $c->stash->{mode}='edit'; + $c->stash->{template}='add_form'; +} + +sub complete_tag : Global { + my ( $self, $c ) = @_; + + my $pretag=$c->req->param('tag'); + + my @tags=map { $_->name() } + Bookmarks::M::DB::Tags->search_like({name => "${pretag}%"}); + + $c->res->body($c->prototype->auto_complete_result(\@tags)); +} + =back @@ -202,6 +234,13 @@ sub link { return $uri->as_string(); } +sub edit_link { + my ($self, $link)=@_; + my $uri=URI->new($self->{base} . 'edit'); + $uri->query_form(link=>$link->pk()); + return $uri->as_string(); +} + sub add_action { my ($self)=@_; return URI->new( @@ -209,4 +248,11 @@ sub add_action { )->as_string(); } +sub tag_autocomplete { + my ($self)=@_; + return URI->new( + $self->{base} . 'complete_tag' + )->as_string(); +} + 1; diff --git a/lib/Bookmarks/M/DB/Tags.pm b/lib/Bookmarks/M/DB/Tags.pm index 3686a7d..cc675f7 100644 --- a/lib/Bookmarks/M/DB/Tags.pm +++ b/lib/Bookmarks/M/DB/Tags.pm @@ -22,7 +22,7 @@ GROUP BY links_tags.tag ORDER BY how_many DESC END_SQL -__PACKAGE__->columns(TEMP=> 'how_wany'); +__PACKAGE__->columns(TEMP=> 'how_many'); sub count_links { my ($self)=@_; @@ -52,6 +52,18 @@ sub ordered_links { return sort links_sorter @links; } +sub cleanup { + my ($class)=@_; + + my @tag_list=reverse $class->search_popularity(); + + while ($tag_list[0]->how_many() == 0) { + (shift @tag_list)->delete(); + } + + return; +} + =head1 NAME Bookmarks::M::DB::Tags - CDBI Model Component Table Class diff --git a/lib/Bookmarks/Utils.pm b/lib/Bookmarks/Utils.pm index fd0b68d..a876340 100644 --- a/lib/Bookmarks/Utils.pm +++ b/lib/Bookmarks/Utils.pm @@ -1,15 +1,17 @@ package Bookmarks::Utils; use strict; use warnings; -use LWP::Simple; +use LWP::UserAgent; use URI::URL; +my $ua=LWP::UserAgent->new(); + sub check_link { my ($url)=@_; return 1 if $url!~/^http:/; #my ($type,$length,$update,$expires,$server)=head($url); #return defined $type; - return scalar head($url); + return $ua->head($url)->is_success(); } sub get_site_icon { @@ -38,8 +40,14 @@ sub get_site_icon { print "Trovato: '$favicon'"; $favicon=URI::URL->new($favicon,$url)->abs->canonical->as_string; print ", ovvero '$favicon'\n"; - my $icon=get($favicon); - return $icon; + my $res=$ua->get($favicon); + + if ($res->is_success()) { + return ($res->decoded_content(),$res->header('Content-type')); + } + else { + return; + } } 1; diff --git a/lib/Bookmarks/V/TT.pm b/lib/Bookmarks/V/TT.pm index f2f8e7d..d2063b6 100644 --- a/lib/Bookmarks/V/TT.pm +++ b/lib/Bookmarks/V/TT.pm @@ -3,18 +3,6 @@ package Bookmarks::V::TT; use strict; use base 'Catalyst::View::TT'; -sub process { - my ( $self, $c ) = @_; - my $ret=$self->NEXT::process($c); - if ($ret==1 - and $c->res->content_type =~ m{text/html}) { - my $ct=$c->res->content_type; - $ct=~s{text/html}{application/xhtml+xml}; - $c->res->content_type($ct); - } - return $ret; -} - =head1 NAME Bookmarks::V::TT - TT View Component -- cgit v1.2.3