Diff for /loncom/interface/loncommon.pm between versions 1.1075.2.10 and 1.1075.2.11

version 1.1075.2.10, 2012/06/09 00:42:31 version 1.1075.2.11, 2012/08/01 04:34:00
Line 9356  sub get_env_multiple { Line 9356  sub get_env_multiple {
 sub ask_for_embedded_content {  sub ask_for_embedded_content {
     my ($actionurl,$state,$allfiles,$codebase,$args)=@_;      my ($actionurl,$state,$allfiles,$codebase,$args)=@_;
     my (%subdependencies,%dependencies,%mapping,%existing,%newfiles,%pathchanges,      my (%subdependencies,%dependencies,%mapping,%existing,%newfiles,%pathchanges,
         %currsubfile,%unused);          %currsubfile,%unused,$rem);
     my $counter = 0;      my $counter = 0;
     my $numnew = 0;      my $numnew = 0;
     my $numremref = 0;      my $numremref = 0;
Line 9369  sub ask_for_embedded_content { Line 9369  sub ask_for_embedded_content {
     my $heading = &mt('Upload embedded files');      my $heading = &mt('Upload embedded files');
     my $buttontext = &mt('Upload');      my $buttontext = &mt('Upload');
   
       my $navmap;
       if ($env{'request.course.id'}) {
           $navmap = Apache::lonnavmaps::navmap->new();
       }
     if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {      if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {
         my $current_path='/';          my $current_path='/';
         if ($env{'form.currentpath'}) {          if ($env{'form.currentpath'}) {
Line 9398  sub ask_for_embedded_content { Line 9402  sub ask_for_embedded_content {
         if (ref($args) eq 'HASH') {          if (ref($args) eq 'HASH') {
             $url = $args->{'docs_url'};              $url = $args->{'docs_url'};
             $toplevel = $url;              $toplevel = $url;
               if ($args->{'context'} eq 'paste') {
                   ($cdom,$cnum) = ($url =~ m{^\Q/uploaded/\E($match_domain)/($match_courseid)/});
                   ($path) =
                       ($toplevel =~ m{^(\Q/uploaded/$cdom/$cnum/\E(?:docs|supplemental)/(?:default|\d+)/\d+)/});
                   $fileloc = &Apache::lonnet::filelocation('',$toplevel);
                   $fileloc =~ s{^/}{};
               }
         }          }
     } elsif ($actionurl eq '/adm/dependencies') {      } elsif ($actionurl eq '/adm/dependencies') {
         if ($env{'request.course.id'} ne '') {          if ($env{'request.course.id'} ne '') {
Line 9407  sub ask_for_embedded_content { Line 9418  sub ask_for_embedded_content {
                 $url = $args->{'docs_url'};                  $url = $args->{'docs_url'};
                 $title = $args->{'docs_title'};                  $title = $args->{'docs_title'};
                 $toplevel = "/$url";                  $toplevel = "/$url";
                   ($rem) = ($toplevel =~ m{^(.+/)[^/]+$});
                 ($path) =                    ($path) =  
                     ($toplevel =~ m{^(\Q/uploaded/$cdom/$cnum/\E(?:docs|supplemental)/(?:default|\d+)/\d+)/});                      ($toplevel =~ m{^(\Q/uploaded/$cdom/$cnum/\E(?:docs|supplemental)/(?:default|\d+)/\d+)/});
                 $fileloc = &Apache::lonnet::filelocation('',$toplevel);                  $fileloc = &Apache::lonnet::filelocation('',$toplevel);
Line 9469  sub ask_for_embedded_content { Line 9481  sub ask_for_embedded_content {
                 my @subdir_list = grep(!/^\./,readdir($dir));                  my @subdir_list = grep(!/^\./,readdir($dir));
                 map {$currsubfile{$path}{$_} = 1;} @subdir_list;                  map {$currsubfile{$path}{$_} = 1;} @subdir_list;
             }              }
         } elsif ($actionurl eq '/adm/dependencies') {          } elsif (($actionurl eq '/adm/dependencies') ||
                    (($actionurl eq '/adm/coursedocs') && (ref($args) eq 'HASH') &&
                     ($args->{'context'} eq 'paste'))) {
             if ($env{'request.course.id'} ne '') {              if ($env{'request.course.id'} ne '') {
                 my ($dir) = ($fileloc =~ m{^(.+/)[^/]+$});                  my ($dir) = ($fileloc =~ m{^(.+/)[^/]+$});
                 if ($dir ne '') {                  if ($dir ne '') {
Line 9505  sub ask_for_embedded_content { Line 9519  sub ask_for_embedded_content {
                 if (ref($currsubfile{$path}) eq 'HASH') {                  if (ref($currsubfile{$path}) eq 'HASH') {
                     foreach my $file (keys(%{$currsubfile{$path}})) {                      foreach my $file (keys(%{$currsubfile{$path}})) {
                          unless ($subdependencies{$path}{$file}) {                           unless ($subdependencies{$path}{$file}) {
                                next if (($rem ne '') &&
                                         (($env{"httpref.$rem"."$path/$file"} ne '') ||
                                          (ref($navmap) &&
                                          (($navmap->getResourceByUrl($rem."$path/$file") ne '') ||
                                           (($file =~ /^(.*\.s?html?)\.bak$/i) &&
                                            ($navmap->getResourceByUrl($rem."$path/$1")))))));
                              $unused{$path.'/'.$file} = 1;                                $unused{$path.'/'.$file} = 1; 
                          }                           }
                     }                      }
Line 9527  sub ask_for_embedded_content { Line 9547  sub ask_for_embedded_content {
             my @dir_list = grep(!/^\./,readdir($dir));              my @dir_list = grep(!/^\./,readdir($dir));
             map {$currfile{$_} = 1;} @dir_list;              map {$currfile{$_} = 1;} @dir_list;
         }          }
     } elsif ($actionurl eq '/adm/dependencies') {      } elsif (($actionurl eq '/adm/dependencies') ||
                (($actionurl eq '/adm/coursedocs') && (ref($args) eq 'HASH') &&
                 ($args->{'context'} eq 'paste'))) {
         if ($env{'request.course.id'} ne '') {          if ($env{'request.course.id'} ne '') {
             my ($dir) = ($fileloc =~ m{^(.+/)[^/]+$});              my ($dir) = ($fileloc =~ m{^(.+/)[^/]+$});
             if ($dir ne '') {              if ($dir ne '') {
Line 9561  sub ask_for_embedded_content { Line 9583  sub ask_for_embedded_content {
         unless (($file eq $filename) ||          unless (($file eq $filename) ||
                 ($file eq $filename.'.bak') ||                  ($file eq $filename.'.bak') ||
                 ($dependencies{$file})) {                  ($dependencies{$file})) {
               if ($actionurl eq '/adm/dependencies') {
                   next if (($rem ne '') &&
                            (($env{"httpref.$rem".$file} ne '') ||
                             (ref($navmap) &&
                             (($navmap->getResourceByUrl($rem.$file) ne '') ||
                              (($file =~ /^(.*\.s?html?)\.bak$/i) &&
                               ($navmap->getResourceByUrl($rem.$1)))))));
               }
             $unused{$file} = 1;              $unused{$file} = 1;
         }          }
     }      }
       if (($actionurl eq '/adm/coursedocs') && (ref($args) eq 'HASH') &&
           ($args->{'context'} eq 'paste')) {
           $counter = scalar(keys(%existing));
           $numpathchg = scalar(keys(%pathchanges));
           return ($output,$counter,$numpathchg,\%existing);
       }
     foreach my $embed_file (sort {lc($a) cmp lc($b)} keys(%newfiles)) {      foreach my $embed_file (sort {lc($a) cmp lc($b)} keys(%newfiles)) {
         if ($actionurl eq '/adm/dependencies') {          if ($actionurl eq '/adm/dependencies') {
             next if ($embed_file =~ m{^\w+://});              next if ($embed_file =~ m{^\w+://});
Line 9580  sub ask_for_embedded_content { Line 9616  sub ask_for_embedded_content {
             $numremref++;              $numremref++;
         } elsif ($args->{'error_on_invalid_names'}          } elsif ($args->{'error_on_invalid_names'}
             && $embed_file ne &Apache::lonnet::clean_filename($embed_file,{'keep_path' => 1,})) {              && $embed_file ne &Apache::lonnet::clean_filename($embed_file,{'keep_path' => 1,})) {
   
             $upload_output.='<span class="LC_warning">'.&mt('Invalid characters').'</span>';              $upload_output.='<span class="LC_warning">'.&mt('Invalid characters').'</span>';
             $numinvalid++;              $numinvalid++;
         } else {          } else {
Line 11068  function dependencyCheck(form,count,offs Line 11103  function dependencyCheck(form,count,offs
             document.getElementById('arc_depon_'+count).style.display='block';               document.getElementById('arc_depon_'+count).style.display='block'; 
             form.elements[depitem].options.length = 0;              form.elements[depitem].options.length = 0;
             form.elements[depitem].options[0] = new Option('Select','',true,true);              form.elements[depitem].options[0] = new Option('Select','',true,true);
             for (var i=1; i<count; i++) {              for (var i=1; i<=numitems; i++) {
                   if (i == count) {
                       continue;
                   }
                 var startelement = $startcount + (i-1) * 7;                  var startelement = $startcount + (i-1) * 7;
                 for (var j=1; j<6; j++) {                  for (var j=1; j<6; j++) {
                     if ((j != 2) && (j!= 4)) {                      if ((j != 2) && (j!= 4)) {
Line 11209  sub process_extracted_files { Line 11247  sub process_extracted_files {
     my (%referrer,%orphaned,%todelete,%todeletedir,%newdest,%newseqid);      my (%referrer,%orphaned,%todelete,%todeletedir,%newdest,%newseqid);
     if ($numitems) {      if ($numitems) {
         for (my $i=1; $i<=$numitems; $i++) {          for (my $i=1; $i<=$numitems; $i++) {
               next if ($env{'form.archive_'.$i} eq 'dependency');
             my $path = $env{'form.archive_content_'.$i};              my $path = $env{'form.archive_content_'.$i};
             if ($path =~ /^\Q$pathtocheck\E/) {              if ($path =~ /^\Q$pathtocheck\E/) {
                 if ($env{'form.archive_'.$i} eq 'discard') {                  if ($env{'form.archive_'.$i} eq 'discard') {
Line 11259  sub process_extracted_files { Line 11298  sub process_extracted_files {
                             my ($outtext,$errtext) =                              my ($outtext,$errtext) =
                                 &LONCAPA::map::storemap('/uploaded/'.$docudom.'/'.                                  &LONCAPA::map::storemap('/uploaded/'.$docudom.'/'.
                                                         $docuname.'/'.$folders{$outer}.                                                          $docuname.'/'.$folders{$outer}.
                                                         '.'.$containers{$outer},1);                                                          '.'.$containers{$outer},1,1);
                             $newseqid{$i} = $newidx;                              $newseqid{$i} = $newidx;
                             unless ($errtext) {                              unless ($errtext) {
                                 $result .=  '<li>'.&mt('Folder: [_1] added to course',$docstitle).'</li>'."\n";                                  $result .=  '<li>'.&mt('Folder: [_1] added to course',$docstitle).'</li>'."\n";
Line 11292  sub process_extracted_files { Line 11331  sub process_extracted_files {
                             my ($outtext,$errtext)=                              my ($outtext,$errtext)=
                                 &LONCAPA::map::storemap('/uploaded/'.$docudom.'/'.                                  &LONCAPA::map::storemap('/uploaded/'.$docudom.'/'.
                                                         $docuname.'/'.$folders{$outer}.                                                          $docuname.'/'.$folders{$outer}.
                                                         '.'.$containers{$outer},1);                                                          '.'.$containers{$outer},1,1);
                             unless ($errtext) {                              unless ($errtext) {
                                 if (-e "$prefix$dir/$docstype/$mapinner{$outer}/$newidx/$title") {                                  if (-e "$prefix$dir/$docstype/$mapinner{$outer}/$newidx/$title") {
                                     $result .= '<li>'.&mt('File: [_1] added to course',$docstitle).'</li>'."\n";                                      $result .= '<li>'.&mt('File: [_1] added to course',$docstitle).'</li>'."\n";
Line 11300  sub process_extracted_files { Line 11339  sub process_extracted_files {
                             }                              }
                         }                          }
                     }                      }
                 } elsif ($env{'form.archive_'.$i} eq 'dependency') {                  }
                     my ($title) = ($path =~ m{/([^/]+)$});              } else {
                     $referrer{$i} = $env{'form.archive_dependent_on_'.$i};                  $warning .= &mt('Item extracted from archive: [_1] has unexpected path.',$path).'<br />';
                     if ($env{'form.archive_'.$referrer{$i}} eq 'display') {              }
                         if (ref($dirorder{$i}) eq 'ARRAY') {          }
                             my ($itemidx,$fullpath,$relpath);          for (my $i=1; $i<=$numitems; $i++) {
               next unless ($env{'form.archive_'.$i} eq 'dependency');
               my $path = $env{'form.archive_content_'.$i};
               if ($path =~ /^\Q$pathtocheck\E/) {
                   my ($title) = ($path =~ m{/([^/]+)$});
                   $referrer{$i} = $env{'form.archive_dependent_on_'.$i};
                   if ($env{'form.archive_'.$referrer{$i}} eq 'display') {
                       if (ref($dirorder{$i}) eq 'ARRAY') {
                           my ($itemidx,$fullpath,$relpath);
                           if (ref($dirorder{$referrer{$i}}) eq 'ARRAY') {
                               my $container = $dirorder{$referrer{$i}}->[-1];
                             for (my $j=0; $j<@{$dirorder{$i}}; $j++) {                              for (my $j=0; $j<@{$dirorder{$i}}; $j++) {
                                 if (ref($dirorder{$referrer{$i}}) eq 'ARRAY') {                                  if ($dirorder{$i}->[$j] eq $container) {
                                     my $container = $dirorder{$referrer{$i}}->[-1];                                      $itemidx = $j;
                                     for (my $j=0; $j<@{$dirorder{$i}}; $j++) {  
                                         if ($dirorder{$i}->[$j] eq $container) {  
                                             $itemidx = $j;  
                                         }  
                                     }  
                                 }                                  }
                             }                              }
                             if ($itemidx ne '') {                          }
                                 if (grep(/^\Q$referrer{$i}\E$/,@archdirs)) {                          if ($itemidx eq '') {
                                     if ($mapinner{$referrer{$i}}) {                              $itemidx =  0;
                                         $fullpath = "$prefix$dir/$docstype/$mapinner{$referrer{$i}}";                          }
                                         for (my $j=$itemidx; $j<@{$dirorder{$i}}; $j++) {                          if (grep(/^\Q$referrer{$i}\E$/,@archdirs)) {
                                             if (grep(/^\Q$dirorder{$i}->[$j]\E$/,@archdirs)) {                              if ($mapinner{$referrer{$i}}) {
                                                 unless (defined($newseqid{$dirorder{$i}->[$j]})) {                                  $fullpath = "$prefix$dir/$docstype/$mapinner{$referrer{$i}}";
                                                     $fullpath .= '/'.$titles{$dirorder{$i}->[$j]};                                  for (my $j=$itemidx; $j<@{$dirorder{$i}}; $j++) {
                                                     $relpath .= '/'.$titles{$dirorder{$i}->[$j]};                                      if (grep(/^\Q$dirorder{$i}->[$j]\E$/,@archdirs)) {
                                                     if (!-e $fullpath) {                                          unless (defined($newseqid{$dirorder{$i}->[$j]})) {
                                                         mkdir($fullpath,0755);                                              $fullpath .= '/'.$titles{$dirorder{$i}->[$j]};
                                                     }                                              $relpath .= '/'.$titles{$dirorder{$i}->[$j]};
                                                 }                                              if (!-e $fullpath) {
                                             } else {                                                  mkdir($fullpath,0755);
                                                 last;  
                                             }                                              }
                                         }                                          }
                                       } else {
                                           last;
                                     }                                      }
                                 } elsif ($newdest{$referrer{$i}}) {                                  }
                                     $fullpath = $newdest{$referrer{$i}};                              }
                                     for (my $j=$itemidx; $j<@{$dirorder{$i}}; $j++) {                          } elsif ($newdest{$referrer{$i}}) {
                                         if ($env{'form.archive_'.$dirorder{$i}->[$j]} eq 'discard') {                              $fullpath = $newdest{$referrer{$i}};
                                             $orphaned{$i} = $env{'form.archive_'.$dirorder{$i}->[$j]};                              for (my $j=$itemidx; $j<@{$dirorder{$i}}; $j++) {
                                             last;                                  if ($env{'form.archive_'.$dirorder{$i}->[$j]} eq 'discard') {
                                         } elsif (grep(/^\Q$dirorder{$i}->[$j]\E$/,@archdirs)) {                                      $orphaned{$i} = $env{'form.archive_'.$dirorder{$i}->[$j]};
                                             unless (defined($newseqid{$dirorder{$i}->[$j]})) {                                      last;
                                                 $fullpath .= '/'.$titles{$dirorder{$i}->[$j]};                                  } elsif (grep(/^\Q$dirorder{$i}->[$j]\E$/,@archdirs)) {
                                                 $relpath .= '/'.$titles{$dirorder{$i}->[$j]};                                      unless (defined($newseqid{$dirorder{$i}->[$j]})) {
                                                 if (!-e $fullpath) {                                          $fullpath .= '/'.$titles{$dirorder{$i}->[$j]};
                                                     mkdir($fullpath,0755);                                          $relpath .= '/'.$titles{$dirorder{$i}->[$j]};
                                                 }                                          if (!-e $fullpath) {
                                             }                                              mkdir($fullpath,0755);
                                         } else {  
                                             last;  
                                         }                                          }
                                     }                                      }
                                   } else {
                                       last;
                                 }                                  }
                                 if ($fullpath ne '') {                              }
                                     if (-e "$prefix$path") {                          }
                                         system("mv $prefix$path $fullpath/$title");                          if ($fullpath ne '') {
                                     }                              if (-e "$prefix$path") {
                                     if (-e "$fullpath/$title") {                                  system("mv $prefix$path $fullpath/$title");
                                         my $showpath;                              }
                                         if ($relpath ne '') {                              if (-e "$fullpath/$title") {
                                             $showpath = "$relpath/$title";                                  my $showpath;
                                         } else {                                  if ($relpath ne '') {
                                             $showpath = "/$title";                                      $showpath = "$relpath/$title";
                                         }                                   } else {
                                         $result .= '<li>'.&mt('[_1] included as a dependency',$showpath).'</li>'."\n";                                      $showpath = "/$title";
                                     }   
                                     unless ($ishome) {  
                                         my $fetch = "$fullpath/$title";  
                                         $fetch =~ s/^\Q$prefix$dir\E//;   
                                         $prompttofetch{$fetch} = 1;  
                                     }  
                                 }                                  }
                                   $result .= '<li>'.&mt('[_1] included as a dependency',$showpath).'</li>'."\n";
                               }
                               unless ($ishome) {
                                   my $fetch = "$fullpath/$title";
                                   $fetch =~ s/^\Q$prefix$dir\E//;
                                   $prompttofetch{$fetch} = 1;
                             }                              }
                         }                          }
                     } elsif ($env{'form.archive_'.$referrer{$i}} eq 'discard') {  
                         $warning .= &mt('[_1] is a dependency of [_2], which was discarded.',  
                                         $path,$env{'form.archive_content_'.$referrer{$i}}).'<br />';  
                     }                      }
                   } elsif ($env{'form.archive_'.$referrer{$i}} eq 'discard') {
                       $warning .= &mt('[_1] is a dependency of [_2], which was discarded.',
                                       $path,$env{'form.archive_content_'.$referrer{$i}}).'<br />';
                 }                  }
             } else {              } else {
                 $warning .= &mt('Item extracted from archive: [_1] has unexpected path.',$path).'<br />';                   $warning .= &mt('Item extracted from archive: [_1] has unexpected path.',$path).'<br />';
             }              }
         }          }
         if (keys(%todelete)) {          if (keys(%todelete)) {
Line 13887  sub build_release_hashes { Line 13932  sub build_release_hashes {
     return;      return;
 }  }
   
   sub update_content_constraints {
       my ($cdom,$cnum,$chome,$cid) = @_;
       my %curr_reqd_hash = &Apache::lonnet::userenvironment($cdom,$cnum,'internal.releaserequired');
       my ($reqdmajor,$reqdminor) = split(/\./,$curr_reqd_hash{'internal.releaserequired'});
       my %checkresponsetypes;
       foreach my $key (keys(%Apache::lonnet::needsrelease)) {
           my ($item,$name,$value) = split(/:/,$key);
           if ($item eq 'resourcetag') {
               if ($name eq 'responsetype') {
                   $checkresponsetypes{$value} = $Apache::lonnet::needsrelease{$key}
               }
           }
       }
       my $navmap = Apache::lonnavmaps::navmap->new();
       if (defined($navmap)) {
           my %allresponses;
           foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() },1,0)) {
               my %responses = $res->responseTypes();
               foreach my $key (keys(%responses)) {
                   next unless(exists($checkresponsetypes{$key}));
                   $allresponses{$key} += $responses{$key};
               }
           }
           foreach my $key (keys(%allresponses)) {
               my ($major,$minor) = split(/\./,$checkresponsetypes{$key});
               if (($major > $reqdmajor) || ($major == $reqdmajor && $minor > $reqdminor)) {
                   ($reqdmajor,$reqdminor) = ($major,$minor);
               }
           }
           undef($navmap);
       }
       unless (($reqdmajor eq '') && ($reqdminor eq '')) {
           &Apache::lonnet::update_released_required($reqdmajor.'.'.$reqdminor,$cdom,$cnum,$chome,$cid);
       }
       return;
   }
   
   sub parse_supplemental_title {
       my ($title) = @_;
   
       my ($foldertitle,$renametitle);
       if ($title =~ /&amp;&amp;&amp;/) {
           $title = &HTML::Entites::decode($title);
       }
       if ($title =~ m/^(\d+)___&&&___($match_username)___&&&___($match_domain)___&&&___(.*)$/) {
           $renametitle=$4;
           my ($time,$uname,$udom) = ($1,$2,$3);
           $foldertitle=&Apache::lontexconvert::msgtexconverted($4);
           my $name =  &plainname($uname,$udom);
           $name = &HTML::Entities::encode($name,'"<>&\'');
           $renametitle = &HTML::Entities::encode($renametitle,'"<>&\'');
           $title='<i>'.&Apache::lonlocal::locallocaltime($time).'</i> '.
               $name.': <br />'.$foldertitle;
       }
       if (wantarray) {
           return ($title,$foldertitle,$renametitle);
       }
       return $title;
   }
   
 =pod  =pod
   
 =back  =back

Removed from v.1.1075.2.10  
changed lines
  Added in v.1.1075.2.11


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