[Cpan-forum-commit] rev 245 - in trunk: . lib/CPAN/Forum/DB lib/CPAN/Forum/RM
svn at pti.co.il
svn at pti.co.il
Fri Jul 6 08:26:31 IDT 2007
Author: gabor
Date: 2007-07-06 08:26:31 +0300 (Fri, 06 Jul 2007)
New Revision: 245
Modified:
trunk/
trunk/lib/CPAN/Forum/DB/Posts.pm
trunk/lib/CPAN/Forum/RM/Notify.pm
Log:
replace the Class::DBI calls by plain DBI calls in the rss and atom feed generations
Property changes on: trunk
___________________________________________________________________
Name: svk:merge
- 7bc34947-122d-0410-bc5a-f898d2bb5f81:/local/cpan-forum:4116
8c4c90e1-83eb-0310-96eb-e7cb62807872:/local/cpan-forum:12752
+ 7bc34947-122d-0410-bc5a-f898d2bb5f81:/local/cpan-forum:4117
8c4c90e1-83eb-0310-96eb-e7cb62807872:/local/cpan-forum:12752
Modified: trunk/lib/CPAN/Forum/DB/Posts.pm
===================================================================
--- trunk/lib/CPAN/Forum/DB/Posts.pm 2007-07-06 05:26:15 UTC (rev 244)
+++ trunk/lib/CPAN/Forum/DB/Posts.pm 2007-07-06 05:26:31 UTC (rev 245)
@@ -12,33 +12,12 @@
__PACKAGE__->has_a(gid => "CPAN::Forum::DB::Groups");
__PACKAGE__->set_sql(latest => "SELECT __ESSENTIAL__ FROM __TABLE__ ORDER BY DATE DESC LIMIT %s");
-#__PACKAGE__->set_sql(latest_threads => "SELECT A.id, A.thread, A.date FROM posts A WHERE
-# thread IN (SELECT DISTINCT B.thread FROM posts B ORDER BY B.date DESC LIMIT ?)
-# AND
-# id IN (SELECT max(id) FROM posts C WHERE C.thread=A.thread)
-# ORDER BY A.date DESC");
-__PACKAGE__->set_sql(latest_threads => "SELECT A.id, A.thread, A.date FROM posts A WHERE
- thread IN (
- SELECT DISTINCT X.thread FROM posts X WHERE X.thread IN (
- SELECT B.thread FROM posts B ORDER BY B.date DESC LIMIT ?))
- AND
- id IN (SELECT max(id) FROM posts C WHERE C.thread=A.thread)
- ORDER BY A.date DESC");
-
__PACKAGE__->set_sql(count_thread => "SELECT count(*) FROM __TABLE__ WHERE thread=%s");
__PACKAGE__->set_sql(count_where => "SELECT count(*) FROM __TABLE__ WHERE %s='%s'");
__PACKAGE__->set_sql(count_like => "SELECT count(*) FROM __TABLE__ WHERE %s LIKE '%s'");
#__PACKAGE__->add_constraint('subject_too_long', subject => sub { length $_[0] <= 70 and $_[0] !~ /</});
#__PACKAGE__->add_constraint('text_format', text => \&check_text_format);
-__PACKAGE__->set_sql(post_by_pauseid => qq{
- SELECT posts.id id
- FROM posts
- WHERE gid IN (
- SELECT DISTINCT groups.id
- FROM groups, authors
- WHERE groups.pauseid=authors.id and authors.pauseid=?)
- ORDER BY date DESC});
__PACKAGE__->set_sql(stat_posts_by_group => qq{
SELECT COUNT(*) cnt, groups.name gname
FROM posts,groups
@@ -56,14 +35,84 @@
ORDER BY cnt DESC
LIMIT ?
});
+my $MORE_SQL = 'groups.name group_name, users.fname user_fname, users.lname user_lname, users.username user_username';
sub retrieve_latest {
- my ($class, $count) = @_;
-
-# $where = $where ? "WHERE $where" : "";
- return $class->sth_to_objects($class->sql_latest($count));
+ my ($self, $limit) = @_;
+
+ $limit ||= 10;
+ my $sql = "SELECT posts.id id, posts.subject,
+ $MORE_SQL
+ FROM posts, groups, users
+ WHERE posts.gid=groups.id AND posts.uid=users.id
+ ORDER BY date DESC LIMIT ?";
+ #$self->log->debug("SQL: $sql");
+
+ return $self->_fetch_arrayref_of_hashes($sql, $limit);
}
+sub search_post_by_groupname {
+ my ($self, $groupname, $limit) = @_;
+
+ return [] if not $groupname;
+ $limit ||= 10;
+ my $sql = qq{SELECT posts.id id, posts.subject,
+ $MORE_SQL
+ FROM posts, groups, users
+ WHERE groups.name=?
+ AND posts.gid=groups.id AND posts.uid=users.id
+ ORDER BY date DESC LIMIT ?};
+ return $self->_fetch_arrayref_of_hashes($sql, $groupname, $limit);
+}
+sub search_post_by_pauseid {
+ my ($self, $pauseid, $limit) = @_;
+
+ return [] if not $pauseid;
+ $limit ||= 10;
+ my $sql = qq{SELECT posts.id id, posts.subject,
+ $MORE_SQL
+ FROM posts, groups, users
+ WHERE gid IN (
+ SELECT DISTINCT groups.id
+ FROM groups, authors
+ WHERE groups.pauseid=authors.id and authors.pauseid=?)
+ AND posts.gid=groups.id AND posts.uid=users.id
+ ORDER BY date DESC LIMIT ?};
+ return $self->_fetch_arrayref_of_hashes($sql, $pauseid, $limit);
+}
+
+
+sub search_latest_threads {
+ my ($self, $limit) = @_;
+
+ $limit ||= 10;
+ my $sql = "SELECT A.id, A.thread, A.subject subject, A.date,
+ $MORE_SQL
+ FROM posts A, groups, users
+ WHERE
+ thread IN (
+ SELECT DISTINCT X.thread FROM posts X WHERE X.thread IN (
+ SELECT B.thread FROM posts B ORDER BY B.date DESC LIMIT ?))
+ AND
+ A.id IN (SELECT max(id) FROM posts C WHERE C.thread=A.thread)
+ AND A.gid=groups.id AND A.uid=users.id
+ ORDER BY A.date DESC";
+
+ return $self->_fetch_arrayref_of_hashes($sql, $limit);
+}
+sub _fetch_arrayref_of_hashes {
+ my ($self, $sql, @args) = @_;
+
+ my $dbh = CPAN::Forum::DBI::db_Main();
+ my $sth = $dbh->prepare($sql);
+ $sth->execute(@args);
+ my @values;
+ while (my $hr = $sth->fetchrow_hashref) {
+ push @values, $hr;
+ }
+ return \@values;
+}
+
sub mysearch {
my ($self, $params) = @_;
Modified: trunk/lib/CPAN/Forum/RM/Notify.pm
===================================================================
--- trunk/lib/CPAN/Forum/RM/Notify.pm 2007-07-06 05:26:15 UTC (rev 244)
+++ trunk/lib/CPAN/Forum/RM/Notify.pm 2007-07-06 05:26:31 UTC (rev 245)
@@ -118,17 +118,17 @@
id => "$url/",
);
- if ($it) {
- while (my $post = $it->next() and $limit--) {
- my $title = sprintf "[%s] %s", $post->gid->name, $post->subject;
+ if (@$it) {
+ foreach my $post (@$it) {
+ my $title = sprintf "[%s] %s", $post->{group_name}, $post->{subject};
my $author = {
name => sprintf("%s %s (%s)",
- ($post->uid->fname || ''),
- ($post->uid->lname || ''),
- $post->uid->username),
- uri => "$url/users/" . $post->uid->username,
+ ($post->{user_fname} || ''),
+ ($post->{user_lname} || ''),
+ $post->{user_username}),
+ uri => "$url/users/" . $post->{user_username},
};
- my $link = "$url/posts/" . $post->id();
+ my $link = "$url/posts/" . $post->{id};
$feed->add_entry(
author => $author,
title => $title, # TODO _subject_escape ?
@@ -162,10 +162,14 @@
# TODO: replace this e-mail address with a configurable value
$rss->webmaster('admin at cpanforum.com');
- if ($it) {
- while (my $post = $it->next() and $limit--) {
- my $title = sprintf "[%s] %s", $post->gid->name, $post->subject;
- $rss->item("$url/posts/" . $post->id(), $title); # TODO _subject_escape ?
+ if (@$it) {
+ #while (my $post = $it->next() and $limit--) {
+ # my $title = sprintf "[%s] %s", $post->gid->name, $post->subject;
+ # $rss->item("$url/posts/" . $post->id(), $title); # TODO _subject_escape ?
+ #}
+ foreach my $post (@$it) {
+ my $title = sprintf "[%s] %s", $post->{group_name}, $post->{subject};
+ $rss->item("$url/posts/" . $post->{id}, $title); # TODO _subject_escape ?
}
}
else {
@@ -184,32 +188,28 @@
my @params = @{$self->param("path_parameters")};
- return if not @params;
+ return [] if not @params;
if ($params[0] eq 'dist') {
my $dist = $params[1] || '';
$self->log->debug("rss of dist: '$dist'");
- my ($group) = CPAN::Forum::DB::Groups->search({ name => $dist });
- if ($group) {
- $self->log->debug("aha");
- return scalar CPAN::Forum::DB::Posts->search(gid => $group->id, {order_by => 'date DESC'});
- }
+ return CPAN::Forum::DB::Posts->search_post_by_groupname($dist, $limit); #gid => $group->id, {order_by => 'date DESC'});
}
if ($params[0] eq 'author') {
my $pauseid = uc($params[1]) || '';
if ($pauseid) {
$self->log->debug("rss of author: '$pauseid'");
- return scalar CPAN::Forum::DB::Posts->search_post_by_pauseid($pauseid);
+ return CPAN::Forum::DB::Posts->search_post_by_pauseid($pauseid, $limit);
}
}
if ($params[0] eq 'all') {
- return scalar CPAN::Forum::DB::Posts->retrieve_latest($limit);
+ return CPAN::Forum::DB::Posts->retrieve_latest($limit);
}
if ($params[0] eq 'threads') {
- return scalar CPAN::Forum::DB::Posts->search_latest_threads($limit);
+ return CPAN::Forum::DB::Posts->search_latest_threads($limit);
}
return;
More information about the Cpan-forum-commit
mailing list