version 1.30, 2006/12/04 21:51:31
|
version 1.34, 2007/01/18 19:27:33
|
Line 29
|
Line 29
|
package Apache::lonrss; |
package Apache::lonrss; |
|
|
use strict; |
use strict; |
use LONCAPA (:DEFAULT :match); |
use LONCAPA; |
use Apache::Constants qw(:common); |
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::lonlocal; |
use Apache::lonlocal; |
use Apache::lonhtmlcommon; |
use Apache::lonhtmlcommon; |
|
use Apache::inputtags(); |
|
|
sub filterfeedname { |
sub filterfeedname { |
my $filename=shift; |
my $filename=shift; |
Line 104 sub advertisefeeds {
|
Line 104 sub advertisefeeds {
|
} else { |
} else { |
$feeds.='<li><b>'.$feednames{$feed}. |
$feeds.='<li><b>'.$feednames{$feed}. |
'</b><br />'.($edit?&mt('Edit'):'HTML').': <a href="'.$htmlurl.'"><tt>'.$htmlurl.'</tt></a>'. |
'</b><br />'.($edit?&mt('Edit'):'HTML').': <a href="'.$htmlurl.'"><tt>'.$htmlurl.'</tt></a>'. |
'<br />RSS: <a href="'.$feedurl.'"><tt>'.$feedurl.'</tt></a></li>'; |
'<br />'.&mt('Public RSS/podcast (subscribe to)').': <a href="'.$feedurl.'"><tt>'.$feedurl.'</tt></a></li>'; |
} |
} |
} |
} |
} |
} |
Line 288 sub handler {
|
Line 288 sub handler {
|
my $feedname=&feedname($filename); |
my $feedname=&feedname($filename); |
my ($displayfeedname,$displayoption)=&displayfeedname($filename,$uname,$udom); |
my ($displayfeedname,$displayoption)=&displayfeedname($filename,$uname,$udom); |
my ($blocked,$blocktext); |
my ($blocked,$blocktext); |
if ($uname !~ /^$match_courseid$/) { |
if (!&Apache::lonnet::is_course($udom,$uname)) { |
($blocked,$blocktext) = &blocking_blogdisplay($uname,$udom,$html,$filterfeedname); |
($blocked,$blocktext) = &blocking_blogdisplay($uname,$udom,$html,$filterfeedname); |
} |
} |
if ($html) { |
if ($html) { |
Line 347 sub handler {
|
Line 347 sub handler {
|
} else { # is indeed a user |
} else { # is indeed a user |
# Course or user? |
# Course or user? |
my $name=''; |
my $name=''; |
if ($uname =~ /^$match_courseid$/) { |
if (&Apache::lonnet::is_course($udom,$uname)) { |
my %cenv=&Apache::lonnet::dump('environment',$udom,$uname); |
my %cenv=&Apache::lonnet::dump('environment',$udom,$uname); |
$name=$cenv{'description'}; |
$name=$cenv{'description'}; |
} else { |
} else { |
Line 355 sub handler {
|
Line 355 sub handler {
|
} |
} |
# Add a new feed |
# Add a new feed |
if (($html) && ($edit)) { |
if (($html) && ($edit)) { |
$r->print('<form method="post">'); |
$r->print('<form method="post" name="makenewfeed">'); |
$r->print(&mt('Name for New Feed').": <input type='text' size='40' name='namenewblog' />"); |
$r->print(&mt('Name for New Feed').": <input type='text' size='40' name='namenewblog' />"); |
$r->print('<input type="submit" value="'.&mt('Start a New Feed').'" />'); |
$r->print('<input type="submit" value="'.&mt('Start a New Feed').'" />'); |
$r->print('</form>'); |
$r->print('</form>'); |
Line 374 sub handler {
|
Line 374 sub handler {
|
'status', |
'status', |
'enclosureurl', |
'enclosureurl', |
'enclosuretype']); |
'enclosuretype']); |
|
|
# my ($id,$uname,$udom,$filename,$title,$description,$url,$status,$encurl,$enctype)=@_; |
# my ($id,$uname,$udom,$filename,$title,$description,$url,$status,$encurl,$enctype)=@_; |
|
|
|
|
&editentry($env{'form.queryid'}, |
&editentry($env{'form.queryid'}, |
$uname,$udom,$filename, |
$uname,$udom,$filename, |
$env{'form.title'}, |
$env{'form.title'}, |
Line 386 sub handler {
|
Line 388 sub handler {
|
$env{'form.enctype'} |
$env{'form.enctype'} |
); |
); |
} |
} |
|
|
|
# store away the fields modified in the online form |
my %newsfeed=&Apache::lonnet::dump($feedname,$udom,$uname); |
my %newsfeed=&Apache::lonnet::dump($feedname,$udom,$uname); |
foreach my $entry (sort(keys(%newsfeed)),$env{'form.newid'}.'_status') { |
foreach my $entry (sort(keys(%newsfeed)),$env{'form.newid'}.'_status') { |
if ($entry=~/^(\d+)\_status$/) { |
if ($entry=~/^(\d+)\_status$/) { |
Line 402 sub handler {
|
Line 406 sub handler {
|
} |
} |
} |
} |
} |
} |
|
|
|
# see if we have any uploaded or portfolio files |
|
my @uploadeditems=(); |
|
|
|
if ($env{'form.HWFILE0_0'}) { |
|
# We have an uploaded file - store it away. |
|
$uploadeditems[0]=&Apache::lonnet::userfileupload('HWFILE0_0',undef,'portfolio/podcasts'); |
|
} |
|
if ($env{'form.HWPORT0_0'}) { |
|
# Selected portfolio files |
|
foreach my $filename (split(/\,/,$env{'form.HWPORT0_0'})) { |
|
if ($filename) { |
|
# construct full path and remember |
|
push(@uploadeditems,'/uploaded/'.$env{'user.domain'}.'/'.$env{'user.name'}.'/portfolio'.$filename); |
|
} |
|
} |
|
} |
|
# the zeroth item should be stored together with the last displayed (newid) field |
|
if ($uploadeditems[0]) { |
|
my $id=$env{'form.newid'}; |
|
&editentry($id,$uname,$udom,$feedname, |
|
$env{'form.'.$id.'_title'}, |
|
$env{'form.'.$id.'_description'}, |
|
$env{'form.'.$id.'_link'}, |
|
$env{'form.'.$id.'_status'}, |
|
$uploadeditems[0], |
|
&Apache::loncommon::filemimetype(($uploadeditems[0]=~/\.(\w+)$/)[0]), |
|
); |
|
&Apache::lonnet::make_public_indefinitely($uploadeditems[0]); |
|
} |
|
# if there are more files, they need new entries, since each can only have one enclosure |
|
for (my $i=1; $i<=$#uploadeditems; $i++) { |
|
my $id = &get_new_feed_id().$i; |
|
&editentry($id,$uname,$udom,$feedname, |
|
'New Entry', |
|
'', |
|
'', |
|
'public', |
|
$uploadeditems[$i], |
|
&Apache::loncommon::filemimetype(($uploadeditems[$i]=~/\.(\w+)$/)[0]), |
|
); |
|
&Apache::lonnet::make_public_indefinitely($uploadeditems[$i]); |
|
} |
} #done storing |
} #done storing |
|
|
# Render private items? |
# Render private items? |
Line 410 sub handler {
|
Line 457 sub handler {
|
($html?'<hr /><h3>':'<title>'). |
($html?'<hr /><h3>':'<title>'). |
&mt('LON-CAPA Feed "[_1]" for [_2]',$displayfeedname,$name). |
&mt('LON-CAPA Feed "[_1]" for [_2]',$displayfeedname,$name). |
($displayoption eq 'hidden'?' ('.&mt('Hidden').')':''). |
($displayoption eq 'hidden'?' ('.&mt('Hidden').')':''). |
($html?'</h3>'.($edit?'<form method="post"><br />'. |
($html?'</h3>'.($edit?'<form method="post" name="lonhomework" enctype="multipart/form-data"><br />'. |
&mt('Name of this Feed'). |
&mt('Name of this Feed'). |
': <input type="text" size="50" name="newblogname" value="'. |
': <input type="text" size="50" name="newblogname" value="'. |
$displayfeedname.'" />':'').'<ul>':'</title>')); |
$displayfeedname.'" />':'').'<ul>':'</title>')); |
Line 430 sub handler {
|
Line 477 sub handler {
|
'store' => 'Store changes', |
'store' => 'Store changes', |
'title' => 'Title', |
'title' => 'Title', |
'link' => 'Link', |
'link' => 'Link', |
'description' => 'Description'); |
'description' => 'Description', |
|
'enc' => 'Podcasted enclosure'); |
|
my $uploadlink; |
|
if ($entry==$newid) { |
|
# Generate upload link only for last (new) entry |
|
$uploadlink=&Apache::inputtags::file_selector(0,0,'*','both'); |
|
} else { |
|
# Otherwise, display |
|
$uploadlink='<tt>'.$newsfeed{$id.'_enclosureurl'}.'</tt>'. |
|
"<input type='hidden' name='$id\_enclosureurl' value='$newsfeed{$id.'_enclosureurl'}' />". |
|
"<input type='hidden' name='$id\_enclosuretype' value='$newsfeed{$id.'_enclosuretype'}' />"; |
|
} |
my %status=(); |
my %status=(); |
unless ($newsfeed{$id.'_status'}) { $newsfeed{$id.'_status'}='public'; } |
unless ($newsfeed{$id.'_status'}) { $newsfeed{$id.'_status'}='public'; } |
$status{$newsfeed{$id.'_status'}}='checked="checked"'; |
$status{$newsfeed{$id.'_status'}}='checked="checked"'; |
Line 451 $lt{'title'}:
|
Line 509 $lt{'title'}:
|
$lt{'description'}:<br /> |
$lt{'description'}:<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 /> |
$lt{'link'}: |
$lt{'link'}: |
<input name='$id\_link' type='text' size='60' value='$newsfeed{$id.'_link'}' onChange="changed(this.form,'$id');" /> |
<input name='$id\_link' type='text' size='60' value='$newsfeed{$id.'_link'}' onChange="changed(this.form,'$id');" /><br /> |
|
$lt{'enc'} - |
|
$uploadlink |
<hr /></li> |
<hr /></li> |
ENDEDIT |
ENDEDIT |
} else { # not in edit mode, just displaying |
} else { # not in edit mode, just displaying |
Line 464 ENDEDIT
|
Line 524 ENDEDIT
|
$r->print("\n".($html?"\n<li><b>":"<item>\n<title>").$newsfeed{$id.'_title'}. |
$r->print("\n".($html?"\n<li><b>":"<item>\n<title>").$newsfeed{$id.'_title'}. |
($html?"</b><br />\n":"</title>\n<description>"). |
($html?"</b><br />\n":"</title>\n<description>"). |
$newsfeed{$id.'_description'}. |
$newsfeed{$id.'_description'}. |
($html?"<br />\n<a href='":"</description>\n<link>"). |
($html?"<br />":"</description>\n"). |
|
($link?($html?"\n<a href='":"<link>"). |
$link. |
$link. |
($html?("'>".&mt('Read more')."</a><br />\n"):"</link>\n")); |
($html?("'>".&mt('Read more')."</a><br />\n"):"</link>\n"):'')); |
|
my $enclosure=$newsfeed{$id.'_enclosureurl'}; |
# Enclosure? Get stats |
# Enclosure? Get stats |
if ($newsfeed{$id.'_enclosureurl'}) { |
if ($enclosure) { |
my @stat=&Apache::lonnet::stat_file($newsfeed{$id.'_enclosureurl'}); |
my @stat=&Apache::lonnet::stat_file($enclosure); |
if ($stat[7]) { |
if ($stat[7]) { |
# Has non-zero length (and exists) |
# Has non-zero length (and exists) |
my $enclosuretype=$newsfeed{$id.'_enclosetype'}; |
my $enclosuretype=$newsfeed{$id.'_enclosuretype'}; |
|
if ($enclosure =~ m|^/| ) { |
|
$enclosure = "http://".$ENV{'HTTP_HOST'}.$enclosure; |
|
} |
$r->print(($html?"<a href='":"\n<enclosure url='"). |
$r->print(($html?"<a href='":"\n<enclosure url='"). |
$newsfeed{$id.'_enclosureurl'}."' length='".$stat[7]. |
$enclosure."' length='".$stat[7]. |
"' type='".$enclosuretype.($html?"'>".&mt('Enclosure')."</a>":"' />")); |
"' type='".$enclosuretype.($html?"'>".&mt('Enclosure')."</a>":"' />")); |
} |
} |
} |
} |