Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
1907 lines (1278 sloc) 66.4 KB
What's new in each version of Interchange
(since the version 4.6 branch)
Interchange 4.8.1 released 2001-08-13.
* Fix flypage typo preventing display of options.
* Fix stock-alert thumbnail display (based on image availability).
* Changed from and reply-to email address to __EMAIL_SERVICE__
This brings it line with the name in the variable table.
* Fix to catalog.cfg that closes longstanding history-scan "expired" problem.
* Fix problem with PostgreSQL userdb table definition found by Brian Kosick
* Add counties of Ireland to state.txt, correct two minor UK/EI mistakes.
Thanks to Donal H. <> for submitting this update.
* Add DECREMENT_INVENTORY to the default variable.txt, fixing bug #292.
* Rename some images to get around long path problems when not using
a reasonable tar program, e.g.:
* Remove GNUisms from Foundation configuration scripts.
Admin UI
* Allow setting UI_SECURE with environment variable MV_UISECURE.
* Set UI_HELP_URL to by default, to enable access to
most up-to-date online help in the UI.
* Add MV_DEMO_MODE variable and MVC_DEMOMODE makecat setting.
* Swedish UI locale (sv_SE) added by Tommi Labermo <>.
* Many more i18n improvements from Stefan Hornburg.
* Do something reasonable if transactions or userdb is defined LARGE.
- If LARGE and no search input comes to order page, bounce to
flex_select with proper table selected and page title set to something
- If a query by example is put in, use order.html (transactions)
or customer.html (userdb) to actually display the item.
* Fix longstanding admin/admin/error bug when you hit a non-existent
transactions or userdb table.
* Allow manual setting of order number from UI.
* Make new dbconfig stuff show up if UI_DBCONFIG is set.
* Carry destination forward on failed login attempt at login.html.
* Disable useless meta link in the wizard.
* Define new action-click parameter to put an mv_click in
where it will only be executed on Next --> {next_text}.
* Make Cancel really work on order number setting, using above strategy.
* Fix page footer include on wizard/do_launch.html.
* Add link to documentation after initial preview build....
* Update wizard_profiles to use did_products=required instead
of old products=defined
* In the wizard, the admin user was being created in both the Admin
database, and the Customer database. This left the admin user password
in plaintext in the customer database. Now the admin is created in the
admin db, and the customer in the customer db.
* Modify all pages to use ui_wizard_fields instead of the
table=variable and fake keys.
* Slightly refine default tax location so it is only presented for US.
* Make "Detect Settings" dependent on MV_DEMO_MODE.
* Don't die if ImageMagick not there. Give error saying bad thumbs.
* Fix reference integrity problem
* Make secret not mandatory for AuthorizeNet setup in Wizard.
* Add missing file pages/include/order_delete_archive preventing order
* In display tag, add option for cases where we don't want a translation
(e.g. mv_metadata may be written in another language).
* In image-collate tag:
- Always push sku/image/thumb data onto stack. Before, image files
didn't get copied from the upload directory if an 'image' field was
already properly set up and the 'Generate thumbnails' option was
not chosen.
- Add support for plain tar archives.
- Copy correct thumb filename (rarely caused trouble since we usually
use the same filename for both).
* return-to tag: When mv_data_table was in ui_return_to, would get
transformed to the name of the table variable set to a blank value.
This tromped on any field named the same as the table. Resolves bug #288.
* In table-editor, allow disabling meta on a per-form basis with no-meta=1
* Fix problem where refresh or add of items would set cart back to "main".
Now, once you set the cart to something besides main it should stick.
* Fix bug where -u or -i did not work because the setting
ignored the fact that the other option was defined. Resolves bug #286.
* Always set PriceDivide in operation if any Locale is set.
* Make PriceDivide work properly for shipping.
* Make documented "o PriceDivide = 1" work properly.
* Fix bug where if table was not imported prior to tag_perl tables call, it
would be imported but the $Db{table} object would never be set. Resolves
Bugzilla #289.
* Changes to support linkmode configuration in makecat.
* In, put the real profile name into error log ('Unknown order
check ...').
* In Fix bug where a merge hash would not properly set options
if the base hash was a ref.
* Fix problems with AuthorizeNet module found by Pann McCuaig
- changed zip reference to b_zip
- Removed requirement for secret
- added country and email to variables sent
* Makefile.PL --nocpaninstall option added, needed to fix the longstanding
Debian bug #93669.
* Overhaul permission setting when making catalogs as root. Now makes image
files group writable (never needed before UI image upload), as well as
making files the correct group depending on M/G/U permission modes.
* Add automatic determination of MVC_CATGROUP based on permission
mode and supplied UIDs.
* Only offer setting of default linkmode if one is root.
* Added script for use in cronjobs, reset_order_number. Provides
date-based order numbers for Interchange. From an idea posted to the mail list by Leon Harris <>.
* Added new component 'news' to eg directory. Enables the shop owner to
easily add news items to the foundation catalog. By Ton Verhagen.
* Much reworking of Debian packages. Stefan no longer considers them to be
experimental status.
* Update RPM documentation to cover interchange-foundation-demo and
interchange-doc, and some other missing things.
Interchange 4.8.0 released 2001-07-27.
* Minor bugfixes.
Interchange 4.7.7 released 2001-07-26.
Admin UI
* Change payment wizard to do a better job. Only alters one global parameter,
MV_PAYMENT_MODE, to set up the route. The rest are done via Route.
- Change payment stuff to use Payment routes.
- Change CyberCash config to have them upload their merchant_conf.
- Add some parameters to Skipjack and Signio.
- Rename parameters to be gateway-specific.
- Set up to use new ui_wizard_fields= and wizard support, reducing page
* More admin translations.
* Update admin order entry page to use [item-options]. Delete reference to
old "related" field in products. Remove [item-accessories size] and color.
* Prevent double-escaping of [ characters in item.html.
* page_new.html: Prevent path name in template name from polluting
template file spec. Prevent lack of current content from aborting page
edit. Make "New Page" honor UI_TEMPLATE_DIR.
* ship_data.html: Read shipmode from either CGI or Values, which allows us
to bounce to the ship_data page and retain the mode.
* table-editor:
- Remove improperly-set default for widget type disabling metadata from
the mv_metadata table.
- Wizard mode no longer requires a table, it creates a transitory
database object "mv_null" and uses that.
- In wizard mode, you don't need to have a key field, and you can
specify "ui_wizard_fields" instead of having to supply both
ui_data_fields and ui_display_only.
- Wizard no longer displays a Back button if no "mv_prevpage" is defined.
- View now can be "none" to override table display info in mv_metadata.
- Add start of some docs.
* Add "Require module DBI" to foundation catalog configuration to further
isolate errors with SQL problems.
* Make address and fname field lengths match between userdb and transactions.
* On Stock-alert page, only display a thumbnail if it exists.
* Fixed bug #275, found by Barry Flanagan. Up-sell question was mislabeled
as "cross-sell".
* Change results.html button style to text type for Macs, which can't handle
onClick with type=image. Resolves Bugzilla #268.
* Remove CyberCash directive, but warn so old catalogs don't fail startup.
Never use CyberCash directive or never-implemented mv_payment_mode
for charges.
* Clean up some discount pricing routines.
* Encode HTML entities for accessories <textarea>s. (Keeps <img src="...">
from being processed for the current image directory in UI page or
template editing areas.)
* Move cart copy to before inline_profile is run.
* Put a structure in sesssion with the payment_id for each route, so that
split charges can be tracked.
* Fix problem with payment_mode being run in check_only mode.
* Change so that it handles failed routes properly, even subroutes.
* Get gateway from either Route or MV_PAYMENT_GATEWAY if not defined and
there is no gateway.
* Unique check allows passing a custom message like "Username already
exists" instead of the default somewhat cryptic message.
* Document --sharedir and --shareurl in makecat POD.
* Fix --DEBUG startup option docs, resolving Bugzilla #158.
* Several Debian packaging improvements.
Interchange 4.7.6 released 2001-07-18.
* Instituted VAT and extended taxing, including UI support.
If the SalesTax directive is set to "multi", the type of tax is read from:
[data table=country col=tax key="[value country]"].
NOTE: Most everything is configurable for variable name and
field name via Variable MV_*, but defaults are shown below.
1. If no string is found, tax returns 0.
2. If string "simple:(\w+)" is found, uses fly_tax() as with
recent standard demos.
3. If string "state" is found, does a re-lookup with
select tax from state where country = country and state = state
and value is applied below.
4. If just digits are found, rate applied directly -- i.e. "0.05"
5. If N.NN% is found, applied as percentage.
6. If category = N.NN%, default = N.NN% is found, the tax_category
field in the products database is used to determine tax basis.
If no tax_category, "default" rate is used.
This product data
sku price tax_category
os28003 10.00 tools
os28004 20.00 food
with this country and state data:
code name tax
US U.S.A. state
JP Japan tools=10%, default=15%
code country state name tax
0001 US IL Illinois 6.5%
0002 US OH Ohio default = 5.5%, food = 1%
0003 US AZ Arizona
Will yield tax for one each of os28003 and os28004 of:
Japan $4.00
US/IL $1.95
US/OH $0.75
US/AZ $0.00
* Add PRELOAD_EMPTY_ONLY option for preloading files once at the beginning
of time, which is what we really want for icmenu.txt and ichelp.txt.
* tlink.c: Implement patch from Tamas to make tlink.c compile with no
complaint on all compilers. Resolves bugzilla #22.
* Add INDEX capability for SQL databases -- uses CREATE INDEX template.
* Change INDEX Database parameter to array type, adjusting routines
in Vend::Table::Common to handle for ASCII indexing.
* Add report=1 option to [item-options ...] tag. This returns a comma-
separated list of options, i.e.:
blade: Steel, knob: Ebony
Separator and joiner are ": " and ", " by default, but can be changed
with [item-options report=1 joiner=";" separator="="] or somesuch.
* Add pragma safe_data, with same function as safe_data option available on
some tags.
* Parse [pragma] tags on flypages before interpolating fly-list.
* Change fly-page and fly-list so variables don't get parsed twice, but
still get parsed before flypage substitutions. Add opt variable to call
for control; could be used in future for other purposes.
* Fix [fly-list] tag so that the options work; previously they never
would have.
* Add pragma dynamic_variables_file_only to avoid opening databases
when GDBM -- if needed.
* Order single-widget matrix options by o_sort, as suggested by Ton V.
* Fix new defined check type to actually work -- checks to see if
$Values->{$var} is defined.
* Set default lock type to 'fcntl' for HP/UX, possibly resolving bug #267.
* Make UPDATE and INSERT work properly with DBM.
* Make mv_successpage set in a form work right when a profile check succeeds.
* Added first general-purpose functionality to [image] tag:
Given sku os29000 in the Foundation demo, and assuming the products
database specifies os29000.gif in the image field for os29000,
the tag [image os29000] returns HTML code something like this:
<img src="/foundation/images/os29000.gif" width=120 height=150
alt="3' Step Ladder" title="3' Step Ladder">
If file os29000.gif hadn't existed, or the products database image
field were empty, the tag would check for files called "(sku).jpg",
"(sku).gif", etc. and use the first one it found.
Full documentation is in POD format in the usertag itself.
* Require catalog IDs be of pattern ^[-\w]+$, which makes sure that
expireall and other utilities will find all catalogs. This was
documented but not enforced by makecat. Resolves Bugzilla #209.
Admin UI
* Add da_DK (Danish) locale by Kim Lauritz Christensen <>.
* Add nl_NL (Dutch) locale by Ton Verhagen.
* Allow localization of month names, and other localization tune-ups.
* Allow Variable in imagehelper directory and path
* Fix Knar editor entry so returns to flex_select?mv_data_table=variable
with appropriate page title.
* The affiliates submenu ("create new affiliates") in the UI, was set to
exclude_on:affiliates, instead of depend_on:affiliates.
* Error message from flex_select added.
* Fix double-escaping of left brackets in flex_editor.
* Fix save profile so that it uses $Values (and automatically picks
up new additions).
* Fix entry order problem found by Bob Jordan.
* Hide more customer delete buttons if user doesn't have permission, and
prevent surreptitious passing in of delete command.
* Fixed problem where we leave secure mode at various places.
* Changed the font sizes on the Admin UI admin menu so that the different
section names matched in size to their description.
* UI_STD_HEAD and UI_STD_INIT cleaned up.
* Display country in order view if not the same as SHIP_DEFAULT_COUNTRY.
Resolves Bugzilla #212.
* ByAffiliate.html report: Add the bd (mv_base_directory) attribute to the
search for non-absolute TrackFile values.
* Add warning if Spreadsheet::*Excel modules not installed, as that will
cause a fatal error attempting to import XLS spreadsheets. Resoves
Bugzilla #239 -- thanks to Tal Hart for reporting.
* Several item options patches by Mark Johnson:
- Fix wholesale price overwriting regular price in variant edit.
- Stop including "none, " in description of an empty option.
- pages/include/item_option_simple:
* Added separate 'opt_label_*' form var
* Added js to set label to name (and reset to previous value)
* Replaced '[sql-*]' with q{[sql-*]} for strings
* Added sql/entities filter where appropriate
* Change setting of sku in table-editor to override as opposed to "default",
preventing previous setting of "sku" to cause corruption of display.
* Wizard: Make "images" piece run after everything else, so that products
uploaded will be in database. Other miscellaneous changes to the wizard.
* New usertags: [cp], [image-collate].
* Prevent Interchange tags in database fields from being parsed when
displaying with [table-editor] tag.
* Fix Foundation indexing for PostgreSQL.
* Minor database table changes to support VAT and new multi taxing.
- Add tax_category field to products.txt (including sampledata/tools)
- Add tax field to country database
- Set default type in pgsql/country.pgsql to varchar(255)
- Set default type in oracle/country.ora to varchar2(128)
* Use new [item-options report=1] in mailed reports and log_transaction.
* Use [scratch mv_autocreate] to supply mv_username/mv_password for order
status link, similar to what we do for anonymous downloadable products.
Resolves Bugzilla #226.
* Added sale_price and image_large to the batch product upload template.xls.
* Changed the mv_nextpage from customerservice.html to @@MV_PAGE@@. If you
selected a new country or shipping method for yourself, it'd kick you back
to the customer service page and that was kind of annoying.
* Changed the "Buy it Now!" text button on the flypage to a graphic button.
* Fixed the Checkout page to use [button] tags for the bottom Place Order
and Recalculate image buttons.
* Added some default admin Groups to the access database -- Content Manager,
Merchandiser, Sales/Orders.
* Fix modular_create view so that o_master is tied to the SKU of what we are
* Adjust default widgets in metadata for modular_create view.
* Fix typo in SAMPLEHTML setting.
* Rename fullwidth template to noleft to match region.
* Make label for retrieving address be the nickname, not the city, as
suggested by
* Fix promo component to use [table-organize] for settable number of columns.
Resolves Bugzilla #240.
* Add tax_category field to products database for tools type.
* Remove banner database that is not used and is just cluttering things up.
* Fix installsample so that it tolerates no images/ directory in sample
data set.
* Do downloadable product authorization during log_transaction so that
auto-created users are handled.
* Change deliver action so that auto-created users can log in and download.
* Remove EncryptProgram directive, no longer needed (found globally
and by default).
* Add EncryptKey directive -- PGP now works out of the box with the wizard.
* Change catalog.cfg to use PGP_KEY instead of GPG_KEY Variable for pgp_key
in routes.
* Add PGP_KEY to Preferences, and put it and ENCRYPTOR in "Encryption" area.
* Debian packages can produce a demo.
* Minor Foundation hostname problem in RPM install fixed.
Interchange 4.7.5 released 2001-07-03.
* Allow GlobalSub session autoloads.
* Introduce use of AutoVariable for global.
* Overhaul encryption just a bit. We now recognize natively three
encryption programs, gpg, pgp, and pgpe. Each has argument strings
automatically generated, and the catalog.cfg directive EncryptKey
is used by default for encryption. If you pass a directive value
which is only (/usr/local/bin/)?gpg, it uses these default argument
values. The defaults:
gpg gpg --batch --always-trust -e -a -t -r '%s'
pgp pgp -fat - '%s'
pgpe pgpe -fat -r '%s'
These have all been tested with the exception of pgpe, but that
should be good.
* Route encrypt_program value may not be overridden by expansion from
variables or by extended. This is for security -- otherwise a change
in route or variable could allow an arbitrary program to be run.
* Add refinement to bar_link and the area.txt databases where you
can specify the sort field (or other additional parameters) by entering
in "search" column. Will make top-category stuff ordered in category
order instead of random based on prod_group.
* Remove explicit setting of order routes in ValuesDefault, use
the "cascade" setting of the master route instead.
* Refuse access for empty passwords or "anything" passwords (empty in DB).
* Make username and password minimum lengths customizable (defaults 2, 4).
* When creating UserDB object, use Vend::username instead of session
username for better security.
* Allow AdminUser superuser access to all catalogs; no access DB required.
* Log attempts by anyone other than superusers to change another user's
password (e.g. by munging form variable mv_username).
* Make reconfig tags reference RunDir vice ConfDir, resolving bug #207.
* Fix configuration parsing for simple 'Locale xx_XX' directives (for
pulling locale info from system).
* Enable use of Net::SMTP for systems without sendmail. All are
likely to have it, as Bundle::libnet is part of Bundle::Interchange.
* Change the Vend::Config::parse_executable check to allow use of a Perl
module as an option, doing a require for it.
* Change sql_statement error handling to always die upon parse
error. This will allow the calling routines to trap errors better.
* Order single-widget matrix options by o_sort, as suggested by Ton Verhagen.
* Add matrix option widget and handling so that you can select the
variants based on individual widgets instead of one. Uses the
methodology of taking multiple settins of mv_skuN, where N is the cart
line. Each is joined with a - character, and
$::Variable->{MV_VARIANT_FILLER}|| 0 is inserted if it is blank.
* Method to tell if the individual widget method is used is to have both
o_matrix and o_modular set. This is less than ideal, and a better method
is needed. Will not document this until the method is set.
* Change handling of option updates so that if an illegal variant
is selected from the database the code and mv_ib refuse to change.
* Fix problem with quoting wrong entity setup in textarea.
* Change add_items() quantity handling to strip letters and fractionals
(unless FractionalItems).
* Change default order routes so that it comes from $Values instead of
$CGI. This allows the FormIgnore to block form-entered order routes.
* Change route code so that an empty route will never be emailed.
* change_url function needed with resolve_links() had bug in adding
arguments. Discovered by Taylor Mitchell and Erik Wichern.
* Add random saying component and usertag [fortune], based on
* Make [reconfigure] tag use RunDir instead of ConfDir.
* Add run=1 option to file-info tag.
* Return nothing from tag [table-organize] if there are not <td> elements.
* Add [if pragma ...] conditional.
* Add [if global VARIABLE] for testing on globals.
* Added new core [msg] tag for doing parse-time locale substitutions.
* Change the [mail] routine in Vend::Interpolate to use
Vend::Util::send_mail so that it can use Net::SMTP.
* Fix [options] so that SKU on multiple-widget will always be
set even if not previously.
* Fix [record ...] tag to work with all DB types.
* Fix [catch] tag so that you can put ITL inside the error evals;
all errors are now delimited by [/pattern/] [/(?pattern/)?]
* Add new [warnings] tag to eliminate the problem with overwriting
and fragmentation of [data session failure], [data session error], [data
session ui_failure], [data session ui_error], etc. Will add separate
namespaces in next iteration so that we can use different ones for UI.
* Add ranges option to [loop list="A..Z" ranges=1] to allow alpha-numeric
lists. Limit number of produced options to
* Add auto=1 option to [timed-build ...]. Makes an MD5 digest of the
contained text, then auto-builds using that go generate a filename.
Demonstrated in latest templates/components/category_vertical.
Admin UI
* Multi-locale UI (selectable at login time) improved.
* New admin context-sensitive help topics added.
* Fixed images/products combined upload problem (Bugzilla #251).
* Add re-routing map capability to wizard maps so that the
same pages can be used when only the mv_nextpage/mv_prevpage
stuff changes. We set up the map in pages/include/wizard_profiles.
* Go to password change page after new user is created, so admins won't
forget to set a password for new users.
* Build categories even if sampleproducts not selected, give
chance to turn off on preview page.
* Change so that the save will set the pref_group on the
Variable, which allows it to be later edited logically under
* Fix uploadhelper mv_click so that preceding path will be stripped.
* Refine guess_info to work with either standard wizard or CommerceLauncher.
* Change shipping wizard a bit to allow the user to select their default
country and shipmode in all cases.
* Add ability to pass form params in via the checklist menus.
* Sort item options when producing matrix options, so new matrix
separate mode will work.
* Fix target page for login errors.
* Rework password changing in admin UI to always use UserDB functions
instead of directly writing to database.
Foundation catalog
* Break out different order methods in different checkout profiles.
Eliminate the fax_order variable. Retain old checkout_profile for
* Move default category_vertical component to second instead of
third slot to prevent duplicate category lists on some of the
default foundation pages.
* Finished the advanced search (searching by category now works, as well
as searching by item field).
* Move default category_vertical component to second instead of
third slot to prevent duplicate category lists on some of the default
foundation pages.
* Add timed-build capability to category_vertical.
* Fixed merch components so that if an image doesn't exist, it will not
display a broken one.
* Change item_option.html to use [record ...] tag instead of separate
[data ...]. Add Matrix options with separate IDs, still need JS logic
to insert -0- on empty option.
* Fix item_options in matrix form, removing silly overload of o_modular
bit. o_matrix now can have two values, 1 (one widget) and 2 (separate
widgets). The item-option tag can override the separate/single display type
with a display-type=separate or display-type=one (default) option.
* Add o_enable to variant creation form, which enables the option for
* Default table/area/category to some reasonable defaults.
* Trailing blanks were causing problems in admin/order.html when displaying
archived/pending orders. Made all definitions consistent at char(1).
* Fix "nullsellect" typo in mv_metadata.
* Added file UPGRADING, rudimentary help on updating Interchange, to
complement icupgrade(8) docs.
* Support running Interchange under Cygwin for testing purposes.
* Fixed the small search box components - substring matching was not working,
only whole word matching.
* Add companion page to (get_orders.html), which allows
you to download orders and move the file to a new location so that
future orders will start a new file.
* Add widget key selector for GnuPG keys.
* Added flat-file table editor utility (eg/te).
* Removing eg/ tool, since Gnumeric dropped support for
the flat-file table format.
* Silly workaround to make Perl 5.6.1 compatible with File::Copy under Safe.
* Fix host and port changes in makecat.PL when selecting INET mode.
* Place STDIN in binmode so will work with Cygwin/Apache.
* Added mv_session_id hidden form value in a few places it was missing to make
cookie-free browsing work everywhere.
* Fix the intro script so it will build even if not run from Makefile.PL,
given an Interchange Root. This will allow a "update_cvs_limited" script
that updates bin / lib / selected_other_files.
* Minor HTML and CSS fixes.
* Removed unused images.
Interchange 4.7.4 released 2001-06-16.
* Fix bug #220, Interchange server crashing in Caused by
inappropriate "next" upon select timeout after MaxServer > Num_servers
* Change default of [catch] to NOT interpolate. Impossible to conditionally
execute code if that is the case.
* Fix [catch] to work with only the proper body, not with both THEN and ELSE.
* Add maxsize parameter to file write in tag_value_extended, fulfilling
enhancement request #99 in Bugzilla.
* Add a filter for decode_entities, and make encode_entities an alias to
* Add ability to restrict tag execution in a region. If a restricted tag is
encountered, it is simply output. Based on an idea from Jon Jensen.
[restrict policy=deny*|accept enable="tag1 tag2" disable="tag1 tag2"]
restricted area
policy "allow" or "deny". Default is deny.
enable space or comma-separated list of tag names, including
UserTag names.
disable space or comma-separated list of tag names, including
UserTag names.
For instance, this:
[restrict enable=page]
[area something]
[page aboutus]A link</a>
will output something like:
[area something]
<a href="">A link</a>
Defaults are important:
It would defeat the purpose to set interpolate or reparse, but it can be
* Allow parameters for comment tag -- not parsed, but at least tolerated.
* Fix some bugs in option display to allow overriding for
simple options too, and to select the widget type for matrix options.
* Add get=1 to setlocale tag. That is sort of counter-intuitive, so I added
a [getlocale] alias for [setlocale get=1].
* Fix makecat instructions on how to set ShareURL if using ~yourname/
style paths, and allow ShareURL to be empty if passed from command line.
Admin UI
* Added German UI images and other text translations.
* Automatically symlink to default en_US UI images for missing images in
other locales.
* Fix problem with IMAGE_DIR variable being inadvertantly changed for store-
front by UI. (Thanks to John Beima for finding this.)
* Fix area and cat reordering problem in layout.html of admin with a patch
from Mark Johnson. Fixes bug #180.
* Finished help pages for the Wizard.
* Make UI_SECURE behave so that global policy can be enforced --
i.e. if @@UI_SECURE@@ = 1 then the setting of __UI_SECURE__ does not matter.
@@UI_SECURE@@ isn't set in the foundation demo, so this doesn't affect
current defaults.
* Move @@UI_STD_HEAD@@ before item bounce checks, so that when the bounce
occurs it will go to the right URL. Because we now use [table-editor],
the positioning is no longer necessary. Should fix Bugzilla bug #217,
though that was marked invalid because we don't support different
SSL/non-SSL domains.
* Fixed missing mv_session_id variables in admin UI form posts, causing
problems when cookies were not used.
* Add database-table based backup capability. Depends on a table "backup"
being available. Looked at CVS, but the repository creation/management
issues are too daunting at this point. Since it is likely that an entire
catalog would want to be in CVS, this partial solution seems wiser.
* More improvements to page editor:
- Policy for editing individual components/page/template can be set in
template as well as globally. Soon we will have per-page and per-user
- A PREAMBLE and POSTAMBLE area is defined, so that code can be run before/
after template regions without being restricted to what you can do with
the page settings.
- preamble and postamble are editable on a per-template basis.
- Preview works on latest version of Mozilla, Netscape 4, and MSIE 5.
* Usertag changes:
- Update read_ui_page to support latest page edit.
- Add diff tag in support of new backup capability.
* New, improved admin UI graphics make you healthy, wealthy, and wise.
* Minor [table-editor] fix affecting special Wizard profiles.
* Add supplant=1 to master route. Left in "main" so that it would be
compatible with old checkout forms, shouldn't cause any harm.
* Turn off transactions by default in catalog.cfg -- not needed or wanted for
MySQL and DBM, two most common dbs. Since we have had virtually zero
complaint about transaction atomicity in general, it makes sense to disable
this. If someone wants transactions, they merely need to enable the
* Add currency_locale field to transactions, resolving Bugzilla enhancement
request #128. This is valuable because if there is an exchange rate
situation, it needs to be known at time of purchase.
* Include options in the emailed receipt and report.
* Fix product description display in receipt.html.
* Add example for configurable spec sheets for products. Can be extended to
track lists for albums, etc.
* Fix template settings for some lesser-used pages.
* Fixed a small typo in the 'cross' component. width_percent was set to 100,
instead of 100%, causing an occasional cross item to look very skinny.
* RPM specfile reworked to build 3 RPMs: core, foundation skeleton, foundation
live demo. Foundation demo made friendly for relocation by RPM build.
* Various cleanups: removal of unneeded variables, files, etc.
Interchange 4.7.3 released 2001-06-12.
* Add Skipjack and iTransact to list of gateways supported.
* Item options improvements and bugfixes.
- Fix a bug that ignores name= in the display tag when using option_format,
date, imagehelper, or uploadhelper types.
- Fix a bug that prevented changing your selection once you had selected one
(code was only updated if mv_sku was not already set).
* Increase limit of possible keys returned for lookup in DBM.
* Full pedantic HTML 4 compliance. (Ability to change URL data separator.)
* Allow attaching a version number to usertags, for later use in Require and
Suggest directives.
* Fixed bug that caused Interchange to silently fail to start if -q(uiet)
option was given on command line and a Suggest or Require directive was
used in one of the config files.
* Improvements to [catch] and [try] tag pair.
- Added 'clean' option to [try] tag, which suppresses output in case of
error. The default tag output behavior is unchanged.
- Modified original behavior of
[error message]
catch block
[/error message]
The original code requires an exact match, including the newline
and line numbers from the Interchange core (i.e., it includes the
" at (eval line nnn)...\n"
message). The new code strips the 'at (eval ...' to leave an
approximation of the original $@. Added 'exact' option to invoke
original behavior.
- Fixed [try] tag to watch $Session->{try}{$label} instead of $@ after
the eval because $@ as originally written does not trap most errors
(which occurred in earlier eval in the Interchange core).
- [catch] interpolates by default.
* Fix bug where filter was not set to passed {name} parameter, always set to
$column (which may not exist in non-DB widget).
* New [image] usertag, for getting the image directory (regular or secure),
and eventually doing other handy things like getting pixel sizes, checking
for image existence, etc.
* Updated button usertag to provide alternatives to the image input when
using a JavaScript-challenged browser.
* Make [var ...] usertag honor dynamic variables.
* Fix a bug in the options tag that passed the wrong argument to
tag_accessories (weight instead of o_widget, oops). Also allow
[item-options] to take a type argument, which is passed through so that
you can override the type should you need to.
* Allow '*' suffix default mechanism to work for text-display accessories
like it does for select widgets. Fixes weird display bug in
admin/customer_view.html that caused an input textbox with '0' to appear
instead of the text 'Credit Card'.
* With help of Dave Jenkins, isolated the problem that caused problems
entering non-ISO-8859 data in table editor. Now should work properly for
all locales.
* Make control-set tags tolerate - as well as _ in component attributes.
* Four new options to the [perl] tag that make it a bit easier to work
with when debugging:
Add line numbers to the source code displayed in the error.log, amazingly
useful if some of the perl is being generated elsewhere and interpolated.
Set to a string, will replace the (eval ###) in the error message with
this label, handy to quickly track down bugs when you have more than
one perl block in the page, especially if you are using short_errors.
If set to a true value, syntax errors and the like in [perl] tags will
log just the error, not the whole source code of the block in question,
handy when you have the code open in an editor anyway and don't want
the error itself to get scrolled away when running 'tail -f error.log'.
Seemed to be the logical extension of short_errors, if set to a number,
and the error produced includes a line number, then only that number
of lines before and after the broken line itself will be displayed,
instead of the whole block.
* Issue error message if filter is missing.
* Add zerofix option to [time]. Strips leading zeroes from numbers just
like in [convert-date] usertag.
* Make embedded Perl values equal per-route values.
* Place $Tags_added in Vend:: package so it will be reset upon entry to
a page/catalog. This should make it thread-safe. Symptom was catalog
UserTag not being added at times.
* Fix a problem detecting if SQL::Statement is available.
* Fix bug introduced with new sf=:field1:field2 search syntax. Old method
of sf=:3:4 was broken by new fieldname hash.
* Fix bad username error message found by Ed LaFrance.
* Get rid of language-dependent error message scan.
* Vend::Util::set_lock_type() allows setting global lock type at runtime.
* Fix a bug that suppressed error messages that Vend::Scan::sql_statement
returned using 'die'.
* Better error trapping on DB calls.
Admin back-end
* Page editor and template system rewritten.
- Retains the global settings for the page, things like page_title,
members_only, etc.
- Depends on ui_template_version being set in the template as to
whether new editor is used, if not set defaults to the old type.
- Add types to components, so we can determine which are to be presented for
- Page preview improvements.
- Allow control of which elements of a page get edited.
By setting the variable UI_CONTENT_EDIT to contain a string with tags, you
can disable/enable certain aspects of page edit:
template Allows changing the page template
page Allows changing page-wide settings (i.e. scratch)
components Allows changing page components
content Allows editing page content
* Components overhauled.
- Add best and cross components that work both horizontally and vertically.
- Removed old 4.6 components.
* Lots of internationalization work.
* Wizard improvements, including guessing of info.
* Admin images overhaul:
- Global admin images moved from /akopia/ui to /interchange/$LOCALE.
- Can now have images directory for each locale (for images with text).
- All images in one directory, no more admin/ and navigation/.
- Admin image paths rewritten by; no more @_UI_IMG_@ needed.
* Disallow admin UI access by default when there is no 'access' database.
Thanks to Christopher VanOosterhout for finding this weakness.
* Fix so that $Tag->area() is used to call all links.
* Fix problem with GDBM database tables not being able to import
a single table (due to no write flag).
* Enhance list-pages tag so that an array can be returned.
* Patch table-editor option parsing, fixing bug #190.
Foundation demo
* New Advanced Search page.
* Lots of artwork, HTML, and other little-detail changes.
* Do not set content-type and charset in doc META -- this may need to be
different based on locale.
* Added a image_large to the products database for large image support.
* Changed most PostgreSQL fields from CHAR to VARCHAR to prevent space
padding problems.
* Left menu bar items take text from banner_text if available to allow name to
stay behind the scenes.
* Fixed errors in receipt found by Angelica Olin, <>.
* Add cachedir setting (e.g. /var/cache/interchange) to allow catalog session
and tmp directories to be in separate location.
* Add rundir setting (e.g. /var/run/interchange) to keep temporary files like
status.* separate from things in VENDROOT/etc. This takes advantage of the
OS deleting everything in /var/run/interchange at OS boot time without
losing files like *.before, etc.
* Have system logrotate daemon rotate catalog error.log files.
* Various other RPM and Debian package improvements.
* Remove a number of unused images.
* Remove Red Hat's Reston office addresses so we stop getting returned
merchandise for companies who have work done by clueless developers who
never change the contact info on their catalogs. HINT, HINT.
Interchange 4.7.2 released 2001-05-10.
* There is a pre-forked server mode enabled in interchange.cfg with:
PreFork Yes
StartServers 5
The number 5 can be set as high as 50 if you have enough
memory. A number less than 2 makes little sense.
THIS IS AN ALPHA FEATURE, and is not fully tested.
But it gives big, big, performance gains.
* Server should now run safely in the Foreground -- when
in foreground writes to $Vend::Cfg ($Config) are gated via
Tie::ShadowHash, which is now required. (A copy comes with IC.)
* Server should now be nearly thread-safe when run in 5.6 NEW_THREADS
mode, can probably be ported to Windows if anyone cares.
* Transactions now fully supported. Can open a transaction-capable
database in transactions mode [flag type=transactions table="table"]
and it will commit all changes not done in transaction mode and reopen
under transaction constraints. [flag type=commit table=table] commits,
[flag type=rollback table=table] rolls back.
* Can reference foreign keys with:
[data table=foo column=bar key=baz foreign=buz]
That does the roughly equivalent to:
SELECT bar from foo where baz = 'buz' LIMIT 1
* Improve autonumbering support to automatically use sequences or
autonumber field types. So now you can do:
Database addr addr.txt dbi:Pg
Database addr AUTO_SEQUENCE 1
Database addr COLUMN_DEF "code=int SERIAL PRIMARY KEY"
Database addr COLUMN_DEF "val=varchar(128)"
and it will pick up the sequence at an insert. It makes calls to
the known_capability, and does the last_value or last_sequence_id()
call as appropriate to return the key value.
Tested with Postgres and Mysql. Should work for Oracle when the
template is set -- we should provide some examples for selecting
from the "dual" table.
* Add $db->set_slice($key, \@fields, \@values) function that will
update a slice of a row. Works for all DB types.
* All base-table database updates done by UserDB and UI are now done in
one query via set_slice. Extra-table values still use set_field.
* All databases should now handle cached DBI handles properly, even
when they can't be shared among processes. Will work toward a single
handle for all processes on DBs that support that.
* Change all chained cost levels limit check to use new Limit directive
* Significant changes to in the area of order routing, while
still maintaining backward compatibility. (Able to submit and monitor
order on old construct, simple, and basic with no changes.)
* Added "cascade" route capability, that allows you to specify
one master order route that calls the rest of the routes.
Perhaps an interface in payment mode to add some logging....??
* Routes can be dynamically read from database if master order
route is set dynamic_routes=1.
* Routes always interpret __VARIABLE__ from database.
* Routes can interpret ITL from the database if master order
route is set expandable=1.
* Keep value of current route name in Values->{mv_current_route}.
* If no order route is given from checkout form (always a
security pitfall anyway) then the default route is read. If you
want to run more routes from that master route, place in the
cascade parameter. Can still be set in mv_order_route, but
the demo now has "FormIgnore mv_order_route".
* Extended field allows you to stringify a hash and set many, many
parameters. We were running out of column space, and payment routes
add many settings. This concept will soon be used in mv_metadata.
* Add new tag "assign". It allows you to assign to four things,
subtotal preempts the cart subtotal derived from prices. NOT ROUNDED.
shipping if any non-zero mv_shipmode is present at all, sets the total
value of shipping. Rounded to fractional digits.
handling if any non-zero mv_handling is present at all, sets the
total value of shipping. Rounded to fractional digits.
salestax preempts the salestax normally derived from the salestax.
You cannot assign to total_cost -- it will always be the sum of the
four above.
If there is no assignment to one of the four, it will use the
normal method. To make salestax zero, you must use [assign salestax=0].
Called with [assign salestax=N.NN], etc. If the value has a length
of zero, will delete the assigned value from the assignment hash
and the normal method of calculation will kick back in.
If you call [assign clear=1] it will clear all, and the normal method
of calculation will kick back in.
If a non-real-number value is passed, it logs an error and clears
the assignment.
It is persistent in the user's session and effects only that user,
and should be used only when you know exactly what you are doing. Ha.
* Add support for new CVV2 credit card security field in
mv_credit_card_cvv2, treated with same care as mv_credit_card_number.
* Add recognition for a few more credit card types based on number.
* Solve the great [if ] [othertag][else][/else][/othertag] [else]
[/else] [/if] problem. The behavior should be much improved in [if ...]
tags. Will not now snarf the [else] from another tag that uses that.
* Make the default a secure submit if we are on a secure page and
have the user set secure=0 to disable.
* Eureka!!! All usertags can be used in embedded perl without
"tables" or other Safe stuff. Boy was I stupid. As long as they
don't do a "require" at runtime, you should be OK.
* Fix the long-untouched tag_column routine to handle preformatted
text with align=none.
* Add "yesno" display filter so that you can [filter yesno]1[/filter]
and get "Yes" back -- also translates for Locale.
* Extensively rework Payment routines. Decided to keep something like
current framework, but you now can do:
$Tag->charge($route, $opt); # If no runtime "require"
[charge route=THE_ROUTE gateway=ccvs id=milton secret=pass]
* Add module to contain the base routines, and be a
target for the routines added via the different Payment
* A pretty convenient mechanism to bring in modules:
Require module Vend::Payment::Authorize
Prevents errors and memory bloat(er) when Net::SSLeay or other
needed companion modules are present/not present, and should
give reasonable errors when the module is not working.
* Initial support for CyberCash, AuthorizeNet, Skipjack, iTransact,
CCVS, and Signio/Verisign. All documented with in-module POD.
* There will be a Vend::Payment::Skeleton to show adding your own
payment module.
* All modules needing Net::SSLeay or Crypt::SSLeay updated to
support either with common calls.
* GlobalSub method still supported, current GlobalSub things
should work fine (tested with and "custom
authorizenet" mode).
* Beginnings of PayPal support will be there shortly, but thinking
of how to generalize that send-offsite-then-return-post paradigm.
* Should be completely backward compatible.
* All payment stuff taken out of Vend::Order except _charge
profile interface routine, a couple of stubs left for backward
* Parameters can be completely Route resident, no MV_PAYMENT_*
variables needed.
* Changed mv_credit_card_info to delete all but mv_credit_card_reference
digits when not encrypted. This is overdue....
* All options are pulled from the option call first, the Route matching
the name second, then finally the global MV_PAYMENT_* variables.
* All routes should be transparent if the mode exists. For instance,
you can define a route called "purchase_order" which will handle
POs, "internet_check" which handles checks, etc.
* Add CCVS support via globalsub. Will do auth, sale at this point. Will
soon add AVS support. Has extended information support.
* Message directive now accepts -n (no trailing newline or whitespace) and
-i (screen info only, not logged) options before message.
* Add set="Message" option to error tag, allowing you to set an error via tag.
[if value lname =~ /^mccoy$/i]
<!-- [error show_error
set="No stinking McCoys allowed at!"
name=lname ] -->
Implies keep=1.
* Allow set-cookie tag to set domain and path.
* Added UI_SECURE variable which forces the use of the SecureURL instead
of VendURL if set, each UI page should include either UI_STD_INIT
or UI_STD_HEAD to ensure this works
(supplied by Stefan Hornburg <>).
* Added catalog configuration wizard, to move non-essential config from
makecat and simplify it a bit.
* Added more links based on the leading letters of the results
so the selection of the more link is much easier for the customer,
especially with huge number of results. Short example:
<input type=hidden name=mv_search_field value=description>
<input type=hidden name=mv_sort_field value=description>
<input type=hidden name=mv_more_alpha value=yes>
<input type=hidden name=mv_return_fields value=code,description>
(supplied by Stefan Hornburg <>).
Bug fixes
* Fix bug in IMPORT_ONCE reported by
* Fix no-zero-display bug in [cgi ...] tag, found by Mark Johnson.
* Fix a couple of bugs with AlwaysSecure not working in an order link.
* Fix rounding problem with Shipping.
* Fix failure to test record_exists in tag_data($table,undef,$key,{hash=>1})
* Quite a few unreachable code sections removed, largely thanks to Bill
* Fix textarea build to call routine, remove unused call to
build_accessory_textarea, add proper call in /^text/ branch.
* Make sure tax is rounded to the proper number of frac_digits in
variant salestax() routines.
* Delete $CGI::mv_order_item when ordering, don't want to order
twice (could happen if update values called)
* Remove for good unsightly extra attributes qw/true false undef/ in every
tag option hash.
* Fix some item options bugs.
* Many other small things.
Interchange 4.7.1 released 2001-03-28.
* Added ability to cascade mv_click statements, e.g.:
[set delete]
[page href="@@MV_PAGE@@"
"]Delete this</A>
* Added "clone item" to item pages. Allows you to clone an existing item
for purposes of adding new ones.
* Re-instituted multiple-table deletes for deleting an item. It will look
in __UI_ITEM_TABLES__ and delete records.
* Added clone_set and clone_row primitives in Data modules. Allows you to
copy a record except for certain fields.
* Added [item-options] tag which automatically finds and presents options
based on the options table. The table name is settable based on Variable
MV_OPTION_TABLE. Fields can be remapped with MV_OPTION_TABLE_MAP.
* Now can use "variant" items which are based on a base SKU but set in an
options table (same as the one for [item-options]). Changed behavior of
[item-field ...] to look in the code first, then the base SKU, for the
relevant product databases. [item-data ...] always works off of the
relevant base SKU.
* Price looks at variant code first, then the base SKU if that is zero;
or it can be made to do so with CommonAdjust.
* Fully modular options with cascade.
A UI module allows editing and definition of the modular options,
including "phantom" options that act to group additional items.
When an item is defined as modular upon order, it can have accompanying
it a series of other items in the same order group. The price of the
options is not shown, but is added to the price of the master item.
* Added [item-sku] tag to get base SKU for a variant.
* Added fall-through for sku to [item-field].
* Rerouted [item-data ...] to always point to sku, not the code for the
variant. (This will mean inventory has to be checked via a [data ...]
tag when variants are in use.)
* Added new [control] and [control-set] tags to set series of Scratch-
like option areas. Used for components in UI content editing.
* Added [mail ...]MESSAGE[/mail] tag to the core. Works with update_data
routine to send emailed notifications of database changes. Otherwise
works like combination of [email ...] and [email-raw] ... usertags.
* added [PREFIX-options] to get and parse options of all types.
* New [profile ...] tag allows you to set directives normally set in
catalog.cfg with a tag in the session Autoload. This is really the
same as the current Autoload, except it is automatic on login/logout,
faster, and leaves Autoload for user user.
[profile name=profile_name tag=tag set=1 run=1 restore=1]
name name of profile. Needed unless restore=1.
tag normally not set, defaults to "default". Matches what is
the UserDB profile.
run run profile code only, don't save.
set set profile for future only, don't run.
restore remove the current profile
[profile name] will run and set by default.
* UserDB now can set a price_level via the [profile ...]
tag routine. Set this in catalog.cfg for dealer pricing:
Profile dealer CommonAdjust <<EOR
Profile dealer NonTaxableField nontaxable
Quotes are needed (as in all locale-style directives) unless you want
to do a full hash set like:
Profile dealer <<EOR
CommonAdjust => q(
NonTaxableField => 'nontaxable',
which is also supported.
* Added SDBM database option for those poor Solaris folks.
* Added MINIVEND_ALLDBM environment check to prevent using unneeded
modules (takes more memory).
* Added [table-editor ...] tag which easily produces editable tables.
* Can edit the hash address books in userdb.
* Safe to place in user page with auto_secure=1. Generates a
[scratch mv_data_enable] matching the table:col1,col2,col3:key
you passed it.
* Reads from CGI array or from parameters.
* Automatically reads table info from mv_metadata if available.
* The following can be overridden compared to mv_metadata:
extra (JavaScript)
* Can auto-check with order_profile definitions.
* Can append or prepend your additional form information.
* Can generate an email copy of the data submission for review. (TBA)
Ready for a form widget? 8-)
* Added new mv_form_profile variable that sets profiles with any action.
Designed for easy checking of variables in submits.
* Speeded import of DBI databases by placing numeric pointers in an
array at initial config time.
* Added ability to set defaults for empty fields at import and record
creation time, regardless of the underlying DB, with:
Database userdb DEFAULT password=please_change
Operates exactly like COLUMN_DEF.
* Added database attributes
and logic to allow fallback to a second database server.
If you have ALTERNATE_DSN (and possibly ALTERNATE_USER and
ALTERNATE_PASS) defined for a table, and Interchange is unable to get
a database connection to the primary DSN, it will attempt to connect to
and use the ALTERNATE_DSN.
These are array values, so you can define any number of fallbacks. The
same approach works for LDAP databases except ALTERNATE_LDAP_HOST and
other appropriate parameters are set.
* Added interchange.cfg directive HotDBI, which takes a catalog name which
should use persistant database connections. When a connection is
persistent, it will be maintained and cached without reconnecting every
page request.
* Added Inet_mode and Unix_mode directives to interchange.cfg, which allows
you to guarantee the mode in which the server comes up.
* New filters:
mime_type: returns mime type based on file extension
compress_space: strip trailing/leading and s/\s+/ /g
checkbox: set value to "" if not defined in CGI space
* Added <optgroup> support to tag_accessories select build. Allows grouping
of options. When an option value is ^\s*~~something~~\*$, it is read as
an <OPTGROUP LABEL="something">, and options can be grouped per HTML 4.0.
* Added "tz" option to time/tag time, allowing display of time for a
particular time zone. Specified in the usual EST5EDT form.
* FileDatabase catalog.cfg directive now specifies a table:field which can
be used to store pages and other files. Will allow a catalog without any
system files stored on disk.
* Require directive now can require Perl modules, as in:
Require module SQL::Statement
* New Suggest directive is a non-fatal form of Require, which generates a
warning message but allows catalog to run.
Suggest module Business::UPS WWW-based UPS routines will not work!
* Bugfix: chaining character in CommonAdjust wrongly appended to atom
in some situations.
* ProductFiles was not resetting Vend::OnlyProducts when a locale change
was done. Caused [PREFIX-field ...] to fail.
* Variable MV_DEFAULT_SEARCH_TABLE now works for st=db searches like
Variable MV_DEFAULT_SEARCH_FILE works for text searches.
* Added [tree] tag to walk tree-based lists. It produces hash-based rows
which are iterated ala item-list (the hash-based list iterator). Sets
some information in the row. See the tag reference for behavior.
* Made tag_calc routine indirectly callable from within embedded Perl code
by doing straight eval when already in Safe compartment.
* Made [if-PREFIX-(data|field|modifier|param|pos) ...] nestable by checking
for nesting conditions in the run list and then generating integer
additions to the tags.
* There is a "links" type for the [accessories ...] tag. Builds a series
of clickable links based on an option list. Accepts the "form" and "href"
parameters to allow setting of the initial form, otherwise just generates
a link to the current page with the attribute passed as a CGI argument.
* Added "password" widget to [accessories ...].
* Added new [PREFIX-tag ...] which allows extending the tags that are
interpreted as a part of a PREFIX-list. Example in tag_address, called
with [PREFIX-tag-address]. Full attribute support and nesting.
* Added attr_list tag which allows tagging of attribute lists in hash-based
templates. Allows you to generate complex templating without needing to
have a complete search. Example of use is in tag_address_list.
* Added support for modular items, sets mv_mp parameter to *parent* item
of the item ordered, and mv_mi to the item group of the main item.
* Made failure to pass all quantities to quantity update (refresh)
non-fatal. Will update them if mv_update_quantity=1.
* Form profiles: added new format check routines, largely intended to
work with new mv_form_profile capability:
* variable=regex "EXPR" "Error message"
Checks for compliance with regex EXPR. If you wanted
to ensure two word-only characters were put in a "name"
variable, it would be:
variable=regex "^\w+\s+\w+$" "We need first/last name"
* variable=length MIN-MAX "Error message"
Checks for length between required MIN and optional MAX characters.
username=length 4-10 "Username must be between 4 and 10 characters"
* variable=unique TABLE
Checks to see that a key in a table (presumably to be inserted) is
unique. Errors out if key exists.
* Form profiles: Added new profile chaining capabiility. Can place &or or
&and on a line between different check parameters and create simple
* Form profiles: Reference to check can now be passed to the routine, so
you can check CGI stuff only for mv_form_profile.
* Form profiles: Fixed problem with second passing check on a variable
overwriting the error message from a first failing routine.
* Can now use - and _ interchangeably in parameter names, i.e.
[value-extended name=foo file-contents=1]
is the same as
[value-extended name=foo file_contents=1]
where it would have caused an error before.
* Bug fixes to make mv_sql_query work properly. There was a
push_spec('nu' ...) call which was in the wrong place, making numeric
hash all out of sync.
* Remove last dependencies on $! =~ /Some English error/ and move
to Errno settings, as in $!{EAGAIN}, etc.
* Add pragma to strip leading white space from HTML output. If you put
[pragma strip_white] to page, there will be no leading white space.
* Added ability to have a PRELOAD file for database imports, where a
table is parsed for field names and data before the normal file in
ProductDir. This allows adding fields without user intervention when
the database type is internal. Mostly useful for mv_metadata.
* Support for clone_row and clone_set, which clone a single row from an
existing one or clone a set of rows based on a common key.
* Added support for autonumbering. For SQL, the ability will be given to
override the autonumber routine with one set up by the capabilities.
Figured out solution to nagging File::CounterFile problem by always
initializing a counter object when database is opened in writable mode.
* Allow tables to have the same underlying name in their own database
with $config->{REAL_NAME}. For example, if you have two MySQL databases
each with a "products" table, you can set them up:
Database products products.txt dbi:mysql:construct1
Database prodstoo prodstoo.txt dbi:mysql:construct2
Database prodstoo REAL_NAME products
This should work fine in almost all cases.
* Added DEFAULT parameter to allow database-independent setting of
defaults. Particularly useful in avoiding NOT NULL errors from DBs that
don't have a DEFAULT setting in create(). This also works when doing
[data table=tab col=col key=key value=val] on a non-existent row.
* Improved speed of table open by reducing number of tests.
* Improved speed of import by pre-setting numeric array and no longer
requiring tests for each field on each row.
* Debian packaging files added (supplied by Stefan Hornburg
* Usertag formel added which composes form elements and signals errors
(supplied by Stefan Hornburg <>).
* Rewrite image background paths in <table>, <tr>, <td>, and <th> tags
according to ImageDir/ImageSecureDir by default. (Removed pragma
substitute_table_image that was just added in 4.6.2.) Set pragma
no_image_rewrite to disable all image path rewriting.
* Split RPM into two packages: base Interchange and foundation demo
catalog skeleton. Should make RPM upgrading safer.
* Removed There's now a normal ictags document instead.
* Move UI menus into icmenu database.
* Add ItemAction to map a subroutine to alter items every time toss_cart
is run, i.e. after an add or refresh.
Calling syntax is $sub->($item_reference), return value is not used.
* Add a new directive "Limit". It is designed to hold limits for
certain things. Implemented to begin with:
Limit chained_cost_levels 20
Limit cart_quantity_per_line 10000
* Rework server to allow preforking daemons, similar to Apache.
New global directives:
PreFork yes/no
StartServers number (0: old way; 1 or more: exact number to allow)
* New SOAP protocol support allows two-way communication with all sorts
of other web "objects". Features:
- Catalog and session ID are embedded in proxy call. This avoids
having to do fancy gyrations with the SOAP envelope.
- Allows most any tag to be called, with nearly the same syntax
as with embedded perl on IC.
- Embedded Perl (and variants like [item-calc] and [item-exec]
are not allowed by default, but can be enabled with SOAP_Enable.
- Can specify the ID, or accept one from Interchange.
- Can get and put entire Values, Scratch, and Session structures.
Documentation for using SOAP is forthcoming.
* Add mv_like_field and mv_like_spec to search specifications, designed
to filter SQL (only!) searches with
mv_like_field like 'mv_like_spec'.
This is a stackable field/spec set like mv_search_field and
mv_searchspec, and will eliminate any fields with empty mv_like_spec
Checks the known_capability to see if UPPER_COMPARE is set for that
database, and uses (pseudo-code) "UPPER($col) like "\U$spec" if that
is the case.
* Add known_capability UPPER_COMPARE (set for Pg and Oracle to begin
with) to allow upper-case transforms for case-insensitive compares.
* Add ability to call custom UserTag or other ITL in Vend::Cfg->{SalesTax}.
* Allow passing of extra parameters to button usertag with $opt->{extra}.
* Add beginnings of transaction support. New [flag type=transaction table=x]
allows you to open (write implied) a table for transactions. Will have no
effect on tables that don't support it, but will open tables that do
support it in non-AutoCommit mode. Sequence is:
[flag type=transactions table="transactions orderline"]
[import ...] or any other db update routines [/import]
[flag type=commit table="transactions orderline"]
Tested only on PostgreSQL at this point.
* Add ability to read files from a database instead of the filesystem.
Interchange 4.7.0 not publicly released.