1 <?php
2
3 4 5 6 7 8 9 10 11
12
13 14 15 16 17 18 19
20 class ProductRepositoryWriter implements ProductRepositoryWriterInterface
21 {
22 23 24 25 26
27 protected $db;
28
29 30 31 32 33
34 protected $languageProvider;
35
36
37 38 39 40 41 42 43 44
45 public function __construct(CI_DB_query_builder $db, YetAnotherLanguageProvider $languageProvider)
46 {
47 $this->db = $db;
48 $this->languageProvider = $languageProvider;
49 }
50
51
52 53 54 55 56 57 58 59 60 61 62 63
64 public function insert(ProductInterface $product)
65 {
66 $productDataArray = $this->_parseProductData($product);
67
68 $this->db->insert('products', $productDataArray);
69
70 $productId = $this->db->insert_id();
71
72 foreach($this->languageProvider->getActiveCodes() as $languageCode)
73 {
74 $languageId = $this->languageProvider->getIdByCode($languageCode);
75
76 $productDescriptionDataArray = $this->_parseProductDescriptionData($product, $languageCode);
77 $productDescriptionDataArray['products_id'] = $productId;
78 $productDescriptionDataArray['language_id'] = $languageId;
79
80 $this->db->insert('products_description', $productDescriptionDataArray);
81 }
82
83 return $productId;
84 }
85
86
87 88 89 90 91 92 93 94 95 96 97
98 public function update(StoredProductInterface $product)
99 {
100
101 $productDataArray = $this->_parseProductData($product);
102
103 $this->db->update('products', $productDataArray, array('products_id' => $product->getProductId()));
104
105
106 foreach($this->languageProvider->getActiveCodes() as $languageCode)
107 {
108 $languageId = $this->languageProvider->getIdByCode($languageCode);
109
110 $productDescriptionDataArray = $this->_parseProductDescriptionData($product, $languageCode);
111
112 $this->db->update('products_description',
113 $productDescriptionDataArray,
114 array(
115 'products_id' => $product->getProductId(),
116 'language_id' => $languageId
117 ));
118 }
119
120 return $this;
121 }
122
123
124 125 126 127 128
129
130 131 132 133 134 135 136
137 protected function _parseProductData(ProductInterface $product)
138 {
139 $productDataArray = array(
140 'products_status' => (int)$product->isActive(),
141 'products_sort' => $product->getSortOrder(),
142 'products_date_added' => $product->getAddedDateTime()->format('Y-m-d H:i:s'),
143 'products_date_available' => $product->getAvailableDateTime()->format('Y-m-d H:i:s'),
144 'products_last_modified' => $product->getLastModifiedDateTime()->format('Y-m-d H:i:s'),
145 'products_ordered' => $product->getOrderedCount(),
146 'products_model' => $product->getProductModel(),
147 'products_ean' => $product->getEan(),
148 'products_price' => $product->getPrice(),
149 'products_tax_class_id' => $product->getTaxClassId(),
150 'products_quantity' => $product->getQuantity(),
151 'products_weight' => $product->getWeight(),
152 'products_discount_allowed' => $product->getDiscountAllowed(),
153 'nc_ultra_shipping_costs' => $product->getShippingCosts(),
154 'products_shippingtime' => $product->getShippingTimeId(),
155 'product_type' => $product->getProductTypeId(),
156 'manufacturers_id' => $product->getManufacturerId(),
157 'products_fsk18' => (int)$product->isFsk18(),
158 'products_vpe_status' => (int)$product->isVpeActive(),
159 'products_vpe' => $product->getVpeId(),
160 'products_vpe_value' => $product->getVpeValue(),
161 );
162
163 return $productDataArray;
164 }
165
166
167 168 169 170 171 172 173 174 175 176
177 protected function _parseProductDescriptionData(ProductInterface $product, LanguageCode $languageCode)
178 {
179 $productDescriptionDataArray = array(
180 'products_name' => $product->getName($languageCode),
181 'products_description' => $product->getDescription($languageCode),
182 'products_short_description' => $product->getShortDescription($languageCode),
183 'products_keywords' => $product->getKeywords($languageCode),
184 'products_meta_title' => $product->getMetaTitle($languageCode),
185 'products_meta_description' => $product->getMetaDescription($languageCode),
186 'products_meta_keywords' => $product->getMetaKeywords($languageCode),
187 'products_url' => $product->getUrl($languageCode),
188 'products_viewed' => $product->getViewedCount($languageCode),
189 'gm_url_keywords' => $product->getUrlKeywords($languageCode),
190 'checkout_information' => $product->getCheckoutInformation($languageCode)
191 );
192
193 return $productDescriptionDataArray;
194 }
195 }