version 1.16, 2006/04/13 18:12:49
|
version 1.55, 2016/12/01 16:37:53
|
Line 29
|
Line 29
|
package Apache::lonrss; |
package Apache::lonrss; |
|
|
use strict; |
use strict; |
|
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 54 sub displayfeedname {
|
Line 55 sub displayfeedname {
|
my ($rawname,$uname,$udom)=@_; |
my ($rawname,$uname,$udom)=@_; |
my $filterfilename=&filterfeedname($rawname); |
my $filterfilename=&filterfeedname($rawname); |
# do we have a stored name? |
# do we have a stored name? |
my %stored=&Apache::lonnet::get('nohist_all_rss_feeds',[$filterfilename],$udom,$uname); |
my %stored=&Apache::lonnet::get('nohist_all_rss_feeds',[$filterfilename,'feed_display_option_'.$filterfilename],$udom,$uname); |
if ($stored{$filterfilename}) { return $stored{$filterfilename}; } |
if ($stored{$filterfilename}) { return ($stored{$filterfilename},$stored{'feed_display_option_'.$filterfilename}); } |
# no, construct a name |
# no, construct a name |
my $name=$filterfilename; |
my $name=$filterfilename; |
if ($name=~/^CourseBlog/) { |
if ($name=~/^CourseBlog/) { |
$name=&mt('Course Blog'); |
$name=&mt('Course Blog'); |
|
if ($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Community') { |
|
$name = &mt('Community Blog'); |
|
} |
if ($env{'course.'.$env{'request.course.id'}.'.description'}) { |
if ($env{'course.'.$env{'request.course.id'}.'.description'}) { |
$name.=' '.$env{'course.'.$env{'request.course.id'}.'.description'}; |
$name.=' '.$env{'course.'.$env{'request.course.id'}.'.description'}; |
} |
} |
} else { |
} else { |
$name=~s/\_/ /g; |
$name=~s/\_/ /g; |
} |
} |
return $name; |
return ($name,$stored{'feed_display_option_'.$filterfilename}); |
} |
} |
|
|
sub renamefeed { |
sub namefeed { |
my ($rawname,$uname,$udom,$newname)=@_; |
my ($rawname,$uname,$udom,$newname)=@_; |
return &Apache::lonnet::put('nohist_all_rss_feeds', |
return &Apache::lonnet::put('nohist_all_rss_feeds', |
{ &filterfeedname($rawname) => $newname }, |
{ &filterfeedname($rawname) => $newname }, |
$udom,$uname); |
$udom,$uname); |
} |
} |
|
|
|
sub changefeeddisplay { |
|
my ($rawname,$uname,$udom,$newstatus)=@_; |
|
return &Apache::lonnet::put('nohist_all_rss_feeds', |
|
{ 'feed_display_option_'.&filterfeedname($rawname) => $newstatus }, |
|
$udom,$uname); |
|
} |
|
|
sub advertisefeeds { |
sub advertisefeeds { |
my ($uname,$udom,$edit)=@_; |
my ($uname,$udom,$edit,$count,$hidden)=@_; |
my $feeds=''; |
my $feeds=''; |
my %feednames=&Apache::lonnet::dump('nohist_all_rss_feeds',$udom,$uname); |
my %feednames=&Apache::lonnet::dump('nohist_all_rss_feeds',$udom,$uname); |
my $mode='public'; |
my $mode='public'; |
if ($edit) { |
if ($edit) { |
$mode='adm'; |
$mode='adm'; |
} |
} |
|
my $server = &Apache::lonnet::absolute_url(); |
foreach my $feed (sort(keys(%feednames))) { |
foreach my $feed (sort(keys(%feednames))) { |
if ($feed!~/^error\:/) { |
next if ($feed =~/^\s*$/ || |
my $feedurl='http://'.$ENV{'HTTP_HOST'}.'/public/'.$udom.'/'.$uname.'/'.$feed.'.rss'; |
$feed =~ /^error:/ || |
my $htmlurl='http://'.$ENV{'HTTP_HOST'}.'/'.$mode.'/'.$udom.'/'.$uname.'/'.$feed.'_rss.html'; |
$feed =~ /^feed_display_option_/); |
$feeds.='<li>'.$feednames{$feed}. |
if ($feednames{'feed_display_option_'.$feed} eq 'hidden') { |
'<br />'.($edit?&mt('Edit'):'HTML').': <a href="'.$htmlurl.'"><tt>'.$htmlurl.'</tt></a>'. |
if (ref($hidden)) { |
($edit?'':'<br />RSS: <a href="'.$feedurl.'"><tt>'.$feedurl.'</tt></a>').'</li>'; |
$$hidden ++; |
|
} |
|
if (ref($count)) { |
|
unless ($edit) { |
|
next; |
|
} |
|
} |
|
} else { |
|
if (ref($count)) { |
|
$$count ++; |
|
} |
|
} |
|
my $feedurl= $server.'/public/'.$udom.'/'.$uname.'/'.$feed.'.rss'; |
|
my $htmlurl= $server.'/'.$mode.'/'.$udom.'/'.$uname.'/'.$feed.'_rss.html'; |
|
if ($feednames{'feed_display_option_'.$feed} eq 'hidden') { |
|
if ($edit) { |
|
$feeds.='<li><i>'.$feednames{$feed}.'</i><br />'.&mt('Hidden').': <a href="'.$htmlurl.'"><tt>'.$htmlurl.'</tt></a></li>'; |
|
} |
|
} else { |
|
$feeds.='<li><b>'.$feednames{$feed}. |
|
'</b><br />'.($edit?&mt('Edit'):'HTML').': <a href="'.$htmlurl.'"><tt>'.$feednames{$feed}.' HTML</tt></a>'. |
|
'<br />'.&mt('Public RSS/podcast (subscribe to)').': <a href="'.$feedurl.'"><tt>'.$feednames{$feed}.' RSS/Podcast</tt></a></li>'; |
} |
} |
} |
} |
if ($feeds) { |
if ($feeds) { |
return '<h4>'.&mt('Available RSS Feeds and Blogs').'</h4><ul>'.$feeds.'</ul>'; |
return '<h4>'.&mt('Available RSS Feeds and Blogs').'</h4><ul>'.$feeds.'</ul>'; |
} else { |
} else { |
return ''; |
return '<h4>'.&mt('No available RSS Feeds and Blogs').'</h4>'; |
} |
} |
} |
} |
|
|
sub rss_link { |
sub rss_link { |
my ($url) = @_; |
my ($uname,$udom)=@_; |
return qq|<link rel="alternate" type="application/rss+xml" title="Course Announcements" href="$url" />|; |
my $result; |
|
my $server = &Apache::lonnet::absolute_url(); |
|
my %feednames=&Apache::lonnet::dump('nohist_all_rss_feeds',$udom,$uname); |
|
foreach my $feed (sort(keys(%feednames))) { |
|
next if ($feed =~/^\s*$/ || |
|
$feed =~ /^error:/ || |
|
$feed =~/^feed_display_option_/ ); |
|
my $url= $server.'/public/'.$udom.'/'.$uname.'/'.$feed.'.rss'; |
|
my $title = $feed; |
|
$title =~ s/_/ /g; |
|
$result.=qq| |
|
<link rel="alternate" type="application/rss+xml" title="$title" href="$url" /> |
|
|; |
|
} |
|
return $result; |
} |
} |
|
|
{ |
{ |
Line 119 sub addentry {
|
Line 166 sub addentry {
|
} |
} |
|
|
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') { |
if ($status eq 'deleted') { |
return &changestatus($id,$uname,$udom,$filename,$status); |
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))[0] }, |
$udom,$uname); |
$udom,$uname); |
return &Apache::lonnet::put($feedname,{ |
return &Apache::lonnet::put($feedname,{ |
$id.'_title' => $title, |
$id.'_title' => $title, |
$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 145 sub changestatus {
|
Line 192 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 163 sub changed_js {
|
Line 209 sub changed_js {
|
ENDSCRIPT |
ENDSCRIPT |
} |
} |
|
|
|
sub determine_enclosure_types { |
|
my ($url)=@_; |
|
my ($ending)=($url=~/\.(\w+)$/); |
|
return &Apache::loncommon::filemimetype($ending); |
|
} |
|
|
|
sub course_blog_link { |
|
my ($id,$title,$description,$url,$encurl,$enctype)=@_; |
|
if ($env{'request.course.id'}) { |
|
return &add_blog_entry_link($id, |
|
$env{'course.'.$env{'request.course.id'}.'.num'}, |
|
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
|
'Course_Announcements', |
|
$title,$description,$url,'public',$encurl,$enctype, |
|
&mt('Add to Course Announcements')); |
|
} else { |
|
return ''; |
|
} |
|
} |
|
|
|
sub add_blog_entry_link { |
|
my ($id,$uname,$udom,$filename,$title,$description,$url,$status,$encurl,$enctype,$linktext)=@_; |
|
return "<a href='/adm/$udom/$uname/".&filterfeedname($filename).'_rss.html?queryid='. |
|
&escape($id). |
|
'&title='.&escape($title). |
|
'&description='.&escape($description). |
|
'&url='.&escape($url). |
|
'&status='.&escape($status). |
|
'&encurl='.&escape($encurl). |
|
'&enctype='.&escape($enctype). |
|
"'>".$linktext.'</a>'; |
|
|
|
} |
|
|
|
sub blocking_blogdisplay { |
|
my ($uname,$udom,$html,$filterfeedname) = @_; |
|
my $user = &Apache::loncommon::plainname($uname,$udom); |
|
if ($html) { |
|
$user = &Apache::loncommon::aboutmewrapper($user,$uname,$udom); |
|
} else { |
|
$user = $user.' ('.$uname.':'.$udom.')'; |
|
} |
|
my %setters; |
|
my ($blocked,$output,$blockcause); |
|
my ($startblock,$endblock) = |
|
&Apache::loncommon::blockcheck(\%setters,'blogs'); |
|
if ($startblock && $endblock) { |
|
$blockcause = 'user'; |
|
} else { |
|
if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) { |
|
($startblock,$endblock) = |
|
&Apache::loncommon::blockcheck(\%setters,'blogs', |
|
$uname,$udom); |
|
$blockcause = 'blogowner'; |
|
} |
|
} |
|
if ($startblock && $endblock) { |
|
$blocked = 1; |
|
my $showstart = &Apache::lonlocal::locallocaltime($startblock); |
|
my $showend = &Apache::lonlocal::locallocaltime($endblock); |
|
$output = &mt('Blogs belonging to [_1] are unavailable from [_2] to [_3].',$user,$showstart,$showend); |
|
if ($html) {$output.='<br />';} |
|
if ($blockcause eq 'user') { |
|
$output .= &mt('This is because you are a student in one or more courses in which communication is being blocked.'); |
|
if ($html) { |
|
#$output .= '<br />'. |
|
#&Apache::loncommon::build_block_table($startblock, |
|
# $endblock,\%setters); |
|
my ($blocked, $blocktext) = Apache::loncommon::blocking_status('blogs'); |
|
$output .= '<br /><br />'.$blocktext; |
|
} |
|
} else { |
|
$output .= &mt('This is because the blog owner is a student in one or more courses in which communication is being blocked.'); |
|
} |
|
if (!$html) { |
|
my $id = &get_new_feed_id(); |
|
$output = '<title/><item><title/><description>'.$output."</description><link/><guid isPermaLink='false'>".$id.$filterfeedname.'_'.$udom.'_'.$uname.'</guid></item>'; |
|
} |
|
} |
|
return ($blocked,$output); |
|
} |
|
|
sub handler { |
sub handler { |
my ($r) = @_; |
my ($r) = @_; |
|
|
Line 173 sub handler {
|
Line 301 sub handler {
|
$edit=1; |
$edit=1; |
$html=1; |
$html=1; |
} |
} |
|
if (($mode eq 'adm') && (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) |
|
&& ($uname eq $env{'course.'.$env{'request.course.id'}.'.num'} && |
|
$udom eq $env{'course.'.$env{'request.course.id'}.'.domain'})) { |
|
$edit=1; |
|
$html=1; |
|
} |
if ($filename=~/\.html$/) { |
if ($filename=~/\.html$/) { |
$html=1; |
$html=1; |
} |
} |
Line 188 sub handler {
|
Line 322 sub handler {
|
|
|
my $filterfeedname=&filterfeedname($filename); |
my $filterfeedname=&filterfeedname($filename); |
my $feedname=&feedname($filename); |
my $feedname=&feedname($filename); |
my $displayfeedname=&displayfeedname($filename,$uname,$udom); |
my ($displayfeedname,$displayoption)=&displayfeedname($filename,$uname,$udom); |
|
my ($blocked,$blocktext,$disabled,$disabletext); |
|
if (!&Apache::lonnet::is_course($udom,$uname)) { |
|
($blocked,$blocktext) = &blocking_blogdisplay($uname,$udom,$html,$filterfeedname); |
|
if (&Apache::lonnet::usertools_access($uname,$udom,'blog')) { |
|
$disabled = 0; |
|
} else { |
|
$disabled = 1; |
|
if ($html) { |
|
$disabletext = '<h2>'.&mt('No user blog available') .'</h2>'. |
|
&mt('This is a result of one of the following:').'<ul>'. |
|
'<li>'.&mt('The administrator of this domain has disabled blog functionality for this specific user.').'</li>'. |
|
'<li>'.&mt('The domain has been configured to disable, by default, blog functionality for all users in the domain.').'</li>'. |
|
'</ul>'; |
|
} else { |
|
$disabletext = &mt('No user blog available'); |
|
} |
|
} |
|
} |
if ($html) { |
if ($html) { |
$r->print(&Apache::loncommon::start_page($displayfeedname,undef, |
# my $title = $displayfeedname?$displayfeedname:"Available RSS Feeds and Blogs"; |
{'domain' => $udom, |
my $title = "My Space"; |
'force_register' => |
my $rss_link = &Apache::lonrss::rss_link($uname,$udom); |
$env{'form.register'}}). |
my $head_extra = $rss_link.'<script type="text/javascript" |
|
src="/res/adm/includes/file_upload.js"></script>'; |
|
my $brcrumb = [{href=>$rss_link,text=>"Available RSS Feeds and Blogs"}]; |
|
$r->print(&Apache::loncommon::start_page($title,$head_extra, |
|
{'bread_crumbs' => $brcrumb, |
|
'domain' => $udom, |
|
'force_register' => $env{'form.register'}}). |
&changed_js()); |
&changed_js()); |
} else { |
} else { # render RSS |
|
my $server = &Apache::lonnet::absolute_url(); |
$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>'.$server.'/public/'.$udom.'/'.$uname.'/'. |
$filterfeedname.'_rss.html</link>'. |
$filterfeedname.'_rss.html</link>'. |
"\n<description>". |
"\n<description>". |
&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? |
# This will be the entry id for new additions to the blog |
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(); |
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 && !$blocked && !$disabled) { |
|
# Any new feeds or renaming of feeds? |
|
if ($edit) { |
|
# Hide a feed? |
|
if ($env{'form.hidethisblog'}) { |
|
&changefeeddisplay($feedname,$uname,$udom,'hidden'); |
|
($displayfeedname,$displayoption)=&displayfeedname($filename,$uname,$udom); |
|
} |
|
# Advertise a feed? |
|
if ($env{'form.advertisethisblog'}) { |
|
&changefeeddisplay($feedname,$uname,$udom,'public'); |
|
($displayfeedname,$displayoption)=&displayfeedname($filename,$uname,$udom); |
|
} |
|
# New feed? |
|
if ($env{'form.namenewblog'}=~/\w/) { |
|
&namefeed($env{'form.namenewblog'},$uname,$udom,$env{'form.namenewblog'}); |
|
} |
|
# Old feed that is being renamed? |
|
if (($displayfeedname) && ($env{'form.newblogname'}=~/\w/)) { |
|
if ($env{'form.newblogname'} ne $displayfeedname) { |
|
&namefeed($feedname,$uname,$udom,$env{'form.newblogname'}); |
|
($displayfeedname,$displayoption)=&displayfeedname($filename,$uname,$udom); |
|
} |
|
} |
|
} |
$r->print(&advertisefeeds($uname,$udom,$edit)); |
$r->print(&advertisefeeds($uname,$udom,$edit)); |
} |
} |
if ($homeserver eq 'no_host') { |
if ($homeserver eq 'no_host') { |
$r->print(($html?'<h3>':'<title>').&mt('No feed available').($html?'</h3>':'</title>')); |
$r->print(($html?'<h3>':'<title>').&mt('No feed available').($html?'</h3>':'</title>')); |
} else { |
} elsif ($blocked) { |
|
$r->print($blocktext); |
|
$r->print(($html?&Apache::loncommon::end_page():'</channel></rss>'."\n")); |
|
} elsif ($disabled) { |
|
$r->print($disabletext); |
|
$r->print(($html?&Apache::loncommon::end_page():'</channel></rss>'."\n")); |
|
} else { # is indeed a user |
# Course or user? |
# Course or user? |
my $name=''; |
my $name=''; |
if ($uname=~/^\d/) { |
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 { |
$name=&Apache::loncommon::nickname($uname,$udom); |
$name=&Apache::loncommon::nickname($uname,$udom); |
} |
} |
$r->print("\n". |
# Add a new feed |
($html?'<h3>':'<title>'). |
if (($html) && ($edit)) { |
&mt('LON-CAPA Feed "[_1]" for [_2]',$displayfeedname,$name). |
$r->print('<h4>' . &mt('New RSS Feed or Blog'). '</h4>'); |
($html?'</h3>'.($edit?'<form method="post"><br />'. |
$r->print('<form method="post" name="makenewfeed" action="">'); |
&mt('Name of blog/journal'). |
$r->print(&mt('Name').": <input type='text' size='40' name='namenewblog' />"); |
': <input type="text" size="50" name="newblogname" value="'. |
$r->print('<input type="submit" value="'.&mt('New Feed').'" />'); |
$displayfeedname.'" />':'').'<ul>':'</title>')); |
$r->print('</form>'); |
# Render private items? |
|
my $viewpubliconly=1; |
|
if (($env{'user.name'} eq $uname) && ($env{'user.domain'} eq $udom)) { |
|
$viewpubliconly=0; |
|
} |
} |
|
if ($displayfeedname) { # this is an existing feed |
|
# Anything to store? |
|
if ($edit) { |
|
# check if this was called with a query string |
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['queryid']); |
|
if ($env{'form.queryid'}) { |
|
# yes, collect the remainder |
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
|
['title', |
|
'description', |
|
'url', |
|
'status', |
|
'enclosureurl', |
|
'enclosuretype']); |
|
|
|
# my ($id,$uname,$udom,$filename,$title,$description,$url,$status,$encurl,$enctype)=@_; |
|
|
|
|
|
&editentry($env{'form.queryid'}, |
|
$uname,$udom,$filename, |
|
$env{'form.title'}, |
|
$env{'form.description'}, |
|
$env{'form.url'}, |
|
$env{'form.status'}, |
|
$env{'form.encurl'}, |
|
$env{'form.enctype'} |
|
); |
|
} |
|
|
|
# store away the fields modified in the online form |
|
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.'_link'}, |
|
$env{'form.'.$id.'_status'}, |
|
$env{'form.'.$id.'_enclosureurl'}, |
|
$env{'form.'.$id.'_enclosuretype'}, |
|
); |
|
} |
|
} |
|
} |
|
|
|
# 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 |
|
|
|
# Render private items? |
|
my $viewpubliconly=1; |
|
$r->print("\n". |
|
($html?'<hr /><h3>':'<title>'). |
|
&mt('LON-CAPA Feed "[_1]" for [_2]',$displayfeedname,$name). |
|
($displayoption eq 'hidden'?' ('.&mt('Hidden').')':''). |
|
($html?'</h3>'.($edit?'<form method="post" name="lonhomework" enctype="multipart/form-data" action=""><br />'. |
|
&mt('Name of this Feed'). |
|
': <input type="text" size="50" name="newblogname" value="'. |
|
$displayfeedname.'" />':'').'<ul>':'</title>')); |
|
if (($env{'user.name'} eq $uname) && ($env{'user.domain'} eq $udom)) { |
|
$viewpubliconly=0; |
|
} |
# 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)),$newid.'_status') { |
foreach my $entry (sort {$b cmp $a} (keys(%newsfeed)),$newid.'_status') { |
if ($entry=~/^(\d+)\_status$/) { |
if ($entry=~/^(\d+)\_status$/) { # is an entry |
my $id=$1; |
my $id=$1; |
if ($edit) { |
if ($edit) { |
my %lt=&Apache::lonlocal::texthash('public' => 'public', |
my %lt=&Apache::lonlocal::texthash('public' => 'public', |
'private' => 'private', |
'private' => 'private', |
'hidden' => 'hidden', |
'hidden' => 'hidden', |
'delete' => 'delete', |
'delete' => 'delete', |
'store' => 'Store changes'); |
'store' => 'Select', |
my %status=(); |
'title' => 'Title', |
unless ($newsfeed{$id.'_status'}) { $newsfeed{$id.'_status'}='public'; } |
'link' => 'Link', |
$status{$newsfeed{$id.'_status'}}='checked="checked"'; |
'description' => 'Description', |
$r->print(<<ENDEDIT); |
'enc' => 'Podcasted enclosure'); |
|
my $uploadlink; |
|
if ($entry==$newid) { |
|
# Generate upload link only for last (new) entry |
|
# Calculate the quota space available in the user's portfolio |
|
my $disk_quota = &Apache::loncommon::get_user_quota($env{'user.name'}, |
|
$env{'user.domain'}); # expressed in MB |
|
my $portfolio_root = '/userfiles/portfolio'; |
|
my $getpropath = 1; |
|
my $current_disk_usage = &Apache::lonnet::diskusage( |
|
$env{'user.domain'}, $env{'user.name'}, |
|
$portfolio_root, $getpropath); # Expressed in kB |
|
# Convert to MB for use in file_selector() |
|
my $free_space = $disk_quota - ($current_disk_usage / 1024.); |
|
# Format this number since it will be displayed onscreen |
|
$free_space = sprintf("%.1f", $free_space); |
|
$uploadlink=&Apache::inputtags::file_selector(0,0,'*','both','',$free_space); |
|
} 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=(); |
|
unless ($newsfeed{$id.'_status'}) { $newsfeed{$id.'_status'}='public'; } |
|
$status{$newsfeed{$id.'_status'}}='checked="checked"'; |
|
$r->print(<<ENDEDIT); |
<li> |
<li> |
<label><input name='$id\_modified' type='checkbox' value="modified" /> $lt{'store'}</label> |
<label><input name='$id\_modified' type='checkbox' value="modified" /> $lt{'store'}</label> |
|
|
<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> |
|
|
<label><input name='$id\_status' type="radio" value="private" $status{'private'} onClick="changed(this.form,'$id');" /> $lt{'private'}</label> |
<label><input name='$id\_status' type="radio" value="private" $status{'private'} onclick="changed(this.form,'$id');" /> $lt{'private'}</label> |
|
|
<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> |
|
|
<label><input name='$id\_status' type="radio" value="deleted" 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 /> |
$lt{'title'}: |
<textarea name='$id\_description' rows="6" cols="80" onChange="changed(this.form,'$id');">$newsfeed{$id.'_description'}</textarea><br /> |
<input name='$id\_title' type='text' size='60' value='$newsfeed{$id.'_title'}' onchange="changed(this.form,'$id');" /><br /> |
<input name='$id\_link' type='text' size='80' value='$newsfeed{$id.'_link'}' onChange="changed(this.form,'$id');" /> |
$lt{'description'}:<br /> |
|
<textarea name='$id\_description' rows="6" cols="80" onchange="changed(this.form,'$id');">$newsfeed{$id.'_description'}</textarea><br /> |
|
$lt{'link'}: |
|
<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 { |
} else { # not in edit mode, just displaying |
if (($newsfeed{$id.'_status'} ne 'public') && ($viewpubliconly)) { next; } |
if (($newsfeed{$id.'_status'} ne 'public') && ($viewpubliconly)) { next; } |
if ($newsfeed{$id.'_status'} eq 'hidden') { next; } |
if ($newsfeed{$id.'_status'} eq 'hidden') { next; } |
$r->print("\n".($html?"\n<li><b>":"<item>\n<title>").$newsfeed{$id.'_title'}. |
my $link = $newsfeed{$id.'_link'}; |
($html?"</b><br />\n":"</title>\n<description>"). |
if ($link =~ m|^/| ) { |
$newsfeed{$id.'_description'}. |
$link = "http://".$ENV{'HTTP_HOST'}.$link; |
($html?"<br />\n<a href='":"</description>\n<link>"). |
} |
"http://".$ENV{'HTTP_HOST'}. |
$r->print("\n".($html?"\n<li><b>":"<item>\n<title>").$newsfeed{$id.'_title'}. |
$newsfeed{$id.'_link'}. |
($html?"</b><br />\n":"</title>\n<description>"). |
($html?("'>".&mt('Read more')."</a><br />\n"):"</link>\n")); |
$newsfeed{$id.'_description'}. |
if ($newsfeed{$id.'_enclosureurl'}) { |
($html?"<br />":"</description>\n"). |
$r->print(($html?"<a href='":"\n<enclosure url='"). |
($link?($html?"\n<a href='":"<link>"). |
$newsfeed{$id.'_enclosureurl'}."' length='".$newsfeed{$id.'_enclosurelength'}. |
$link. |
"' type='".$newsfeed{$id.'_enclosuretype'}.($html?"'>".&mt('Enclosure')."</a>":"' />")); |
($html?("'>".&mt('Read more')."</a><br />\n"):"</link>\n"):'')); |
} |
my $enclosure=$newsfeed{$id.'_enclosureurl'}; |
if ($html) { |
# Enclosure? Get stats |
$r->print("\n<hr /></li>\n"); |
if ($enclosure) { |
} else { |
my @stat=&Apache::lonnet::stat_file($enclosure); |
$r->print("\n<guid isPermaLink='false'>".$id.$filterfeedname.'_'.$udom.'_'.$uname."</guid></item>\n"); |
if ($stat[7]) { |
} |
# Has non-zero length (and exists) |
|
my $enclosuretype=$newsfeed{$id.'_enclosuretype'}; |
|
if ($enclosure =~ m|^/| ) { |
|
$enclosure = "http://".$ENV{'HTTP_HOST'}.$enclosure; |
|
} |
|
$r->print(($html?"<a href='":"\n<enclosure url='"). |
|
$enclosure."' length='".$stat[7]. |
|
"' type='".$enclosuretype.($html?"'>".&mt('Enclosure')."</a>":"' />")); |
|
} |
|
} |
|
if ($html) { # is HTML |
|
$r->print("\n<hr /></li>\n"); |
|
} else { # is RSS |
|
$r->print("\n<guid isPermaLink='false'>".$id.$filterfeedname.'_'.$udom.'_'.$uname."</guid></item>\n"); |
|
} |
|
} # end of "in edit mode" |
|
} # end of rendering a real entry |
|
} # end of loop through all keys |
|
if ($html) { |
|
$r->print('</ul>'); |
|
if ($edit) { |
|
$r->print('<input type="hidden" name="newid" value="'.$newid.'"/><input type="submit" value="'.&mt('Save Selected').'" />'. |
|
($displayoption eq 'hidden'?'<input type="submit" name="advertisethisblog" value="'.&mt('Advertise this Feed').'" />': |
|
'<input type="submit" name="hidethisblog" value="'.&mt('Hide this Feed').'" />')); |
} |
} |
|
$r->print('</form>'); |
} |
} |
} |
} # was a real display feedname |
} |
$r->print(($html?&Apache::loncommon::end_page():'</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")); |
} # a real user |
return OK; |
return OK; |
} |
} # end handler |
1; |
1; |
__END__ |
__END__ |