OSDN Git Service

fix user's fans/foes/anti page (#7641, #7642, #7643)
[newslash/newslash.git] / src / newslash_web / lib / Newslash / Web / Controller / User.pm
1 package Newslash::Web::Controller::User;
2 use Mojo::Base 'Mojolicious::Controller';
3 use Data::Dumper;
4 use List::Util qw(any);
5
6 sub _base_render {
7     my ($c, $tab, $f) = @_;
8     my $users = $c->model('users');
9     my $user = $c->stash('user');
10     my $the_user = $user;
11     my $nickname = $c->stash('nickname') || "";
12     $nickname =~ s/\A~(.*)\z/$1/;
13
14     if ($nickname) {
15         $the_user = $users->select(nickname => $nickname);
16         if (!$the_user) {
17             $c->render('Not found', status => '404');
18             return;
19         }
20     }
21     $the_user->{config} = $users->configs->select(uid => $the_user->{uid});
22     my $items = $f->($c, $the_user);
23
24     my $relation = 0;
25     if ($user->{uid} != $the_user->{uid}) {
26         my $friends = $user->{relations}->{friends};
27         my $foes = $user->{relations}->{foes};
28         if (any { $the_user->{uid} eq $_ } keys %$friends) {
29             $relation = 1;
30         }
31         if (any { $the_user->{uid} eq $_ } keys @$foes) {
32             $relation = 2;
33         }
34     }
35
36     my $page = { type => "user" };
37     my $content_type_table = { home => "recent",
38                                comments => "comment",
39                                journals => "journal",
40                                submissions => "submission"
41                              };
42     $page->{content_type} = $content_type_table->{$tab} || "user";
43
44     $c->render(template => "user/base",
45                page => $page,
46                user_tab => $tab,
47                items => $items,
48                the_user => $the_user,
49                relation => $relation
50               );
51     $c->stats->add_event_counter("userhome_view");
52
53 }
54
55 sub home {
56     my $c = shift;
57     my $query_func = sub {
58         my ($c, $the_user) = @_;
59         my $items = $c->model('timeline')->select(uid => $the_user->{uid}, limit => 10);
60         return $items;
61     };
62     $c->_base_render(home => $query_func);
63 }
64
65 sub journals {
66     my $c = shift;
67     my $query_func = sub {
68         my ($c, $the_user) = @_;
69         my $items = $c->model('journals')->select(uid => $the_user->{uid},
70                                                   order_by => { create_time => "DESC" },
71                                                   limit => 10);
72         return $items;
73     };
74     $c->_base_render(journals => $query_func);
75 }
76
77 sub comments {
78     my $c = shift;
79     my $query_func = sub {
80         my ($c, $the_user) = @_;
81         my $items = $c->model('comments')->select(uid => $the_user->{uid},
82                                                   order_by => { create_time => "DESC" },
83                                                   limit => 10);
84         return $items;
85     };
86     $c->_base_render(comments => $query_func);
87 }
88
89 sub submissions {
90     my $c = shift;
91     my $query_func = sub {
92         my ($c, $the_user) = @_;
93         my $items = $c->model('submissions')->select(uid => $the_user->{uid},
94                                                      order_by => { create_time => "DESC" },
95                                                      limit => 10);
96         return $items;
97     };
98     $c->_base_render(submissions => $query_func);
99 }
100
101 sub friends {
102     my $c = shift;
103     my $query_func = sub {
104         my ($c, $the_user) = @_;
105         my $items = $c->model('users')->friends->friends(uid => $the_user->{uid});
106         return $items;
107     };
108     $c->_base_render(friends => $query_func);
109 }
110
111 sub foes {
112     my $c = shift;
113     my $query_func = sub {
114         my ($c, $the_user) = @_;
115         my $items = $c->model('users')->friends->foes(uid => $the_user->{uid});
116         return $items;
117     };
118     $c->_base_render(foes => $query_func);
119 }
120
121 sub fans {
122     my $c = shift;
123     my $query_func = sub {
124         my ($c, $the_user) = @_;
125         my $items = $c->model('users')->friends->fans(uid => $the_user->{uid});
126         return $items;
127     };
128     $c->_base_render(fans => $query_func);
129 }
130
131 sub freaks {
132     my $c = shift;
133     my $query_func = sub {
134         my ($c, $the_user) = @_;
135         my $items = $c->model('users')->friends->freaks(uid => $the_user->{uid});
136         return $items;
137     };
138     $c->_base_render(freaks => $query_func);
139 }
140
141 sub achievements {
142     my $c = shift;
143     my $query_func = sub {
144         my ($c, $the_user) = @_;
145         my $items = $c->model('users')->achievements->select(uid => $the_user->{uid});
146         return $items;
147     };
148     $c->_base_render(achievements => $query_func);
149 }
150
151
152 1;
153