[LON-CAPA-cvs] cvs: loncom(version_2_8_X) /auth lonacc.pm

raeburn raeburn@source.lon-capa.org
Wed, 10 Dec 2008 16:42:51 -0000


raeburn		Wed Dec 10 16:42:51 2008 EDT

  Modified files:              (Branch: version_2_8_X)
    /loncom/auth	lonacc.pm 
  Log:
  - Backport 1.118, 1.122
  
  
Index: loncom/auth/lonacc.pm
diff -u loncom/auth/lonacc.pm:1.116 loncom/auth/lonacc.pm:1.116.2.1
--- loncom/auth/lonacc.pm:1.116	Mon Sep 15 19:08:44 2008
+++ loncom/auth/lonacc.pm	Wed Dec 10 16:42:51 2008
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Cookie Based Access Handler
 #
-# $Id: lonacc.pm,v 1.116 2008/09/15 19:08:44 raeburn Exp $
+# $Id: lonacc.pm,v 1.116.2.1 2008/12/10 16:42:51 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -90,16 +90,26 @@
 	    if ($lines[$i]=~/^--\Q$contentsep\E/) {
 		if ($name) {
 		    chomp($value);
+                    if (ref($fields) eq 'ARRAY') {
+                        next if (!grep(/^\Q$name\E$/,@{$fields}));
+                    }
 		    if ($fname) {
-			$env{"form.$name.filename"}=$fname;
-			$env{"form.$name.mimetype"}=$fmime;
+                        if ($env{'form.symb'} ne '') {
+                            my $size = (length($value))/(1024.0 * 1024.0);
+                            if (&upload_size_allowed($name,$size,$fname) eq 'ok') {
+                                $env{"form.$name.filename"}=$fname;
+                                $env{"form.$name.mimetype"}=$fmime;
+                                &Apache::loncommon::add_to_env("form.$name",$value);
+                            }
+                        } else {
+			    $env{"form.$name.filename"}=$fname;
+			    $env{"form.$name.mimetype"}=$fmime;
+                            &Apache::loncommon::add_to_env("form.$name",$value);
+                        }
 		    } else {
 			$value=~s/\s+$//s;
+                        &Apache::loncommon::add_to_env("form.$name",$value);
 		    }
-                    if (ref($fields) eq 'ARRAY') {
-                        next if (!grep(/^\Q$name\E$/,@{$fields}));
-                    }
-		    &Apache::loncommon::add_to_env("form.$name",$value);
 		}
 		if ($i<$#lines) {
 		    $i++;
@@ -145,6 +155,34 @@
     $r->headers_in->unset('Content-length');
 }
 
+#
+# Perform size checks for file uploads to essayresponse items in course context.
+#
+# Add form.HWFILESIZE.$part_$id to %env with file size (MB)
+# If file exceeds maximum allowed size, add form.HWFILETOOBIG.$part_$id to %env.
+#
+
+sub upload_size_allowed {
+    my ($name,$size,$fname) = @_;
+    if ($name =~ /^HWFILE(\w+)$/) {
+        my $ident = $1;
+        my $item = 'HWFILESIZE'.$ident;
+        my $savesize = sprintf("%.6f",$size);
+        &Apache::loncommon::add_to_env("form.$item",$savesize);
+        my $maxsize= &Apache::lonnet::EXT("resource.$ident.maxfilesize");
+        if (!$maxsize) {
+            $maxsize = 10.0; # FIXME This should become a domain configuration.
+        }
+        if ($size > $maxsize) {
+            my $warn = 'HWFILETOOBIG'.$ident;
+            &Apache::loncommon::add_to_env("form.$warn",$fname);
+            return;
+        }
+    }
+    return 'ok';
+}
+
+
 # handle the case of the single sign on user, at this point $r->user 
 # will be set and valid now need to find the loncapa user info and possibly
 # balance them