Diff for /loncom/interface/lonrss.pm between versions 1.6 and 1.17

version 1.6, 2005/11/20 19:37:44 version 1.17, 2006/04/22 20:58:32
Line 36  use Apache::lontexconvert; Line 36  use Apache::lontexconvert;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonhtmlcommon;  use Apache::lonhtmlcommon;
   
   
 sub filterfeedname {  sub filterfeedname {
     my $filename=shift;      my $filename=shift;
     $filename=~s/(\_rss\.html|\.rss)$//;      $filename=~s/(\_rss\.html|\.rss)$//;
     $filename=~s/\W//g;      $filename=~s/\W//g;
       $filename=~s/\_rssfeed$//;
       $filename=~s/^nohist\_//;
     return $filename;      return $filename;
 }  }
   
Line 83  sub advertisefeeds { Line 86  sub advertisefeeds {
     }      }
     foreach my $feed (sort(keys(%feednames))) {      foreach my $feed (sort(keys(%feednames))) {
  if ($feed!~/^error\:/) {   if ($feed!~/^error\:/) {
     my $feedurl='feed://'.$ENV{'HTTP_HOST'}.'/public/'.$udom.'/'.$uname.'/'.$feed.'.rss';      my $feedurl='http://'.$ENV{'HTTP_HOST'}.'/public/'.$udom.'/'.$uname.'/'.$feed.'.rss';
     my $htmlurl='http://'.$ENV{'HTTP_HOST'}.'/'.$mode.'/'.$udom.'/'.$uname.'/'.$feed.'_rss.html';      my $htmlurl='http://'.$ENV{'HTTP_HOST'}.'/'.$mode.'/'.$udom.'/'.$uname.'/'.$feed.'_rss.html';
     $feeds.='<li>'.$feednames{$feed}.      $feeds.='<li>'.$feednames{$feed}.
  '<br />'.($edit?&mt('Edit'):'HTML').': <a href="'.$htmlurl.'"><tt>'.$htmlurl.'</tt></a>'.   '<br />'.($edit?&mt('Edit'):'HTML').': <a href="'.$htmlurl.'"><tt>'.$htmlurl.'</tt></a>'.
Line 97  sub advertisefeeds { Line 100  sub advertisefeeds {
     }      }
 }  }
   
   sub rss_link {
       my ($url) = @_;
       return qq|<link rel="alternate" type="application/rss+xml" title="Course Announcements" href="$url" />|;
   }
   
 {  {
     my $feedcounter;      my $feedcounter;
     sub addentry {      sub get_new_feed_id {
  $feedcounter++;   $feedcounter++;
  my $id=time.'00000'.$$.'00000'.$feedcounter;   return time().'00000'.$$.'00000'.$feedcounter;
  return &editentry($id,@_);  
     }      }
 }  }
   
   sub addentry {
       my $id=&get_new_feed_id();
       return &editentry($id,@_);
   }
   
 sub editentry {  sub editentry {
     my ($id,$uname,$udom,$filename,$title,$description,$url,$status,$encurl,$enclength,$enctype)=@_;      my ($id,$uname,$udom,$filename,$title,$description,$url,$status,$encurl,$enctype)=@_;
       if ($status eq 'deleted') {
    return &changestatus($id,$uname,$udom,$filename,$status);
       }
     my $feedname=&feedname($filename);      my $feedname=&feedname($filename);
     &Apache::lonnet::put('nohist_all_rss_feeds',      &Apache::lonnet::put('nohist_all_rss_feeds',
  { &filterfeedname($filename) => &displayfeedname($filename,$uname,$udom) },   { &filterfeedname($filename) => &displayfeedname($filename,$uname,$udom) },
Line 117  sub editentry { Line 132  sub editentry {
  $id.'_description' => $description,   $id.'_description' => $description,
  $id.'_link' => $url,   $id.'_link' => $url,
  $id.'_enclosureurl' => $encurl,   $id.'_enclosureurl' => $encurl,
  $id.'_enclosurelength' => $enclength,  
  $id.'_enclosuretype' => $enctype,   $id.'_enclosuretype' => $enctype,
  $id.'_status' => $status},$udom,$uname);   $id.'_status' => $status},$udom,$uname);
 }  }
Line 130  sub changestatus { Line 144  sub changestatus {
        $id.'_description',         $id.'_description',
        $id.'_link',         $id.'_link',
        $id.'_enclosureurl',         $id.'_enclosureurl',
        $id.'_enclosurelength',  
        $id.'_enclosuretype',         $id.'_enclosuretype',
        $id.'_status'],$udom,$uname);         $id.'_status'],$udom,$uname);
     } else {      } else {
Line 138  sub changestatus { Line 151  sub changestatus {
     }      }
 }  }
   
   sub changed_js {
       return <<ENDSCRIPT;
   <script type="text/javascript">
       function changed(tform,id) {
           tform.elements[id+"_modified"].checked=true;
       }
   </script>
   ENDSCRIPT
   }
   
   sub determine_enclosure_types {
       my ($url)=@_;
       my ($ending)=($url=~/\.(\w+)$/);
       return &Apache::loncommon::filemimetype($ending);
   }
   
 sub handler {  sub handler {
     my $r = shift;      my ($r) = @_;
   
     my $edit=0;      my $edit=0;
     my $html=0;      my $html=0;
Line 165  sub handler { Line 194  sub handler {
     my $feedname=&feedname($filename);      my $feedname=&feedname($filename);
     my $displayfeedname=&displayfeedname($filename,$uname,$udom);      my $displayfeedname=&displayfeedname($filename,$uname,$udom);
     if ($html) {      if ($html) {
  $r->print(&Apache::lonxml::xmlbegin().&Apache::loncommon::bodytag   $r->print(&Apache::loncommon::start_page($displayfeedname,undef,
                   ($displayfeedname,'','','',$udom,   {'domain'         => $udom,
                    $env{'form.register'}).<<ENDSCRIPT);    'force_register' =>
 <script>        $env{'form.register'}}).
     function changed(tform,id) {    &changed_js());
         tform.elements[id+"_modified"].checked=true;  
     }  
 </script>  
 ENDSCRIPT  
     } else {      } else {
  $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'}.'/public/'.$udom.'/'.$uname.'/'.    "\n<link>http://".$ENV{'HTTP_HOST'}.'/public/'.$udom.'/'.$uname.'/'.
Line 182  ENDSCRIPT Line 207  ENDSCRIPT
   &mt('An RSS Feed provided by the LON-CAPA Learning Content Management System').    &mt('An RSS Feed provided by the LON-CAPA Learning Content Management System').
   '</description>');    '</description>');
     }      }
   # Do we have stuff to store?
       if ($edit) {
           my %newsfeed=&Apache::lonnet::dump($feedname,$udom,$uname);
    foreach my $entry (sort(keys(%newsfeed)),$env{'form.newid'}.'_status') {
       if ($entry=~/^(\d+)\_status$/) {
    my $id=$1;
    if ($env{'form.'.$id.'_modified'}) {
       &editentry($id,$uname,$udom,$feedname,
          $env{'form.'.$id.'_title'},
          $env{'form.'.$id.'_description'},
          $env{'form.'.$id.'_url'},
          $env{'form.'.$id.'_status'});
    }
       }
    }
       }
       my $newid = &get_new_feed_id();
 # Is this user for real?  # Is this user for real?
     my $homeserver=&Apache::lonnet::homeserver($uname,$udom);      my $homeserver=&Apache::lonnet::homeserver($uname,$udom);
     if ($html) {      if ($html) {
Line 212  ENDSCRIPT Line 254  ENDSCRIPT
  }   }
 # Get feed items  # Get feed items
         my %newsfeed=&Apache::lonnet::dump($feedname,$udom,$uname);          my %newsfeed=&Apache::lonnet::dump($feedname,$udom,$uname);
  foreach my $entry (sort(keys(%newsfeed))) {   foreach my $entry (sort(keys(%newsfeed)),$newid.'_status') {
     if ($entry=~/^(\d+)\_status$/) {      if ($entry=~/^(\d+)\_status$/) {
  my $id=$1;   my $id=$1;
  if ($edit) {   if ($edit) {
Line 222  ENDSCRIPT Line 264  ENDSCRIPT
        'delete' => 'delete',         'delete' => 'delete',
        'store' => 'Store changes');         'store' => 'Store changes');
     my %status=();      my %status=();
                       unless ($newsfeed{$id.'_status'}) { $newsfeed{$id.'_status'}='public'; }
     $status{$newsfeed{$id.'_status'}}='checked="checked"';      $status{$newsfeed{$id.'_status'}}='checked="checked"';
     $r->print(<<ENDEDIT);      $r->print(<<ENDEDIT);
 <li>  <li>
 <label><input name='$id\_modified' type='checkbox' /> $lt{'store'}</label>  <label><input name='$id\_modified' type='checkbox' value="modified" /> $lt{'store'}</label>
 &nbsp;&nbsp;  &nbsp;&nbsp;
 <label><input name='$id\_status' type="radio" value="public" $status{'public'} onClick="changed(this.form,'$id');" /> $lt{'public'}</label>  <label><input name='$id\_status' type="radio" value="public" $status{'public'} onClick="changed(this.form,'$id');" /> $lt{'public'}</label>
 &nbsp;&nbsp;  &nbsp;&nbsp;
Line 233  ENDSCRIPT Line 276  ENDSCRIPT
 &nbsp;&nbsp;  &nbsp;&nbsp;
 <label><input name='$id\_status' type="radio" value="hidden" $status{'hidden'} onClick="changed(this.form,'$id');" /> $lt{'hidden'}</label>  <label><input name='$id\_status' type="radio" value="hidden" $status{'hidden'} onClick="changed(this.form,'$id');" /> $lt{'hidden'}</label>
 &nbsp;&nbsp;  &nbsp;&nbsp;
 <label><input name='$id\_status' type="radio" value="delete" onClick="changed(this.form,'$id');" /> $lt{'delete'}</label>  <label><input name='$id\_status' type="radio" value="deleted" onClick="changed(this.form,'$id');" /> $lt{'delete'}</label>
 <br />  <br />
 <input name='$id\_title' type='text' size='80' value='$newsfeed{$id.'_title'}' onChange="changed(this.form,'$id');" /><br />  <input name='$id\_title' type='text' size='80' value='$newsfeed{$id.'_title'}' onChange="changed(this.form,'$id');" /><br />
 <textarea name='$id\_description' rows="6" cols="80" onChange="changed(this.form,'$id');">$newsfeed{$id.'_description'}</textarea><br />  <textarea name='$id\_description' rows="6" cols="80" onChange="changed(this.form,'$id');">$newsfeed{$id.'_description'}</textarea><br />
Line 250  ENDEDIT Line 293  ENDEDIT
       "http://".$ENV{'HTTP_HOST'}.        "http://".$ENV{'HTTP_HOST'}.
       $newsfeed{$id.'_link'}.        $newsfeed{$id.'_link'}.
       ($html?("'>".&mt('Read more')."</a><br />\n"):"</link>\n"));        ($html?("'>".&mt('Read more')."</a><br />\n"):"</link>\n"));
   # Enclosure? Get stats
     if ($newsfeed{$id.'_enclosureurl'}) {      if ($newsfeed{$id.'_enclosureurl'}) {
  $r->print(($html?"<a href='":"\n<enclosure url='").   my @stat=&Apache::lonnet::stat_file($newsfeed{$id.'_enclosureurl'});
   $newsfeed{$id.'_enclosureurl'}."' length='".$newsfeed{$id.'_enclosurelength'}.   if ($stat[7]) {
   "' type='".$newsfeed{$id.'_enclosuretype'}.($html?"'>".&mt('Enclosure')."</a>":"' />"));  # Has non-zero length (and exists)
       my $enclosuretype=$newsfeed{$id.'_enclosetype'};
       $r->print(($html?"<a href='":"\n<enclosure url='").
         $newsfeed{$id.'_enclosureurl'}."' length='".$stat[7].
         "' type='".$enclosuretype.($html?"'>".&mt('Enclosure')."</a>":"' />"));
    }
     }      }
     if ($html) {      if ($html) {
  $r->print("\n<hr /></li>\n");   $r->print("\n<hr /></li>\n");
Line 264  ENDEDIT Line 313  ENDEDIT
     }      }
  }   }
     }      }
     $r->print("\n".($html?'</ul>'.($edit?'<input type="submit" value="'.&mt('Store Marked Changes').'" /></form>':'').'</body></html>':'</channel></rss>'."\n"));      $r->print("\n".($html?'</ul>'.($edit?'<input type="hidden" name="newid" value="'.$newid.'"/><input type="submit" value="'.&mt('Store Marked Changes').'" /></form>':'').&Apache::loncommon::end_page():'</channel></rss>'."\n"));
     return OK;      return OK;
 }   } 
 1;  1;

Removed from v.1.6  
changed lines
  Added in v.1.17


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