[Cpan-forum-commit] rev 212 - in trunk: lib/CPAN/Forum/DB lib/CPAN/Forum/RM templates

svn at pti.co.il svn at pti.co.il
Wed Aug 30 19:03:45 IDT 2006


Author: gabor
Date: 2006-08-30 19:03:44 +0300 (Wed, 30 Aug 2006)
New Revision: 212

Modified:
   trunk/lib/CPAN/Forum/DB/Posts.pm
   trunk/lib/CPAN/Forum/RM/Notify.pm
   trunk/templates/notes.tmpl
Log:
untested rss feed of threads
untesdted partial atom feed


Modified: trunk/lib/CPAN/Forum/DB/Posts.pm
===================================================================
--- trunk/lib/CPAN/Forum/DB/Posts.pm	2006-08-30 09:56:17 UTC (rev 211)
+++ trunk/lib/CPAN/Forum/DB/Posts.pm	2006-08-30 16:03:44 UTC (rev 212)
@@ -10,10 +10,11 @@
 __PACKAGE__->has_a(uid    => "CPAN::Forum::DB::Users");
 __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(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__->set_sql(latest         => "SELECT __ESSENTIAL__ FROM __TABLE__ ORDER BY DATE DESC LIMIT %s");
+__PACKAGE__->set_sql(latest_threads => "SELECT __ESSENTIAL__ FROM __TABLE__ WHERE parent is NULL ORDER BY DATE DESC LIMIT ?");
+__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{

Modified: trunk/lib/CPAN/Forum/RM/Notify.pm
===================================================================
--- trunk/lib/CPAN/Forum/RM/Notify.pm	2006-08-30 09:56:17 UTC (rev 211)
+++ trunk/lib/CPAN/Forum/RM/Notify.pm	2006-08-30 16:03:44 UTC (rev 212)
@@ -77,40 +77,49 @@
 =cut
 
 sub rss {
-    my $self = shift;
-    
-    my $limit  = $self->config("rss_size") || 10;
-    my @params = @{$self->param("path_parameters")};
-    my $it;
-    if (@params > 1) {
-        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 });
-            $it = CPAN::Forum::DB::Posts->search(gid => $group->id, {order_by => 'date DESC'});
-        }
-        elsif ($params[0] eq 'author') {
-            my $pauseid = uc $params[1];
-            $self->log->debug("rss of author: '$pauseid'");
-            $it = CPAN::Forum::DB::Posts->search_post_by_pauseid($pauseid);
-        }
-        else {
-            $self->log->warning("Invalid rss feed requested for $params[0]");
-            return $self->notes('no_such_rss_feed');
-        }
+    my ($self) = @_;
+    $self->_feed('rss');
+}
+
+sub atom {
+    my ($self) = @_;
+    $self->_feed('atom');
+}
+
+sub _feed {
+    my ($self, $type) = @_;
+
+    die "invalid _feed call '$type'" 
+        if not defined $type or $type ne 'rss' or $type ne 'atom';
+
+    my $limit  = $self->config("${type}_size") || 10;
+    my $it = $self->get_feed($limit);
+    if ($it) {
+        my $call = "generate_$type";
+        return $self->$call($it, $limit);
     }
     else {
-        $it = CPAN::Forum::DB::Posts->retrieve_latest($limit);
+        $self->log->warning("Invalid $type feed requested for $params[0] $ENV{PATH_INFO}");
+        return $self->notes('no_such_${type}_feed');
     }
+}
 
+sub generate_atom {
+    # TODO
+    die "TODO";
+}
+
+
+sub generate_rss {
+    my ($self, $it, $limit) = @_;
+
     require XML::RSS::SimpleGen;
     my $url = "http://$ENV{HTTP_HOST}/";
     my $rss = XML::RSS::SimpleGen->new( $url, "CPAN Forum", "Discussing Perl CPAN modules");
     $rss->language( 'en' );
 
-    my $admin = CPAN::Forum::DB::Users->retrieve(1); # TODO this is a hard coded user id of the administrator !
-    # and this reveals the e-mail of the administrator. not a good idea I guess.
-    $rss->webmaster($admin->email);
+    # TODO: replace this e-mail address with a configurable value
+    $rss->webmaster('admin at cpanforum.com');
 
     while (my $post = $it->next() and $limit--) {
         my $title = sprintf "[%s] %s", $post->gid->name, $post->subject;
@@ -122,7 +131,35 @@
     return $rss->as_string();
 }
 
+sub get_feed {
+    my ($self, $limit) = @_;
 
+    my @params = @{$self->param("path_parameters")};
+    my $it;
+    if (@params > 1) {
+    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) {
+            $it = CPAN::Forum::DB::Posts->search(gid => $group->id, {order_by => 'date DESC'});
+        }
+    }
+    elsif ($params[0] eq 'author') {
+        my $pauseid = uc($params[1]) || '';
+        $self->log->debug("rss of author: '$pauseid'");
+        if ($pauseid) {
+            $it = CPAN::Forum::DB::Posts->search_post_by_pauseid($pauseid);
+        }
+    }
+    elsif ($params[0] eq 'all') {
+        $it = CPAN::Forum::DB::Posts->retrieve_latest($limit);
+    }
+    elsif ($params[0] eq 'threads') {
+        $it = CPAN::Forum::DB::Posts->search_latest_threads($limit);
+    }
+    return $it;
+}
 
 1;
 

Modified: trunk/templates/notes.tmpl
===================================================================
--- trunk/templates/notes.tmpl	2006-08-30 09:56:17 UTC (rev 211)
+++ trunk/templates/notes.tmpl	2006-08-30 16:03:44 UTC (rev 212)
@@ -36,5 +36,11 @@
 </p>
 </TMPL_IF>
 
+<TMPL_IF no_such_atom_feed>
+<p>
+No such Atom feed.
+</p>
+</TMPL_IF>
+
 <TMPL_INCLUDE NAME="footer.tmpl">
 



More information about the Cpan-forum-commit mailing list