[LON-CAPA-cvs] cvs: loncom /interface loncreatecourse.pm

raeburn lon-capa-cvs-allow@mail.lon-capa.org
Fri, 29 Jun 2007 14:32:43 -0000


raeburn		Fri Jun 29 10:32:43 2007 EDT

  Modified files:              
    /loncom/interface	loncreatecourse.pm 
  Log:
  Disallow inter-domain course cloning unless owner of new course has cloning rights in cloned course. 
  
  
Index: loncom/interface/loncreatecourse.pm
diff -u loncom/interface/loncreatecourse.pm:1.101 loncom/interface/loncreatecourse.pm:1.102
--- loncom/interface/loncreatecourse.pm:1.101	Fri Mar  2 20:40:28 2007
+++ loncom/interface/loncreatecourse.pm	Fri Jun 29 10:32:43 2007
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Create a course
 #
-# $Id: loncreatecourse.pm,v 1.101 2007/03/03 01:40:28 albertel Exp $
+# $Id: loncreatecourse.pm,v 1.102 2007/06/29 14:32:43 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -575,13 +575,39 @@
         $crstype='Course';
         $enrollstart=&Apache::lonhtmlcommon::get_date_from_form('startenroll');
         $enrollend=&Apache::lonhtmlcommon::get_date_from_form('endenroll');
-
     }
     $startaccess = &Apache::lonhtmlcommon::get_date_from_form('startaccess');
     $endaccess   = &Apache::lonhtmlcommon::get_date_from_form('endaccess');
 
     my $autharg;
     my $authtype;
+    my ($clonecourse,$clonedomain,$clonemsg);
+
+    if (($env{'form.clonecourse'} ne '') && ($env{'form.clonedomain'} ne '')) {
+        my $clonehome=&Apache::lonnet::homeserver($env{'form.clonecourse'},$env{'form.clonedomain'});
+        if ($clonehome eq 'no_host') {
+            $clonemsg = &mt('The new course was not cloned from an existing course because the requested course from which to create the clone does not appear to be a valid course.');
+        } else {
+            my %clonedesc = &Apache::lonnet::coursedescription($env{'form.clonedomain'}.'_'.$env{'form.clonecourse'},{'one_time' => 1});
+            if ($env{'request.role.domain'} eq $env{'form.clonedomain'}) {
+                $clonecourse = $env{'form.clonecourse'};
+                $clonedomain = $env{'form.clonedomain'};
+            } else {
+                my %clonehash = &Apache::lonnet::get('environment',['cloners'],
+                            $env{'form.clonedomain'},$env{'form.clonecourse'});
+                my @cloners = split(/,/,$clonehash{'cloners'});
+                my %roleshash = 
+                    &Apache::lonnet::get_my_roles($ccuname,$ccdomain,'userroles',
+                                     ['active'],['cc'],[$env{'form.clonedomain'}]);
+                if (($roleshash{$env{'form.clonecourse'}.':'.$env{'form.clonedomain'}.':cc'}) || (grep(/^\Q$ccuname\E:\Q$ccdomain\E$/,@cloners))) {
+                    $clonecourse = $env{'form.clonecourse'};
+                    $clonedomain = $env{'form.clonedomain'};
+                } 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]).',$ccuname.':'.$ccdomain,$clonedesc{'description'});
+                }
+            }
+        }
+    }
 
     if ($env{'form.login'} eq 'krb') {
         $authtype = 'krb';
@@ -615,8 +641,8 @@
                nonstandard => $env{'form.nonstandard'},
                crscode => $env{'form.crscode'},
                crsquota => $env{'form.crsquota'},
-               clonecourse => $env{'form.clonecourse'},
-               clonedomain => $env{'form.clonedomain'},
+               clonecourse => $clonecourse,
+               clonedomain => $clonedomain,
                crsid => $env{'form.crsid'},
                curruser => $env{'user.name'}.':'.$env{'user.domain'},
                crssections => $env{'form.crssections'},
@@ -669,6 +695,9 @@
                   $env{'form.course_home'}.&Apache::loncommon::end_page());
         return;
     }
+    if ($clonemsg ne '') {
+        $r->print('<p>'.$clonemsg.'</p>');
+    }
     my ($courseid,$crsudom,$crsunum);
     $r->print(&Apache::loncommon::construct_course($args,\$logmsg,\$courseid,\$crsudom,\$crsunum,$env{'user.domain'},$env{'user.name'}));