[LON-CAPA-cvs] cvs: loncom /automation batchcreatecourse.pm /interface loncommon.pm loncreatecourse.pm
albertel
lon-capa-cvs-allow@mail.lon-capa.org
Thu, 23 Aug 2007 21:54:40 -0000
This is a MIME encoded message
--albertel1187906080
Content-Type: text/plain
albertel Thu Aug 23 17:54:40 2007 EDT
Modified files:
/loncom/automation batchcreatecourse.pm
/loncom/interface loncreatecourse.pm loncommon.pm
Log:
- BUG#5377 don't create a course if cloning rights check fails
--albertel1187906080
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20070823175440.txt"
Index: loncom/automation/batchcreatecourse.pm
diff -u loncom/automation/batchcreatecourse.pm:1.22 loncom/automation/batchcreatecourse.pm:1.23
--- loncom/automation/batchcreatecourse.pm:1.22 Sun Jul 1 23:36:47 2007
+++ loncom/automation/batchcreatecourse.pm Thu Aug 23 17:54:37 2007
@@ -1,5 +1,5 @@
#
-# $Id: batchcreatecourse.pm,v 1.22 2007/07/02 03:36:47 raeburn Exp $
+# $Id: batchcreatecourse.pm,v 1.23 2007/08/23 21:54:37 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -497,8 +497,8 @@
$$logmsg .= &mt('Invalid home server for course').': '.$$details{$num}{'coursehome'};
return;
}
-
- $$logmsg .= &Apache::loncommon::construct_course($courseargs,$logmsg,\$courseid,\$crsudom,\$crsunum,$udom,$uname,$context);
+ my ($success, $msg) = &Apache::loncommon::construct_course($courseargs,$logmsg,\$courseid,\$crsudom,\$crsunum,$udom,$uname,$context);
+ $$logmsg .= $msg;
} else {
return;
}
Index: loncom/interface/loncreatecourse.pm
diff -u loncom/interface/loncreatecourse.pm:1.103 loncom/interface/loncreatecourse.pm:1.104
--- loncom/interface/loncreatecourse.pm:1.103 Sun Jul 1 23:36:28 2007
+++ loncom/interface/loncreatecourse.pm Thu Aug 23 17:54:40 2007
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Create a course
#
-# $Id: loncreatecourse.pm,v 1.103 2007/07/02 03:36:28 raeburn Exp $
+# $Id: loncreatecourse.pm,v 1.104 2007/08/23 21:54:40 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -669,25 +669,31 @@
return;
}
my ($courseid,$crsudom,$crsunum);
- $r->print(&Apache::loncommon::construct_course($args,\$logmsg,\$courseid,\$crsudom,\$crsunum,$env{'user.domain'},$env{'user.name'}));
-
-#
-# Make the requested user a course coordinator or group coordinator
-#
- if (($ccdomain) && ($ccuname)) {
- $r->print(&mt('Assigning role of [_1] Coordinator to [_2] at [_3]: ',
- $crstype,$ccuname,$ccdomain).
- &Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid,
- 'cc').'<p>');
- }
- if ($env{'form.setkeys'}) {
- $r->print(
- '<p><a href="/adm/managekeys?cid='.$crsudom.'_'.$crsunum.'">'.&mt('Manage Access Keys').'</a></p>');
- }
-# Flush the course logs so reverse user roles immediately updated
- &Apache::lonnet::flushcourselogs();
- $r->print('<p>'.&mt('Roles will be active at next login').'.</p>'.
- '<p><a href="/adm/createcourse?phase='.lc($crstype).'one">'.
+ my ($success,$output) =
+ &Apache::loncommon::construct_course($args,\$logmsg,\$courseid,
+ \$crsudom,\$crsunum,
+ $env{'user.domain'},
+ $env{'user.name'});
+ $r->print($output);
+ if ($success) {
+ #
+ # Make the requested user a course coordinator or group coordinator
+ #
+ if (($ccdomain) && ($ccuname)) {
+ $r->print(&mt('Assigning role of [_1] Coordinator to [_2] at [_3]: ',
+ $crstype,$ccuname,$ccdomain).
+ &Apache::lonnet::assignrole($ccdomain,$ccuname,$courseid,
+ 'cc').'<p>');
+ }
+ if ($env{'form.setkeys'}) {
+ $r->print(
+ '<p><a href="/adm/managekeys?cid='.$crsudom.'_'.$crsunum.'">'.&mt('Manage Access Keys').'</a></p>');
+ }
+ # Flush the course logs so reverse user roles immediately updated
+ &Apache::lonnet::flushcourselogs();
+ $r->print('<p>'.&mt('Roles will be active at next login').'.</p>');
+ }
+ $r->print('<p><a href="/adm/createcourse?phase='.lc($crstype).'one">'.
&mt('Create Another [_1]',$crstype).'</a></p>'.
&Apache::loncommon::end_page());
}
Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.565 loncom/interface/loncommon.pm:1.566
--- loncom/interface/loncommon.pm:1.565 Fri Aug 17 20:01:37 2007
+++ loncom/interface/loncommon.pm Thu Aug 23 17:54:40 2007
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.565 2007/08/18 00:01:37 albertel Exp $
+# $Id: loncommon.pm,v 1.566 2007/08/23 21:54:40 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1099,6 +1099,10 @@
sub resize_textarea_js {
return <<"RESIZE";
<script type="text/javascript">
+ function myHandleEvent (event) {
+ alert(event.type);
+ }
+
var Geometry = {};
function init_geometry() {
if (Geometry.init) { return };
@@ -6969,6 +6973,40 @@
############################################################
############################################################
+sub check_clone {
+ my ($args) = @_;
+ my $cloneid='/'.$args->{'clonedomain'}.'/'.$args->{'clonecourse'};
+ my ($clonecrsudom,$clonecrsunum)= &LONCAPA::split_courseid($cloneid);
+ my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom);
+ my $clonemsg;
+ my $can_clone = 0;
+
+ if ($clonehome eq 'no_host') {
+ $clonemsg = &mt('Attempting to clone non-existing [_1]',
+ $args->{'crstype'});
+ } else {
+ my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1});
+ if ($env{'request.role.domain'} eq $args->{'form.clonedomain'}) {
+ $can_clone = 1;
+ } else {
+ my %clonehash = &Apache::lonnet::get('environment',['cloners'],
+ $args->{'clonedomain'},$args->{'clonecourse'});
+ my @cloners = split(/,/,$clonehash{'cloners'});
+ my %roleshash =
+ &Apache::lonnet::get_my_roles($args->{'ccuname'},
+ $args->{'ccdomain'},'userroles',['active'],['cc'],
+ [$args->{'clonedomain'}]);
+ if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':cc'}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) {
+ $can_clone = 1;
+ } else {
+ $clonemsg = &mt('The new course was not cloned from an existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
+ }
+ }
+ }
+
+ return ($can_clone, $clonemsg, $cloneid, $clonehome);
+}
+
sub construct_course {
my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context) = @_;
my $outcome;
@@ -6976,6 +7014,23 @@
if ($context eq 'auto') {
$linefeed = "\n";
}
+
+#
+# Are we cloning?
+#
+ my ($can_clone, $clonemsg, $cloneid, $clonehome);
+ if (($args->{'clonecourse'}) && ($args->{'clonedomain'})) {
+ ($can_clone, $clonemsg, $cloneid, $clonehome) = &check_clone($args);
+ if ($context ne 'auto') {
+ $clonemsg = '<span class="LC_error">'.$clonemsg.'</span>';
+ }
+ $outcome .= $clonemsg.$linefeed;
+
+ if (!$can_clone) {
+ return (0,$outcome);
+ }
+ }
+
#
# Open course
#
@@ -6996,81 +7051,39 @@
# if anyone ever decides to not show this, and Utils::Course::new
# will need to be suitably modified.
$outcome .= &mt('New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed;
-
#
# Check if created correctly
#
($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid);
my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom);
$outcome .= &mt('Created on').': '.$crsuhome.$linefeed;
+
#
-# Are we cloning?
-#
- my $cloneid='';
- if (($args->{'clonecourse'}) && ($args->{'clonedomain'})) {
- my $can_clone = 0;
- $cloneid='/'.$args->{'clonedomain'}.'/'.$args->{'clonecourse'};
- my ($clonecrsudom,$clonecrsunum)= &LONCAPA::split_courseid($cloneid);
- my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom);
- my $clonemsg;
- if ($clonehome eq 'no_host') {
- $clonemsg = &mt('Attempting to clone non-existing [_1]',$crstype);
- if ($context eq 'auto') {
- $outcome .= $clonemsg;
- } else {
- $outcome .= '<font color="red">'.$clonemsg.'</font>';
- }
- $outcome .= $linefeed;
- } else {
- my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1});
- if ($env{'request.role.domain'} eq $args->{'form.clonedomain'}) {
- $can_clone = 1;
- } else {
- my %clonehash = &Apache::lonnet::get('environment',['cloners'],
- $args->{'clonedomain'},$args->{'clonecourse'});
- my @cloners = split(/,/,$clonehash{'cloners'});
- my %roleshash =
- &Apache::lonnet::get_my_roles($args->{'ccuname'},
- $args->{'ccdomain'},'userroles',['active'],['cc'],
- [$args->{'clonedomain'}]);
- if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':cc'}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) {
- $can_clone = 1;
- } else {
- $clonemsg = &mt('The new course was not cloned from an existing course because the course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
- if ($context eq 'auto') {
- $outcome .= $clonemsg;
- } else {
- $outcome .= '<font color="red">'.$clonemsg.'</font>';
- }
- $outcome .= $linefeed;
- }
- }
- }
- if ($can_clone) {
- $clonemsg = &mt('Cloning [_1] from [_2]',$crstype,$clonehome);
- if ($context eq 'auto') {
- $outcome = $clonemsg;
- } else {
- $outcome .= '<font color="green">'.$clonemsg.'</font>';
- }
- $outcome .= $linefeed;
- my %oldcenv=&Apache::lonnet::dump('environment',$$crsudom,$$crsunum);
+# Do the cloning
+#
+ if ($can_clone && $cloneid) {
+ $clonemsg = &mt('Cloning [_1] from [_2]',$crstype,$clonehome);
+ if ($context ne 'auto') {
+ $clonemsg = '<span class="LC_success">'.$clonemsg.'</span>';
+ }
+ $outcome .= $clonemsg.$linefeed;
+ my %oldcenv=&Apache::lonnet::dump('environment',$$crsudom,$$crsunum);
# Copy all files
- &Apache::lonclonecourse::copycoursefiles($cloneid,$$courseid);
+ &Apache::lonclonecourse::copycoursefiles($cloneid,$$courseid);
# Restore URL
- $cenv{'url'}=$oldcenv{'url'};
+ $cenv{'url'}=$oldcenv{'url'};
# Restore title
- $cenv{'description'}=$oldcenv{'description'};
+ $cenv{'description'}=$oldcenv{'description'};
# restore grading mode
- if (defined($oldcenv{'grading'})) {
- $cenv{'grading'}=$oldcenv{'grading'};
- }
-# Mark as cloned
- $cenv{'clonedfrom'}=$cloneid;
- delete($cenv{'default_enrollment_start_date'});
- delete($cenv{'default_enrollment_end_date'});
+ if (defined($oldcenv{'grading'})) {
+ $cenv{'grading'}=$oldcenv{'grading'};
}
+# Mark as cloned
+ $cenv{'clonedfrom'}=$cloneid;
+ delete($cenv{'default_enrollment_start_date'});
+ delete($cenv{'default_enrollment_end_date'});
}
+
#
# Set environment (will override cloned, if existing)
#
@@ -7178,7 +7191,7 @@
' ('.$lt{'adby'}.')';
if ($context eq 'auto') {
$outcome .= $badclass_msg.$linefeed;
- $outcome .= '<font color="red">'.$badclass_msg.$linefeed.'<ul>'."\n";
+ $outcome .= '<div class="LC_warning">'.$badclass_msg.$linefeed.'<ul>'."\n";
foreach my $item (@badclasses) {
if ($context eq 'auto') {
$outcome .= " - $item\n";
@@ -7189,7 +7202,7 @@
if ($context eq 'auto') {
$outcome .= $linefeed;
} else {
- $outcome .= "</ul><br /><br /></font>\n";
+ $outcome .= "</ul><br /><br /></div>\n";
}
}
}
@@ -7211,7 +7224,7 @@
if ($context eq 'auto') {
$outcome .= $krb_msg;
} else {
- $outcome .= '<font color="red" size="+1">'.$krb_msg.'</font>';
+ $outcome .= '<span class="LC_error">'.$krb_msg.'</span>';
}
$outcome .= $linefeed;
}
@@ -7309,7 +7322,8 @@
if ($errtext) { $fatal=2; }
$outcome .= ($fatal?$errtext:'write ok').$linefeed;
}
- return $outcome;
+
+ return (1,$outcome);
}
############################################################
--albertel1187906080--