PageRenderTime 64ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/wp-shopping-cart/classes/variations.class.php

https://github.com/alx/barceloneta
PHP | 544 lines | 470 code | 51 blank | 23 comment | 109 complexity | 6eaae6aba8334f71032fd2c69f319f8a MD5 | raw file
  1. <?php
  2. class nzshpcrt_variations {
  3. function nzshpcrt_variations() {
  4. global $wpdb;
  5. }
  6. function display_variation_values($prefix,$variation_id) {
  7. global $wpdb;
  8. if(is_numeric($variation_id)) {
  9. $variation_values = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}variation_values` WHERE `variation_id` = '{$variation_id}' ORDER BY `id` ASC",ARRAY_A);
  10. if($variation_values != null) {
  11. $output .= "<input type='hidden' name='variation_id[]' class='variation_ids' value='{$variation_id}'>";
  12. $output .= "<table>";
  13. $output .= "<tr><th>".TXT_WPSC_VISIBLE."</th><th>".TXT_WPSC_NAME."</th></tr>";
  14. foreach($variation_values as $variation_value) {
  15. $output .= "<tr>";
  16. $output .= "<td style='text-align: center;'><input type='checkbox' name='variation_values[{$variation_id}][{$variation_value['id']}][active]' value='1' checked='true' id='variation_active_{$variation_id}_{$variation_value['id']}' />";
  17. $output .= "<input type='hidden' name='variation_values[{$variation_id}][{$variation_value['id']}][blank]' value='null' /> </td>";
  18. $output .= "<td>".stripslashes($variation_value['name'])."</td>";
  19. $output .= "</tr>";
  20. }
  21. $output .= "<tr>";
  22. $output .= "<td colspan='4'>";
  23. $output .= "<a href='#' onclick='return remove_variation_value_list(\\\"$prefix\\\",\\\"$variation_id\\\");'>".TXT_WPSC_REMOVE_SET."</a>";
  24. $output .= "</td>";
  25. $output .= "</tr>";
  26. $output .= "</table>";
  27. }
  28. }
  29. return $output;
  30. }
  31. function falsepost_variation_values($variation_id) {
  32. global $wpdb;
  33. if(is_numeric($variation_id)) {
  34. $variation_values = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."variation_values` WHERE `variation_id` = '$variation_id' ORDER BY `id` ASC",ARRAY_A);
  35. if($variation_values != null) {
  36. foreach($variation_values as $variation_value) {
  37. $output_variation_values[$variation_id][$variation_value['id']]['active'] = 1;
  38. $output_variation_values[$variation_id][$variation_value['id']]['blank'] = 'null';
  39. }
  40. }
  41. }
  42. return $output_variation_values;
  43. }
  44. function add_to_existing_product($product_id,$variation_list) {
  45. global $wpdb;
  46. if(is_numeric($product_id)) {
  47. foreach($variation_list as $variation_id => $variation_values) {
  48. if(is_numeric($variation_id)) {
  49. $num = 0;
  50. $variation_assoc_sql = "INSERT INTO `".$wpdb->prefix."variation_associations` ( `type` , `name` , `associated_id` , `variation_id` ) VALUES ( 'product', '', '$product_id', '$variation_id');";
  51. $product_assoc_sql = "INSERT INTO `".$wpdb->prefix."variation_values_associations` ( `product_id` , `value_id` , `quantity` , `price` , `visible` , `variation_id` ) VALUES";
  52. foreach($variation_values as $variation_value_id => $variation_value_properties) {
  53. if(is_numeric($variation_value_id)) {
  54. switch($num) {
  55. case 0:
  56. $comma = '';
  57. break;
  58. default:
  59. $comma = ', ';
  60. break;
  61. }
  62. if(is_numeric($variation_value_properties['price']) && ($variation_value_properties['price'] > 0))
  63. {
  64. $price = $variation_value_properties['price'];
  65. } else {
  66. $price = '';
  67. }
  68. if($variation_value_properties['active'] == 1) {
  69. $active = 1;
  70. } else {
  71. $active = 0;
  72. }
  73. if(is_numeric($variation_value_properties['stock']) && ($variation_value_properties['stock'] > 0)) {
  74. $quantity = $variation_value_properties['stock'];
  75. } else {
  76. $quantity = 0;
  77. }
  78. $product_assoc_sql .= "$comma ( '$product_id', '$variation_value_id', '$quantity', '".$price."', '$active', '$variation_id')";
  79. $num++;
  80. }
  81. }
  82. $product_assoc_sql .= ";";
  83. $wpdb->query($product_assoc_sql);
  84. $wpdb->query($variation_assoc_sql);
  85. }
  86. }
  87. }
  88. return $output;
  89. }
  90. function variations_grid_view($product_id) {
  91. global $wpdb;
  92. $product_price = $wpdb->get_var("SELECT `price` FROM `".$wpdb->prefix."product_list` WHERE `id` IN('$product_id') LIMIT 1");
  93. $associated_variations = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."variation_associations` WHERE `type` IN ('product') AND `associated_id` = '$product_id' ORDER BY `id` ASC",ARRAY_A);
  94. $variation_count = count($associated_variations);
  95. if(!(($variation_count >= 1) && ($variation_count <= 2))) {
  96. return "";
  97. exit();
  98. }
  99. switch($variation_count) {
  100. case 1:
  101. $variation_name = $wpdb->get_var("SELECT `name` FROM `".$wpdb->prefix."product_variations` WHERE `id` = '".$associated_variations[0]['variation_id']."' ORDER BY `id` ASC LIMIT 1");
  102. $grid_header = str_replace(":variation1:",$variation_name ,TXT_WPSC_VARIATION_GRID_CONTROL_SINGLE);
  103. break;
  104. case 2:
  105. $variation_name1 = $wpdb->get_var("SELECT `name` FROM `".$wpdb->prefix."product_variations` WHERE `id` = '".$associated_variations[0]['variation_id']."' ORDER BY `id` ASC LIMIT 1");
  106. $variation_name2 = $wpdb->get_var("SELECT `name` FROM `".$wpdb->prefix."product_variations` WHERE `id` = '".$associated_variations[1]['variation_id']."' ORDER BY `id` ASC LIMIT 1");
  107. $grid_header = str_replace(Array(":variation1:", ":variation2:"),Array($variation_name1, $variation_name2) ,TXT_WPSC_VARIATION_GRID_CONTROL_PAIR);
  108. break;
  109. }
  110. $output .= "<table class='product_variation_grid'>\n\r";
  111. $output .= " <tr>\n\r";
  112. $output .= " <th colspan='3' class='variation_name'>".$grid_header."</th>\n\r";
  113. $output .= " </tr>\n\r";
  114. $output .= " <tr>\n\r";
  115. $output .= " <td><strong>".TXT_WPSC_VARIATION."</strong></td>\n\r";
  116. $output .= " <td><strong>".TXT_WPSC_STOCK."</strong></td>\n\r";
  117. $output .= " <td><strong>".TXT_WPSC_PRICE."</strong></td>\n\r";
  118. if(count($associated_variations) == 1) {
  119. $output .= " <td><strong>".TXT_WPSC_ASSOCIATEWITHFILE."</strong></td>\n\r";
  120. }
  121. $output .= " </tr>\n\r";
  122. if(count($associated_variations) == 2) {
  123. foreach($associated_variations as $key => $associated_variation) {
  124. $associated_variation_values[$key] = $wpdb->get_results("SELECT `".$wpdb->prefix."variation_values`.* FROM `".$wpdb->prefix."variation_values` WHERE `variation_id` = '".$associated_variation['variation_id']."'",ARRAY_A);
  125. }
  126. foreach((array)$associated_variation_values[0] as $associated_variation_value[0]) {
  127. $variation_active[0] = $wpdb->get_var("SELECT `visible` FROM `".$wpdb->prefix."variation_values_associations` WHERE `product_id` = '$product_id' AND `value_id` = '".$associated_variation_value[0]['id']."' AND `variation_id` = '".$associated_variation_value[0]['variation_id']."'");
  128. if(($variation_active[0] === null) || ($variation_active[0] == 1)) {
  129. foreach((array)$associated_variation_values[1] as $associated_variation_value[1]) {
  130. $variation_active[1] = $wpdb->get_var("SELECT `visible` FROM `".$wpdb->prefix."variation_values_associations` WHERE `product_id` = '$product_id' AND `value_id` = '".$associated_variation_value[1]['id']."' AND `variation_id` = '".$associated_variation_value[1]['variation_id']."'");
  131. if(($variation_active[1] === null) || ($variation_active[1] == 1)) {
  132. $output .= " <tr>\n\r";
  133. $output .= " <td>".str_replace(" ", "&nbsp;", (stripslashes($associated_variation_value[0]['name']).", ".stripslashes($associated_variation_value[1]['name'])))."</td>\n\r";
  134. $variation_info = $wpdb->get_row("SELECT id, file, `stock`,`price` FROM `".$wpdb->prefix."variation_priceandstock` WHERE `product_id` = '$product_id' AND (`variation_id_1` = '".$associated_variation_value[0]['id']."' AND `variation_id_2` = '".$associated_variation_value[1]['id']."') OR (`variation_id_1` = '".$associated_variation_value[1]['id']."' AND `variation_id_2` = '".$associated_variation_value[0]['id']."') LIMIT 1",ARRAY_A);
  135. $output .= " <td><input type='text' name='variation_priceandstock[".$associated_variation_value[0]['id']."][".$associated_variation_value[1]['id']."][stock]' value='".$variation_info['stock']."' size='3' /></td>\n\r";
  136. $output .= " <td><input type='text' name='variation_priceandstock[".$associated_variation_value[0]['id']."][".$associated_variation_value[1]['id']."][price]' value='";
  137. if(is_numeric($variation_info['price'])) {
  138. $output .= number_format($variation_info['price'],2,'.', '');
  139. } else {
  140. $output .= $product_price;
  141. }
  142. $output .= "' size='6' /></td>\n\r";
  143. // if ($variation_info['file']=='1'){
  144. // $checked = "checked=true";
  145. // } else {
  146. // $checked = "";
  147. // }
  148. // $output .= "<td><input $checked type='checkbox' name='file".$variation_info['id']."'/></td>";
  149. $output .= " </tr>\n\r";
  150. }
  151. }
  152. }
  153. }
  154. } else {
  155. $associated_variation = $associated_variations[0];
  156. $associated_variation_values = $wpdb->get_results("SELECT `".$wpdb->prefix."variation_values`.* FROM `".$wpdb->prefix."variation_values` WHERE `variation_id` = '".$associated_variation['variation_id']."'",ARRAY_A);
  157. foreach((array)$associated_variation_values as $associated_variation_value) {
  158. $variation_active = $wpdb->get_var("SELECT `visible` FROM `".$wpdb->prefix."variation_values_associations` WHERE `product_id` = '$product_id' AND `value_id` = '".$associated_variation_value['id']."' AND `variation_id` = '".$associated_variation_value['variation_id']."'");
  159. if(($variation_active === null) || ($variation_active == 1)) {
  160. $output .= " <tr>\n\r";
  161. $output .= " <td>".str_replace(" ", "&nbsp;", stripslashes($associated_variation_value['name']))."</td>\n\r";
  162. $variation_info = $wpdb->get_row("SELECT id, `stock`,`price`, file FROM `".$wpdb->prefix."variation_priceandstock` WHERE `product_id` = '$product_id' AND (`variation_id_1` = '".$associated_variation_value['id']."' AND `variation_id_2` = '0') LIMIT 1",ARRAY_A);
  163. $output .= " <td><input type='text' name='variation_priceandstock[".$associated_variation_value['id']."][0][stock]' value='".$variation_info['stock']."' size='3' /></td>\n\r";
  164. $output .= " <td><input type='text' name='variation_priceandstock[".$associated_variation_value['id']."][0][price]' value='";
  165. if(is_numeric($variation_info['price'])) {
  166. $output .= number_format($variation_info['price'],2,'.', '');
  167. } else {
  168. $output .= $product_price;
  169. }
  170. $output .= "' size='6' /></td>\n\r";
  171. if ($variation_info['file']=='1'){
  172. $checked = "checked=true";
  173. } else {
  174. $checked = "";
  175. }
  176. $output .= "<td><input $checked type='checkbox' name='variation_priceandstock[".$associated_variation_value['id']."][0][file]'/></td>";
  177. $output .= " </tr>\n\r";
  178. }
  179. }
  180. }
  181. $output .= "</table>\n\r";
  182. return $output;
  183. }
  184. function display_attached_variations($product_id)
  185. {
  186. global $wpdb;
  187. $associated_variations = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."variation_associations` WHERE `type` IN ('product') AND `associated_id` = '$product_id' ORDER BY `id` ASC",ARRAY_A);
  188. foreach((array)$associated_variations as $associated_variation)
  189. {
  190. $associated_variation_values = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."variation_values_associations` WHERE `variation_id` = '".$associated_variation['variation_id']."' AND `product_id` = '$product_id' ORDER BY `id` ASC",ARRAY_A);
  191. $variation_data = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."product_variations` WHERE `id` = '".$associated_variation['variation_id']."' ORDER BY `id` ASC LIMIT 1",ARRAY_A);
  192. //exit("SELECT * FROM `".$wpdb->prefix."variation_values_associations` WHERE `variation_id` = '".$associated_variation['variation_id']."' AND `product_id` = '$product_id' ORDER BY `id` ASC");
  193. $variation_data = $variation_data[0];
  194. $output .= "<table class='product_variation_listing'>";
  195. $output .= "<tr><th colspan='4' class='variation_name'>".$variation_data['name']."</th></tr>";
  196. $output .= "<tr><th>".TXT_WPSC_VISIBLE."</th><th>".TXT_WPSC_NAME."</th></tr>";
  197. $num = 0;
  198. $not_included_in_statement = '';
  199. foreach((array)$associated_variation_values as $associated_variation_value) {
  200. $product_value_id = $associated_variation_value['id'];
  201. $value_id = $associated_variation_value['value_id'];
  202. $value_stock = $associated_variation_value['quantity'];
  203. $value_price = $associated_variation_value['price'];
  204. $value_active = "";
  205. if($associated_variation_value['visible'] == 1) {
  206. $value_active = "checked='true'";
  207. }
  208. $value_data = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."variation_values` WHERE `id` = '$value_id' ORDER BY `id` ASC",ARRAY_A);
  209. $value_data = $value_data[0];
  210. $output .= "<tr>";
  211. $output .= "<td style='text-align: center;'><input type='checkbox' name='edit_variation_values[".$product_value_id."][active]' value='1' id='variation_active_".$value_id."' $value_active>
  212. <input type='hidden' name='edit_variation_values[".$product_value_id."][blank]' value='null'>
  213. </td>";
  214. $output .= "<td>".stripslashes($value_data['name'])."</td>";
  215. $output .= "</tr>";
  216. switch($num) {
  217. case 0:
  218. $comma = '';
  219. break;
  220. default:
  221. $comma = ', ';
  222. break;
  223. }
  224. $not_included_in_statement .= "$comma'$value_id'";
  225. $num++;
  226. }
  227. if($not_included_in_statement != '')
  228. {
  229. $not_included_sql = "SELECT * FROM `".$wpdb->prefix."variation_values` WHERE `variation_id` IN ('".$associated_variation['variation_id']."') AND `id` NOT IN ($not_included_in_statement)";
  230. $values_not_included = $wpdb->get_results($not_included_sql,ARRAY_A);
  231. }
  232. //$output .= "<pre>".print_r($not_included_sql,true)."</pre>";
  233. $variation_id = $associated_variation['variation_id'];
  234. if($values_not_included != null)
  235. {
  236. foreach($values_not_included as $variation_value)
  237. {
  238. $output .= "<tr>";
  239. $output .= "<td style='text-align: center;'><input type='checkbox' name='edit_add_variation_values[".$variation_id."][".$variation_value['id']."][active]' value='1' id='variation_active_".$variation_value['id']."'>
  240. <input type='hidden' name='edit_add_variation_values[".$variation_id."][".$variation_value['id']."][blank]' value='null' />
  241. </td>";
  242. $output .= "<td>".$variation_value['name']."</td>";
  243. // $output .= "<td><input type='text' name='edit_add_variation_values[".$variation_id."][".$variation_value['id']."][stock]' size='3' value='' /></td>";
  244. // $output .= "<td><input type='text' name='edit_add_variation_values[".$variation_id."][".$variation_value['id']."][price]' size='3' value='' /></td>";
  245. $output .= "</tr>";
  246. }
  247. }
  248. $output .= "<tr>";
  249. $output .= "<td colspan='4'>";
  250. $output .= "<a href='admin.php?page=".WPSC_DIR_NAME."/display-items.php&amp;submit_action=remove_set&amp;product_id=".$product_id."&amp;variation_assoc_id=".$associated_variation['id']."'>".TXT_WPSC_REMOVE_SET."</a>";
  251. $output .= "</td>";
  252. $output .= "</tr>";
  253. $output .= "</table>";
  254. $num++;
  255. }
  256. //$output .= "<pre>".print_r($values_not_included,true)."</pre>";
  257. return $output;
  258. }
  259. function edit_product_values($product_id,$variation_value_list) {
  260. global $wpdb;
  261. foreach($variation_value_list as $variation_value_id => $variation_values) {
  262. $quantity = $variation_values['stock'];
  263. $variation_values['price'] = str_replace(",","",$variation_values['price']);
  264. //exit(print_r($variation_values,true));
  265. if(is_numeric($variation_values['price']) && ($variation_values['price'] > 0)) {
  266. $price = $variation_values['price'];
  267. } else {
  268. $price = '';
  269. }
  270. if($variation_values['active'] == 1) {
  271. $visible_state = 1;
  272. } else {
  273. $visible_state = 0;
  274. }
  275. $update_sql = "UPDATE `".$wpdb->prefix."variation_values_associations` SET `visible` = '".$visible_state."' WHERE `id` = '".$variation_value_id."' LIMIT 1 ;";
  276. $wpdb->query($update_sql);
  277. //echo "<pre>".print_r($update_sql,true)."</pre>";
  278. //echo "<pre>".print_r($variation_values,true)."</pre>";
  279. }
  280. return $output;
  281. }
  282. function edit_add_product_values($product_id,$variation_value_list) {
  283. global $wpdb;
  284. foreach($variation_value_list as $variation_id => $variation_values) {
  285. if(is_numeric($variation_id)) {
  286. foreach($variation_values as $variation_value_id => $variation_value_properties) {
  287. $quantity = $variation_value_properties['stock'];
  288. $variation_value_properties['price'] = str_replace(",","",$variation_value_properties['price']);
  289. if(is_numeric($variation_value_properties['price']) && ($variation_value_properties['price'] > 0)) {
  290. $price = $variation_value_properties['price'];
  291. } else {
  292. $price = '';
  293. }
  294. if($variation_value_properties['active'] == 1) {
  295. $visible_state = 1;
  296. } else {
  297. $visible_state = 0;
  298. }
  299. $product_assoc_sql = "INSERT INTO `".$wpdb->prefix."variation_values_associations` ( `product_id` , `value_id` , `quantity` , `price` , `visible` , `variation_id` ) VALUES ( '$product_id', '$variation_value_id', '".$quantity."', '".$price."', '$visible_state', '$variation_id')";
  300. $wpdb->query($product_assoc_sql);
  301. // echo "<pre>".print_r($product_assoc_sql,true)."</pre>";
  302. //echo "<pre>".print_r($variation_values,true)."</pre>";
  303. }
  304. }
  305. }
  306. return $output;
  307. }
  308. function display_product_variations($product_id,$no_label = false, $no_div = false, $update_price = false ) {
  309. global $wpdb;
  310. $sql = "SELECT * FROM `".$wpdb->prefix."product_list` WHERE `id`='".$product_id."' LIMIT 1";
  311. $product_data = $wpdb->get_row($sql,ARRAY_A);
  312. $variation_assoc_sql = "SELECT * FROM `".$wpdb->prefix."variation_associations` WHERE `type` IN ('product') AND `associated_id` IN ('$product_id')";
  313. $variation_assoc_data = $wpdb->get_results($variation_assoc_sql,ARRAY_A);
  314. if($variation_assoc_data != null) {
  315. $first_entries = Array();
  316. foreach($variation_assoc_data as $variation_association) {
  317. $variation_ids[] = $variation_association['variation_id'];
  318. }
  319. $j=0;
  320. foreach((array)$variation_assoc_data as $variation_association) {
  321. $i = 0;
  322. if($no_div !== true) {
  323. }
  324. if($j==0) {
  325. $default_topping='checked="checked"';
  326. } else {
  327. $default_topping='';
  328. }
  329. $j++;
  330. $variation_id = $variation_association['variation_id'];
  331. $value_assoc_sql = "SELECT * FROM `".$wpdb->prefix."variation_values_associations` WHERE `product_id` IN ('$product_id') AND `variation_id` IN ('$variation_id') AND `visible` IN ('1')";
  332. $value_assoc_data = $wpdb->get_results($value_assoc_sql,ARRAY_A);
  333. $variation_data_sql = "SELECT * FROM `".$wpdb->prefix."product_variations` WHERE `id` IN ('$variation_id') LIMIT 1";
  334. $variation_data = $wpdb->get_results($variation_data_sql,ARRAY_A);
  335. $variation_data = $variation_data[0];
  336. if($no_label !== true) {
  337. $output .= "<label for='variation_select_".$product_id."_".$variation_data['id']."'>". $variation_data['name'] . ":</label> ";
  338. }
  339. if(($update_price === true) && (count($variation_ids) >= 1) && (count($variation_ids) <= 2)) {
  340. $special = 'false';
  341. if($no_label == true) {
  342. $special = 'true';
  343. }
  344. $on_change = "onchange='change_variation($product_id, Array(\"".implode("\",\"", $variation_ids)."\"), $special)'";
  345. } else { $on_change = ''; }
  346. $special_prefix = '';
  347. if($no_label == true) {
  348. $special_prefix = 'special_';
  349. }
  350. if (get_option("checkbox_variations")=='1') {
  351. $output .= "<br>";
  352. } else {
  353. $output .= "<select id='".$special_prefix."variation_select_".$product_id."_".$variation_data['id']."' name='variation[".$variation_data['id']."]' $on_change >";
  354. }
  355. foreach((array)$value_assoc_data as $value_association) {
  356. if($i == 0) {
  357. $first_entries[] = $value_association['value_id'];
  358. }
  359. $value_id = $value_association['value_id'];
  360. $value_data = $wpdb->get_row("SELECT * FROM `".$wpdb->prefix."variation_values` WHERE `id` = '$value_id' ORDER BY `id` ASC",ARRAY_A);
  361. $check_stock = false;
  362. if(($product_data['quantity_limited'] == 1) && (count($variation_assoc_data) == 1)) {
  363. $variation_stock_data = $wpdb->get_row("SELECT * FROM `".$wpdb->prefix."variation_priceandstock` WHERE `product_id` = '".$product_id."' AND (`variation_id_1` = '".$value_data['id']."' AND `variation_id_2` = '0') LIMIT 1",ARRAY_A);
  364. $check_stock = true;
  365. $stock = $variation_stock_data['stock'];
  366. }
  367. if (get_option('checkbox_variations')==1) {
  368. $output .= "<input type='checkbox' id='variation[".$value_data['id']."]' name='variation[".$variation_data['name']."][]'".$default_topping." value='".$value_data['id']."' onclick='manage_topping(".$product_id.",".$value_data['id'].",".$special.")'>".$value_data['name']."<br>";
  369. //exit("'onclick='add_toping(".$product_id.", ".$value_data['id'].")'>");
  370. } else {
  371. if(($check_stock == true) && ($stock < 1)) {
  372. $output .= "<option value='".$value_data['id']."' disabled='true'>".$value_data['name']." - ".TXT_WPSC_NO_STOCK."</option>";
  373. } else {
  374. $output .= "<option value='".$value_data['id']."'>".$value_data['name']."</option>";
  375. }
  376. }
  377. $i++;
  378. }
  379. if (get_option("checkbox_variations")=='1') {
  380. $output .= "";
  381. } else {
  382. $output .= "</select>";
  383. }
  384. if($no_div !== true) {
  385. }
  386. }
  387. }
  388. if($update_price === true) {
  389. $first_entry_count = count($first_entries);
  390. if(($first_entry_count >= 1) && ($first_entry_count <= 2)) {
  391. $price = calculate_product_price($product_id, $first_entries);
  392. } else { $price = null; }
  393. return Array($output, $price);
  394. } else {
  395. return $output;
  396. }
  397. }
  398. function variations_add_grid_view($variations) {
  399. global $wpdb;
  400. $variation_count = count($variations);
  401. if(!(($variation_count >= 1) && ($variation_count <= 2))) {
  402. return "";
  403. exit();
  404. }
  405. switch($variation_count) {
  406. case 1:
  407. $variation_name = $wpdb->get_var("SELECT `name` FROM `".$wpdb->prefix."product_variations` WHERE `id` = '".$variations[0]."' ORDER BY `id` ASC LIMIT 1");
  408. $grid_header = str_replace(":variation1:",$variation_name ,TXT_WPSC_VARIATION_GRID_CONTROL_SINGLE);
  409. break;
  410. case 2:
  411. $variation_name1 = $wpdb->get_var("SELECT `name` FROM `".$wpdb->prefix."product_variations` WHERE `id` = '".$variations[0]."' ORDER BY `id` ASC LIMIT 1");
  412. $variation_name2 = $wpdb->get_var("SELECT `name` FROM `".$wpdb->prefix."product_variations` WHERE `id` = '".$variations[1]."' ORDER BY `id` ASC LIMIT 1");
  413. $grid_header = str_replace(Array(":variation1:", ":variation2:"),Array($variation_name1, $variation_name2) ,TXT_WPSC_VARIATION_GRID_CONTROL_PAIR);
  414. break;
  415. }
  416. $output .= "<table class='product_variation_grid'>\n\r";
  417. $output .= " <tr>\n\r";
  418. $output .= " <th colspan='3' class='variation_name'>".$grid_header."</th>\n\r";
  419. $output .= " </tr>\n\r";
  420. $output .= " <tr>\n\r";
  421. $output .= " <td><strong>".TXT_WPSC_VARIATION."</strong></td>\n\r";
  422. $output .= " <td><strong>".TXT_WPSC_STOCK."</strong></td>\n\r";
  423. $output .= " <td><strong>".TXT_WPSC_PRICE."</strong></td>\n\r";
  424. /*
  425. if(count($associated_variations) == 1) {
  426. $output .= " <td><strong>".TXT_WPSC_ASSOCIATEWITHFILE."</strong></td>\n\r";
  427. }
  428. */
  429. $output .= " </tr>\n\r";
  430. if(count($variations) == 2) {
  431. foreach($variations as $key => $variation) {
  432. $associated_variation_values[$key] = $wpdb->get_results("SELECT `{$wpdb->prefix}variation_values`.* FROM `{$wpdb->prefix}variation_values` WHERE `variation_id` = '{$variation}'",ARRAY_A);
  433. }
  434. foreach((array)$associated_variation_values[0] as $associated_variation_value[0]) {
  435. foreach((array)$associated_variation_values[1] as $associated_variation_value[1]) {
  436. $output .= " <tr>\n\r";
  437. $output .= " <td>".str_replace(" ", "&nbsp;", (stripslashes($associated_variation_value[0]['name']).", ".stripslashes($associated_variation_value[1]['name'])))."</td>\n\r";
  438. $output .= " <td><input type='text' name='variation_priceandstock[{$associated_variation_value[0]['id']}][{$associated_variation_value[1]['id']}][stock]' value='' size='3' /></td>\n\r";
  439. $output .= " <td><input type='text' name='variation_priceandstock[{$associated_variation_value[0]['id']}][{$associated_variation_value[1]['id']}][price]' value='' size='6' /></td>\n\r";
  440. $output .= " </tr>\n\r";
  441. }
  442. }
  443. } else {
  444. $variation = $variations[0];
  445. $associated_variation_values = $wpdb->get_results("SELECT `{$wpdb->prefix}variation_values`.* FROM `{$wpdb->prefix}variation_values` WHERE `variation_id` = '{$variation}'",ARRAY_A);
  446. foreach((array)$associated_variation_values as $associated_variation_value) {
  447. $output .= " <tr>\n\r";
  448. $output .= " <td>".str_replace(" ", "&nbsp;", stripslashes($associated_variation_value['name']))."</td>\n\r";
  449. $variation_info = $wpdb->get_row("SELECT id, `stock`,`price`, file FROM `{$wpdb->prefix}variation_priceandstock` WHERE `product_id` = '{$product_id}' AND (`variation_id_1` = '{$associated_variation_value['id']}' AND `variation_id_2` = '0') LIMIT 1",ARRAY_A);
  450. $output .= " <td><input type='text' name='variation_priceandstock[{$associated_variation_value['id']}][0][stock]' value='{$variation_info['stock']}' size='3' /></td>\n\r";
  451. $output .= " <td><input type='text' name='variation_priceandstock[{$associated_variation_value['id']}][0][price]' value='' size='6' /></td>\n\r";
  452. $output .= " </tr>\n\r";
  453. }
  454. }
  455. $output .= "</table>\n\r";
  456. return $output;
  457. }
  458. function update_variation_values($product_id, $variation_values) {
  459. global $wpdb;
  460. $product_id = (int)$product_id;
  461. foreach($variation_values as $key[0] => $variation_row) {
  462. $key[0] = (int)$key[0];
  463. foreach($variation_row as $key[1] => $variation_data) {
  464. // sanitise the input
  465. $key[1] = (int)$key[1];
  466. $variation_price = (float)str_replace(",","",$variation_data['price']);
  467. $variation_stock =(int)$variation_data['stock']; // having 1.2 stock makes no sense unless dealing with different units
  468. $variation_file =(int)(bool)$variation_data['file'];
  469. if(is_numeric($key[0]) && is_numeric($key[1]) && (is_numeric($variation_data['stock']) || is_numeric($variation_data['price']))) {
  470. $variation_stock_data = $wpdb->get_row("SELECT * FROM `{$wpdb->prefix}variation_priceandstock` WHERE `product_id` = '{$product_id}' AND ((`variation_id_1` = '{$key[0]}' AND `variation_id_2` = '{$key[1]}') OR (`variation_id_1` = '{$key[1]}' AND `variation_id_2` = '{$key[0]}')) LIMIT 1",ARRAY_A);
  471. if(is_numeric($variation_stock_data['id'])) {
  472. $variation_sql = null; // return the sql array to null for each trip round the loop
  473. if(($variation_stock_data['stock'] != $variation_stock)) {
  474. $variation_sql[] = "`stock` = '{$variation_stock}'";
  475. }
  476. if(($variation_stock_data['price'] != $variation_price)) {
  477. $variation_sql[] = "`price` = '{$variation_price}'";
  478. }
  479. if(($variation_stock_data['file'] != $variation_file)) {
  480. $variation_sql[] = "`file` = '{$variation_file}'";
  481. }
  482. if($variation_sql != null){
  483. $wpdb->query("UPDATE `".$wpdb->prefix."variation_priceandstock` SET ".implode(",",$variation_sql)."WHERE `id` = '".$variation_stock_data['id']."' LIMIT 1 ;");
  484. }
  485. } else {
  486. $wpdb->query("INSERT INTO `{$wpdb->prefix}variation_priceandstock` ( `product_id` , `variation_id_1` , `variation_id_2` , `stock`, `price` ) VALUES ('{$product_id}', '{$key[0]}', '{$key[1]}', '{$variation_stock}', '{$variation_price}');");
  487. }
  488. }
  489. }
  490. }
  491. }
  492. }
  493. ?>