WP eCommerce - Version 3.8.10

Version Description

  • New: Coupon UI is revamped.
  • New: [Shipwire] Addition of Shipping Services, Economy, Plus & Premium.
  • Change: After filling out a registration form, the user is logged in.
  • Change: Limit quantity of individual products that can be added to the cart. Default value is filterable.
  • Change: Remove FPDF which is not used any more.
  • Change: Return cart item messages as key => value array rather than HTML.
  • Change: Variation table class orderby to 'menu_order title'
  • Change: When displaying packing slip, form data should be output in the same order as that of checkout page.
  • Fix: "you save" prices are not correct on variations with a value over 1000
  • Fix: Cart widget missing closing tag.
  • Fix: Display the "You save" price as a currency, not just a raw unformatted number
  • Fix: Ensure all variations are deleted when deleting a product.
  • Fix: Foreign characters are not displayed correctly in packing slip.
  • Fix: Improved performance with variations.
  • Fix: JavaScript error when no variations exist in admin.
  • Fix: Make sure Add / Edit Product page respects decimal and thousands separators set in Settings->Store->General.
  • Fix: Manual / Test Payment instructions don't appear on transaction results page and email.
  • Fix: Only print Google Analytics scripts on transaction results footer
  • Fix: PHP Warnings when bulk editing variations.
  • Fix: Prevent old paypal express from hijacking new paypal express callback.
  • Fix: Product category pages don't respect pagination and sort order settings.
  • Fix: Re-generate products pages' IDs after plugin reactivation.
  • Fix: Refactor user account page
  • Fix: SQL IN error in wpsc_populate_also_bought_list().
  • Fix: Switching a purchase log status to "Closed Order" doesn't reduce stocks.
  • Fix: WPML compatibility
  • Fix: Wrong cache set for checkout form data.
  • Fix: split() deprecation notice in PHP 5.3+
  • Fix: stripslashes issues when duplicating products.
Download this release

Release Info

Developer JustinSainton
Plugin Icon 128x128 WP eCommerce
Version 3.8.10
Comparing to
See all releases

Code changes from version 3.8.10-beta to 3.8.10

.gitignore DELETED
@@ -1 +0,0 @@
1
- .idea
 
readme.md CHANGED
@@ -15,10 +15,10 @@ If you're looking for general user support, please submit your support request o
15
  Development status
16
  -------------------------
17
 
18
- * The latest stable version is [3.8.9.5](http://wordpress.org/extend/plugins/wp-e-commerce).
19
- * Active development version: 3.8.10-beta (branch [master](https://github.com/wp-e-commerce/WP-e-Commerce))
20
- * [Roadmap for 3.8.10](https://github.com/wp-e-commerce/wp-e-commerce/wiki/Roadmap)
21
- * [3.8.10 tickets](https://github.com/wp-e-commerce/wp-e-commerce/issues?labels=&milestone=4&page=1&sort=updated&state=open)
22
 
23
  How to contribute code
24
  -----------------------------
15
  Development status
16
  -------------------------
17
 
18
+ * The latest stable version is [3.8.10](http://wordpress.org/extend/plugins/wp-e-commerce).
19
+ * Active development version: 3.8.11-dev (branch [master](https://github.com/wp-e-commerce/WP-e-Commerce))
20
+ * [Roadmap for 3.8.11](https://github.com/wp-e-commerce/wp-e-commerce/wiki/Roadmap)
21
+ * [3.8.11 tickets](https://github.com/wp-e-commerce/wp-e-commerce/issues?labels=&milestone=9&page=1&sort=updated&state=open)
22
 
23
  How to contribute code
24
  -----------------------------
readme.txt CHANGED
@@ -1,16 +1,16 @@
1
  === WP e-Commerce ===
2
- Contributors: mufasa, mychelle, garyc40, JustinSainton
3
  Donate link: http://getshopped.org
4
  Tags: e-commerce, wp-e-commerce, shop, cart, paypal, authorize, stock control, ecommerce, shipping, tax
5
- Requires at least: 3.3
6
- Tested up to: 3.5
7
- Stable tag: 3.8.9.5
8
 
9
  WP e-Commerce is a free WordPress Shopping Cart Plugin that lets customers buy your products, services and digital downloads online.
10
 
11
  == Description ==
12
 
13
- We make setting up an ecommerce shop easy, and with over 2 Million downloads, we have unparalleled experience.
14
 
15
  Features:
16
 
1
  === WP e-Commerce ===
2
+ Contributors: mufasa, garyc40, JustinSainton, mychelle
3
  Donate link: http://getshopped.org
4
  Tags: e-commerce, wp-e-commerce, shop, cart, paypal, authorize, stock control, ecommerce, shipping, tax
5
+ Requires at least: 3.4
6
+ Tested up to: 3.6-beta
7
+ Stable tag: 3.8.10
8
 
9
  WP e-Commerce is a free WordPress Shopping Cart Plugin that lets customers buy your products, services and digital downloads online.
10
 
11
  == Description ==
12
 
13
+ We make setting up an ecommerce shop easy, and with over 2.3 Million downloads, we have unparalleled experience.
14
 
15
  Features:
16
 
wp-shopping-cart.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: WP e-Commerce
4
  * Plugin URI: http://getshopped.org/
5
  * Description: A plugin that provides a WordPress Shopping Cart. See also: <a href="http://getshopped.org" target="_blank">GetShopped.org</a> | <a href="http://getshopped.org/forums/" target="_blank">Support Forum</a> | <a href="http://docs.getshopped.org/" target="_blank">Documentation</a>
6
- * Version: 3.8.10-beta
7
  * Author: Instinct Entertainment
8
  * Author URI: http://getshopped.org/
9
  **/
@@ -27,7 +27,7 @@ class WP_eCommerce {
27
  * @uses add_action() Attaches to 'wpsc_components' hook
28
  */
29
  function WP_eCommerce() {
30
- add_action( 'plugins_loaded', array( $this, 'init' ), 8 );
31
  add_action( 'wpsc_components', array( $this, '_register_core_components' ) );
32
  }
33
 
3
  * Plugin Name: WP e-Commerce
4
  * Plugin URI: http://getshopped.org/
5
  * Description: A plugin that provides a WordPress Shopping Cart. See also: <a href="http://getshopped.org" target="_blank">GetShopped.org</a> | <a href="http://getshopped.org/forums/" target="_blank">Support Forum</a> | <a href="http://docs.getshopped.org/" target="_blank">Documentation</a>
6
+ * Version: 3.8.10
7
  * Author: Instinct Entertainment
8
  * Author URI: http://getshopped.org/
9
  **/
27
  * @uses add_action() Attaches to 'wpsc_components' hook
28
  */
29
  function WP_eCommerce() {
30
+ add_action( 'plugins_loaded' , array( $this, 'init' ), 8 );
31
  add_action( 'wpsc_components', array( $this, '_register_core_components' ) );
32
  }
33
 
wpsc-admin/admin.php CHANGED
@@ -1347,7 +1347,7 @@ function wpsc_duplicate_product_process( $post, $new_parent_id = false ) {
1347
  $post_content = $post->post_content;
1348
  $post_content_filtered = $post->post_content_filtered;
1349
  $post_excerpt = $post->post_excerpt;
1350
- $post_title = $post->post_title . " (Duplicate)";
1351
  $post_name = $post->post_name;
1352
  $comment_status = $post->comment_status;
1353
  $ping_status = $post->ping_status;
1347
  $post_content = $post->post_content;
1348
  $post_content_filtered = $post->post_content_filtered;
1349
  $post_excerpt = $post->post_excerpt;
1350
+ $post_title = $post->post_title . ' ' . __( '(Duplicate)', 'wpsc' );
1351
  $post_name = $post->post_name;
1352
  $comment_status = $post->comment_status;
1353
  $ping_status = $post->ping_status;
wpsc-admin/ajax-and-init.php CHANGED
@@ -48,15 +48,6 @@ function wpsc_admin_ajax() {
48
  exit();
49
  }
50
 
51
- if ( isset( $_POST['hide_ecom_dashboard'] ) && $_POST['hide_ecom_dashboard'] == 'true' ) {
52
- require_once (ABSPATH . WPINC . '/rss.php');
53
- $rss = fetch_rss( 'http://www.instinct.co.nz/feed/' );
54
- $rss->items = array_slice( $rss->items, 0, 5 );
55
- $rss_hash = sha1( serialize( $rss->items ) );
56
- update_option( 'wpsc_ecom_news_hash', $rss_hash );
57
- exit( 1 );
58
- }
59
-
60
  if ( isset( $_REQUEST['log_state'] ) && $_REQUEST['log_state'] == "true" && is_numeric( $_POST['id'] ) && is_numeric( $_POST['value'] ) ) {
61
  $newvalue = $_POST['value'];
62
  if ( $_REQUEST['suspend'] == 'true' ) {
48
  exit();
49
  }
50
 
 
 
 
 
 
 
 
 
 
51
  if ( isset( $_REQUEST['log_state'] ) && $_REQUEST['log_state'] == "true" && is_numeric( $_POST['id'] ) && is_numeric( $_POST['value'] ) ) {
52
  $newvalue = $_POST['value'];
53
  if ( $_REQUEST['suspend'] == 'true' ) {
wpsc-admin/display-items.page.php CHANGED
@@ -174,25 +174,28 @@ add_action( 'wpsc_manage_products_column_stock', '_wpsc_manage_products_column_s
174
  * @since 3.8.9
175
  * @access private
176
  *
177
- * @param object $post Post object
178
- * @param int $post_id Post ID
179
- * @param boolean $has_variations Whether the product has variations
180
  *
181
- * @uses get_post_meta() Gets post meta given key and post_id
182
- * @uses wpsc_currency_display() Returns the currency after dealing with how the user wants it to be displayed
183
- * @uses wpsc_product_variation_price_available() Gets the lowest price for the given post_id
184
  */
185
  function _wpsc_manage_products_column_price( $post, $post_id, $has_variations ) {
186
  $price = get_post_meta( $post->ID, '_wpsc_price', true );
187
  $has_var = '1';
188
  if( ! $has_variations ) {
189
  echo wpsc_currency_display( $price );
190
- echo '<div id="inline_' . $post->ID . '_price" class="hidden">' . trim($price) . '</div>';
191
  $has_var = '0';
192
  }
193
  else
194
- echo wpsc_product_variation_price_available( $post->ID ).'+';
195
- echo '<input type="hidden" value="'.$has_var.'" id="inline_' . $post->ID . '_has_var" />';
 
 
 
196
  }
197
  add_action( 'wpsc_manage_products_column_price', '_wpsc_manage_products_column_price', 10, 3 );
198
 
@@ -202,13 +205,13 @@ add_action( 'wpsc_manage_products_column_price', '_wpsc_manage_products_column_p
202
  * @since 3.8.9
203
  * @access private
204
  *
205
- * @param object $post Post object
206
- * @param int $post_id Post ID
207
- * @param boolean $has_variations Whether the product has variations
208
  *
209
- * @uses get_post_meta() Gets post meta given key and post_id
210
- * @uses wpsc_currency_display() Returns currency after taking user display options in to account
211
- * @uses wpsc_product_variation_price_available() Gets the lowest price for the given post_id
212
  */
213
  function _wpsc_manage_products_column_sale_price( $post, $post_id, $has_variations ) {
214
  $price = get_post_meta( $post->ID, '_wpsc_special_price', true );
@@ -216,7 +219,7 @@ function _wpsc_manage_products_column_sale_price( $post, $post_id, $has_variatio
216
  echo wpsc_currency_display( $price );
217
  echo '<div id="inline_' . $post->ID . '_sale_price" class="hidden">' . $price . '</div>';
218
  } else
219
- echo wpsc_product_variation_price_available( $post->ID ).'+';
220
  }
221
  add_action( 'wpsc_manage_products_column_sale_price', '_wpsc_manage_products_column_sale_price', 10, 3 );
222
 
174
  * @since 3.8.9
175
  * @access private
176
  *
177
+ * @param object $post Post object
178
+ * @param int $post_id Post ID
179
+ * @param boolean $has_variations Whether the product has variations
180
  *
181
+ * @uses get_post_meta() Gets post meta given key and post_id
182
+ * @uses wpsc_currency_display() Returns the currency after dealing with how the user wants it to be displayed
183
+ * @uses wpsc_product_variation_price_from() Gets the lowest variation price for the given post_id
184
  */
185
  function _wpsc_manage_products_column_price( $post, $post_id, $has_variations ) {
186
  $price = get_post_meta( $post->ID, '_wpsc_price', true );
187
  $has_var = '1';
188
  if( ! $has_variations ) {
189
  echo wpsc_currency_display( $price );
190
+ echo '<div id="inline_' . $post->ID . '_price" class="hidden">' . trim( $price ) . '</div>';
191
  $has_var = '0';
192
  }
193
  else
194
+ echo wpsc_product_variation_price_from( $post->ID, array(
195
+ 'only_normal_price' => true,
196
+ 'from_text' => '%s+'
197
+ ) );
198
+ echo '<input type="hidden" value="' . $has_var . '" id="inline_' . $post->ID . '_has_var" />';
199
  }
200
  add_action( 'wpsc_manage_products_column_price', '_wpsc_manage_products_column_price', 10, 3 );
201
 
205
  * @since 3.8.9
206
  * @access private
207
  *
208
+ * @param object $post Post object
209
+ * @param int $post_id Post ID
210
+ * @param boolean $has_variations Whether the product has variations
211
  *
212
+ * @uses get_post_meta() Gets post meta given key and post_id
213
+ * @uses wpsc_currency_display() Returns currency after taking user display options in to account
214
+ * @uses wpsc_product_variation_price_from() Gets the lowest variation price for the given post_id
215
  */
216
  function _wpsc_manage_products_column_sale_price( $post, $post_id, $has_variations ) {
217
  $price = get_post_meta( $post->ID, '_wpsc_special_price', true );
219
  echo wpsc_currency_display( $price );
220
  echo '<div id="inline_' . $post->ID . '_sale_price" class="hidden">' . $price . '</div>';
221
  } else
222
+ echo wpsc_product_variation_price_from( $post->ID, array( 'from_text' => '%s+' ) );
223
  }
224
  add_action( 'wpsc_manage_products_column_sale_price', '_wpsc_manage_products_column_sale_price', 10, 3 );
225
 
wpsc-admin/includes/display-items-functions.php CHANGED
@@ -139,7 +139,7 @@ function wpsc_price_control_forms() {
139
 
140
  <?php /* Check product if a product has variations */ ?>
141
  <?php if ( wpsc_product_has_children( $post->ID ) ) : ?>
142
- <?php $price = wpsc_product_variation_price_available( $post->ID ); ?>
143
  <p><?php echo sprintf( __( 'This Product has variations, to edit the price please use the <a href="%s">Variation Controls</a>.' , 'wpsc' ), '#wpsc_product_variation_forms' ); ?></p>
144
  <p><?php printf( __( 'Price: %s and above.' , 'wpsc' ) , $price ); ?></p>
145
  <?php else: ?>
139
 
140
  <?php /* Check product if a product has variations */ ?>
141
  <?php if ( wpsc_product_has_children( $post->ID ) ) : ?>
142
+ <?php $price = wpsc_product_variation_price_from( $post->ID ); ?>
143
  <p><?php echo sprintf( __( 'This Product has variations, to edit the price please use the <a href="%s">Variation Controls</a>.' , 'wpsc' ), '#wpsc_product_variation_forms' ); ?></p>
144
  <p><?php printf( __( 'Price: %s and above.' , 'wpsc' ) , $price ); ?></p>
145
  <?php else: ?>
wpsc-admin/includes/product-variation-list-table.class.php CHANGED
@@ -232,10 +232,19 @@ class WPSC_Product_Variation_List_Table extends WP_List_Table {
232
  <?php
233
  }
234
 
 
 
 
 
 
 
 
235
  public function column_stock( $item ) {
236
- $stock = (int) get_product_meta( $item->ID, 'stock', true );
 
 
237
  ?>
238
- <input type="text" name="wpsc_variations[<?php echo $item->ID; ?>][stock]" value="<?php echo esc_attr( $stock ); ?>" />
239
  <?php
240
  }
241
 
232
  <?php
233
  }
234
 
235
+ /**
236
+ * Stock Column
237
+ *
238
+ * @uses get_product_meta Get product meta data.
239
+ *
240
+ * @param object $item Product
241
+ */
242
  public function column_stock( $item ) {
243
+ $stock = get_product_meta( $item->ID, 'stock', true );
244
+ if ( ! empty( $stock ) )
245
+ $stock = absint( $stock );
246
  ?>
247
+ <input type="text" name="wpsc_variations[<?php echo $item->ID; ?>][stock]" value="<?php echo esc_attr( $stock ); ?>" />
248
  <?php
249
  }
250
 
wpsc-admin/includes/purchase-log-list-table-class.php CHANGED
@@ -124,9 +124,10 @@ class WPSC_Purchase_Log_List_Table extends WP_List_Table {
124
  $where[] = "MONTH(FROM_UNIXTIME(date)) = " . esc_sql( $month );
125
  }
126
 
127
- $selects = implode( ', ', $selects );
128
- $this->joins = implode( ' ', $joins );
129
- $this->where = implode( ' AND ', $where );
 
130
  $limit = ( $this->per_page !== 0 ) ? "LIMIT {$offset}, {$this->per_page}" : '';
131
 
132
  $orderby = empty( $_REQUEST['orderby'] ) ? 'p.id' : 'p.' . $_REQUEST['orderby'];
@@ -136,14 +137,14 @@ class WPSC_Purchase_Log_List_Table extends WP_List_Table {
136
  $order = esc_sql( $order );
137
 
138
  $submitted_data_log = WPSC_TABLE_SUBMITTED_FORM_DATA;
139
- $purchase_log_sql = "
140
  SELECT SQL_CALC_FOUND_ROWS {$selects}
141
  FROM " . WPSC_TABLE_PURCHASE_LOGS . " AS p
142
  {$this->joins}
143
  WHERE {$this->where}
144
  ORDER BY {$orderby} {$order}
145
  {$limit}
146
- ";
147
 
148
  $this->items = apply_filters( 'wpsc_manage_purchase_logs_items', $wpdb->get_results( $purchase_log_sql ) );
149
  if ( $this->per_page ) {
@@ -155,7 +156,7 @@ class WPSC_Purchase_Log_List_Table extends WP_List_Table {
155
  ) );
156
  }
157
 
158
- $total_where = $this->where;
159
  if ( $this->status == 'all' ) {
160
  $total_where .= ' AND p.processed IN (2, 3, 4) ';
161
  }
@@ -290,7 +291,7 @@ class WPSC_Purchase_Log_List_Table extends WP_List_Table {
290
  'all' => sprintf(
291
  '<a href="%s" %s>%s</a>',
292
  esc_url( $all_href ),
293
- sanitize_html_class( $all_class ),
294
  $all_text
295
  ),
296
  );
@@ -316,7 +317,7 @@ class WPSC_Purchase_Log_List_Table extends WP_List_Table {
316
  $views[$status] = sprintf(
317
  '<a href="%s" %s>%s</a>',
318
  esc_url( $href ),
319
- sanitize_html_class( $class ),
320
  $text
321
  );
322
  }
@@ -524,4 +525,4 @@ class WPSC_Purchase_Log_List_Table extends WP_List_Table {
524
 
525
  parent::search_box( $text, $input_id );
526
  }
527
- }
124
  $where[] = "MONTH(FROM_UNIXTIME(date)) = " . esc_sql( $month );
125
  }
126
 
127
+ $selects = apply_filters( 'wpsc_manage_purchase_logs_selects', implode( ', ', $selects ) );
128
+ $this->joins = apply_filters( 'wpsc_manage_purchase_logs_joins', implode( ' ', $joins ) );
129
+ $this->where = apply_filters( 'wpsc_manage_purchase_logs_where', implode( ' AND ', $where ) );
130
+
131
  $limit = ( $this->per_page !== 0 ) ? "LIMIT {$offset}, {$this->per_page}" : '';
132
 
133
  $orderby = empty( $_REQUEST['orderby'] ) ? 'p.id' : 'p.' . $_REQUEST['orderby'];
137
  $order = esc_sql( $order );
138
 
139
  $submitted_data_log = WPSC_TABLE_SUBMITTED_FORM_DATA;
140
+ $purchase_log_sql = apply_filters( 'wpsc_manage_purchase_logs_sql', "
141
  SELECT SQL_CALC_FOUND_ROWS {$selects}
142
  FROM " . WPSC_TABLE_PURCHASE_LOGS . " AS p
143
  {$this->joins}
144
  WHERE {$this->where}
145
  ORDER BY {$orderby} {$order}
146
  {$limit}
147
+ " );
148
 
149
  $this->items = apply_filters( 'wpsc_manage_purchase_logs_items', $wpdb->get_results( $purchase_log_sql ) );
150
  if ( $this->per_page ) {
156
  ) );
157
  }
158
 
159
+ $total_where = apply_filters( 'wpsc_manage_purchase_logs_total_where', $this->where );
160
  if ( $this->status == 'all' ) {
161
  $total_where .= ' AND p.processed IN (2, 3, 4) ';
162
  }
291
  'all' => sprintf(
292
  '<a href="%s" %s>%s</a>',
293
  esc_url( $all_href ),
294
+ $all_class,
295
  $all_text
296
  ),
297
  );
317
  $views[$status] = sprintf(
318
  '<a href="%s" %s>%s</a>',
319
  esc_url( $href ),
320
+ $class,
321
  $text
322
  );
323
  }
525
 
526
  parent::search_box( $text, $input_id );
527
  }
528
+ }
wpsc-admin/includes/updating-functions.php CHANGED
@@ -728,7 +728,7 @@ function wpsc_convert_variation_combinations() {
728
  $post_data['_wpsc_product_metadata']['display_weight_as'] = $variation_item->weight_unit;
729
  $post_data['_wpsc_product_metadata']['weight_unit'] = $variation_item->weight_unit;
730
 
731
- // Parts of the code (eg wpsc_product_variation_price_available() make the assumption that these meta keys exist
732
  $post_data['_wpsc_special_price'] = 0;
733
  $post_data['_wpsc_sku'] = '';
734
 
728
  $post_data['_wpsc_product_metadata']['display_weight_as'] = $variation_item->weight_unit;
729
  $post_data['_wpsc_product_metadata']['weight_unit'] = $variation_item->weight_unit;
730
 
731
+ // Parts of the code (eg wpsc_product_variation_price_from() make the assumption that these meta keys exist
732
  $post_data['_wpsc_special_price'] = 0;
733
  $post_data['_wpsc_sku'] = '';
734
 
wpsc-admin/init.php CHANGED
@@ -140,12 +140,19 @@ function wpsc_purchase_log_csv() {
140
 
141
  $output = '';
142
 
 
 
 
 
 
 
 
 
143
  foreach ( (array)$data as $purchase ) {
144
  $form_headers = '';
145
  $output .= "\"" . $purchase['id'] . "\","; //Purchase ID
146
  $output .= "\"" . $purchase['totalprice'] . "\","; //Purchase Total
147
  foreach ( (array)$form_data as $form_field ) {
148
- $form_headers_array[] = $form_field['unique_name'];
149
  $collected_data_sql = "SELECT * FROM `" . WPSC_TABLE_SUBMITTED_FORM_DATA . "` WHERE `log_id` = '" . $purchase['id'] . "' AND `form_id` = '" . $form_field['id'] . "' LIMIT 1";
150
  $collected_data = $wpdb->get_results( $collected_data_sql, ARRAY_A );
151
  $collected_data = $collected_data[0];
@@ -187,10 +194,10 @@ function wpsc_purchase_log_csv() {
187
  $headers3[] = _x( 'SKU', 'purchase log csv headers', 'wpsc' );
188
  }
189
 
190
- $headers = '"' . implode( '","', $headers_array ) . '"';
191
- $form_headers = '"' . implode( '","', $form_headers_array ) . '"';
192
- $headers2 = '"' . implode( '","', $headers2_array ) . '"';
193
- $headers3 = '"' . implode( '","', $headers3_array ) . '"';
194
 
195
  $headers = apply_filters( 'wpsc_purchase_log_csv_headers', $headers . $form_headers . $headers2 . $headers3, $data, $form_data );
196
  $output = apply_filters( 'wpsc_purchase_log_csv_output', $output, $data, $form_data );
140
 
141
  $output = '';
142
 
143
+ foreach ( (array)$form_data as $form_field ) {
144
+ if ( empty ( $form_field['unique_name'] ) ) {
145
+ $form_headers_array[] = $form_field['name'];
146
+ } else {
147
+ $form_headers_array[] = $form_field['unique_name'];
148
+ }
149
+ }
150
+
151
  foreach ( (array)$data as $purchase ) {
152
  $form_headers = '';
153
  $output .= "\"" . $purchase['id'] . "\","; //Purchase ID
154
  $output .= "\"" . $purchase['totalprice'] . "\","; //Purchase Total
155
  foreach ( (array)$form_data as $form_field ) {
 
156
  $collected_data_sql = "SELECT * FROM `" . WPSC_TABLE_SUBMITTED_FORM_DATA . "` WHERE `log_id` = '" . $purchase['id'] . "' AND `form_id` = '" . $form_field['id'] . "' LIMIT 1";
157
  $collected_data = $wpdb->get_results( $collected_data_sql, ARRAY_A );
158
  $collected_data = $collected_data[0];
194
  $headers3[] = _x( 'SKU', 'purchase log csv headers', 'wpsc' );
195
  }
196
 
197
+ $headers = '"' . implode( '","', $headers_array ) . '",';
198
+ $form_headers = '"' . implode( '","', $form_headers_array ) . '",';
199
+ $headers2 = '"' . implode( '","', $headers2_array ) . '",';
200
+ $headers3 = '"' . implode( '","', $headers3 ) . '"';
201
 
202
  $headers = apply_filters( 'wpsc_purchase_log_csv_headers', $headers . $form_headers . $headers2 . $headers3, $data, $form_data );
203
  $output = apply_filters( 'wpsc_purchase_log_csv_output', $output, $data, $form_data );
wpsc-core/js/sharethis.css ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ #wpsc_akst_form {
3
+ background: #999;
4
+ border: 1px solid #ddd;
5
+ display: none;
6
+ position: absolute;
7
+ width: 350px;
8
+ z-index: 999;
9
+ }
10
+ #wpsc_akst_form a.akst_close {
11
+ color: #fff;
12
+ float: right;
13
+ margin: 5px;
14
+ }
15
+ #wpsc_akst_form ul.tabs {
16
+ border: 1px solid #999;
17
+ list-style: none;
18
+ margin: 10px 10px 0 10px;
19
+ padding: 0;
20
+ }
21
+ #wpsc_akst_form ul.tabs li {
22
+ background: #ccc;
23
+ border-bottom: 1px solid #999;
24
+ cursor: pointer;
25
+ float: left;
26
+ margin: 0 3px 0 0;
27
+ padding: 3px 5px 2px 5px;
28
+ }
29
+ #wpsc_akst_form ul.tabs li.selected {
30
+ background: #fff;
31
+ border-bottom: 1px solid #fff;
32
+ cursor: default;
33
+ padding: 4px 5px 1px 5px;
34
+ }
35
+ #wpsc_akst_form div.clear {
36
+ clear: both;
37
+ float: none;
38
+ }
39
+ #wpsc_akst_social,
40
+ #wpsc_akst_email {
41
+ background: #fff;
42
+ border: 1px solid #fff;
43
+ padding: 10px;
44
+ }
45
+ #wpsc_akst_social ul {
46
+ list-style: none;
47
+ margin: 0;
48
+ padding: 0;
49
+ }
50
+ #wpsc_akst_social ul li {
51
+ float: left;
52
+ margin: 0;
53
+ padding: 0;
54
+ width: 45%;
55
+ }
56
+ #wpsc_akst_social ul li a {
57
+ background-position: 0px 2px;
58
+ background-repeat: no-repeat;
59
+ display: block;
60
+ float: left;
61
+ height: 24px;
62
+ padding: 4px 0 0 22px;
63
+ vertical-align: middle;
64
+ }
65
+
66
+ #wpsc_akst_delicious { background-image: url(../wpsc-core/images/social_networking/delicious.gif); }
67
+ #wpsc_akst_digg { background-image: url(../wpsc-core/images/social_networking/digg.gif); }
68
+ #wpsc_akst_furl { background-image: url(../wpsc-core/images/social_networking/furl.gif); }
69
+ #wpsc_akst_netscape { background-image: url(../wpsc-core/images/social_networking/netscape.gif); }
70
+ #wpsc_akst_yahoo_myweb { background-image: url(../wpsc-core/images/social_networking/yahoo_myweb.gif); }
71
+ #wpsc_akst_stumbleupon { background-image: url(../wpsc-core/images/social_networking/stumbleupon.gif); }
72
+ #wpsc_akst_google_bmarks { background-image: url(../wpsc-core/images/social_networking/google_bmarks.gif); }
73
+ #wpsc_akst_technorati { background-image: url(../wpsc-core/images/social_networking/technorati.gif); }
74
+ #wpsc_akst_blinklist { background-image: url(../wpsc-core/images/social_networking/blinklist.gif); }
75
+ #wpsc_akst_newsvine { background-image: url(../wpsc-core/images/social_networking/newsvine.gif); }
76
+ #wpsc_akst_magnolia { background-image: url(../wpsc-core/images/social_networking/magnolia.gif); }
77
+ #wpsc_akst_reddit { background-image: url(../wpsc-core/images/social_networking/reddit.gif); }
78
+ #wpsc_akst_windows_live { background-image: url(../wpsc-core/images/social_networking/windows_live.gif); }
79
+ #wpsc_akst_tailrank { background-image: url(../wpsc-core/images/social_networking/tailrank.gif); }
80
+
81
+ #wpsc_akst_email {
82
+ display: none;
83
+ text-align: left;
84
+ }
85
+ #wpsc_akst_email form,
86
+ #wpsc_akst_email fieldset {
87
+ border: 0;
88
+ margin: 0;
89
+ padding: 0;
90
+ }
91
+ #wpsc_akst_email fieldset legend {
92
+ display: none;
93
+ }
94
+ #wpsc_akst_email ul {
95
+ list-style: none;
96
+ margin: 0;
97
+ padding: 0;
98
+ }
99
+ #wpsc_akst_email ul li {
100
+ margin: 0 0 7px 0;
101
+ padding: 0;
102
+ }
103
+ #wpsc_akst_email ul li label {
104
+ color: #555;
105
+ display: block;
106
+ margin-bottom: 3px;
107
+ }
108
+ #wpsc_akst_email ul li input {
109
+ padding: 3px 10px;
110
+ }
111
+ #wpsc_akst_email ul li input.akst_text {
112
+ padding: 3px;
113
+ width: 280px;
114
+ }
115
+ .wpsc_akst_share_link {
116
+ display: block;
117
+ margin: 0px 0px 6px 0px;
118
+ width: 119px;
119
+ }
wpsc-core/js/sharethis.js ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ // The following is all for Share this.
3
+ function wpsc_akst_share(id, url, title) {
4
+ if ((jQuery('#wpsc_akst_form').css("display") == 'block') && (jQuery('#wpsc_akst_post_id').attr("value") == id)) {
5
+ jQuery('#wpsc_akst_form').css("display", "none");
6
+ return;
7
+ }
8
+
9
+ var offset = {};
10
+ new_container_offset = jQuery('#wpsc_akst_link_' + id).offset();
11
+
12
+ if (offset['left'] == null) {
13
+ offset['left'] = new_container_offset.left;
14
+ offset['top'] = new_container_offset.top;
15
+ }
16
+
17
+ jQuery("#wpsc_akst_delicious").attr("href", wpsc_akst_share_url("http://del.icio.us/post?url={url}&title={title}", url, title));
18
+ jQuery("#wpsc_akst_digg").attr("href", wpsc_akst_share_url("http://digg.com/submit?phase=2&url={url}&title={title}", url, title));
19
+ jQuery("#wpsc_akst_furl").attr("href", wpsc_akst_share_url("http://furl.net/storeIt.jsp?u={url}&t={title}", url, title));
20
+ jQuery("#wpsc_akst_netscape").attr("href", wpsc_akst_share_url(" http://www.netscape.com/submit/?U={url}&T={title}", url, title));
21
+ jQuery("#wpsc_akst_yahoo_myweb").attr("href", wpsc_akst_share_url("http://myweb2.search.yahoo.com/myresults/bookmarklet?u={url}&t={title}", url, title));
22
+ jQuery("#wpsc_akst_stumbleupon").attr("href", wpsc_akst_share_url("http://www.stumbleupon.com/submit?url={url}&title={title}", url, title));
23
+ jQuery("#wpsc_akst_google_bmarks").attr("href", wpsc_akst_share_url(" http://www.google.com/bookmarks/mark?op=edit&bkmk={url}&title={title}", url, title));
24
+ jQuery("#wpsc_akst_technorati").attr("href", wpsc_akst_share_url("http://www.technorati.com/faves?add={url}", url, title));
25
+ jQuery("#wpsc_akst_blinklist").attr("href", wpsc_akst_share_url("http://blinklist.com/index.php?Action=Blink/addblink.php&Url={url}&Title={title}", url, title));
26
+ jQuery("#wpsc_akst_newsvine").attr("href", wpsc_akst_share_url("http://www.newsvine.com/_wine/save?u={url}&h={title}", url, title));
27
+ jQuery("#wpsc_akst_magnolia").attr("href", wpsc_akst_share_url("http://ma.gnolia.com/bookmarklet/add?url={url}&title={title}", url, title));
28
+ jQuery("#wpsc_akst_reddit").attr("href", wpsc_akst_share_url("http://reddit.com/submit?url={url}&title={title}", url, title));
29
+ jQuery("#wpsc_akst_windows_live").attr("href", wpsc_akst_share_url("https://favorites.live.com/quickadd.aspx?marklet=1&mkt=en-us&url={url}&title={title}&top=1", url, title));
30
+ jQuery("#wpsc_akst_tailrank").attr("href", wpsc_akst_share_url("http://tailrank.com/share/?link_href={url}&title={title}", url, title));
31
+
32
+ jQuery('#wpsc_akst_post_id').value = id;
33
+ jQuery('#wpsc_akst_form').css("left", offset['left'] + 'px');
34
+ jQuery('#wpsc_akst_form').css("top", (offset['top']+ 14 + 3) + 'px');
35
+ jQuery('#wpsc_akst_form').css("display", 'block');
36
+ }
37
+
38
+ function wpsc_akst_share_url(base, url, title) {
39
+ base = base.replace('{url}', url);
40
+ return base.replace('{title}', title);
41
+ }
42
+
43
+ function wpsc_akst_share_tab(tab) {
44
+ var tab1 = document.getElementById('wpsc_akst_tab1');
45
+ var tab2 = document.getElementById('wpsc_akst_tab2');
46
+ var body1 = document.getElementById('wpsc_akst_social');
47
+ var body2 = document.getElementById('wpsc_akst_email');
48
+
49
+ switch (tab) {
50
+ case '1':
51
+ tab2.className = '';
52
+ tab1.className = 'selected';
53
+ body2.style.display = 'none';
54
+ body1.style.display = 'block';
55
+ break;
56
+ case '2':
57
+ tab1.className = '';
58
+ tab2.className = 'selected';
59
+ body1.style.display = 'none';
60
+ body2.style.display = 'block';
61
+ break;
62
+ }
63
+ }
wpsc-core/js/wp-e-commerce.js CHANGED
@@ -1,67 +1,3 @@
1
- //The following is all for Share this.
2
- function wpsc_akst_share(id, url, title) {
3
- if ((jQuery('#wpsc_akst_form').css("display") == 'block') && (jQuery('#wpsc_akst_post_id').attr("value") == id)) {
4
- jQuery('#wpsc_akst_form').css("display", "none");
5
- return;
6
- }
7
-
8
-
9
- var offset = {};
10
- new_container_offset = jQuery('#wpsc_akst_link_' + id).offset();
11
-
12
- if(offset['left'] == null) {
13
- offset['left'] = new_container_offset.left;
14
- offset['top'] = new_container_offset.top;
15
- }
16
-
17
- jQuery("#wpsc_akst_delicious").attr("href", wpsc_akst_share_url("http://del.icio.us/post?url={url}&title={title}", url, title));
18
- jQuery("#wpsc_akst_digg").attr("href", wpsc_akst_share_url("http://digg.com/submit?phase=2&url={url}&title={title}", url, title));
19
- jQuery("#wpsc_akst_furl").attr("href", wpsc_akst_share_url("http://furl.net/storeIt.jsp?u={url}&t={title}", url, title));
20
- jQuery("#wpsc_akst_netscape").attr("href", wpsc_akst_share_url(" http://www.netscape.com/submit/?U={url}&T={title}", url, title));
21
- jQuery("#wpsc_akst_yahoo_myweb").attr("href", wpsc_akst_share_url("http://myweb2.search.yahoo.com/myresults/bookmarklet?u={url}&t={title}", url, title));
22
- jQuery("#wpsc_akst_stumbleupon").attr("href", wpsc_akst_share_url("http://www.stumbleupon.com/submit?url={url}&title={title}", url, title));
23
- jQuery("#wpsc_akst_google_bmarks").attr("href", wpsc_akst_share_url(" http://www.google.com/bookmarks/mark?op=edit&bkmk={url}&title={title}", url, title));
24
- jQuery("#wpsc_akst_technorati").attr("href", wpsc_akst_share_url("http://www.technorati.com/faves?add={url}", url, title));
25
- jQuery("#wpsc_akst_blinklist").attr("href", wpsc_akst_share_url("http://blinklist.com/index.php?Action=Blink/addblink.php&Url={url}&Title={title}", url, title));
26
- jQuery("#wpsc_akst_newsvine").attr("href", wpsc_akst_share_url("http://www.newsvine.com/_wine/save?u={url}&h={title}", url, title));
27
- jQuery("#wpsc_akst_magnolia").attr("href", wpsc_akst_share_url("http://ma.gnolia.com/bookmarklet/add?url={url}&title={title}", url, title));
28
- jQuery("#wpsc_akst_reddit").attr("href", wpsc_akst_share_url("http://reddit.com/submit?url={url}&title={title}", url, title));
29
- jQuery("#wpsc_akst_windows_live").attr("href", wpsc_akst_share_url("https://favorites.live.com/quickadd.aspx?marklet=1&mkt=en-us&url={url}&title={title}&top=1", url, title));
30
- jQuery("#wpsc_akst_tailrank").attr("href", wpsc_akst_share_url("http://tailrank.com/share/?link_href={url}&title={title}", url, title));
31
-
32
- jQuery('#wpsc_akst_post_id').value = id;
33
- jQuery('#wpsc_akst_form').css("left", offset['left'] + 'px');
34
- jQuery('#wpsc_akst_form').css("top", (offset['top']+ 14 + 3) + 'px');
35
- jQuery('#wpsc_akst_form').css("display", 'block');
36
- }
37
-
38
- function wpsc_akst_share_url(base, url, title) {
39
- base = base.replace('{url}', url);
40
- return base.replace('{title}', title);
41
- }
42
-
43
- function wpsc_akst_share_tab(tab) {
44
- var tab1 = document.getElementById('wpsc_akst_tab1');
45
- var tab2 = document.getElementById('wpsc_akst_tab2');
46
- var body1 = document.getElementById('wpsc_akst_social');
47
- var body2 = document.getElementById('wpsc_akst_email');
48
-
49
- switch (tab) {
50
- case '1':
51
- tab2.className = '';
52
- tab1.className = 'selected';
53
- body2.style.display = 'none';
54
- body1.style.display = 'block';
55
- break;
56
- case '2':
57
- tab1.className = '';
58
- tab2.className = 'selected';
59
- body1.style.display = 'none';
60
- body2.style.display = 'block';
61
- break;
62
- }
63
- }
64
- //End Share this JS
65
 
66
  function wpsc_shipping_same_as_billing(){
67
  var billing_state_input = jQuery('input[title="billingstate"]');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
 
2
  function wpsc_shipping_same_as_billing(){
3
  var billing_state_input = jQuery('input[title="billingstate"]');
wpsc-core/wpsc-constants.php CHANGED
@@ -30,9 +30,9 @@ function wpsc_core_constants() {
30
  if(!defined('WPSC_URL'))
31
  define( 'WPSC_URL', plugins_url( '', __FILE__ ) );
32
  // Define Plugin version
33
- define( 'WPSC_VERSION', '3.8.10-beta' );
34
- define( 'WPSC_MINOR_VERSION', '21170b4' );
35
- define( 'WPSC_PRESENTABLE_VERSION', '3.8.10-beta' );
36
  define( 'WPSC_DB_VERSION', 3 );
37
 
38
  // Define Debug Variables for developers
30
  if(!defined('WPSC_URL'))
31
  define( 'WPSC_URL', plugins_url( '', __FILE__ ) );
32
  // Define Plugin version
33
+ define( 'WPSC_VERSION', '3.8.10' );
34
+ define( 'WPSC_MINOR_VERSION', '43bd4ec9a6' );
35
+ define( 'WPSC_PRESENTABLE_VERSION', '3.8.10' );
36
  define( 'WPSC_DB_VERSION', 3 );
37
 
38
  // Define Debug Variables for developers
wpsc-core/wpsc-deprecated.php CHANGED
@@ -1320,3 +1320,24 @@ function wpsc_rage_where( $where ) {
1320
  _wpsc_deprecated_function( __FUNCTION__, '3.8.8', 'wpsc_range_where()' );
1321
  return wpsc_range_where( $where );
1322
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1320
  _wpsc_deprecated_function( __FUNCTION__, '3.8.8', 'wpsc_range_where()' );
1321
  return wpsc_range_where( $where );
1322
  }
1323
+
1324
+ /**
1325
+ * WPSC Product Variation Price Available
1326
+ * Gets the formatted lowest price of a product's available variations.
1327
+ *
1328
+ * @param $product_id (int) Product ID
1329
+ * @param $from_text (string) From text with price placeholder eg. 'from %s'
1330
+ * @param $only_normal_price (bool) Don't show sale price
1331
+ * @return (string) Number formatted price
1332
+ *
1333
+ * @uses wpsc_product_variation_price_from()
1334
+ */
1335
+ function wpsc_product_variation_price_available( $product_id, $from_text = false, $only_normal_price = false ) {
1336
+ _wpsc_deprecated_function( __FUNCTION__, '3.8.10', 'wpsc_product_variation_price_from()' );
1337
+ $args = array(
1338
+ 'from_text' => $from_text,
1339
+ 'only_normal_price' => $only_normal_price,
1340
+ 'only_in_stock' => true
1341
+ );
1342
+ return wpsc_product_variation_price_from( $product_id, $args );
1343
+ }
wpsc-core/wpsc-functions.php CHANGED
@@ -741,7 +741,7 @@ function wpsc_start_the_query() {
741
  $wpsc_query_vars['term'] = get_query_var( 'term' );
742
  }else{
743
  $wpsc_query_vars['post_type'] = 'wpsc-product';
744
- $wpsc_query_vars['pagename'] = 'products-page';
745
  }
746
  if(1 == get_option('use_pagination')){
747
  $wpsc_query_vars['nopaging'] = false;
@@ -1903,3 +1903,18 @@ function wpsc_get_product_terms( $product_id, $tax, $field = '' ) {
1903
  return $terms;
1904
  }
1905
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
741
  $wpsc_query_vars['term'] = get_query_var( 'term' );
742
  }else{
743
  $wpsc_query_vars['post_type'] = 'wpsc-product';
744
+ $wpsc_query_vars['pagename'] = wpsc_get_page_slug( '[productspage]' );
745
  }
746
  if(1 == get_option('use_pagination')){
747
  $wpsc_query_vars['nopaging'] = false;
1903
  return $terms;
1904
  }
1905
 
1906
+ /**
1907
+ * Returns page slug that corresponds to a given WPEC-specific shortcode.
1908
+ *
1909
+ * @since 3.8.10
1910
+ *
1911
+ * @uses wpsc_get_the_post_id_by_shortcode() Gets page ID of shortcode.
1912
+ * @uses get_post_field() Returns post name of page ID.
1913
+ *
1914
+ * @param string $shortcode Shortcode of WPEC-specific page, e.g. '[productspage]''
1915
+ * @return string Post slug
1916
+ */
1917
+ function wpsc_get_page_slug( $shortcode ) {
1918
+ $id = wpsc_get_the_post_id_by_shortcode( $shortcode );
1919
+ return get_post_field( 'post_name', $id );
1920
+ }
wpsc-core/wpsc-installer.php CHANGED
@@ -142,6 +142,7 @@ function wpsc_install() {
142
  add_option( 'do_not_use_shipping', '1', '', 'yes' );
143
 
144
  add_option( 'postage_and_packaging', '0','', 'yes' );
 
145
 
146
  add_option( 'purch_log_email', '', '', 'yes' );
147
  add_option( 'return_email', '', '', 'yes' );
@@ -811,4 +812,4 @@ function wpsc_3882_database_updates() {
811
  // Update option to database to indicate that we have patched this.
812
  update_option( 'wpsc_version', '3.8.8.2' );
813
 
814
- }
142
  add_option( 'do_not_use_shipping', '1', '', 'yes' );
143
 
144
  add_option( 'postage_and_packaging', '0','', 'yes' );
145
+ add_option( 'shipwire', '0', '', 'yes' );
146
 
147
  add_option( 'purch_log_email', '', '', 'yes' );
148
  add_option( 'return_email', '', '', 'yes' );
812
  // Update option to database to indicate that we have patched this.
813
  update_option( 'wpsc_version', '3.8.8.2' );
814
 
815
+ }
wpsc-includes/country.class.php CHANGED
@@ -1,6 +1,5 @@
1
  <?php
2
- class WPSC_Country
3
- {
4
  private static $string_cols = array(
5
  'country',
6
  'isocode',
@@ -338,4 +337,4 @@ function wpsc_get_country_dropdown( $args = '' ) {
338
 
339
  function wpsc_country_dropdown( $args = '' ) {
340
  echo wpsc_get_country_dropdown( $args );
341
- }
1
  <?php
2
+ class WPSC_Country {
 
3
  private static $string_cols = array(
4
  'country',
5
  'isocode',
337
 
338
  function wpsc_country_dropdown( $args = '' ) {
339
  echo wpsc_get_country_dropdown( $args );
340
+ }
wpsc-includes/meta.functions.php CHANGED
@@ -267,4 +267,3 @@ class wpsc_custom_meta {
267
  }
268
  }
269
  }
270
- ?>
267
  }
268
  }
269
  }
 
wpsc-includes/processing.functions.php CHANGED
@@ -139,7 +139,7 @@ function wpsc_decrement_claimed_stock($purchase_log_id) {
139
  if ( ! empty( $product_meta["unpublish_when_none_left"] ) ) {
140
  $result = wp_update_post( array(
141
  'ID' => $product->ID,
142
- 'post_status' => $draft,
143
  ) );
144
 
145
  if ( $result )
139
  if ( ! empty( $product_meta["unpublish_when_none_left"] ) ) {
140
  $result = wp_update_post( array(
141
  'ID' => $product->ID,
142
+ 'post_status' => 'draft',
143
  ) );
144
 
145
  if ( $result )
wpsc-includes/product-template.php CHANGED
@@ -355,30 +355,44 @@ function wpsc_show_pnp(){
355
  return true;
356
  return false;
357
  }
 
358
  /**
359
- * wpsc_product_variation_price_available function
360
- * Checks for the lowest price of a products variations
361
- *
362
- * @return $price (string) number formatted price
363
- */
364
- function wpsc_product_variation_price_available( $product_id, $from_text = false, $only_normal_price = false ){
365
- static $price_data = array();
 
 
 
 
 
 
366
  global $wpdb;
 
 
 
 
 
 
 
367
 
368
  if ( isset( $price_data[$product_id] ) ) {
369
  $results = $price_data[$product_id];
370
  } else {
 
 
 
371
  $sql = $wpdb->prepare( "
372
  SELECT pm.meta_value AS price, pm2.meta_value AS special_price
373
  FROM {$wpdb->posts} AS p
374
  INNER JOIN {$wpdb->postmeta} AS pm ON pm.post_id = p.id AND pm.meta_key = '_wpsc_price'
375
  INNER JOIN {$wpdb->postmeta} AS pm2 ON pm2.post_id = p.id AND pm2.meta_key = '_wpsc_special_price'
376
- INNER JOIN {$wpdb->postmeta} AS pm3 ON pm3.post_id = p.id AND pm3.meta_key = '_wpsc_stock' AND pm3.meta_value != '0'
377
-
378
- WHERE
379
- p.post_type = 'wpsc-product'
380
- AND
381
- p.post_parent = %d
382
  ", $product_id );
383
 
384
  $results = $wpdb->get_results( $sql );
@@ -389,7 +403,7 @@ function wpsc_product_variation_price_available( $product_id, $from_text = false
389
 
390
  foreach ( $results as $row ) {
391
  $price = (float) $row->price;
392
- if ( ! $only_normal_price ) {
393
  $special_price = (float) $row->special_price;
394
  if ( $special_price != 0 && $special_price < $price )
395
  $price = $special_price;
@@ -404,10 +418,10 @@ function wpsc_product_variation_price_available( $product_id, $from_text = false
404
  $price = wpsc_currency_display( $price, array( 'display_as_html' => false ) );
405
 
406
  if ( isset( $prices[0] ) && $prices[0] == $prices[count( $prices ) - 1] )
407
- $from_text = false;
408
 
409
- if ( $from_text )
410
- $price = sprintf( $from_text, $price );
411
 
412
  return $price;
413
  }
@@ -422,8 +436,18 @@ function wpsc_product_normal_price() {
422
  }
423
 
424
  /**
425
- * wpsc product price function
426
- * @return string - the product price
 
 
 
 
 
 
 
 
 
 
427
  */
428
  function wpsc_the_product_price( $no_decimals = false, $only_normal_price = false, $product_id = 0 ) {
429
  global $wpsc_query, $wpsc_variations, $wpdb;
@@ -434,7 +458,10 @@ function wpsc_the_product_price( $no_decimals = false, $only_normal_price = fals
434
  if ( wpsc_product_has_variations( $product_id ) ) {
435
  $from_text = __( ' from %s', 'wpsc' );
436
  $from_text = apply_filters( 'wpsc_product_variation_text', $from_text );
437
- $output = wpsc_product_variation_price_available( $product_id, $from_text, $only_normal_price );
 
 
 
438
  } else {
439
  $price = $full_price = get_post_meta( $product_id, '_wpsc_price', true );
440
 
@@ -1850,6 +1877,26 @@ function wpsc_product_has_variations( $id = 0 ) {
1850
  return $has_variations[$id];
1851
  }
1852
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1853
  function wpsc_the_product_price_display( $args = array() ) {
1854
  if ( empty( $args['id'] ) )
1855
  $id = get_the_ID();
@@ -1906,8 +1953,8 @@ function wpsc_the_product_price_display( $args = array() ) {
1906
  // a specific variation
1907
  $show_you_save = false;
1908
 
1909
- $old_price_number = wpsc_product_variation_price_available( $id, false, true );
1910
- $current_price_number = wpsc_product_variation_price_available( $id, false, false );
1911
 
1912
  // if coincidentally, one of the variations are not on special, but its price is equal to
1913
  // or lower than the lowest variation sale price, old price should be hidden, and current
355
  return true;
356
  return false;
357
  }
358
+
359
  /**
360
+ * WPSC Product Variation Price From
361
+ * Gets the formatted lowest price of a product's variations.
362
+ *
363
+ * @since 3.8.10
364
+ *
365
+ * @param $product_id (int) Product ID
366
+ * @param $args (array) Array of options
367
+ * @return (string) Number formatted price
368
+ *
369
+ * @uses apply_filters() Calls 'wpsc_do_convert_price' passing price and product ID.
370
+ * @uses wpsc_currency_display() Passing price and args.
371
+ */
372
+ function wpsc_product_variation_price_from( $product_id, $args = null ) {
373
  global $wpdb;
374
+ $args = wp_parse_args( $args, array(
375
+ 'from_text' => false,
376
+ 'only_normal_price' => false,
377
+ 'only_in_stock' => false
378
+ ) );
379
+
380
+ static $price_data = array();
381
 
382
  if ( isset( $price_data[$product_id] ) ) {
383
  $results = $price_data[$product_id];
384
  } else {
385
+ $stock_sql = '';
386
+ if ( $args['only_in_stock'] )
387
+ $stock_sql = "INNER JOIN {$wpdb->postmeta} AS pm3 ON pm3.post_id = p.id AND pm3.meta_key = '_wpsc_stock' AND pm3.meta_value != '0'";
388
  $sql = $wpdb->prepare( "
389
  SELECT pm.meta_value AS price, pm2.meta_value AS special_price
390
  FROM {$wpdb->posts} AS p
391
  INNER JOIN {$wpdb->postmeta} AS pm ON pm.post_id = p.id AND pm.meta_key = '_wpsc_price'
392
  INNER JOIN {$wpdb->postmeta} AS pm2 ON pm2.post_id = p.id AND pm2.meta_key = '_wpsc_special_price'
393
+ $stock_sql
394
+ WHERE p.post_type = 'wpsc-product'
395
+ AND p.post_parent = %d
 
 
 
396
  ", $product_id );
397
 
398
  $results = $wpdb->get_results( $sql );
403
 
404
  foreach ( $results as $row ) {
405
  $price = (float) $row->price;
406
+ if ( ! $args['only_normal_price'] ) {
407
  $special_price = (float) $row->special_price;
408
  if ( $special_price != 0 && $special_price < $price )
409
  $price = $special_price;
418
  $price = wpsc_currency_display( $price, array( 'display_as_html' => false ) );
419
 
420
  if ( isset( $prices[0] ) && $prices[0] == $prices[count( $prices ) - 1] )
421
+ $args['from_text'] = false;
422
 
423
+ if ( $args['from_text'] )
424
+ $price = sprintf( $args['from_text'], $price );
425
 
426
  return $price;
427
  }
436
  }
437
 
438
  /**
439
+ * WPSC Product Price
440
+ *
441
+ * @param $no_decimals (bool) Don't show decimals
442
+ * @param $only_normal_price (bool) Don't show sale price
443
+ * @param $product_id (int) Product ID
444
+ * @return (string) Formatted product price
445
+ *
446
+ * @uses apply_filters() Calls 'wpsc_product_variation_text' passing "from" text.
447
+ * @uses apply_filters() Calls 'wpsc_do_convert_price' passing price and product ID.
448
+ * @uses wpsc_product_has_variations() Check if product has variations passing product ID.
449
+ * @uses wpsc_product_variation_price_from() Passing product ID and options.
450
+ * @uses wpsc_currency_display() Passing price and args.
451
  */
452
  function wpsc_the_product_price( $no_decimals = false, $only_normal_price = false, $product_id = 0 ) {
453
  global $wpsc_query, $wpsc_variations, $wpdb;
458
  if ( wpsc_product_has_variations( $product_id ) ) {
459
  $from_text = __( ' from %s', 'wpsc' );
460
  $from_text = apply_filters( 'wpsc_product_variation_text', $from_text );
461
+ $output = wpsc_product_variation_price_from( $product_id, array(
462
+ 'from_text' => $from_text,
463
+ 'only_normal_price' => $only_normal_price
464
+ ) );
465
  } else {
466
  $price = $full_price = get_post_meta( $product_id, '_wpsc_price', true );
467
 
1877
  return $has_variations[$id];
1878
  }
1879
 
1880
+ /**
1881
+ * WPSC The Product Price Display
1882
+ *
1883
+ * @param $args (array) Array of args.
1884
+ * @return (string) HTML formatted prices
1885
+ *
1886
+ * @uses apply_filters() Calls 'wpsc_the_product_price_display_old_price_class' passing class and product ID
1887
+ * @uses apply_filters() Calls 'wpsc_the_product_price_display_old_price_amount_class' passing class and product ID
1888
+ * @uses apply_filters() Calls 'wpsc_the_product_price_display_price_class' passing class and product ID
1889
+ * @uses apply_filters() Calls 'wpsc_the_product_price_display_price_amount_class' passing class and product ID
1890
+ * @uses apply_filters() Calls 'wpsc_the_product_price_display_you_save_class' passing class and product ID
1891
+ * @uses apply_filters() Calls 'wpsc_the_product_price_display_you_save_amount_class' passing class and product ID
1892
+ * @uses wpsc_product_normal_price() Get the normal price
1893
+ * @uses wpsc_the_product_price() Get the current price
1894
+ * @uses wpsc_you_save() Get pricing saving
1895
+ * @uses wpsc_product_on_special() Is product on sale?
1896
+ * @uses wpsc_product_has_variations() Checks if product has variations
1897
+ * @uses wpsc_product_variation_price_from() Gets the lowest variation price
1898
+ * @uses wpsc_currency_display() Display price as currency
1899
+ */
1900
  function wpsc_the_product_price_display( $args = array() ) {
1901
  if ( empty( $args['id'] ) )
1902
  $id = get_the_ID();
1953
  // a specific variation
1954
  $show_you_save = false;
1955
 
1956
+ $old_price_number = wpsc_product_variation_price_from( $id, array( 'only_normal_price' => true ) );
1957
+ $current_price_number = wpsc_product_variation_price_from( $id );
1958
 
1959
  // if coincidentally, one of the variations are not on special, but its price is equal to
1960
  // or lower than the lowest variation sale price, old price should be hidden, and current
wpsc-includes/theme.functions.php CHANGED
@@ -556,9 +556,11 @@ function wpsc_enqueue_user_script_and_css() {
556
 
557
  $category_id = wpsc_get_current_category_id();
558
 
559
- if( get_option( 'wpsc_share_this' ) == 1 ) {
560
  $remote_protocol = is_ssl() ? 'https://ws' : 'http://w';
561
  wp_enqueue_script( 'sharethis', $remote_protocol . '.sharethis.com/button/buttons.js', array(), false, true );
 
 
562
  }
563
 
564
  wp_enqueue_script( 'jQuery' );
556
 
557
  $category_id = wpsc_get_current_category_id();
558
 
559
+ if ( get_option( 'wpsc_share_this' ) == 1 ) {
560
  $remote_protocol = is_ssl() ? 'https://ws' : 'http://w';
561
  wp_enqueue_script( 'sharethis', $remote_protocol . '.sharethis.com/button/buttons.js', array(), false, true );
562
+ wp_enqueue_script( 'wpsc-sharethis', WPSC_CORE_JS_URL . '/sharethis.js', array( 'jquery', 'sharethis' ), $version_identifier );
563
+ wp_enqueue_style( 'wpsc-sharethis-css', WPSC_CORE_JS_URL . '/sharethis.css', false, $version_identifier, 'all' );
564
  }
565
 
566
  wp_enqueue_script( 'jQuery' );
wpsc-theme/functions/wpsc-user_log_functions.php CHANGED
@@ -435,14 +435,14 @@ function wpsc_user_purchases() {
435
 
436
  echo "<tr class='$alternate'>\n\r";
437
  echo " <td class='status processed'>";
438
- echo "<a href='#' onclick='return show_details_box(\"status_box_" . $purchase['id'] . "\",\"log_expander_icon_" . $purchase['id'] . "\");'>";
439
 
440
  if ( !empty($_GET['id']) && $_GET['id'] == $purchase['id'] ) {
441
  $status_state = "collapse";
442
  $status_style = "style='display: block;'";
443
  }
444
 
445
- echo "<img class='log_expander_icon' id='log_expander_icon_" . $purchase['id'] . "' src='" . WPSC_CORE_IMAGES_URL . "/icon_window_$status_state.gif' alt='' title='' />";
446
 
447
  echo "<span id='form_group_" . $purchase['id'] . "_text'>" . __( 'Details', 'wpsc' ) . "</span>";
448
  echo "</a>";
@@ -792,4 +792,4 @@ function _wpsc_action_downloads_section() {
792
  }
793
  add_action( 'wpsc_user_profile_section_downloads', '_wpsc_action_downloads_section' );
794
 
795
- ?>
435
 
436
  echo "<tr class='$alternate'>\n\r";
437
  echo " <td class='status processed'>";
438
+ echo "<a href=\"#\" onclick=\"return show_details_box('status_box_" . $purchase['id'] . "','log_expander_icon_" . $purchase['id'] . "');\">";
439
 
440
  if ( !empty($_GET['id']) && $_GET['id'] == $purchase['id'] ) {
441
  $status_state = "collapse";
442
  $status_style = "style='display: block;'";
443
  }
444
 
445
+ echo "<img class=\"log_expander_icon\" id=\"log_expander_icon_" . $purchase['id'] . "\" src=\"" . WPSC_CORE_IMAGES_URL . "/icon_window_$status_state.gif\" alt=\"\" title=\"\" />";
446
 
447
  echo "<span id='form_group_" . $purchase['id'] . "_text'>" . __( 'Details', 'wpsc' ) . "</span>";
448
  echo "</a>";
792
  }
793
  add_action( 'wpsc_user_profile_section_downloads', '_wpsc_action_downloads_section' );
794
 
795
+ ?>
wpsc-theme/wpsc-default.css CHANGED
@@ -1062,150 +1062,6 @@ background-color: #f5f5f5;
1062
  .clear{
1063
  clear:both;
1064
  }
1065
- /*-----Share This-----*/
1066
- #wpsc_akst_form {
1067
- background: #999;
1068
- border: 1px solid #ddd;
1069
- display: none;
1070
- position: absolute;
1071
- width: 350px;
1072
- z-index: 999;
1073
- }
1074
- #wpsc_akst_form a.akst_close {
1075
- color: #fff;
1076
- float: right;
1077
- margin: 5px;
1078
- }
1079
- #wpsc_akst_form ul.tabs {
1080
- border: 1px solid #999;
1081
- list-style: none;
1082
- margin: 10px 10px 0 10px;
1083
- padding: 0;
1084
- }
1085
- #wpsc_akst_form ul.tabs li {
1086
- background: #ccc;
1087
- border-bottom: 1px solid #999;
1088
- cursor: pointer;
1089
- float: left;
1090
- margin: 0 3px 0 0;
1091
- padding: 3px 5px 2px 5px;
1092
- }
1093
- #wpsc_akst_form ul.tabs li.selected {
1094
- background: #fff;
1095
- border-bottom: 1px solid #fff;
1096
- cursor: default;
1097
- padding: 4px 5px 1px 5px;
1098
- }
1099
- #wpsc_akst_form div.clear {
1100
- clear: both;
1101
- float: none;
1102
- }
1103
- #wpsc_akst_social, #wpsc_akst_email {
1104
- background: #fff;
1105
- border: 1px solid #fff;
1106
- padding: 10px;
1107
- }
1108
- #wpsc_akst_social ul {
1109
- list-style: none;
1110
- margin: 0;
1111
- padding: 0;
1112
- }
1113
- #wpsc_akst_social ul li {
1114
- float: left;
1115
- margin: 0;
1116
- padding: 0;
1117
- width: 45%;
1118
- }
1119
- #wpsc_akst_social ul li a {
1120
- background-position: 0px 2px;
1121
- background-repeat: no-repeat;
1122
- display: block;
1123
- float: left;
1124
- height: 24px;
1125
- padding: 4px 0 0 22px;
1126
- vertical-align: middle;
1127
- }
1128
- #wpsc_akst_delicious {
1129
- background-image: url(../wpsc-core/images/social_networking/delicious.gif);
1130
- }
1131
- #wpsc_akst_digg {
1132
- background-image: url(../wpsc-core/images/social_networking/digg.gif);
1133
- }
1134
- #wpsc_akst_furl {
1135
- background-image: url(../wpsc-core/images/social_networking/furl.gif);
1136
- }
1137
- #wpsc_akst_netscape {
1138
- background-image: url(../wpsc-core/images/social_networking/netscape.gif);
1139
- }
1140
- #wpsc_akst_yahoo_myweb {
1141
- background-image: url(../wpsc-core/images/social_networking/yahoo_myweb.gif);
1142
- }
1143
- #wpsc_akst_stumbleupon {
1144
- background-image: url(../wpsc-core/images/social_networking/stumbleupon.gif);
1145
- }
1146
- #wpsc_akst_google_bmarks {
1147
- background-image: url(../wpsc-core/images/social_networking/google_bmarks.gif);
1148
- }
1149
- #wpsc_akst_technorati {
1150
- background-image: url(../wpsc-core/images/social_networking/technorati.gif);
1151
- }
1152
- #wpsc_akst_blinklist {
1153
- background-image: url(../wpsc-core/images/social_networking/blinklist.gif);
1154
- }
1155
- #wpsc_akst_newsvine {
1156
- background-image: url(../wpsc-core/images/social_networking/newsvine.gif);
1157
- }
1158
- #wpsc_akst_magnolia {
1159
- background-image: url(../wpsc-core/images/social_networking/magnolia.gif);
1160
- }
1161
- #wpsc_akst_reddit {
1162
- background-image: url(../wpsc-core/images/social_networking/reddit.gif);
1163
- }
1164
- #wpsc_akst_windows_live {
1165
- background-image: url(../wpsc-core/images/social_networking/windows_live.gif);
1166
- }
1167
- #wpsc_akst_tailrank {
1168
- background-image: url(../wpsc-core/images/social_networking/tailrank.gif);
1169
- }
1170
-
1171
- #wpsc_akst_email {
1172
- display: none;
1173
- text-align: left;
1174
- }
1175
- #wpsc_akst_email form, #wpsc_akst_email fieldset {
1176
- border: 0;
1177
- margin: 0;
1178
- padding: 0;
1179
- }
1180
- #wpsc_akst_email fieldset legend {
1181
- display: none;
1182
- }
1183
- #wpsc_akst_email ul {
1184
- list-style: none;
1185
- margin: 0;
1186
- padding: 0;
1187
- }
1188
- #wpsc_akst_email ul li {
1189
- margin: 0 0 7px 0;
1190
- padding: 0;
1191
- }
1192
- #wpsc_akst_email ul li label {
1193
- color: #555;
1194
- display: block;
1195
- margin-bottom: 3px;
1196
- }
1197
- #wpsc_akst_email ul li input {
1198
- padding: 3px 10px;
1199
- }
1200
- #wpsc_akst_email ul li input.akst_text {
1201
- padding: 3px;
1202
- width: 280px;
1203
- }
1204
- .wpsc_akst_share_link {
1205
- display: block;
1206
- margin: 0px 0px 6px 0px;
1207
- width: 119px;
1208
- }
1209
 
1210
  /*-----Featured Image-----*/
1211
  .item_text {
1062
  .clear{
1063
  clear:both;
1064
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1065
 
1066
  /*-----Featured Image-----*/
1067
  .item_text {
wpsc-theme/wpsc-single_product.php CHANGED
@@ -147,11 +147,13 @@
147
  <?php endif; ?>
148
  <?php endif; ?>
149
  </div><!--close wpsc_product_price-->
150
- <!--sharethis-->
 
151
  <?php if ( get_option( 'wpsc_share_this' ) == 1 ): ?>
152
  <div class="st_sharethis" displayText="ShareThis"></div>
153
  <?php endif; ?>
154
- <!--end sharethis-->
 
155
  <input type="hidden" value="add_to_cart" name="wpsc_ajax_action" />
156
  <input type="hidden" value="<?php echo wpsc_the_product_id(); ?>" name="product_id" />
157
  <?php if( wpsc_product_is_customisable() ) : ?>
147
  <?php endif; ?>
148
  <?php endif; ?>
149
  </div><!--close wpsc_product_price-->
150
+
151
+ <!-- ShareThis -->
152
  <?php if ( get_option( 'wpsc_share_this' ) == 1 ): ?>
153
  <div class="st_sharethis" displayText="ShareThis"></div>
154
  <?php endif; ?>
155
+ <!-- End ShareThis -->
156
+
157
  <input type="hidden" value="add_to_cart" name="wpsc_ajax_action" />
158
  <input type="hidden" value="<?php echo wpsc_the_product_id(); ?>" name="product_id" />
159
  <?php if( wpsc_product_is_customisable() ) : ?>