Diff for /loncom/interface/loncommon.pm between versions 1.564.2.2 and 1.565

version 1.564.2.2, 2007/08/24 18:41:50 version 1.565, 2007/08/18 00:01:37
Line 1084  sub changable_area { Line 1084  sub changable_area {
   
 =pod  =pod
   
   =item * resize_textarea_js
   
   emits the needed javascript to resize a textarea to be as big as possible
   
   creates a function resize_textrea that takes two IDs first should be
   the id of the element to resize, second should be the id of a div that
   surrounds everything that comes after the textarea, this routine needs
   to be attached to the <body> for the onload and onresize events.
   
   
   =cut
   
   sub resize_textarea_js {
       return <<"RESIZE";
       <script type="text/javascript">
   var Geometry = {};
   function init_geometry() {
       if (Geometry.init) { return };
       Geometry.init=1;
       if (window.innerHeight) {
    Geometry.getViewportHeight = function() { return window.innerHeight; };
       }
       else if (document.documentElement && document.documentElement.clientHeight) {
    Geometry.getViewportHeight = 
       function() { return document.documentElement.clientHeight; };
       }
       else if (document.body.clientHeight) {
    Geometry.getViewportHeight = 
       function() { return document.body.clientHeight; };
       }
   }
   
   function resize_textarea(textarea_id,bottom_id) {
       init_geometry();
       var textarea        = document.getElementById(textarea_id);
       //alert(textarea);
   
       var textarea_top    = textarea.offsetTop;
       var textarea_height = textarea.offsetHeight;
       var bottom          = document.getElementById(bottom_id);
       var bottom_top      = bottom.offsetTop;
       var bottom_height   = bottom.offsetHeight;
       var window_height   = Geometry.getViewportHeight();
       var fudge           = 23; 
       var new_height      = window_height-fudge-textarea_top-bottom_height;
       if (new_height < 300) {
    new_height = 300;
       }
       textarea.style.height=new_height+'px';
   }
   </script>
   RESIZE
   
   }
   
   =pod
   
 =back  =back
     
 =head1 Excel and CSV file utility routines  =head1 Excel and CSV file utility routines
Line 6912  sub commit_studentrole { Line 6969  sub commit_studentrole {
 ############################################################  ############################################################
 ############################################################  ############################################################
   
 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->{'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 {  sub construct_course {
     my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context) = @_;      my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context) = @_;
     my $outcome;      my $outcome;
Line 6953  sub construct_course { Line 6976  sub construct_course {
     if ($context eq 'auto') {      if ($context eq 'auto') {
         $linefeed = "\n";          $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  # Open course
 #  #
Line 6990  sub construct_course { Line 6996  sub construct_course {
     # if anyone ever decides to not show this, and Utils::Course::new      # if anyone ever decides to not show this, and Utils::Course::new
     # will need to be suitably modified.      # will need to be suitably modified.
     $outcome .= &mt('New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed;      $outcome .= &mt('New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed;
   
 #  #
 # Check if created correctly  # Check if created correctly
 #  #
     ($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid);      ($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid);
     my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom);      my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom);
     $outcome .= &mt('Created on').': '.$crsuhome.$linefeed;      $outcome .= &mt('Created on').': '.$crsuhome.$linefeed;
   
 #  #
 # Do the cloning  # Are we cloning?
 #     #
     if ($can_clone && $cloneid) {      my $cloneid='';
  $clonemsg = &mt('Cloning [_1] from [_2]',$crstype,$clonehome);      if (($args->{'clonecourse'}) && ($args->{'clonedomain'})) {
  if ($context ne 'auto') {          my $can_clone = 0;
     $clonemsg = '<span class="LC_success">'.$clonemsg.'</span>';   $cloneid='/'.$args->{'clonedomain'}.'/'.$args->{'clonecourse'};
  }          my ($clonecrsudom,$clonecrsunum)= &LONCAPA::split_courseid($cloneid);
  $outcome .= $clonemsg.$linefeed;   my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom);
  my %oldcenv=&Apache::lonnet::dump('environment',$$crsudom,$$crsunum);          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);
 # Copy all files  # Copy all files
  &Apache::lonclonecourse::copycoursefiles($cloneid,$$courseid);      &Apache::lonclonecourse::copycoursefiles($cloneid,$$courseid);
 # Restore URL  # Restore URL
  $cenv{'url'}=$oldcenv{'url'};      $cenv{'url'}=$oldcenv{'url'};
 # Restore title  # Restore title
  $cenv{'description'}=$oldcenv{'description'};      $cenv{'description'}=$oldcenv{'description'};
 # restore grading mode  # restore grading mode
  if (defined($oldcenv{'grading'})) {      if (defined($oldcenv{'grading'})) {
     $cenv{'grading'}=$oldcenv{'grading'};   $cenv{'grading'}=$oldcenv{'grading'};
  }      }
 # Mark as cloned  # Mark as cloned
  $cenv{'clonedfrom'}=$cloneid;      $cenv{'clonedfrom'}=$cloneid;
  delete($cenv{'default_enrollment_start_date'});      delete($cenv{'default_enrollment_start_date'});
  delete($cenv{'default_enrollment_end_date'});      delete($cenv{'default_enrollment_end_date'});
    }
     }      }
   
 #  #
 # Set environment (will override cloned, if existing)  # Set environment (will override cloned, if existing)
 #  #
Line 7130  sub construct_course { Line 7178  sub construct_course {
                            ' ('.$lt{'adby'}.')';                             ' ('.$lt{'adby'}.')';
         if ($context eq 'auto') {          if ($context eq 'auto') {
             $outcome .= $badclass_msg.$linefeed;              $outcome .= $badclass_msg.$linefeed;
             $outcome .= '<div class="LC_warning">'.$badclass_msg.$linefeed.'<ul>'."\n";              $outcome .= '<font color="red">'.$badclass_msg.$linefeed.'<ul>'."\n";
             foreach my $item (@badclasses) {              foreach my $item (@badclasses) {
                 if ($context eq 'auto') {                  if ($context eq 'auto') {
                     $outcome .= " - $item\n";                      $outcome .= " - $item\n";
Line 7141  sub construct_course { Line 7189  sub construct_course {
             if ($context eq 'auto') {              if ($context eq 'auto') {
                 $outcome .= $linefeed;                  $outcome .= $linefeed;
             } else {              } else {
                 $outcome .= "</ul><br /><br /></div>\n";                  $outcome .= "</ul><br /><br /></font>\n";
             }              }
         }           } 
     }      }
Line 7163  sub construct_course { Line 7211  sub construct_course {
             if ($context eq 'auto') {              if ($context eq 'auto') {
                 $outcome .= $krb_msg;                  $outcome .= $krb_msg;
             } else {              } else {
                 $outcome .= '<span class="LC_error">'.$krb_msg.'</span>';                  $outcome .= '<font color="red" size="+1">'.$krb_msg.'</font>';
             }              }
             $outcome .= $linefeed;              $outcome .= $linefeed;
         }          }
Line 7261  sub construct_course { Line 7309  sub construct_course {
  if ($errtext) { $fatal=2; }   if ($errtext) { $fatal=2; }
         $outcome .= ($fatal?$errtext:'write ok').$linefeed;          $outcome .= ($fatal?$errtext:'write ok').$linefeed;
     }      }
       return $outcome;
     return (1,$outcome);  
 }  }
   
 ############################################################  ############################################################

Removed from v.1.564.2.2  
changed lines
  Added in v.1.565


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>