=cut
sub select {
- my ($self, $query_type, $value) = @_;
- my $target = $query_type;
-
- if ($target !~ m/\A(discussion_id|cid|pid)\z/) {
- return undef;
+ my $self = shift;
+ my $params = { @_ };
+
+ my @clauses;
+ my @values;
+ my $unique = 0;
+ for my $k (qw|cid|) {
+ if (defined $params->{$k}) {
+ push @clauses, "$k = ?";
+ push @values, $params->{$k};
+ $unique = 1;
+ }
}
- if ($target eq 'discussion_id') {
- $target = 'sid';
+ for my $k (qw|discussion_id pid|) {
+ if (defined $params->{$k}) {
+ if ($k eq 'discussion_id') { # discussion_id is sid
+ push @clauses, "comments.sid = ?";
+ }
+ else {
+ push @clauses, "comments.$k = ?";
+ }
+ push @values, $params->{$k};
+ }
}
+ return if (@clauses == 0);
+ my $where_clause = join(' ', @clauses);
+
my $dbh = $self->connect_db;
my $sql = <<"EOSQL";
SELECT comments.*, comment_text.*, users.nickname AS author, users.sig AS signature
FROM comments
LEFT JOIN comment_text ON comments.cid = comment_text.cid
LEFT JOIN users ON comments.uid = users.uid
- WHERE comments.$target = ?
+ WHERE $where_clause
ORDER BY comments.cid ASC;
EOSQL
my $sth = $dbh->prepare($sql);
- $sth->execute($value);
+ $sth->execute(@values);
my $comments = $sth->fetchall_arrayref(+{});
- $sth->finish;
+ if (!defined $comments) {
+ $self->set_error($dbh->errstr, $dbh->err);
+ $dbh->disconnect;
+ return;
+ }
+ $dbh->disconnect;
if (!$comments) {
- $dbh->disconnect();
- return undef;
+ return;
}
- if ($query_type eq 'cid') {
+ if ($unique) {
return $comments->[0];
}
my $signature = $self->generate_signature($params->{comment});
my $users = $self->new_instance_of("Newslash::Model::Users");
- use Newslash::Model::Moderations;
+ #use Newslash::Model::Moderations;
my $moderations = $self->new_instance_of("Newslash::Model::Moderations");
my $user_param = $users->select(uid => $user->{uid}, target => 'param');