[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--