Expire carts that are untouched for 30 days, and also update the time 
on a cart when it gets items added or removed. Should help alleviate 'my cart 
is from weeks ago' confusion.

        Patch by mark. 

diffs (58 lines):

diff -r e7287f847215 -r f808bb62f298 bin/worker/paidstatus
--- a/bin/worker/paidstatus     Sun May 02 07:32:12 2010 +0000
+++ b/bin/worker/paidstatus     Mon May 03 05:31:11 2010 +0000
@@ -100,6 +100,14 @@ sub main_loop {
     # now get a db or die
     my $dbh = LJ::get_db_writer()
         or return $log->( 'Unable to get database writer handle.' );
+
+## PHASE 0) REMOVE DEAD CARTS (unused for more than 30 days)
+
+    my $ct = $dbh->do( 'UPDATE shop_carts SET state = ? WHERE state = ? AND 
starttime < UNIX_TIMESTAMP() - 86400 * 30',
+                       undef, $DW::Shop::STATE_CLOSED, $DW::Shop::STATE_OPEN );
+    return $log->( 'Database error cleaning carts: %s', $dbh->errstr )
+        if $dbh->err;
+    $log->( 'Cleaned %d carts that were unused for more than 30 days.', $ct+0 
);
 
 ## PHASE 1) PROCESS PAYMENTS
 
diff -r e7287f847215 -r f808bb62f298 cgi-bin/DW/Shop/Cart.pm
--- a/cgi-bin/DW/Shop/Cart.pm   Sun May 02 07:32:12 2010 +0000
+++ b/cgi-bin/DW/Shop/Cart.pm   Mon May 03 05:31:11 2010 +0000
@@ -303,6 +303,7 @@ sub add_item {
     LJ::Hooks::run_hooks( 'shop_cart_added_item', $self, $item );
 
     # save to db and return
+    $self->_touch;
     $self->save || return( 0, 'Unable to save cart.' );
     return 1;
 }
@@ -337,6 +338,7 @@ sub remove_item {
 
     # now recalculate the costs and save
     $self->recalculate_costs;
+    $self->_touch;
     $self->save;
 
     # now run the hook, this is later so that we've updated the cart already
@@ -478,7 +480,7 @@ sub email {
 
################################################################################
 
 
-sub id       { $_[0]->{cartid}             } 
+sub id       { $_[0]->{cartid}             }
 sub userid   { $_[0]->{userid}             }
 sub starttime{ $_[0]->{starttime}          }
 sub age      { time() - $_[0]->{starttime} }
@@ -531,5 +533,11 @@ sub _build {
     return bless $cart, $class;
 }
 
+# called to update our access time, this is mostly an internal method, but 
anybody
+# that has reason to can call it;  note that this needs to be called before a 
save
+sub _touch {
+    $_[0]->{starttime} = time;
+}
+
 
 1;
_______________________________________________
dw-changelog mailing list
[email protected]
http://lists.dwscoalition.org/mailman/listinfo/dw-changelog

Reply via email to