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

svn at pti.co.il svn at pti.co.il
Thu Jul 19 17:06:34 EEST 2007


Author: gabor
Date: 2007-07-19 17:06:34 +0300 (Thu, 19 Jul 2007)
New Revision: 262

Modified:
   trunk/
   trunk/lib/CPAN/Forum/DB/Tags.pm
   trunk/lib/CPAN/Forum/RM/Notify.pm
   trunk/templates/faq.tmpl
Log:
add rss feed of the tags



Property changes on: trunk
___________________________________________________________________
Name: svk:merge
   - 7bc34947-122d-0410-bc5a-f898d2bb5f81:/local/cpan-forum:4228
8c4c90e1-83eb-0310-96eb-e7cb62807872:/local/cpan-forum:12752
   + 7bc34947-122d-0410-bc5a-f898d2bb5f81:/local/cpan-forum:4229
8c4c90e1-83eb-0310-96eb-e7cb62807872:/local/cpan-forum:12752

Modified: trunk/lib/CPAN/Forum/DB/Tags.pm
===================================================================
--- trunk/lib/CPAN/Forum/DB/Tags.pm	2007-07-19 14:06:18 UTC (rev 261)
+++ trunk/lib/CPAN/Forum/DB/Tags.pm	2007-07-19 14:06:34 UTC (rev 262)
@@ -138,6 +138,17 @@
     return $self->_dump($sql); 
 }
 
+sub retrieve_latest {
+    my ($self, $limit) = @_;
+
+    my $sql = qq{SELECT tags.name tag, tag_cloud.stamp stamp, groups.name dist
+                 FROM tags,tag_cloud,groups
+                 WHERE tags.id=tag_cloud.tag_id AND tag_cloud.group_id=groups.id
+                 ORDER BY tag_cloud.stamp DESC
+                 LIMIT ?};
+    return $self->_fetch_arrayref_of_hashes($sql, $limit);
+}
+
 =head1 Design
 
 Every person can put any tage on any module

Modified: trunk/lib/CPAN/Forum/RM/Notify.pm
===================================================================
--- trunk/lib/CPAN/Forum/RM/Notify.pm	2007-07-19 14:06:18 UTC (rev 261)
+++ trunk/lib/CPAN/Forum/RM/Notify.pm	2007-07-19 14:06:34 UTC (rev 262)
@@ -2,6 +2,10 @@
 use strict;
 use warnings;
 
+use XML::RSS::SimpleGen;
+use XML::Atom::SimpleFeed;
+use URI;
+
 =head2 notify
 
 Send out e-mails upon receiving a submission.
@@ -80,6 +84,8 @@
 /rss/dist/Distro-Name  latest N entries of that distro name
 /rss/author/PAUSEID
 
+/rss/tags latest N tags
+
 =cut
 
 sub rss {
@@ -106,15 +112,21 @@
     my $limit  = $self->config("${type}_size") || 10;
     my $it = $self->get_feed($limit);
 
+    my $url = "http://$ENV{HTTP_HOST}";
     my $call = "_generate_$type";
-    my $url = "http://$ENV{HTTP_HOST}";
-    return $self->$call($url, $it, $limit);
+
+    my @params = @{$self->param("path_parameters")};
+    my $type;
+    if ($params[0] eq 'tags') {
+        $type = 'tags';
+    }
+
+    return $self->$call($url, $it, $type);
 }
 
 sub _generate_atom {
-    my ($self, $url, $it, $limit) = @_;
+    my ($self, $url, $it, $type) = @_;
 
-    require XML::Atom::SimpleFeed;
 
     my $feed = XML::Atom::SimpleFeed->new(
         title    => 'CPAN::Forum',
@@ -156,11 +168,11 @@
     return $feed->as_string();
 }
 
-
 sub _generate_rss {
-    my ($self, $url, $it, $limit) = @_;
+    my ($self, $url, $it, $type) = @_;
 
-    require XML::RSS::SimpleGen;
+    my $q = $self->query;
+
     my $rss = XML::RSS::SimpleGen->new( "$url/", "CPAN Forum", "Discussing Perl CPAN modules");
     $rss->language( 'en' );
 
@@ -168,13 +180,18 @@
     $rss->webmaster('admin at cpanforum.com');
 
     if ($it and @$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 ?
+        if ($type and $type eq 'tags') {
+            foreach my $post (@$it) {
+                my $title = sprintf "%s on %s at %s", $post->{tag}, $post->{dist},
+                        POSIX::strftime("%Y%m%d %H:%S", localtime($post->{stamp}));
+                my $uri = URI->new("$url/tags/name/" . $post->{tag});
+                $rss->item($uri->as_string, $title);
+            }
+        } else {
+            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 {
@@ -217,6 +234,10 @@
         return CPAN::Forum::DB::Posts->search_latest_threads($limit);
     }
 
+    if ($params[0] eq 'tags') {
+        return CPAN::Forum::DB::Tags->retrieve_latest($limit);
+    }
+
     return;
 }
 

Modified: trunk/templates/faq.tmpl
===================================================================
--- trunk/templates/faq.tmpl	2007-07-19 14:06:18 UTC (rev 261)
+++ trunk/templates/faq.tmpl	2007-07-19 14:06:34 UTC (rev 262)
@@ -40,6 +40,7 @@
    <li> http://www.cpanforum.com/rss/dist/Distro-Name - latest posts in distro</li>
    <li> http://www.cpanforum.com/rss/author/PAUSEID - latest posts
                  in any of the distros of the given CPAN author</li>
+   <li> http://www.cpanforum.com/rss/tags - latest tags</li>
   </ul>
         Atom feeds:
      <ul>



More information about the Cpan-forum-commit mailing list