Index: openacs-4/packages/acs-tcl/tcl/tcl-documentation-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/tcl-documentation-procs.tcl,v
diff -u -r1.7 -r1.8
--- openacs-4/packages/acs-tcl/tcl/tcl-documentation-procs.tcl	10 Mar 2003 19:19:14 -0000	1.7
+++ openacs-4/packages/acs-tcl/tcl/tcl-documentation-procs.tcl	2 Aug 2003 00:40:01 -0000	1.8
@@ -344,6 +344,10 @@
     signature for the whole list. For :array it also expects one signature only, taken on the
     [array get] form of the array.
 
+    
cached
+    This syntax will check to see if a value is being passed in for this variable.  If it is not, it will then look in
+    cache for this variable in the package that this page is located, and get this value if it exists.
+
     date
     Pluggable filter, installed by default, that makes sure the array validates as a date.
     Use this filter with :array to do automatic date filtering.  To use it, set up in your HTML form
@@ -956,6 +960,28 @@
     foreach formal_name $apc_formals {
 	
 	upvar 1 $formal_name var
+
+	if { [info exists apc_internal_filter($formal_name:cached)] } {
+	    if { ![ad_page_contract_get_validation_passed_p $formal_name] && ![info exists apc_internal_filter($formal_name:notnull)] && (![info exists apc_default_value($formal_name)] || [empty_string_p $apc_default_value($formal_name)]) } {
+		if { [info exists apc_internal_filter($formal_name:array)] } {
+		    # This is an array variable, so we need to loop through each name.* variable for this package we have ...
+		    set array_list ""
+		    foreach arrayvar [ns_cache names util_memoize] {
+			if [regexp [list [ad_conn session_id] [ad_conn package_id] "$formal_name."] $arrayvar] {
+			    set arrayvar [lindex $arrayvar [expr [llength $arrayvar] - 1]]
+			    if { ![empty_string_p $array_list] } {
+				append array_list " "
+			    }
+			    set arrayvar_formal [string range $arrayvar [expr [string first "." $arrayvar] + 1] [string length $arrayvar]]
+			    append array_list "{$arrayvar_formal} {[ad_get_client_property [ad_conn package_id] $arrayvar]}"
+			}
+		    }
+		    set apc_default_value($formal_name) $array_list
+		} else {
+		    set apc_default_value($formal_name) [ad_get_client_property [ad_conn package_id] $formal_name]
+		}
+	    }
+	}
 	
 	if { [ad_page_contract_get_validation_passed_p $formal_name] } {
 	    
@@ -1124,6 +1150,7 @@
 	trim      {internal}
         notnull   {internal}
 	verify    {internal}
+	cached    {internal}
     }
 	
     nsv_array set ad_page_contract_filter_rules [list]
Index: openacs-4/packages/acs-tcl/tcl/utilities-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/utilities-procs.tcl,v
diff -u -r1.32 -r1.33
--- openacs-4/packages/acs-tcl/tcl/utilities-procs.tcl	17 May 2003 10:04:18 -0000	1.32
+++ openacs-4/packages/acs-tcl/tcl/utilities-procs.tcl	2 Aug 2003 00:40:01 -0000	1.33
@@ -2417,6 +2417,67 @@