This commit is contained in:
Prospress Inc
2017-08-25 09:08:20 +02:00
committed by Remco Tolsma
parent 688c8f455f
commit 1aa9d6d814
13 changed files with 357 additions and 97 deletions

View File

@@ -1,5 +1,15 @@
*** WooCommerce Subscriptions Changelog *** *** WooCommerce Subscriptions Changelog ***
2017.08.01 - version 2.2.11
* Fix: Do not save subscription product meta data on other post types, including WooCommerce Tab Manager and Jetpack post types. PR#2203
* Fix: Do not apply 'woocommerce_get_price' or 'woocommerce_product_get_price' filters to tax inclusive/exclusive prices to avoid ever applying them twice or to non price prices, like sign-up fees. Introduced in Subscriptions v2.2.5. PR#2261
* Fix: Copy custom and third-party order line item meta to cart line items during the renewal/resubscribe process so that the meta persists on the renewal/resubscribe orders and subscription. PR#2258
* Fix: Always use correct minimum variation price when generating variable price HTML, even if there is a free trial on one variation. PR#2254
* Fix: Never apply 'woocommerce_order_formatted_line_subtotal' filter twice. PR#2239
* Fix: Format plain text email for Subscription renewals correctly. PR#2255
* Tweak: Add Woo plugin header to be compatible with WooCommerce 3.1's updater. PR#2252
* Tweak: Add base composer.json for using Subscriptions with Composer. PR#2229
2017.07.20 - version 2.2.10 2017.07.20 - version 2.2.10
* Fix: Do not attempt to call WC 3.0 only method when WC 2.6 is active by fixing version check from 2.6 to 3.0. Props @lkraav. PR#2236 * Fix: Do not attempt to call WC 3.0 only method when WC 2.6 is active by fixing version check from 2.6 to 3.0. Props @lkraav. PR#2236
* Fix: Display "Limit Subscription" option on Edit Product screen even when Reviews are disabled. PR#2233 * Fix: Display "Limit Subscription" option on Edit Product screen even when Reviews are disabled. PR#2233

132
composer.lock generated Normal file
View File

@@ -0,0 +1,132 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "f940d0fcab30dd0d30d8b2234dbbed1b",
"packages": [
{
"name": "composer/installers",
"version": "v1.3.0",
"source": {
"type": "git",
"url": "https://github.com/composer/installers.git",
"reference": "79ad876c7498c0bbfe7eed065b8651c93bfd6045"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/installers/zipball/79ad876c7498c0bbfe7eed065b8651c93bfd6045",
"reference": "79ad876c7498c0bbfe7eed065b8651c93bfd6045",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0"
},
"replace": {
"roundcube/plugin-installer": "*",
"shama/baton": "*"
},
"require-dev": {
"composer/composer": "1.0.*@dev",
"phpunit/phpunit": "4.1.*"
},
"type": "composer-plugin",
"extra": {
"class": "Composer\\Installers\\Plugin",
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\Installers\\": "src/Composer/Installers"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Kyle Robinson Young",
"email": "kyle@dontkry.com",
"homepage": "https://github.com/shama"
}
],
"description": "A multi-framework Composer library installer",
"homepage": "https://composer.github.io/installers/",
"keywords": [
"Craft",
"Dolibarr",
"Eliasis",
"Hurad",
"ImageCMS",
"Kanboard",
"MODX Evo",
"Mautic",
"Maya",
"OXID",
"Plentymarkets",
"Porto",
"RadPHP",
"SMF",
"Thelia",
"WolfCMS",
"agl",
"aimeos",
"annotatecms",
"attogram",
"bitrix",
"cakephp",
"chef",
"cockpit",
"codeigniter",
"concrete5",
"croogo",
"dokuwiki",
"drupal",
"elgg",
"expressionengine",
"fuelphp",
"grav",
"installer",
"itop",
"joomla",
"kohana",
"laravel",
"lavalite",
"lithium",
"magento",
"mako",
"mediawiki",
"modulework",
"moodle",
"phpbb",
"piwik",
"ppi",
"puppet",
"reindex",
"roundcube",
"shopware",
"silverstripe",
"sydes",
"symfony",
"typo3",
"wordpress",
"yawik",
"zend",
"zikula"
],
"time": "2017-04-24T06:37:16+00:00"
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
"platform-dev": []
}

View File

@@ -369,7 +369,7 @@ class WC_Subscriptions_Admin {
*/ */
public static function save_subscription_meta( $post_id ) { public static function save_subscription_meta( $post_id ) {
if ( self::$saved_product_meta || ( empty( $_POST['_wcsnonce'] ) || ! wp_verify_nonce( $_POST['_wcsnonce'], 'wcs_subscription_meta' ) || ! isset( $_POST['product-type'] ) || ! in_array( $_POST['product-type'], apply_filters( 'woocommerce_subscription_product_types', array( WC_Subscriptions::$name ) ) ) ) ) { if ( empty( $_POST['_wcsnonce'] ) || ! wp_verify_nonce( $_POST['_wcsnonce'], 'wcs_subscription_meta' ) || false === self::is_subscription_product_save_request( $post_id, apply_filters( 'woocommerce_subscription_product_types', array( WC_Subscriptions::$name ) ) ) ) {
return; return;
} }
@@ -448,7 +448,7 @@ class WC_Subscriptions_Admin {
*/ */
public static function save_variable_subscription_meta( $post_id ) { public static function save_variable_subscription_meta( $post_id ) {
if ( self::$saved_product_meta || ( empty( $_POST['_wcsnonce'] ) || ! wp_verify_nonce( $_POST['_wcsnonce'], 'wcs_subscription_meta' ) || ! isset( $_POST['product-type'] ) || ! in_array( $_POST['product-type'], apply_filters( 'woocommerce_subscription_variable_product_types', array( 'variable-subscription' ) ) ) ) ) { if ( empty( $_POST['_wcsnonce'] ) || ! wp_verify_nonce( $_POST['_wcsnonce'], 'wcs_subscription_meta' ) || false === self::is_subscription_product_save_request( $post_id, apply_filters( 'woocommerce_subscription_variable_product_types', array( 'variable-subscription' ) ) ) ) {
return; return;
} }
@@ -1631,6 +1631,29 @@ class WC_Subscriptions_Admin {
return $checkout_settings; return $checkout_settings;
} }
/**
* Check if subscription product meta data should be saved for the current request.
*
* @param array Array of product types.
* @since 2.2.9
*/
private static function is_subscription_product_save_request( $post_id, $product_types ) {
if ( self::$saved_product_meta ) {
$is_subscription_product_save_request = false;
} elseif ( empty( $_POST['_wcsnonce'] ) || ! wp_verify_nonce( $_POST['_wcsnonce'], 'wcs_subscription_meta' ) ) {
$is_subscription_product_save_request = false;
} elseif ( ! isset( $_POST['product-type'] ) || ! in_array( $_POST['product-type'], $product_types ) ) {
$is_subscription_product_save_request = false;
} elseif ( empty( $_POST['post_ID'] ) || $_POST['post_ID'] != $post_id ) {
$is_subscription_product_save_request = false;
} else {
$is_subscription_product_save_request = true;
}
return apply_filters( 'wcs_admin_is_subscription_product_save_request', $is_subscription_product_save_request, $post_id, $product_types );
}
/** /**
* Outputs the contents of the "Renewal Orders" meta box. * Outputs the contents of the "Renewal Orders" meta box.
* *

View File

@@ -85,7 +85,7 @@ class WC_Product_Variable_Subscription extends WC_Product_Variable {
$tax_display_mode = get_option( 'woocommerce_tax_display_shop' ); $tax_display_mode = get_option( 'woocommerce_tax_display_shop' );
$price = WC_Subscriptions_Product::get_price( $this ); $price = WC_Subscriptions_Product::get_price( $this->get_meta( '_min_price_variation_id' ) );
$price = 'incl' == $tax_display_mode ? wcs_get_price_including_tax( $this, array( 'price' => $price ) ) : wcs_get_price_excluding_tax( $this, array( 'price' => $price ) ); $price = 'incl' == $tax_display_mode ? wcs_get_price_including_tax( $this, array( 'price' => $price ) ) : wcs_get_price_excluding_tax( $this, array( 'price' => $price ) );
$price = $this->get_price_prefix( $prices ) . wc_price( $price ) . $this->get_price_suffix(); $price = $this->get_price_prefix( $prices ) . wc_price( $price ) . $this->get_price_suffix();
$price = apply_filters( 'woocommerce_variable_price_html', $price, $this ); $price = apply_filters( 'woocommerce_variable_price_html', $price, $this );

View File

@@ -1488,9 +1488,10 @@ class WC_Subscription extends WC_Order {
$line_subtotal = $this->get_line_subtotal( $item, true ); $line_subtotal = $this->get_line_subtotal( $item, true );
} }
$subtotal = wcs_price_string( $this->get_price_string_details( $line_subtotal ) ); $subtotal = wcs_price_string( $this->get_price_string_details( $line_subtotal ) );
$subtotal = apply_filters( 'woocommerce_order_formatted_line_subtotal', $subtotal, $item, $this );
} }
return apply_filters( 'woocommerce_order_formatted_line_subtotal', $subtotal, $item, $this ); return $subtotal;
} }
/** /**

View File

@@ -253,7 +253,7 @@ class WC_Subscriptions_Email {
add_filter( 'woocommerce_order_is_paid', $show_purchase_note_callback ); add_filter( 'woocommerce_order_is_paid', $show_purchase_note_callback );
if ( function_exists( 'wc_get_email_order_items' ) ) { // WC 3.0+ if ( function_exists( 'wc_get_email_order_items' ) ) { // WC 3.0+
$items_table = wc_get_email_order_items( $order ); $items_table = wc_get_email_order_items( $order, $args );
} else { } else {
$items_table = $order->email_order_items_table( $args ); $items_table = $order->email_order_items_table( $args );
} }

View File

@@ -118,6 +118,26 @@ class WCS_Cart_Renewal {
// If the shipping address on a renewal order differs to the order's billing address, check the "Ship to different address" automatically to make sure the renewal order's fields are used by default // If the shipping address on a renewal order differs to the order's billing address, check the "Ship to different address" automatically to make sure the renewal order's fields are used by default
add_filter( 'woocommerce_ship_to_different_address_checked', array( &$this, 'maybe_check_ship_to_different_address' ), 100, 1 ); add_filter( 'woocommerce_ship_to_different_address_checked', array( &$this, 'maybe_check_ship_to_different_address' ), 100, 1 );
add_filter( 'woocommerce_get_item_data', array( &$this, 'display_line_item_data_in_cart' ), 10, 2 );
// Attach hooks which depend on WooCommerce version constants. Differs from @see attach_dependant_hooks() in that this is hooked inside an inherited function and so extended classes will also inherit these callbacks
add_action( 'woocommerce_loaded', array( &$this, 'attach_dependant_callbacks' ), 10 );
}
/**
* Attach callbacks dependant on WC versions
*
* @since 2.2.11
*/
public function attach_dependant_callbacks() {
if ( WC_Subscriptions::is_woocommerce_pre( '3.0' ) ) {
add_action( 'woocommerce_add_order_item_meta', array( &$this, 'add_order_item_meta' ), 10, 2 );
add_action( 'woocommerce_add_subscription_item_meta', array( &$this, 'add_order_item_meta' ), 10, 2 );
} else {
add_action( 'woocommerce_checkout_create_order_line_item', array( &$this, 'add_order_line_item_meta' ), 10, 3 );
}
} }
/** /**
@@ -205,6 +225,22 @@ class WCS_Cart_Renewal {
$variations = array(); $variations = array();
$item_data = array(); $item_data = array();
$custom_line_item_meta = array();
$reserved_item_meta_keys = array(
'_item_meta',
'_item_meta_array',
'_qty',
'_tax_class',
'_product_id',
'_variation_id',
'_line_subtotal',
'_line_total',
'_line_tax',
'_line_tax_data',
'_line_subtotal_tax',
'_cart_item_key_' . $this->cart_item_key, // This value is unique per checkout attempt and so shouldn't be copied from existing line items.
'Backordered', // WC will reapply this meta if the line item is backordered. Therefore it shouldn't be copied through the cart.
);
// Load all product info including variation data // Load all product info including variation data
if ( WC_Subscriptions::is_woocommerce_pre( '3.0' ) ) { if ( WC_Subscriptions::is_woocommerce_pre( '3.0' ) ) {
@@ -219,6 +255,8 @@ class WCS_Cart_Renewal {
$variations[ $meta_name ] = $meta_value[0]; $variations[ $meta_name ] = $meta_value[0];
} elseif ( meta_is_product_attribute( $meta_name, $meta_value[0], $product_id ) ) { } elseif ( meta_is_product_attribute( $meta_name, $meta_value[0], $product_id ) ) {
$variations[ $meta_name ] = $meta_value[0]; $variations[ $meta_name ] = $meta_value[0];
} elseif ( ! in_array( $meta_name, $reserved_item_meta_keys ) ) {
$custom_line_item_meta[ $meta_name ] = $meta_value[0];
} }
} }
} else { } else {
@@ -233,6 +271,8 @@ class WCS_Cart_Renewal {
$variations[ $meta->key ] = $meta->value; $variations[ $meta->key ] = $meta->value;
} elseif ( meta_is_product_attribute( $meta->key, $meta->value, $product_id ) ) { } elseif ( meta_is_product_attribute( $meta->key, $meta->value, $product_id ) ) {
$variations[ $meta->key ] = $meta->value; $variations[ $meta->key ] = $meta->value;
} elseif ( ! in_array( $meta->key, $reserved_item_meta_keys ) ) {
$custom_line_item_meta[ $meta->key ] = $meta->value;
} }
} }
} }
@@ -261,6 +301,7 @@ class WCS_Cart_Renewal {
} }
$cart_item_data['line_item_id'] = $item_id; $cart_item_data['line_item_id'] = $item_id;
$cart_item_data['custom_line_item_meta'] = $custom_line_item_meta;
$item_data = apply_filters( 'woocommerce_order_again_cart_item_data', array( $this->cart_item_key => $cart_item_data ), $line_item, $subscription ); $item_data = apply_filters( 'woocommerce_order_again_cart_item_data', array( $this->cart_item_key => $cart_item_data ), $line_item, $subscription );
@@ -1156,6 +1197,66 @@ class WCS_Cart_Renewal {
} }
} }
/**
* Add custom line item meta to the cart item data so it's displayed in the cart.
*
* @param array $cart_item_data
* @param array $cart_item
* @since 2.2.11
*/
public function display_line_item_data_in_cart( $cart_item_data, $cart_item ) {
if ( ! empty( $cart_item[ $this->cart_item_key ]['custom_line_item_meta'] ) ) {
foreach ( $cart_item[ $this->cart_item_key ]['custom_line_item_meta'] as $item_meta_key => $value ) {
$cart_item_data[] = array(
'key' => $item_meta_key,
'value' => $value,
'hidden' => substr( $item_meta_key, 0, 1 ) === '_', // meta keys prefixed with an `_` are hidden by default
);
}
}
return $cart_item_data;
}
/**
* Add custom line item meta from the old line item into the new line item meta.
*
* Used when WC versions prior to 3.0 are active. When WC 3.0 or newer is active,
* @see WCS_Cart_Renewal->add_order_line_item_meta() replaces this function
*
* @param int $item_id
* @param array $cart_item_data
* @since 2.2.11
*/
public function add_order_item_meta( $item_id, $cart_item_data ) {
if ( ! empty( $cart_item_data[ $this->cart_item_key ]['custom_line_item_meta'] ) ) {
foreach ( $cart_item_data[ $this->cart_item_key ]['custom_line_item_meta'] as $meta_key => $value ) {
woocommerce_add_order_item_meta( $item_id, $meta_key, $value );
}
}
}
/**
* Add custom line item meta from the old line item into the new line item meta.
*
* Used when WC 3.0 or newer is active. When prior versions are active,
* @see WCS_Cart_Renewal->add_order_item_meta() replaces this function
*
* @param WC_Order_Item_Product
* @param string $cart_item_key
* @param array $cart_item_data
* @since 2.2.11
*/
public function add_order_line_item_meta( $item, $cart_item_key, $cart_item_data ) {
if ( ! empty( $cart_item_data[ $this->cart_item_key ]['custom_line_item_meta'] ) ) {
foreach ( $cart_item_data[ $this->cart_item_key ]['custom_line_item_meta'] as $meta_key => $value ) {
$item->add_meta_data( $meta_key, $value );
}
}
}
/* Deprecated */ /* Deprecated */
/** /**

View File

@@ -15,9 +15,6 @@ if ( ! defined( 'ABSPATH' ) ) {
*/ */
class WCS_Email_Customer_Payment_Retry extends WCS_Email_Customer_Renewal_Invoice { class WCS_Email_Customer_Payment_Retry extends WCS_Email_Customer_Renewal_Invoice {
var $find;
var $replace;
/** /**
* Constructor * Constructor
*/ */

View File

@@ -15,9 +15,6 @@ if ( ! defined( 'ABSPATH' ) ) {
*/ */
class WCS_Email_Customer_Renewal_Invoice extends WC_Email_Customer_Invoice { class WCS_Email_Customer_Renewal_Invoice extends WC_Email_Customer_Invoice {
var $find;
var $replace;
// fields used in WC_Email_Customer_Invoice this class doesn't need // fields used in WC_Email_Customer_Invoice this class doesn't need
var $subject_paid = null; var $subject_paid = null;
var $heading_paid = null; var $heading_paid = null;

View File

@@ -27,13 +27,11 @@ function wcs_get_price_including_tax( $product, $args = array() ) {
if ( function_exists( 'wc_get_price_including_tax' ) ) { // WC 3.0+ if ( function_exists( 'wc_get_price_including_tax' ) ) { // WC 3.0+
$price = wc_get_price_including_tax( $product, $args ); $price = wc_get_price_including_tax( $product, $args );
$filter = 'woocommerce_product_get_price';
} else { // WC < 3.0 } else { // WC < 3.0
$price = $product->get_price_including_tax( $args['qty'], $args['price'] ); $price = $product->get_price_including_tax( $args['qty'], $args['price'] );
$filter = 'woocommerce_get_price';
} }
return apply_filters( $filter, $price , $product ); return $price;
} }
/** /**
@@ -53,13 +51,11 @@ function wcs_get_price_excluding_tax( $product, $args = array() ) {
if ( function_exists( 'wc_get_price_excluding_tax' ) ) { // WC 3.0+ if ( function_exists( 'wc_get_price_excluding_tax' ) ) { // WC 3.0+
$price = wc_get_price_excluding_tax( $product, $args ); $price = wc_get_price_excluding_tax( $product, $args );
$filter = 'woocommerce_product_get_price';
} else { // WC < 3.0 } else { // WC < 3.0
$price = $product->get_price_excluding_tax( $args['qty'], $args['price'] ); $price = $product->get_price_excluding_tax( $args['qty'], $args['price'] );
$filter = 'woocommerce_get_price';
} }
return apply_filters( $filter, $price , $product ); return $price;
} }
/** /**

View File

@@ -2,10 +2,10 @@
# This file is distributed under the same license as the WooCommerce Subscriptions package. # This file is distributed under the same license as the WooCommerce Subscriptions package.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WooCommerce Subscriptions 2.2.10\n" "Project-Id-Version: WooCommerce Subscriptions 2.2.11\n"
"Report-Msgid-Bugs-To: " "Report-Msgid-Bugs-To: "
"https://github.com/Prospress/woocommerce-subscriptions/issues\n" "https://github.com/Prospress/woocommerce-subscriptions/issues\n"
"POT-Creation-Date: 2017-07-20 05:32:36+00:00\n" "POT-Creation-Date: 2017-08-01 04:27:16+00:00\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
@@ -180,7 +180,7 @@ msgid "Manage Subscriptions"
msgstr "" msgstr ""
#: includes/admin/class-wc-subscriptions-admin.php:868 #: includes/admin/class-wc-subscriptions-admin.php:868
#: woocommerce-subscriptions.php:233 #: woocommerce-subscriptions.php:235
msgid "Search Subscriptions" msgid "Search Subscriptions"
msgstr "" msgstr ""
@@ -190,7 +190,7 @@ msgstr ""
#: includes/admin/reports/class-wcs-report-subscription-events-by-date.php:654 #: includes/admin/reports/class-wcs-report-subscription-events-by-date.php:654
#: includes/class-wcs-query.php:95 includes/class-wcs-query.php:115 #: includes/class-wcs-query.php:95 includes/class-wcs-query.php:115
#: includes/class-wcs-query.php:117 templates/admin/status.php:9 #: includes/class-wcs-query.php:117 templates/admin/status.php:9
#: woocommerce-subscriptions.php:224 woocommerce-subscriptions.php:237 #: woocommerce-subscriptions.php:226 woocommerce-subscriptions.php:239
msgid "Subscriptions" msgid "Subscriptions"
msgstr "" msgstr ""
@@ -215,7 +215,7 @@ msgstr ""
#: includes/class-wc-product-subscription.php:72 #: includes/class-wc-product-subscription.php:72
#: includes/class-wc-product-variable-subscription.php:63 #: includes/class-wc-product-variable-subscription.php:63
#: includes/class-wc-subscriptions-product.php:96 #: includes/class-wc-subscriptions-product.php:96
#: woocommerce-subscriptions.php:483 #: woocommerce-subscriptions.php:485
msgid "Sign Up Now" msgid "Sign Up Now"
msgstr "" msgstr ""
@@ -350,7 +350,7 @@ msgstr ""
#: includes/admin/class-wc-subscriptions-admin.php:1195 #: includes/admin/class-wc-subscriptions-admin.php:1195
#: includes/upgrades/templates/wcs-about-2-0.php:35 #: includes/upgrades/templates/wcs-about-2-0.php:35
#: includes/upgrades/templates/wcs-about.php:34 #: includes/upgrades/templates/wcs-about.php:34
#: woocommerce-subscriptions.php:1022 #: woocommerce-subscriptions.php:1024
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
@@ -542,7 +542,7 @@ msgstr ""
#: templates/emails/subscription-info.php:18 #: templates/emails/subscription-info.php:18
#: templates/myaccount/my-subscriptions.php:25 #: templates/myaccount/my-subscriptions.php:25
#: templates/myaccount/related-subscriptions.php:20 #: templates/myaccount/related-subscriptions.php:20
#: woocommerce-subscriptions.php:225 #: woocommerce-subscriptions.php:227
msgid "Subscription" msgid "Subscription"
msgstr "" msgstr ""
@@ -1446,66 +1446,66 @@ msgstr ""
msgid "The %s date of a subscription can not be deleted. You must delete the order." msgid "The %s date of a subscription can not be deleted. You must delete the order."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:1681 #: includes/class-wc-subscription.php:1682
msgid "Sign-up complete." msgid "Sign-up complete."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:1683 #: includes/class-wc-subscription.php:1684
msgid "Payment received." msgid "Payment received."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:1714 #: includes/class-wc-subscription.php:1715
msgid "Payment failed." msgid "Payment failed."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:1719 #: includes/class-wc-subscription.php:1720
msgid "Subscription Cancelled: maximum number of failed payments reached." msgid "Subscription Cancelled: maximum number of failed payments reached."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:1921 #: includes/class-wc-subscription.php:1922
#: includes/class-wcs-change-payment-method-admin.php:156 #: includes/class-wcs-change-payment-method-admin.php:156
msgid "Manual Renewal" msgid "Manual Renewal"
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:2000 #: includes/class-wc-subscription.php:2001
msgid "Payment method meta must be an array." msgid "Payment method meta must be an array."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:2235 #: includes/class-wc-subscription.php:2236
msgid "Invalid format. First parameter needs to be an array." msgid "Invalid format. First parameter needs to be an array."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:2239 #: includes/class-wc-subscription.php:2240
msgid "Invalid data. First parameter was empty when passed to update_dates()." msgid "Invalid data. First parameter was empty when passed to update_dates()."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:2246 #: includes/class-wc-subscription.php:2247
msgid "" msgid ""
"Invalid data. First parameter has a date that is not in the registered date " "Invalid data. First parameter has a date that is not in the registered date "
"types." "types."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:2310 #: includes/class-wc-subscription.php:2311
msgid "The %s date must occur after the cancellation date." msgid "The %s date must occur after the cancellation date."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:2315 #: includes/class-wc-subscription.php:2316
msgid "The %s date must occur after the last payment date." msgid "The %s date must occur after the last payment date."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:2319 #: includes/class-wc-subscription.php:2320
msgid "The %s date must occur after the next payment date." msgid "The %s date must occur after the next payment date."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:2324 #: includes/class-wc-subscription.php:2325
msgid "The %s date must occur after the trial end date." msgid "The %s date must occur after the trial end date."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:2328 #: includes/class-wc-subscription.php:2329
msgid "The %s date must occur after the start date." msgid "The %s date must occur after the start date."
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:2357 #: includes/class-wc-subscription.php:2358
#: includes/class-wc-subscriptions-checkout.php:313 #: includes/class-wc-subscriptions-checkout.php:313
#: includes/wcs-order-functions.php:279 #: includes/wcs-order-functions.php:279
msgid "Backordered" msgid "Backordered"
@@ -2153,27 +2153,27 @@ msgid "Weekly"
msgstr "" msgstr ""
#: includes/class-wcs-cart-initial-payment.php:56 #: includes/class-wcs-cart-initial-payment.php:56
#: includes/class-wcs-cart-renewal.php:156 #: includes/class-wcs-cart-renewal.php:176
msgid "That doesn't appear to be your order." msgid "That doesn't appear to be your order."
msgstr "" msgstr ""
#: includes/class-wcs-cart-renewal.php:184 #: includes/class-wcs-cart-renewal.php:204
msgid "Complete checkout to renew your subscription." msgid "Complete checkout to renew your subscription."
msgstr "" msgstr ""
#: includes/class-wcs-cart-renewal.php:245 #: includes/class-wcs-cart-renewal.php:285
#. translators: placeholder is an item name #. translators: placeholder is an item name
msgid "" msgid ""
"The %s product has been deleted and can no longer be renewed. Please choose " "The %s product has been deleted and can no longer be renewed. Please choose "
"a new product or contact us for assistance." "a new product or contact us for assistance."
msgstr "" msgstr ""
#: includes/class-wcs-cart-renewal.php:278 #: includes/class-wcs-cart-renewal.php:319
#. translators: %s is subscription's number #. translators: %s is subscription's number
msgid "Subscription #%s has not been added to the cart." msgid "Subscription #%s has not been added to the cart."
msgstr "" msgstr ""
#: includes/class-wcs-cart-renewal.php:409 #: includes/class-wcs-cart-renewal.php:450
msgid "" msgid ""
"We couldn't find the original subscription for an item in your cart. The " "We couldn't find the original subscription for an item in your cart. The "
"item was removed." "item was removed."
@@ -2183,7 +2183,7 @@ msgid_plural ""
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: includes/class-wcs-cart-renewal.php:416 #: includes/class-wcs-cart-renewal.php:457
msgid "" msgid ""
"We couldn't find the original renewal order for an item in your cart. The " "We couldn't find the original renewal order for an item in your cart. The "
"item was removed." "item was removed."
@@ -2193,7 +2193,7 @@ msgid_plural ""
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: includes/class-wcs-cart-renewal.php:691 #: includes/class-wcs-cart-renewal.php:732
msgid "All linked subscription items have been removed from the cart." msgid "All linked subscription items have been removed from the cart."
msgstr "" msgstr ""
@@ -2352,7 +2352,7 @@ msgid "Subscription Cancelled"
msgstr "" msgstr ""
#: includes/emails/class-wcs-email-cancelled-subscription.php:128 #: includes/emails/class-wcs-email-cancelled-subscription.php:128
#: includes/emails/class-wcs-email-customer-renewal-invoice.php:183 #: includes/emails/class-wcs-email-customer-renewal-invoice.php:180
#: includes/emails/class-wcs-email-expired-subscription.php:126 #: includes/emails/class-wcs-email-expired-subscription.php:126
#: includes/emails/class-wcs-email-on-hold-subscription.php:126 #: includes/emails/class-wcs-email-on-hold-subscription.php:126
msgid "Enable this email notification" msgid "Enable this email notification"
@@ -2428,11 +2428,11 @@ msgid ""
"download your files" "download your files"
msgstr "" msgstr ""
#: includes/emails/class-wcs-email-customer-payment-retry.php:27 #: includes/emails/class-wcs-email-customer-payment-retry.php:24
msgid "Customer Payment Retry" msgid "Customer Payment Retry"
msgstr "" msgstr ""
#: includes/emails/class-wcs-email-customer-payment-retry.php:28 #: includes/emails/class-wcs-email-customer-payment-retry.php:25
msgid "" msgid ""
"Sent to a customer when an attempt to automatically process a subscription " "Sent to a customer when an attempt to automatically process a subscription "
"renewal payment has failed and a retry rule has been applied to retry the " "renewal payment has failed and a retry rule has been applied to retry the "
@@ -2441,11 +2441,11 @@ msgid ""
"for the renewal order manually instead of waiting for the automatic retry." "for the renewal order manually instead of waiting for the automatic retry."
msgstr "" msgstr ""
#: includes/emails/class-wcs-email-customer-payment-retry.php:35 #: includes/emails/class-wcs-email-customer-payment-retry.php:32
msgid "Automatic payment failed for {order_number}, we will retry {retry_time}" msgid "Automatic payment failed for {order_number}, we will retry {retry_time}"
msgstr "" msgstr ""
#: includes/emails/class-wcs-email-customer-payment-retry.php:36 #: includes/emails/class-wcs-email-customer-payment-retry.php:33
msgid "Automatic payment failed for order {order_number}" msgid "Automatic payment failed for order {order_number}"
msgstr "" msgstr ""
@@ -2468,11 +2468,11 @@ msgstr ""
msgid "Your {blogname} renewal order receipt from {order_date}" msgid "Your {blogname} renewal order receipt from {order_date}"
msgstr "" msgstr ""
#: includes/emails/class-wcs-email-customer-renewal-invoice.php:31 #: includes/emails/class-wcs-email-customer-renewal-invoice.php:28
msgid "Customer Renewal Invoice" msgid "Customer Renewal Invoice"
msgstr "" msgstr ""
#: includes/emails/class-wcs-email-customer-renewal-invoice.php:32 #: includes/emails/class-wcs-email-customer-renewal-invoice.php:29
msgid "" msgid ""
"Sent to a customer when the subscription is due for renewal and the renewal " "Sent to a customer when the subscription is due for renewal and the renewal "
"requires a manual payment, either because it uses manual renewals or the " "requires a manual payment, either because it uses manual renewals or the "
@@ -2481,11 +2481,11 @@ msgid ""
"and payment links." "and payment links."
msgstr "" msgstr ""
#: includes/emails/class-wcs-email-customer-renewal-invoice.php:39 #: includes/emails/class-wcs-email-customer-renewal-invoice.php:36
msgid "Invoice for renewal order {order_number} from {order_date}" msgid "Invoice for renewal order {order_number} from {order_date}"
msgstr "" msgstr ""
#: includes/emails/class-wcs-email-customer-renewal-invoice.php:40 #: includes/emails/class-wcs-email-customer-renewal-invoice.php:37
msgid "Invoice for renewal order {order_number}" msgid "Invoice for renewal order {order_number}"
msgstr "" msgstr ""
@@ -3998,71 +3998,71 @@ msgstr ""
msgid "Date type can not be an empty string." msgid "Date type can not be an empty string."
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:239 #: woocommerce-subscriptions.php:241
msgid "This is where subscriptions are stored." msgid "This is where subscriptions are stored."
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:283 #: woocommerce-subscriptions.php:285
msgid "No Subscriptions found" msgid "No Subscriptions found"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:285 #: woocommerce-subscriptions.php:287
msgid "" msgid ""
"Subscriptions will appear here for you to view and manage once purchased by " "Subscriptions will appear here for you to view and manage once purchased by "
"a customer." "a customer."
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:287 #: woocommerce-subscriptions.php:289
#. translators: placeholders are opening and closing link tags #. translators: placeholders are opening and closing link tags
msgid "%sLearn more about managing subscriptions &raquo;%s" msgid "%sLearn more about managing subscriptions &raquo;%s"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:289 #: woocommerce-subscriptions.php:291
#. translators: placeholders are opening and closing link tags #. translators: placeholders are opening and closing link tags
msgid "%sAdd a subscription product &raquo;%s" msgid "%sAdd a subscription product &raquo;%s"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:403 #: woocommerce-subscriptions.php:405
msgid "" msgid ""
"A subscription renewal has been removed from your cart. Multiple " "A subscription renewal has been removed from your cart. Multiple "
"subscriptions can not be purchased at the same time." "subscriptions can not be purchased at the same time."
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:409 #: woocommerce-subscriptions.php:411
msgid "" msgid ""
"A subscription has been removed from your cart. Due to payment gateway " "A subscription has been removed from your cart. Due to payment gateway "
"restrictions, different subscription products can not be purchased at the " "restrictions, different subscription products can not be purchased at the "
"same time." "same time."
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:415 #: woocommerce-subscriptions.php:417
msgid "" msgid ""
"A subscription has been removed from your cart. Products and subscriptions " "A subscription has been removed from your cart. Products and subscriptions "
"can not be purchased at the same time." "can not be purchased at the same time."
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:552 woocommerce-subscriptions.php:569 #: woocommerce-subscriptions.php:554 woocommerce-subscriptions.php:571
#. translators: placeholder is a number, this is for the teens #. translators: placeholder is a number, this is for the teens
#. translators: placeholder is a number, numbers ending in 4-9, 0 #. translators: placeholder is a number, numbers ending in 4-9, 0
msgid "%sth" msgid "%sth"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:557 #: woocommerce-subscriptions.php:559
#. translators: placeholder is a number, numbers ending in 1 #. translators: placeholder is a number, numbers ending in 1
msgid "%sst" msgid "%sst"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:561 #: woocommerce-subscriptions.php:563
#. translators: placeholder is a number, numbers ending in 2 #. translators: placeholder is a number, numbers ending in 2
msgid "%snd" msgid "%snd"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:565 #: woocommerce-subscriptions.php:567
#. translators: placeholder is a number, numbers ending in 3 #. translators: placeholder is a number, numbers ending in 3
msgid "%srd" msgid "%srd"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:595 #: woocommerce-subscriptions.php:597
#. translators: 1$-2$: opening and closing <strong> tags, 3$-4$: link tags, #. translators: 1$-2$: opening and closing <strong> tags, 3$-4$: link tags,
#. takes to woocommerce plugin on wp.org, 5$-6$: opening and closing link tags, #. takes to woocommerce plugin on wp.org, 5$-6$: opening and closing link tags,
#. leads to plugins.php in admin #. leads to plugins.php in admin
@@ -4072,7 +4072,7 @@ msgid ""
"%5$sinstall & activate WooCommerce &raquo;%6$s" "%5$sinstall & activate WooCommerce &raquo;%6$s"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:602 #: woocommerce-subscriptions.php:604
#. translators: 1$-2$: opening and closing <strong> tags, 3$-4$: opening and #. translators: 1$-2$: opening and closing <strong> tags, 3$-4$: opening and
#. closing link tags, leads to plugin admin #. closing link tags, leads to plugin admin
msgid "" msgid ""
@@ -4081,11 +4081,11 @@ msgid ""
"WooCommerce to version 2.4 or newer &raquo;%4$s" "WooCommerce to version 2.4 or newer &raquo;%4$s"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:628 #: woocommerce-subscriptions.php:630
msgid "Variable Subscription" msgid "Variable Subscription"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:815 #: woocommerce-subscriptions.php:817
#. translators: 1$-2$: opening and closing <strong> tags, 3$-4$: opening and #. translators: 1$-2$: opening and closing <strong> tags, 3$-4$: opening and
#. closing link tags. Leads to duplicate site article on docs #. closing link tags. Leads to duplicate site article on docs
msgid "" msgid ""
@@ -4095,19 +4095,19 @@ msgid ""
"environment. %3$sLearn more &raquo;%4$s." "environment. %3$sLearn more &raquo;%4$s."
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:817 #: woocommerce-subscriptions.php:819
msgid "Quit nagging me (but don't enable automatic payments)" msgid "Quit nagging me (but don't enable automatic payments)"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:818 #: woocommerce-subscriptions.php:820
msgid "Enable automatic payments" msgid "Enable automatic payments"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:1024 #: woocommerce-subscriptions.php:1026
msgid "Support" msgid "Support"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:1129 #: woocommerce-subscriptions.php:1131
#. translators: placeholders are opening and closing tags. Leads to docs on #. translators: placeholders are opening and closing tags. Leads to docs on
#. version 2 #. version 2
msgid "" msgid ""
@@ -4118,14 +4118,14 @@ msgid ""
"2.0 &raquo;%s" "2.0 &raquo;%s"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:1144 #: woocommerce-subscriptions.php:1146
msgid "" msgid ""
"Warning! You are running version %s of WooCommerce Subscriptions plugin " "Warning! You are running version %s of WooCommerce Subscriptions plugin "
"code but your database has been upgraded to Subscriptions version 2.0. This " "code but your database has been upgraded to Subscriptions version 2.0. This "
"will cause major problems on your store." "will cause major problems on your store."
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:1145 #: woocommerce-subscriptions.php:1147
msgid "" msgid ""
"Please upgrade the WooCommerce Subscriptions plugin to version 2.0 or newer " "Please upgrade the WooCommerce Subscriptions plugin to version 2.0 or newer "
"immediately. If you need assistance, after upgrading to Subscriptions v2.0, " "immediately. If you need assistance, after upgrading to Subscriptions v2.0, "
@@ -4453,7 +4453,7 @@ msgctxt "original denotes there is no date to display"
msgid "-" msgid "-"
msgstr "" msgstr ""
#: includes/class-wc-subscription.php:2273 #: includes/class-wc-subscription.php:2274
#. translators: placeholder is date type (e.g. "end", "next_payment"...) #. translators: placeholder is date type (e.g. "end", "next_payment"...)
msgctxt "appears in an error message if date is wrong format" msgctxt "appears in an error message if date is wrong format"
msgid "Invalid %s date. The date must be of the format: \"Y-m-d H:i:s\"." msgid "Invalid %s date. The date must be of the format: \"Y-m-d H:i:s\"."
@@ -4694,7 +4694,7 @@ msgctxt "input field placeholder for day field for annual subscriptions"
msgid "Day" msgid "Day"
msgstr "" msgstr ""
#: includes/class-wcs-cart-renewal.php:720 #: includes/class-wcs-cart-renewal.php:761
msgctxt "" msgctxt ""
"Used in WooCommerce by removed item notification: \"_All linked " "Used in WooCommerce by removed item notification: \"_All linked "
"subscription items were_ removed. Undo?\" Filter for item title." "subscription items were_ removed. Undo?\" Filter for item title."
@@ -4786,7 +4786,7 @@ msgid "[%s] Subscription Cancelled"
msgstr "" msgstr ""
#: includes/emails/class-wcs-email-cancelled-subscription.php:126 #: includes/emails/class-wcs-email-cancelled-subscription.php:126
#: includes/emails/class-wcs-email-customer-renewal-invoice.php:181 #: includes/emails/class-wcs-email-customer-renewal-invoice.php:178
#: includes/emails/class-wcs-email-expired-subscription.php:124 #: includes/emails/class-wcs-email-expired-subscription.php:124
#: includes/emails/class-wcs-email-on-hold-subscription.php:124 #: includes/emails/class-wcs-email-on-hold-subscription.php:124
msgctxt "an email notification" msgctxt "an email notification"
@@ -5021,7 +5021,7 @@ msgid ""
msgstr "" msgstr ""
#: includes/upgrades/templates/wcs-about-2-0.php:36 #: includes/upgrades/templates/wcs-about-2-0.php:36
#: woocommerce-subscriptions.php:1023 #: woocommerce-subscriptions.php:1025
msgctxt "short for documents" msgctxt "short for documents"
msgid "Docs" msgid "Docs"
msgstr "" msgstr ""
@@ -5499,68 +5499,68 @@ msgctxt "The post title for the new subscription"
msgid "Subscription &ndash; %s" msgid "Subscription &ndash; %s"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:226 #: woocommerce-subscriptions.php:228
msgctxt "custom post type setting" msgctxt "custom post type setting"
msgid "Add Subscription" msgid "Add Subscription"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:227 #: woocommerce-subscriptions.php:229
msgctxt "custom post type setting" msgctxt "custom post type setting"
msgid "Add New Subscription" msgid "Add New Subscription"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:228 #: woocommerce-subscriptions.php:230
msgctxt "custom post type setting" msgctxt "custom post type setting"
msgid "Edit" msgid "Edit"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:229 #: woocommerce-subscriptions.php:231
msgctxt "custom post type setting" msgctxt "custom post type setting"
msgid "Edit Subscription" msgid "Edit Subscription"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:230 #: woocommerce-subscriptions.php:232
msgctxt "custom post type setting" msgctxt "custom post type setting"
msgid "New Subscription" msgid "New Subscription"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:231 woocommerce-subscriptions.php:232 #: woocommerce-subscriptions.php:233 woocommerce-subscriptions.php:234
msgctxt "custom post type setting" msgctxt "custom post type setting"
msgid "View Subscription" msgid "View Subscription"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:235 #: woocommerce-subscriptions.php:237
msgctxt "custom post type setting" msgctxt "custom post type setting"
msgid "No Subscriptions found in trash" msgid "No Subscriptions found in trash"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:236 #: woocommerce-subscriptions.php:238
msgctxt "custom post type setting" msgctxt "custom post type setting"
msgid "Parent Subscriptions" msgid "Parent Subscriptions"
msgstr "" msgstr ""
#: woocommerce-subscriptions.php:303 #: woocommerce-subscriptions.php:305
msgctxt "post status label including post count" msgctxt "post status label including post count"
msgid "Active <span class=\"count\">(%s)</span>" msgid "Active <span class=\"count\">(%s)</span>"
msgid_plural "Active <span class=\"count\">(%s)</span>" msgid_plural "Active <span class=\"count\">(%s)</span>"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: woocommerce-subscriptions.php:304 #: woocommerce-subscriptions.php:306
msgctxt "post status label including post count" msgctxt "post status label including post count"
msgid "Switched <span class=\"count\">(%s)</span>" msgid "Switched <span class=\"count\">(%s)</span>"
msgid_plural "Switched <span class=\"count\">(%s)</span>" msgid_plural "Switched <span class=\"count\">(%s)</span>"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: woocommerce-subscriptions.php:305 #: woocommerce-subscriptions.php:307
msgctxt "post status label including post count" msgctxt "post status label including post count"
msgid "Expired <span class=\"count\">(%s)</span>" msgid "Expired <span class=\"count\">(%s)</span>"
msgid_plural "Expired <span class=\"count\">(%s)</span>" msgid_plural "Expired <span class=\"count\">(%s)</span>"
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: woocommerce-subscriptions.php:306 #: woocommerce-subscriptions.php:308
msgctxt "post status label including post count" msgctxt "post status label including post count"
msgid "Pending Cancellation <span class=\"count\">(%s)</span>" msgid "Pending Cancellation <span class=\"count\">(%s)</span>"
msgid_plural "Pending Cancellation <span class=\"count\">(%s)</span>" msgid_plural "Pending Cancellation <span class=\"count\">(%s)</span>"

View File

@@ -6,4 +6,5 @@ Tested up to: 4.5
License: GPLv3 License: GPLv3
License URI: http://www.gnu.org/licenses/gpl-3.0.html License URI: http://www.gnu.org/licenses/gpl-3.0.html
WC requires at least: 2.5 WC requires at least: 2.5
WC tested up to: 3.0 WC tested up to: 3.1
Woo: 27147:6115e6d7e297b623a169fdcf5728b224

View File

@@ -5,7 +5,9 @@
* Description: Sell products and services with recurring payments in your WooCommerce Store. * Description: Sell products and services with recurring payments in your WooCommerce Store.
* Author: Prospress Inc. * Author: Prospress Inc.
* Author URI: http://prospress.com/ * Author URI: http://prospress.com/
* Version: 2.2.10 * Version: 2.2.11
*
* Woo: 27147:6115e6d7e297b623a169fdcf5728b224
* *
* Copyright 2017 Prospress, Inc. (email : freedoms@prospress.com) * Copyright 2017 Prospress, Inc. (email : freedoms@prospress.com)
* *
@@ -126,7 +128,7 @@ class WC_Subscriptions {
public static $plugin_file = __FILE__; public static $plugin_file = __FILE__;
public static $version = '2.2.10'; public static $version = '2.2.11';
private static $total_subscription_count = null; private static $total_subscription_count = null;