PluginProbe ʕ •ᴥ•ʔ
PiWeb Product Enquiry or product catalog for WooCommerce / 2.2.33.40
PiWeb Product Enquiry or product catalog for WooCommerce v2.2.33.40
2.2.34.43 2.2.34.42 2.2.34.41 2.2.34.40 2.2.34.39 trunk 2.2.22 2.2.26 2.2.33.16 2.2.33.17 2.2.33.19 2.2.33.20 2.2.33.21 2.2.33.22 2.2.33.23 2.2.33.24 2.2.33.26 2.2.33.27 2.2.33.29 2.2.33.30 2.2.33.31 2.2.33.32 2.2.33.33 2.2.33.34 2.2.33.36 2.2.33.37 2.2.33.39 2.2.33.40 2.2.33.41 2.2.33.42 2.2.33.43 2.2.33.44 2.2.33.46 2.2.33.47 2.2.33.49 2.2.34.0 2.2.34.1 2.2.34.10 2.2.34.11 2.2.34.12 2.2.34.13 2.2.34.14 2.2.34.16 2.2.34.17 2.2.34.19 2.2.34.2 2.2.34.20 2.2.34.21 2.2.34.22 2.2.34.23 2.2.34.24 2.2.34.26 2.2.34.27 2.2.34.29 2.2.34.3 2.2.34.30 2.2.34.31 2.2.34.32 2.2.34.33 2.2.34.34 2.2.34.36 2.2.34.37 2.2.34.4 2.2.34.6 2.2.34.7 2.2.34.9
enquiry-quotation-for-woocommerce / public / class-eqw-enquiry-cart.php
enquiry-quotation-for-woocommerce / public Last commit date
css 1 year ago img 1 year ago js 1 year ago partials 1 year ago class-email.php 1 year ago class-eqw-advance.php 1 year ago class-eqw-enquiry-cart.php 1 year ago class-eqw-enquiry-shortcode.php 1 year ago class-eqw-product.php 1 year ago class-eqw-save-enquiry.php 1 year ago class-pisol-enquiry-quotation-woocommerce-public.php 1 year ago class-pisol-form.php 1 year ago class-webhook.php 1 year ago index.php 1 year ago
class-eqw-enquiry-cart.php
277 lines
1 <?php
2
3 class class_eqw_enquiry_cart{
4
5 function __construct(){
6 add_action('wp_ajax_pi_add_to_enquiry', array($this, 'add_to_enquiry') );
7 add_action('wp_ajax_nopriv_pi_add_to_enquiry', array($this, 'add_to_enquiry') );
8
9 add_action('wp_ajax_pi_remove_product', array($this, 'pi_remove_product') );
10 add_action('wp_ajax_nopriv_pi_remove_product', array($this, 'pi_remove_product') );
11
12 add_action('wp_ajax_pi_update_products', array($this, 'pi_update_products') );
13 add_action('wp_ajax_nopriv_pi_update_products', array($this, 'pi_update_products') );
14
15 /**
16 * This is needed as wc session is not created for non-loged in users
17 */
18 add_action( 'woocommerce_init', array($this, 'startSession') );
19 }
20
21 function startSession(){
22 //self::deleteProductsFromEnquirySession();
23 if(isset(WC()->session)){
24 if ( !is_admin() && !WC()->session->has_session() ) {
25 WC()->session->set_customer_session_cookie( true );
26 }
27 }
28 }
29
30 function add_to_enquiry(){
31 if(isset($_POST['id']) && isset($_POST['variation_id'])){
32 $id = absint($_POST['id']);
33 $quantity = (int)(isset($_POST['quantity']) ? $_POST['quantity'] : 1);
34 $variation = absint($_POST['variation_id']);
35 $variation_detail = $this->sanitizeVariationDetail($_POST['variation_detail']);
36 $products = $this->addProductToEnquirySession($id, $quantity, $variation, $variation_detail);
37 }
38 die;
39 }
40
41 function sanitizeVariationDetail($variation_detail){
42 if(is_array($variation_detail) && count($variation_detail) > 0){
43 $sanitized_detail = array();
44 foreach($variation_detail as $key => $val){
45 $sanitized_detail[sanitize_text_field($key)] = sanitize_text_field($val);
46 }
47 return $sanitized_detail;
48 }
49 return 0;
50 }
51
52 function pi_remove_product(){
53 $hash = sanitize_text_field($_POST['hash']);
54 $products = $this->removeProductFromEnquirySession($hash);
55 ob_start();
56 pisol_table_row($products);
57 $cart = ob_get_contents(); // read ob2 ("b")
58 ob_end_clean();
59 $data = array(
60 'cart'=> $cart,
61 'pisol_products'=> self::filter_message($products)
62 );
63 echo json_encode($data, JSON_UNESCAPED_SLASHES);
64 die;
65 }
66
67 static function filter_message($products){
68 if(is_array($products) && count($products) > 0){
69 foreach($products as $key => $product){
70 $products[$key]['message'] = wp_unslash($products[$key]['message']);
71 }
72 }
73 return $products;
74 }
75
76 static function get_image($product_id, $variation_id){
77 if(empty($variation_id)){
78 $product = wc_get_product($product_id);
79 }else{
80 $product = wc_get_product($variation_id);
81 }
82
83 $image_id = $product->get_image_id();
84
85 $placeholder = wc_placeholder_img_src( 'thumbnail' );
86
87 if(!empty($image_id)){
88 $src = wp_get_attachment_image_src($image_id, 'thumbnail');
89 $image_src = isset($src[0]) ? $src[0] : $placeholder;
90 }else{
91 $image_src = $placeholder;
92 }
93 return sprintf('<img src="%s" class="pi-eqw-product-thumb">',esc_url($image_src));
94 }
95
96 function pi_update_products(){
97
98 $products = $this->addProductsToEnquirySession($_POST['products']);
99 ob_start();
100 pisol_table_row($products);
101 $cart = ob_get_contents(); // read ob2 ("b")
102 ob_end_clean();
103 $data = array(
104 'cart'=> $cart,
105 'pisol_products'=> self::filter_message($products)
106 );
107 echo json_encode($data, JSON_UNESCAPED_SLASHES);
108 die;
109 }
110
111 function addProductsToEnquirySession($products){
112 $products = $this->sanitizeProducts($products);
113 if(isset(WC()->session)){
114 WC()->session->set( 'pi_product_enquiries', $products );
115 }
116 return self::getProductsInEnquirySession();
117 }
118
119 function sanitizeProducts($products){
120 if(is_array($products)){
121 foreach($products as $key =>$product){
122 $products[$key]['id'] = (int)$products[$key]['id'];
123 $products[$key]['variation'] = (int)$products[$key]['variation'];
124 $products[$key]['variation_detail'] = $this->sanitizeVariationDetail($products[$key]['variation_detail']);
125
126 $products[$key]['quantity'] = (int) $products[$key]['quantity'];
127 $products[$key]['message'] = sanitize_text_field($products[$key]['message']);
128 if($products[$key]['quantity'] <= 0){
129 unset($products[$key]);
130 }
131 }
132 }
133 return $products;
134 }
135
136 static function deleteProductsFromEnquirySession(){
137 if(isset(WC()->session)){
138 WC()->session->__unset( 'pi_product_enquiries');
139 }
140 }
141
142 function addProductToEnquirySession($id, $quantity, $variation, $variation_detail){
143 $products = self::getProductsInEnquirySession();
144 $message = '';
145
146 if(self::is_variable($id) && $variation == false){
147 return false;
148 }
149
150 $new_product = array(
151 'id'=>(int)$id,
152 'quantity'=>(int)$quantity,
153 'variation'=>(int)$variation,
154 'variation_detail'=>$variation_detail,
155 'message'=>strip_tags($message)
156 );
157
158 $hash = self::hashGenerator($new_product['id'], $variation_detail);
159
160 if($this->checkProductPresentInEnquirySession($hash)){
161 /**
162 * this will increment it by one,
163 * as we are not entering the new quantity variable
164 */
165 $this->changeQuantityInEnquirySession($hash, $new_product['quantity']);
166 return;
167
168 }else{
169
170 $products[$hash] = $new_product;
171 }
172
173 return $this->addProductsToEnquirySession($products);
174 }
175
176 static function is_variable($id){
177 $product = wc_get_product($id);
178 if($product->is_type('variable')){
179 return true;
180 }
181 return false;
182 }
183
184 static function hashGenerator($id, $variation_details){
185 $variation_value = "";
186 if(is_array($variation_details) && count($variation_details) > 0){
187 foreach($variation_details as $key => $variation_detail){
188 $variation_value .= $variation_detail;
189 }
190 }
191 $hash = md5($id.$variation_value);
192 return $hash;
193 }
194
195 static function getProductsInEnquirySession(){
196 $products = array();
197 if(isset(WC()->session)){
198 $products = WC()->session->get('pi_product_enquiries');
199 $products = self::removeTrashedProduct($products);
200 if($products === null) return array();
201 }
202 return $products;
203 }
204
205 static function removeTrashedProduct($products){
206 if($products === null) return array();
207
208 foreach($products as $key => $product){
209 $product_status = get_post_status( $product['id'] );
210 if('publish' !== $product_status){
211 unset($products[$key]);
212 }
213 }
214 return $products;
215 }
216
217 static function isThereProductsInEnquirySession(){
218 $products = self::getProductsInEnquirySession();
219 if(is_array($products) && count($products) > 0){
220 return true;
221 }
222 return false;
223 }
224
225 /**
226 * return true if product present in cart
227 */
228 function checkProductPresentInEnquirySession($hash){
229 $products = self::getProductsInEnquirySession();
230 $present = false;
231
232 if(isset($products[$hash])){
233 $present = true;
234 }
235
236 return $present;
237
238 }
239
240 /**
241 * If $new_quantity is false will increment the existing quantity
242 * if it is not false and is a number then will it will update existing quantity
243 * if new quantity is zero it will remove the product from list
244 */
245 function changeQuantityInEnquirySession($hash, $new_quantity = false){
246 $products = self::getProductsInEnquirySession();
247
248 if($new_quantity === 0){
249 $this->removeProductFromEnquirySession($hash);
250 return;
251 }
252
253 if(is_array($products) && count($products) > 0){
254 if($new_quantity){
255 $products[$hash]['quantity'] = $products[$hash]['quantity']+$new_quantity;
256 }else{
257 $products[$hash]['quantity'] = $products[$hash]['quantity']+1;
258 }
259 }
260
261 $this->addProductsToEnquirySession($products);
262
263 }
264
265 function removeProductFromEnquirySession($hash){
266 $products = self::getProductsInEnquirySession();
267 if(is_array($products) && count($products) > 0){
268
269 unset($products[$hash]);
270
271 }
272
273 return $this->addProductsToEnquirySession($products);
274 }
275 }
276
277 new class_eqw_enquiry_cart();