[LON-CAPA-cvs] cvs: loncom(version_2_11_X) /interface loncommon.pm

raeburn raeburn at source.lon-capa.org
Wed Aug 1 00:34:01 EDT 2012


raeburn		Wed Aug  1 04:34:01 2012 EDT

  Modified files:              (Branch: version_2_11_X)
    /loncom/interface	loncommon.pm 
  Log:
  - For 2.11.
    - Backport 1.1083, 1.1084, 1.1085, 1.1086, 1.1087.
  
  
-------------- next part --------------
Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.1075.2.10 loncom/interface/loncommon.pm:1.1075.2.11
--- loncom/interface/loncommon.pm:1.1075.2.10	Sat Jun  9 00:42:31 2012
+++ loncom/interface/loncommon.pm	Wed Aug  1 04:34:00 2012
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.1075.2.10 2012/06/09 00:42:31 raeburn Exp $
+# $Id: loncommon.pm,v 1.1075.2.11 2012/08/01 04:34:00 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -9356,7 +9356,7 @@
 sub ask_for_embedded_content {
     my ($actionurl,$state,$allfiles,$codebase,$args)=@_;
     my (%subdependencies,%dependencies,%mapping,%existing,%newfiles,%pathchanges,
-        %currsubfile,%unused);
+        %currsubfile,%unused,$rem);
     my $counter = 0;
     my $numnew = 0;
     my $numremref = 0;
@@ -9369,6 +9369,10 @@
     my $heading = &mt('Upload embedded files');
     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')) {
         my $current_path='/';
         if ($env{'form.currentpath'}) {
@@ -9398,6 +9402,13 @@
         if (ref($args) eq 'HASH') {
             $url = $args->{'docs_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') {
         if ($env{'request.course.id'} ne '') {
@@ -9407,6 +9418,7 @@
                 $url = $args->{'docs_url'};
                 $title = $args->{'docs_title'};
                 $toplevel = "/$url";
+                ($rem) = ($toplevel =~ m{^(.+/)[^/]+$});
                 ($path) =  
                     ($toplevel =~ m{^(\Q/uploaded/$cdom/$cnum/\E(?:docs|supplemental)/(?:default|\d+)/\d+)/});
                 $fileloc = &Apache::lonnet::filelocation('',$toplevel);
@@ -9469,7 +9481,9 @@
                 my @subdir_list = grep(!/^\./,readdir($dir));
                 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 '') {
                 my ($dir) = ($fileloc =~ m{^(.+/)[^/]+$});
                 if ($dir ne '') {
@@ -9505,6 +9519,12 @@
                 if (ref($currsubfile{$path}) eq 'HASH') {
                     foreach my $file (keys(%{$currsubfile{$path}})) {
                          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; 
                          }
                     }
@@ -9527,7 +9547,9 @@
             my @dir_list = grep(!/^\./,readdir($dir));
             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 '') {
             my ($dir) = ($fileloc =~ m{^(.+/)[^/]+$});
             if ($dir ne '') {
@@ -9561,9 +9583,23 @@
         unless (($file eq $filename) ||
                 ($file eq $filename.'.bak') ||
                 ($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;
         }
     }
+    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)) {
         if ($actionurl eq '/adm/dependencies') {
             next if ($embed_file =~ m{^\w+://});
@@ -9580,7 +9616,6 @@
             $numremref++;
         } elsif ($args->{'error_on_invalid_names'}
             && $embed_file ne &Apache::lonnet::clean_filename($embed_file,{'keep_path' => 1,})) {
-
             $upload_output.='<span class="LC_warning">'.&mt('Invalid characters').'</span>';
             $numinvalid++;
         } else {
@@ -11068,7 +11103,10 @@
             document.getElementById('arc_depon_'+count).style.display='block'; 
             form.elements[depitem].options.length = 0;
             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;
                 for (var j=1; j<6; j++) {
                     if ((j != 2) && (j!= 4)) {
@@ -11209,6 +11247,7 @@
     my (%referrer,%orphaned,%todelete,%todeletedir,%newdest,%newseqid);
     if ($numitems) {
         for (my $i=1; $i<=$numitems; $i++) {
+            next if ($env{'form.archive_'.$i} eq 'dependency');
             my $path = $env{'form.archive_content_'.$i};
             if ($path =~ /^\Q$pathtocheck\E/) {
                 if ($env{'form.archive_'.$i} eq 'discard') {
@@ -11259,7 +11298,7 @@
                             my ($outtext,$errtext) =
                                 &LONCAPA::map::storemap('/uploaded/'.$docudom.'/'.
                                                         $docuname.'/'.$folders{$outer}.
-                                                        '.'.$containers{$outer},1);
+                                                        '.'.$containers{$outer},1,1);
                             $newseqid{$i} = $newidx;
                             unless ($errtext) {
                                 $result .=  '<li>'.&mt('Folder: [_1] added to course',$docstitle).'</li>'."\n";
@@ -11292,7 +11331,7 @@
                             my ($outtext,$errtext)=
                                 &LONCAPA::map::storemap('/uploaded/'.$docudom.'/'.
                                                         $docuname.'/'.$folders{$outer}.
-                                                        '.'.$containers{$outer},1);
+                                                        '.'.$containers{$outer},1,1);
                             unless ($errtext) {
                                 if (-e "$prefix$dir/$docstype/$mapinner{$outer}/$newidx/$title") {
                                     $result .= '<li>'.&mt('File: [_1] added to course',$docstitle).'</li>'."\n";
@@ -11300,87 +11339,93 @@
                             }
                         }
                     }
-                } elsif ($env{'form.archive_'.$i} eq 'dependency') {
-                    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);
+                }
+            } else {
+                $warning .= &mt('Item extracted from archive: [_1] has unexpected path.',$path).'<br />';
+            }
+        }
+        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++) {
-                                if (ref($dirorder{$referrer{$i}}) eq 'ARRAY') {
-                                    my $container = $dirorder{$referrer{$i}}->[-1];
-                                    for (my $j=0; $j<@{$dirorder{$i}}; $j++) {
-                                        if ($dirorder{$i}->[$j] eq $container) {
-                                            $itemidx = $j;
-                                        }
-                                    }
+                                if ($dirorder{$i}->[$j] eq $container) {
+                                    $itemidx = $j;
                                 }
                             }
-                            if ($itemidx ne '') {
-                                if (grep(/^\Q$referrer{$i}\E$/, at archdirs)) {
-                                    if ($mapinner{$referrer{$i}}) {
-                                        $fullpath = "$prefix$dir/$docstype/$mapinner{$referrer{$i}}";
-                                        for (my $j=$itemidx; $j<@{$dirorder{$i}}; $j++) {
-                                            if (grep(/^\Q$dirorder{$i}->[$j]\E$/, at archdirs)) {
-                                                unless (defined($newseqid{$dirorder{$i}->[$j]})) {
-                                                    $fullpath .= '/'.$titles{$dirorder{$i}->[$j]};
-                                                    $relpath .= '/'.$titles{$dirorder{$i}->[$j]};
-                                                    if (!-e $fullpath) {
-                                                        mkdir($fullpath,0755);
-                                                    }
-                                                }
-                                            } else {
-                                                last;
+                        }
+                        if ($itemidx eq '') {
+                            $itemidx =  0;
+                        }
+                        if (grep(/^\Q$referrer{$i}\E$/, at archdirs)) {
+                            if ($mapinner{$referrer{$i}}) {
+                                $fullpath = "$prefix$dir/$docstype/$mapinner{$referrer{$i}}";
+                                for (my $j=$itemidx; $j<@{$dirorder{$i}}; $j++) {
+                                    if (grep(/^\Q$dirorder{$i}->[$j]\E$/, at archdirs)) {
+                                        unless (defined($newseqid{$dirorder{$i}->[$j]})) {
+                                            $fullpath .= '/'.$titles{$dirorder{$i}->[$j]};
+                                            $relpath .= '/'.$titles{$dirorder{$i}->[$j]};
+                                            if (!-e $fullpath) {
+                                                mkdir($fullpath,0755);
                                             }
                                         }
+                                    } else {
+                                        last;
                                     }
-                                } elsif ($newdest{$referrer{$i}}) {
-                                    $fullpath = $newdest{$referrer{$i}};
-                                    for (my $j=$itemidx; $j<@{$dirorder{$i}}; $j++) {
-                                        if ($env{'form.archive_'.$dirorder{$i}->[$j]} eq 'discard') {
-                                            $orphaned{$i} = $env{'form.archive_'.$dirorder{$i}->[$j]};
-                                            last;
-                                        } elsif (grep(/^\Q$dirorder{$i}->[$j]\E$/, at archdirs)) {
-                                            unless (defined($newseqid{$dirorder{$i}->[$j]})) {
-                                                $fullpath .= '/'.$titles{$dirorder{$i}->[$j]};
-                                                $relpath .= '/'.$titles{$dirorder{$i}->[$j]};
-                                                if (!-e $fullpath) {
-                                                    mkdir($fullpath,0755);
-                                                }
-                                            }
-                                        } else {
-                                            last;
+                                }
+                            }
+                        } elsif ($newdest{$referrer{$i}}) {
+                            $fullpath = $newdest{$referrer{$i}};
+                            for (my $j=$itemidx; $j<@{$dirorder{$i}}; $j++) {
+                                if ($env{'form.archive_'.$dirorder{$i}->[$j]} eq 'discard') {
+                                    $orphaned{$i} = $env{'form.archive_'.$dirorder{$i}->[$j]};
+                                    last;
+                                } elsif (grep(/^\Q$dirorder{$i}->[$j]\E$/, at archdirs)) {
+                                    unless (defined($newseqid{$dirorder{$i}->[$j]})) {
+                                        $fullpath .= '/'.$titles{$dirorder{$i}->[$j]};
+                                        $relpath .= '/'.$titles{$dirorder{$i}->[$j]};
+                                        if (!-e $fullpath) {
+                                            mkdir($fullpath,0755);
                                         }
                                     }
+                                } else {
+                                    last;
                                 }
-                                if ($fullpath ne '') {
-                                    if (-e "$prefix$path") {
-                                        system("mv $prefix$path $fullpath/$title");
-                                    }
-                                    if (-e "$fullpath/$title") {
-                                        my $showpath;
-                                        if ($relpath ne '') {
-                                            $showpath = "$relpath/$title";
-                                        } else {
-                                            $showpath = "/$title";
-                                        } 
-                                        $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;
-                                    }
+                            }
+                        }
+                        if ($fullpath ne '') {
+                            if (-e "$prefix$path") {
+                                system("mv $prefix$path $fullpath/$title");
+                            }
+                            if (-e "$fullpath/$title") {
+                                my $showpath;
+                                if ($relpath ne '') {
+                                    $showpath = "$relpath/$title";
+                                } else {
+                                    $showpath = "/$title";
                                 }
+                                $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 {
-                $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)) {
@@ -13887,6 +13932,66 @@
     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 =~ /&&&/) {
+        $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
 
 =back


More information about the LON-CAPA-cvs mailing list