[ic] Bug found: get_cart with merge=1
Brian Kaney
brian at vermonster.com
Fri Mar 4 19:10:41 EST 2005
On Sun, 2005-02-27 at 20:19, brian at vermonster.com wrote:
> Hello,
>
> I am on IC 5.2 and think I've discovered a bug with the userdb get_cart function
> with the merge="1" flag.
>
> Consider a saved cart consisting of a master item with one or more sub-items. A
> user imports this saved cart twice. Deleting one of the master items causes
> all the sub-items are deleted.
>
> I looked in the [dump] and noticed that the mv_mi id's for the two groups are
> the same. It seems that get_cart with merge="1" does not consider the mv_mi
> values of items already in the shopping cart. It should and I believe this is
> a bug.
>
I solved this by creating a usertag that looks into a user's saved carts
and finds the maximum mv_mi. I then increment this and loop around the
items in the cart, forcing the mv_mi the new max value. Then I save the
cart using the save_cart tag:
[perl userdb]
my $max = $Tag->mvmi_max();
foreach my $item (@$Items) { $item->{'mv_mi'} = $max + 1; }
[/perl]
[save_cart nickname="[cgi cart_nickname]" hide="1"]
----
And here is the code I wrote for the usertag:
#
# $Id:mvmi_max.usertag p,v 1.1.1.1 2005/03/04 23:17:41 bkaney $
#
# This routine loops though a user's saved carts and
# finds and returns the maximum master id. This lets
# us save grouped carts.
#
UserTag mvmi_max Routine <<EOR
sub {
my $key = $Vend::Session->{username};
my $cs = $Tag->data({table => 'userdb', field => 'carts', key =>
$key});
my @csa = split(/,/, $cs);
my $max = 0; my $cnt = 1;
foreach(@csa)
{
if($_ =~ /\'mv_mi\' =\> \'?([0-9]*)\'?/)
{
$max = $1 if ($1 > $max);
}
$cnt++;
return $max if $cnt > 500;
}
return $max;
}
EOR
- Brian
More information about the interchange-users
mailing list