[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lon-capa-cvs
Subject:    [LON-CAPA-cvs] cvs: loncom /interface loncommon.pm  /publisher lonupload.pm
From:       raeburn <raeburn () source ! lon-capa ! org>
Date:       2010-10-27 1:04:15
Message-ID: cvsraeburn1288141455 () cvsserver
[Download RAW message or body]

This is a MIME encoded message


raeburn		Wed Oct 27 01:04:15 2010 EDT

  Modified files:              
    /loncom/interface	loncommon.pm 
    /loncom/publisher	lonupload.pm 
  Log:
  - Bug 5462. No reference warning or prompt for upload of files, if 
     referenced files are already available at the specified paths.
     - work in progress (change still needed for londocs.pm).
  
  
["raeburn-20101027010415.txt" (text/plain)]

Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.983 loncom/interface/loncommon.pm:1.984
--- loncom/interface/loncommon.pm:1.983	Sat Oct 23 19:29:50 2010
+++ loncom/interface/loncommon.pm	Wed Oct 27 01:04:10 2010
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.983 2010/10/23 19:29:50 raeburn Exp $
+# $Id: loncommon.pm,v 1.984 2010/10/27 01:04:10 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -8296,14 +8296,83 @@
 
 sub ask_for_embedded_content {
     my ($actionurl,$state,$allfiles,$codebase,$args)=@_;
-    my $upload_output = '
-   <form name="upload_embedded" action="'.$actionurl.'"
-                  method="post" enctype="multipart/form-data">';
-    $upload_output .= $state;
-    $upload_output .= '<b>Upload embedded files</b>:<br />'.&start_data_table();
-
+    my (%subdependencies,%dependencies,%newfiles);
     my $num = 0;
-    foreach my $embed_file (sort {lc($a) cmp lc($b)} keys(%{$allfiles})) {
+    my $upload_output;
+    foreach my $embed_file (keys(%{$allfiles})) {
+        unless ($embed_file =~ m{^\w+://} || $embed_file =~ m{^/}) {
+            my ($relpath,$fname);
+            if ($embed_file =~ m{/}) {
+                my ($path,$fname) = ($embed_file =~ m{^(.+)/([^/]*)$});
+                $subdependencies{$path}{$fname} = 1;
+            } else {
+                $dependencies{$embed_file} = 1;
+            }
+        }
+    }
+    my ($url,$udom,$uname,$getpropath);
+    if (($actionurl eq '/adm/portfolio') || ($actionurl eq \
'/adm/coursegrp_portfolio')) { +        my $current_path='/';
+        if ($env{'form.currentpath'}) {
+            $current_path = $env{'form.currentpath'};
+        }
+        if ($actionurl eq '/adm/coursegrp_portfolio') {
+            $udom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+            $uname = $env{'course.'.$env{'request.course.id'}.'.num'};
+            $url = '/userfiles/groups/'.$env{'form.group'}.'/portfolio';
+        } else {
+            $udom = $env{'user.domain'};
+            $uname = $env{'user.name'};
+            $url = '/userfiles/portfolio';
+        }
+        $url .= $current_path;
+        $getpropath = 1;
+    } elsif ($actionurl eq '/adm/upload') {
+        ($uname,my $rest) = ($args->{'current_path'} =~ \
m{/priv/($match_username)/?(.*)$}); +        $url = '/home/'.$uname.'/public_html';
+        if ($rest ne '') {
+            $url .= '/'.$rest;
+        }
+    }
+    foreach my $path (keys(%subdependencies)) {
+        my %currsubfile;
+        if (($actionurl eq '/adm/portfolio') || ($actionurl eq \
'/adm/coursegrp_portfolio')) {  +            my @subdir_list = \
&Apache::lonnet::dirlist($url.$path,$udom,$uname,$getpropath); +            foreach \
my $line (@subdir_list) { +                my ($file_name,$rest) = \
split(/\&/,$line,2); +                $currsubfile{$file_name} = 1;
+            }
+        } elsif ($actionurl eq '/adm/upload') {
+            if (opendir(my $dir,$url.'/'.$path)) {
+                my @subdir_list = grep(!/^\./,readdir($dir));
+                map {$currsubfile{$_} = 1;} @subdir_list;
+            }
+        }
+        foreach my $file (keys(%{$subdependencies{$path}})) {
+            unless ($currsubfile{$file}) {
+                 $newfiles{$path.'/'.$file} = 1; 
+            }
+        }
+    }
+    my (@dir_list,%currfile);
+    if (($actionurl eq '/adm/portfolio') || ($actionurl eq \
'/adm/coursegrp_portfolio')) { +        my @dir_list = \
&Apache::lonnet::dirlist($url,$udom,$uname,$getpropath); +        foreach my $line \
(@dir_list) { +            my ($file_name,$rest) = split(/\&/,$line,2);
+            $currfile{$file_name} = 1;
+        }
+    } elsif ($actionurl eq '/adm/upload') {
+        if (opendir(my $dir,$url)) {
+            @dir_list = grep(!/^\./,readdir($dir));
+            map {$currfile{$_} = 1;} @dir_list;
+        }
+    }
+    foreach my $file (keys(%dependencies)) {
+        unless ($currfile{$file}) {
+            $newfiles{$file} = 1;
+        }
+    }
+    foreach my $embed_file (sort {lc($a) cmp lc($b)} keys(%newfiles)) {
         $upload_output .= &start_data_table_row().
             '<td>'.$embed_file.'</td><td>';
         if ($args->{'ignore_remote_references'}
@@ -8330,14 +8399,21 @@
                     &escape($$codebase{$embed_file}).'" />';
             }
         }
-        $upload_output .= '</td>'.&Apache::loncommon::end_data_table_row();
+        $upload_output .= '</td>'.&Apache::loncommon::end_data_table_row()."\n";
         $num++;
     }
-    $upload_output .= &Apache::loncommon::end_data_table().'<br />
-   <input type ="hidden" name="number_embedded_items" value="'.$num.'" />
-   <input type ="submit" value="'.&mt('Upload Listed Files').'" />
-   '.&mt('(only files for which a location has been provided will be uploaded)').'
-   </form>';
+    if ($num) {
+        $upload_output = '<form name="upload_embedded" action="'.$actionurl.'"'.
+                         ' method="post" enctype="multipart/form-data">'."\n".
+                         $state.
+                         '<b>Upload embedded files</b>:<br />'.&start_data_table().
+                         $upload_output.
+                         &Apache::loncommon::end_data_table().'<br />'."\n".
+                         '<input type ="hidden" name="number_embedded_items" \
value="'.$num.'" />'."\n". +                         '<input type ="submit" \
value="'.&mt('Upload Listed Files').'" />'."\n". +                         &mt('(only \
files for which a location has been provided will be uploaded)')."\n". +              \
'</form>'; +    }
     return $upload_output;
 }
 
@@ -8373,8 +8449,7 @@
                                               $dir_root,$port_path,$disk_quota,
                                               $current_disk_usage,$uname,$udom);
             if ($state eq 'will_exceed_quota'
-                || $state eq 'file_locked'
-                || $state eq 'file_exists' ) {
+                || $state eq 'file_locked') {
                 $output .= $msg;
                 next;
             }
@@ -8401,18 +8476,25 @@
 
         $env{'form.embedded_item_'.$i.'.filename'}=$fname;
         if ($context eq 'portfolio') {
-            my $result=
-                &Apache::lonnet::userfileupload('embedded_item_'.$i,'',
-                                                $dirpath.$path);
-            if ($result !~ m|^/uploaded/|) {
-                $output .= '<span class="LC_error">'
-                      .&mt('An error occurred ([_1]) while trying to upload [_2] for \
                embedded element [_3].'
-                           \
                ,$result,$orig_uploaded_filename,$env{'form.embedded_orig_'.$i})
-                      .'</span><br />';
-                next;
+            my $result;
+            if ($state eq 'existingfile') {
+                $result=
+                    \
&Apache::lonnet::userfileupload('embedded_item_'.$i,'existingfile', +                 \
$dirpath.$path,);  } else {
-                $output .= '<p>'.&mt('Uploaded [_1]','<span class="LC_filename">'.
-                           $path.$fname.'</span>').'</p>';     
+                $result=
+                    &Apache::lonnet::userfileupload('embedded_item_'.$i,'',
+                                                    $dirpath.$path);
+                if ($result !~ m|^/uploaded/|) {
+                    $output .= '<span class="LC_error">'
+                               .&mt('An error occurred ([_1]) while trying to upload \
[_2] for embedded element [_3].' +                               \
,$result,$orig_uploaded_filename,$env{'form.embedded_orig_'.$i}) +                    \
.'</span><br />'; +                    next;
+                } else {
+                    $output .= '<p>'.&mt('Uploaded [_1]','<span \
class="LC_filename">'. +                               \
$path.$fname.'</span>').'</p>';      +                }
             }
         } else {
 # Save the file
@@ -8485,7 +8567,7 @@
     my $found_file = 0;
     my $locked_file = 0;
     foreach my $line (@dir_list) {
-        my ($file_name)=split(/\&/,$line,2);
+        my ($file_name,$rest)=split(/\&/,$line,2);
         if ($file_name eq $fname){
             $file_name = $path.$file_name;
             if ($group ne '') {
@@ -8494,6 +8576,20 @@
             $found_file = 1;
             if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') {
                 $locked_file = 1;
+            } else {
+                my @info = split(/\&/,$rest);
+                my $currsize = $info[6]/1000;
+                if ($currsize < $filesize) {
+                    my $extra = $filesize - $currsize;
+                    if (($current_disk_usage + $extra) > $disk_quota) {
+                        my $msg = '<span class="LC_error">'.
+                                  &mt('Unable to upload [_1]. (size = [_2] \
kilobytes). Disk quota will be exceeded if existing (smaller) file with same name \
(size = [_3] kilobytes) is replaced.', +                                      '<span \
class="LC_filename">'.$fname.'</span>',$filesize,$currsize).'</span>'. +              \
'<br />'.&mt('Disk quota is [_1] kilobytes. Your current disk usage is [_2] \
kilobytes.', +                                               \
$disk_quota,$current_disk_usage); +                        return \
('will_exceed_quota',$msg); +                    }
+                }
             }
         }
     }
@@ -8511,11 +8607,9 @@
             return ('file_locked',$msg);
         } else {
             my $msg = '<span class="LC_error">';
-            $msg .= &mt('Unable to upload [_1]. A file by that name was found in \
[_2].','<span class="LC_filename">'.$fname.'</span>',$port_path.$env{'form.currentpath'});
 +            $msg .= &mt(' A file by that name: [_1] was found in [_2].','<span \
class="LC_filename">'.$fname.'</span>',$port_path.$env{'form.currentpath'});  $msg .= \
                '</span>';
-            $msg .= '<br />';
-            $msg .= &mt('To upload, rename or delete existing [_1] in [_2].','<span \
                class="LC_filename">'.$fname.'</span>', \
                $port_path.$env{'form.currentpath'});
-            return ('file_exists',$msg);
+            return ('existingfile',$msg);
         }
     }
 }
Index: loncom/publisher/lonupload.pm
diff -u loncom/publisher/lonupload.pm:1.49 loncom/publisher/lonupload.pm:1.50
--- loncom/publisher/lonupload.pm:1.49	Tue Feb 16 10:26:17 2010
+++ loncom/publisher/lonupload.pm	Wed Oct 27 01:04:15 2010
@@ -2,7 +2,7 @@
 # The LearningOnline Network with CAPA
 # Handler to upload files into construction space
 #
-# $Id: lonupload.pm,v 1.49 2010/02/16 10:26:17 bisitz Exp $
+# $Id: lonupload.pm,v 1.50 2010/10/27 01:04:15 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -350,19 +350,23 @@
             my (%allfiles,%codebase);
             &Apache::lonnet::extract_embedded_items($target,\%allfiles,\%codebase);
             if (keys(%allfiles) > 0) {
+                my ($currentpath) = ($url =~ m{^(.+)/[^/]+$});
                 my $state = <<STATE;
     <input type="hidden" name="action"      value="upload_embedded" />
-    <input type="hidden" name="currentpath" value="$env{'form.currentpath'}" />
     <input type="hidden" name="mode"        value="$mode" />
     <input type="hidden" name="phase"       value="three" />
     <input type="hidden" name="filename" value="$url" />
 STATE
-                $result .= "<h3>".&mt("Reference Warning")."</h3>".
-                           "<p>".&mt("Completed upload of the file. This file \
                contained references to other files.")."</p>".
-                          "<p>".&mt("Please select the locations from which the \
                referenced files are to be uploaded.")."</p>".
-                          \
&Apache::loncommon::ask_for_embedded_content($action,$state,\%allfiles,\%codebase, +  \
my $embedded = &Apache::loncommon::ask_for_embedded_content($action,$state,\%allfiles,\%codebase,
  {'error_on_invalid_names'   => 1,
-                                       'ignore_remote_references' => 1,});
+                                       'ignore_remote_references' => 1,
+                                       'current_path'             => $currentpath});
+                if ($embedded) {
+                    $result .= '<h3>'.&mt('Reference Warning').'</h3>'.
+                               '<p>'.&mt('Completed upload of the file. This file \
contained references to other files.').'</p>'. +                               \
'<p>'.&mt('Please select the locations from which the referenced files are to be \
uploaded.').'</p>'. +                               $embedded;
+                }
                 if ($mode eq 'testbank') {
                     $returnflag = 'embedded';
                     $result .=  '<p>'.&mt('Or [_1]continue[_2] the testbank import \
without these files','<a \
href="javascript:document.testbankForm.submit();">','</a>').'</p>';


_______________________________________________
LON-CAPA-cvs mailing list
LON-CAPA-cvs@mail.lon-capa.org
http://mail.lon-capa.org/mailman/listinfo/lon-capa-cvs

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic