--- loncom/interface/lonrss.pm 2005/11/17 21:40:52 1.1
+++ loncom/interface/lonrss.pm 2005/11/18 19:32:05 1.4
@@ -1,7 +1,7 @@
# The LearningOnline Network
# RSS Feeder
#
-# $Id: lonrss.pm,v 1.1 2005/11/17 21:40:52 www Exp $
+# $Id: lonrss.pm,v 1.4 2005/11/18 19:32:05 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -33,13 +33,8 @@ use Apache::Constants qw(:common);
use Apache::loncommon;
use Apache::lonnet;
use Apache::lontexconvert;
-use Apache::lonfeedback;
-use Apache::lonannounce;
use Apache::lonlocal;
use Apache::lonhtmlcommon;
-use Apache::lonspeller();
-
-my $feedcounter=0;
sub filterfeedname {
my $filename=shift;
@@ -53,16 +48,64 @@ sub feedname {
}
sub displayfeedname {
- my $filename=&filterfeedname(shift);
- $filename=~s/\_/ /g;
- return $filename;
+ my ($rawname,$uname,$udom)=@_;
+ my $filterfilename=&filterfeedname($rawname);
+# do we have a stored name?
+ my %stored=&Apache::lonnet::get('nohist_all_rss_feeds',[$filterfilename],$udom,$uname);
+ if ($stored{$filterfilename}) { return $stored{$filterfilename}; }
+# no, construct a name
+ my $name=$filterfilename;
+ if ($name=~/^CourseBlog/) {
+ $name=&mt('Course Blog');
+ if ($env{'course.'.$env{'request.course.id'}.'.description'}) {
+ $name.=' '.$env{'course.'.$env{'request.course.id'}.'.description'};
+ }
+ } else {
+ $name=~s/\_/ /g;
+ }
+ return $name;
}
-sub addentry {
- my ($uname,$udom,$filename,$title,$description,$url,$status,$encurl,$enclength,$enctype)=@_;
+sub renamefeed {
+ my ($rawname,$uname,$udom,$newname)=@_;
+ return &Apache::lonnet::put('nohist_all_rss_feeds',
+ { &filterfeedname($rawname) => $newname },
+ $udom,$uname);
+}
+
+sub advertisefeeds {
+ my ($uname,$udom)=@_;
+ my $feeds='';
+ my %feednames=&Apache::lonnet::dump('nohist_all_rss_feeds',$udom,$uname);
+ foreach my $feed (sort(keys(%feednames))) {
+ if ($feed!~/^error\:/) {
+ my $url='feed://'.$ENV{'HTTP_HOST'}.'/public/'.$udom.'/'.$uname.'/'.$feed.'.rss';
+ $feeds.='
'.
+ $feednames{$feed}.'
'.$url.'';
+ }
+ }
+ if ($feeds) {
+ return ''.&mt('Available RSS Feeds and Blogs').'
';
+ } else {
+ return '';
+ }
+}
+
+{
+ my $feedcounter;
+ sub addentry {
+ $feedcounter++;
+ my $id=time.'00000'.$$.'00000'.$feedcounter;
+ return &editentry($id,@_);
+ }
+}
+
+sub editentry {
+ my ($id,$uname,$udom,$filename,$title,$description,$url,$status,$encurl,$enclength,$enctype)=@_;
my $feedname=&feedname($filename);
- $feedcounter++;
- my $id=time.'00000'.$$.'00000'.$feedcounter;
+ &Apache::lonnet::put('nohist_all_rss_feeds',
+ { &filterfeedname($filename) => &displayfeedname($filename,$uname,$udom) },
+ $udom,$uname);
return &Apache::lonnet::put($feedname,{
$id.'_title' => $title,
$id.'_description' => $description,
@@ -73,16 +116,32 @@ sub addentry {
$id.'_status' => $status},$udom,$uname);
}
+sub changestatus {
+ my ($id,$uname,$udom,$filename,$status)=@_;
+ my $feedname=&feedname($filename);
+ if ($status eq 'deleted') {
+ return &Apache::lonnet::del($feedname,[$id.'_title',
+ $id.'_description',
+ $id.'_link',
+ $id.'_enclosureurl',
+ $id.'_enclosurelength',
+ $id.'_enclosuretype',
+ $id.'_status'],$udom,$uname);
+ } else {
+ return &Apache::lonnet::put($feedname,{$id.'_status' => $status},$udom,$uname);
+ }
+}
+
sub handler {
my $r = shift;
- &Apache::loncommon::content_type($r,'text/xml');
+ &Apache::loncommon::content_type($r,'application/rss+xml');
$r->send_http_header;
return OK if $r->header_only;
my (undef,undef,$udom,$uname,$filename)=split(/\//,$r->uri);
my $filterfeedname=&filterfeedname($filename);
my $feedname=&feedname($filename);
- my $displayfeedname=&displayfeedname($filename);
+ my $displayfeedname=&displayfeedname($filename,$uname,$udom);
$r->print("\n".
"\nhttp://".$ENV{'HTTP_HOST'}.'/'.
"\n".&mt('An RSS Feed provided by the LON-CAPA Learning Content Management System').'');
@@ -107,18 +166,19 @@ sub handler {
}
# Get feed items
my %newsfeed=&Apache::lonnet::dump($feedname,$udom,$uname);
- foreach (sort keys %newsfeed) {
- if ($_=~/^(\d+)\_status$/) {
+ foreach my $entry (sort(keys(%newsfeed))) {
+ if ($entry=~/^(\d+)\_status$/) {
my $id=$1;
if (($newsfeed{$id.'_status'} ne 'public') && ($viewpubliconly)) { next; }
+ if ($newsfeed{$id.'_status'} eq 'hidden') { next; }
$r->print("\n- \n".$newsfeed{$id.'_title'}."\n".
- $newsfeed{$id.'_description'}."\n".
+ $newsfeed{$id.'_description'}."\n"."http://".$ENV{'HTTP_HOST'}.
$newsfeed{$id.'_link'}."\n");
if ($newsfeed{$id.'_enclosureurl'}) {
$r->print("\n");
}
- $r->print("\n".$id.$filterfeedname.'_'.$udom.'_'.$uname."
\n");
+ $r->print("\n".$id.$filterfeedname.'_'.$udom.'_'.$uname."\n");
}
}
}