forked from interchange/interchange
-
Notifications
You must be signed in to change notification settings - Fork 0
/
WHATSNEW-5.5
807 lines (542 loc) · 28.6 KB
/
WHATSNEW-5.5
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
------------------------------------------------------------------------------
What's new in each version of Interchange
(since the version 5.4 branch)
------------------------------------------------------------------------------
See UPGRADE document for a list of incompatible changes.
Interchange 5.5.3 released on 2008-05-17.
Core
----
* Extended set_slice() to allow control of upsert behavior:
Calls to set_slice() have to date been forced to use the upsert model of
data manipulation. This can be a highly desirable editing model, but it
also has disadvantages, particularly in the context of the 'set' and
'autoset' form actions, which imply--but don't enforce--a distinction
between insert and update at the data-storage level.
The effects on insert can be particularly insidious, where one faces
having the assumed behavior on duplicate primary keys thwarted by a
surreptitious conversion to a SQL update. In such an instance, instead of
existing data being protected by a duplicate primary key error, the
extant record is silently replaced by the data from the insert. Detecting
this condition, particularly on a large table, is virtually impossible.
While the results of an update-to-insert adjustment are more benign, it
still presents a nuisance if a strict update is intended. To correct it,
one merely needs to delete the newly created, unanticipated row, and such
behavior does not destroy existing data.
To enforce update or insert, set_slice()'s $key arg can be optionally
passed as an array ref, essentially replacing the existing call:
set_slice($key, $fary, $vary)
with
set_slice([$opt, $key], $fary, $vary)
where $opt->{dml} is set to the desired value. $opt as a hash ref is
used so that any possible future opt-style params can simply be loaded
into the existing calling structure.
Change details:
* Default behavior for set_slice() is 'upsert'. If you do nothing to
your code or catalog, the behavior remains unchanged.
* $opt->{dml} can be 'insert', 'update', or anything else. If it's
anything else, it has no specific behavior currently. It defaults the
value 'upsert' just to be somewhat self-documenting and open up the
possibility of behaviors based on that value in the future.
* Despite the decision to key it off of 'dml', this has no effect on
deletes. Deletes have no ambiguous behavior, reflected in the fact that
deletes have their own dedicated method.
* Change only has core impact when processing requests through
Vend::Data::update_data(). However, any direct calls to set_slice() may
avail themselves of the new feature simply by overloading the $key arg
in the same fashion.
* Behavior of Vend::Data::update_data() can be in three modes,
controllable by the new 'dml' pragma.
+ No pragma setting works in historic mode, with upsert behavior.
+ "Pragma dml=preserve" restricts inserts to insert-only, but allows
the fall-through behavior from update to insert. As the name preserve
implies, it means no existing data can be clobbered.
The advantage to preserve is the easy use of set_slice() as a
record-cloning operation. In the table editor, one can clone a
record by simply changing the PK. Without this behavior, one must
completely re-enter existing data to the new key's name to clone.
+ "Pragma dml=strict" forces update or insert to only perform the
requested action.
Removed the option available in some polymorphs of set_slice that allowed
key/value pairs to be passed in as a simple array.
* Fixed bug that caused change of delimiter for all loops on a page.
* Skip eval in [perl] blocks if there is no code to eval, which speeds up
[perl] blocks used only for the side-effect of opening database handles.
* Changed syntax for option to use custom SQL as a counter.
This allows something other than a plain database sequence to be used to
replace counter files, for example to allow character prefixes or suffixes
with sequences, or to avoid writing files locally when in a cluster
environment.
For example, if you create a function called "custom_counter" in PostgreSQL,
you could set up catalog.cfg like this:
UserDB default sql_counter "userdb:SELECT custom_counter('users')"
Route default sql_counter "transactions:SELECT custom_counter('orders')"
And whatever the custom_counter function returns will be used by Interchange.
* Removed original Vend::Swish, and renamed prior Vend::Swish2 to Vend::Swish.
This module uses the Swish Perl API instead of calling a Swish subprocess
and dealing with shell escapes.
Filters
-------
* Made html2text filter also strip <b>, <i>, and <u> start & end tags.
Widgets
-------
* Add type_empty parameter to table editor. This allows the selection of a
different widget type if the length of the data is zero. Found on the
extended page of the meta editor for the field.
An example of use would be a "created" field in a table, which is a
DATETIME type. If the value of the field is the empty string or NULL,
set type_empty to "datetime" to put a date widget in. Make the normal
widget type be "value", which allows you to just display the data when
the value is already set.
* Made date widget formatting shorthand apply to time widget as well. User
widgets called time* are unaffected if they don't use a non-word character
in the callout. Examples:
time.ampm { type => 'time', ampm => 1 }
time.blank { type => 'time', blank => 1 }
time.8-23 { type => 'time', start_hour => 8, end_hour => 23 }
time.half { type => 'time', minutes => 'half_hourly' }
Standard demo
-------------
* Cleaned up spurious meta_header scratch variable set on two pages.
* Make MySQL do right thing with mod_time by setting to PREFER_NULL and making
the widget in the table editor be 'value'.
Packaging
---------
* Removed copied CPAN modules in extra/ and associated code. Commonly needed
CPAN modules are in Bundle::Interchange or Bundle::InterchangeKitchenSink.
* Moved IniConf.pm (used by makecat) into dist/lib. On CPAN it is marked as
deprecated, so make sure a copy is available here until we switch to a
different module.
* Converted a few bashisms to standard Bourne shell compatibility (RT #194).
Extra tools
-----------
* Added new eg/iclint tool for quick-and-dirty ITL syntax checking.
* Improved eg/check_perl_itl error detection.
------------------------------------------------------------------------------
Interchange 5.5.2 released on 2008-04-29.
Core
----
* Allow box-based widgets access to VALUE from option template (in addition
to LABEL). With VALUE added, the following template becomes possible:
option_template => "<img src='/images/{VALUE}.gif'> {LABEL}"
* Fixed the MinQuantityField and MaxQuantityField enforcement code so that
it takes the entire cart into account when SeparateItems is in use.
* New SocketReadTimeout global configuration parameter that controls
the amount of time (in seconds) that Interchange will wait for incoming
request data to arrive on an open socket. This was previously hard-coded
to one second, but that value was found to be too slow for some dial-up
Internet users.
* Fix to the "random" parameter used by looping tags.
-- If set to "no" or "false" or "0" then return all of the results
their original order (previously returned one random result).
-- If set to "yes" or "true" then then return all results in a
random order (again, previously returned one random result).
-- If set to a numeric > 0 then return that many random results.
-- If set to a numeric > the available results then return all
results in a random order (previously returned the original
results in the original order).
If you're using "random=yes" to request one random result then you
will need to change your code to use random=1 instead.
* Altered the DomainTail directive to take subdomains of various ccTLDs
into account. For example, if "foo.example.co.uk" pays a visit then
"example.co.uk" as the domain tail will be used instead of just "co.uk".
This is done with a new CountrySubdomains directive. A predefined block
of country subdomains is listed in a new subdomains.cfg file, which
should be "included" into the interchange.cfg file.
* Modified MaxQuantityField to support more than one quantity "[table:]column"
specification. The column values get added together to create the maximum
quantity value.
The idea is that you might have an "on hand" quantity and an "on order"
quantity that you want to consider when allowing orders.
* Created a new [PREFIX-include] loop sub-tag. This works just like the
[include] tag, except that it allows other [PREFIX-*] sub-tags to be parsed
from within the included file. Files included with [PREFIX-include] cannot
contain further [PREFIX-include] sub-tags.
* Allow for the proper display of product options that use text or textarea
widgets by showing the actual value if a label doesn't exist for the value.
* You can now change the default display type for Matrix widgets (ie if you
want the default to be seperate widgets instead of single widget) with a line
in catalog.cfg like this:
Options Matrix display_type separate
* New Multiple CodeDef flag to indicate that a widget can return multiple
selections. Usage example:
CodeDef checkbox Multiple 1
* Added some simple options code to Matrix.pm so that it can support mixed
Matrix/Simple option products.
* Set new Multiple flag for checkbox, movecombo, check_nbsp and multiple
widgets.
* Log missing order reports.
* Unlinking the existing session file before re-writing it causes a race
condition in the FETCH method, where if it checks with a concurrent request
on the same session while the file is missing, the failure causes Interchange
to create a new session for the user. As long as the file exists continuously,
the lock kicks in and concurrent requests serialize appropriately.
* New universal "hide" attribute. You can now set the attribute hide=1 for any
tag to suppress its output. For example [calcn hide=1]$foo='bar'[/calcn] will
still set $foo to bar, but won't output bar from the tag itself.
* Recognize "cc" and "bcc" headers in Route settings for emails generated
directly by the routes.
* Avoid multiple identical cookies (#150).
* Job server displays catalog and job name in $0.
* Renamed catalog_init SpecialSub to request_init to accommodate for a hook
called after catalog configuration (#160).
* Allow specifying alternate location of counter files in the Database directive
with AUTO_NUMBER_FILE setting.
* Add option to use a custom SQL function as a counter.
This allows something other than a plain database sequence to be used to
replace counter files, for example to allow character prefixes or suffixes
with sequences, or to avoid writing files locally when in a cluster
environment.
* Allow [if var ...] as shorthand for [if variable ...].
* Quell threaded perl warning for 5.8.8 and above.
* Fail gracefully on bad searches (#164).
* Make global ActionMap input consistent with catalog ActionMaps (RT #48), such
that they all have the action at the beginning of the path.
* Add new Preload catalog directive. This is just like Autoload but runs at the
earliest possible stage of page processing, which allows tweaking the session,
path, robot status, cookie handling, authorization, cookie handling, etc.
* Add new UserTrack boolean catalog directive, which enables or disables
sending the X-Track HTTP response header. Off by default, but formerly was on.
* Allow the shipping.asc weight to be modified with weight_callout SpecialSub.
This SpecialSub modifies the 'weight' criteria in shipping.asc. It does not
affect other calculations, such as the [weight] usertag. In the following
example, it is used to exclude items that are part of a free shipping
promotion from the calculation of the shipping cost. That is, if two out of
three items qualify for free shipping, then only the weight of the third
item would be used for weight-based shipping methods.
# Override the normal shipping.asc weight calculations to take the free
# shipping promotion into consideration. Uses custom is_free_shipping and
# weight Item Modifiers. Only non-free-shipping items have their weight
# included.
Sub custom_weight <<EOF
sub {
my ($normal_weight) = @_;
my $new_weight = 0;
for my $item (@$Items) {
$new_weight += $item->{weight} * $item->{quantity}
unless $item->{is_free_shipping};
}
return $new_weight;
}
EOF
SpecialSub weight_callout custom_weight
* Allow default error labels to be set in the Locale.
The previous behavior was to use the variable name when no label was given.
This change causes it to first check for a default label in the form of an
error_label_${variable name} entry in the Locale configuration before
falling back on just the variable name. As such, it is fully backwards
compatible.
This is useful if you use Locale to override the error messages in core
modules and also want to override the display of the label without setting
up or modifying the profile everywhere the error may be displayed (with
labels) on the site. For example:
Locale en_US <<EOF
{
# Override an error in Order.pm with one specific to this catalog.
"'%s' for item %s is not numeric/integer",
"We do not offer fractions of a product. (The quantity you entered was '%s'.)",
# Also override the error label.
"error_label_mv_order_quantity",
"Quantity",
}
EOF
* Allow rounding of negative numbers by round_to_frac_digits routine.
* Allow empty field changes to stick, fixing "(none)" image selections.
* Give the "flypage" SpecialSub the choice of returning a plain SKU value
rather than the overly-complicated { mv_results => [[$sku]] } hashref.
* Added a cache to save on lookups in the min/max quantity enforcement code.
* Stop including an old version of HTML::Entities with Interchange.
Use the current CPAN version instead.
* Remove never-used dump command, which is only for the DBM sessions that
no one uses any more.
* Fix problems caused by prototype mismatch in Perl 5.10.
* UserDB: Allow saved shipping and billing addresses to be returned as a raw
hashref for use in Perl.
* Add ability to set attrDefault for the Widget codedef type, which then
transmits that to the opt hash prior to widget routine call.
* Add ability to define multiple columns in the same Database COLUMN_DEF line.
* Make explicit the various implicit dependencies between PreFork,
PreForkSingleFork, and StartServers.
PreForkSingleFork should only ever affect behavior in conjunction with
PreFork true, ensuring the prefork code path is entirely controllable by
the value of PreFork.
Fixed condition on StartServers where a positive value for that parameter
when not in PreFork mode spawned a StartServers number of superfluous
daemons that were never used. Now, StartServers is effectively ignored
unless PreFork is also true.
* UserTag aliases now allow names tags to be specified using hyphens or
underscores. Previously, only underscores were allowed.
* Disallow negative tax in salestax() routine if no_negative_tax pragma is set.
* Allow comments (starting with "#" and ending with EOL) in the Robot*
directive lists, and added more robots to the list.
* Add new options for determining date of events in the userdb:
UserDB <profile> created_date_iso <field_name>
UserDB <profile> created_date_epoch <field_name>
UserDB <profile> updated_date_iso <field_name>
UserDB <profile> updated_date_epoch <field_name>
created_date_iso
Place a string ISO date in this field when user created.
created_date_epoch
Place a string epoch date in this field when user created.
Only works if no iso date defined.
updated_date_iso
Place a string ISO date in this field when user updated via
[userdb save] (i.e. set_values()).
updated_date_epoch
Place a string epoch date in this field when user updated via
[userdb save] (i.e. set_values()).
Only works if no iso date defined.
Default is not to use this feature, though this is now in
the standard template:
UserDB default created_date_epoch created
UserDB default updated_date_epoch updated
along with the appropriate fields.
* During compilation of custom routines, keep warnings and errors separated
from valid Perl that doesn't resolve to a sub ref.
* Avoid crash on non-hashes in Filter directive.
Tags
----
* Added scratch option to [get-url] for saving binary content into a scratch
variable instead of returning it.
* Fixed invalid JavaScript generated by the button tag (#135).
* Allow [include] et al. to scan the local TemplateDir as well as the global
version.
* [save-cart]: Don't delete the cart after saving if the new "keep" parameter
is set true.
* Respect new "charset" parameter for [email] to allow sending UTF-8 emails.
* Correct output of value-extended after successful file write.
The docs here:
http://www.icdevgroup.org/interchange-doc-5.2.0/frames/ictags_121.html
state, and it makes intuitive sense, that Perly true should be returned when
a file is successfully written. This was not the case before.
* Fix bug where previous rows values were left in $Row if [loop] was iterated
with [PREFIX-next].
* Don't add a ".html" suffix to the "process" page URI if
[process add_dot_html=no] is specified. If the "add_dot_html" parameter is
not specified then the "mv_add_dot_html" scratchpad variable will be in
control of the suffix.
* In [image] tag, quote filename when shelling out in case it contains spaces.
Payment
-------
* Removed inoperative WellsFargo payment module.
* Added Sage payment gateway. http://www.sagepayments.com/
* Added Getitcard payment module.
* Added Protx2 payment module.
* Authorize.net: Support auto-cleared mv_credit_card_cvv2 if cvv2 isn't set,
and send customer IP.
Jobs
----
* Force email notification of errors, can be prevented with ignore_errors
setting.
* Inclusion of global jobs can be forced with "Jobs UseGlobal 1"
Standard demo
-------------
* Fixed a bug which caused overwriting a forum post.
* Fixed a security bug where an attacker could craft a URI that tricks
Interchange into executing arbitrary Perl code. The Perl code would be
subject to the Safe constraints of course, but could still be devastating
to the security of the target website.
* Display modified date on Saved Carts / Recurring Order page in a human
readable format (#37).
* Add Croatian & Slovenian localization (RT #4).
UI
--
* Function UI::Primitive::list_images(), used by imagehelper, now works
correctly with directory paths whose last component is a directory symlink
(such as "path/to/symlink/*.jpg")
* It is now possible to have multiple imagehelper widgets that use different
suffix filter on the same page. (such as 'images/*.jpg' and 'images/*.gif')
* Matrix options editor can now display more than 50 variants via the use of a
more-list.
* Fix sort order of generated variant codes so that they match the code that is
ordered from the flypage.
* You can now mark individual options to be treated as "simple options" even
though the product is set to Matrix options. This is useful if you have one
or more options that you don't wish to track for inventory purposes or if you
want to use a text or textarea widget (which is not possible with matrix
options). Requires the addition of an o_simple column to the options table
for existing catalogs.
* New [widget-info] UI tag.
* Option editor will now correctly generate variants for options that use
widgets capable of multiple selections (ie, multiple or checkbox widgets).
* Add new ynzero widget, which does a 1/0 yes/no for integer type field.
* Fixed bug with component cloning
Linking
-------
* Improvements to Interchange::Link: Return an HTTP 404 response code when
appropriate. Avoid segmentation faults on broken pipe.
Packaging
---------
* Apache 2 is now default webserver for Debian packages.
* Added missing dbconfig-common hooks and set defaults for database name and
database user to interchange-cat-standard Debian package.
Extra tools
-----------
* Added -o option to eg/te, which writes output to a file instead of calling
an editor.
* Added eg/merge-tab-files, helpful for merging tab-delimited files on
matching keys.
* Added eg/check_perl_itl, a helper for syntax-checking [perl] and [calc]
blocks in ITL pages from within an editor.
------------------------------------------------------------------------------
Interchange 5.5.1 released on 2007-08-21.
Core
----
* Removed odd formatting from --add entry in interchange manual page.
* Fixed a DoS exploit. A carefully crafted HTTP POST request could cause
an Interchange page processor to hang until it's killed by Interchange's
periodic housekeeping routine. If several of these requests are received
in quick succession then it could be possible to disable all of the page
processors, rendering Interchange unresponsive for a while. Fixed by
Kevin Walsh; pointed out by Donald Alexander.
* Removed unused AdminHost global configuration directive.
* In &Vend::Table::DBI::set_row, avoid unwanted expansion of array when we
have PREFER_NULL fields and number of fields passed is one.
* Added Vend::Swish2 module provided by Brian Miller <brian@endpoint.com>.
This is superior to Vend::Swish, because instead of the awkward way to
interface with Swish-e by running the binary it uses the Swish Perl API.
Note: This module will replace Vend::Swish after we ensure as much backward
compatibility as possible.
* Allow specification of one additional include directory for specific
modules, specified like this:
Require module Vend::Swish /usr/lib/swish-e/perl
* Terminate search if mv_min_string condition isn't met.
* Make [sql-quote] list tag to work properly with multiple lines.
* Fixed case-insensitive searches for different locales.
* Fix the [error] tag so it does not attempt to replace format specifiers other
than %s in the text or std_label attributes.
* Vend::SQL_Parser required LIMIT clause to be lowercase when it should be
case-insensitive.
* Issue error message if subroutine for PREFIX-exec is missing.
* Fix [on-match]/[no-match] for loop lists without matchlimit generated from
embedded Perl objects
* Fixed problem where both set_row() and set_slice() would try to get the key
from last_sequence_value() for returning even if we already know the key and
even on an UPDATE which can cause problems.
* New "timecard" round-robin style counters added with the timecard_stamp and
timecard_read subs in Util.pm. These are now used for better control of the
session per IP lockouts (when RobotLimit is set). See CVS log for more
details (#2).
* lockout specialsubs will now override session per IP lockouts properly (#3).
* Fixed error where the wrong tag name can sometimes appear in [calc] error
messages (#7).
* Superfluous Vend::Interpolate::sort_cart function removed (#70).
* set_slice now skips updates on existing records when we have only key
columns (#98).
* Change [shipping-desc] to allow access to arbitrary keys in the shipping
configuration.
* Fixed problem where only the last shipping policy will get stored if the
multi-line format is used in shipping.asc.
* Fixed problem where options are not converted and stored properly on all
shipping policies.
* Moved more code into the new process_new_beginning sub and cleaned up other
code in Ship.pm.
* Added "file" (readable file) and "executable" (executable file) as extra
Require directive tests.
* Added a new TABLE_COMMENT modifier to the Database directive to allow
a short comment to be attached to MySQL and PostgreSQL tables.
* Delay "Server started" message as long as possible.
* Disable SOAP and display error when Vend::SOAP fails to load (#46).
* Remove catalog status files when removing catalog. Also call remove_catalog at
server stop -- would be nice for cleanup anyway (#95).
* Fixed problem where RPC mode would fork too many processes at startup due to
race condition (#107).
* Set $0 throughout the server and dispatch process to reflect current
conditions (#107).
* Set up more aggressive management in response to INT or TERM to propagate the
request down to the children. Prior to this arrangement, a restart or kill
would leave many of the children running. This cleaned up Interchange stops
to remove all preforked daemons (#107).
* Adjusted housekeeping to cull out old pids so that PIDcheck was enforced in
PreFork (#107).
* Make PreFork handle idle children more intelligently.
If a child is idle, then don't needlessly respawn it at PIDcheck seconds.
To make sure we still catch child processes that have spun out of control,
track idle vs. active state.
* Pass $opt to labeled_list fixing behaviour of fly-list to be matching other
x-list tags (#89).
* Pass applylocale option into Vend::Form::options_to_array in order to
localize option labels (#80).
* New set_process_name sub which is used to change the status in the process
name indicator.
* Fixed problem where form values do not always default to the $Values hash
values for corresponding form fields when defaults=1 and wizard=1 are both
set in the table editor.
* Fixed a bug where the [data session host] was not being set on a session's
first page access. The "host" key was only being set for subsequent pages.
* Removed MV_DOLLAR_ZERO workaround for a bug fixed 5 years ago.
* Added a new "scratchd" test type. This is the same as "scratch" except
that it deletes the variable from the scratchpad after testing.
* New BounceReferrals catalog directive. When enabled, GET requests to URLs
with mv_pc or mv_source set to an affiliate code are redirected to the
same URL minus the affiliate code.
This keeps search engines that respect redirects from storing the affiliate
code-salted URL in their indexes, and helps them focus on the real resource
with a single URL instead of a multitude of salted links.
UserDB
------
* Fixed UserDB login issues within embedded Perl by using
Vend::Util::string_to_ref for deserialization of carts and other
hashes.
* New validchars option to customize valid characters for usernames, e.g.
adding the + character to the list of valid characters:
UserDB default validchars "-A-Za-z0-9_@.+"
UserTag
-------
* Make [save-cart] keep cart if userdb returns with an error.
* Make [formel] call [display] on unknown types.
* Fixed cleanse option of [import-fields] for composite keys (#98).
* Added [timed-display] tag to allow date specific display of text or html in pages.
Filter
------
* Added "round" filter to round in floating-point-safe way, using the
Vend::Util routine.
* Avoid ambiguity between two time formats in date_change filter.
* Added "lspace2nbsp" filter. Translates leading spaces to nbsp
Checks
------
* Added "match" check to match another CGI variable, e.g. for password
verification.
Payment
-------
* New NetBilling module.
Jobs
----
* Added new job group db with export job to export databases offline for
backup and version control purposes.
* Added process ID to "Run jobs" and "Finished jobs" log messages for better
troubleshooting.
* Avoid cluttering global log file with job run messages.
* Allow parameters passed to jobs, acknowledges --email commandline option
now (#103).
UI
--
* Fix page banner in menu editor.
* Tidied up some code in customer_mailing.html
* Fixed test to see if sku exists on creation of new item
in quick_question.html (#17)
* Avoid crashes on table export if data contains Interchange tags (#100).
Standard demo
-------------
* Fixed minor security hole of admin's session ID being exposed when placing
an order in the admin. Found by Mark Lipscombe <markl@gasupnow.com>.
* Various special_pages/missing.html fixes:
- Fixed broken admin 404 error page (which came from Standard).
- Removed duplicate, sometimes-bogus MV_PREV_PAGE display.
- Eliminated double-interpolation of page comparison.
* Updated Discover Card logo. Provided by Steve Graham.
* Increased compatibility with XHTML.
* Cleaned up splash page and fixed broken links.
* Add CVV2 support to checkout pages, images thanks to Jure Kodzoman.
* Fix problem with permanently setting members_only, bug and fix found
by Jo-Ellen Matthews.
SOAP
----
* Return proper SOAP error to the client instead of disclosing our faults.
Packaging
---------
* Switched from dh_movefiles to dh_install for Debian packaging.
* Added --oknodo option to start-stop-daemon for restart action in the
Debian init script (#28).
Other
-----
* Updated copyright in headers to 2007 (#102).