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 
<?php
/* --------------------------------------------------------------
   ManufacturerWriter.inc.php 2018-01-23
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2018 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

/**
 * Class ManufacturerWriter
 *
 * @category   System
 * @package    Manufacturer
 * @subpackage Repositories
 */
class ManufacturerWriter implements ManufacturerWriterInterface
{
    /**
     * @var \CI_DB_query_builder
     */
    protected $queryBuilder;
    
    /**
     * @var \LanguageProvider
     */
    protected $languageProvider;
    
    
    /**
     * ManufacturerWriter constructor.
     *
     * @param \CI_DB_query_builder $queryBuilder
     * @param \LanguageProvider    $languageProvider
     */
    public function __construct(CI_DB_query_builder $queryBuilder, LanguageProvider $languageProvider)
    {
        $this->queryBuilder     = $queryBuilder;
        $this->languageProvider = $languageProvider;
    }
    
    
    /**
     * Saves manufacturer entity data in database.
     *
     * @param \ManufacturerInterface $manufacturer Manufacturer to be saved.
     *
     * @return $this|\ManufacturerWriterInterface Same instance for chained method calls.
     */
    public function store(ManufacturerInterface $manufacturer)
    {
        $dataArray = [
            'manufacturers_name'  => $manufacturer->getName(),
            'manufacturers_image' => $manufacturer->getImage(),
            'date_added'          => $manufacturer->getDateAdded()->format('Y-m-d H:i:s'),
            'last_modified'       => $manufacturer->getLastModified()->format('Y-m-d H:i:s')
        ];
        
        $this->queryBuilder->insert('manufacturers', $dataArray);
        $manufacturerId = $this->queryBuilder->insert_id();
        
        foreach($manufacturer->getUrls() as $languageCode => $url)
        {
            $this->queryBuilder->insert('manufacturers_info', [
                'manufacturers_id'  => $manufacturerId,
                'languages_id'      => $this->languageProvider->getIdByCode(MainFactory::create('LanguageCode',
                                                                                                new StringType($languageCode))),
                'manufacturers_url' => $url
            ]);
        }
        $manufacturer->setId(new IdType($manufacturerId));
        
        return $this;
    }
    
    
    /**
     * Updates manufacturer entity data in database.
     *
     * @param \ManufacturerInterface $manufacturer Manufacturer to be updated.
     *
     * @return $this|\ManufacturerWriterInterface Same instance for chained method calls.
     */
    public function update(ManufacturerInterface $manufacturer)
    {
        $dataArray = [
            'manufacturers_name'  => $manufacturer->getName(),
            'manufacturers_image' => $manufacturer->getImage(),
        ];
        $this->queryBuilder->update('manufacturers', $dataArray, ['manufacturers_id' => $manufacturer->getId()]);
        $manufacturer->setLastModified(new DateTime());
        
        foreach($manufacturer->getUrls() as $languageCode => $url)
        {
            $languageId = $this->languageProvider->getIdByCode(new LanguageCode(new StringType($languageCode)));
            $this->queryBuilder->update('manufacturers_info', ['manufacturers_url' => $url],
                                        ['manufacturers_id' => $manufacturer->getId(), 'languages_id' => $languageId]);
        }
        
        return $this;
    }
}