/**
     * 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;
 }
Example #4
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;
 }
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);
 }
Example #7
0
 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;
 }
Example #8
0
}
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];
            }
        }
Example #9
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();
 }
Example #10
0
             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) {