.\" Automatically generated by Pod::Man version 1.15
.\" Wed May 5 11:41:41 2004
.\"
.\" Standard preamble:
.\" ======================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Ip \" List item
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. | will give a
.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used
.\" to do unbreakable dashes and therefore won't be available. \*(C` and
.\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
.tr \(*W-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" If the F register is turned on, we'll generate index entries on stderr
.\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
.\" index entries marked with X<> in POD. Of course, you'll have to process
.\" the output yourself in some meaningful fashion.
.if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.\"
.\" For nroff, turn off justification. Always turn off hyphenation; it
.\" makes way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
.bd B 3
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ======================================================================
.\"
.IX Title "icupgrade 8"
.TH icupgrade 8 "Interchange 5.2.0" "2004-05-05" "Interchange"
.UC
.SH "NAME"
icupgrade \- Interchange Upgrade Guide
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
.SH "Introduction"
.IX Header "Introduction"
This document contains, in rough form, notes on upgrading from
Minivend 3 to Minivend 4, and Minivend 4 to Interchange.
.SH "Interchange 4.8 Deprecated Features"
.IX Header "Interchange 4.8 Deprecated Features"
This document describes features of Interchange 4.8 that have been
deprecated. Any use of these features should be discontinued. In most
cases we have provided an alternative mechanism to accomplish the same
results. These deprecated features may be removed at some point in the
future. You should change to the new mechanism to avoid breakage.
.Sh "Deprecated Features Previous to Interchange 4"
.IX Subsection "Deprecated Features Previous to Interchange 4"
This section needs some serious work.
.Ip "cart/page from path" 4
.IX Item "cart/page from path"
interchange.PL 308,313
.Sp
.Vb 6
\& if($path =~ s:/(.*)::) {
\& $cart = $1;
\& if($cart =~ s:/(.*)::) {
\& $page = $1;
\& }
\& }
.Ve
.Ip "mv_orderpage" 4
.IX Item "mv_orderpage"
interchange.PL 321,323
.Sp
.Vb 3
\& $CGI::values{mv_nextpage} = $CGI::values{mv_orderpage}
\& || find_special_page('order')
\& if ! $CGI::values{mv_nextpage};
.Ve
.Ip "$decode" 4
.IX Item "$decode"
interchange.PL 493
.Sp
.Vb 1
\& HTML::Entities::decode($value) if $decode;
.Ve
.Ip "mv_orderpage" 4
.IX Item "mv_orderpage"
interchange.PL 854,855
.Sp
.Vb 2
\& $CGI::values{mv_nextpage} = $CGI::values{mv_orderpage}
\& if $CGI::values{mv_orderpage};
.Ve
.Ip "\s-1ROUTINES\s0 and \s-1LANG\s0" 4
.IX Item "ROUTINES and LANG"
interchange.PL 1552,1579
.Sp
.Vb 18
\& ROUTINES: {
\& last ROUTINES
\& unless index($Vend::FinalPath, '/process/') == 0;
\& while (
\& $Vend::FinalPath =~
\& s{/process/(locale|language|currency)/([^/]*)/}
\& {/process/}
\& )
\& {
\& $::Scratch->{"mv_$1"} = $2;
\& }
\& $Vend::FinalPath =~ s:/process/page/:/:;
\& }
\& my $locale;
\& if($locale = $::Scratch->{mv_language}) {
\& $Global::Variable->{LANG}
\& = $::Variable->{LANG} = $locale;
\& }
.Ve
.Vb 15
\& if ($Vend::Cfg->{Locale}
\& and $locale = $::Scratch->{mv_locale}
\& and defined $Vend::Cfg->{Locale_repository}->{$locale}
\& )
\& {
\& $Global::Variable->{LANG}
\& = $::Variable->{LANG}
\& = $::Scratch->{mv_language}
\& = $locale
\& if ! $::Scratch->{mv_language};
\& Vend::Util::setlocale( $locale,
\& ($::Scratch->{mv_currency} || undef),
\& { persist => 1 }
\& );
\& }
.Ve
.Ip "list_compat" 4
.IX Item "list_compat"
lib/Vend/Interpolate.pm 2808
.Sp
.Vb 1
\& list_compat($opt->{prefix}, \e$text);
.Ve
lib/Vend/Interpolate.pm 3538
.Sp
.Vb 1
\& list_compat($opt->{prefix}, \e$text);
.Ve
lib/Vend/Interpolate.pm 3874
.Sp
.Vb 1
\& list_compat($opt->{prefix}, \e$page);
.Ve
.Ip "find_sort" 4
.IX Item "find_sort"
lib/Vend/Interpolate.pm 3270,3271
.Sp
.Vb 2
\& $text =~ /^\es*\e[sort\es+.*/si
\& and $opt->{sort} = find_sort(\e$text);
.Ve
.Ip "mv_order_report" 4
.IX Item "mv_order_report"
lib/Vend/Order.pm 867,868
.Sp
.Vb 2
\& $body = readin($::Values->{mv_order_report})
\& if $::Values->{mv_order_report};
.Ve
.Ip "mv_error_$var" 4
.IX Item "mv_error_$var"
lib/Vend/Order.pm 1030
.Sp
.Vb 1
\& $::Values->{"mv_error_$var"} = $message;
.Ve
.Sh "Interchange 4 Deprecated Features"
.IX Subsection "Interchange 4 Deprecated Features"
.Ip "Vend::Util::send_mail Vend::Order::send_mail send_mail" 4
.IX Item "Vend::Util::send_mail Vend::Order::send_mail send_mail"
The send_mail routine has been replaced by the Vend::Mail::send
routine.
.SH "Upgrading from Minivend 4.0 to Interchange 4.6"
.IX Header "Upgrading from Minivend 4.0 to Interchange 4.6"
if [item-price] suddenly turns 0, check PriceField in the catalog.cfg
.Sh "minivend.cfg"
.IX Subsection "minivend.cfg"
.Ip "\(bu" 4
Remove references to MiniMate.
.Ip "\(bu" 4
Add this line to minivend.cfg:
.Sp
#include lib/UI/ui.cfg
.PP
Make sure the files catalog_before.cfg and catalog_after.cfg are
there, or add their contents to etc/your_cat_name.before and
etc/your_cat_name.after to it only for some catalogs.
.Sh "Access Manager"
.IX Subsection "Access Manager"
You need to get the minimate.asc file renamed to access.asc and add
the following fields to the first line:
.PP
.Vb 4
\& groups
\&last_login
\&name
\&password
.Ve
Remove these catalog.cfg lines:
.PP
.Vb 3
\& Variable MINIMATE_META mv_metadata
\& Variable MINIMATE_TABLE minimate
\& Database minimate minimate.asc TAB
.Ve
Add this one:
.PP
.Vb 1
\& Database affiliate affiliate.txt TAB
.Ve
Authentication for admin users is now done from a separate table than
customers, and passwords are encrypted.
.Sh "Database Editing"
.IX Subsection "Database Editing"
Update the mv_metadata.asc file as appropriate.
.Sh "Order Manager"
.IX Subsection "Order Manager"
Some things that are needed for the order manager:
.Ip "\(bu" 4
Add these fields to transactions:
.Sp
.Vb 1
\& affiliate approx. char(32)
.Ve
.Ip "\(bu" 4
Add these fields to transactions:
.Sp
.Vb 1
\& affiliate approx. char(32)
.Ve
.Ip "\(bu" 4
Remove this field from userdb:
.Sp
mv_credit_card_info
.Ip "\(bu" 4
Add these fields to userdb:
.Sp
inactive \fIchar\fR\|(1)
.Ip "\(bu" 4
Create the directory 'logs'.
.Ip "\(bu" 4
Create the directory 'orders' if it doesn't already exist.
.Ip "\(bu" 4
Update your order routes to those in the Interchange distribution.
Note that the route log_entry is necessary if you want to enter orders
from the Interchange \s-1UI\s0.
.Ip "\(bu" 4
Update the etc/log_transaction file.
.Ip "\(bu" 4
Add the etc/log_entry file.
.Ip "\(bu" 4
Add this to catalog.cfg:
.Sp
.Vb 1
\& ## Don't want people setting their credit_limit directly
.Ve
.Sh "Affiliates"
.IX Subsection "Affiliates"
Add a tab-delimited affiliate table:
.PP
.Vb 1
\& affiliate name campaigns join_date url timeout active password
.Ve
You can find a recommended database configuration in
foundation/dbconf/*/affiliate.*.
.Sh "Page Editor"
.IX Subsection "Page Editor"
Add the directories 'templates' and 'backup'. Copy the contents of the
Interchange simple/templates to templates.
.Sh "Item Editor"
.IX Subsection "Item Editor"
Add a merchandising table with the following fields:
.PP
.Vb 2
\& Database merchandising merchandising.txt __SQLDSN__
\&Database merchandising DEFAULT_TYPE text
.Ve
sku char(32)
featured char(32)
banner_text
banner_image
blurb_begin
blurb_end
timed_promotion char(16)
start_date char(24)
finish_date char(24)
upsell_to
cross_sell
cross_category char(64)
others_bought
times_ordered
.PP
Index the fields with \fIchar\fR\|(*) types. You can find the recommended
database configuration in foundation/dbconf/*/merchandising.*
.Sh "Preferences Editor (\s-1KNAR\s0)"
.IX Subsection "Preferences Editor (KNAR)"
Create the tab-delimited file variable.txt with these fields:
.PP
.Vb 1
\& code Variable pref_group
.Ve
Add this as the *first* line of catalog.cfg:
.PP
.Vb 1
\& VariableDatabase variable
.Ve
.Sh "Route Editor"
.IX Subsection "Route Editor"
Create the file route.txt with these fields:
.PP
.Vb 20
\& code
\& report
\& receipt
\& encrypt_program
\& encrypt
\& pgp_key
\& pgp_cc_key
\& cyber_mode
\& credit_card
\& profile
\& inline_profile
\& email
\& attach
\& counter
\& increment
\& continue
\& partial
\& supplant
\& track
\& errors_to
.Ve
Add this line in catalog.cfg:
.PP
.Vb 1
\& RouteDatabase route
.Ve
.Sh "Transactions database"
.IX Subsection "Transactions database"
The back office \s-1UI\s0 should work fine for editing database tables.
Obviously the things which are specific to the order transaction setup
will break unless you have the right fields, but even these can be
controlled by configuring the \s-1UI\s0.
.PP
Add a new field to transaction.txt called 'archived'.
.SH "Upgrading from Minivend 3 to Minivend 4"
.IX Header "Upgrading from Minivend 3 to Minivend 4"
There were big changes from Minivend 3 to Minivend 4, some of which
were incompatible.
.PP
Many things were removed as redundant, deprecated, or just plain
crufty:
.Sh "Nested [loop]s"
.IX Subsection "Nested [loop]s"
\&\s-1MV3\s0 used a different scheme for creating nested loop lists:
.PP
[loop with=\*(L"\-a\*(R"* arg=\*(L"item item item\*(R" search=\*(L"se=whatever\*(R"]
.PP
allowed you to refer to the nested values with a [loop-code-a]
construct. In Minivend 4, the form is:
.PP
.Vb 6
\& [loop prefix=size list="Small Medium Large"]
\& [loop prefix=color list="Red White Blue"]
\& [color-code]-[size-code]
\& [/loop]
\&
\& [/loop]
.Ve
.Sh "All frame features removed"
.IX Subsection "All frame features removed"
Frames are now managed by the user in \s-1HTML\s0.
.Sh "Tags removed"
.IX Subsection "Tags removed"
buttonbar
.PP
Replace with Variable defined in catalog.cfg. buttonbar was previously
used as an SSI-like command for catalog-wide standardized features
like navigation bars. In the 3.x catalog.cfg the ButtonBars parameter
defines a list of html snippets, like
.PP
.Vb 1
\& ButtonBars header.html footer.html copyright.html
.Ve
So [buttonbar 0] substitutes 'header.html', [buttonbar 1] substitutes
\&'footer.html', etc.
.PP
In 4.x catalog.cfg, define variables, like
.PP
.Vb 3
\& Variable HEADER