--- loncom/interface/lonparmset.pm 2004/10/15 22:29:31 1.176
+++ loncom/interface/lonparmset.pm 2004/11/27 17:23:09 1.179
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set parameters for assessments
#
-# $Id: lonparmset.pm,v 1.176 2004/10/15 22:29:31 albertel Exp $
+# $Id: lonparmset.pm,v 1.179 2004/11/27 17:23:09 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1527,13 +1527,34 @@ sub crsenv {
if ($name =~ /^default_enrollment_(start|end)_date$/) {
$value=&Apache::lonhtmlcommon::get_date_from_form($name.'_value');
}
+ # Get existing cloners
+ my @oldcloner = ();
+ if ($name eq 'cloners') {
+ my %clonenames=&Apache::lonnet::dump('environment',$dom,$crs,'cloners');
+ if ($clonenames{'cloners'} =~ /,/) {
+ @oldcloner = split/,/,$clonenames{'cloners'};
+ } else {
+ $oldcloner[0] = $clonenames{'cloners'};
+ }
+ }
#
# Let the user know we made the changes
if ($name && defined($value)) {
+ if ($name eq 'cloners') {
+ $value =~ s/^,//;
+ $value =~ s/,$//;
+ }
my $put_result = &Apache::lonnet::put('environment',
{$name=>$value},$dom,$crs);
if ($put_result eq 'ok') {
$setoutput.=&mt('Set').' '.$name.' '.&mt('to').' '.$value.'.
';
+ if ($name eq 'cloners') {
+ &change_clone($value,\@oldcloner);
+ }
+ # Flush the course logs so course description is immediately updated
+ if ($name eq 'description' && defined($value)) {
+ &Apache::lonnet::flushcourselogs();
+ }
} else {
$setoutput.=&mt('Unable to set').' '.$name.' '.&mt('to').
' '.$value.' '.&mt('due to').' '.$put_result.'.
';
@@ -1562,6 +1583,7 @@ sub crsenv {
'courseid' => ''.&mt('Course ID or number').
'
'.
'('.&mt('internal').', '.&mt('optional').')',
+ 'cloners' => ''.&mt('Users allowed to clone course').'
(user:domain,user:domain)
'.&mt('Users with active Course Coordinator role in the course automatically have the right to clone it, and can be omitted from list.'),
'grading' => ''.&mt('Grading').'
'.
'"standard", "external", or "spreadsheet" '.&Apache::loncommon::help_open_topic('GradingOptions'),
'default_xml_style' => ''.&mt('Default XML Style File').' '.
@@ -1657,7 +1679,7 @@ sub crsenv {
'tthoptions'
=> ''.&mt('Default set of options to pass to tth/m when converting tex').''
);
- my @Display_Order = ('url','description','courseid','grading',
+ my @Display_Order = ('url','description','courseid','cloners','grading',
'default_xml_style','pageseparators',
'question.email','comment.email','policy.email',
'student_classlist_view',
@@ -1907,6 +1929,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