OSDN Git Service

11840f18263b35f21f4d94f9e12911361b6cec10
[newslash/newslash.git] / src / newslash_web / lib / Newslash / Model / Users / Friends.pm
1 package Newslash::Model::Users::Friends;
2 use Newslash::Model::Base -base;
3
4 sub _get_friends {
5     my $self = shift;
6     my $uid = shift;
7     my $type = shift;
8     my $perceive = shift;
9     return if !$uid;
10
11     my $and_clause = "";
12     if ($type) {
13         $and_clause = 'people.type = ?';
14     }
15     elsif ($perceive) {
16         $and_clause = 'people.perceive = ?';
17     }
18
19     my $sql = <<"EOSQL";
20 SELECT users.* FROM users
21   JOIN people ON users.uid = people.person
22   WHERE people.uid = ? AND $and_clause
23 EOSQL
24
25     my $dbh = $self->connect_db;
26     my $sth = $dbh->prepare($sql);;
27     if ($type) {
28         $sth->execute($uid, $type);
29     }
30     elsif ($perceive) {
31         $sth->execute($uid, $perceive);
32     }
33
34     my $rs = $sth->fetchall_arrayref({});
35     $self->disconnect_db;
36     return if !$rs;
37
38     my @result = map { $self->new_instance_of('Users')->_create_user_object($_) } @$rs;
39     return \@result;
40 }
41
42
43 sub friends {
44     my $self = shift;
45     my $params = {@_};
46     return $self->_get_friends($params->{uid}, 'friend', '');
47 }
48
49 sub foes {
50     my $self = shift;
51     my $params = {@_};
52     return $self->_get_friends($params->{uid}, 'foe', '');
53 }
54
55 sub fans {
56     my $self = shift;
57     my $params = {@_};
58     return $self->_get_friends($params->{uid}, '', 'fan');
59 }
60
61 sub freaks {
62     my $self = shift;
63     my $params = {@_};
64     return $self->_get_friends($params->{uid}, '', 'freak');
65 }
66
67 1;