1 <?php
2
3 4 5 6 7 8 9 10 11
12
13 14 15 16 17 18 19
20 class ProductSettingsRepositoryReader implements ProductSettingsRepositoryReaderInterface
21 {
22 23 24 25
26 protected $db;
27
28 29 30
31 protected $productFactory;
32
33 34 35 36 37
38 protected $customerStatusProvider;
39
40
41 42 43 44 45 46 47
48 public function __construct(CI_DB_query_builder $db,
49 ProductFactoryInterface $productFactory,
50 CustomerStatusProviderInterface $customerStatusProvider)
51 {
52 $this->db = $db;
53 $this->productFactory = $productFactory;
54 $this->customerStatusProvider = $customerStatusProvider;
55 }
56
57
58 59 60 61 62 63 64 65 66
67 public function getById(IdType $productId)
68 {
69 $this->db->select('*')->from('products')->where('products_id', $productId->asInt());
70 $data = $this->db->get()->row_array();
71
72 if($data === null)
73 {
74 throw new UnexpectedValueException('The requested Product was not found in database (ID:'
75 . $productId->asInt() . ')');
76 }
77
78 $product = $this->_createProductByArray($data);
79
80 return $product;
81 }
82
83
84 85 86 87 88 89 90 91 92
93 protected function _createProductByArray(array $data)
94 {
95 $productSettings = $this->productFactory->createProductSettings();
96
97 $productSettings->setDetailsTemplate(new StringType((string)$data['product_template']));
98 $productSettings->setGraduatedQuantity(new DecimalType($data['gm_graduated_qty']));
99 $productSettings->setSitemapEntry(new BoolType($data['gm_sitemap_entry']));
100 $productSettings->setSitemapPriority(new StringType((string)$data['gm_priority']));
101 $productSettings->setSitemapChangeFreq(new StringType((string)$data['gm_changefreq']));
102 $productSettings->setMinOrder(new DecimalType($data['gm_min_order']));
103 $productSettings->setOptionsDetailsTemplate(new StringType((string)$data['options_template']));
104 $productSettings->setOptionsListingTemplate(new StringType((string)$data['gm_options_template']));
105 $productSettings->setPriceStatus(new IntType($data['gm_price_status']));
106 $productSettings->setPropertiesDropdownMode(new StringType((string)$data['properties_dropdown_mode']));
107 $productSettings->setShowAddedDateTime(new BoolType($data['gm_show_date_added']));
108 $productSettings->setShowOnStartpage(new BoolType($data['products_startpage']));
109 $productSettings->setStartpageSortOrder(new IntType($data['products_startpage_sort']));
110 $productSettings->setShowPriceOffer(new BoolType($data['gm_show_price_offer']));
111 $productSettings->setShowPropertiesPrice(new BoolType((bool)$data['properties_show_price']));
112 $productSettings->setShowWeight(new BoolType((bool)$data['gm_show_weight']));
113 $productSettings->setPropertiesCombisQuantityCheckMode(new IntType($data['use_properties_combis_quantity']));
114 $productSettings->setUsePropertiesCombisShippingTime(new BoolType($data['use_properties_combis_shipping_time']));
115 $productSettings->setUsePropertiesCombisWeight(new BoolType($data['use_properties_combis_weight']));
116 $productSettings->setShowQuantityInfo(new BoolType($data['gm_show_qty_info']));
117
118
119 $groupPermissionIds = $this->customerStatusProvider->getCustomerStatusIds();
120 $this->_setGroupPermissions($data, $groupPermissionIds, $productSettings);
121
122 return $productSettings;
123 }
124
125
126 127 128 129 130 131 132 133 134
135 protected function _setGroupPermissions($product, $groupPermissionIds, ProductSettingsInterface $productSettings)
136 {
137 foreach($groupPermissionIds as $id)
138 {
139 if(array_key_exists('group_permission_' . $id, $product))
140 {
141 $productSettings->setPermittedCustomerStatus(new IdType($id),
142 new BoolType($product['group_permission_' . $id]));
143 }
144 }
145
146 return $this;
147 }
148 }