OSDN Git Service

b44326c5d0719d60303cef6264ae1652f24e7c79
[newslash/newslash.git] / src / newslash_web / lib / Newslash / Model / Discussions.pm
1 package Newslash::Model::Discussions;
2 use Newslash::Model::Base -base;
3
4 use Data::Dumper;
5 use Mojo::Log;
6
7 #========================================================================
8
9 =head2 select($query_type, $value)
10
11 get a discussion.
12
13 =over 4
14
15 =item Parameters
16
17 =over 4
18
19 =item $query_type
20
21 query key, one of "id", "sid", "stoid"
22
23 =item $value
24
25 value for query
26
27 =back
28
29 =item Return value
30
31 HASH of discussion contents
32
33 =back
34
35 =cut
36
37 sub select {
38   my ($self, $query_type, $value) = @_;
39
40   if ($query_type !~ m/\A(id|sid|stoid)\z/) {
41     return undef;
42   }
43
44   my $dbh = $self->connect_db;
45   my $sql = <<"EOSQL";
46 SELECT discussions.*
47   FROM discussions
48   WHERE discussions.$query_type = ?
49 EOSQL
50
51   my $sth = $dbh->prepare($sql);
52
53   $sth->execute($value);
54   my $discuss = $sth->fetchrow_hashref;
55   $sth->finish;
56   $dbh->disconnect();
57
58   if (!$discuss) {
59     return undef;
60   }
61   return $discuss;
62 }
63
64 #========================================================================
65
66 =head2 create(\%options)
67
68 create a discussion.
69
70 =over 4
71
72 =item Parameters
73
74 =over 4
75
76 =item \%options
77
78 options
79
80 =item Return value
81
82 discussion id
83
84 =back
85
86 =cut
87
88 # extract from "discussion_kinds" table
89 my $discussion_kinds = {
90                         feed => 7,
91                         journal => 3,
92                         "journal-story" => 4,
93                         poll => 5,
94                         project => 8,
95                         story => 1,
96                         submission => 6,
97                         user_createduse => 2
98                        };
99
100 sub create {
101     my ($self, $params, $options) = @_;
102     if (!$params
103         || !$params->{title}
104         || length $params->{title} == 0
105         || !$params->{url}) {
106         return undef;
107     }
108     $options ||= {};
109     my $default_comment_status = "enabled";
110     my $mainpage_skid = 1; # mainpage
111
112     my $dkid = 1;
113     if ($params->{kind}) {
114         # getDescriptions('discussion_kinds') method is used in slash's original implement,
115         # but here, use static table.
116         $dkid = $discussion_kinds->{$params->{kind}} || 1;
117     }
118     my $uid = $params->{uid} || 0;
119
120     my $dbh = $options->{dbh} || $self->connect_db;
121     my $sql = <<"EOSQL";
122 INSERT INTO discussions
123     (dkid, stoid, sid, title, url, topic, ts, type, uid, primaryskid, commentstatus)
124   VALUES
125     (?,    ?,     ?,   ?,     ?,   ?,     ?,  ?,    ?,   ?,           ?)
126 EOSQL
127     my $rs = $dbh->do($sql, undef,
128                       $dkid, #dkid
129                       $params->{stoid} || 0,
130                       $params->{sid} || 0,
131                       $params->{title},
132                       $params->{url},
133                       $params->{topic} || 0,
134                       $params->{ts},
135                       $params->{type} || "open", #type
136                       $uid, #uid
137                       $params->{primaryskid} || $mainpage_skid,
138                       $params->{commentstatus} || $default_comment_status,
139                      );
140     my $discussion_id = 0;
141     if ($rs) {
142         $discussion_id = $dbh->last_insert_id(undef, undef, undef, undef);
143     } else {
144         $self->set_error($dbh->{mysql_errno});
145     }
146
147     if (!$options->{dbh}) {
148         $dbh->disconnect();
149     }
150
151     if (!$discussion_id) {
152         return undef;
153     }
154     return $discussion_id;
155 }
156
157
158 1;