/
WHATSNEW
2625 lines (1751 loc) · 82.4 KB
/
WHATSNEW
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
------------------------------------------------------------------------------
What's new in each version of Interchange
(since the version 4.8 branch)
------------------------------------------------------------------------------
Interchange 4.9.9 not yet released.
Core
----
* 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.
Payment
-------
* CCVS payment module removed.
* Add support for Canadian PSiGate gateway. Thanks to Gary Benson for his
work and testing.
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
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.
Form
----
* Honor flag telling we already have data.
* Honor "db" passed parameter in lookup_query.
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.
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@santabarbara.org>.
* Add HIDE_FIELD to products database definition, so products marked
inactive will not be found in search.
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] bringing back some of the static page
capabilities, designed to called from Interchange jobs. The tag
is able to reproduce standard as well as search results pages:
[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]
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)
Miscellaneous
-------------
* Allow wildchar(*) in Swish search.
* Various minor cleanup, prevents warnings on startup.
* Call tracking functions only if Vend::Track object exists.
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@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@c-cs.com>).
- Added the whole list of response codes (Chaim Klar <c_klar@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