/** * Times out unused baskets according to general settings * * @param int|null $userId Timeout for User id only (triggered by user), or if 0: triggered by admin * @param int $limit Maximum number of baskets to timeout this time * @return int|null Number of baskets that just timed out */ public function timeoutUnusedBaskets( $userId, $limit = 100 ) { global $_CB_database; $params = cbpaidApp::settingsParams(); $query = "SELECT b.id FROM #__cbsubs_payment_baskets b" . "\n WHERE b.payment_status = 'NotInitiated'" . "\n AND b.payment_method IS NULL" ; if ( $userId ) { $query .= "\n AND b.user_id = " . (int) $userId; $hours = $params->get( 'basket_timeout_user', 3 ); } else { $hours = $params->get( 'basket_timeout_admin', 24 ); } $query .= "\n AND b.time_initiated < DATE_SUB( NOW(), INTERVAL " . ( (int) $hours ) . " HOUR)"; $_CB_database->setQuery( $query, 0, $limit ); $ids = $_CB_database->loadResultArray(); if ( is_array( $ids ) ) { foreach ( $ids as $basketId ) { $paymentBasket = new cbpaidPaymentBasket( $_CB_database ); $paymentBasket->historySetMessage( 'Basket timeout' ); $paymentBasket->delete( $basketId ); } return count( $ids ); } else { return null; } }