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

/* --------------------------------------------------------------
   ProductSettingsRepositoryWriter.inc.php 2016-05-09
   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 ProductSettingsRepositoryWriter
 *
 * @category   System
 * @package    Product
 * @subpackage Repositories
 */
class ProductSettingsRepositoryWriter implements ProductSettingsRepositoryWriterInterface
{

    /**
     * Database connection.
     *
     * @var CI_DB_query_builder
     */
    protected $db;

    /**
     * Table name.
     *
     * @var string
     */
    protected $table = 'products';
    
    /**
     * Customer Status Provider
     *
     * @var CustomerStatusProviderInterface
     */
    protected $customerStatusProvider;
    
    
    /**
     * ProductSettingsRepositoryWriter constructor.
     *
     * @param CI_DB_query_builder             $db                     Database connection.
     * @param CustomerStatusProviderInterface $customerStatusProvider Customer Status Provider
     */
    public function __construct(CI_DB_query_builder $db,
                                CustomerStatusProviderInterface $customerStatusProvider)
    {
        $this->db                     = $db;
        $this->customerStatusProvider = $customerStatusProvider;
    }


    /**
     * Updates product settings by the given product id.
     *
     * @param IdType                   $productId ID of product entity.
     * @param ProductSettingsInterface $settings  Settings entity with values to update.
     *
     * @return ProductSettingsRepositoryInterface|$this Same instance for chained method calls.
     */
    public function update(IdType $productId, ProductSettingsInterface $settings)
    {
        $setArray = array(
            'product_template'                    => $settings->getDetailsTemplate(),
            'options_template'                    => $settings->getOptionsDetailsTemplate(),
            'gm_options_template'                 => $settings->getOptionsListingTemplate(),
            'products_startpage'                  => $settings->showOnStartpage(),
            'products_startpage_sort'             => $settings->getStartpageSortOrder(),
            'gm_show_date_added'                  => $settings->showAddedDateTime(),
            'gm_show_qty_info'                    => $settings->showQuantityInfo(),
            'gm_show_weight'                      => $settings->showWeight(),
            'gm_show_price_offer'                 => $settings->showPriceOffer(),
            'gm_price_status'                     => $settings->getPriceStatus(),
            'gm_min_order'                        => $settings->getMinOrder(),
            'gm_graduated_qty'                    => $settings->getGraduatedQuantity(),
            'gm_sitemap_entry'                    => $settings->isSitemapEntry(),
            'gm_priority'                         => $settings->getSitemapPriority(),
            'gm_changefreq'                       => $settings->getSitemapChangeFreq(),
            'properties_show_price'               => $settings->showPropertiesPrice() ? 'true' : 'false',
            'properties_dropdown_mode'            => $settings->getPropertiesDropdownMode(),
            'use_properties_combis_weight'        => $settings->usePropertiesCombisWeight(),
            'use_properties_combis_quantity'      => $settings->getPropertiesCombisQuantityCheckMode(),
            'use_properties_combis_shipping_time' => $settings->usePropertiesCombisShippingTime()
        );
        
        $customerStatusIds = $this->customerStatusProvider->getCustomerStatusIds();
        
        foreach($customerStatusIds as $customerStatusId)
        {
            $setArray['group_permission_'
                      . $customerStatusId] = (int)$settings->isPermittedCustomerStatus(new IdType($customerStatusId));
        }

        $whereArray = array(
            'products_id' => $productId->asInt()
        );

        $this->db->update($this->table, $setArray, $whereArray);

        return $this;
    }
}