From 45d560a6dc56462a4338e90a8174a02a0a00302d Mon Sep 17 00:00:00 2001 From: dakkar Date: Wed, 19 Oct 2005 19:34:59 +0000 Subject: relazioni, e inizio lavori --- lib/Bookmarks.pm | 2 +- lib/Bookmarks/C/Main.pm | 8 +++++++- lib/Bookmarks/M/DB.pm | 11 +++++++++-- lib/Bookmarks/M/DB/Links.pm | 9 +++++++++ lib/Bookmarks/M/DB/LinksTags.pm | 3 +++ lib/Bookmarks/M/DB/Tags.pm | 32 ++++++++++++++++++++++++++++++++ 6 files changed, 61 insertions(+), 4 deletions(-) diff --git a/lib/Bookmarks.pm b/lib/Bookmarks.pm index f81ec80..fb270bd 100644 --- a/lib/Bookmarks.pm +++ b/lib/Bookmarks.pm @@ -1,7 +1,7 @@ package Bookmarks; use strict; -use Catalyst qw/-Debug Prototype/; +use Catalyst qw/-Debug Prototype DefaultEnd/; our $VERSION = '0.01'; diff --git a/lib/Bookmarks/C/Main.pm b/lib/Bookmarks/C/Main.pm index 63744c1..7182a9e 100644 --- a/lib/Bookmarks/C/Main.pm +++ b/lib/Bookmarks/C/Main.pm @@ -25,7 +25,13 @@ Catalyst component. sub default : Private { my ( $self, $c ) = @_; - $c->res->output('Congratulations, Bookmarks::C::Main is on Catalyst!'); + $c->res->redirect($c->req->base,'/tags'); +} + +sub tags : Global { + my ( $self, $c ) = @_; + $c->stash->{template}='tags'; + $c->stash->{tags}=[Bookmarks::M::DB::Tags->get_all_tags_by_popularity()]; } =back diff --git a/lib/Bookmarks/M/DB.pm b/lib/Bookmarks/M/DB.pm index 44d7498..a31a25e 100644 --- a/lib/Bookmarks/M/DB.pm +++ b/lib/Bookmarks/M/DB.pm @@ -11,10 +11,17 @@ __PACKAGE__->config( user => '', password => '', options => {}, - relationships => 1 + relationships => 1, + additional_base_classes => [ + qw( + Class::DBI::AbstractSearch + Class::DBI::Plugin::DeepAbstractSearch + Class::DBI::Plugin::AbstractCount + Class::DBI::Plugin::Pager + ) + ], ); - =head1 NAME Bookmarks::M::DB - CDBI Model Component diff --git a/lib/Bookmarks/M/DB/Links.pm b/lib/Bookmarks/M/DB/Links.pm index 7b8928f..851d9a3 100644 --- a/lib/Bookmarks/M/DB/Links.pm +++ b/lib/Bookmarks/M/DB/Links.pm @@ -2,6 +2,15 @@ package Bookmarks::M::DB::Links; use strict; +for my $col_name (qw(add_date last_access_date)) { + __PACKAGE__->has_a( $col_name => 'DateTime', + inflate => sub { DateTime->from_epoch( epoch => $_ ) }, + deflate => 'epoch', + ); +} + +__PACKAGE__->has_many( tags => [Bookmarks::M::DB::LinkTags => 'tag'] ); + =head1 NAME Bookmarks::M::DB::Links - CDBI Model Component Table Class diff --git a/lib/Bookmarks/M/DB/LinksTags.pm b/lib/Bookmarks/M/DB/LinksTags.pm index df85fe7..448927e 100644 --- a/lib/Bookmarks/M/DB/LinksTags.pm +++ b/lib/Bookmarks/M/DB/LinksTags.pm @@ -2,6 +2,9 @@ package Bookmarks::M::DB::LinksTags; use strict; +__PACKAGE__->has_a( link => 'Bookmarks::M::DB::Links' ); +__PACKAGE__->has_a( tag => 'Bookmarks::M::DB::Tags' ); + =head1 NAME Bookmarks::M::DB::LinksTags - CDBI Model Component Table Class diff --git a/lib/Bookmarks/M/DB/Tags.pm b/lib/Bookmarks/M/DB/Tags.pm index 3011510..e9057a8 100644 --- a/lib/Bookmarks/M/DB/Tags.pm +++ b/lib/Bookmarks/M/DB/Tags.pm @@ -2,6 +2,38 @@ package Bookmarks::M::DB::Tags; use strict; +__PACKAGE__->has_many( links => [Bookmarks::M::DB::LinkTags => 'link'] ); + +__PACKAGE__->set_sql('related_tags' <<'END_SQL'); +SELECT tags.pk + FROM tags, links_tags lt1, links_tags lt2 + WHERE tags.pk = lt1.tag + AND lt2.link = lt2.link + AND lt2.tag = ? +END_SQL + +__PACKAGE__->set_sql('popularity' <<'END_SQL'); +SELECT tags.pk, COUNT(links_tags.link) AS how_many + FROM tags, links_tags + WHERE tags.pk = links_tags.tag +ORDER BY how_many +END_SQL + +sub count_links { + my ($self)=@_; + return scalar $self->links(); +} + +sub related_tags { + my ($self)=@_; + + return $self->search_related_tags($self->pk()); +} + +sub get_all_tags_by_popularity { + return $_[0]->search_popularity(); +} + =head1 NAME Bookmarks::M::DB::Tags - CDBI Model Component Table Class -- cgit v1.2.3