+$html
LON-CAPA Course Environment
@@ -1824,9 +1900,10 @@ ENDOVER
$middle=~s/\.$//;
my $realm=''.&mt('All Resources').'';
if ($middle=~/^(.+)\_\_\_\(all\)$/) {
- $realm=''.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).'';
+ $realm=''.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).'
('.$1.')';
} elsif ($middle) {
- $realm=''.&mt('Resource').': '.&Apache::lonnet::gettitle($middle).'';
+ my ($map,$id,$url)=&Apache::lonnet::decode_symb($middle);
+ $realm=''.&mt('Resource').': '.&Apache::lonnet::gettitle($middle).'
('.$url.' in '.$map.' id: '.$id.')';
}
if ($section ne $oldsection) {
$r->print(&tableend()."\n
$section
");
@@ -1874,6 +1951,90 @@ ENDOVER
##################################################
##################################################
+
+=pod
+
+=item change clone
+
+Modifies the list of courses a user can clone (stored
+in the user's environemnt.db file), called when a
+change is made to the list of users allowed to clone
+a course.
+
+Inputs: $action,$cloner
+where $action is add or drop, and $cloner is identity of
+user for whom cloning ability is to be changed in course.
+
+Returns:
+
+=cut
+
+##################################################
+##################################################
+
+
+sub change_clone {
+ my ($clonelist,$oldcloner) = @_;
+ my ($uname,$udom);
+ my $cnum = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};
+ my $cdom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};
+ my $clone_crs = $cnum.':'.$cdom;
+
+ if ($cnum && $cdom) {
+ my @allowclone = ();
+ if ($clonelist =~ /,/) {
+ @allowclone = split/,/,$clonelist;
+ } else {
+ $allowclone[0] = $clonelist;
+ }
+ foreach my $currclone (@allowclone) {
+ if (!grep/^$currclone$/,@$oldcloner) {
+ ($uname,$udom) = split/:/,$currclone;
+ if ($uname && $udom) {
+ unless (&Apache::lonnet::homeserver($uname,$udom) eq 'no_host') {
+ my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable');
+ if ($currclonecrs{'cloneable'} !~ /\Q$clone_crs\E/) {
+ if ($currclonecrs{'cloneable'} eq '') {
+ $currclonecrs{'cloneable'} = $clone_crs;
+ } else {
+ $currclonecrs{'cloneable'} .= ','.$clone_crs;
+ }
+ &Apache::lonnet::put('environment',\%currclonecrs,$udom,$uname);
+ }
+ }
+ }
+ }
+ }
+ foreach my $oldclone (@$oldcloner) {
+ if (!grep/^$oldclone$/,@allowclone) {
+ ($uname,$udom) = split/:/,$oldclone;
+ if ($uname && $udom) {
+ unless (&Apache::lonnet::homeserver($uname,$udom) eq 'no_host') {
+ my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable');
+ my %newclonecrs = ();
+ if ($currclonecrs{'cloneable'} =~ /\Q$clone_crs\E/) {
+ if ($currclonecrs{'cloneable'} =~ /,/) {
+ my @currclonecrs = split/,/,$currclonecrs{'cloneable'};
+ foreach (@currclonecrs) {
+ unless ($_ eq $clone_crs) {
+ $newclonecrs{'cloneable'} .= $_.',';
+ }
+ }
+ $newclonecrs{'cloneable'} =~ s/,$//;
+ } else {
+ $newclonecrs{'cloneable'} = '';
+ }
+ &Apache::lonnet::put('environment',\%newclonecrs,$udom,$uname);
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+##################################################
+##################################################
=pod
@@ -1913,7 +2074,10 @@ sub handler {
# ----------------------------------------------------- Needs to be in a course
if (($ENV{'request.course.id'}) &&
- (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'}))) {
+ (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'}) ||
+ &Apache::lonnet::allowed('opa',$ENV{'request.course.id'}.'/'.
+ $ENV{'request.course.sec'})
+ )) {
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
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.