[interchange-cvs] interchange - jon modified WHATSNEW

interchange-cvs at icdevgroup.org interchange-cvs at icdevgroup.org
Tue Dec 16 09:02:13 EST 2003


User:      jon
Date:      2003-12-16 14:02:13 GMT
Modified:  .        WHATSNEW
Log:
Clear changelog and add Mike's change from yesterday.

Revision  Changes    Path
2.179     +3 -3628   interchange/WHATSNEW


rev 2.179, prev_rev 2.178
Index: WHATSNEW
===================================================================
RCS file: /var/cvs/interchange/WHATSNEW,v
retrieving revision 2.178
retrieving revision 2.179
diff -u -u -r2.178 -r2.179
--- WHATSNEW	10 Dec 2003 22:19:27 -0000	2.178
+++ WHATSNEW	16 Dec 2003 14:02:13 -0000	2.179
@@ -1,3643 +1,18 @@
 ------------------------------------------------------------------------------
 
                   What's new in each version of Interchange
-                       (since the version 4.8 branch)
+                       (since the version 5.0 branch)
 
 ------------------------------------------------------------------------------
 
 
-Interchange 5.0.0 released 2003-12-15.
+Interchange 5.1.0 not yet released.
 
 Core
 ----
 
-* Make grouping of items work again.
-
-* Fixed Vend::Table::Common bug which prevented Database property HIDE_FIELD
-  from working properly.
-
-* On 2002-10-21 Canada Post changed symbol NF to NL to reflect the province of
-  Newfoundland changing its name to "Newfoundland and Labrador". For details
-  see:
-
-  http://www.canadapost.ca/personal/corporate/about/announcements/newpcode-e.asp
-
-  The "province" profile check will now accept both NF and NL, but NF is now
-  deprecated and will be removed in a future release.
-
-* Limit data part of Vend::File:writefile error message to 120 characters in
-  order to avoid disk abuse, resolve scalar references.
-
-* Add filter option to [scratch], the same as with [value] and [cgi].
-
-* Tolerate empty CGI key/value pairs to avoid unfriendly 500 errors. We
-  already tolerated one at the beginning and one or more at the end of the
-  query parameters:
-
-  http://www.icdevgroup.org/i/dev/index?&id=abcd
-  http://www.icdevgroup.org/i/dev/index?id=abcd&&&&&&
-
-  Now these are handled gracefully too:
-
-  http://www.icdevgroup.org/i/dev/index?&&id=abcd
-  http://www.icdevgroup.org/i/dev/index?id=abcd&&&xyz=123
-
-* Don't track admin pages.
-
-* Allow multiline values for [scratch mv_data_enable].
-
-UI
---
-
-* Force user to enter name of new page/template/component name to avoid
-  server crashes.
-
-* Fix content editor to actually use the selected template for new pages.
-
-* inactive/HIDE_FIELD are always ignored for record display in UI.
-
-* Add table= parameter to [query] calls if table is different from products.
-  This fixes a rare problem that only occurs when using multiple external
-  databases in one catalog.
-
-* Improve [flex-select] so that key column can have formatting options
-  via mv_metadata just like all other columns in a table. The value
-  that is passed to the flex_editor is unadulterated in all cases.
-
-* Make description and icon of menu item 'Tables' a bit more appropriate.
-
-* Add "-" spacer between items in top menu.
-
-* Remove "Accounting" from menus and replace with "Reports". Not active
-  by default.
-
-* Remove unused code in item select page.
-
-* Add [traffic-report] tag and modified admin/reports/traffic/ByAffiliate
-  page which calls it. Now reports on large files without crashing the
-  system. Probably can handle up to 500 MB files with on any kind of a
-  reasonable server.
-
-Usertags and Filters
---------------------
-
-* New Usertag [report-table] generates an HTML table based on
-  the results of a query, with bells and whistles. Can do horizontal
-  (colspan) and vertical (rowspan) subheaders, apply any Interchange
-  filter or widget to any column, add a CSS class to any column, link
-  cell contents (and add parameters to the link based on any column in
-  the query results), add virtual columns based on internal variables
-  (such as the line number), and skip rows based on an array of toggles
-  you specify.
-  
-  Good for making quick tables, sophisticated reports, and easy forms.
-  Written by Christopher Wenham <cwenham at synesmedia.com>.
-
-* [formel] fetches the label for the display type from the metadata 
-  if not passed with the parameters.
-
-* Removed unfinished [find] usertag.
-
-* Allow customization of [warnings auto=1] with class, style, extra as in
-  many IC tags.
-
-* Added new "md5" filter that calls Digest::MD5::md5_hex.
-
-* Let [image] handle maddening new ImageMagick behavior that won't operate on
-  the file named.
-
-Foundation
-----------
-
-* Error handling on account maintenance form works better.
-
-* Fixed issue with checkout page payment forms and Mozilla which
-  might cause Place Order button to be obscured in some cases.
-
-* Separate shipping addresses now appear in customer email
-  copy and are logged to the orderline table. Also appear
-  in UI order view and on ship notice emails when appropriate.
-
-* Fixed a few bugs with RMA demo and added line-item details.
-
-* Change Newfoundland from NF to NL in "state" table.
-
-* Added simple demo of contact form.
-
-* Changes to search form(s) now that HIDE_FIELD works.
-
-* Fix ordering of THEME_CSS so it will be set in high-traffic and
-  PreFork mode.
-
-Menu
-----
-
-* Add code which tells you which is the last row in the menu. Improves
-  ability to add spacers and other HTML formatting.
-
-Options
--------
-
-* Add inventory function back in. Mysteriously removed during the
-  Options rewrite.
-
-Payment
--------
-
-* Add Linkpoint payment module.
-
-Jobs
-----
-
-* Remove update_locales job, as a consequence of the removal of the
-  [find] usertag.
-
-Shadow
-------
-
-* Add stubs for commit and rollback methods, thanks to Thomas Weiss 
-  <pater.noster at gmx.net> for report.
-
-* Use $Vend::Cfg->{DefaultLocale} as fallback locale. The UI destroys
-  the $Scratch->{mv_locale} setting and the catalog translation
-  became inconsistent.
-
-i18n
-----
-
-* Add and improve foundation and UI translations.
-
-* localize script is now able to detect backtick quoting in [msg].
-  
-Debian
-------
-
-* Add Interchange variable MV_GETPPID_BROKEN to
-  /etc/interchange/features.cfg in order to start Interchange 
-  properly on systems with threaded Perl (Closes: #221939).
-
-* Revive USE_FOUNDATION handling in interchange-ui postinst to
-  keep 4.8.x interchange-cat-foundation catalogs running.
-
-Miscellaneous
--------------
-
-* Add filter to strip trailing slash on the CGI directory to makecat.
-
-
-------------------------------------------------------------------------------
-
-
-Interchange 4.9.9 released 2003-10-31.
-
-Core
-----
-
-* Remove long-deprecated %Safe hash. Use $CGI, $Carts, $Items, $Config,
-  $Scratch, and $Values instead of $Safe{cgi} etc.
-
-* Fix locking of NFS sessions.
-
-* Make [bounce ...] more reliable with respect to terminating output
-  and future parsing.
-
-* Send Content-Size header with downloads.
-
-* Add MD5 password support to UserDB. 
-  To activate, use UserDB "md5" option, i.e.:
-
-	UserDB   ui   md5   1
-
-* Make $Tag object be rebuilt every time a new page is done.
-
-* Fix bug in [PREFIX-discount-subtotal] where quantity was greater
-  than one. We were overloading the discount_price() routine, which
-  was dumb, so a new discount_subtotal() routine takes over.
-
-* Add iso_time and null_time options for updating UserDB time_field:
-
-	UserDB  default  null_time    1
-	UserDB  default  iso_time     1
-
-* Add stubs for log_error and errstr routines in the database
-  modules.
-
-* Fix for broken getppid() on Linux systems with threads enabled.
-  To implement, use
-
-        Variable   MV_GETPPID_BROKEN   1
-
-  in interchange.cfg. It substitutes a syscall(64) for the getppid
-  call.
-
-  This should only be necessary on systems with threads enabled,
-  which is NOT recommended for IC.
-
-* Allow overriding LENGTH_EXCEPTION_DEFAULT with individual LENGTH_EXCEPTION.
-  This just makes LENGTH_EXCEPTION accept values like:
-
-  	Database transactions LENGTH_EXCEPTION_DEFAULT  truncate_log
-  	Database transactions LENGTH_EXCEPTION          update_date=ignore
-
-* Don't run set_defaults at all for a subcatalog, as they should be set
-  for the base catalog.
-
-* Allow for SELECT statements in parentheses or other non-word characters.
-
-* Enable [order] tag to specify a variant, not just a base product, when
-  options are in use, e.g.:
-
-  [order code="ABCD" variant="ABCD-XYZ"]Buy now</a>
-
-* Fix a problem where the following worked:
-
-		$Tag->price({ code => $sku });
-
-  but the following failed:
-
-		$Tag->price($sku);
-
-  The problem was highlighted by Paul Vinciguerra, in IRC.
-
-* Add date-based counter capability to Vend::CounterFile.
-
-  -- In a database, you just add
-
-	   Database tablename AUTO_NUMBER_DATE 1
-
-     To have real autonumbering, you still must define AUTO_NUMBER.
-     This of course does not work with AUTO_SEQUENCE.
-
-     You must make sure your key field type is at least 12 chars.
-
-  -- In a counter tag, you do:
-
-	   [counter file=filename.ctr date=local]
-
-         or
-
-  	   $Tag->counter({ file => $fn, date => 'local'});
-
-     To define GMT as being used for the numbering, you do:
-
-	   [counter file=filename.ctr date=gmt]
-
-* Fix problems that GDBM and some other types would not honor HIDE_AUTO_FILES.
-
-* Allow an ActionMap, Autoload, or profile to generate a completely
-  virtual page and avoid readin() of anything.
-
-* Fix bug that prevented [loop-change foo] from working when the range of
-  conditions was only 0 and 1.
-
-* Add no_set boolean option to [userdb], which prevents userdb row from
-  being set with values.
-
-* Don't throw away UseModifier cart modifiers on every cart update.
-  They can still be updated via CGI mv_item_option if it's set.
-
-* Remove insurance of trailing null fields being included in arrays.
-  Any traversing of the arrays should be keyed on code/sku anyway,
-  and that is the only one that needs to be fully populated.
-
-  Fix provided by Brian Rogers of Groxis -- caused problems for one
-  of his custom ordering routines.
-
-* Allow return of page from readin (or readfile in locale mode) without
-  the locale language substitutions done. This allows proper edits of
-  pages.
-
-* Allow set of status header even when not doing redirect.
-
-* Fix double-setting of Content-Type header, use proper header
-  setting routine.
-
-* Never set a cookie when mv_tmp_session in effect.
-
-* Add DeliverImage directive that enables fast IC delivery of
-  images requested from it.
-
-  To enable, do in catalog.cfg:
-
-  	DeliverImage  Yes
-
-  If the file extension is present and the MimeType for that extension
-  begins with "image/", the path will be adjusted to add ImageDir
-  or ImageDirSecure, and a 302 issued.
-
-  This happens before database or session opens, and is quite fast.
-
-  Sets $Vend::tmp_session so no cookie is issued.
-
-* Make frequently-used HTML::Entities encode_entities routine available
-  to embedded Perl.
-
-* Allow timed_build to autocreate directory path when filename with path
-  component is specified. This makes it easier to do dynamic directories
-  based on CGI parameters etc. when there are thousands of timed build
-  files. E.g.:
-
-  [timed-build file="timed/@@MV_PAGE@@/[item-code]" minutes=86400] ...
-
-* Avoid cluttering of global logs with 
-  'Attempt to call perl from within Safe'.
-
-* Fix prefork problem that might be biting someone, could cause missing
-  filters.
-
-* Add ability to access and test the $opt hash for any search
-  loop.
-
-  [loop prefix=top list="a b c"]
-	[loop list="1 2 3" foo-opt="[top-code]"]
-		[if-loop-header-param foo_opt]
-			Foo is there! It is: [loop-header-param foo_opt]
-		[/if-loop-header-param]
-
-		[if-loop-header-param !foo_opt]
-			Foo is NOT there! It is: [loop-header-param foo_opt]
-		[/if-loop-header-param]
-
-		[if-loop-header-param foo_opt eq a]
-			Foo is equal to a.
-		[else]
-			Foo is NOT equal to a.
-		[/else]
-		[/if-loop-header-param]
-		<br>
-    [/loop]
-	<p>
-  [/loop]
-
-* Add module-version intrinsic test:
-
-	<input	name=mv_column_op
-			type=hidden
-			value="[if module-version Text::Query]aq[else]rm[/else][/if]"
-			>
-
-* Enhance [PREFIX-alternate] to support
-
-	[PREFIX-alternate]              Defaults to [value mv_item_alternate] or 2 (same)
-	[PREFIX-alternate N]            Alternate every N items (same)
-	[PREFIX-alternate except_last]  Every time except last in list
-	[PREFIX-alternate except_first] Every time except last in list
-	[PREFIX-alternate first_only]   Only on the first item
-	[PREFIX-alternate last_only]    Only on the last item
-	[PREFIX-alternate 0]            Alias for first_only
-	[PREFIX-alternate -1]           Alias for except_last
-
-* Move handling of anchor option from tag_area to vendURL.
-
-* Add new facility for storing address books in outboard address table,
-  instead of an in-record hash, and start framework for adding different
-  personalities to UserDB.
-
-* Move UserDB's "logout" function to a subroutine so that it can be inherited.
-
-* Add RedirectCache directive which allows redirected page requests to
-  be set to mv_tmp_session then written to the target from which it was
-  redirected. This allows a complete web site to be mirrored to static
-  HTML as it is requested, accompanied with the proper setting of
-  AcceptRedirect in Interchange and ErrorDocument in the Apache server.
-
-  To use:
-
-  	   * Set ErrorDocument 404 to the Interchange URL in Apache.
-
-	   * Set "AcceptRedirect Yes" in interchange.cfg.
-
-	   * Set "RedirectCache /var/www/html" in interchange.cfg (use
-	     your document root in place of /var/www/html).
-
-  When a page http://yourdomain.tld/subdir/page.html is not found,
-  Interchange gets a redirect which causes it to set mv_tmp_session=1.
-  If Interchange doesn't find the page, then it returns "missing" and
-  no writing is done. If IC does find the page, it is written to
-  /var/www/html/subdir/page.html and the page will be found on next
-  access.
-
-  Exclude on HTTP server side can be done with permissions -- don't set
-  it writable by IC daemon if you don't want it written.
-
-* Fix problem where defining blank GlobalSub would kill *all* globalsubs.
-
-* Never issue a session ID on timed-build URL.
-
-* Remove conditional for caching history on Pragma: no-cache -- this is
-  all wrong. The directive is to this page transaction of Interchange,
-  i.e. timed-build and such. It should not be used to prevent building
-  of history, partly because browsers may send it for their own reason.
-
-* Prevent autovivification of $CGI::values{mv_username}, and make CookieLogin
-  slightly more efficient when already logged in.
-
-* Allow custom increment and decrement routines with inc-routine and
-  dec-routine options. They can be an inline code reference:
-
-	[counter
-		file=testcount
-		inc-routine=`sub { shift(@_) + 2 }`
-	]
-	[counter
-		file=testcount
-		decrement=1
-		dec-routine=`sub { shift(@_) - 2 }`
-	]
-
-  or a Sub or GlobalSub:
-
-	catalog.cfg:
-  	Sub three_steps_forward <<EOR
-	sub {
-		my $val = shift; $val += 3; return $val;
-	}
-	EOR
-
-  	Sub two_steps_back <<EOR
-	sub {
-		my $val = shift; $val -= 2; return $val;
-	}
-	EOR
-
-	[counter file=testcount inc-routine=three_steps_forward]
-	[counter file=testcount dec-routine=two_steps_back decrement=1]
-
-* Add [error auto=1] similar to [warnings auto=1].
-
-* Fix nested [elsif] problem.
-
-* Fix problem with alphabetic sorting of more lists where search results
-  appeared in the wrong group.
-
-* Add delimiter option to checked/selected tags. Patch provided by
-  Mat Jones <mat at thinkopensource.com>.
-
-* Implement Paul Vinciguerra's suggestion to not save mv_password in
-  the History hash.
-
-  You can also set up a different NoHistory set via
-
-  	@Vend::Dispatch::NoHistory = qw/ foo bar mv_credit_card_number /;
-
-Tables
-------
-
-* Set up error reporting to be able to catch database errors
-  and display in session, catalog error.log, or global error.log
-
-    1. Logging levels are on a per-table basis, with
-       defaults that can be set with DatabaseDefault:
-
-        DatabaseDefault  LOG_ERROR_CATALOG  1
-        DatabaseDefault  LOG_ERROR_SESSION  1
-        DatabaseDefault  LOG_ERROR_GLOBAL   0
-        DatabaseDefault  DIE_ERROR          0
-
-    2. Log errors to the catalog error.log by default.
-
-        Database  inventory LOG_ERROR_CATALOG  0|1*
-
-    3. Log errors to the session always if an admin, and
-       controlled by configuration if not.
-
-        Database  inventory LOG_ERROR_SESSION  0|1*
-
-       This has the effect of giving a big red error message when such
-       an event as failing to create a record occured. In most cases,
-       you would be able to use the <-Back button and fix the error
-       and resubmit.
-
-       The error tag is "table foo", where foo is the table.
-
-    4. Die at the page level (500 error) only if that is explicit
-       request in config for that table:
-
-        Database  inventory  DIE_ERROR  0*|1
-
-    5. Log errors globally only on explicit request:
-
-        Database  inventory LOG_ERROR_GLOBAL   0*|1
-
-    6. LENGTH_EXCEPTION errors go into warnings if they are handled
-       with truncate.
-
-      * default
-
-* Fix numeric sorting in SQL statements if a field is NUMERIC.
-
-* Allow limits from SQL statement to flow through even if ml="" is set
-  and let direct_sql.html admin page honor them.
-
-* Fix table names so that we don't have the funky .txt problems
-  where a SQL query would not work on a DBM database unless
-  the file name base matched the table name.
-
-* Attempt to regularize error messages so that they can be
-  more easily translated. Now should have about 50% less
-  variations.
-
-* Prevent internal server error when $db->row($key) fetches no results
-  within DBI module.
-
-* Fix bug in DBI module that caused arbitrary column to get set 
-  to primary key instead of to the intended new value.
-
-* Add internal Interchange locking routines and support for GDBM. (Should
-  work on others as well but is not tested.)
-
-  To set internal locking, just put in the config:
-
-  	Database access IC_LOCKING 1
-
-  On GDBM, employs the GDBM_NOLOCK parameter.
-
-  It should prevent the errors in access.gdbm when multiple admins are
-  logged in. It might also serve to make userdb in GDBM somewhat usable.
-
-Search
-------
-
-* Add Altavista-style search operator with Text::Query (CPAN) module.
-  Calls Text::Query::*AdvancedString with op=aq, calls
-  Text::Query::*SimpleString with op=tq.
-
-  Examples:
-
-    [loop search="
-                se=hammer -framing
-                sf=description
-                fi=products
-                st=db
-                co=yes
-                rf=*
-                op=tq
-            "]
-    [loop-code] [loop-param description]<br>
-    [/loop]
-
-    [loop search="
-                se=hammer NEAR framing
-                sf=description
-                fi=products
-                st=db
-                co=yes
-                rf=*
-                op=aq
-            "]
-    [loop-code] [loop-param description]<br>
-    [/loop]
-
-  Honors mv_case (-case option), mv_all_chars (-regexp option),
-  mv_substring_match (-whole option) and mv_exact_match
-  (-litspace option).
-
-* Add ability to map in custom search routines. In interchange.cfg:
-
-    CodeDef find_hammer SearchOp find_hammer
-    CodeDef find_hammer Routine <<EOR
-    sub {
-        my($self, $i, $string, $opname);
-    #::logDebug("Calling fake SearchOp");
-        return sub {
-    #::logDebug("testing with fake SearchOp");
-            my $string = shift;
-            $string =~ /hammer/i;
-        };
-    }
-    EOR
-
-   Now you can do:
-
-    [loop search="
-                se=hammer NOT framing
-                sf=description
-                fi=products
-                st=db
-                co=yes
-                rf=*
-                op=find_hammer
-            "]
-    [loop-code] [loop-param description]<br>
-    [/loop]
-
-   The passed parameters are:
-
-        - The search object ($self)
-        - The index into coordinated search array ($i)
-        - The pattern to match
-        - The name of the op (find_hammer in this case)
-
-    Must return a sub which receives the data to match and returns
-    1 if it matches. DOES NOT HONOR mv_negate UNLESS you tell it to.
-
-    See Vend::Search::create_text_query for an example of how to
-    return a proper routine and look in search object for the
-    associated params.
-
-Payment
--------
-
-* CCVS payment module removed.
-
-* Add support for Canadian PSiGate gateway. Thanks to Gary Benson for his
-  work and testing.
-
-* Fix potential PreFork problems in AuthorizeNet module.
-
-* Add a "x_ADC_Delim_Character" (set to \037, which is ASCII US)
-  to replace the default field separator (,). A comma isn't a
-  very useful default, as people tend to use them in their address.
-  Problem reported, and fix tested, by John Young in IRC.
-
-Shipping
---------
-
-* Don't cache zero UPS shipping cost.
-
-* UPS no longer accepts UK as a country code for shipments to
-  Great Britain.
-
-   -- did an exception remap for UK --> GB
-
-   -- Added UPS_COUNTRY_REMAP code so that this type of thing
-      can be done elsewhere.
-
-        # Remap Monaco to France for UPS
-        Variable  UPS_COUNTRY_REMAP   MC=FR
-
-* Add ability to build weight adjustments based on Simple options
-  settings. Requires a "weight" field in the options table.
-
-* Add hide_error option to suppress error message when no shipping methods
-  are found.
-
-* Allow comment lines in shipping.asc, with leading # mark.
-
-UI
---
-
-* Add missing user and password to SQL DUMP COMMAND in xfer_catalog
-  UserTag.
-
-* Remove the Term modules from checks -- they have nothing to do with
-  IC operation and Term::ReadKey can cause core dumps.
-
-* Remove extra <html> from templates.
-
-* Force name to text variable, so numerical-only names will not cause
-  crash when a string function is done.
-
-* Minor improvements in backup setup.
-
-	-- Let backup tables be explicitly specified in
-       UI_BACKUP_TABLES.
-
-    -- If no UI_BACKUP_TABLES, honor first "backup" then
-       "!display_filter" in table metadata.
-
-    -- Display size of downloadable file.
-
-	-- Prevent spurious .html extension on download link.
-
-* Add meta_editor support for MAXLENGTH and JavaScript checks.
-
-* Made default metadata (for merge) match foundation.
-
-* Fix inability to set and retain multiple user groups with fix
-  provided by Sonny Cook.
-
-* Prevent display of meta database when relocated from meta editor.
-
-* Write the selected PGP/GPG key to the Variable table setting.
-
-* Missing session id added to form in various admin pages
-  (thanks to Paul Vinciguerra <pvinci at vinciguerra.com> for the patch).
-
-* Add check to disallow invalid option names.
-
-* Old-style simple option updates were ineffective because the
-  "Commit Changes" button's mv_nextpage was set to "admin/item"
-  instead of @@MV_PAGE@@.
-
-* Allow tracking number to be updated on ship. 
-  Fix contributed by Sebastian Braun.
-
-* Get rid of strange extra loop for billing information in customer_view
-  pages that just caused extra queries for [bill-data userdb ...] calls.
-
-* Check whether userdb is LARGE instead of transactions on customer page.
-
-* Ensure that secure mode is forced before we bounce to login.
-
-* Fix the long-standing problem that sorts and groupings would not
-  work on query-by-example search returns.
-
-* Fix problem with creating new option when no prior options exist.
-  Fix found by Reid Sutherland (reid-ic at thirddimension.net).
-
-* Add ability to edit pages using Mozilla composer, or any HTML editor
-  that can publish with an HTTP put. Includes ability to upload images
-  with the files, create new files, and more.
-
-* ONLY operates on the area between <!-- BEGIN CONTENT --> and
-  <!-- END CONTENT -->.
-
-* Pulls the page title from the <title></title> of the PUT page.
-
-* If a new page is PUT, it is wrapped with the template used in
-  the nearest DirectoryIndex ("index" by default). If a new file
-  "trucks/chevy/mom.html" is created and does not exist, the following
-  files will be used as the template in this order if they exist:
-
-    trucks/chevy/index
-    trucks/index
-    index
-
-* Update [if-mm ...] to have a "pagematch" and "filematch" function
-  that allows security checks based on the files and pages fields
-  in the access table. This allows certain users to have publish
-  permission only on certain image and page directories. For
-  instance, if the user "bubba" is only to edit files in the
-  "trucks" hierarchy, you would want in access:
-
-    username:bubba
-    files:images/trucks/
-    pages:trucks/
-
-* Add action "admin_publish" that handles the PUT process. Requires
-  user be logged in as an admin, and requires
-
-* Automatic RCS versioning if PUBLISH_DO_RCS variable is set. Can
-  stop publish if RCS error when PUBLISH_QUIT_ON_RCS_ERROR Variable
-  is set.
-
-* Adding "ui_mozilla_edit=1" to the URL keeps ITL tags from being
-  interpolated within the BEGIN CONTENT/END CONTENT area. This
-  allows
-
-* Automatically adjusts image paths in the uploaded file to be
-  relative to the directory the page is in. This allows individual
-  directories to use different sets of images and Mozilla won't
-  willy-nilly overwrite things in other directories.
-
-* Can prevent any publishing to the pages root if PUBLISH_NO_PAGE_ROOT
-  is set.
-
-* Allow component modification via Mozilla editor.
-
-  If you follow the "show tags" link (i.e. add ui_mozilla_edit=1 to
-  the param list), it will output the current component set
-  in meta headers:
-
-  <meta name="component" content="1;component;search_box_small">
-  <meta name="component" content="2;component;cart_tiny">
-  <meta name="component" content="3;component;product_tree">
-  <meta name="component" content="4;component;">
-  <meta name="component" content="5;component;cross">
-  <meta name="component" content="5;banner;Specials">
-  <meta name="component" content="5;cols;2">
-  <meta name="component" content="5;size;2">
-  <meta name="component" content="6;component;random">
-  <meta name="component" content="6;banner;See also...">
-  <meta name="component" content="6;cols;1">
-  <meta name="component" content="6;size;3">
-  <meta name="component" content="7;component;">
-  <meta name="component" content="8;component;">
-
-  For instance, component 5 above is exactly equivalent to:
-
-  	[control-set]
-		[component]cross[/component]
-		[banner][L]Specials[/component]
-		[cols]2[/cols]
-		[size]2[/size]
-	[/control-set]
-
-* Also turn on no_locale_parse in ui_mozilla_edit mode, so that
-  locale-based information won't be lost.
-
-* Add ability to manipulate any [set setting]value[/set] (tmpn?, seti also)
-  via meta header edit on Mozilla.
-
-  Same procedure, just add a meta_header:
-
-  	<meta name=setting content="tmpn;setting_name;The setting value">
-
-  and that setting will be modified accordingly.
-
-  Does not remove settings, only sets the ones found in headers.
-
-* Prevent linked forms et al from coming in from table metadata.
-
-* Add [flex-select] tag, complete replacement for and enhancement to
-  the admin/flex_select.html page in the UI.
-
-* Each colunn can have individual sort settings, and can individually
-  be specified to use alphabetic more lists when it is the sorting
-  column. (ui_more_alpha, ui_sort_option)
-
-* Group "magnifying glass" can be turned off in metadata. (fs_no_group)
-
-* Filters can be specified in metadata instead of just ui_data_fields.
-  (fs_display_filter)
-
-* Links to other pages specifying the field value can be done
-  easily. For example, to add a per-sku link on the products
-  table to the item_options page, put in ui_data_fields
-
-  	sku
-	sku-options
-	price
-	description
-
-  In the metadata for products::sku-options, do:
-
-		'extended.fs_link_page' => 'admin/item_options',
-		'extended.fs_link_parm' => 'item_id',
-		'extended.fs_link_anchor' => 'Edit Options',
-
-  That will produce:
-
-   <a href="__CGI_URL__/admin/item_options?item_id=SKU">Edit Options</a>
-
-  Can be shorthand-set in ui_data_fields with:
-
-  	sku
-	sku-admin/item_options:item_id:Edit Options
-	price
-	description
-
-* Columns can be calculated values by putting embedded perl code in
-  fs_data_calc. The current row hash (with all values in the select colums)
-  is put in $Vend::Interpolate::item. You can set tables to be pre-opened
-  in fs_data_tables.
-
-  This code in products::prod_group::extended.fs_data_calc:
-
-	if($item->{prod_group} eq $prev) {
-		return "''";
-	}
-	else {
-		return $prev = $item->{prod_group};
-	}
-
-  will produce ditto marks if a prod_group is duplicated.
-
-* An explicit "edit record" link can be enabled. (explicit_edit)
-
-* The edit link on the key column can be disabled. (no_code_link)
-
-* Checkboxes can be disabled. (no_checkbox)
-
-* Check All/Uncheck All JavaScript links can be automatically inserted.
-  (check_uncheck_all)
-
-* The lines can be numbered. (number_list)
-
-* Header cell and data cell CSS is completely settable in metadata on a
-  per-column basis.
-
-		'extended.header_link_class' => 'Header row link CSS class',
-		'extended.header_cell_class' => 'Header cell CSS class',
-		'extended.header_cell_style' => 'Header cell CSS style',
-		'extended.data_cell_class' => 'Data cell CSS class',
-		'extended.data_cell_style' => 'Data cell CSS style',
-
-  While no metadata edit is provided for data_cell_width, data_cell_height,
-  data_cell_align, they would be honored if set.
-
-  The header rows and data rows can be set in the table metadata:
-
-		'extended.header_row_class' => 'Header row CSS class',
-		'extended.header_row_style' => 'Header row CSS style',
-		'extended.data_row_class_odd' => 'Data row CSS class, odd numbers',
-		'extended.data_row_class_even' => 'Data row CSS class, even numbers',
-
-* No longer check for Term::Readline and Term::ReadKey.
-
-* Explicitly set filters to avoid mangling of promotions
-
-* Don't allow user to change order number through order status page.
-
-* Ensure that you don't leave secure server through metaconfig link.
-
-* Remove obsolete wizard pages.
-
-Form
-----
-
-* Honor flag telling we already have data.
-
-* Honor "db" passed parameter in lookup_query.
-
-* Add display type "labels" that is like "options" except it displays the
-  labels instead of their codes.
-
-* option_format widget now uses passed filter.
-
-Menu
-----
-
-* Add cheesy auto_format page/URL detection facility to try and
-  tolerate user-built menus a bit better. In particular, this will
-  recognize a non http: anchored absolute URL and will tolerate
-  anchors in the page name.
-
-  Called with auto-format=1 as a param.
-
-* Remove IE-specific bounding box code in flyout menus. Turns out that
-  caused absolute positioning problems when the page was scrolled, and
-  that the DOM standard code I developed for Mozilla works just fine
-  on MSIE 6.
-
-Table Editor
-------------
-
-* Fix sequential edit.
-
-* Modified passing of {table} parameter in display for table editor,
-  setting flag to prevent getting table data twice.
-
-* Make lookup_query honor {db} parameter for selecting base table
-  for lookup
-
-* Lookup should now work internally to the table if no {db} spec'd
-
-* Mozilla screwed up their CSS size passing like MSIE, so
-  remove special things that made item editor/table editor automatically
-  look better on Mozilla (without setting *_height and *_width explicitly).
-
-* Added MAXLENGTH to things you can set in meta_editor
-
-* Added MAXLENGTH to parameters honored by [display ...]/Vend::Form,
-  without having to manipulate extra=" maxlength=22" stuff.
-
-* Put hooks in for auto-JS checks in table editor / [display]
-
-* Allow default opening of a particular tab by adding * to the end of the
-  tab label.
-
-	Overridden by explicit "start_at" option given in options/args.
-
-* Further allow focus of editor to start at a particular field if
-  it is marked with a *.
-
-   ui_data_fields => q{
-
-   			=General
-
-			foo
-			bar
-
-			=Specific*
-
-			buz
-			baz*
-		},
-
-	The "Specific" tab will be presented open when the record is edited.
-	The form focus will be at the "baz" field.
-
-* Substitute placeholders in lookup_query (just like with prepend and append):
-
-  _UI_TABLE_
-  _UI_COLUMN_
-  _UI_KEY_
-
-  This allows foreign table lookup queries to be tailored for the record
-  currently being edited in the table editor.
-
-* Allow hidden fields to come from all_opts again (was disrupting
-  surveys).
-
-* Add new link_blank_auto setting for table linking. This has the
-  effect of:
-
-  -- Automatically using auto-numbering
-  -- setting the foreign key column to match the key of the
-     edited record (as you would have to do to return the row
-     once entered)
-  -- Making both those fields hidden and non-changeable.
-
-* Make tabbed-display relative now that Mozilla supports this. Should make
-  setting html-width and table-width in metadata moot.
-
-* Don't focus on meta links when tabbing through form.
-
-* Allow cancel_text to be set when in database edit mode.
-
-Foundation
-----------
-
-* Add missing table variable in db lookup for pref_group to metadata.
-
-* Remove test data from inventory::stock_message metadata.
-
-* Update Oracle configuration files for new options.
-  Supplied by Jason <ic at santabarbara.org>.
-
-* Add HIDE_FIELD to products database definition, so products marked
-  inactive will not be found in search.
-
-* Add --[L]select state[/L]-- blank option to shipping address form.
-
-* Add support for all IC-recognized credit card types.
-
-* Removed obsolete log_entry route and etc/log_entry file.
-
-* Remove inadvertent filter for variants::weight from
-  metadata, resolving bug #534.
-
-* Bring MV_DEFAULT_SEARCH_{TABLE,FILE} into catalog.cfg so it is easier
-  to hunt down. We can't unset it in catalog_before.cfg because it will
-  break just about every catalog out there.
-
-* Add handling to mail receipt if applicable.
-
-* Remove the "view_from" parameter undoubtedly messing up many product edits
-  and add ui_more_alpha definition to metadata.
-
-Usertags
---------
-
-* New Usertag [debug].
-
-* Add new makesize=NNxNN parameter to image Usertag which uses ImageMagick 
-  mogrify command to build custom thumbnails on the fly.
-
-  Used mogrify executable because of constant difficulty building and
-  installing Image::Magick perl modules.
-
-  Example on the foundation demo:
-
-     [image src="items/os28004.gif" makesize=50x50]
-
-  This will create __IMAGE_DIR__/items/50x50/os28004.gif and return:
-
-     <img src="items/50x50/os28004.gif" height=50 width=50>
-
-  The size is still determined by Image::Size.
-
-* New Usertag [capture-page] to interpolate pages and dump to disk,
-  usually called from Interchange jobs. Examples:
-
-  [capture-page page=index file=static/index.html umask=022]
-
-  [loop list="Levels,Rulers,Squares"]
-  [capture-page page="[loop-code]" file="static/cats/[loop-code].html"
-    scan="fi=products/st=db/co=yes/sf=category/se=[loop-code]" 
-    auto_create_dir=1]
-  [/loop]
-
-* Allow database text files in subsidiary directories of products
-  for [xfer-catalog] Usertag.
-
-* Add form parameter to [history-scan] Usertag to avoid invalid
-  and error-prone constructs like [history-scan]&collapseall=1.
-
-* Add "no-computer" option to [fortune] Usertag in order to make the 
-  fortune more palatable to non-geek sites.
-
-  This is highly dependent on the fortune setup; this will work with
-  fortune on RHL 7.x and 8.x.
-
-* Add [css VARNAME] tag that automatically generates a varname.css file
-  for use by <link rel=stylesheet href="/foundation/images/theme_css.css">.
-
-* [history-scan] -- there should never be a leading / on page names sent
-  to $Tag->area(), and they are removed all the time now.
-
-* Add src_only option to [image] tag  to return just the image location 
-  that normally goes in the src="..." attribute of the <img> tag.
-
-Filters
--------
-
-* new alpha filter to keep only alphabetics A-Z and a-z
-
-* new filter pgbool which munges any value into a valid PostgreSQL boolean 
-  to be used in a quotable string environment, with a hybrid of 
-  Perl/Interchange/PostgreSQL truth rules:
-
-	undef, '', F, f, false, 0 -> f
-	everything else -> t
-
-* new filter pgbooln which is the same as pgbool, except assume that undefs 
-  will pass through as NULLs to whatever does the query:
-
-	undef -> NULL
-	'', F, f, false, 0 -> f
-	everything else -> t
-
-Jobs
-----
-
-* Set $CGI->{mv_tmp_session} to signal that a "robot" is in charge.
-
-* filter option added for Job output
-
-* Jobs are now listed and queued in $Global::RunDir/jobs instead
-  of $Global::RunDir/reconfig
-
-* Add global Jobs configuration directive:
- 
-  Jobs MaxLifetime 3600
-  Jobs MaxServers  3
-
-  After a job has been running for MaxLifetime seconds, it will be
-  removed by next housekeeping run. The default MaxLifetime is 10
-  minutes. This setting is only available if PIDcheck has been set.
-
-  MaxServers is the number of jobs allowed to be run simulatenously,
-  which should be significantly smaller than the value in the
-  MaxServers directive to avoid unaccessibility of Interchange for
-  users. The default for MaxServers is 1.
-
-* Add job to automatically calculate topsellers.
-
-SQL Parsing
------------
-
-* Add Vend::SQL_Parser module, eliminating need for SQL::Statement.
-
-* Improved tolerance for re-routing queries with table-only option.
-
-* Parses more SQL -- now can use IN and BETWEEN and translate those
-  to IC search specs.
-
-* Handles complex parenthesized queries properly.
-
-* Reads LIMIT N and translates to mv_matchlimit.
-
-* Tests added to regression tests to check parser.
-
-* Fix several deficiencies in SQL parsing.
-
-  -- Recognize IS [NOT] NULL and map to a search for the
-     empty string.
-
-  -- Allow verbatim passing of field names for GDBM types, allowing
-     "select Variable from variable where Variable = ''" which
-	 would not work before.
-
-  -- Add VERBATIM_FIELDS definition to database types which need it.
-
-  -- Add support for "select sometable as foo, othertable bar where ..."
-     so that queries using it can be rerouted properly.
-
-  -- Always set mv_min_string = 0, so we don't have to do anything
-     special for "where column = ''" and such.
-
-i18n
-----
-
-* Update Italian UI translation.
-
-SOAP
-----
-
-* Fix tree option in soap_entity tag.
-
-* Enable calling of catalog usertags in SOAP actions.
-
-Debian
-------
-
-* Drop Build-Depends on libdb2-dev to allow builds on woody and sid,
-  apache-dev already has the proper dependency (Closes: #198136)
-
-* Fix hang of build process caused by non-existant user interchange
-  (Closes: #202063, thanks to Adrian Bunk <bunk at fs.tum.de> for his
-  bugreport and help to trace down the problem) 
-
-* Install manual pages in the correct location.
-  
-* Avoid lintian warning in interchange-ui package.
-
-* Mark update_locales job as conffile.
-
-* Fix bashisms in interchange-cat-foundation's config script.
-
-* Don't throw an error if removal of the file 
-  /usr/lib/interchange/auto/Interchange/.packlist fails
-  (Closes: #215003, thanks to Daniel Schepler
-  <schepler at math.berkeley.edu> for the bug report)
-
-* Add versioned dependency on debconf to interchange-cat-foundation
-  (Closes: #215633).
-
-Miscellaneous
--------------
-
-* Allow wildchar(*) in Swish search.
-
-* Various minor cleanup, prevents warnings on startup.
-
-* Call tracking functions only if Vend::Track object exists.
-
-* Label first section of the POD documentations in the modules
-  as NAME, this is common, looks nicer in man and helps to
-  fix Debian Bug #203926.
-
-* Add POD documentation to findtags.PL.
-
-* Search for literal strings in bar_link, rather than treating them as
-  regexes. Fix from Paul Vinciguerra. 
-
-* Use 127.0.0.1 instead of localhost for default INET host values to avoid
-  DNS lookup, as per bug #516.
-
-* Remove abandoned "newcat" script from distribution.
-
-* Convert nonstandard != to standard SQL <> (which also avoids a parse
-  error in the new Vend::SQL_Parser) within options stuff.
-
-* Add option to RPM spec file for /usr/local/bin/perl to work around threaded 
-  vendor perls.
-
-Extensions
-----------
-
-* Quickbooks updates:
-
-  - Updated documentation.
-  
-  - Installation fixes.
-  
-  - Rewrite of the IIF generation query page:
-    - Can query by order number range, date range, or "since last generation"
-    - Allow specification of QuickBooks invoice number to be used 
-      and incremented during IIF generation.
-    - Filters out deleted orders.
-  
-  - IIF Generation changes:
-    - Use the country name instead of the country code.
-    - Some filter updates (the period is not as dangerous as it looks).
-
-
-------------------------------------------------------------------------------
-
-
-Interchange 4.9.8 released 2003-06-19.
-
-
-Core
-----
-
-* Allow [PREFIX-more-list] ... [/PREFIX-more-list] for nested loops.
-
-* Support sparsely-populated quantity pricing tables.
-
-* Fix bug in field name ranges in CommonAdjust where q99..q101 was handled
-  as a Perl alphanumeric range q99, r00, r01, r02, etc. instead of
-  q99, q100, q101.
-
-* Remove wrong default for DatabaseDefault, could cause error when a
-  DatabaseDefault value had not been previously set.
-
-* Renamed Cron configuration directive to Jobs because that is a more
-  appropriate. Commandline options --job and --cron renamed as well
-  to --jobgroup and --runjobs.
-
-* Have NonTaxableField check all ProductFiles tables for the field if
-  needed, instead of just the one in mv_ib or the first ProductFiles
-  table. This allows NonTaxableField to work with options when the base
-  product has a nontaxable field, but the options table has no nontaxable
-  field (as in Foundation). This should have no effect on people using
-  NonTaxableField the standard way.
-
-* Add option to product_common and item_common that allows an empty
-  field to be returned. In effect this option means "give me the value
-  of this field from the first ProductFiles table that has the field
-  at all" instead of "give me the first non-empty value from a ProductFiles
-  table that has the field".
-
-* Optimize item_common a bit by looking at each table only once.
-
-* Allow systems with broken locks to not destroy the pidfile lock
-  by reading the file. Alleviates inability to use "interchange -stop".
-  Requires setting
-
-	Variable MV_BAD_LOCK 1
-
-  in interchange.cfg.
-
-  Thanks to Daniel Hutchinson for finding the problem!
-
-* Add no_requery option to Vend::Table::DBI::query method to ensure that
-  SQL::Statement will not be called. Use it when you are sure your table is
-  in the database referenced....avoids errors on multiple key inserts that
-  might return undef.
-
-* Fixed the row_count (0E0) problem in Vend::Table::DBI.
-
-* Compile errors on ActionMap/FormAction are passed through now.
-
-* Use fix base directory for global jobs.
-
-* Let Vend::Util::unhexify mangle only representations of hex chars instead
-  of any three-letter-string starting with the percent sign.
-
-* Add database filename in question to the fatal error in the
-  Vend::Table::Common::column_index method.
-
-* Fix auto_create_dir option in Vend::Util:writefile which didn't work.
-
-* Fix round_to_frac_digits() so it handles numbers that don't have a
-  pre-existing decimal point.
-
-* Prevent internal server error if quantity pricing row cannot be found
-  for whatever reason.
-
-* Add Australian BankCard to Vend::Order::guess_cc_type 
-  (contributed by Howard Lowndes).
-
-* Make aliased UserTag respect EndTag setting.
-
-* Vend::Util::string_to_ref no longer looks at $Vend::Cfg->{ExtraSecure},
-  which really contradicts the documentation.
-
-* Allow $Session->{mv_order_number} to be set anywhere.
-
-* Allow multiple start points for a tree query.
-
-* Prevent NOT NULL errors for data that is actually supposed to be defined
-  during a data update.
-
-* Add container values for config files.
-
-	<Variable FOOBAR>
-		Something in the FOOBAR variable.
-	</Variable>
-
-  This is exactly equivalent to:
-
-  	Variable FOOBAR <<EOV
-		Something in the FOOBAR variable.
-	EOV
-
-   except that the end marker can have leading/trailing whitespace
-   and capitalization is not important.
-
-* Allows trigger response to end container; currently only "yesno"
-  directives are defined. The "yesno" behavior allows:
-
-  <ParseVariables Yes>
-  	Static __CATALOG_STATIC__
-  	StaticLogged __LOGGED_STATIC__
-  </ParseVariables>
-
-  This will set ParseVariables to Yes
-
-* Directives of the same type cannot be nested (though I might do that
-  shortly). Directives of different types can be nested, so you can
-  do:
-
-  	<ParseVariables Yes>
-		<Route log>
-			foo   __BAR__
-		</route>
-	</Parsevariables>
-
-  (Note that capitalization doesn't matter.)
-
-* You can add triggers for directives by setting the ContainerSpecial
-  variable in package Vend::Config. This would allow:
-
-  	 <DirectiveUniverse foo>
-	 	Foobar   yes
-	 </DirectiveUnivers>
-
-  	 <DirectiveUniverse bar>
-	 	Foobar   yes
-	 </DirectiveUnivers>
-
-  Perhaps more importantly, it might allow:
-
-  <Catalog found /var/lib/interchange/found /c/found>
-  	  Variable  INITTED   This catalog has an initted value already.
-  </catalog>
-
-  Note that this is not yet implemented!
-
-* Update pgp_encrypt to accept multiple encryption keys.  Keys should be
-  passed as a space or comma separated list.
-
-* Change behavior of UserDB _check_acl routine so that undefined value
-  is returned if location is not present at all. This allows a check
-  both on the file location and the parent directory location without
-  affecting true/false status.
-
-* Fix LENGTH_EXCEPTION_DEFAULT logging, which did not work and clean up
-  the code a bit in DBI module.
-
-* Remove attempt to unimport Config (to save a small amount of memory)
-  because it causes Perl 5.6.0 to die.
-
-* Allow setting of table type in MySQL (or others if HAS_TABLE_TYPE
-  is put in capabilities). This allows setting the table type to
-  something besides the default -- in particular allows InnoDB type
-  setting for userdb/transactions/orderline.
-
-* Patch slight security hole where user password can be saved in session.
-
-* Keep copy of CGI values at time of history save, not reference to them
-  (which can be changed in subsequent code).
-
-* Make mv_return_fields available to iterate_array_list.
-
-* Change processing of [PREFIX-line] to use that value instead of
-  rebuilding from scratch.
-
-* Make multi-output play nice with download via [deliver ...].
-
-File
-----
-
-* Add new Vend::File module with minimal functions, changed UserTags
-  to support it.
-
-* Relocate following routines (and their subsidiaries) from Vend::Util:
-
-	canonpath
-	catdir
-	catfile
-	exists_filename
-	file_modification_time
-	file_name_is_absolute
-	get_filename
-	lockfile
-	path
-	readfile
-	readfile_db
-	set_lock_type
-	unlockfile
-	writefile
-
-  Added stubs so that package-based calls to those routines will not
-  break software.
-
-* Added CatalogUser directive that allows setting in interchange.cfg
-  of allowed username that is used for access to absolute-path names.
-
-  	CatalogUser  foundation  joe
-  	CatalogUser  reports     jane
-
-  This sets the user for allowed_file() for further read/write checks
-  based on username.
-
-* Created allowed_file() routine and replaced all current inline checks
-  for NoAbsolute with call to that routine. It behaves as:
-
-  NoAbsolute is No: all files are accessible, always
-
-  Allowed for read/write:
-  	Path name is relative with no ..
-  	Path name is absolute but in the catalog directory
-  	Path name is absolute but in a TemplateDir
-
-  Allowed for read:
-	CatalogUser set to a valid username and file is readable by that user
-	CatalogUser set to a valid username and file is readable by a group
-	 containing that user
-
-  Allowed for write:
-	CatalogUser set to a valid username and file is writable by that user
-	CatalogUser set to a valid username and file is writable by a group
-	 containing that user
-
-* Changed display_special_page so that special page entries with ../
-  will not break things.
-
-* Created $Vend::File::errstr which is set to get the error message,
-  otherwise defaults to the standard one.
-
-* Add both global- and catalog-level FileControl directive that allows
-  mapping subroutines (or named pre-existing subroutines) to a path.
-  Does a depth-first search starting with the file name.
-
-* In either interchange.cfg (takes priority) or catalog.cfg put:
-
-	FileControl include/junk  <<EOR
-	sub {
-		my ($fn, $checkpath, $write, @caller) = @_;
-
-		## Allow write to files containing "foo"
-		if($write) {
-			return $fn =~ /foo/;
-		}
-
-		## Allow read if file doesn't contain "bar"
-		return $fn !~ /bar/;
-	}
-	EOR
-
-* In either interchange.cfg (takes priority) or catalog.cfg put:
-
-	FileControl  include/junk  some_sub
-
-  This uses either Sub or GlobalSub
-
-* Only in interchange.cfg, you can put a mapped routine name:
-
-	FileControl  include/junk  Vend::SomeModule::file_control
-
-* Intrinsic FileControl checks.
-
-	# Is a catalog superuser
-    FileControl foo/bar ic_super
-
-	# Is a catalog admin
-	FileControl foo/bar ic_admin
-
-	# Is logged in at all
-	FileControl foo/bar ic_logged
-
-	# Is logged in at userdb table of "userdb"
-	FileControl foo/bar ic_logged:userdb
-
-	# Is logged in at userdb table of "affiliate"
-	FileControl foo/bar ic_logged:affiliate
-
-	# Run check on userdb file_acl
-	FileControl foo/bar ic_userdb
-
-	# Run check on userdb file_acl
-	FileControl foo/bar ic_userdb:file_acl
-
-	# Run check on userdb db_acl
-	FileControl foo/bar ic_userdb:db_acl
-
-	# Check for $Scratch->{dealer} set
-    FileControl foo/bar ic_scratch:dealer
-
-	# Check for $Scratch->{dealer} NOT set
-    FileControl foo/bar ic_scratch_deny:dealer
-
-	# Check for $Session->{secure} set
-    FileControl foo/bar ic_session:secure
-
-	# Check for $Session->{secure} NOT set
-    FileControl foo/bar ic_session_deny:secure
-
-  These don't override the NoAbsolute checks.
-
-* If no FileControl is not set, the checks are not done for performance
-  reasons.
-
-Options
--------
-
-* Major update to product options.
-
-* Options are now modular in much the same way as Vend::Payment is.
-  You can add an unlimited number of option types simply by dropping
-  a module into Vend::Options.
-
-* By default, the old 4.8 style options are in force, implemented
-  with Vend::Options::Old48.
-
-  If you add this to catalog.cfg (in etc/after.cfg in foundation):
-
-  	OptionsEnable   option_type
-
-  The "option_type" names a field in the products file which controls
-  the option type. This enables new-style options.
-
-  It can also be in a specific table and field, ala AutoModifier:
-
-  	OptionsEnable   table:field
-
-  Indeed, this is added to AutoModifer after catalog.cfg.
-
-* There are two new-style options included:
-
-	Vend::Options::Matrix
-	Vend::Options::Simple
-
-  These are equivalent to the current matrix and simple options.
-
-* Options behavior is controlled in catalog.cfg by a locale-style
-  multiple hash (ala UserDb or Route):
-
-  	Options   Matrix   sort            o_sort,o_group
-  	Options   Matrix   variant_table   my_variants
-
-* To find and add a new option type, simply set something in
-  catalog.cfg:
-
-  	Options  MyOptions  table  my_options
-
-  That will cause a require of Vend::Options::MyOptions.
-
-* The matrix products have been moved to the "variants" table.
-
-* The options table contains options for both Matrix and Simple types,
-  but only fields for building those simple-type options (which are
-  used to generate variants for Matrix). The following fields
-  have been removed from options:
-
-	differential
-	mv_shipmode
-	o_enable
-	o_exclude
-	o_footer
-	o_header
-	o_include
-	o_master
-	o_matrix
-	o_modular
-	phantom
-	volume
-	weight
-
-* The variants table is a subset of the fields in products.
-
-* The admin page for each option style is defined in its
-  admin_page routine, usually an include from inclued/Options/OptionType.
-
-* Size and color fields removed from products table, option_type added.
-
-Menu
-----
-
-* Add category-specific image links and toggles for the tree menu.
-
-  To enable this for toggles, do:
-
-  	  [menu
-	  		menu-type=tree
-			...
-			specific-image-toggle=N
-			]
-
-  Where N is the level (1 == 0) to which you wish to do this.
-
-  The image for a non-toggled category comes from the tree database field
-  img_up, for a toggled category from img_dn.
-
-  You can set the base URL for the images with:
-
-  		specific-image-base="__IMAGE_DIR__";
-
-  A trailing / is added if not already present.
-
-  If you wish to allow image anchors for links as well, put the image
-  name in the img_up field and add the parameter:
-
-  	       specific-image-link=1
-
-  If the image name is not present, the normal "name" field is used.
-
-  To enable all of this for the example product_tree component, you would
-  have a call of:
-
-	[menu tree-selector="[control tree_selector Products]"
-			link-class="[control link_class barlink]"
-			link-style="[control link_style]"
-			link-class-open="[control link_class_open]"
-			link-style-open="[control link_style_open font-size: larger;]"
-			link-class-closed="[control link_class_closed]"
-			link-style-closed="[control link_style_closed font-size: larger;]"
-			no-image="[control no_image]"
-			menu-type=tree
-			specific-image-toggle=1
-			specific-image-base="__IMAGE_DIR__/tree"
-			specific-image-link=1
-			reparse=0]
-
-* Add ability to load tree-based menus where items inhabit more than
-  one category. To wit:
-
-    code    sku       prod_group        category
-    1       os28003   Tools             Brushes
-    2       os28003   Painting Supplies Brushes
-
-  The tree will allow search and find of these items in more than
-  one category.
-
-* Add "items" check to menu to allow showing an entry only if items are
-  in the cart. Works for current cart ($Vend::Items) only.
-
-* Optimization for tree-based menus, allow reliable build with
-  [timed-build]. Example:
-
-	[timed-build file=tmp/the_tree minutes=10 force=1]
-	[menu	name=the_tree
-			menu-type=tree
-			js-prefix=the_tree_
-			timed=1
-	][/menu]
-	[/timed-build]
-	[menu open-script=1 js-prefix="the_tree_"/]
-
-  This allows the tree to retain its opened status without having to
-  build a different timed-build file for every combination.
-
-  Now tree and flyout menus should be easily usable in a catalog without
-  worrying about processor power.
-
-* Add configurability for the open/collapse/explode variable. Before this,
-  you could only have one tree per page and have it keep the open status. Now:
-
-  	[menu name=foo menu-type=tree js_prefix=foo open_variable=foo_open][/menu]
-
-  	[menu name=bar menu-type=tree js_prefix=bar open_variable=bar_open][/menu]
-
-  will work for the appropriate menu. (The other will collapse.)
-
-* Don't add .html extension if file already has extension.
-
-Form
-----
-
-* Fix "double March" bug in date widget.
-
-* Allow templated options in select, radio, checkbox, etc. Enabled
-  by passing option_template="ATTR Template".
-
-  Uses same attr_list methodology as in most IC secondary templating.
-
-  Active keys:
-
-  	  LABEL           The normal label value
-  	  VALUE           The normal value
-	  PRICE           The formatted price, converted for locale
-	  PRICE_NOFORMAT  The raw price data
-	  ABSOLUTE        The formatted price, absolute (no negative)
-	  NEGATIVE        Set true if price data is negative
-
-  The default is equivalent to (though it doesn't use formatting):
-
-  		{LABEL} {PRICE?}({PRICE}){/PRICE?}
-
-  This example:
-
-	{LABEL}
-		{PRICE?}
-			{NEGATIVE?}(subtract {ABSOLUTE}){/NEGATIVE?}
-			{NEGATIVE:}(add {PRICE}){/NEGATIVE:}
-		{/PRICE?}
-
-	Would turn:
-
-		Ebony handle ($20.00)
-		Wood handle
-		Plastic handle ($-5.00)
-
-    into:
-
-		Ebony handle (add $20.00)
-		Wood handle
-		Plastic handle (subtract $5.00)
-
-* Add widget "filetext" to allow direct upload of a file to a database
-  field. Useful for content/article bodies that you want to edit in a
-  file but that are inconvenient to clip-past into a textarea.
-
-  The "filetext" widget is an <input type=file> followed
-  by a textarea. It shows the contents of the field in the textarea
-  and you can edit it. If you want to replace it with a file upload,
-  you just Browse to the file and upload it; it negates what is in
-  the textarea. If no file is uploaded, the textarea pertains (I guess
-  that statement is redundant).
-
-  The type=filetext widget should always be used in combination with two
-  filters, "nullselect upload".
-
-* Remove extra closing HTML tag '>' character from password widget.
-
-* Allow table conglomerations of checkboxes and radio boxes with more
-  than 9 columns (i.e. radio_right_10). Thanks to Bill Carr for finding.
-
-* Allow multiple semi-colon-separated queries to populate options via
-  lookup_query.
-
-* Added a =None to the file list of the imagedir widget so one has
-  the opportunity to choose an 'empty' value if no input is required.
-
-Editor
-------
-
-* Allow override of checking for incomplete forms.
-
-* Get rid of excess space which causes "unparsed and temporary" page
-  controls to fail.
-
-UI
---
-
-* Fix dependency of page editor on certain [if ...] conditions in page code.
-
-* Add "send help edit to ICDEVGROUP" function in the online help editor.
-
-* Change name of "Bottom" menu (which was on top) to "Fixed". 
-
-* Check for SQL::Statement version (with hooks for testing any version,
-  lower or higher) at admin index load time, and provide warning that
-  things won't work properly.
-
-* Allow multiple help window destinations.
-
-* Remove preferred payment method from customer view and change primitive
-  used to display username.
-
-* Fix "admin/bg.gif not found" error.
-
-* Allow pass of nodelete and mv_auto_export options in URL.
-
-* Add "Decrypt Credit Card" back in order view.
-
-* Add mv_more_alpha and mv_more_decade options to flex_selector. Make
-  locale and country tables use them by default.
-
-* Fix link_rows_blank setting in table editor for form linking.
-
-* Restore capability to show only part of session.
-
-* Solve annoying problem where you edit a view-specific field display
-  and have to re-enter custom view information that is already
-  present in a modified base meta display.
-
-* Add check for existence of the extended/default columns
-  and display of merge errors to merge_meta page.
-
-* Add Levies to the 'show only' list of the show_session page.
-
-* Use sane default while merging metadata to avoid breakage of perl code 
-  if no ui-version record exists.
-
-* Allow the "Next order" button in the admin order_view to jump over a few
-  (20, by default) missing order numbers in the order sequence so that
-  deleted order numbers here and there don't throw the user back to the
-  order list view. Maximum number to skip settable by variable
-  UI_ORDER_VIEWNEXT_MAX_SKIP, now in Foundation "Admin control" section.
-
-* Add option to replace all occurences to Search & Replace page.
-
-* Make spreadsheet search not word-boundary dependent.
-
-* Allow exclusion of fields for database imports.
-
-* Fixed typo in file_navigator tag.
-
-* Fix extra parameter passing in wizard.
-
-* Display size, color and options on "Order view" page again.
-
-* Fix Query-By-Example forms for LARGE tables.
-
-* Remove hard-coded "Pending" status and put real info on "Order view" page.
-
-* More metadata tools. New tag [meta-info table=foo col=bar key=label] returns
-  "label" metadata item. Can access any key in meta record including extended.
-  Has localize=1 flag to localize returned labels.
-
-  Small example of how to use this in pages/admin/customer.html -- allows
-  you to change "Company" to "Affilation" or "Organization" and have a hope
-  of having it show up everywhere.
-
-* Continued preparation for translation.
-
-* Fix HTML problem in order entry page found by 
-  Nicholas Cook <ncook at foxmillpets.com>.
-
-* Add "Download slice" functionality to table export page. Allows you to
-  select arbitrary columns to directly download.
-
-* Add ability to download TAB-delimited results of an arbitrary SQL
-  query. You can do:
-
-		SELECT   sku, count(code) as times_ordered, sum(quantity) as qty
-		FROM     orderline
-		GROUP BY sku
-
-  and get downloaded to a file:
-
-			sku                 times_ordered       total
-			0738417912          1                   2
-			0972355901          1                   1
-			0972355936          1                   4
-			V4081300077         1                   1
-			V4081300116         1                   1
-			V4081300218         4                   5
-			V4081300218cd       3                   3
-			V4081300222cd       1                   1
-			V4081300233         11                  17
-			V4081300376         3                   3
-			V4081300469         1                   1
-			V4081300493         1                   1
-			V4081300498         1                   1
-
-* Add shipmethod to display in order_view page, make some display 
-  fields conditional.
-
-* Fix bug in address display in customer_view page.
-
-* Message for free shipping added to entry page.
-
-Payment
--------
-
-* Add support for Verisign's PFProAPI.pm Perl module, which implements
-  Payflow Pro gateway communication without needing any external binary,
-  and thus no forking or temporary files for communication. Use PFProAPI
-  automatically if it is found at IC startup time, but fall back to pfpro
-  or pfpro-file if not. Upgrades should be transparent.
-
-* Add COMMENT1 and COMMENT2 to Verisign queries. These map to values
-  comment1 and comment2 by default in Payment.pm, but can be remapped.
-
-  Also put SHIPTOZIP in the varmap for simplicity, but same function.
-
-* Minor data filtering modifications to BoA module.
-
-* Map company and b_company for payment use.
-
-* Authorize.Net:
-  
-  - Send to Authorize.Net customer shipping address information and company
-    where available.
-
-  - Add Card Security Code (AKA CVV2, CVC2, CSC, CID) verification support
-    (uses Authorize.Net protocol version 3.1). (Chaim Klar <c_klar at c-cs.com>).
-
-  - Added the whole list of response codes (Chaim Klar <c_klar at c-cs.com>).
-
-* Add new Verisign route parameter, "check_sub", which allows a Sub or
-  GlobalSub to be called after a successful charge for a check of some
-  sort. 
-
-Shipping
---------
-
-* Allow redirection of shipping modes.
-
-  Basically, you can do:
-
-  upsg_or_free	UPS Ground	[subtotal noformat=1]	0	99.99	>>upsg
-  upsg_or_free	UPS Ground	price	100	99999	0		{ free => 'Free!' }
-
-  upsg	UPS Ground	weight	0	150	u Ground
-
-  The first mode redirects to the second one if the order total is
-  less that $100; if it is more, it gives free shipping.
-
-  Add [shipping widget="Vend::Form widget" mode="mode1 mode2"] to
-  automatically build widget with Vend::Form. Works just like
-  [shipping label=1 ...] but produces a complete widget.
-
-* Support Canadian and 2003 US UPS Zone files.
-
-* Add mv_ship_residential with automatic lookup of residential charge in
-  properly formatted rate tables.
-
-  Requires residential => 1 option in shipping definition.
-
-* Add EAS surcharge via different means than EAS capability. Allows lookup
-  of exception zip codes in surcharge_table => 'tablename' option.
-  surcharge_field => 'fieldname' defaults to "surcharge".
-
-* Allow aggregation of weights over a number of pounds.
-
-  If aggregate => 1, that is 150 pounds. Breaks it up into 150-pound
-  packages and then a final package at the remainder.
-
-  If aggregate > 10, breaks it up into that many pound packages.
-
-* Break out shipping stuff from Vend::Interpolate. Add stubs so
-  custom code doesn't break.
-
-* Add ability to put custom shipping modules in, called with
-  "cost" field of "s Module".
-
-* Improve [ups-query ...] to aggregate shipments and cache prior
-  lookups.
-
-* Document [ups-query].
-
-* Add some tweezy scripts that help make US Postal zone charts and
-  tables. Use at your own risk.
-
-Levies
-------
-
-* Fix bugs preventing the usage of the customer defined routine and
-  calling it with the wrong parameters.
-
-* New Levy add_to key allows consolidation of levies under one
-  heading.
-
-	Levies  salestax  foo
-
-	Levy    salestax    description    "Sales Tax (%s)"
-	Levy    salestax    keep_if_zero   1
-	Levy    salestax    type           salestax
-	Levy    salestax    sort           002
-	Levy    salestax    label_value    state
-
-	Levy    foo    keep_if_zero   0
-	Levy    foo    add_to         salestax
-	Levy    foo    type           shipping
-	Levy    foo    mode           PERD
-
-  This will calculate the foo levy, but add its cost to the salestax
-  levy for display purposes.
-
-* Remove sprintf() function and replace with round_to_frac_digits,
-  prevent worries about rounding errors.
-
-* Allow label_value for all levy types, means you can do
-  something like:
-
-	Levy    shipping    description       Shipping (%s)
-	Levy    shipping    keep_if_zero      0
-	Levy    shipping    type              shipping
-	Levy    shipping    mode_from_values  mv_shipmode
-	Levy    shipping    label_value       zip
-
-  which will display
-
-    Shipping (45056)
-
-i18n
-----
-
-* Add alias [L] => [loc] in order to resolve [L] tags in variables
-  independent of the configuration.
-
-* Localize script now groks new menu database files.
-
-* Add Italian UI translation from Marco Mescoli <m.mescoli at omnibit.nu>.
-
-Foundation
-----------
-
-* Support for SQLite added.
-
-* Make metadata correspond to current UI version.
-
-* Fix orderline import deficiency in etc/log_entry found by Karen Gold
-  (KarenG at LOADUP.com). 
-
-* Change [discount-price] to [item-discount-price] to make it compatible
-  with editor components.
-
-* Preparation of pages for translation.
-
-* Typo in state database fixed (Bugzilla #499).
-
-* Modified include_form code on General Tab of item_edit page
-  in such a way that item images and thumb images with
-  extensions other that .gif can be displayed as well.
-
-  Replaced <img ...> by:
-	[image 	src="[var IMAGE_DIR]/items/[cgi item_id]" extra="border=0 id=item_img"]
-
-* Remove straggling Red Hat/IC logo and URLs, update foundation logos to match
-  Interchange 4.8's latest.
-
-* Added ALT attribute to Home links.
-
-* All of the order profiles had common information. Made a
-  Variable called COMMON_ORDER_PROFILE to hold that info
-  to remove duplication.
-
-* Add proper autonumber initialization to affiliate database so
-  it will generate affiliate codes that are valid. Thanks to
-  Kevin Old for reporting.
-
-* Use LENGTH_EXCEPTION_DEFAULT for Postgres userdb, transactions,
-  orderline tables in foundation.
-
-* Remove unused ship address pages and unused large gift certificate image.
-
-* Use the common placeholder for the email address in survey database.
-
-* Set more reasonable default types for each SQL DB.
-
-* Use mv_form_profile instead of mv_order_profile on account page in
-  order to check user's input.
-
-Debian
-------
-
-* Default traffic setting is low now.
-
-* Allow selection of traffic setting with debconf and interchangeconfig.
-
-* Specify unix and inet modes explicitly if user selects both. 
-
-* Check if /etc/init.d/interchange and /usr/sbin/interchangeconfig are 
-  executable in interchange-ui maintainer scripts.
-
-* UPGRADE and README.cvs added to interchange.docs
-  
-* avoid installation error by checking installation state before
-  invoking interchange --add/--remove from interchange-cat-foundation
-  postinst script (thanks to Doug Alcorn <doug at lathi.net> for reporting
-  the problem)
-
-* remove configuration files handled by interchangeconfig on purge
-
-* protect against scripts ending up in /usr/lib/interchange
-
-* get_url UserTag forces dependency on libwww-perl
-
-UserTags
---------
-
-* history-scan - Added new option called 'pageonly' that causes history-scan 
-  to return only the name of the previous page rather than a full "area" link.
-  Can be used to set mv_successpage for a form.
-
-* Removed some code that caused table-organize to write the td.x attributes
-  twice. 
-
-* find - New usertag in spirit of the Unix command with the same name.
-
-* Add [button wait-text="-- Please Wait --" text="Place Order" ...] so
-  button has indication of press beyond normal browser indication.
-
-  Allow direct setting of id, class, and style HTML characteristics without
-  having to shoehorn them in extra=" style='...'" etc.
-
-* Fix typo in auto-wizard UserTag so it works with ITL conditionals.
-
-* weight  - New usertag to set and determine shipping weight easily.
-
-Filters
--------
-
-* Add "upload" filter. Checks to see if the submitted variable
-  is a file upload, if it is it reads the file and places it in
-  $CGI->{$varname}. Otherwise uses the value of the variable.
-
-* Add "line" filter which rips off the first line of a longer text.
-
-* Change "date_change" field in order to handle MySQL DATE resp.
-  DATETIME fields.
-
-Jobs
-----
-
-* update_locales job added.
-
-* Remove bogus session created by logging function.
-
-SOAP
-----
-
-* Ensure that SOAP server adds a blank line between HTTP header
-  and HTTP body.
-
-* Log errors in soap tag to catalog log file instead of the global one.
-
-* SOAP_Action introduced, which is intended to used as a
-  way to provide webservices from an Interchange catalog.
-
-* Allow tracing in SOAP calls in order to get a handle on SOAP request
-  resp. response.
-
-* Error handling revised.
-
-* Add SOAP_Control configuration directive and soap_gate access
-  check routine to control requests to the SOAP server.
-
-* Change to the catalog directory so that log messages end up
-  in the correct file etc.
-
-Shadow Database
----------------
-
-* Add stub for sort_each method.
-
-* column_exists method calls now method of underlying class instead of a
-  lookup in the database structure which didn't work properly
-
-* each_nokey is now properly replacing the shadowed fields.
-
-* Moved configuration code to the module itself.
-
-* Add name method.
-
-* Map autonumber method to Vend::Table::Common.
-
-* Introduce mv_shadowpass scratch variable which instructs
-  the Shadow database code to return the original database record.
-
-* Add stub for inc_field method.
-
-* Add stub for delete_record method.
-
-* Non-select queries are passed to underlying database immediately.
-
-* Fix queries with list type.
-
-* Fix errmsg calls.
-
-Static Page Generation
-----------------------
-
-* Remove this feature completely from Interchange:
-
-  -- remove configuration directives ClearCache (not in use),
-     StaticIndex, StaticSessionDefault, StaticTrack (introduced in 4.9.x)
-  -- deprecate configuration directives NoCache, Static, StaticAll,
-     StaticDBM, StaticDepth, StaticFly, StaticLogged, StaticPage,
-     StaticPath, StaticPattern, StaticSuffix
-  -- remove UI tag regenerate
-  -- remove InvalidateCache attribute from distributed usertags
-  -- remove build flag from [tag] usertag
-  -- remove UI pages (regen and regenerate)
-  -- remove support from foundation and test catalog
-  -- remove path_adjust Pragma which is only useful in conjunction with
-     StaticPath configuration directive
-  -- remove Vend::Interpolate::cache_html, Vend::Interpolate::resolve_static, 
-     Vend::Interpolate::static_url and Vend::Session::tie_static_dbm routines
-  -- remove variables $Vend::AccumulatingLinks, @Vend::Links, 
-     %Vend::LinkFound, $Vend::ForceBuild, $Vend::CachePage.
-  
-Miscellaneous
--------------
-
-* Fix a bug that prevented the cgi-bin link program from being associated 
-  with the chosen owner and group. The patch was created and tested by Carl
-  Bailey.
-  
-Extensions
-----------
-
-* Quickbooks updates:
-
-  - Documentation built from updated Interchange + Quickbooks HOWTO.
-
-  - Major change to IIF generation routine:
-    - IIF files are generated on-demand via the Admin UI
-	- In-route method still available
-	- New "Generate new IIF files" and "download IIF files"
-	
-  - New "qb_safe" filter, to cater to Quickbooks sensative side.
-  
-  - New default values (like defaulting to cash receipt instead of invoice)
-  
-  - Payment and Shipping methods are recorded in corresponding Quickbooks fields.
-  
-  - Allow customization of the transaction account (new default is "Checking")
-  
-  - Optionally set the transaction class (e.g., to track online sales in a
-    separate class from walk-in sales, and report on them differently). 
-  
-  - Optional Item Prefixes (e.g. if all items are accounting in Quickbooks under
-    a given category.
-	
-  - Optionally get the tax agency from the "state" table, falling back to the
-    configured default tax agency.
- 
-  - Bug fixes
-
-
-------------------------------------------------------------------------------
-
-
-Interchange 4.9.7 released only via nightly builds.
-
-  
-------------------------------------------------------------------------------
-
-
-Interchange 4.9.6 released 2003-01-08.
-
-
-Core
-----
-
-* Perl version 5.6.0 or newer is now a requirement to run Interchange.
-
-* Add new global directive TrustProxy, which allows the administrator to
-  designate certain IP addresses or hostnames as trusted proxies, whose
-  claims (via the HTTP_X_FORWARDED_FOR environment variable) about the
-  original requesting host will be believed.
-
-  When using a front-end proxy for Interchange, all requests appear to come
-  from that proxy, say 127.0.0.1 if on the same machine, which is effectively
-  the same as running WideOpen because sessions can be easily hijacked. This
-  offers a way to bring back a little discernment about what host we're
-  really dealing with.
-
-  Usage is identical to the RobotIP directive's, for example:
-
-  TrustProxy 127.0.0.1, 10.0.0.*
-
-  I'm not sure why anyone would want to do this, but it could also be used
-  with external HTTP proxies in general (which hopefully aren't lying), with
-  a simple 'TrustProxy *'.
-
-* Fix whitespace transform and tolerate leading whitespace on HTTP
-  header lines.
-
-* Avoid persistent storage to make [summary] safe in prefork mode.
-
-* Allow a database to spring into existence without a .txt file. TO
-  do this, you define the field names in the NAME paramter.
-
-      Database will_be_there  will_be_there.txt  __SQLDSN__
-      Database will_be_there  NAME   code  field1 field2
-      Database will_be_there  CREATE_EMPTY_TXT  1
-
-  All it does is create the .txt file (or whatever the name is) from
-  the value of NAME array. It does take delimiters into account.
-
-  You must be just a bit careful, since if you then remove the .txt
-  file it will of course recreate the table. Of course you should
-  take that into account when setting this non-default parameter.
-
-  This will allow some one-file configurations to be added to the
-  system.
-
-* Allow autonumber for the linked-table behavior of update_data. Before,
-  you couldn't autonumber because the determination of whether the data
-  would be set was whether the key value is present. This allows
-  you to set mv_data_qual=fieldname and have a non-empty value in
-  that field determine whether to insert or not.
-
-* Minor cleanup in Data.pm, including ensuring $obj->{DELIMITER} 
-  and $obj->{delimiter} match.
-
-* Avoid infinite loops in catalog configuration caused by includes.
-
-* Compile warnings in catalog usertags now show up in the logs instead
-  of "UserTag 'ugly_hack' code is not a subroutine reference".
-
-* Add new database configuration option PREFER_NULL. It accepts a list of
-  field names which should be set to NULL instead of an empty string
-  whenever possible:
-
-  Database  people  PREFER_NULL  age height
-
-  Probably most useful with numeric or date fields that are nullable, to
-  prevent import errors when trying to store '' into a numeric field. Also
-  for character fields that you'd rather have contain a NULL than '' to
-  comply with a CHECK or foreign key constraint.
-
-UserTags
---------
-
-* Obsolete usertags dbinfo, e, if-key-exists, if_sql, reconfig_wait, 
-  rotate_file, with and write_page removed.
-
-Filters
--------
-
-* Allow % in filter arguments. This could conceivably be a problem for
-  someone who had a filter ".%s" or something.
-
-Content Management
-------------------
-
-* Get restrict_allow settings right -- the default was not allowing the "var"
-  to be expanded in the image preview path. Should probably look at this
-  concept on a per-field basis, and set the default to "".
-
-Payment
--------
-
-* Patch to display errors from payment modules in credit card header
-  on checkout page.
-
-Foundation
-----------
-
-* Multi-language support, configured by the LOCALES and DEFAULTLOCALE
-  variables.
-
-* Updated region templates.
-
-* New PayflowPro control variables MV_PAYMENT_PARTNER and MV_PAYMENT_VENDOR.
-
-* Payment routes use now generic MV_PAYMENT_* variables.
-
-* Test order page added.
-
-Shadow Database
----------------
-
-* lookup_table option added
-
-* foreign method implemented
-
-* test_record calls underlying database now
-
-Installation
-------------
-
-* Debian packages support the selection of the GnuPG home directory 
-  during installation now.
-
-mod_interchange
----------------
-
-* Fixed a weird bug where empty HTTP variables were being passed
-  under certain circumstances.
-
-* Fixed a bug reported by Jeff Dafoe.  The request information
-  enabled Interchange to show the correct page but prevented it
-  from storing the request in the session's history.  The problem
-  only showed itself when Interchange's [history-scan] tag was used.
-  As almost no page history was saved, [history-scan] sent the user
-  to the default page (usually index) most of the time. 
-
-
-------------------------------------------------------------------------------
-
-
-Interchange 4.9.5 released 2002-12-13 (minor bugfix release).
-
-
-Foundation
-----------
-
-* Add component files for new selectable results-list done by Ton.
-
-* Make proper patches to history-scan and barlink() to work with Randy
-  Moore's category_vert_toggle component.
-
-* Minor updates to category_vert_toggle component for HTML cleanup and 
-  performance improvement.
-
-Core
-----
-
-* Fixed problem with PreFork and mod_perl modes where Interchange children
-  kept order profile state between runs.
-
-* Make sure STDERR is selected in mod_perl mode in case some other mod_perl 
-  code uses select. 
-
-* Change default for MaxServers in "rpc" profile to zero. This is probably
-  best for the vast majority of servers running in PreFork mode.
-
-* Tolerate missing configdb database, issue warning only.
-
-* Tolerate people forgetting and putting , on the end of a parameter
-  when using line2options. A comma should never be the last character, I
-  would think, but you can choose to not use the filter if by some
-  bizarre chance it is needed.
-
-* A number of refinements and fixes to Menu module.
-
-	- Passing timed=1 to [menu ...] tag prevents putting session ID and
-	  count in URL, allowing timed-build to work well.
-
-	- first_line and last_line transforms allow you to specify a field
-	  to set to trigger the first line or the last line of the menu.
-	  This allows the current IC menu structures to work well with
-	  menus separated by space.
-
-	- logical_page feature allows a tab "up" indication in another
-	  menu, based on the page of the entry. This allows multi-level
-	  tabs to have an "up" indication on different menus.
-
-	- expand_values_form allows setting of ITL tag values even
-	  on multiple form values.  Honors [cgi ..], [value ..], and [var ..].
-
-    - Fix ordering of open parameter for trees -- it was broken by the new
-	  Vend::Util::vendUrl routine.
-
-* Simplify field_settor subroutines with prepared query and placeholders.
-  Prevents infamous DBD::Pg::do errors.
-
-* Form module -- add intrinsic "file" type, and allow setting of a
-  widget class directly without using "extra".
-
-* Other minor bugfixes too insignificant to mention.
-
-UserTags
---------
-
-* min-rows option added to table-organize tag. Allows building small
-  result sets in one column (or however many columns needed to reach
-  min-rows).
-
-* Reworked [tree ...] tag to use DBI placeholders if supported.
-  While this doesn't seem to save too much CPU on a machine that
-  has the database and IC on the same machine, it should relieve
-  some network bandwidth on distributed setups.
-
-Installation
-------------
-
-* Various debian build patches.
-
-
-------------------------------------------------------------------------------
-
-
-Interchange 4.9.4 released 2002-12-02.
-
-* Fix problem with PreFork and mod_perl modes where Interchange children
-  kept order profile state between runs.
-
-* Tolerate people forgetting and putting , on the end of a parameter
-  when using line2options.
-
-Core
-----
-
-* The interchange script is now only used for configuration and
-  options. All code that previously resided there (notably the
-  dispatch(), respond(), update_data(), and do_order() routines)
-  has been relocated. Code that calls ::update_data, etc. should
-  NOT break, because we still use the modules in the script.
-  This caused the addition of Vend::Dispatch to hold many of
-  the routines.
-
-* Added new [deliver ....] tag that allows you to deliver some content
-  without worrying about [tag op=header] and page spacing issues. Adds 
-  new global variable $Vend::Sent which is authoritative notification
-  that all content is sent and that all further parsing of ITL
-  should stop.
-
-* Add mv_source parameter which sets an affiliate program source
-  and can be carried around in URLs when $Scratch->{mv_add_source}
-  is set. This solves the problem of AOL caching the page with
-  the source embedded, then forwarding the next request sans source.
-
-  From a suggestion by Dan <ic at concolor.org>.
-
-* Add new [menu ...] tag which can build simple, tree, and flyout
-  menus from a menu specification. See the UI.
-
-* Add robot tolerance facility, where mv_tmp_session is set when either
-  a RobotUA, RobotIP or RobotHost wildcard matches.
-
-  In interchange.cfg:
-
-      RobotUA   Inktomi, Scooter, Site*Sucker
-      RobotIP   209.135.65, 64.172.5.*
-      RobotHost *.googlebot.com
-
-  After that, it is all automatic. mv_tmp_session gets set to one, the
-  Scratch values mv_no_session_id and mv_no_count are set to one, and
-  normal pages don't get IDs put out by area.
-
-  What this will do for the user:
-
-        1. Allow those UAs to follow a URL.
-        2. Prevent useless session files from cluttering disk
-        3. Prevent session writes from inhibiting disk performance.
-
-* Added a (global) HostnameLookups directive to specify whether Interchange
-  should perform a DNS lookup to resolve the remote user's hostname from
-  their IP address.  The default is 'No'.  Hostnames are required for
-  facilities such as the RobotHost check to work.  If the web server is
-  configured to perform hostname resolution then this directive should remain
-  set to 'No'.
-
-* Add the oft-requested DirectoryIndex feature. 
-
-* Add new content management features. This allows Interchange to:
-
-    -- Accept Apache error redirects, i.e. handle 404 errors
-    -- Initially process page, process page after variables, and
-       process page before image substitution with configurable subroutines
-    -- Take puts for DAV-style publishing
-
-*   New "AcceptRedirect" directive. If "Yes", will look for REDIRECT_URL,
-    REDIRECT_QUERY_STRING, etc. and use those to provide the request.
-
-    This allows:
-
-        ErrorDocument 404 /cgi-bin/foundation
-
-    At that point, a request for /index.html that is not found will
-    be equivalent to /cgi-bin/foundation/index.html and will be
-    indistinguishable from the real page by the client.
-
-*   New Pragmas init_page, pre_page, post_page, which specify
-    Sub/GlobalSub routines to run at various points in page build.
-
-    init_page     Run before Variable substitution
-    pre_page      Run after Variable substitution, before interpolation
-    post_page     Run before Image substitution
-
-* Allow PUT operations. Add
-
-    [value-extended test=isput]       Check for a PUT
-    [value-extended put_contents=1]   Return PUT string
-    [value-extended put_ref=1]        Return ref to PUT string (scalar)
-
-  Some more DAV-type features can be done, I think, but they are not yet
-  scoped.
-
-* Remove min_string test from Search.pm, where it never really was used
-  or called due to mv_min_string default being 0.
-
-* Place mv_min_string check back in Glimpse where it was intended in the first
-  place.
-
-* Convert Mac line endings to Unix (as well as DOS).
-
-* Finally discovered what is going on with GPG and errors.
-
-  -- If PGP fails due to a system problem, like out of memory or
-     bad file permissions, it fails with a status that will cause
-     a real error which is in the lower 8 bits.
-
-  -- If PGP fails due to an internal problem like "key not found",
-     or no secret key ring, it will fail with system status set to
-     zero but the upper level status indicating its problem.
-
-     So a failed key will turn up as "File not found" in the
-     upper order bits, while a key *ring* not found will fail
-     with the same error in the lower status bits.
-
-  This patch is temporary, and at least tells you what $! is. I will
-  examine GPG's error messages and provide some simple ones like "key
-  not on keyring" and catch them to provide a better error.
-
-* Add general multiple-table update feature to Vend::Data::update_data.
-
-* Allow authoritative table name for constructed queries. Usage:
-
-    my $db = database_exists_ref($table);
-    my $tname = $db->name();
-
-    my $query = "select * from $tname";
-    $db->query($query);
-
-  This should allow REAL_NAME many more places.
-
-* New mv_cleanup operates like mv_click and mv_check, but operates
-  after a form processing action is done.
-
-* Added debug type to [log].
-
-* [userdb function=logout clear=1] will now restore the appropriate
-  ScratchDefault and ValuesDefault values instead of simply
-  deleting the scratches and values under its control.
-
-* Added check for no_increment so that mv_order_number can be set in
-  a route.
-
-* Fix bug where bad [nitems compare=...] could cause server error. Now
-  just silently causes bad compare.
-
-* Allow alternate values spaces with $CGI->{mv_values_space}. This allows
-  fill-in wizards, surveys, and such to not pollute the user's normal
-  values.
-
-  Use with caution -- if someone is in the practice of using $Values
-  to set catalog behavior (usually a poor idea) then it can cause
-  anomalies.
-
-* Clean up a few references to $Vend::Session->{values} which should
-  never be done anymore -- we had handled almost all of this previously.
-  It should always reference $::Values.
-
-Installation
-------------
-
-* "you are now ready to run makecat" is no longer displayed on upgrades.
-
-* Prevent test from failing on upgrades.
-
-Payment
--------
-
-* Patch from Mark Johnson to Vend::Payment::Signio module whose explanation
-  we quote: 
-  If you send a garbage ORIGID, as IC does by default, it will attempt to
-  use that as the key for the transaction, without falling back on the data
-  you sent with it. Thus, it must explicitly not be used unless you have a
-  valid one which you want to use. This was why no credits were succeeding;
-  even though we were sending explicit new data, it ignored it and cried 
-  with the ever useful error "Not signed up for this tender type".
-
-* Added a Vend::Payment::TestPayment module to allow developers to test
-  their site's interaction with the Interchange Payment system, without
-  actually being connected to a real Payment Services Provider. 
-
-* Change AuthorizeNet.pm to more easily enable settlement of orders
-  done via AUTH_ONLY.
-
-* Prevent automatic try at credit card encryption if no EncryptKey
-  is present.
-
-Filters
--------
-
-* Add new filter, "next_sequential". Allows selection of a next-sequential
-  value based on a field (and qualified by a field).   
-
-  [filter op="next_sequential.survey_q.sort"][cgi sort][/filter]
-
-  will:   
-
-    1. Return the existing value if present.
-    2. If existing value is blank, return max + 1 in the sort field,
-       i.e. equivalent to: 
-
-           SELECT sort FROM survey_q
-       ORDER BY sort DESC
-       LIMIT 1   
-
-  If another argument of a field name is passed, i.e. 
-
-    filter => 'next_sequential.survey_q.sort.sel',   
-
-  then you get: 
-
-       SELECT sort FROM survey_q
-       WHERE sel = '[cgi sel]'
-       ORDER BY sort DESC
-       LIMIT 1   
-
-  This allows a next-sequential numbering for things that need it.
-  Developed to support general-purpose survey UI for Ton's excellent
-  product rating system.
-
-* Fix bugs in option_format filter. It would turn commas into new options;
-  and alternate delimiters had no hope of working.
-
-* Add options2line and line2options filters, allowing you to specify
-  options in a textarea without comma separators and instead with one
-  option per line.
-
-Profiles
---------
-
-* Add "future" profile comparator so that you can do:
-
-    appointment_date=future 1 day "Sorry, we need some lead time."
-
-  That allows you to check that a date value (ala the date widget) is
-  in the future.
-
-* Added "luhn" profile check for "LUHN-10"-encoded numbers.
-
-* Enhance unique profile check to allow specification of a foreign key
-  for uniqueness check.
-
-Foundation
-----------
-
-* Add several different color schemes instead of only the Foundation Red.
-  "blueyellow" is the new default.
-
-* Change logos and such to reflect ICDEVGROUP instead of Red Hat.
-
-* Add product_tree and product_flyout components to work with new
-  menu editor.
-
-* Change checkout display to work easier for DHTML browsers, old
-  browsers should see much the same thing.
-
-* Change order profiles and etc/log_transaction to do a more reliable
-  job of order checking. If your database has transactions (i.e. Postgres),
-  a failure in the log_transaction can cause a failure of the order.
-
-* Added auth_code and tracking_number to transactions table to support
-  charge settlement and shipping_tracking in the UI.
-
-* category_vert_toggle component reworked by Randy Moore.
-
-* new category_vertical_tree component by Rene Hertell.
-
-UserTags
---------
-
-* Fixed problem in [button] tag to make sure that the current button being 
-  pressed is the only one whose mv_click_map_* variable gets set.
-
-  This works around the problem of a user clicking one button, using the
-  browser's Back button, then clicking on a different button, and both
-  mv_clicks execute instead of just the most recent one.
-
-* [history-scan ...] now escapes form parameters properly.
-
-* Extended stripping of line endings by [import-fields] to 
-  help people who import using files generated on non-Unix
-  operating systems.
-
-* Add [jsq] [/jsq] .. and [jsqn] [/jsqn] tags that build properly
-  JavaScript strings (jsq with variable substitution, jsqn without).
-
-* Add [tabbed-display] tag that shows DHTML tabbed panels.
-
-        [tabbed-display OPTIONS]
-            [tabbed-panel The title of one]
-            The contents of one
-            [/tabbed-panel]
-            [tabbed-panel The titel of two]
-            The contents of two
-            [/tabbed-panel]
-        [/tabbed-display]
-
-  It is pretty much that simple. It is documented, and an example is
-  on the pages/admin/genconfig.html page.
-
-* [table-editor ...] tag updated extensively. Added tabbed displays,
-  full templating of the display, user-includeable forms, almost all
-  features supported with metadata.
-
-* Many minor changes in metadata and preferences. Changed default
-  in some tables to tabbed display.
-
-* [update-order-status] tag added for shipping products. Also does
-  charge settlement if needed.
-
-* [xml-generator] removed.
-
-UI
-----
-
-* Extensive update to look and feel of the admin UI. The HTML design was
-  done by David and Hamish, core members from Zeald, Ltd. in New Zealand.
-  There are no more BGCOLOR references, and only a couple of <font ..>
-  tags. All has been switched to CSS.
-
-* Remove icmenu database. That work now done by lib/UI/pages/include/menus/*.
-
-* Major update to [table-editor ...] which so much of the UI is based
-  around. 
-
-    -- Tabbed displays
-    -- Insert spreadsheet linked via foreign key
-    -- Insert custom form widgets for form processing use,
-           a "recompute transaction" included for an example
-    -- Control over styles and classes for table columns
-        -- Completely templateable
-
-* Add the suggested feature from Dan Browning -- a great idea --
-  a spreadsheet of a linked table within the table editor.
-
-  Adds the options:
-
-    link_table               Table to link in
-
-    link_key                 Key field to link to
-
-    link_fields              Columns to display
-
-    link_sort                How to order the linked rows
-                             (probably should add link_query here)
-
-    link_view                The view for spreasheet meta
-
-    link_label               How to label the thing (default
-                             is something like "Settings in
-                             link_table linked by link_key"
-
-    link_before              Where to plop the thing, input
-                             a column name in the main table to
-                             put it before
-
-    link_extra               Class, style, or other data for
-                             the table cells in the spreadsheet
-
-
-   To make it even better, multiple link tables are allowed,
-   so you could do:
-
-       [table-editor
-            link-table.0=options
-            link-table.1=pricing
-            link-key.0=sku
-            link-key.1=price_group
-        ]
-
-   To test, try this little test-snippet in a default foundation
-   from the latest CVS.
-
-    [table-editor
-        table=products
-        item_id="os28004"
-        link-table=options
-        link-key=sku
-        link-fields="sku price description"
-        link-sort="price desc"
-        link-before="weight"
-    ]
-
-* Complete rework of content editor. Improvements too many to name.
-
-    - "Edit page", "Edit menu", even "edit component" links are inserted when
-      you are logged in as admin.
-
-    - Complete cleanup of page/template/component parsing code, now perhaps
-      someone besides Mike could understand it. 8-)
-
-    - File navigator only now used for pages, not for templates/components,
-      retains context.
-
-    - Hooks are there for doing an entire edit session then pushing new content all
-      at once. Theoreticially, you could create an entire new site, browse it
-      and test it without the public seeing it, and then push one button to
-      publish it all. I say theoretically because I haven't done it yet, but
-      it should be there soon.
-
-    - Preview now holds true for browsing catalog.
-
-    - Now can create and edit pages that have no template wrapper.
-
-    - Add page to clone (push) sets of components to like sets of pages, i.e.
-      edit one to get the components like you want them and then select the
-      pages that that setup should be copied to.
-
-    - Closed all Bugzillas relating to it.
-       -- New pages not creating properly
-       -- Unable to edit in subdirectories
-       -- Templates not written properly
-
-    - TODO:
-
-        -- Allow alternate DSN for staging database tables.
-        -- Document this puppy, finally.
-        -- Change templates so that left-side/right-side components interchange,
-           and so that most class=content components can go vertical.
-        -- Vet the new [menu][/menu] component so that left-hand side
-           menu can be directory/location sensitive.
-        -- Build in the "use the index.html page in the current directory
-           as the template" functionality.
- 
-* Improve spreadsheet.
-
-    -- Any meta widget can be used.
-    -- No possiblity of data crossover with embedded nulls.
-    -- Remove need for "Change display" with improved meta edit (will
-       add temporary view selector soon).
-    -- Better display (I think).
-    -- Better consistency of display for data and new record, etc.
-    -- Fields can use meta, go to textarea, have text field all selectable
-       from spreadsheet meta control.
-
-* Add cheesy mail list manager, a common thing to ask. Supported by unsubscribe
-  function and a batch download mode for large mailings....probably should
-  create some online help.
-
-* Ability to employ database entries in filters supported by profile 
-  "process_filter" now.
-
-* Major update to order status update program. Now can batch ship by
-  checking boxes, sequence ship, settle transactions previously done
-  via auth_only with realtime payment gateway, and more.
-
-* Many, many, minor bug fixes and improvements.
-
-Swish Search
-------------
-
-* Added module to search indexes with Swish.
-
-* To use, you must add to interchange.cfg:
-
-        Require module Vend::Swish
-        AddDirective Swish hash
-        Variable swish Vend::Swish
-
-* The search is called with st=swish (same as mv_searchtype=swish).
-
-* The fields to return are configurable, and default to;
-
-        rf=code score title url mod_date filesize
-        fn=code score title url mod_date filesize
-
-  These correspond to:
-
-                        code            swishreccount
-                        score           swishrank
-                        url                     swishdocpath
-                        title           swishtitle
-                        filesize        swishdocsize
-                        mod_date        swishlastmodified
-
-mod_interchange
----------------
-
-* Implemented a proper (automatic) URILevels mechanism and removed
-  the URILevels configuration directive.  This also fixes a bug,
-  reported by Philip Hempel in the interchange-users mail list,
-  where [PT] redirects were not being handled correctly.
-
-Forum
------
-
-* Add "forum" feature to foundation. Allows commenting on products and
-  also as a byproduct arbitrary blog-style forums.
-
-  This is a complete forum display:
-
-        [forum top=THREAD_ID /]
-
-  You can get more complex than that. There is an illustration of the
-  templated version in the pages/forum/display.html page.
-
-  Disabled by default for DBM and Oracle. No database def is
-  supplied for Oracle.
-
-  With Postgres and MySQL, the forum is displayed in the flypage
-  automatically by default. The thread doesn't exist until the
-  first comment is made, at which time we create a top-level thread
-  named for the SKU.
-
-  An email notification goes out with new comments if that is
-  enabled.
-
-  There is some scoring logic for display, but no way to assign
-  scores yet (except by editing the database directly).
-
-  The reply and submit pages use include files from include/forum.
-
-  Arbitrary forums need to be enabled by setting the artid equal
-  to the code. If the artid is 0, as is the default on a random
-  submit, no display will be done. (The enabling is done automatically
-  for products by passing the product=1 parameter in the URL and
-  finding the product in the database.)
-
-
-------------------------------------------------------------------------------
-
-
-Interchange 4.9.3 released only as nightly builds.
-
-
-------------------------------------------------------------------------------
-
-
-Interchange 4.9.2 released 2002-08-12.
-
-
-Core
-----
-
-* New ability to run Interchange entirely inside Apache and mod_perl.
-  See POD documentation inside scripts/ic_mod_perl.PL for details.
-
-* Add new Jobs and Cron facility:
-
-  - While we don't keep the time, and a scheduler will have to set the
-    execution time, it allows ITL to be run without the hassles of having
-    to deal with HTTP.
-  - Use $Vend::Cfg->{Cron} for setup.
-  - Emails either to command line address or $Vend::Cfg->{Cron}{email}
-    (only if the cron job supplies output). Uses the $Vend::Cfg->{Cron}
-    variables subject, from, reply_to and extra_headers.
-  - Logs to $Vend::Cfg->{Cron}{log}
-    (only if the cron job supplies output).
-  - Can add session dump when $Vend::Cfg->{Cron}{add_session}.
-  - Base directory set by $Vend::Cfg->{Cron}{base_directory}, defaults
-    to etc/cron. If $Vend::Cfg->{Cron}{use_global} is set, 
-    the same directory in $Global::ConfDir is scanned too.
-  - The macros $Vend::Cfg->{initialize} and $Vend::Cfg->{autoload} are
-    executed once resp. before each job.
- 
-* Add First and Last links to more-list, with ability to customize via
-  [first-anchor] and [last-anchor] containers.
-
-* Bye bye Wizard. Suggest anyone who wants it resurrect it and
-  make it work properly...
-
-* Add new menu editor and menu system. It is based around Vend::Menu
-  and the new tag [menu ...], which builds various types of DHTMl and
-  standard HTML menus based on browser type.
-
-  The menu editor can edit simple menus or tree-based menus.
-  All UI menus use this. A simple menu component (i.e. a link list)
-  and a tree-based list are provided for Foundation.
-
-* New support for database-native sequences for MySQL, PostgreSQL, and Oracle:
-
-  - To do a minimal sequenced table, all you need to do is:
-
-    Database  sequenced sequenced.txt __DBIDSN__
-    Database  sequenced AUTO_SEQUENCE sequenced_seq
-
-  - The parameter passed to AUTO_SEQUENCE (in the above, "sequenced") will
-    be used as the sequence name for Postgres and Oracle (and presumably
-    others that emulate them).
-
-    For MySQL, the same technique that Stefan introduced is used, with an
-    AUTO_INCREMENT field. The value in AUTO_SEQUENCE is just a non-false
-    value. The behavior depends on the definition of
-    $capability->{LAST_SEQUENCE_FUNCTION}.
-
-    If MySQL is the DB in use,
-
-    $key = $s->autonumber();
-
-    returns nothing and the key will be later found with
-
-    $key = $s->last_sequence_value($key);
-
-    and returned in $db->set_slice, etc. ($db->set_row also uses this, but
-    the key value is never returned. You can get it with
-    $db->last_sequence_value if you need it.)
-
-    If PostgreSQL/Oracle is used, the key is returned with
-
-    $key = $s->autonumber();
-
-    and is just parroted back with
-
-    $key = $s->last_sequence_value($key);
-
-    If the table is being created, the sequence will be created as well. If
-    it exists, it will not be dropped. If the "code" or key field is not
-    set with a COLUMN_DEF, the field type to be used will be found in
-    $capability->{SEQUENCE_KEY}.
-
-    Capablility entries used:
-
-    SEQUENCE_CREATE         Query to create a sequence on table creation.
-    SEQUENCE_QUERY          Query to get next value in sequence.
-    SEQUENCE_KEY            Type definition for key field when AUTO_SEQUENCE
-                            table is created.
-    SEQUENCE_VALUE_FUNCTION Query to get current value of sequence.
-    SEQUENCE_LAST_FUNCTION  Query to get key when MySQL behavior is wanted.
-
-  - Can automatically drop existing sequence if:
-
-    Database sometable AUTO_SEQUENCE_DROP 1
-
-* Add BASE_CAPABILITY configuration parameter to allow testing of a new
-  SQL database type with settings based on one of the known types. If
-  behavior is different in particulars, that capability can be modified
-  in the config file.
-
-* In Vend::Config, fix incompatibility in Perl 5.005-style regex that
-  causes rejection of certain Locale settings.
-
-* Remove unnecessary CGI variable mappings at end of Vend::Config.
-
-* Fix call to [item-tag object name].
-
-* Add Filter alias e = encode_entites.
-
-
-Extensions
-----------
-
-* Various Quickbooks updates:
-
-  - Fixed: When an auto-created user orders from the same company as an
-    existing Quickbooks customer, it overwrites the customer.
-
-  - Save the auto-created user id (e.g. U00001) and use it in the Customer
-    Name as a unique identifier, just as logged-in users.
-
-  - New variables for easy customization of export features via Admin UI,
-    documented via item-specific meta referenced in the documentation.
-
-  - Fixed: "INTL" showing up without country (now matches US or USA).
-
-  - Put the company name on a separate line in Ship-to and Bill-to
-    addresses. Now utilizing all 5 lines.
-
-  - Item name updates:
-    - Length filter now customizable via QB_ITEM_LENGTH
-    - Default is 30 (backwards compatible)
-    - Item name taken from 'title' first, if any, then 'description' second.
-
-  - Optionally cause Quickbooks invoice number to be blank, to keep
-    Quickbook's invoice number progression unmodified.
-  
-  - Accompanying documentation.
-
-Utilities/EG
--------------
-
-* eg/te -- jon's great tabbed file editor.
-
-    Add some new options:
-
-    -f to handle files without field names on first line of file.
-    -n to number rows in comments.
-
-    -s for starting value support (really only vi).
-
-        te -s os28004 <file>
-
-        Jumps to first occurrence of "os28004" in <file>. Option -i ignores case
-        in the search.
-
-    Allow setting of persistent options in environment variable TE_OPTIONS.
-
-    Handle -i and -s with mixed-case search term (lowercase it first).
-
-    Don't escape " in search term, as it doesn't seem special.
-
-Payment
--------
-
-* Support for TrustCommerce added. Written, tested, and donated by
-  Dan Helfman of TrustCommerce <dan at trustcommerce.com>. Thanks, Dan!
-
-* Support for the Mainstreet Credit Verification Engine (MCVE) added.
-  Written, tested, and donated by Tom Friedel <tom at readyink.com>.
-  Thanks, Tom!
- 
-* Support for ECHO added. Written, tested, and donated by
-  Michael Lehmkuhl <michael at electricpulp.com>.  Ported from globalsub to 
-  Vend::Payment by Dan Browning <db at kavod.com>.  Thanks Michael!
-
-UI
---
-
-* [import_fields]: Performance enhancement: use set_slice() to update all 
-  fields in a record at once when importing files.
-  
-
-------------------------------------------------------------------------------
-
-
-Interchange 4.9.1 released 2002-07-22
-
-
-Core
-----
-
-* The great tag breakout!
-
-    - Almost all tags are now UserTag definitions. The exceptions are:
-
-        and bounce goto if label or unless
-
-    - New TagDir directive (default is VENDROOT/code) sets the
-      directory (or directories) which are searched for code definitions
-      set by UserTag and CodeDef.
-
-    - New TagGroup directive establishes groups of ITL tags which can
-      be included.
-
-        TagGroup :crufty "banner default ecml html_table onfly sql"
-
-      The default groups include :core, which contains all of the
-      ITL tags defined in 4.8/early 4.9. The groups are defined
-      in $Vend::Cfg::StdTags and can be undefined if desired
-      with "TagGroup :group".
-
-    - New TagInclude directive allows inclusion of tags (or groups
-      of tags). If a tag is defined as a core tag (with a .coretag
-      or .tag or .ct extension) and is not included, it will not
-      be compiled and placed in the tag map. This is for all catalogs,
-      so if *any* catalog uses a tag it must be included.
-
-      Examples:
-
-        # Include the base tags
-        TagInclude :core
-
-        # Not the commerce tags
-        TagInclude !:commerce
-
-        # But make sure item-list is included even though
-        # it is in :commerce
-        TagInclude item-list
-
-        ## Double negatives are honored
-        TagGroup    :foo "bar !baz buz"
-        ## With the group above, the below is equivalent
-        ## to TagInclude !bar baz !buz
-        TagInclude !:foo
-
-    - New CodeDef directive allows the setting of filters, order checks,
-      FormAction, ActionMap, ItemAction, and LocaleChange.
-
-            ## filters
-            CodeDef  mixedcase Filter
-            CodeDef  mixedcase Routine <<EOR
-            sub {
-                my $val = shift;
-                ## [filter mixedcase]mixed case[/filter]
-                ## outputs "MiXeD CaSe"
-                $val =~ s/(.)(.)/\u$1\l$2/g;
-                return $val;
-            }
-            EOR
-
-            ## order checks
-            CodeDef  mixedcase OrderCheck
-            CodeDef  foo  Routine <<EOR
-            sub {
-                my ($ref, $var, $val) = @_;
-                return (1,$var) if $val eq 'bar';
-                return (0,$var, "foo must be bar");
-            }
-            EOR
-
-       All work in catalog.cfg; LocaleChange and ItemAction are not
-       global. FormAction, ActionMap, and ItemAction directives
-       are equivalent to their CodeDef equivalents.
-
-* New Vend::Form module implements display tag and widget creation.
-  Passes all known tests, and runs accessories/widgets (apparently)
-  flawlessly in foundation, barry, simple, and the UI.
-
-* Add new HIDE_FIELD capability to DbSearch. It provides automatic
-  hiding of records accessed via search (and NOT query).
-
- -When the following configuration is added:
-
-    Database products HIDE_FIELD inactive
-
- -It adds automatically the qualification to every search:
-
-    WHERE inactive != 1
-
- -To use, you should have a field of char(1) or int type.
-
-    Database products COLUMN_DEF "inactive=int default 0"
-
- -This has the side-effect of hiding fields with NULL in the
-  field, so be careful. You should probably set "default 0"
-  as shown above.
-
- -Works for DBM types too.
-
- -Does NOT work for TextSearch.
-
- -If you want to show all records, you can pass mv_no_hide=1
-  in the search parameters. Obviously, this makes this not a
-  security feature.
-
-* Clear the following intermittent error:
-
-    CGI mapping error: multipart/form-data sent incorrectly
-
-  Some browsers, like Opera, use non-word characters like '+' in
-  form-data MIME boundaries, causing the regex matches to fail.
-
-* New function Vend::Util::logOnce which ignores repeated identical
-  log messages (works only in the scope of the current Interchange
-  page)
-
-* Remove last remnants of mv_raw_searchspec.
-
-* Remove HTML-embedded tag syntax
-
-* Remove Vend::ECML, move to extensions/ directory.
-
-* Allow customization of links in more-list, like this:
-  [link-template]<a href="$URL$" target="_top">$ANCHOR$</a>[/link-template]
-
-* Add utility functions Vend::Data::product_row and product_row_hash,
-  which do the same thing as product_field, but return the whole row
-  instead of just one field.
-
-
-UI
---
-
-* Major changes to the content editing scheme.
-
-    - Requires a CSS/Javascript 1.3 compliant browser. Tested on
-      Mozilla 0.9.8, MSIE 5.51, Opera 6.0tp2. All work pretty well;
-      Mozilla is a bit slow, Opera doesn't have CSS widths down.
-
-    - Page editor has a quasi-visual layout that should be much more
-      intuitive. Support for a "PAGE_PICTURE" file in the templates
-      allows visual links to the editor page.
-
-    - Components, templates, and pages are now all editable.
-      Template and component editors need to be brought up to speed
-      with the page editor, but work fairly well.
-
-    - Added new lib/UI/ContentEditor.pm module which implements
-      this stuff in conjunction with lib/UI/pages/include/*_editor.
-      A bit of a JavaScript dependency nightmare on the generated
-      attribute editors, but I may get this more canned as time goes on.
-
-    - Let's get this on record -- this content editiing WILL NOT
-      UNDER ANY CIRCUMSTANCES EVER WORK ON NETSCAPE 4. Do not ask,
-      though I know the people who monitor this stuff won't.
-
-* Added Mike's cool new "auto_wizard" which builds a wizard from a
-  file like in the example. It will be the method to provide scripted
-  content addition.
-
-* More table-editor updates -- added notable option, and
-  all_opts option which allows building the options in
-  Perl and then doing:
-
-        [table-editor all-opts=`\%opts`]
-
-* Look for major updates on the table editor to make it
-  completely templateable.
-
-* Fix problem with $Tag->display() called with null table, affecting
-  "wizard" mode.
-
-* Add a "admin/test_code.html" page for testing short snippets
-  of ITL without having to create a test page.
-
-* Make the table populator JavaScript honor the db tables the
-  particular admin user is supposed to see.
-
-* [import-fields replace=1] -- added option to replace items in the database
-
-* Add su facility for catalog superuser to switch users to another
-  user id, using new UI_Tag su as follows:
-
-    [su username=miltonbear]
-
-    1. Stringifies current session after checking that su user is valid
-    2. Writes a random string to "$Global::ConfDir/tmp/$Session->{id}"
-    3. Issues a cookie hashing the above two
-    4. Inits a new session, putting in the login info
-    5. Writes $Session->{su} with session string
-
-    [su exit=1]
-
-    1. Reads random string from "$Global::ConfDir/tmp/$Session->{id}"
-    2. Hashes that with session and verifies with cookie
-    3. Safe evals session string
-    4. Retrieves session username/admin info
-
-    [su create_user=1 username=bobby password=howdy verify=howdy]
-
-    Allows combined creation of new user and switching to that user. 
-    Any options you would pass to userdb tag can be given to su usertag, 
-    to tweak account creation. If user already exists, it's silently switched to.
-
-  MMsu profile is called on admin/customer.html to run the switch.
-
-  When you "log out", you are reverting to the previous user, and you
-  can go no further back. So if you go from superuser->adminuser, then
-  adminuser->regular user, there is no way back to superuser without
-  logging in again.
-
-* Continuing work on meta_display and Vend::Form.
-
-    - Relocated date and option widgets
-    - Prepared for breaking out image widgets to code/Widget
-    - Fixed various bugs in widgets
-    - Code simplification in Primitive.pm
-    - Fix widget.coretag to not call UI::Primitive routine
-    - Redo option_format filtering
-
-* Display server hostname on the information page (genconfig).
-
-* Unused usertags component, set-alias and set-click removed.
-
-
-Payment
--------
-
-* Support for Wells Fargo added
-
-
-Accounting
-----------
-
-* Vend::Accounting module added, along with example module for SQL_Ledger.
-  This is the basis for a start of a defined accounting system interface.
-
-  Some intended functions:
-    NOTE: AS = Accounting Software, i.e. SQL-Ledger, IC = Interchange
-
-    1. Assign customer number
-    2. Change customer information based on input, limit to fields customer
-       should have control over
-    3. Add sales transaction (IC)
-    4. Feed back sales transaction from AS side for account status
-    5. Enter payments (IC --> AS), with credit-cards used to pay invoices
-    6. Reconcile AS account status with IC, i.e. ship status
-    7. Cancel order (IC)
-    8. Ship portion or all of order (IC)
-    9. Mark order complete
-
-    Input on other functions needed is appreciated.
-
-PROPOSED:
-
-* Set of modules selectable by route handle:
-
-    Vend::Account::SQL_Ledger (exists)
-    Vend::Account::QuickBooks (proposed)
-    Vend::Account::Compiere (proposed)
-    Vend::Account::[fill-in-the-blank]
-
-* Use a usertag [account] (a la [charge]) to interface functions.
-
-* Use a profile primitive, "&account=label function" ala "&charge="
-  to do some accounting functions in profiles, notably getting an
-  order number or customer number
-
-* Allow either COMMIT or no-COMMIT operation, with tradeoffs
-
-* Define accounting system parameters via Route, and build
-  in accounting functions into Route so that they can be
-  a predicate for order success.
-
-* Define two transitional state tables for handshaking:
-
-    orderstatus -- status of orders, i.e.
-            pending,transmitted,received,shipped,complete
-
-    accountstatus -- record of payments and orders for account statement
-
-
-Foundation demo
----------------
-
-* use [if variable MV_DEMO_MODE] instead of the more cumbersome
-  [if type=explicit compare="__MV_DEMO_MODE__"].
-
-* add global INTERCHANGE_URL and INTERCHANGE_EMAIL variables to be used
-  for the Interchange developer website & email contact points, instead
-  of hard-coded stuff
-
-* standardize on the short form "Interchange" for the application name.
-
-* update a few URLs, etc.
-
-* Remove history-scan tag from catalog.cfg; it is now in code/UserTag.
-
-* Remove no_html_parse pragma, for which code has already been deleted.
-
-* Moved payment routes to the top of the Route stack. Technically they
-  should not be below the default route, and though it works in the
-  standard foundation setup, it caused lots of failures when people
-  tried to customize their order routing.
-
-* (Oracle) Add missing Database xxx UPPERCASE 1 settings. Thanks to
-  Jonathan Lee <jonalee740304 at yahoo.com> for reporting.
-
-* Get rid of weird tax rate popup notice when updating account
-  info, which is especially strange when you've never had anything
-  in your cart ...
-
-* Change catalog.cfg to highlight etc/after.cfg.
-
-
-UserTags
---------
-
-* [fedex-query] -- Stop dying if there's a problem with FedEx express
-  lookups, which kept even ground rate lookups from being done during
-  the first request when the Business::Fedex object is first created.
-
-  Instead, just log the error but continue on with possible ground lookup.
-
-  (This situation resulted in the oddity of the shipping rate displaying
-  as $0.00 on the checkout page, but still getting added into the total cost
-  and displaying in the shipping rate pulldown select box just fine.)
-  
-* interchange.cfg: Remove now-redundant include of usertag/*.tag.
-
-* [db-columns] -- Add ability to get back an array instead of a joined string
-  to $Tag->list_databases,$Tag->list_keys,$Tag->db_columns,
-
-* [email] -- Add enhancement made by Jurgen Botz to use send_mail program
-  so that Net::SMTP can send the email tag. Thanks Jurgen!
-
-* [history_scan] -- Count option added, which guarantees that the
-  returned link is at least count # of clicks back in the page history.
-
-* [image] -- descriptionsfields and exists_only options added.
-
-
-Build
------
-
-* Removed stale POD documentation from main interchange repository; for
-  some time now, docs source has been in SDF format in docs repository
-  and available in separate docs package.
-
-* Keep test from giving warning about not being able to stat
-  "code" directory.
-
-* Big changes to RPM specfile:
-
-  - Allow non-root RPM builds.
-  - Don't add interch user on build machine.
-  - Don't automatically start Interchange after installing RPM.
-  - Remove unneeded .empty files used in CVS to avoid pruning
-    important but empty directories.
-  - Make admin UI images owned by root.
-  - Don't allow Interchange RPMs to own /usr/share/man/man[18] system
-    directories.
-  - Start using RPM dependencies for Perl CPAN modules. Users who
-    install directly from CPAN will have to use --nodeps.
-  - Start daemon in UNIX mode only by default.
-  - Build foundation-demo RPM with MV_DEMO_MODE set.
-  - On uninstall, remove autogenerated /usr/lib/interchange/etc/varnames
-  - Start using Red Hat standard /sbin/service instead of directly
-    running /etc/rc.d/init.d/interchange.
-  - Add standard 'reload' function as alias for restart.
-  - Quell /sbin/service stop errors.
-  - Let user see if we turn off old IC server before install/upgrade.
-  - Make packages architecture-dependent, to save lots of hassles.
-  - Stop checking for /home/httpd, but use a define for webdir
-    that can easily be changed if needed.
-
-
-------------------------------------------------------------------------------
-
-
-Interchange 4.9.0 "released" only via CVS
+* Disallow [ and < in page names when setting MV_PAGE and MV_PREV_PAGE
+  variables.
 
 
 ------------------------------------------------------------------------------








More information about the interchange-cvs mailing list