/** * Unit test for eZProductCollection::cleanupList() * * Outline: * 1) Create 10 eZProductCollection objects * 2) Pick 5 random ID of created items * 3) Call cleanupList() on these 5 items * 4) Check that the 5 items have been removed * 5) Check that the 5 other items haven't been removed */ public function testCleanupList() { // Create a few collections $row = array( 'created' => time(), 'currency_code' => 'EUR' ); $collection = new eZProductCollection( $row ); $collection->store(); $collectionIDArray[] = $collection->attribute( 'id' ); for( $i = 0; $i < 1500; $i++ ) { $newCollection = $collection->copy(); $collectionIDArray[] = $newCollection->attribute( 'id' ); } // pick a few random ID to delete $deleteIDArray = array_rand( $collectionIDArray, round( count( $collectionIDArray ) / 2 ) ); $remainingIDArray = array_diff( $collectionIDArray, $deleteIDArray ); eZProductCollection::cleanupList( $deleteIDArray ); // Check that each item of deleteIDArray has been removed foreach( $deleteIDArray as $id ) { $this->assertNull( eZProductCollection::fetch( $id ) ); } // And check that each item of remainingIDArray hasn't been deleted foreach( $remainingIDArray as $id ) { $this->assertInstanceOf( 'eZProductCollection', eZProductCollection::fetch( $id ) ); } }
function fetchBasket() { $http = eZHTTPTool::instance(); $sessionID = $http->sessionID(); $basketList = eZPersistentObject::fetchObjectList(eZBasket::definition(), null, array("session_id" => $sessionID), null, null, true); $currentBasket = false; if (count($basketList) == 0) { // If we don't have a stored basket we create a temporary // one which can be returned. $collection = eZProductCollection::create(); $currentBasket = new eZBasket(array("session_id" => $sessionID, "productcollection_id" => 0)); } else { $currentBasket = $basketList[0]; } if ($currentBasket === null) { $result = array('error' => array('error_type' => 'kernel', 'error_code' => eZError::KERNEL_NOT_FOUND)); } else { $result = array('result' => $currentBasket); } return $result; }
static function verify($id) { $invalidItemArray = array(); $collection = eZProductCollection::fetch($id); if (!is_object($collection)) { return $invalidItemArray; } $currency = $collection->attribute('currency_code'); $productItemList = eZPersistentObject::fetchObjectList(eZProductCollectionItem::definition(), null, array("productcollection_id" => $id), null, null, true); $isValid = true; foreach ($productItemList as $productItem) { if (!$productItem->verify($currency)) { $invalidItemArray[] = $productItem; $isValid = false; } } if (!$isValid) { return $invalidItemArray; } return $isValid; }
static function cleanupCurrentBasket($useSetting = true) { $ini = eZINI::instance(); $removeBasket = true; if ($useSetting) { $removeBasket = $ini->hasVariable('ShopSettings', 'ClearBasketOnLogout') ? $ini->variable('ShopSettings', 'ClearBasketOnLogout') == 'enabled' : false; } if ($removeBasket) { $basket = eZBasket::currentBasket(); if (!is_object($basket)) { return false; } $db = eZDB::instance(); $db->begin(); $productCollectionID = $basket->attribute('productcollection_id'); eZProductCollection::cleanupList(array($productCollectionID)); $basket->remove(); $db->commit(); } return true; }
if ( $clean['tipafriend'] ) { $cli->output( "Removing all counters for tip-a-friend" ); eZTipafriendCounter::cleanup(); } if ( $clean['shop'] ) { $cli->output( "Removing all baskets" ); eZBasket::cleanup(); $cli->output( "Removing all wishlists" ); eZWishList::cleanup(); $cli->output( "Removing all orders" ); eZOrder::cleanup(); $productCount = eZPersistentObject::count( eZProductCollection::definition() ); if ( $productCount > 0 ) { $cli->warning( "$productCount product collections still exists, must be a leak" ); } } if ( $clean['forgotpassword'] ) { $cli->output( "Removing all forgot password requests" ); eZForgotPassword::cleanup(); } if ( $clean['workflow'] ) { $cli->output( "Removing all workflow processes and operation mementos" );
function collectBaskets($maxTime = false, $sleepTime = false, $limit = false) { $db = eZDB::instance(); if ($maxTime === false and $db->hasRequiredServerVersion('4.0', 'mysql')) { $sql = "DELETE FROM ezbasket, ezproductcollection, ezproductcollection_item, ezproductcollection_item_opt\nUSING ezsession\n RIGHT JOIN ezbasket\n ON ezsession.session_key = ezbasket.session_id\n LEFT JOIN ezproductcollection\n ON ezbasket.productcollection_id = ezproductcollection.id\n LEFT JOIN ezproductcollection_item\n ON ezproductcollection.id = ezproductcollection_item.productcollection_id\n LEFT JOIN ezproductcollection_item_opt\n ON ezproductcollection_item.id = ezproductcollection_item_opt.item_id\nWHERE ezsession.session_key IS NULL"; $db->query($sql); return; } // Find all baskets which are lacking a session (db leaks) if ($db->hasRequiredServerVersion('8', 'oracle')) { $sql = "SELECT id, productcollection_id\nFROM ezsession, ezbasket\nWHERE ezbasket.session_id = ezsession.session_key (+) AND\n ezsession.session_key IS NULL"; } else { $sql = "SELECT id, productcollection_id\nFROM ezsession\n RIGHT JOIN ezbasket\n ON ezbasket.session_id = ezsession.session_key\nWHERE ezsession.session_key IS NULL"; } if ($limit === false) { $limit = eZDBGarbageCollector::ITEM_LIMIT; } $end = false; if (is_numeric($maxTime)) { $end = time() + $maxTime; } do { $rows = $db->arrayQuery($sql, array('offset' => 0, 'limit' => $limit)); if (count($rows) == 0) { break; } $productCollectionIDList = array(); $idList = array(); foreach ($rows as $row) { $idList[] = (int) $row['id']; $productCollectionIDList[] = (int) $row['productcollection_id']; } eZProductCollection::cleanupList($productCollectionIDList); $ids = implode(', ', $idList); $db->query("DELETE FROM ezbasket WHERE id IN ( {$ids} )"); // Stop when we used up our time if ($end !== false and time() > $end) { break; } // Sleep a little if required, reduces load on server if ($sleepTime !== false) { sleep($sleepTime); } } while (true); }
function currencyCode($collection = false) { if (is_string($collection) and $collection != '') { $currencyCode = $collection; } else { if ($collection instanceof eZProductCollection === false) { $collection = eZProductCollection::fetch($this->attribute('productcollection_id')); } $currencyCode = $collection->attribute('currency_code'); } // Backwards compability for orders done with the price datatype. if ($currencyCode == '') { $currencyCode = eZOrder::fetchLocaleCurrencyCode(); } return $currencyCode; }
} if ($http->hasPostVariable("RemoveProductItemButton")) { $itemList = $http->postVariable("RemoveProductItemDeleteList"); $wishList = eZWishList::currentWishList(); $db = eZDB::instance(); $db->begin(); foreach ($itemList as $item) { $wishList->removeItem($item); } $db->commit(); $module->redirectTo($module->functionURI("wishlist") . "/"); return; } if ($http->hasPostVariable("StoreChangesButton")) { $wishList = eZWishList::currentWishList(); $collection = eZProductCollection::fetch($wishList->attribute('productcollection_id')); if ($collection and $http->hasPostVariable("ProductItemIDList")) { $collectionItems = $collection->itemList(); $productItemIDlist = $http->postVariable("ProductItemIDList"); $productItemCountList = $http->hasPostVariable("ProductItemCountList") ? $http->postVariable("ProductItemCountList") : false; if ($productItemCountList == false) { $module->redirectTo($module->functionURI("wishlist") . "/"); return; } $productItemsCount = array(); // Create array of productItemID (as index) and productItemCount (as value) foreach ($productItemIDlist as $key => $productItemID) { if (isset($productItemCountList[$key])) { $productItemsCount[$productItemID] = $productItemCountList[$key]; } }
static function cleanup() { $db = eZDB::instance(); $db->begin(); $rows = $db->arrayQuery("SELECT productcollection_id FROM ezwishlist"); if (count($rows) > 0) { $productCollectionIDList = array(); foreach ($rows as $row) { $productCollectionIDList[] = $row['productcollection_id']; } eZProductCollection::cleanupList($productCollectionIDList); } $db->query("DELETE FROM ezwishlist"); $db->commit(); }
return; } } } // Fetch the shop account handler $accountHandler = eZShopAccountHandler::instance(); // Do we have all the information we need to start the checkout if (!$accountHandler->verifyAccountInformation()) { // Fetches the account information, normally done with a redirect $accountHandler->fetchAccountInformation($module); return; } else { // Creates an order and redirects $basket = eZBasket::currentBasket(); $productCollectionID = $basket->attribute('productcollection_id'); $verifyResult = eZProductCollection::verify($productCollectionID); $db = eZDB::instance(); $db->begin(); $basket->updatePrices(); if ($verifyResult === true) { $order = $basket->createOrder(); $order->setAttribute('account_identifier', "default"); $order->store(); $http->setSessionVariable('MyTemporaryOrderID', $order->attribute('id')); $db->commit(); $module->redirectTo('/shop/confirmorder/'); return; } else { $basket = eZBasket::currentBasket(); $removedItems = array(); foreach ($itemList as $item) {