version 1.1, 2005/11/17 21:40:52
|
version 1.4, 2005/11/18 19:32:05
|
Line 33 use Apache::Constants qw(:common);
|
Line 33 use Apache::Constants qw(:common);
|
use Apache::loncommon; |
use Apache::loncommon; |
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::lontexconvert; |
use Apache::lontexconvert; |
use Apache::lonfeedback; |
|
use Apache::lonannounce; |
|
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::lonhtmlcommon; |
use Apache::lonhtmlcommon; |
use Apache::lonspeller(); |
|
|
|
my $feedcounter=0; |
|
|
|
sub filterfeedname { |
sub filterfeedname { |
my $filename=shift; |
my $filename=shift; |
Line 53 sub feedname {
|
Line 48 sub feedname {
|
} |
} |
|
|
sub displayfeedname { |
sub displayfeedname { |
my $filename=&filterfeedname(shift); |
my ($rawname,$uname,$udom)=@_; |
$filename=~s/\_/ /g; |
my $filterfilename=&filterfeedname($rawname); |
return $filename; |
# 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 { |
sub renamefeed { |
my ($uname,$udom,$filename,$title,$description,$url,$status,$encurl,$enclength,$enctype)=@_; |
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.='<li><a href="'.$url.'">'. |
|
$feednames{$feed}.'</a><br /><tt>'.$url.'</tt></li>'; |
|
} |
|
} |
|
if ($feeds) { |
|
return '<h4>'.&mt('Available RSS Feeds and Blogs').'</h4><ul>'.$feeds.'</ul>'; |
|
} 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); |
my $feedname=&feedname($filename); |
$feedcounter++; |
&Apache::lonnet::put('nohist_all_rss_feeds', |
my $id=time.'00000'.$$.'00000'.$feedcounter; |
{ &filterfeedname($filename) => &displayfeedname($filename,$uname,$udom) }, |
|
$udom,$uname); |
return &Apache::lonnet::put($feedname,{ |
return &Apache::lonnet::put($feedname,{ |
$id.'_title' => $title, |
$id.'_title' => $title, |
$id.'_description' => $description, |
$id.'_description' => $description, |
Line 73 sub addentry {
|
Line 116 sub addentry {
|
$id.'_status' => $status},$udom,$uname); |
$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 { |
sub handler { |
my $r = shift; |
my $r = shift; |
&Apache::loncommon::content_type($r,'text/xml'); |
&Apache::loncommon::content_type($r,'application/rss+xml'); |
$r->send_http_header; |
$r->send_http_header; |
return OK if $r->header_only; |
return OK if $r->header_only; |
|
|
my (undef,undef,$udom,$uname,$filename)=split(/\//,$r->uri); |
my (undef,undef,$udom,$uname,$filename)=split(/\//,$r->uri); |
my $filterfeedname=&filterfeedname($filename); |
my $filterfeedname=&filterfeedname($filename); |
my $feedname=&feedname($filename); |
my $feedname=&feedname($filename); |
my $displayfeedname=&displayfeedname($filename); |
my $displayfeedname=&displayfeedname($filename,$uname,$udom); |
$r->print("<rss version='2.0' xmlns:dc='http://purl.org/dc/elements/1.1'>\n<channel>". |
$r->print("<rss version='2.0' xmlns:dc='http://purl.org/dc/elements/1.1'>\n<channel>". |
"\n<link>http://".$ENV{'HTTP_HOST'}.'/</link>'. |
"\n<link>http://".$ENV{'HTTP_HOST'}.'/</link>'. |
"\n<description>".&mt('An RSS Feed provided by the LON-CAPA Learning Content Management System').'</description>'); |
"\n<description>".&mt('An RSS Feed provided by the LON-CAPA Learning Content Management System').'</description>'); |
Line 107 sub handler {
|
Line 166 sub handler {
|
} |
} |
# Get feed items |
# Get feed items |
my %newsfeed=&Apache::lonnet::dump($feedname,$udom,$uname); |
my %newsfeed=&Apache::lonnet::dump($feedname,$udom,$uname); |
foreach (sort keys %newsfeed) { |
foreach my $entry (sort(keys(%newsfeed))) { |
if ($_=~/^(\d+)\_status$/) { |
if ($entry=~/^(\d+)\_status$/) { |
my $id=$1; |
my $id=$1; |
if (($newsfeed{$id.'_status'} ne 'public') && ($viewpubliconly)) { next; } |
if (($newsfeed{$id.'_status'} ne 'public') && ($viewpubliconly)) { next; } |
|
if ($newsfeed{$id.'_status'} eq 'hidden') { next; } |
$r->print("\n<item>\n<title>".$newsfeed{$id.'_title'}."</title>\n<description>". |
$r->print("\n<item>\n<title>".$newsfeed{$id.'_title'}."</title>\n<description>". |
$newsfeed{$id.'_description'}."</description>\n<link>". |
$newsfeed{$id.'_description'}."</description>\n<link>"."http://".$ENV{'HTTP_HOST'}. |
$newsfeed{$id.'_link'}."</link>\n"); |
$newsfeed{$id.'_link'}."</link>\n"); |
if ($newsfeed{$id.'_enclosureurl'}) { |
if ($newsfeed{$id.'_enclosureurl'}) { |
$r->print("\n<enclosure url='".$newsfeed{$id.'_enclosureurl'}."' length='".$newsfeed{$id.'_enclosurelength'}. |
$r->print("\n<enclosure url='".$newsfeed{$id.'_enclosureurl'}."' length='".$newsfeed{$id.'_enclosurelength'}. |
"' type='".$newsfeed{$id.'_enclosuretype'}."' />"); |
"' type='".$newsfeed{$id.'_enclosuretype'}."' />"); |
} |
} |
$r->print("\n<guid>".$id.$filterfeedname.'_'.$udom.'_'.$uname."</guid></item>\n"); |
$r->print("\n<guid isPermaLink='false'>".$id.$filterfeedname.'_'.$udom.'_'.$uname."</guid></item>\n"); |
} |
} |
} |
} |
} |
} |