summaryrefslogtreecommitdiff
path: root/lib/Bookmarks/C/Main.pm
blob: 2cab5eeaa2ef92443b52f1b290eb0c2d69078308 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package Bookmarks::C::Main; 
 
use strict;
use base 'Catalyst::Base';
use Bookmarks::Utils;
use YAML;
 
=head1 NAME
 
Bookmarks::C::Main - Catalyst component
 
=head1 SYNOPSIS
 
See L<Bookmarks>
 
=head1 DESCRIPTION
 
Catalyst component.
 
=head1 METHODS
 
=over 4
 
=item default
 
=cut
 
sub tags : Global {
    my ( $self$c ) = @_;
    $c->stash->{template}='tags';
    $c->stash->{tags}=[Bookmarks::M::DB::Tags->get_all_tags_by_popularity()];
}
 
sub tag : Regex('^tag/(.*)$') {
    my ( $self$c ) = @_;
 
    my @tagnames=split /\+/,$c->req->snippets->[0];
    my ($tagset)=Bookmarks::M::TagSet->retrieve({tags=>[@tagnames]});
    if (!defined $tagset) {
        $c->stash->{tagnames}=[@tagnames];
        $c->stash->{template}='notag';
    }
    else {
        my @links=$tagset->ordered_links();
        my @related_tags=$tagset->related_tags();
        $c->stash->{tagset}=$tagset;
        $c->stash->{links}=[@links];
        $c->stash->{related}=[@related_tags];
        $c->stash->{template}='links';
    }
}
 
sub icon : Global {
    my ( $self$c ) = @_;
 
    my $link=Bookmarks::M::DB::Links->retrieve($c->req->param('link'));
    if ($link->get_icon()) {
        $c->res->content_type('image/x-icon');
        $c->res->body($link->get_icon());
    }
    else {
        $c->res->status(404);
        $c->res->body('nonce');
    }
}
 
sub favicon : Path('favicon.ico') {
    my ( $self$c ) = @_;
    $c->res->status(404);
    $c->res->body('nonce');
}
 
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->last_access_date(time());
    $link->update();
 
    $c->res->status(302);
    $c->res->location($link->url());
}
 
sub add : Global {
    my ( $self$c ) = @_;
 
    my %pre_link=();
    for my $i (qw(url title descr)) {
        $pre_link{$i}=$c->req->param($i);
    }
    my @tags=split /[ +]/,($c->req->param('tag')||'');
 
    print {*STDERR} Dump(\%pre_link);
    print {*STDERR} Dump($c->req);
 
    # GET: prepare the form from the URL params 
    if ($c->req->method eq 'GET') {
        $c->stash->{link}=\%pre_link;
        $c->stash->{tags}=\@tags;
        $c->stash->{template}='add_form';
    }
    # 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);
        }
        $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(),
            });
        }
 
        if ($c->req->param('close')) {
            $c->stash->{template}='closewin';
        }
        else {
            $c->res->redirect($c->req->base.'tags');
        }
    }
}
 
=back
 
 
=head1 AUTHOR
 
A clever guy
 
=head1 LICENSE
 
This library is free software . You can redistribute it and/or modify
it under the same terms as perl itself.
 
=cut
 
1;