diff options
Diffstat (limited to 'lib/Bookmarks/C/Main.pm')
-rw-r--r-- | lib/Bookmarks/C/Main.pm | 92 |
1 files changed, 69 insertions, 23 deletions
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; |