Diff for /loncom/interface/lonrss.pm between versions 1.1 and 1.3

version 1.1, 2005/11/17 21:40:52 version 1.3, 2005/11/18 19:11:06
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 $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");
     }      }
  }   }
     }      }

Removed from v.1.1  
changed lines
  Added in v.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>