1 <?php
2 3 4 5 6 7 8 9 10
11
12 13 14 15 16 17 18
19 class ProductRepositoryReader implements ProductRepositoryReaderInterface
20 {
21 22 23 24 25
26 protected $db;
27
28 29 30 31 32
33 protected $productFactory;
34
35
36 37 38 39 40
41 protected $customerStatusProvider;
42
43
44 45 46 47 48 49 50
51 public function __construct(CI_DB_query_builder $db,
52 ProductFactoryInterface $productFactory,
53 CustomerStatusProviderInterface $customerStatusProvider)
54 {
55 $this->db = $db;
56 $this->productFactory = $productFactory;
57 $this->customerStatusProvider = $customerStatusProvider;
58 }
59
60
61 62 63 64 65 66 67 68 69 70
71 public function getById(IdType $productId)
72 {
73 $product = $this->db->get_where('products', array('products_id' => $productId->asInt()))->row_array();
74
75 $productDescriptionQuery = $this->db->select('products_description.*, languages.code AS language_code')
76 ->from('products_description')
77 ->join('languages',
78 'languages.languages_id = products_description.language_id', 'inner')
79 ->where('products_description.products_id', $productId->asInt());
80
81 $productDescription = $productDescriptionQuery->get()->result_array();
82
83 if($product === null)
84 {
85 throw new UnexpectedValueException('The requested product was not found in database (ID: '
86 . $productId->asInt() . ')');
87 }
88
89 if(count($productDescription) === 0)
90 {
91 throw new UnexpectedValueException('The requested product description was not found in database (ID: '
92 . $productId->asInt() . ')');
93 }
94
95 return $this->_createProductByArray($product, $productDescription);
96 }
97
98 99 100 101 102
103
104 105 106 107 108 109 110 111 112 113 114 115 116
117 protected function _createProductByArray(array $product, array $productDescription)
118 {
119 $storedProduct = $this->productFactory->createStoredProduct(new IdType($product['products_id']));
120
121
122 foreach($productDescription as $row)
123 {
124 $languageCode = new LanguageCode(new NonEmptyStringType($row['language_code']));
125
126 $storedProduct->setName(new StringType((string)$row['products_name']), $languageCode);
127 $storedProduct->setDescription(new StringType((string)$row['products_description']), $languageCode);
128 $storedProduct->setShortDescription(new StringType((string)$row['products_short_description']),
129 $languageCode);
130 $storedProduct->setKeywords(new StringType((string)$row['products_keywords']), $languageCode);
131 $storedProduct->setMetaTitle(new StringType((string)$row['products_meta_title']), $languageCode);
132 $storedProduct->setMetaDescription(new StringType((string)$row['products_meta_description']),
133 $languageCode);
134 $storedProduct->setMetaKeywords(new StringType((string)$row['products_meta_keywords']), $languageCode);
135 $storedProduct->setUrl(new StringType((string)$row['products_url']), $languageCode);
136 $storedProduct->setUrlKeywords(new StringType((string)$row['gm_url_keywords']), $languageCode);
137 $storedProduct->setCheckoutInformation(new StringType((string)$row['checkout_information']), $languageCode);
138 $storedProduct->setViewedCount(new IntType((int)$row['products_viewed']), $languageCode);
139 }
140
141 $storedProduct->setActive(new BoolType($product['products_status']));
142 $storedProduct->setSortOrder(new IntType($product['products_sort']));
143 $storedProduct->setOrderedCount(new IntType((int)$product['products_ordered']));
144 $storedProduct->setProductModel(new StringType((string)$product['products_model']));
145 $storedProduct->setEan(new StringType((string)$product['products_ean']));
146 $storedProduct->setPrice(new DecimalType((float)$product['products_price']));
147 $storedProduct->setTaxClassId(new IdType((int)$product['products_tax_class_id']));
148 $storedProduct->setQuantity(new DecimalType((float)$product['products_quantity']));
149 $storedProduct->setWeight(new DecimalType((float)$product['products_weight']));
150 $storedProduct->setDiscountAllowed(new DecimalType((float)$product['products_discount_allowed']));
151 $storedProduct->setShippingCosts(new DecimalType((float)$product['nc_ultra_shipping_costs']));
152 $storedProduct->setShippingTimeId(new IdType((int)$product['products_shippingtime']));
153 $storedProduct->setProductTypeId(new IdType((int)$product['product_type']));
154 $storedProduct->setManufacturerId(new IdType((int)$product['manufacturers_id']));
155 $storedProduct->setFsk18(new BoolType((bool)$product['products_fsk18']));
156 $storedProduct->setVpeActive(new BoolType((bool)$product['products_vpe_status']));
157 $storedProduct->setVpeId(new IdType((int)$product['products_vpe']));
158 $storedProduct->setVpeValue(new DecimalType((float)$product['products_vpe_value']));
159 $storedProduct->setAddedDateTime(new DateTime($product['products_date_added']));
160 $storedProduct->setAvailableDateTime(new EmptyDateTime($product['products_date_available']));
161 $storedProduct->setLastModifiedDateTime(new DateTime($product['products_last_modified']));
162
163 return $storedProduct;
164 }
165 }