[ic] Bug found: get_cart with merge=1

Mike Heins mike at perusion.com
Sat Mar 5 14:03:38 EST 2005


Quoting Brian Kaney (brian at vermonster.com):
> 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"]

I had this on my list of things to think about. It occurred to me that a
good way to set the mv_mi value might be the UNIX time of the submission
plus a series of digits -- that should be completely unique within a user
and would prevent possible conflict on merged carts. So I did that.

I also wrote a routine to add to the get_cart merge function which makes
sure you won't merge a group with the same number -- that probably is
no longer needed, but I believe I have written routines before which
create their own mv_mi and that might save the problem then.

Both changes are in CVS.
-- 
Mike Heins
Perusion -- Expert Interchange Consulting    http://www.perusion.com/
phone +1.765.647.1295  tollfree 800-949-1889 <mike at perusion.com>

Opportunity is missed by most people because it is dressed in
overalls and looks like work. -- Thomas Edison


More information about the interchange-users mailing list