';
}
}
sub rss_link {
- my ($url) = @_;
- return qq||;
-
+ my ($uname,$udom)=@_;
+ 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|
+
+|;
+ }
+ return $result;
}
{
my $feedcounter;
- sub addentry {
+ sub get_new_feed_id {
$feedcounter++;
- my $id=time.'00000'.$$.'00000'.$feedcounter;
- return &editentry($id,@_);
+ return time().'00000'.$$.'00000'.$feedcounter;
}
}
+sub addentry {
+ my $id=&get_new_feed_id();
+ return &editentry($id,@_);
+}
+
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);
&Apache::lonnet::put('nohist_all_rss_feeds',
- { &filterfeedname($filename) => &displayfeedname($filename,$uname,$udom) },
+ { &filterfeedname($filename) =>
+ (&displayfeedname($filename,$uname,$udom))[0] },
$udom,$uname);
return &Apache::lonnet::put($feedname,{
$id.'_title' => $title,
$id.'_description' => $description,
$id.'_link' => $url,
$id.'_enclosureurl' => $encurl,
- $id.'_enclosurelength' => $enclength,
$id.'_enclosuretype' => $enctype,
$id.'_status' => $status},$udom,$uname);
}
@@ -136,7 +192,6 @@ sub changestatus {
$id.'_description',
$id.'_link',
$id.'_enclosureurl',
- $id.'_enclosurelength',
$id.'_enclosuretype',
$id.'_status'],$udom,$uname);
} else {
@@ -154,6 +209,88 @@ sub changed_js {
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 "".$linktext.'';
+
+}
+
+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.=' ';}
+ 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 .= ' '.
+ #&Apache::loncommon::build_block_table($startblock,
+ # $endblock,\%setters);
+ my ($blocked, $blocktext) = Apache::loncommon::blocking_status('blogs');
+ $output .= '
'.$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 = ''.$output."".$id.$filterfeedname.'_'.$udom.'_'.$uname.'';
+ }
+ }
+ return ($blocked,$output);
+}
+
sub handler {
my ($r) = @_;
@@ -164,6 +301,12 @@ sub handler {
$edit=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$/) {
$html=1;
}
@@ -179,106 +322,318 @@ sub handler {
my $filterfeedname=&filterfeedname($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 = '
'.&mt('No user blog available') .'
'.
+ &mt('This is a result of one of the following:').'
'.
+ '
'.&mt('The administrator of this domain has disabled blog functionality for this specific user.').'
'.
+ '
'.&mt('The domain has been configured to disable, by default, blog functionality for all users in the domain.').'
'.
+ '
';
+ } else {
+ $disabletext = &mt('No user blog available');
+ }
+ }
+ }
if ($html) {
- $r->print(&Apache::loncommon::start_page($displayfeedname,undef,
- {'domain' => $udom,
- 'force_register' =>
- $env{'form.register'}}).
+# my $title = $displayfeedname?$displayfeedname:"Available RSS Feeds and Blogs";
+ my $title = "My Space";
+ my $rss_link = &Apache::lonrss::rss_link($uname,$udom);
+ my $head_extra = $rss_link.'';
+ 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());
-
- } else {
+ } else { # render RSS
+ my $server = &Apache::lonnet::absolute_url();
$r->print("\n".
- "\nhttp://".$ENV{'HTTP_HOST'}.'/public/'.$udom.'/'.$uname.'/'.
+ "\n".''.$server.'/public/'.$udom.'/'.$uname.'/'.
$filterfeedname.'_rss.html'.
"\n".
&mt('An RSS Feed provided by the LON-CAPA Learning Content Management System').
'');
}
+# This will be the entry id for new additions to the blog
+ my $newid = &get_new_feed_id();
# Is this user for real?
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));
}
if ($homeserver eq 'no_host') {
$r->print(($html?'
':'').&mt('No feed available').($html?'
':''));
- } else {
+ } elsif ($blocked) {
+ $r->print($blocktext);
+ $r->print(($html?&Apache::loncommon::end_page():''."\n"));
+ } elsif ($disabled) {
+ $r->print($disabletext);
+ $r->print(($html?&Apache::loncommon::end_page():''."\n"));
+ } else { # is indeed a user
# Course or user?
my $name='';
- if ($uname=~/^\d/) {
+ if (&Apache::lonnet::is_course($udom,$uname)) {
my %cenv=&Apache::lonnet::dump('environment',$udom,$uname);
$name=$cenv{'description'};
} else {
$name=&Apache::loncommon::nickname($uname,$udom);
}
- $r->print("\n".
- ($html?'
':'').
- &mt('LON-CAPA Feed "[_1]" for [_2]',$displayfeedname,$name).
- ($html?'
'.($edit?'');
}
+ 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?'
'.($edit?'');
}
- }
- }
- $r->print("\n".($html?''.($edit?'':'').&Apache::loncommon::end_page():''."\n"));
+ } # was a real display feedname
+ $r->print(($html?&Apache::loncommon::end_page():''."\n"));
+ } # a real user
return OK;
-}
+} # end handler
1;
__END__
500 Internal Server Error
Internal Server Error
The server encountered an internal error or
misconfiguration and was unable to complete
your request.
Please contact the server administrator at
root@localhost to inform them of the time this error occurred,
and the actions you performed just before this error.
More information about this error may be available
in the server error log.