/**
     * 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 ) );
        }
    }
Beispiel #2
0
 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;
 }
 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);
 }
Beispiel #4
0
 static function cleanup()
 {
     $db = eZDB::instance();
     $rows = $db->arrayQuery("SELECT productcollection_id FROM ezorder");
     $db = eZDB::instance();
     $db->begin();
     if (count($rows) > 0) {
         $productCollectionIDList = array();
         foreach ($rows as $row) {
             $productCollectionIDList[] = $row['productcollection_id'];
         }
         eZProductCollection::cleanupList($productCollectionIDList);
     }
     // Who deletes which order in shop should be logged.
     eZAudit::writeAudit('order-delete', array('Comment' => 'Removed all orders from the database: eZOrder::cleanup()'));
     eZOrderItem::cleanup();
     $db->query("DELETE FROM ezorder_status_history");
     $db->query("DELETE FROM ezorder");
     $db->commit();
 }
Beispiel #5
0
 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();
 }