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

matthew lon-capa-cvs@mail.lon-capa.org
Fri, 18 Mar 2005 00:18:42 -0000


This is a MIME encoded message

--matthew1111105122
Content-Type: text/plain

matthew		Thu Mar 17 19:18:42 2005 EDT

  Modified files:              
    /loncom/interface	loncommon.pm 
  Log:
  Rearranged order of routines to help with POD  (the diff gets things a bit
  backwards in my opinion).  Added create_text_file to take care of the
  tedious part of creating files. 
  
  
--matthew1111105122
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20050317191842.txt"

Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.255 loncom/interface/loncommon.pm:1.256
--- loncom/interface/loncommon.pm:1.255	Wed Mar  9 19:21:48 2005
+++ loncom/interface/loncommon.pm	Thu Mar 17 19:18:40 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.255 2005/03/10 00:21:48 matthew Exp $
+# $Id: loncommon.pm,v 1.256 2005/03/18 00:18:40 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -835,6 +835,98 @@
 
 =pod
 
+=item * change_content_javascript():
+
+This and the next function allow you to create small sections of an
+otherwise static HTML page that you can update on the fly with
+Javascript, even in Netscape 4.
+
+The Javascript fragment returned by this function (no E<lt>scriptE<gt> tag)
+must be written to the HTML page once. It will prove the Javascript
+function "change(name, content)". Calling the change function with the
+name of the section 
+you want to update, matching the name passed to C<changable_area>, and
+the new content you want to put in there, will put the content into
+that area.
+
+B<Note>: Netscape 4 only reserves enough space for the changable area
+to contain room for the original contents. You need to "make space"
+for whatever changes you wish to make, and be B<sure> to check your
+code in Netscape 4. This feature in Netscape 4 is B<not> powerful;
+it's adequate for updating a one-line status display, but little more.
+This script will set the space to 100% width, so you only need to
+worry about height in Netscape 4.
+
+Modern browsers are much less limiting, and if you can commit to the
+user not using Netscape 4, this feature may be used freely with
+pretty much any HTML.
+
+=cut
+
+sub change_content_javascript {
+    # If we're on Netscape 4, we need to use Layer-based code
+    if ($ENV{'browser.type'} eq 'netscape' &&
+	$ENV{'browser.version'} =~ /^4\./) {
+	return (<<NETSCAPE4);
+	function change(name, content) {
+	    doc = document.layers[name+"___escape"].layers[0].document;
+	    doc.open();
+	    doc.write(content);
+	    doc.close();
+	}
+NETSCAPE4
+    } else {
+	# Otherwise, we need to use semi-standards-compliant code
+	# (technically, "innerHTML" isn't standard but the equivalent
+	# is really scary, and every useful browser supports it
+	return (<<DOMBASED);
+	function change(name, content) {
+	    element = document.getElementById(name);
+	    element.innerHTML = content;
+	}
+DOMBASED
+    }
+}
+
+=pod
+
+=item * changable_area($name, $origContent):
+
+This provides a "changable area" that can be modified on the fly via
+the Javascript code provided in C<change_content_javascript>. $name is
+the name you will use to reference the area later; do not repeat the
+same name on a given HTML page more then once. $origContent is what
+the area will originally contain, which can be left blank.
+
+=cut
+
+sub changable_area {
+    my ($name, $origContent) = @_;
+
+    if ($ENV{'browser.type'} eq 'netscape' &&
+	$ENV{'browser.version'} =~ /^4\./) {
+	# If this is netscape 4, we need to use the Layer tag
+	return "<ilayer width='100%' id='${name}___escape' overflow='none'><layer width='100%' id='$name' overflow='none'>$origContent</layer></ilayer>";
+    } else {
+	return "<span id='$name'>$origContent</span>";
+    }
+}
+
+=pod
+
+=back
+
+=head1 Excel and CSV file utility routines
+
+=over 4
+
+=cut
+
+###############################################################
+###############################################################
+
+=pod
+
 =item * csv_translate($text) 
 
 Translate $text to allow it to be output as a 'comma separated values' 
@@ -851,7 +943,6 @@
     return $text;
 }
 
-
 ###############################################################
 ###############################################################
 
@@ -875,6 +966,10 @@
 
 =item h3
 
+=item h4
+
+=item i
+
 =item date
 
 =back
@@ -909,7 +1004,7 @@
 
 =pod
 
-=item &create_workbook
+=item * create_workbook
 
 Create an Excel worksheet.  If it fails, output message on the
 request object and return undefs.
@@ -952,84 +1047,40 @@
 
 =pod
 
-=item * change_content_javascript():
+=item * create_text_file
 
-This and the next function allow you to create small sections of an
-otherwise static HTML page that you can update on the fly with
-Javascript, even in Netscape 4.
-
-The Javascript fragment returned by this function (no E<lt>scriptE<gt> tag)
-must be written to the HTML page once. It will prove the Javascript
-function "change(name, content)". Calling the change function with the
-name of the section 
-you want to update, matching the name passed to C<changable_area>, and
-the new content you want to put in there, will put the content into
-that area.
+Create a file to write to and eventually make available to the usre.
+If file creation fails, outputs an error message on the request object and 
+return undefs.
 
-B<Note>: Netscape 4 only reserves enough space for the changable area
-to contain room for the original contents. You need to "make space"
-for whatever changes you wish to make, and be B<sure> to check your
-code in Netscape 4. This feature in Netscape 4 is B<not> powerful;
-it's adequate for updating a one-line status display, but little more.
-This script will set the space to 100% width, so you only need to
-worry about height in Netscape 4.
+Inputs: Apache request object, and file suffix
 
-Modern browsers are much less limiting, and if you can commit to the
-user not using Netscape 4, this feature may be used freely with
-pretty much any HTML.
+Returns (undef) on failure, 
+    Filehandle and filename on success.
 
 =cut
 
-sub change_content_javascript {
-    # If we're on Netscape 4, we need to use Layer-based code
-    if ($ENV{'browser.type'} eq 'netscape' &&
-	$ENV{'browser.version'} =~ /^4\./) {
-	return (<<NETSCAPE4);
-	function change(name, content) {
-	    doc = document.layers[name+"___escape"].layers[0].document;
-	    doc.open();
-	    doc.write(content);
-	    doc.close();
-	}
-NETSCAPE4
-    } else {
-	# Otherwise, we need to use semi-standards-compliant code
-	# (technically, "innerHTML" isn't standard but the equivalent
-	# is really scary, and every useful browser supports it
-	return (<<DOMBASED);
-	function change(name, content) {
-	    element = document.getElementById(name);
-	    element.innerHTML = content;
-	}
-DOMBASED
+###############################################################
+###############################################################
+sub create_text_file {
+    my ($r,$suffix) = @_;
+    if (! defined($suffix)) { $suffix = 'txt'; };
+    my $fh;
+    my $filename = '/prtspool/'.
+        $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'.
+        time.'_'.rand(1000000000).'.'.$suffix;
+    $fh = Apache::File->new('>/home/httpd'.$filename);
+    if (! defined($fh)) {
+        $r->log_error("Couldn't open $filename for output $!");
+        $r->print("Problems occured in creating the output file.  ".
+                  "This error has been logged.  ".
+                  "Please alert your LON-CAPA administrator.");
     }
+    return ($fh,$filename)
 }
 
-=pod
-
-=item * changable_area($name, $origContent):
-
-This provides a "changable area" that can be modified on the fly via
-the Javascript code provided in C<change_content_javascript>. $name is
-the name you will use to reference the area later; do not repeat the
-same name on a given HTML page more then once. $origContent is what
-the area will originally contain, which can be left blank.
 
-=cut
-
-sub changable_area {
-    my ($name, $origContent) = @_;
-
-    if ($ENV{'browser.type'} eq 'netscape' &&
-	$ENV{'browser.version'} =~ /^4\./) {
-	# If this is netscape 4, we need to use the Layer tag
-	return "<ilayer width='100%' id='${name}___escape' overflow='none'><layer width='100%' id='$name' overflow='none'>$origContent</layer></ilayer>";
-    } else {
-	return "<span id='$name'>$origContent</span>";
-    }
-}
-
-=pod
+=pod 
 
 =back
 

--matthew1111105122--