1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 
<?php
/* --------------------------------------------------------------
   SharedShoppingCartService.inc.php 2016-04-08 gm
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2016 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

/**
 * Class SharedShoppingCartService
 *
 * @category   System
 * @package    SharedShoppingCart
 */
class SharedShoppingCartService implements SharedShoppingCartServiceInterface
{
    /**
     * @var SharedShoppingCartRepository
     */
    protected $repository;

    /**
     * @var SharedShoppingCartSettingsInterface
     */
    protected $settings;


    /**
     * SharedShoppingCartService constructor.
     *
     * @param \SharedShoppingCartRepository        $repository
     * @param \SharedShoppingCartSettingsInterface $settings
     */
    public function __construct(SharedShoppingCartRepository $repository, SharedShoppingCartSettingsInterface $settings)
    {
        $this->repository = $repository;
        $this->settings   = $settings;
    }


    /**
     * Stores the cart and returns the hash
     *
     * @param array       $shoppingCartContent The cart content
     * @param IdType|null $userId              The user ID of the user who is sharing the cart
     *
     * @return string The hash of the cart
     */
    public function storeShoppingCart(array $shoppingCartContent, IdType $userId = null)
    {
        $jsonShoppingCart = json_encode($shoppingCartContent);

        return $this->repository->storeShoppingCart(new StringType($jsonShoppingCart), $userId);
    }


    /**
     * Gets the content of the shopping cart corresponding to the hash
     *
     * @param StringType $shoppingCartHash Hash of the shopping cart
     *
     * @return array Content of the shopping cart
     */
    public function getShoppingCart(StringType $shoppingCartHash)
    {
        return json_decode($this->repository->getShoppingCart($shoppingCartHash));
    }


    /**
     * Deletes all shared shopping carts that exceeded the configured life period
     */
    public function deleteExpiredShoppingCarts()
    {
        $lifePeriod = $this->settings->getLifePeriod();
        if($lifePeriod === 0)
        {
            return;
        }

        $currentDate        = new DateTime();
        $lifePeriodInterval = new DateInterval('P' . $lifePeriod . 'D');
        $expirationDate     = $currentDate->sub($lifePeriodInterval);

        $this->repository->deleteShoppingCartsOlderThan($expirationDate);
    }
    
    
    /**
     * Deletes all shared shopping carts by a given customer ID.
     *
     * @param \IdType $customerId
     */
    public function deleteShoppingCartsByCustomerId(IdType $customerId)
    {
        $this->repository->deleteShoppingCartsByCustomerId($customerId);
    }
    
    
    /**
     * Gets a collection of all shared shopping carts by a given customer ID.
     * 
     * @param \IdType $customerId
     * 
     * @return \SharedShoppingCartCollection
     */
    public function getShoppingCartsByCustomerId(IdType $customerId)
    {
        return $this->repository->getShoppingCartsByCustomerId($customerId);
    }
}