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 
<?php

/* --------------------------------------------------------------
   AddonValueService.inc.php 2015-11-20 gm
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2015 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

MainFactory::load_class('AddonValueServiceInterface');

/**
 * Class AddonValueService
 *
 * This service will handle the addon values for different contexts of the shop. The addon values is
 * a mechanism for external developers to introduce values to key-entities of the project (e.g. order,
 * product etc.) without further changing the database structure. Take a look at the "Storages" directory
 * for the available storage classes. More classes will be created gradually.
 *
 * @category System
 * @package  AddonValue
 */
class AddonValueService implements AddonValueServiceInterface
{
    /**
     * @var AddonValueStorageFactory
     */
    protected $addonValueStorageFactory;
    
    
    /**
     * AddonValueService Constructor
     *
     * @param AddonValueStorageFactoryInterface $addonValueStorageFactory
     */
    public function __construct(AddonValueStorageFactoryInterface $addonValueStorageFactory)
    {
        $this->addonValueStorageFactory = $addonValueStorageFactory;
    }
    
    
    /**
     * Save the addon values of a storage container in the database.
     *
     * @param AddonValueContainerInterface $container
     *
     * @return AddonValueService Returns the class instance.
     */
    public function storeAddonValues(AddonValueContainerInterface $container)
    {
        $addonValueStorage = $this->addonValueStorageFactory->createAddonValueStorageByContainerObject($container);
        $addonValueStorage->setValues(new IdType($container->getAddonValueContainerId()), $container->getAddonValues());
        
        return $this;
    }
    
    
    /**
     * Load the addon values of a storage container from the database.
     *
     * @param AddonValueContainerInterface $container
     *
     * @return AddonValueService Returns the class instance.
     */
    public function loadAddonValues(AddonValueContainerInterface $container)
    {
        $addonValueStorage = $this->addonValueStorageFactory->createAddonValueStorageByContainerObject($container);
        $containerValues   = $addonValueStorage->getValuesByContainerId(new IdType($container->getAddonValueContainerId()));
        $container->addAddonValues($containerValues);
        
        return $this;
    }
    
    
    /**
     * Remove the addon values of a storage container.
     *
     * @param AddonValueContainerInterface $container
     *
     * @return AddonValueService Returns the class instance.
     */
    public function deleteAddonValues(AddonValueContainerInterface $container)
    {
        $addonValueStorage = $this->addonValueStorageFactory->createAddonValueStorageByContainerObject($container);
        $addonValueStorage->deleteValuesByContainerId(new IdType($container->getAddonValueContainerId()));
        
        return $this;
    }
}