Version Description
- Added Braintree payments as a gateway option. This should be considered in "beta". Please get in touch if you are using Braintree payments with PMPro. Everything should function except that we're still working out an issue with the webhook handler.
- Added a new dashboard page Orders to view all orders processed by PMPro with an option to export to CSV.
- Fixed bug where "Your membership level has changed" emails were being sent out the first time a user's profile was edited, even if the level wasn't changing.
- Removed the revenue estimate from the members list page. This causes performance issues on sites with many members. A new reports dashboard page is coming soon.
- Not showing payment settings warning now when Payflow is setup with all values filled in.
- Updated preheaders/billing.php to get the most recent successful order from the DB to use when updating. (ORDER BY id DESC in the query)
- Added pmpro_stripe_subscription_deleted hook in stripe-webhook.php for when subscriptions are cancelled on the Stripe side. Use this code to cancel on your site as well: https://gist.github.com/strangerstudios/5093710
- Now using $pmpro_currency_symbol when membership price is shown on the edit profile page in the dashboard/etc.
- Added pmpro_authorizenet_post_url filter to use Authorize.net gateway class with a different post url, e.g. if you have a gateway that offers an Authorize.net compatibility mode.
- Added pmpro_check_status_after_checkout filter so you can e.g. set the status to "pending" instead of "success" when a user checks out with the check gateway. They will still have access to the membership level, but you can update the status via the orders dashboard later.
- Added pmpro_confirmation_order_status filter so you change which status the confirmation page looks for. Can return an array as well since the getLastMemberOrder method call on MemberOrder has been updated to support $status as an array.
- Orders made via the check gateway now have PaymentType
Download this release
Release Info
Developer | strangerstudios |
Plugin | Paid Memberships Pro |
Version | 1.6 |
Comparing to | |
See all releases |
Code changes from version 1.7.14 to 1.6
- adminpages/addons.php +0 -142
- adminpages/addons/hide-admin-bar-from-non-admins.php +0 -32
- adminpages/addons/images/pmpro-aweber.gif +0 -0
- adminpages/addons/images/pmpro-bbpress.jpg +0 -0
- adminpages/addons/images/pmpro-constant-contact.gif +0 -0
- adminpages/addons/images/pmpro-email-templates.gif +0 -0
- adminpages/addons/images/pmpro-infusionsoft.jpg +0 -0
- adminpages/addons/images/pmpro-mailchimp.jpg +0 -0
- adminpages/addons/images/pmpro-network.gif +0 -0
- adminpages/addons/images/pmpro-post-affiliate-pro.jpg +0 -0
- adminpages/addons/images/pmpro-register-helper.gif +0 -0
- adminpages/addons/images/pmpro-series.gif +0 -0
- adminpages/addons/images/pmpro-woocommerce.gif +0 -0
- adminpages/addons/images/pmpro-wp-affiliate-platform.jpg +0 -0
- adminpages/addons/images/wp-bouncer.gif +0 -0
- adminpages/addons/pmpro-addon-packages.php +0 -30
- adminpages/addons/pmpro-affiliates.php +0 -30
- adminpages/addons/pmpro-aweber.php +0 -31
- adminpages/addons/pmpro-bbpress.php +0 -31
- adminpages/addons/pmpro-constant-contact.php +0 -31
- adminpages/addons/pmpro-disable-emails.php +0 -28
- adminpages/addons/pmpro-email-templates.php +0 -31
- adminpages/addons/pmpro-expiration.php +0 -30
- adminpages/addons/pmpro-freeaddress.php +0 -30
- adminpages/addons/pmpro-infusionsoft.php +0 -31
- adminpages/addons/pmpro-international-addresses.php +0 -31
- adminpages/addons/pmpro-level-cost-text.php +0 -30
- adminpages/addons/pmpro-mailchimp.php +0 -31
- adminpages/addons/pmpro-network-subsite.php +0 -31
- adminpages/addons/pmpro-network.php +0 -31
- adminpages/addons/pmpro-post-affiliate-pro.php +0 -31
- adminpages/addons/pmpro-register-helper.php +0 -31
- adminpages/addons/pmpro-require-code-to-register.php +0 -28
- adminpages/addons/pmpro-series.php +0 -31
- adminpages/addons/pmpro-shipping.php +0 -31
- adminpages/addons/pmpro-user-pages.php +0 -30
- adminpages/addons/pmpro-woocommerce.php +0 -31
- adminpages/addons/pmpro-wp-affiliate.php +0 -31
- adminpages/addons/tml.php +0 -32
- adminpages/addons/wp-bouncer.php +0 -31
- adminpages/admin_footer.php +0 -1
- adminpages/admin_header.php +22 -71
- adminpages/advancedsettings.php +39 -123
- adminpages/dashboard.php +2 -2
- adminpages/discountcodes.php +648 -636
- adminpages/emailsettings.php +152 -181
- adminpages/functions.php +0 -222
- adminpages/membershiplevels.php +574 -588
- adminpages/memberslist-csv.php +37 -114
- adminpages/memberslist.php +205 -238
- adminpages/orders-csv.php +24 -136
- adminpages/orders.php +89 -389
- adminpages/pagesettings.php +28 -70
- adminpages/paymentsettings.php +484 -538
- adminpages/reports.php +0 -62
- adminpages/reports/login.php +0 -412
- adminpages/reports/memberships.php +0 -651
- adminpages/reports/sales.php +0 -397
- classes/class.memberorder.php +46 -114
- classes/class.pmproemail.php +58 -184
- classes/gateways/class.pmprogateway.php +7 -26
- classes/gateways/class.pmprogateway_authorizenet.php +13 -14
- classes/gateways/class.pmprogateway_braintree.php +24 -27
- classes/gateways/class.pmprogateway_check.php +10 -12
- classes/gateways/class.pmprogateway_cybersource.php +0 -765
- classes/gateways/class.pmprogateway_payflowpro.php +29 -183
- classes/gateways/class.pmprogateway_paypal.php +17 -20
- classes/gateways/class.pmprogateway_paypalexpress.php +25 -72
- classes/gateways/class.pmprogateway_paypalstandard.php +17 -35
- classes/gateways/class.pmprogateway_stripe.php +40 -91
- classes/gateways/class.pmprogateway_twocheckout.php +0 -145
- css/admin-rtl.css +0 -63
- css/admin.css +61 -97
- css/frontend-rtl.css +0 -111
- css/frontend.css +118 -173
- email/admin_change.html +1 -1
- email/billing.html +4 -1
- email/billing_failure.html +5 -1
- email/billing_failure_admin.html +5 -1
- email/cancel.html +1 -1
- email/cancel_admin.html +1 -1
- email/checkout_check.html +1 -1
- email/checkout_express.html +2 -2
- email/checkout_express_admin.html +2 -2
- email/checkout_freetrial.html +4 -1
- email/checkout_freetrial_admin.html +4 -1
- email/checkout_paid.html +4 -1
- email/checkout_paid_admin.html +6 -1
- email/checkout_trial.html +4 -1
- email/checkout_trial_admin.html +6 -1
- email/credit_card_expiring.html +0 -13
- email/invoice.html +6 -2
- images/Paid-Memberships-Pro.png +0 -0
- images/Paid-Memberships-Pro_watermark.png +0 -0
- images/icon-pmproadmin16-sprite.png +0 -0
- images/icon-pmproadmin16-sprite_2x.png +0 -0
- images/icon-pmproadmin32.png +0 -0
- images/icon-pmproadmin32_2x.png +0 -0
- includes/adminpages.php +0 -226
- includes/cleanup.php +0 -40
- includes/content.php +0 -405
- includes/currencies.php +3 -12
- includes/email.php +0 -111
- includes/filters.php +3 -41
- includes/functions.php +1505 -1742
- includes/https.php +0 -185
- includes/init.php +0 -240
- includes/lib/CyberSource/cyber_source_soap_client.php +0 -87
- includes/lib/Stripe/Stripe.php +0 -10
- includes/lib/Stripe/Stripe/Account.php +6 -5
- includes/lib/Stripe/Stripe/ApiRequestor.php +51 -153
- includes/lib/Stripe/Stripe/ApiResource.php +17 -51
- includes/lib/Stripe/Stripe/ApplicationFee.php +0 -53
- includes/lib/Stripe/Stripe/AttachedObject.php +0 -23
- includes/lib/Stripe/Stripe/Balance.php +0 -15
- includes/lib/Stripe/Stripe/BalanceTransaction.php +0 -39
- includes/lib/Stripe/Stripe/Card.php +0 -54
- includes/lib/Stripe/Stripe/CardError.php +2 -4
- includes/lib/Stripe/Stripe/Charge.php +7 -55
- includes/lib/Stripe/Stripe/Coupon.php +7 -24
- includes/lib/Stripe/Stripe/Customer.php +6 -61
- includes/lib/Stripe/Stripe/Error.php +7 -9
- includes/lib/Stripe/Stripe/Event.php +6 -12
- includes/lib/Stripe/Stripe/InvalidRequestError.php +2 -4
- includes/lib/Stripe/Stripe/Invoice.php +6 -30
- includes/lib/Stripe/Stripe/InvoiceItem.php +6 -24
- includes/lib/Stripe/Stripe/List.php +5 -25
- includes/lib/Stripe/Stripe/Object.php +12 -123
- includes/lib/Stripe/Stripe/Plan.php +6 -26
- includes/lib/Stripe/Stripe/Recipient.php +0 -75
- includes/lib/Stripe/Stripe/SingletonApiResource.php +0 -7
- includes/lib/Stripe/Stripe/Stripe.php +3 -49
- includes/lib/Stripe/Stripe/Subscription.php +0 -58
- includes/lib/Stripe/Stripe/Token.php +6 -12
- includes/lib/Stripe/Stripe/Transfer.php +6 -34
- includes/lib/Stripe/Stripe/Util.php +14 -42
- includes/lib/Twocheckout/Twocheckout.php +0 -31
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutAccount.php +0 -25
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutApi.php +0 -33
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutCoupon.php +0 -42
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutError.php +0 -14
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutOption.php +0 -42
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutPayment.php +0 -24
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutProduct.php +0 -42
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutSale.php +0 -104
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutUtil.php +0 -72
- includes/lib/Twocheckout/Twocheckout/TwocheckoutCharge.php +0 -61
- includes/lib/Twocheckout/Twocheckout/TwocheckoutMessage.php +0 -13
- includes/lib/Twocheckout/Twocheckout/TwocheckoutNotification.php +0 -20
- includes/lib/Twocheckout/Twocheckout/TwocheckoutReturn.php +0 -21
- includes/localization.php +0 -30
- includes/login.php +0 -158
- includes/metaboxes.php +0 -108
- includes/notifications.php +0 -61
- includes/profile.php +0 -224
- includes/recaptcha.php +0 -22
- includes/reports.php +0 -27
- includes/services.php +0 -70
- includes/setup.sql +33 -43
- includes/upgradecheck.php +113 -214
- includes/xmlrpc.php +0 -80
- languages/email/da_DK/admin_change.html +0 -7
- languages/email/da_DK/admin_change_admin.html +0 -5
- languages/email/da_DK/billing.html +0 -16
- languages/email/da_DK/billing_admin.html +0 -17
- languages/email/da_DK/billing_failure.html +0 -11
- languages/email/da_DK/billing_failure_admin.html +0 -11
- languages/email/da_DK/cancel.html +0 -3
- languages/email/da_DK/cancel_admin.html +0 -8
- languages/email/da_DK/checkout_check.html +0 -17
- languages/email/da_DK/checkout_check_admin.html +0 -17
- languages/email/da_DK/checkout_express.html +0 -14
- languages/email/da_DK/checkout_express_admin.html +0 -14
- languages/email/da_DK/checkout_free.html +0 -8
- languages/email/da_DK/checkout_free_admin.html +0 -8
- languages/email/da_DK/checkout_freetrial.html +0 -19
- languages/email/da_DK/checkout_freetrial_admin.html +0 -19
- languages/email/da_DK/checkout_paid.html +0 -23
- languages/email/da_DK/checkout_paid_admin.html +0 -23
- languages/email/da_DK/checkout_trial.html +0 -23
- languages/email/da_DK/checkout_trial_admin.html +0 -23
- languages/email/da_DK/credit_card_expiring.html +0 -13
- languages/email/da_DK/default.html +0 -1
- languages/email/da_DK/footer.html +0 -4
- languages/email/da_DK/header.html +0 -1
- languages/email/da_DK/invoice.html +0 -19
- languages/email/da_DK/membership_expired.html +0 -7
- languages/email/da_DK/membership_expiring.html +0 -6
- languages/email/da_DK/trial_ending.html +0 -8
- languages/gettext.sh +0 -23
- languages/pmpro-cs_CZ.mo +0 -0
- languages/pmpro-cs_CZ.po +0 -2889
- languages/pmpro-da_DK.mo +0 -0
- languages/pmpro-da_DK.po +0 -2059
adminpages/addons.php
DELETED
@@ -1,142 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
//only admins can get this
|
3 |
-
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_addons")))
|
4 |
-
{
|
5 |
-
die(__("You do not have permissions to perform this action.", "pmpro"));
|
6 |
-
}
|
7 |
-
|
8 |
-
global $wpdb, $msg, $msgt, $pmpro_addons;
|
9 |
-
|
10 |
-
/*
|
11 |
-
Addon lists
|
12 |
-
*/
|
13 |
-
$pmpro_addon_lists = array(
|
14 |
-
'repo' => array('Plugins in the WordPress Repository', 'These official PMPro plugins are available in the WordPress repository and can be installed through Plugins --> Add New.'),
|
15 |
-
'thirdparty' => array('Third-party Integration', 'These official PMPro plugins integrate with specific third-party tools and software.'),
|
16 |
-
'recommended' => array('Recommended Plugins', 'These plugins are not developed by the PMPro team, but are recommended for sites running PMPro.'),
|
17 |
-
'github' => array('Plugins on GitHub', 'These official PMPro plugins must be downloaded from GitHub and installed through Plugins --> Add New --> Upload, then activated. These plugins cannot be automatically updated and may require more developer input.'),
|
18 |
-
'gists' => array('Code Gists', 'These are bits of code that generally must be added to your active theme\'s functions.php file or included in a custom plugin. Most gists require customization and are recommended for developers only.')
|
19 |
-
);
|
20 |
-
|
21 |
-
/*
|
22 |
-
Function to add an addon
|
23 |
-
*/
|
24 |
-
function pmpro_add_addon($list, $addon)
|
25 |
-
{
|
26 |
-
global $pmpro_addons;
|
27 |
-
|
28 |
-
//make sure we have the base array
|
29 |
-
if(empty($pmpro_addons))
|
30 |
-
$pmpro_addons = array();
|
31 |
-
|
32 |
-
//make sure we have an array for the list
|
33 |
-
if(empty($pmpro_addons[$list]))
|
34 |
-
$pmpro_addons[$list] = array();
|
35 |
-
|
36 |
-
//add addon to list
|
37 |
-
$pmpro_addons[$list][] = $addon;
|
38 |
-
}
|
39 |
-
|
40 |
-
/*
|
41 |
-
Load All Addons
|
42 |
-
*/
|
43 |
-
$pmpro_addons_dir = dirname(__FILE__) . "/../adminpages/addons/";
|
44 |
-
$cwd = getcwd();
|
45 |
-
chdir($pmpro_addons_dir);
|
46 |
-
$count = 0;
|
47 |
-
foreach (glob("*.php") as $filename)
|
48 |
-
{
|
49 |
-
$count++;
|
50 |
-
require_once($filename);
|
51 |
-
}
|
52 |
-
chdir($cwd);
|
53 |
-
|
54 |
-
require_once(dirname(__FILE__) . "/admin_header.php");
|
55 |
-
?>
|
56 |
-
|
57 |
-
<h2>Add Ons</h2>
|
58 |
-
<ul id="addon-filters" class="subsubsub">
|
59 |
-
<li id="addon-filters-all"><a href="javascript:void(0);" class="current all tab">All</a> <span>(<?php echo $count;?>)</span></li>
|
60 |
-
<?php foreach($pmpro_addon_lists as $list => $list_info) { ?>
|
61 |
-
<li id="addon-filters-<?php echo $list;?>"> | <a href="javascript:void(0);>" class="tab"><?php echo $list_info[0];?></a> <span>(<?php echo count($pmpro_addons[$list]);?>)</span></li>
|
62 |
-
<?php } ?>
|
63 |
-
</ul>
|
64 |
-
|
65 |
-
<?php foreach($pmpro_addon_lists as $list => $list_info) { ?>
|
66 |
-
<div id="pmpro-<?php echo $list;?>" class="pmpro-addon-list widgets-holder-wrap">
|
67 |
-
|
68 |
-
<h3 class="section-title"><?php echo $list_info[0];?></h3>
|
69 |
-
<p class="description"><?php echo $list_info[1];?></p>
|
70 |
-
<br class="clear" />
|
71 |
-
|
72 |
-
<div id="addons-list-<?php echo $list;?>" class="addon-list">
|
73 |
-
|
74 |
-
<?php foreach($pmpro_addons[$list] as $slug => $addon) { ?>
|
75 |
-
<div id="addon-<?php echo $slug;?>" class="widget <?php if($addon['enabled']) echo "enabled"; else echo "disabled";?>">
|
76 |
-
<div class="widget-top">
|
77 |
-
<div class="widget-title">
|
78 |
-
<h4>
|
79 |
-
<span class="status-label"><?php if($addon['enabled']) echo __("Enabled", "pmpro"); else echo __("Disabled", "pmpro");?></span>
|
80 |
-
<span class="title"><?php echo $addon['title'];?></span>
|
81 |
-
<span class="version pmpro_tag-grey"><?php echo $addon['version'];?></span>
|
82 |
-
<span class="in-widget-title"></span>
|
83 |
-
</h4>
|
84 |
-
</div> <!-- end widget-title -->
|
85 |
-
</div> <!-- end widget-top -->
|
86 |
-
<div class="widget-inside">
|
87 |
-
<?php call_user_func($addon['widget'], $addon);?>
|
88 |
-
</div> <!-- end addon-inside -->
|
89 |
-
</div> <!-- end widget -->
|
90 |
-
<?php } ?>
|
91 |
-
|
92 |
-
<br class="clear" />
|
93 |
-
</div> <!-- end addon-list -->
|
94 |
-
|
95 |
-
</div> <!-- end pmpro-<?php echo $list;?> -->
|
96 |
-
<?php } ?>
|
97 |
-
|
98 |
-
<script>
|
99 |
-
//tabs
|
100 |
-
jQuery(document).ready(function() {
|
101 |
-
jQuery('#addon-filters a.tab').click(function() {
|
102 |
-
//which tab?
|
103 |
-
var tab = jQuery(this).parent().attr('id').replace('addon-filters-', '');
|
104 |
-
|
105 |
-
//un select tabs
|
106 |
-
jQuery('#addon-filters a.tab').removeClass('current');
|
107 |
-
|
108 |
-
//select this tab
|
109 |
-
jQuery('#addon-filters-'+tab+' a').addClass('current');
|
110 |
-
|
111 |
-
//show all?
|
112 |
-
if(tab == 'all')
|
113 |
-
jQuery('div.pmpro-addon-list').show();
|
114 |
-
else
|
115 |
-
{
|
116 |
-
//hide all
|
117 |
-
jQuery('div.pmpro-addon-list').hide();
|
118 |
-
|
119 |
-
//show this one
|
120 |
-
jQuery('#pmpro-'+tab).show();
|
121 |
-
}
|
122 |
-
});
|
123 |
-
});
|
124 |
-
|
125 |
-
//resize addon boxes
|
126 |
-
jQuery(document).ready(function() {
|
127 |
-
jQuery('.addon-list').each(function() {
|
128 |
-
//what's the tallest p in the list?
|
129 |
-
var tallest = 32;
|
130 |
-
jQuery(this).find('div.info p').each(function() {
|
131 |
-
tallest = Math.max(tallest, jQuery(this).height());
|
132 |
-
});
|
133 |
-
|
134 |
-
//set all p's to match
|
135 |
-
jQuery(this).find('div.info p').css('height', tallest);
|
136 |
-
});
|
137 |
-
});
|
138 |
-
</script>
|
139 |
-
|
140 |
-
<?php
|
141 |
-
require_once(dirname(__FILE__) . "/admin_footer.php");
|
142 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/hide-admin-bar-from-non-admins.php
DELETED
@@ -1,32 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: Hide Admin Bar From Non-Admins
|
4 |
-
Slug: hide-admin-bar-from-non-admins
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('repo', array(
|
7 |
-
'title' => 'Hide Admin Bar From Non-Admins',
|
8 |
-
'version' => '1.0',
|
9 |
-
'widget' => 'pmpro_addon_hide_admin_bar_from_non_admins_widget',
|
10 |
-
'enabled' => function_exists('habfna_disable_admin_bar')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_hide_admin_bar_from_non_admins_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<div class="info">
|
18 |
-
<p>Perfect for sites where there is only one admin who needs access to the dashboard and the admin bar. When activated only administrators will see the admin bar.</p>
|
19 |
-
<div class="actions">
|
20 |
-
<form method="post" name="component-actions" action="">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="<?php echo admin_url("plugins.php");?>" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../hide-admin-bar-from-non-admins/hide-admin-bar-from-non-admins.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=hide-admin-bar-from-non-admins/hide-admin-bar-from-non-admins.php'), 'activate-plugin_hide-admin-bar-from-non-admins/hide-admin-bar-from-non-admins.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=hide-admin-bar-from-non-admins'), 'install-plugin_hide-admin-bar-from-non-admins'); ?>" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</form>
|
29 |
-
</div>
|
30 |
-
</div> <!-- end info -->
|
31 |
-
<?php
|
32 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/images/pmpro-aweber.gif
DELETED
Binary file
|
adminpages/addons/images/pmpro-bbpress.jpg
DELETED
Binary file
|
adminpages/addons/images/pmpro-constant-contact.gif
DELETED
Binary file
|
adminpages/addons/images/pmpro-email-templates.gif
DELETED
Binary file
|
adminpages/addons/images/pmpro-infusionsoft.jpg
DELETED
Binary file
|
adminpages/addons/images/pmpro-mailchimp.jpg
DELETED
Binary file
|
adminpages/addons/images/pmpro-network.gif
DELETED
Binary file
|
adminpages/addons/images/pmpro-post-affiliate-pro.jpg
DELETED
Binary file
|
adminpages/addons/images/pmpro-register-helper.gif
DELETED
Binary file
|
adminpages/addons/images/pmpro-series.gif
DELETED
Binary file
|
adminpages/addons/images/pmpro-woocommerce.gif
DELETED
Binary file
|
adminpages/addons/images/pmpro-wp-affiliate-platform.jpg
DELETED
Binary file
|
adminpages/addons/images/wp-bouncer.gif
DELETED
Binary file
|
adminpages/addons/pmpro-addon-packages.php
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Addon Packages
|
4 |
-
Slug: pmpro-addon-packages
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('github', array(
|
7 |
-
'title' => 'PMPro Addon Packages',
|
8 |
-
'version' => '.4.3',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_addon_packages_widget',
|
10 |
-
'enabled' => function_exists('pmproap_post_meta')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_addon_packages_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<div class="info">
|
18 |
-
<p>Sell access to individual pages or posts for a flat fee. This is a workaround if you would like to allow multiple membership levels per user.</p>
|
19 |
-
<div class="actions">
|
20 |
-
<?php if($addon['enabled']) { ?>
|
21 |
-
<a href="https://github.com/strangerstudios/pmpro-addon-packages/blob/master/readme.txt" class="button">Enabled</a>
|
22 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-addon-packages/pmpro-addon-packages.php")) { ?>
|
23 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-addon-packages/pmpro-addon-packages.php'), 'activate-plugin_pmpro-addon-packages/pmpro-addon-packages.php')?>" class="button button-primary">Activate</a>
|
24 |
-
<?php } else { ?>
|
25 |
-
<a href="https://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-addon-packages.zip" class="button button-primary">Download</a>
|
26 |
-
<?php } ?>
|
27 |
-
</div>
|
28 |
-
</div> <!-- end info -->
|
29 |
-
<?php
|
30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-affiliates.php
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Affiliates
|
4 |
-
Slug: pmpro-affiliates
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('github', array(
|
7 |
-
'title' => 'PMPro Affiliates',
|
8 |
-
'version' => '.2.4',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_affiliates_widget',
|
10 |
-
'enabled' => function_exists('pmpro_affiliates_dependencies')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_affiliates_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<div class="info">
|
18 |
-
<p>Lightweight Affiliate system. Create affiliate accounts and codes; tracks checkouts by affiliate account.</p>
|
19 |
-
<div class="actions">
|
20 |
-
<?php if($addon['enabled']) { ?>
|
21 |
-
<a href="https://github.com/strangerstudios/pmpro-affiliates/blob/master/readme.txt" class="button">Enabled</a>
|
22 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-affiliates/pmpro-affiliates.php")) { ?>
|
23 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-affiliates/pmpro-affiliates.php'), 'activate-plugin_pmpro-affiliates/pmpro-affiliates.php')?>" class="button button-primary">Activate</a>
|
24 |
-
<?php } else { ?>
|
25 |
-
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-affiliates.zip" class="button button-primary">Download</a>
|
26 |
-
<?php } ?>
|
27 |
-
</div>
|
28 |
-
</div> <!-- end info -->
|
29 |
-
<?php
|
30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-aweber.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro AWeber Integration
|
4 |
-
Slug: pmpro-aweber
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('thirdparty', array(
|
7 |
-
'title' => 'PMPro AWeber Integration',
|
8 |
-
'version' => '1.0',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_aweber_widget',
|
10 |
-
'enabled' => function_exists('pmproaw_init')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_aweber_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-aweber.gif" />
|
18 |
-
<div class="info">
|
19 |
-
<p>Integrate User Registrations with AWeber. Adds members to lists based on their membership level. (Note: works without PMPro as well.)</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="<?php echo admin_url("plugins.php");?>" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-aweber/pmpro-aweber.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-aweber/pmpro-aweber.php'), 'activate-plugin_pmpro-aweber/pmpro-aweber.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=pmpro-aweber'), 'install-plugin_pmpro-aweber'); ?>" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-bbpress.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro bbPress
|
4 |
-
Slug: pmpro-bbpress
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('repo', array(
|
7 |
-
'title' => 'PMPro bbPress',
|
8 |
-
'version' => '1.0.1',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_bbpress_widget',
|
10 |
-
'enabled' => function_exists('pmprobbp_add_meta_box')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_bbpress_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-bbpress.jpg" />
|
18 |
-
<div class="info">
|
19 |
-
<p>Locking down bbPress Forums by Membership Level and Forum ID.</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="<?php echo admin_url("plugins.php");?>" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-bbpress/pmpro-bbpress.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-bbpress/pmpro-bbpress.php'), 'activate-plugin_pmpro-bbpress/pmpro-bbpress.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=pmpro-bbpress'), 'install-plugin_pmpro-bbpress'); ?>" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-constant-contact.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Constant Contact Integration
|
4 |
-
Slug: pmpro-constant-contact
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('thirdparty', array(
|
7 |
-
'title' => 'PMPro Constant Contact Integration',
|
8 |
-
'version' => '1.0',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_constant_contact_widget',
|
10 |
-
'enabled' => function_exists('pmprocc_init')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_constant_contact_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-constant-contact.gif" />
|
18 |
-
<div class="info">
|
19 |
-
<p>Integrate User Registrations with Constant Contact . Adds members to lists based on their membership level. (Note: works without PMPro as well.)</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="<?php echo admin_url("plugins.php");?>" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-constant-contact/pmpro-constant-contact.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-constant-contact/pmpro-constant-contact.php'), 'activate-plugin_pmpro-constant-contact/pmpro-constant-contact.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=pmpro-constant-contact'), 'install-plugin_pmpro-constant-contact'); ?>" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-disable-emails.php
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Disable PMPro Emails
|
4 |
-
Slug: pmpro-disable-emails
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('gists', array(
|
7 |
-
'title' => 'PMPro Disable Emails',
|
8 |
-
'version' => '.1',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_disable_emails_widget',
|
10 |
-
'enabled' => function_exists('dae_pmpro_email_recipient')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_disable_emails_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<div class="info">
|
18 |
-
<p>Disable all or specific emails sent by the PMPro plugin.</p>
|
19 |
-
<div class="actions">
|
20 |
-
<?php if($addon['enabled']) { ?>
|
21 |
-
<a target="_blank" href="https://gist.github.com/strangerstudios/3667545" class="button">Enabled</a>
|
22 |
-
<?php } else { ?>
|
23 |
-
<a target="_blank" href="https://gist.github.com/strangerstudios/3667545" class="button button-primary">View Gist</a>
|
24 |
-
<?php } ?>
|
25 |
-
</div>
|
26 |
-
</div> <!-- end info -->
|
27 |
-
<?php
|
28 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-email-templates.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Email Templates Editor
|
4 |
-
Slug: pmpro-email-templates-addon
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('repo', array(
|
7 |
-
'title' => 'PMPro Email Templates',
|
8 |
-
'version' => '.5.2',
|
9 |
-
'widget' => 'pmpro_addon_email_templates_widget',
|
10 |
-
'enabled' => function_exists('pmproet_scripts')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_email_templates_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-email-templates.gif" />
|
18 |
-
<div class="info">
|
19 |
-
<p>Easily edit system-generated Email Templates from the WordPress admin.</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="http://wordpress.org/plugins/pmpro-email-templates-addon/" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-email-templates-addon/pmpro-email-templates.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-email-templates-addon/pmpro-email-templates.php'), 'activate-plugin_pmpro-email-templates-addon/pmpro-email-templates.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=pmpro-email-templates-addon'), 'install-plugin_pmpro-email-templates-addon'); ?>" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-expiration.php
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Expiration Date
|
4 |
-
Slug: pmpro-expiration
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('github', array(
|
7 |
-
'title' => 'PMPro Set Expiration Dates',
|
8 |
-
'version' => '.1.1',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_expiration_widget',
|
10 |
-
'enabled' => function_exists('pmprosed_pmpro_checkout_level')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_expiration_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<div class="info">
|
18 |
-
<p>Set a specific expiration date (e.g. 2013-12-31) for a PMPro membership level or discount code.</p>
|
19 |
-
<div class="actions">
|
20 |
-
<?php if($addon['enabled']) { ?>
|
21 |
-
<a href="https://github.com/strangerstudios/pmpro-set-expiration-dates/blob/master/readme.txt" class="button">Enabled</a>
|
22 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-set-expiration-dates/pmpro-set-expiration-dates.php")) { ?>
|
23 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-set-expiration-dates/pmpro-set-expiration-dates.php'), 'activate-plugin_pmpro-set-expiration-dates/pmpro-set-expiration-dates.php')?>" class="button button-primary">Activate</a>
|
24 |
-
<?php } else { ?>
|
25 |
-
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-set-expiration-dates.zip" class="button button-primary">Download</a>
|
26 |
-
<?php } ?>
|
27 |
-
</div>
|
28 |
-
</div> <!-- end info -->
|
29 |
-
<?php
|
30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-freeaddress.php
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Require Name and Address for Free Level
|
4 |
-
Slug: pmpro-freerequire
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('github', array(
|
7 |
-
'title' => 'PMPro Require Name/Address for Free Level',
|
8 |
-
'version' => '.2',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_freerequire_widget',
|
10 |
-
'enabled' => function_exists('my_pmpro_checkout_boxes_require_address')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_freerequire_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<div class="info">
|
18 |
-
<p>Require name/address for free Membership Level checkout.</p>
|
19 |
-
<div class="actions">
|
20 |
-
<?php if($addon['enabled']) { ?>
|
21 |
-
<a href="https://github.com/strangerstudios/pmpro-address-for-free-levels" class="button">Enabled</a>
|
22 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-address-for-free-levels/pmpro-address-for-free-levels.php")) { ?>
|
23 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-address-for-free-levels/pmpro-address-for-free-levels.php'), 'activate-plugin_pmpro-address-for-free-levels/pmpro-address-for-free-levels.php')?>" class="button button-primary">Activate</a>
|
24 |
-
<?php } else { ?>
|
25 |
-
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-address-for-free-levels.zip" class="button button-primary">Download</a>
|
26 |
-
<?php } ?>
|
27 |
-
</div>
|
28 |
-
</div> <!-- end info -->
|
29 |
-
<?php
|
30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-infusionsoft.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Infusionsoft Integration
|
4 |
-
Slug: pmpro-infusionsoft
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('thirdparty', array(
|
7 |
-
'title' => 'PMPro Infusionsoft Integration',
|
8 |
-
'version' => '1.2',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_infusionsoft_widget',
|
10 |
-
'enabled' => function_exists('pmprois_init')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_infusionsoft_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-infusionsoft.jpg" />
|
18 |
-
<div class="info">
|
19 |
-
<p>Integrate with Infusionsoft. Add members to email lists (groups, tags) based on their membership level. (Note: works without PMPro as well.)</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="<?php echo admin_url("plugins.php");?>" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-infusionsoft/pmpro-infusionsoft.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-infusionsoft/pmpro-infusionsoft.php'), 'activate-plugin_pmpro-infusionsoft/pmpro-infusionsoft.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=pmpro-infusionsoft'), 'install-plugin_pmpro-infusionsoft'); ?>" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-international-addresses.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro International Addresses
|
4 |
-
Slug: pmpro-international-addresses
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('github', array(
|
7 |
-
'title' => 'PMPro International Addresses',
|
8 |
-
'version' => '.2.2',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_international_addresses_widget',
|
10 |
-
'enabled' => function_exists('pmproia_pmpro_international_addresses')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_international_addresses_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<?php /* <img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-international-addresses.jpg" /> */ ?>
|
18 |
-
<div class="info">
|
19 |
-
<p>Adds long form addresses to the PMPro checkout.</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="https://github.com/strangerstudios/pmpro-international-addresses/" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-international-addresses/pmpro-international-addresses.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-international-addresses/pmpro-international-addresses.php'), 'activate-plugin_pmpro-international-addresses/pmpro-international-addresses.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-international-addresses.zip" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-level-cost-text.php
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Custom Level Cost Text
|
4 |
-
Slug: pmpro-level-cost-text
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('github', array(
|
7 |
-
'title' => 'PMPro Level Cost Text',
|
8 |
-
'version' => '.2',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_level_cost_text_widget',
|
10 |
-
'enabled' => function_exists('pclct_pmpro_discount_code_after_level_settings')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_level_cost_text_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<div class="info">
|
18 |
-
<p>Adds a "level cost text" field to PMPro Membership Levels and Discount Codes to allow you to override the automatically generated level cost text PMPro provides.</p>
|
19 |
-
<div class="actions">
|
20 |
-
<?php if($addon['enabled']) { ?>
|
21 |
-
<a href="https://github.com/strangerstudios/pmpro-level-cost-text/blob/master/readme.txt" class="button">Enabled</a>
|
22 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-level-cost-text/pmpro-level-cost-text.php")) { ?>
|
23 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-level-cost-text/pmpro-level-cost-text.php'), 'activate-plugin_pmpro-level-cost-text/pmpro-level-cost-text.php')?>" class="button button-primary">Activate</a>
|
24 |
-
<?php } else { ?>
|
25 |
-
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-level-cost-text.zip" class="button button-primary">Download</a>
|
26 |
-
<?php } ?>
|
27 |
-
</div>
|
28 |
-
</div> <!-- end info -->
|
29 |
-
<?php
|
30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-mailchimp.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro MailChimp Integration
|
4 |
-
Slug: pmpro-mailchimp
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('thirdparty', array(
|
7 |
-
'title' => 'PMPro MailChimp Integration',
|
8 |
-
'version' => '1.0',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_mailchimp_widget',
|
10 |
-
'enabled' => function_exists('pmpromc_init')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_mailchimp_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-mailchimp.jpg" />
|
18 |
-
<div class="info">
|
19 |
-
<p>Integrate User Registrations with Mailchimp. Adds members to lists based on their membership level. (Note: works without PMPro as well.)</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="<?php echo admin_url("plugins.php");?>" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-mailchimp/pmpro-mailchimp.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-mailchimp/pmpro-mailchimp.php'), 'activate-plugin_pmpro-mailchimp/pmpro-mailchimp.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=pmpro-mailchimp'), 'install-plugin_pmpro-mailchimp'); ?>" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-network-subsite.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Network
|
4 |
-
Slug: pmpro-network-subsite
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('github', array(
|
7 |
-
'title' => 'PMPro Network Subsite Helper',
|
8 |
-
'version' => '.2',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_network_subsite_widget',
|
10 |
-
'enabled' => function_exists('pmpron_subsite_activated_plugin')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_network_subsite_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-network.gif" />
|
18 |
-
<div class="info">
|
19 |
-
<p>Have network subsites use membership data from a "main" site to handle access restrictions.</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="https://github.com/strangerstudios/pmpro-network-subsite" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-network-subsite/pmpro-network-subsite.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-network-subsite/pmpro-network-subsite.php'), 'activate-plugin_pmpro-network-subsite/pmpro-network-subsite.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-network-subsite.zip" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-network.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Network
|
4 |
-
Slug: pmpro-network
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('github', array(
|
7 |
-
'title' => 'PMPro Network',
|
8 |
-
'version' => '.3.1',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_network_widget',
|
10 |
-
'enabled' => function_exists('pmpron_new_blogs_settings')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_network_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-network.gif" />
|
18 |
-
<div class="info">
|
19 |
-
<p>Allow users to checkout for a membership to create a site on your WordPress multisite network.</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="https://github.com/strangerstudios/pmpro-network/blob/master/readme.txt" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-network/pmpro-network.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-network/pmpro-network.php'), 'activate-plugin_pmpro-network/pmpro-network.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-network.zip" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-post-affiliate-pro.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Post Affiliate Pro Integration
|
4 |
-
Slug: pmpro-post-affiliate-pro
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('thirdparty', array(
|
7 |
-
'title' => 'PMPro Post Affiliate Pro Integration',
|
8 |
-
'version' => '.2.1.1',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_post_affiliate_pro_widget',
|
10 |
-
'enabled' => function_exists('pap_pmpro_track_sale')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_post_affiliate_pro_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-post-affiliate-pro.jpg" />
|
18 |
-
<div class="info">
|
19 |
-
<p>Integrate Paid Memberships Pro with the Post Affiliate Pro platform.</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="https://github.com/strangerstudios/pmpro-post-affiliate-pro/blob/master/readme.txt" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-post-affiliate-pro/pmpro-post-affiliate-pro.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-post-affiliate-pro/pmpro-post-affiliate-pro.php'), 'activate-plugin_pmpro-post-affiliate-pro/pmpro-post-affiliate-pro.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-post-affiliate-pro.zip" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-register-helper.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Register Helper
|
4 |
-
Slug: pmpro-register-helper
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('github', array(
|
7 |
-
'title' => 'PMPro Register Helper',
|
8 |
-
'version' => '.5.16.1',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_register_helper_widget',
|
10 |
-
'enabled' => class_exists('PMProRH_Field')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_register_helper_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-register-helper.gif" />
|
18 |
-
<div class="info">
|
19 |
-
<p>Add additional meta fields to your PMPro checkout page and/or "Your Profile" pages. Support for text, select, multi-select, textarea, hidden, and custom HTML. Loop into existing checkout/profile field sections or add new ones.</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="https://github.com/strangerstudios/pmpro-register-helper/blob/master/readme.txt" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-register-helper/pmpro-register-helper.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-register-helper/pmpro-register-helper.php'), 'activate-plugin_pmpro-register-helper/pmpro-register-helper.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-register-helper.zip" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-require-code-to-register.php
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Require Code to Register
|
4 |
-
Slug: pmpro-require-code-to-register
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('gists', array(
|
7 |
-
'title' => 'PMPro Require a Code to Register',
|
8 |
-
'version' => '.1',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_require_code_to_register_widget',
|
10 |
-
'enabled' => function_exists('my_pmpro_registration_checks_require_code_to_register')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_require_code_to_register_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<div class="info">
|
18 |
-
<p>Require a discount code to checkout for a specific level.</p>
|
19 |
-
<div class="actions">
|
20 |
-
<?php if($addon['enabled']) { ?>
|
21 |
-
<a target="_blank" href="https://gist.github.com/strangerstudios/5573829" class="button">Enabled</a>
|
22 |
-
<?php } else { ?>
|
23 |
-
<a target="_blank" href="https://gist.github.com/strangerstudios/5573829" class="button button-primary">View Gist</a>
|
24 |
-
<?php } ?>
|
25 |
-
</div>
|
26 |
-
</div> <!-- end info -->
|
27 |
-
<?php
|
28 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-series.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Series
|
4 |
-
Slug: pmpro-series
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('github', array(
|
7 |
-
'title' => 'PMPro Series',
|
8 |
-
'version' => '.3',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_series_widget',
|
10 |
-
'enabled' => class_exists("PMProSeries")
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_series_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-series.gif" />
|
18 |
-
<div class="info">
|
19 |
-
<p>"Drip feed" content to your members over the course of their membership. Serializes content by # of days post-registration.</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="<?php echo admin_url("edit.php?post_type=pmpro_series");?>" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-series/pmpro-series.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-series/pmpro-series.php'), 'activate-plugin_pmpro-series/pmpro-series.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-series.zip" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-shipping.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro Shipping Add On
|
4 |
-
Slug: pmpro-shipping
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('github', array(
|
7 |
-
'title' => 'PMPro Shipping Add On',
|
8 |
-
'version' => '.2.6',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_shipping_widget',
|
10 |
-
'enabled' => function_exists('pmproship_pmpro_checkout_boxes')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_shipping_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<?php /* <img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-shipping.jpg" /> */ ?>
|
18 |
-
<div class="info">
|
19 |
-
<p>Adds shipping fields to the checkout page, confirmation page, confirmation emails, member's list and edit user profile pages.</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="https://github.com/strangerstudios/pmpro-shipping/" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-shipping/pmpro-shipping.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-shipping/pmpro-shipping.php'), 'activate-plugin_pmpro-shipping/pmpro-shipping.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-shipping.zip" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-user-pages.php
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro User Pages
|
4 |
-
Slug: pmpro-user-pages
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('github', array(
|
7 |
-
'title' => 'PMPro User Pages',
|
8 |
-
'version' => '.3',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_user_pages_widget',
|
10 |
-
'enabled' => function_exists('pmproup_pmpro_after_checkout')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_user_pages_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<div class="info">
|
18 |
-
<p>Creates a unique page for each Member after checkout, giving the Admin access to write customized content for each specific member.</p>
|
19 |
-
<div class="actions">
|
20 |
-
<?php if($addon['enabled']) { ?>
|
21 |
-
<a href="https://github.com/strangerstudios/pmpro-user-pages/blob/master/readme.txt" class="button">Enabled</a>
|
22 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-user-pages/pmpro-user-pages.php")) { ?>
|
23 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-user-pages/pmpro-user-pages.php'), 'activate-plugin_pmpro-user-pages/pmpro-user-pages.php')?>" class="button button-primary">Activate</a>
|
24 |
-
<?php } else { ?>
|
25 |
-
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-user-pages.zip" class="button button-primary">Download</a>
|
26 |
-
<?php } ?>
|
27 |
-
</div>
|
28 |
-
</div> <!-- end info -->
|
29 |
-
<?php
|
30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-woocommerce.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro WooCommerce
|
4 |
-
Slug: pmpro-woocommerce
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('thirdparty', array(
|
7 |
-
'title' => 'PMPro WooCommerce',
|
8 |
-
'version' => '1.2.2',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_woocommerce_widget',
|
10 |
-
'enabled' => function_exists('pmprowoo_add_membership_from_order')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_woocommerce_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-woocommerce.gif" />
|
18 |
-
<div class="info">
|
19 |
-
<p>Use WooCommerce to purchase membership or set members-only product pricing.</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="<?php echo admin_url("plugins.php");?>" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-woocommerce/pmpro-woocommerce.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-woocommerce/pmpro-woocommerce.php'), 'activate-plugin_pmpro-woocommerce/pmpro-woocommerce.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=pmpro-woocommerce'), 'install-plugin_pmpro-woocommerce'); ?>" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/pmpro-wp-affiliate.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: PMPro WP Affiliate Platform Integration
|
4 |
-
Slug: pmpro-wp-affiliate
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('thirdparty', array(
|
7 |
-
'title' => 'PMPro WP Affiliate Platform Integration',
|
8 |
-
'version' => '.3',
|
9 |
-
'widget' => 'pmpro_addon_pmpro_wp_affiliate_widget',
|
10 |
-
'enabled' => function_exists('wpa_pmpro_after_checkout')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_pmpro_wp_affiliate_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/pmpro-wp-affiliate-platform.jpg" />
|
18 |
-
<div class="info">
|
19 |
-
<p>Process an affiliate via WP Affiliate Platform after a PMPro checkout.</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="https://github.com/strangerstudios/pmpro-wp-affiliate-platform/" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-wp-affiliate-platform/pmpro-wp-affiliate-platform.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-wp-affiliate-platform/pmpro-wp-affiliate-platform.php'), 'activate-plugin_pmpro-wp-affiliate-platform/pmpro-wp-affiliate-platform.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-wp-affiliate-platform.zip" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/tml.php
DELETED
@@ -1,32 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: Theme My Login
|
4 |
-
Slug: pmpro-tml
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('recommended', array(
|
7 |
-
'title' => 'Theme My Login',
|
8 |
-
'widget' => 'pmpro_addon_tml_widget',
|
9 |
-
'enabled' => class_exists('Theme_My_Login'),
|
10 |
-
'version' => '6.3.10'
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_tml_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<div class="info">
|
18 |
-
<p>This plugin themes the WordPress login, registration and forgot password pages according to your current theme. By <a href="http://www.jfarthing.com/" target="_blank">Jeff Farthing</a></p>
|
19 |
-
<div class="actions">
|
20 |
-
<form method="post" name="component-actions" action="">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="<?php echo admin_url("plugins.php");?>" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../theme-my-login/theme-my-login.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=theme-my-login/theme-my-login.php'), 'activate-plugin_theme-my-login/theme-my-login.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=theme-my-login'), 'install-plugin_theme-my-login'); ?>" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</form>
|
29 |
-
</div>
|
30 |
-
</div> <!-- end info -->
|
31 |
-
<?php
|
32 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/addons/wp-bouncer.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Addon: WP Bouncer
|
4 |
-
Slug: wp-bouncer
|
5 |
-
*/
|
6 |
-
pmpro_add_addon('repo', array(
|
7 |
-
'title' => 'WP Bouncer',
|
8 |
-
'version' => '1.1',
|
9 |
-
'widget' => 'pmpro_addon_wp_bouncer_widget',
|
10 |
-
'enabled' => class_exists('WP_Bouncer')
|
11 |
-
)
|
12 |
-
);
|
13 |
-
|
14 |
-
function pmpro_addon_wp_bouncer_widget($addon)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<img class="addon-thumb" src="<?php echo PMPRO_URL?>/adminpages/addons/images/wp-bouncer.gif" />
|
18 |
-
<div class="info">
|
19 |
-
<p>Make sure users are only logged in from one computer or device at a time.</p>
|
20 |
-
<div class="actions">
|
21 |
-
<?php if($addon['enabled']) { ?>
|
22 |
-
<a href="http://wordpress.org/plugins/wp-bouncer/" class="button">Enabled</a>
|
23 |
-
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../wp-bouncer/wp-bouncer.php")) { ?>
|
24 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=wp-bouncer/wp-bouncer.php'), 'activate-plugin_wp-bouncer/wp-bouncer.php')?>" class="button button-primary">Activate</a>
|
25 |
-
<?php } else { ?>
|
26 |
-
<a href="<?php echo wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=wp-bouncer'), 'install-plugin_wp-bouncer'); ?>" class="button button-primary">Download</a>
|
27 |
-
<?php } ?>
|
28 |
-
</div>
|
29 |
-
</div> <!-- end info -->
|
30 |
-
<?php
|
31 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/admin_footer.php
CHANGED
@@ -1,2 +1 @@
|
|
1 |
-
<div class="clear"></div>
|
2 |
</div>
|
|
|
1 |
</div>
|
adminpages/admin_header.php
CHANGED
@@ -1,6 +1,4 @@
|
|
1 |
<?php
|
2 |
-
require_once(dirname(__FILE__) . "/functions.php");
|
3 |
-
|
4 |
if(isset($_REQUEST['page']))
|
5 |
$view = $_REQUEST['page'];
|
6 |
else
|
@@ -22,11 +20,11 @@
|
|
22 |
if(empty($msg))
|
23 |
$msg = -1;
|
24 |
if(empty($pmpro_level_ready) && empty($edit))
|
25 |
-
$msgt .= " <a href=\"?page=pmpro-membershiplevels&edit=-1\">
|
26 |
elseif($pmpro_level_ready && !$pmpro_pages_ready && $view != "pmpro-pagesettings")
|
27 |
-
$msgt .= " <a href=\"?page=pmpro-pagesettings\">
|
28 |
elseif($pmpro_level_ready && $pmpro_pages_ready && !$pmpro_gateway_ready && $view != "pmpro-paymentsettings")
|
29 |
-
$msgt .= " <a href=\"?page=pmpro-paymentsettings\">
|
30 |
|
31 |
if(empty($msgt))
|
32 |
$msg = false;
|
@@ -35,7 +33,7 @@
|
|
35 |
if(!pmpro_checkLevelForStripeCompatibility())
|
36 |
{
|
37 |
$msg = -1;
|
38 |
-
$msgt =
|
39 |
if($view == "pmpro-membershiplevels" && !empty($_REQUEST['edit']) && $_REQUEST['edit'] > 0)
|
40 |
{
|
41 |
if(!pmpro_checkLevelForStripeCompatibility($_REQUEST['edit']))
|
@@ -43,39 +41,19 @@
|
|
43 |
global $pmpro_stripe_error;
|
44 |
$pmpro_stripe_error = true;
|
45 |
$msg = -1;
|
46 |
-
$msgt =
|
47 |
-
}
|
48 |
-
}
|
49 |
-
elseif($view == "pmpro-membershiplevels")
|
50 |
-
$msgt .= " " . __("The levels with issues are highlighted below.", "pmpro");
|
51 |
-
else
|
52 |
-
$msgt .= " <a href=\"?page=pmpro-membershiplevels\">" . __("Please edit your levels", "pmpro") . "</a>.";
|
53 |
-
}
|
54 |
-
|
55 |
-
if(!pmpro_checkLevelForPayflowCompatibility())
|
56 |
-
{
|
57 |
-
$msg = -1;
|
58 |
-
$msgt = __("The billing details for some of your membership levels is not supported by Payflow.", "pmpro");
|
59 |
-
if($view == "pmpro-membershiplevels" && !empty($_REQUEST['edit']) && $_REQUEST['edit'] > 0)
|
60 |
-
{
|
61 |
-
if(!pmpro_checkLevelForPayflowCompatibility($_REQUEST['edit']))
|
62 |
-
{
|
63 |
-
global $pmpro_payflow_error;
|
64 |
-
$pmpro_payflow_error = true;
|
65 |
-
$msg = -1;
|
66 |
-
$msgt = __("The billing details for this level are not supported by Payflow. Please review the notes in the Billing Details section below.", "pmpro");
|
67 |
}
|
68 |
}
|
69 |
elseif($view == "pmpro-membershiplevels")
|
70 |
-
$msgt .= "
|
71 |
else
|
72 |
-
$msgt .= " <a href=\"?page=pmpro-membershiplevels\">
|
73 |
}
|
74 |
|
75 |
if(!pmpro_checkLevelForBraintreeCompatibility())
|
76 |
{
|
77 |
$msg = -1;
|
78 |
-
$msgt =
|
79 |
if($view == "pmpro-membershiplevels" && !empty($_REQUEST['edit']) && $_REQUEST['edit'] > 0)
|
80 |
{
|
81 |
if(!pmpro_checkLevelForBraintreeCompatibility($_REQUEST['edit']))
|
@@ -83,34 +61,13 @@
|
|
83 |
global $pmpro_braintree_error;
|
84 |
$pmpro_braintree_error = true;
|
85 |
$msg = -1;
|
86 |
-
$msgt =
|
87 |
-
}
|
88 |
-
}
|
89 |
-
elseif($view == "pmpro-membershiplevels")
|
90 |
-
$msgt .= " " . __("The levels with issues are highlighted below.", "pmpro");
|
91 |
-
else
|
92 |
-
$msgt .= " <a href=\"?page=pmpro-membershiplevels\">" . __("Please edit your levels", "pmpro") . "</a>.";
|
93 |
-
}
|
94 |
-
|
95 |
-
if(!pmpro_checkLevelForTwoCheckoutCompatibility())
|
96 |
-
{
|
97 |
-
$msg = -1;
|
98 |
-
$msgt = __("The billing details for some of your membership levels is not supported by TwoCheckout.", "pmpro");
|
99 |
-
if($view == "pmpro-membershiplevels" && !empty($_REQUEST['edit']) && $_REQUEST['edit'] > 0)
|
100 |
-
{
|
101 |
-
if(!pmpro_checkLevelForTwoCheckoutCompatibility($_REQUEST['edit']))
|
102 |
-
{
|
103 |
-
global $pmpro_twocheckout_error;
|
104 |
-
$pmpro_twocheckout_error = true;
|
105 |
-
|
106 |
-
$msg = -1;
|
107 |
-
$msgt = __("The billing details for this level are not supported by 2Checkout. Please review the notes in the Billing Details section below.", "pmpro");
|
108 |
}
|
109 |
}
|
110 |
elseif($view == "pmpro-membershiplevels")
|
111 |
-
$msgt .= "
|
112 |
else
|
113 |
-
$msgt .= " <a href=\"?page=pmpro-membershiplevels\">
|
114 |
}
|
115 |
|
116 |
if(!empty($msg))
|
@@ -122,12 +79,13 @@
|
|
122 |
|
123 |
?>
|
124 |
<div class="wrap pmpro_admin">
|
125 |
-
<div class="pmpro_banner">
|
126 |
-
<a class="pmpro_logo" title="Paid Memberships Pro - Membership Plugin for WordPress" target="_blank" href="<?php echo pmpro_https_filter("http://www.paidmembershipspro.com")?>"><img src="<?php echo PMPRO_URL?>/images/
|
127 |
-
<div class="
|
128 |
|
129 |
-
<
|
130 |
-
</div>
|
|
|
131 |
|
132 |
<div id="pmpro_notifications">
|
133 |
</div>
|
@@ -140,17 +98,10 @@
|
|
140 |
});
|
141 |
</script>
|
142 |
|
143 |
-
<?php
|
144 |
-
$settings_tabs = array("pmpro-membershiplevels", "pmpro-pagesettings", "pmpro-paymentsettings", "pmpro-emailsettings", "pmpro-advancedsettings", "pmpro-addons");
|
145 |
-
if(in_array($view, $settings_tabs))
|
146 |
-
{
|
147 |
-
?>
|
148 |
<h3 class="nav-tab-wrapper">
|
149 |
-
<a href="admin.php?page=pmpro-membershiplevels" class="nav-tab<?php if($view == 'pmpro-membershiplevels') { ?> nav-tab-active<?php } ?>"
|
150 |
-
<a href="admin.php?page=pmpro-pagesettings" class="nav-tab<?php if($view == 'pmpro-pagesettings') { ?> nav-tab-active<?php } ?>"
|
151 |
-
<a href="admin.php?page=pmpro-paymentsettings" class="nav-tab<?php if($view == 'pmpro-paymentsettings') { ?> nav-tab-active<?php } ?>"
|
152 |
-
<a href="admin.php?page=pmpro-emailsettings" class="nav-tab<?php if($view == 'pmpro-emailsettings') { ?> nav-tab-active<?php } ?>"
|
153 |
-
<a href="admin.php?page=pmpro-advancedsettings" class="nav-tab<?php if($view == 'pmpro-advancedsettings') { ?> nav-tab-active<?php } ?>"
|
154 |
-
<a href="admin.php?page=pmpro-addons" class="nav-tab<?php if($view == 'pmpro-addons') { ?> nav-tab-active<?php } ?>"><?php _e('Add Ons', 'pmpro');?></a>
|
155 |
</h3>
|
156 |
-
<?php } ?>
|
1 |
<?php
|
|
|
|
|
2 |
if(isset($_REQUEST['page']))
|
3 |
$view = $_REQUEST['page'];
|
4 |
else
|
20 |
if(empty($msg))
|
21 |
$msg = -1;
|
22 |
if(empty($pmpro_level_ready) && empty($edit))
|
23 |
+
$msgt .= " <a href=\"?page=pmpro-membershiplevels&edit=-1\">Add a membership level</a> to get started.";
|
24 |
elseif($pmpro_level_ready && !$pmpro_pages_ready && $view != "pmpro-pagesettings")
|
25 |
+
$msgt .= " <a href=\"?page=pmpro-pagesettings\">Setup the membership pages</a>.";
|
26 |
elseif($pmpro_level_ready && $pmpro_pages_ready && !$pmpro_gateway_ready && $view != "pmpro-paymentsettings")
|
27 |
+
$msgt .= " <a href=\"?page=pmpro-paymentsettings\">Setup your SSL certificate and payment gateway</a>.";
|
28 |
|
29 |
if(empty($msgt))
|
30 |
$msg = false;
|
33 |
if(!pmpro_checkLevelForStripeCompatibility())
|
34 |
{
|
35 |
$msg = -1;
|
36 |
+
$msgt = "The billing details for some of your membership levels is not supported by Stripe.";
|
37 |
if($view == "pmpro-membershiplevels" && !empty($_REQUEST['edit']) && $_REQUEST['edit'] > 0)
|
38 |
{
|
39 |
if(!pmpro_checkLevelForStripeCompatibility($_REQUEST['edit']))
|
41 |
global $pmpro_stripe_error;
|
42 |
$pmpro_stripe_error = true;
|
43 |
$msg = -1;
|
44 |
+
$msgt = "The billing details for this level are not supported by Stripe. Please review the notes in the Billing Details section below.";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
}
|
46 |
}
|
47 |
elseif($view == "pmpro-membershiplevels")
|
48 |
+
$msgt .= " The levels with issues are highlighted below.";
|
49 |
else
|
50 |
+
$msgt .= " <a href=\"?page=pmpro-membershiplevels\">Please edit your levels</a>.";
|
51 |
}
|
52 |
|
53 |
if(!pmpro_checkLevelForBraintreeCompatibility())
|
54 |
{
|
55 |
$msg = -1;
|
56 |
+
$msgt = "The billing details for some of your membership levels is not supported by Braintree.";
|
57 |
if($view == "pmpro-membershiplevels" && !empty($_REQUEST['edit']) && $_REQUEST['edit'] > 0)
|
58 |
{
|
59 |
if(!pmpro_checkLevelForBraintreeCompatibility($_REQUEST['edit']))
|
61 |
global $pmpro_braintree_error;
|
62 |
$pmpro_braintree_error = true;
|
63 |
$msg = -1;
|
64 |
+
$msgt = "The billing details for this level are not supported by Braintree. Please review the notes in the Billing Details section below.";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
}
|
66 |
}
|
67 |
elseif($view == "pmpro-membershiplevels")
|
68 |
+
$msgt .= " The levels with issues are highlighted below.";
|
69 |
else
|
70 |
+
$msgt .= " <a href=\"?page=pmpro-membershiplevels\">Please edit your levels</a>.";
|
71 |
}
|
72 |
|
73 |
if(!empty($msg))
|
79 |
|
80 |
?>
|
81 |
<div class="wrap pmpro_admin">
|
82 |
+
<div class="pmpro_banner">
|
83 |
+
<a class="pmpro_logo" title="Paid Memberships Pro - Membership Plugin for WordPress" target="_blank" href="<?php echo pmpro_https_filter("http://www.paidmembershipspro.com")?>"><img src="<?php echo PMPRO_URL?>/images/PaidMembershipsPro.gif" width="350" height="45" border="0" alt="Paid Memberships Pro(c) - All Rights Reserved" /></a>
|
84 |
+
<div class="pmpro_tagline">Membership Plugin for WordPress</div>
|
85 |
|
86 |
+
<div class="pmpro_meta"><a href="<?php echo pmpro_https_filter("http://www.paidmembershipspro.com")?>">Plugin Support</a> | <a href="http://www.paidmembershipspro.com/forums/">User Forum</a> | <strong>Version <?php echo PMPRO_VERSION?></strong></div>
|
87 |
+
</div>
|
88 |
+
<br style="clear:both;" />
|
89 |
|
90 |
<div id="pmpro_notifications">
|
91 |
</div>
|
98 |
});
|
99 |
</script>
|
100 |
|
|
|
|
|
|
|
|
|
|
|
101 |
<h3 class="nav-tab-wrapper">
|
102 |
+
<a href="admin.php?page=pmpro-membershiplevels" class="nav-tab<?php if($view == 'pmpro-membershiplevels') { ?> nav-tab-active<?php } ?>">Membership Levels</a>
|
103 |
+
<a href="admin.php?page=pmpro-pagesettings" class="nav-tab<?php if($view == 'pmpro-pagesettings') { ?> nav-tab-active<?php } ?>">Pages</a>
|
104 |
+
<a href="admin.php?page=pmpro-paymentsettings" class="nav-tab<?php if($view == 'pmpro-paymentsettings') { ?> nav-tab-active<?php } ?>">Payment Gateway & SSL</a>
|
105 |
+
<a href="admin.php?page=pmpro-emailsettings" class="nav-tab<?php if($view == 'pmpro-emailsettings') { ?> nav-tab-active<?php } ?>">Email</a>
|
106 |
+
<a href="admin.php?page=pmpro-advancedsettings" class="nav-tab<?php if($view == 'pmpro-advancedsettings') { ?> nav-tab-active<?php } ?>">Advanced</a>
|
|
|
107 |
</h3>
|
|
adminpages/advancedsettings.php
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
<?php
|
2 |
//only admins can get this
|
3 |
-
if(!function_exists("current_user_can") ||
|
4 |
{
|
5 |
-
die(
|
6 |
}
|
7 |
|
8 |
global $wpdb, $msg, $msgt;
|
@@ -14,7 +14,6 @@
|
|
14 |
pmpro_setOption("nonmembertext");
|
15 |
pmpro_setOption("notloggedintext");
|
16 |
pmpro_setOption("rsstext");
|
17 |
-
pmpro_setOption("filterqueries");
|
18 |
pmpro_setOption("showexcerpts");
|
19 |
pmpro_setOption("hideads");
|
20 |
pmpro_setOption("hideadslevels");
|
@@ -30,24 +29,16 @@
|
|
30 |
|
31 |
//footer link
|
32 |
pmpro_setOption("hide_footer_link");
|
33 |
-
|
34 |
-
// custom settings (added with pmpro_custom_advanced_settings hook)
|
35 |
-
foreach($_REQUEST as $key => $value ) {
|
36 |
-
if (strpos($key, 'custom_') === 0) {
|
37 |
-
pmpro_setOption($key);
|
38 |
-
}
|
39 |
-
}
|
40 |
|
41 |
//assume success
|
42 |
$msg = true;
|
43 |
-
$msgt =
|
44 |
}
|
45 |
|
46 |
$nonmembertext = pmpro_getOption("nonmembertext");
|
47 |
$notloggedintext = pmpro_getOption("notloggedintext");
|
48 |
$rsstext = pmpro_getOption("rsstext");
|
49 |
$hideads = pmpro_getOption("hideads");
|
50 |
-
$filterqueries = pmpro_getOption('filterqueries');
|
51 |
$showexcerpts = pmpro_getOption("showexcerpts");
|
52 |
$hideadslevels = pmpro_getOption("hideadslevels");
|
53 |
|
@@ -65,17 +56,17 @@
|
|
65 |
//default settings
|
66 |
if(!$nonmembertext)
|
67 |
{
|
68 |
-
$nonmembertext =
|
69 |
pmpro_setOption("nonmembertext", $nonmembertext);
|
70 |
}
|
71 |
if(!$notloggedintext)
|
72 |
{
|
73 |
-
$notloggedintext =
|
74 |
pmpro_setOption("notloggedintext", $notloggedintext);
|
75 |
}
|
76 |
if(!$rsstext)
|
77 |
{
|
78 |
-
$rsstext =
|
79 |
pmpro_setOption("rsstext", $rsstext);
|
80 |
}
|
81 |
|
@@ -85,77 +76,66 @@
|
|
85 |
?>
|
86 |
|
87 |
<form action="" method="post" enctype="multipart/form-data">
|
88 |
-
<h2
|
89 |
|
90 |
<table class="form-table">
|
91 |
<tbody>
|
92 |
<tr>
|
93 |
<th scope="row" valign="top">
|
94 |
-
<label for="nonmembertext"
|
95 |
</th>
|
96 |
<td>
|
97 |
<textarea name="nonmembertext" rows="3" cols="80"><?php echo stripslashes($nonmembertext)?></textarea><br />
|
98 |
-
<small class="litegray"
|
99 |
</td>
|
100 |
</tr>
|
101 |
<tr>
|
102 |
<th scope="row" valign="top">
|
103 |
-
<label for="notloggedintext"
|
104 |
</th>
|
105 |
<td>
|
106 |
<textarea name="notloggedintext" rows="3" cols="80"><?php echo stripslashes($notloggedintext)?></textarea><br />
|
107 |
-
<small class="litegray"
|
108 |
</td>
|
109 |
</tr>
|
110 |
<tr>
|
111 |
<th scope="row" valign="top">
|
112 |
-
<label for="rsstext"
|
113 |
</th>
|
114 |
<td>
|
115 |
<textarea name="rsstext" rows="3" cols="80"><?php echo stripslashes($rsstext)?></textarea><br />
|
116 |
-
<small class="litegray"
|
117 |
</td>
|
118 |
</tr>
|
119 |
|
120 |
<tr>
|
121 |
<th scope="row" valign="top">
|
122 |
-
<label for="
|
123 |
</th>
|
124 |
<td>
|
125 |
-
<select id="
|
126 |
-
<option value="0" <?php if(!$
|
127 |
-
<option value="1" <?php if($
|
128 |
</select>
|
129 |
</td>
|
130 |
</tr>
|
131 |
<tr>
|
132 |
-
<th scope="row" valign="top">
|
133 |
-
<label for="showexcerpts"><?php _e('Show Excerpts to Non-Members?', 'pmpro');?></label>
|
134 |
-
</th>
|
135 |
-
<td>
|
136 |
-
<select id="showexcerpts" name="showexcerpts">
|
137 |
-
<option value="0" <?php if(!$showexcerpts) { ?>selected="selected"<?php } ?>><?php _e('No - Hide excerpts.', 'pmpro');?></option>
|
138 |
-
<option value="1" <?php if($showexcerpts == 1) { ?>selected="selected"<?php } ?>><?php _e('Yes - Show excerpts.', 'pmpro');?></option>
|
139 |
-
</select>
|
140 |
-
</td>
|
141 |
-
</tr>
|
142 |
-
<tr>
|
143 |
<th scope="row" valign="top">
|
144 |
<label for="hideads">Hide Ads From Members?</label>
|
145 |
</th>
|
146 |
<td>
|
147 |
<select id="hideads" name="hideads" onchange="pmpro_updateHideAdsTRs();">
|
148 |
-
<option value="0" <?php if(!$hideads) { ?>selected="selected"<?php }
|
149 |
-
<option value="1" <?php if($hideads == 1) { ?>selected="selected"<?php }
|
150 |
-
<option value="2" <?php if($hideads == 2) { ?>selected="selected"<?php }
|
151 |
</select>
|
152 |
</td>
|
153 |
</tr>
|
154 |
<tr id="hideads_explanation" <?php if($hideads < 2) { ?>style="display: none;"<?php } ?>>
|
155 |
<th scope="row" valign="top"> </th>
|
156 |
<td>
|
157 |
-
<p class="top0em"
|
158 |
-
<p
|
159 |
<pre lang="PHP">
|
160 |
if(pmpro_displayAds())
|
161 |
{
|
@@ -166,7 +146,7 @@ if(pmpro_displayAds())
|
|
166 |
</tr>
|
167 |
<tr id="hideadslevels_tr" <?php if($hideads != 2) { ?>style="display: none;"<?php } ?>>
|
168 |
<th scope="row" valign="top">
|
169 |
-
<label for="hideadslevels"
|
170 |
</th>
|
171 |
<td>
|
172 |
<div class="checkbox_box" <?php if(count($levels) > 5) { ?>style="height: 100px; overflow: auto;"<?php } ?>>
|
@@ -200,49 +180,49 @@ if(pmpro_displayAds())
|
|
200 |
<?php if(is_multisite()) { ?>
|
201 |
<tr>
|
202 |
<th scope="row" valign="top">
|
203 |
-
<label for="redirecttosubscription"
|
204 |
</th>
|
205 |
<td>
|
206 |
<select id="redirecttosubscription" name="redirecttosubscription">
|
207 |
-
<option value="0" <?php if(!$redirecttosubscription) { ?>selected="selected"<?php }
|
208 |
-
<option value="1" <?php if($redirecttosubscription == 1) { ?>selected="selected"<?php }
|
209 |
</select>
|
210 |
</td>
|
211 |
</tr>
|
212 |
<?php } ?>
|
213 |
<tr>
|
214 |
<th scope="row" valign="top">
|
215 |
-
<label for="recaptcha"
|
216 |
</th>
|
217 |
<td>
|
218 |
<select id="recaptcha" name="recaptcha" onchange="pmpro_updateRecaptchaTRs();">
|
219 |
-
<option value="0" <?php if(!$recaptcha) { ?>selected="selected"<?php }
|
220 |
-
<option value="1" <?php if($recaptcha == 1) { ?>selected="selected"<?php }
|
221 |
-
<option value="2" <?php if($recaptcha == 2) { ?>selected="selected"<?php }
|
222 |
</select><br />
|
223 |
-
<small
|
224 |
</td>
|
225 |
</tr>
|
226 |
<tr id="recaptcha_tr" <?php if(!$recaptcha) { ?>style="display: none;"<?php } ?>>
|
227 |
<th scope="row" valign="top"> </th>
|
228 |
<td>
|
229 |
-
<label for="recaptcha_publickey"
|
230 |
<input type="text" name="recaptcha_publickey" size="60" value="<?php echo $recaptcha_publickey?>" />
|
231 |
<br /><br />
|
232 |
-
<label for="recaptcha_privatekey"
|
233 |
<input type="text" name="recaptcha_privatekey" size="60" value="<?php echo $recaptcha_privatekey?>" />
|
234 |
</td>
|
235 |
</tr>
|
236 |
<tr>
|
237 |
<th scope="row" valign="top">
|
238 |
-
<label for="tospage"
|
239 |
</th>
|
240 |
<td>
|
241 |
<?php
|
242 |
wp_dropdown_pages(array("name"=>"tospage", "show_option_none"=>"No", "selected"=>$tospage));
|
243 |
?>
|
244 |
<br />
|
245 |
-
<small
|
246 |
</td>
|
247 |
</tr>
|
248 |
|
@@ -257,73 +237,9 @@ if(pmpro_displayAds())
|
|
257 |
<option value="1" <?php if($hide_footer_link == 1) { ?>selected="selected"<?php } ?>>Yes - Hide the link.</option>
|
258 |
</select>
|
259 |
</td>
|
260 |
-
</tr>
|
261 |
-
*/
|
262 |
-
|
263 |
-
// Filter to Add More Advanced Settings for Misc Plugin Options, etc.
|
264 |
-
if (has_action('pmpro_custom_advanced_settings')) {
|
265 |
-
$custom_fields = apply_filters('pmpro_custom_advanced_settings', $custom_fields);
|
266 |
-
foreach ($custom_fields as $field) {
|
267 |
-
?>
|
268 |
-
<tr>
|
269 |
-
<th valign="top" scope="row">
|
270 |
-
<label
|
271 |
-
for="<?php _e($field['field_name'], 'pmpro'); ?>"><?php _e($field['label'], 'pmpro'); ?></label>
|
272 |
-
</th>
|
273 |
-
<td>
|
274 |
-
<?php
|
275 |
-
switch ($field['field_type']) {
|
276 |
-
case 'select':
|
277 |
-
?>
|
278 |
-
<select id="<?php _e($field['field_name'], 'pmpro'); ?>"
|
279 |
-
name="<?php _e($field['field_name'], 'pmpro'); ?>">
|
280 |
-
<?php foreach ($field['options'] as $option) {
|
281 |
-
?>
|
282 |
-
<option value="<?php _e($option, 'pmpro'); ?>"
|
283 |
-
<?php
|
284 |
-
if ($option == pmpro_getOption($field['field_name'])) {
|
285 |
-
_e('selected', 'pmpro');
|
286 |
-
}
|
287 |
-
?>
|
288 |
-
><?php _e($option, 'pmpro'); ?></option>
|
289 |
-
<?php
|
290 |
-
} ?>
|
291 |
-
</select>
|
292 |
-
<?php
|
293 |
-
break;
|
294 |
-
case 'text':
|
295 |
-
?>
|
296 |
-
<input id="<?php _e($field['field_name'], 'pmpro'); ?>"
|
297 |
-
name="<?php _e($field['field_name'], 'pmpro'); ?>"
|
298 |
-
type="<?php _e($field['field_type'], 'pmpro'); ?>"
|
299 |
-
value="<?php echo pmpro_getOption($field['field_name']); ?> ">
|
300 |
-
<?php
|
301 |
-
break;
|
302 |
-
case 'textarea':
|
303 |
-
?>
|
304 |
-
<textarea id="<?php _e($field['field_name'], 'pmpro'); ?>"
|
305 |
-
name="<?php _e($field['field_name'], 'pmpro'); ?>">
|
306 |
-
<?php echo pmpro_getOption($field['field_name']); ?>
|
307 |
-
</textarea>
|
308 |
-
<?php
|
309 |
-
break;
|
310 |
-
default:
|
311 |
-
break;
|
312 |
-
}
|
313 |
-
if (!empty($field['description'])) {
|
314 |
-
?>
|
315 |
-
<br>
|
316 |
-
<small><?php _e($field['description'], 'pmpro'); ?></small>
|
317 |
-
<?php
|
318 |
-
}
|
319 |
-
?>
|
320 |
-
</td>
|
321 |
-
<?php
|
322 |
-
}
|
323 |
-
}
|
324 |
-
?>
|
325 |
-
</tr>
|
326 |
-
</tbody>
|
327 |
</table>
|
328 |
<script>
|
329 |
function pmpro_updateHideAdsTRs()
|
@@ -365,7 +281,7 @@ if(pmpro_displayAds())
|
|
365 |
</script>
|
366 |
|
367 |
<p class="submit">
|
368 |
-
<input name="savesettings" type="submit" class="button
|
369 |
</p>
|
370 |
</form>
|
371 |
|
1 |
<?php
|
2 |
//only admins can get this
|
3 |
+
if(!function_exists("current_user_can") || !current_user_can("manage_options"))
|
4 |
{
|
5 |
+
die("You do not have permissions to perform this action.");
|
6 |
}
|
7 |
|
8 |
global $wpdb, $msg, $msgt;
|
14 |
pmpro_setOption("nonmembertext");
|
15 |
pmpro_setOption("notloggedintext");
|
16 |
pmpro_setOption("rsstext");
|
|
|
17 |
pmpro_setOption("showexcerpts");
|
18 |
pmpro_setOption("hideads");
|
19 |
pmpro_setOption("hideadslevels");
|
29 |
|
30 |
//footer link
|
31 |
pmpro_setOption("hide_footer_link");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
|
33 |
//assume success
|
34 |
$msg = true;
|
35 |
+
$msgt = "Your advanced settings have been updated.";
|
36 |
}
|
37 |
|
38 |
$nonmembertext = pmpro_getOption("nonmembertext");
|
39 |
$notloggedintext = pmpro_getOption("notloggedintext");
|
40 |
$rsstext = pmpro_getOption("rsstext");
|
41 |
$hideads = pmpro_getOption("hideads");
|
|
|
42 |
$showexcerpts = pmpro_getOption("showexcerpts");
|
43 |
$hideadslevels = pmpro_getOption("hideadslevels");
|
44 |
|
56 |
//default settings
|
57 |
if(!$nonmembertext)
|
58 |
{
|
59 |
+
$nonmembertext = "This content is for !!levels!! members only. <a href=\"" . wp_login_url() . "?action=register\">Register here</a>.";
|
60 |
pmpro_setOption("nonmembertext", $nonmembertext);
|
61 |
}
|
62 |
if(!$notloggedintext)
|
63 |
{
|
64 |
+
$notloggedintext = "Please <a href=\"" . wp_login_url( get_permalink() ) . "\">login</a> to view this content. (<a href=\"" . wp_login_url() . "?action=register\">Register here</a>.)";
|
65 |
pmpro_setOption("notloggedintext", $notloggedintext);
|
66 |
}
|
67 |
if(!$rsstext)
|
68 |
{
|
69 |
+
$rsstext = "This content is for members only. Visit the site and log in/register to read.";
|
70 |
pmpro_setOption("rsstext", $rsstext);
|
71 |
}
|
72 |
|
76 |
?>
|
77 |
|
78 |
<form action="" method="post" enctype="multipart/form-data">
|
79 |
+
<h2>Advanced Settings</h2>
|
80 |
|
81 |
<table class="form-table">
|
82 |
<tbody>
|
83 |
<tr>
|
84 |
<th scope="row" valign="top">
|
85 |
+
<label for="nonmembertext">Message for Logged-in Non-members:</label>
|
86 |
</th>
|
87 |
<td>
|
88 |
<textarea name="nonmembertext" rows="3" cols="80"><?php echo stripslashes($nonmembertext)?></textarea><br />
|
89 |
+
<small class="litegray">This message replaces the post content for non-members. Available variables: !!levels!!, !!referrer!!</small>
|
90 |
</td>
|
91 |
</tr>
|
92 |
<tr>
|
93 |
<th scope="row" valign="top">
|
94 |
+
<label for="notloggedintext">Message for Logged-out Users:</label>
|
95 |
</th>
|
96 |
<td>
|
97 |
<textarea name="notloggedintext" rows="3" cols="80"><?php echo stripslashes($notloggedintext)?></textarea><br />
|
98 |
+
<small class="litegray">This message replaces the post content for logged-out visitors.</small>
|
99 |
</td>
|
100 |
</tr>
|
101 |
<tr>
|
102 |
<th scope="row" valign="top">
|
103 |
+
<label for="rsstext">Message for RSS Feed:</label>
|
104 |
</th>
|
105 |
<td>
|
106 |
<textarea name="rsstext" rows="3" cols="80"><?php echo stripslashes($rsstext)?></textarea><br />
|
107 |
+
<small class="litegray">This message replaces the post content in RSS feeds.</small>
|
108 |
</td>
|
109 |
</tr>
|
110 |
|
111 |
<tr>
|
112 |
<th scope="row" valign="top">
|
113 |
+
<label for="showexcerpts">Show Excerpts to Non-Members?</label>
|
114 |
</th>
|
115 |
<td>
|
116 |
+
<select id="showexcerpts" name="showexcerpts">
|
117 |
+
<option value="0" <?php if(!$showexcerpts) { ?>selected="selected"<?php } ?>>No - Hide excerpts.</option>
|
118 |
+
<option value="1" <?php if($showexcerpts == 1) { ?>selected="selected"<?php } ?>>Yes - Show excerpts.</option>
|
119 |
</select>
|
120 |
</td>
|
121 |
</tr>
|
122 |
<tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
123 |
<th scope="row" valign="top">
|
124 |
<label for="hideads">Hide Ads From Members?</label>
|
125 |
</th>
|
126 |
<td>
|
127 |
<select id="hideads" name="hideads" onchange="pmpro_updateHideAdsTRs();">
|
128 |
+
<option value="0" <?php if(!$hideads) { ?>selected="selected"<?php } ?>>No</option>
|
129 |
+
<option value="1" <?php if($hideads == 1) { ?>selected="selected"<?php } ?>>Hide Ads From All Members</option>
|
130 |
+
<option value="2" <?php if($hideads == 2) { ?>selected="selected"<?php } ?>>Hide Ads From Certain Members</option>
|
131 |
</select>
|
132 |
</td>
|
133 |
</tr>
|
134 |
<tr id="hideads_explanation" <?php if($hideads < 2) { ?>style="display: none;"<?php } ?>>
|
135 |
<th scope="row" valign="top"> </th>
|
136 |
<td>
|
137 |
+
<p class="top0em">Ads from the following plugins will be automatically turned off: <em>Easy Adsense</em>, ...</p>
|
138 |
+
<p>To hide ads in your template code, use code like the following:</p>
|
139 |
<pre lang="PHP">
|
140 |
if(pmpro_displayAds())
|
141 |
{
|
146 |
</tr>
|
147 |
<tr id="hideadslevels_tr" <?php if($hideads != 2) { ?>style="display: none;"<?php } ?>>
|
148 |
<th scope="row" valign="top">
|
149 |
+
<label for="hideadslevels">Choose Levels to Hide Ads From:</label>
|
150 |
</th>
|
151 |
<td>
|
152 |
<div class="checkbox_box" <?php if(count($levels) > 5) { ?>style="height: 100px; overflow: auto;"<?php } ?>>
|
180 |
<?php if(is_multisite()) { ?>
|
181 |
<tr>
|
182 |
<th scope="row" valign="top">
|
183 |
+
<label for="redirecttosubscription">Redirect all traffic from registration page to /susbcription/?: <em>(multisite only)</em></label>
|
184 |
</th>
|
185 |
<td>
|
186 |
<select id="redirecttosubscription" name="redirecttosubscription">
|
187 |
+
<option value="0" <?php if(!$redirecttosubscription) { ?>selected="selected"<?php } ?>>No</option>
|
188 |
+
<option value="1" <?php if($redirecttosubscription == 1) { ?>selected="selected"<?php } ?>>Yes</option>
|
189 |
</select>
|
190 |
</td>
|
191 |
</tr>
|
192 |
<?php } ?>
|
193 |
<tr>
|
194 |
<th scope="row" valign="top">
|
195 |
+
<label for="recaptcha">Use reCAPTCHA?:</label>
|
196 |
</th>
|
197 |
<td>
|
198 |
<select id="recaptcha" name="recaptcha" onchange="pmpro_updateRecaptchaTRs();">
|
199 |
+
<option value="0" <?php if(!$recaptcha) { ?>selected="selected"<?php } ?>>No</option>
|
200 |
+
<option value="1" <?php if($recaptcha == 1) { ?>selected="selected"<?php } ?>>Yes - Free memberships only.</option>
|
201 |
+
<option value="2" <?php if($recaptcha == 2) { ?>selected="selected"<?php } ?>>Yes - All memberships.</option>
|
202 |
</select><br />
|
203 |
+
<small>A free reCAPTCHA key is required. <a href="https://www.google.com/recaptcha/admin/create">Click here to signup for reCAPTCHA</a>.</small>
|
204 |
</td>
|
205 |
</tr>
|
206 |
<tr id="recaptcha_tr" <?php if(!$recaptcha) { ?>style="display: none;"<?php } ?>>
|
207 |
<th scope="row" valign="top"> </th>
|
208 |
<td>
|
209 |
+
<label for="recaptcha_publickey">reCAPTCHA Public Key:</label>
|
210 |
<input type="text" name="recaptcha_publickey" size="60" value="<?php echo $recaptcha_publickey?>" />
|
211 |
<br /><br />
|
212 |
+
<label for="recaptcha_privatekey">reCAPTCHA Private Key:</label>
|
213 |
<input type="text" name="recaptcha_privatekey" size="60" value="<?php echo $recaptcha_privatekey?>" />
|
214 |
</td>
|
215 |
</tr>
|
216 |
<tr>
|
217 |
<th scope="row" valign="top">
|
218 |
+
<label for="tospage">Require Terms of Service on signups?</label>
|
219 |
</th>
|
220 |
<td>
|
221 |
<?php
|
222 |
wp_dropdown_pages(array("name"=>"tospage", "show_option_none"=>"No", "selected"=>$tospage));
|
223 |
?>
|
224 |
<br />
|
225 |
+
<small>If yes, create a WordPress page containing your TOS agreement and assign it using the dropdown above.</small>
|
226 |
</td>
|
227 |
</tr>
|
228 |
|
237 |
<option value="1" <?php if($hide_footer_link == 1) { ?>selected="selected"<?php } ?>>Yes - Hide the link.</option>
|
238 |
</select>
|
239 |
</td>
|
240 |
+
</tr>
|
241 |
+
*/ ?>
|
242 |
+
</tbody>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
243 |
</table>
|
244 |
<script>
|
245 |
function pmpro_updateHideAdsTRs()
|
281 |
</script>
|
282 |
|
283 |
<p class="submit">
|
284 |
+
<input name="savesettings" type="submit" class="button-primary" value="Save Settings" />
|
285 |
</p>
|
286 |
</form>
|
287 |
|
adminpages/dashboard.php
CHANGED
@@ -105,9 +105,9 @@
|
|
105 |
|
106 |
echo '</ul>';
|
107 |
echo '<br class="clear"/><div style="margin-top:10px;border-top: 1px solid #ddd; padding-top: 10px; text-align:center;">';
|
108 |
-
echo '<a
|
109 |
echo ' ';
|
110 |
-
echo '<a
|
111 |
echo '<form class="alignright" method="post"><input type="hidden" name="pmpro_removedbwidget" value="true"/><input title="Remove this widget from all users dashboards" class="button" type="submit" value="X"/></form>';
|
112 |
echo '</div>';
|
113 |
}
|
105 |
|
106 |
echo '</ul>';
|
107 |
echo '<br class="clear"/><div style="margin-top:10px;border-top: 1px solid #ddd; padding-top: 10px; text-align:center;">';
|
108 |
+
echo '<a href="'.$pmpro_feed.'"><img src="'.get_bloginfo('wpurl').'/wp-includes/images/rss.png" alt=""/> Subscribe with RSS</a>';
|
109 |
echo ' ';
|
110 |
+
echo '<a href="http://www.paidmembershipspro.com/"><img src="'.get_bloginfo('wpurl').'/wp-includes/images/wpmini-blue.png" alt=""/> View Online</a>';
|
111 |
echo '<form class="alignright" method="post"><input type="hidden" name="pmpro_removedbwidget" value="true"/><input title="Remove this widget from all users dashboards" class="button" type="submit" value="X"/></form>';
|
112 |
echo '</div>';
|
113 |
}
|
adminpages/discountcodes.php
CHANGED
@@ -1,636 +1,648 @@
|
|
1 |
-
<?php
|
2 |
-
//only admins can get this
|
3 |
-
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_discountcodes")))
|
4 |
-
{
|
5 |
-
die(
|
6 |
-
}
|
7 |
-
|
8 |
-
//vars
|
9 |
-
global $wpdb, $pmpro_currency_symbol;
|
10 |
-
|
11 |
-
if(isset($_REQUEST['edit']))
|
12 |
-
$edit = $_REQUEST['edit'];
|
13 |
-
else
|
14 |
-
$edit = false;
|
15 |
-
|
16 |
-
if(isset($_REQUEST['delete']))
|
17 |
-
$delete = $_REQUEST['delete'];
|
18 |
-
else
|
19 |
-
$delete = false;
|
20 |
-
|
21 |
-
if(isset($_REQUEST['saveid']))
|
22 |
-
$saveid = $_POST['saveid'];
|
23 |
-
else
|
24 |
-
$saveid = false;
|
25 |
-
|
26 |
-
if($saveid)
|
27 |
-
{
|
28 |
-
//get vars
|
29 |
-
$code = $_POST['code'];
|
30 |
-
$starts_month = $_POST['starts_month'];
|
31 |
-
$starts_day = $_POST['starts_day'];
|
32 |
-
$starts_year = $_POST['starts_year'];
|
33 |
-
$expires_month = $_POST['expires_month'];
|
34 |
-
$expires_day = $_POST['expires_day'];
|
35 |
-
$expires_year = $_POST['expires_year'];
|
36 |
-
$uses = $_POST['uses'];
|
37 |
-
|
38 |
-
//fix up dates
|
39 |
-
$starts = date("Y-m-d", strtotime($starts_month . "/" . $starts_day . "/" . $starts_year
|
40 |
-
$expires = date("Y-m-d", strtotime($expires_month . "/" . $expires_day . "/" . $expires_year
|
41 |
-
|
42 |
-
//updating or new?
|
43 |
-
if($saveid > 0)
|
44 |
-
{
|
45 |
-
$sqlQuery = "UPDATE $wpdb->pmpro_discount_codes SET code = '" .
|
46 |
-
if($wpdb->query($sqlQuery) !== false)
|
47 |
-
{
|
48 |
-
$pmpro_msg =
|
49 |
-
$pmpro_msgt = "success";
|
50 |
-
$saved = true;
|
51 |
-
$edit = $saveid;
|
52 |
-
}
|
53 |
-
else
|
54 |
-
{
|
55 |
-
$pmpro_msg =
|
56 |
-
$pmpro_msgt = "error";
|
57 |
-
}
|
58 |
-
}
|
59 |
-
else
|
60 |
-
{
|
61 |
-
$sqlQuery = "INSERT INTO $wpdb->pmpro_discount_codes (code, starts, expires, uses) VALUES('" .
|
62 |
-
if($wpdb->query($sqlQuery) !== false)
|
63 |
-
{
|
64 |
-
$pmpro_msg =
|
65 |
-
$pmpro_msgt = "success";
|
66 |
-
$saved = true;
|
67 |
-
$edit = $wpdb->insert_id;
|
68 |
-
}
|
69 |
-
else
|
70 |
-
{
|
71 |
-
$pmpro_msg =
|
72 |
-
$pmpro_msgt = "error";
|
73 |
-
}
|
74 |
-
}
|
75 |
-
|
76 |
-
//now add the membership level rows
|
77 |
-
if($saved && $edit > 0)
|
78 |
-
{
|
79 |
-
//get the submitted values
|
80 |
-
$all_levels_a = $_REQUEST['all_levels'];
|
81 |
-
if(!empty($_REQUEST['levels']))
|
82 |
-
$levels_a = $_REQUEST['levels'];
|
83 |
-
else
|
84 |
-
$levels_a = array();
|
85 |
-
$initial_payment_a = $_REQUEST['initial_payment'];
|
86 |
-
if(!empty($_REQUEST['recurring']))
|
87 |
-
$recurring_a = $_REQUEST['recurring'];
|
88 |
-
$billing_amount_a = $_REQUEST['billing_amount'];
|
89 |
-
$cycle_number_a = $_REQUEST['cycle_number'];
|
90 |
-
$cycle_period_a = $_REQUEST['cycle_period'];
|
91 |
-
$billing_limit_a = $_REQUEST['billing_limit'];
|
92 |
-
if(!empty($_REQUEST['custom_trial']))
|
93 |
-
$custom_trial_a = $_REQUEST['custom_trial'];
|
94 |
-
$trial_amount_a = $_REQUEST['trial_amount'];
|
95 |
-
$trial_limit_a = $_REQUEST['trial_limit'];
|
96 |
-
if(!empty($_REQUEST['expiration']))
|
97 |
-
$expiration_a = $_REQUEST['expiration'];
|
98 |
-
$expiration_number_a = $_REQUEST['expiration_number'];
|
99 |
-
$expiration_period_a = $_REQUEST['expiration_period'];
|
100 |
-
|
101 |
-
//clear the old rows
|
102 |
-
$sqlQuery = "DELETE FROM $wpdb->pmpro_discount_codes_levels WHERE code_id = '" . $edit . "'";
|
103 |
-
$wpdb->query($sqlQuery);
|
104 |
-
|
105 |
-
//add a row for each checked level
|
106 |
-
if(!empty($levels_a))
|
107 |
-
{
|
108 |
-
foreach($levels_a as $level_id)
|
109 |
-
{
|
110 |
-
//get the values ready
|
111 |
-
$n = array_search($level_id, $all_levels_a); //this is the key location of this level's values
|
112 |
-
$initial_payment = $initial_payment_a[$n];
|
113 |
-
|
114 |
-
//is this recurring?
|
115 |
-
if(!empty($recurring_a))
|
116 |
-
{
|
117 |
-
if(in_array($level_id, $recurring_a))
|
118 |
-
$recurring = 1;
|
119 |
-
else
|
120 |
-
$recurring = 0;
|
121 |
-
}
|
122 |
-
else
|
123 |
-
$recurring = 0;
|
124 |
-
|
125 |
-
if(!empty($recurring))
|
126 |
-
{
|
127 |
-
$billing_amount = $billing_amount_a[$n];
|
128 |
-
$cycle_number = $cycle_number_a[$n];
|
129 |
-
$cycle_period = $cycle_period_a[$n];
|
130 |
-
$billing_limit = $billing_limit_a[$n];
|
131 |
-
|
132 |
-
//custom trial
|
133 |
-
if(!empty($custom_trial_a))
|
134 |
-
{
|
135 |
-
if(in_array($level_id, $custom_trial_a))
|
136 |
-
$custom_trial = 1;
|
137 |
-
else
|
138 |
-
$custom_trial = 0;
|
139 |
-
}
|
140 |
-
else
|
141 |
-
$custom_trial = 0;
|
142 |
-
|
143 |
-
if(!empty($custom_trial))
|
144 |
-
{
|
145 |
-
$trial_amount = $trial_amount_a[$n];
|
146 |
-
$trial_limit = $trial_limit_a[$n];
|
147 |
-
}
|
148 |
-
else
|
149 |
-
{
|
150 |
-
$trial_amount = '';
|
151 |
-
$trial_limit = '';
|
152 |
-
}
|
153 |
-
}
|
154 |
-
else
|
155 |
-
{
|
156 |
-
$billing_amount = '';
|
157 |
-
$cycle_number = '';
|
158 |
-
$cycle_period = 'Month';
|
159 |
-
$billing_limit = '';
|
160 |
-
$custom_trial = 0;
|
161 |
-
$trial_amount = '';
|
162 |
-
$trial_limit = '';
|
163 |
-
}
|
164 |
-
|
165 |
-
if(!empty($expiration_a))
|
166 |
-
{
|
167 |
-
if(in_array($level_id, $expiration_a))
|
168 |
-
$expiration = 1;
|
169 |
-
else
|
170 |
-
$expiration = 0;
|
171 |
-
}
|
172 |
-
else
|
173 |
-
$expiration = 0;
|
174 |
-
|
175 |
-
if(!empty($expiration))
|
176 |
-
{
|
177 |
-
$expiration_number = $expiration_number_a[$n];
|
178 |
-
$expiration_period = $expiration_period_a[$n];
|
179 |
-
}
|
180 |
-
else
|
181 |
-
{
|
182 |
-
$expiration_number = '';
|
183 |
-
$expiration_period = 'Month';
|
184 |
-
}
|
185 |
-
|
186 |
-
//okay, do the insert
|
187 |
-
$sqlQuery = "INSERT INTO $wpdb->pmpro_discount_codes_levels (code_id, level_id, initial_payment, billing_amount, cycle_number, cycle_period, billing_limit, trial_amount, trial_limit, expiration_number, expiration_period) VALUES('" .
|
188 |
-
|
189 |
-
if($wpdb->query($sqlQuery) !== false)
|
190 |
-
{
|
191 |
-
//okay
|
192 |
-
do_action("pmpro_save_discount_code_level", $
|
193 |
-
}
|
194 |
-
else
|
195 |
-
{
|
196 |
-
$level_errors[] =
|
197 |
-
}
|
198 |
-
}
|
199 |
-
}
|
200 |
-
|
201 |
-
//errors?
|
202 |
-
if(!empty($level_errors))
|
203 |
-
{
|
204 |
-
$pmpro_msg =
|
205 |
-
$pmpro_msgt = "error";
|
206 |
-
}
|
207 |
-
else
|
208 |
-
{
|
209 |
-
//all good. set edit = NULL so we go back to the overview page
|
210 |
-
$edit = NULL;
|
211 |
-
|
212 |
-
do_action("pmpro_save_discount_code", $saveid);
|
213 |
-
}
|
214 |
-
}
|
215 |
-
}
|
216 |
-
|
217 |
-
//are we deleting?
|
218 |
-
if(!empty($delete))
|
219 |
-
{
|
220 |
-
//is this a code?
|
221 |
-
$code = $wpdb->get_var("SELECT code FROM $wpdb->pmpro_discount_codes WHERE id = '" . $delete . "' LIMIT 1");
|
222 |
-
if(!empty($code))
|
223 |
-
{
|
224 |
-
//
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
if($edit > 0)
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
if(!empty($code->
|
336 |
-
$
|
337 |
-
else
|
338 |
-
$
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
$
|
343 |
-
|
344 |
-
|
345 |
-
if(!empty($code->
|
346 |
-
$
|
347 |
-
else
|
348 |
-
$
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
<
|
474 |
-
|
475 |
-
<
|
476 |
-
<
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
<
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
<
|
488 |
-
|
489 |
-
<
|
490 |
-
<
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
<?php
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
<th
|
565 |
-
<th
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
</
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
<?php
|
635 |
-
|
636 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
//only admins can get this
|
3 |
+
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_discountcodes")))
|
4 |
+
{
|
5 |
+
die("You do not have permissions to perform this action.");
|
6 |
+
}
|
7 |
+
|
8 |
+
//vars
|
9 |
+
global $wpdb, $pmpro_currency_symbol;
|
10 |
+
|
11 |
+
if(isset($_REQUEST['edit']))
|
12 |
+
$edit = $_REQUEST['edit'];
|
13 |
+
else
|
14 |
+
$edit = false;
|
15 |
+
|
16 |
+
if(isset($_REQUEST['delete']))
|
17 |
+
$delete = $_REQUEST['delete'];
|
18 |
+
else
|
19 |
+
$delete = false;
|
20 |
+
|
21 |
+
if(isset($_REQUEST['saveid']))
|
22 |
+
$saveid = $_POST['saveid'];
|
23 |
+
else
|
24 |
+
$saveid = false;
|
25 |
+
|
26 |
+
if($saveid)
|
27 |
+
{
|
28 |
+
//get vars
|
29 |
+
$code = $_POST['code'];
|
30 |
+
$starts_month = $_POST['starts_month'];
|
31 |
+
$starts_day = $_POST['starts_day'];
|
32 |
+
$starts_year = $_POST['starts_year'];
|
33 |
+
$expires_month = $_POST['expires_month'];
|
34 |
+
$expires_day = $_POST['expires_day'];
|
35 |
+
$expires_year = $_POST['expires_year'];
|
36 |
+
$uses = $_POST['uses'];
|
37 |
+
|
38 |
+
//fix up dates
|
39 |
+
$starts = date("Y-m-d", strtotime($starts_month . "/" . $starts_day . "/" . $starts_year));
|
40 |
+
$expires = date("Y-m-d", strtotime($expires_month . "/" . $expires_day . "/" . $expires_year));
|
41 |
+
|
42 |
+
//updating or new?
|
43 |
+
if($saveid > 0)
|
44 |
+
{
|
45 |
+
$sqlQuery = "UPDATE $wpdb->pmpro_discount_codes SET code = '" . $wpdb->escape($code) . "', starts = '" . $starts . "', expires = '" . $expires . "', uses = '" . intval($uses) . "' WHERE id = '" . $saveid . "' LIMIT 1";
|
46 |
+
if($wpdb->query($sqlQuery) !== false)
|
47 |
+
{
|
48 |
+
$pmpro_msg = "Discount code updated successfully.";
|
49 |
+
$pmpro_msgt = "success";
|
50 |
+
$saved = true;
|
51 |
+
$edit = $saveid;
|
52 |
+
}
|
53 |
+
else
|
54 |
+
{
|
55 |
+
$pmpro_msg = "Error updating discount code. That code may already be in use.";
|
56 |
+
$pmpro_msgt = "error";
|
57 |
+
}
|
58 |
+
}
|
59 |
+
else
|
60 |
+
{
|
61 |
+
$sqlQuery = "INSERT INTO $wpdb->pmpro_discount_codes (code, starts, expires, uses) VALUES('" . $wpdb->escape($code) . "', '" . $starts . "', '" . $expires . "', '" . intval($uses) . "')";
|
62 |
+
if($wpdb->query($sqlQuery) !== false)
|
63 |
+
{
|
64 |
+
$pmpro_msg = "Discount code added successfully.";
|
65 |
+
$pmpro_msgt = "success";
|
66 |
+
$saved = true;
|
67 |
+
$edit = $wpdb->insert_id;
|
68 |
+
}
|
69 |
+
else
|
70 |
+
{
|
71 |
+
$pmpro_msg = "Error adding discount code. That code may already be in use." . $wpdb->last_error;
|
72 |
+
$pmpro_msgt = "error";
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
//now add the membership level rows
|
77 |
+
if($saved && $edit > 0)
|
78 |
+
{
|
79 |
+
//get the submitted values
|
80 |
+
$all_levels_a = $_REQUEST['all_levels'];
|
81 |
+
if(!empty($_REQUEST['levels']))
|
82 |
+
$levels_a = $_REQUEST['levels'];
|
83 |
+
else
|
84 |
+
$levels_a = array();
|
85 |
+
$initial_payment_a = $_REQUEST['initial_payment'];
|
86 |
+
if(!empty($_REQUEST['recurring']))
|
87 |
+
$recurring_a = $_REQUEST['recurring'];
|
88 |
+
$billing_amount_a = $_REQUEST['billing_amount'];
|
89 |
+
$cycle_number_a = $_REQUEST['cycle_number'];
|
90 |
+
$cycle_period_a = $_REQUEST['cycle_period'];
|
91 |
+
$billing_limit_a = $_REQUEST['billing_limit'];
|
92 |
+
if(!empty($_REQUEST['custom_trial']))
|
93 |
+
$custom_trial_a = $_REQUEST['custom_trial'];
|
94 |
+
$trial_amount_a = $_REQUEST['trial_amount'];
|
95 |
+
$trial_limit_a = $_REQUEST['trial_limit'];
|
96 |
+
if(!empty($_REQUEST['expiration']))
|
97 |
+
$expiration_a = $_REQUEST['expiration'];
|
98 |
+
$expiration_number_a = $_REQUEST['expiration_number'];
|
99 |
+
$expiration_period_a = $_REQUEST['expiration_period'];
|
100 |
+
|
101 |
+
//clear the old rows
|
102 |
+
$sqlQuery = "DELETE FROM $wpdb->pmpro_discount_codes_levels WHERE code_id = '" . $edit . "'";
|
103 |
+
$wpdb->query($sqlQuery);
|
104 |
+
|
105 |
+
//add a row for each checked level
|
106 |
+
if(!empty($levels_a))
|
107 |
+
{
|
108 |
+
foreach($levels_a as $level_id)
|
109 |
+
{
|
110 |
+
//get the values ready
|
111 |
+
$n = array_search($level_id, $all_levels_a); //this is the key location of this level's values
|
112 |
+
$initial_payment = $initial_payment_a[$n];
|
113 |
+
|
114 |
+
//is this recurring?
|
115 |
+
if(!empty($recurring_a))
|
116 |
+
{
|
117 |
+
if(in_array($level_id, $recurring_a))
|
118 |
+
$recurring = 1;
|
119 |
+
else
|
120 |
+
$recurring = 0;
|
121 |
+
}
|
122 |
+
else
|
123 |
+
$recurring = 0;
|
124 |
+
|
125 |
+
if(!empty($recurring))
|
126 |
+
{
|
127 |
+
$billing_amount = $billing_amount_a[$n];
|
128 |
+
$cycle_number = $cycle_number_a[$n];
|
129 |
+
$cycle_period = $cycle_period_a[$n];
|
130 |
+
$billing_limit = $billing_limit_a[$n];
|
131 |
+
|
132 |
+
//custom trial
|
133 |
+
if(!empty($custom_trial_a))
|
134 |
+
{
|
135 |
+
if(in_array($level_id, $custom_trial_a))
|
136 |
+
$custom_trial = 1;
|
137 |
+
else
|
138 |
+
$custom_trial = 0;
|
139 |
+
}
|
140 |
+
else
|
141 |
+
$custom_trial = 0;
|
142 |
+
|
143 |
+
if(!empty($custom_trial))
|
144 |
+
{
|
145 |
+
$trial_amount = $trial_amount_a[$n];
|
146 |
+
$trial_limit = $trial_limit_a[$n];
|
147 |
+
}
|
148 |
+
else
|
149 |
+
{
|
150 |
+
$trial_amount = '';
|
151 |
+
$trial_limit = '';
|
152 |
+
}
|
153 |
+
}
|
154 |
+
else
|
155 |
+
{
|
156 |
+
$billing_amount = '';
|
157 |
+
$cycle_number = '';
|
158 |
+
$cycle_period = 'Month';
|
159 |
+
$billing_limit = '';
|
160 |
+
$custom_trial = 0;
|
161 |
+
$trial_amount = '';
|
162 |
+
$trial_limit = '';
|
163 |
+
}
|
164 |
+
|
165 |
+
if(!empty($expiration_a))
|
166 |
+
{
|
167 |
+
if(in_array($level_id, $expiration_a))
|
168 |
+
$expiration = 1;
|
169 |
+
else
|
170 |
+
$expiration = 0;
|
171 |
+
}
|
172 |
+
else
|
173 |
+
$expiration = 0;
|
174 |
+
|
175 |
+
if(!empty($expiration))
|
176 |
+
{
|
177 |
+
$expiration_number = $expiration_number_a[$n];
|
178 |
+
$expiration_period = $expiration_period_a[$n];
|
179 |
+
}
|
180 |
+
else
|
181 |
+
{
|
182 |
+
$expiration_number = '';
|
183 |
+
$expiration_period = 'Month';
|
184 |
+
}
|
185 |
+
|
186 |
+
//okay, do the insert
|
187 |
+
$sqlQuery = "INSERT INTO $wpdb->pmpro_discount_codes_levels (code_id, level_id, initial_payment, billing_amount, cycle_number, cycle_period, billing_limit, trial_amount, trial_limit, expiration_number, expiration_period) VALUES('" . $wpdb->escape($edit) . "', '" . $wpdb->escape($level_id) . "', '" . (double)$wpdb->escape($initial_payment) . "', '" . (double)$wpdb->escape($billing_amount) . "', '" . intval($wpdb->escape($cycle_number)) . "', '" . $wpdb->escape($cycle_period) . "', '" . intval($wpdb->escape($billing_limit)) . "', '" . (double)$wpdb->escape($trial_amount) . "', '" . intval($wpdb->escape($trial_limit)) . "', '" . intval($wpdb->escape($expiration_number)) . "', '" . $wpdb->escape($expiration_period) . "')";
|
188 |
+
|
189 |
+
if($wpdb->query($sqlQuery) !== false)
|
190 |
+
{
|
191 |
+
//okay
|
192 |
+
do_action("pmpro_save_discount_code_level", $saveid, $level_id);
|
193 |
+
}
|
194 |
+
else
|
195 |
+
{
|
196 |
+
$level_errors[] = "Error saving values for the " . $wpdb->get_var("SELECT name FROM $wpdb->pmpro_membership_levels WHERE id = '" . $level_id . "' LIMIT 1") . " level.";
|
197 |
+
}
|
198 |
+
}
|
199 |
+
}
|
200 |
+
|
201 |
+
//errors?
|
202 |
+
if(!empty($level_errors))
|
203 |
+
{
|
204 |
+
$pmpro_msg = "There were errors updating the level values: " . implode(" ", $level_errors);
|
205 |
+
$pmpro_msgt = "error";
|
206 |
+
}
|
207 |
+
else
|
208 |
+
{
|
209 |
+
//all good. set edit = NULL so we go back to the overview page
|
210 |
+
$edit = NULL;
|
211 |
+
|
212 |
+
do_action("pmpro_save_discount_code", $saveid);
|
213 |
+
}
|
214 |
+
}
|
215 |
+
}
|
216 |
+
|
217 |
+
//are we deleting?
|
218 |
+
if(!empty($delete))
|
219 |
+
{
|
220 |
+
//is this a code?
|
221 |
+
$code = $wpdb->get_var("SELECT code FROM $wpdb->pmpro_discount_codes WHERE id = '" . $delete . "' LIMIT 1");
|
222 |
+
if(!empty($code))
|
223 |
+
{
|
224 |
+
//delete the code levels
|
225 |
+
$r1 = $wpdb->query("DELETE FROM $wpdb->pmpro_discount_codes_levels WHERE code_id = '" . $delete . "'");
|
226 |
+
|
227 |
+
if($r1 !== false)
|
228 |
+
{
|
229 |
+
//delete the code
|
230 |
+
$r2 = $wpdb->query("DELETE FROM $wpdb->pmpro_discount_codes WHERE id = '" . $delete . "' LIMIT 1");
|
231 |
+
|
232 |
+
if($r2 !== false)
|
233 |
+
{
|
234 |
+
$pmpro_msg = "Code $code deleted successfully.";
|
235 |
+
$pmpro_msgt = "success";
|
236 |
+
}
|
237 |
+
else
|
238 |
+
{
|
239 |
+
$pmpro_msg = "Error deleting discount code. The code was only partially deleted. Please try again.";
|
240 |
+
$pmpro_msgt = "error";
|
241 |
+
}
|
242 |
+
}
|
243 |
+
else
|
244 |
+
{
|
245 |
+
$pmpro_msg = "Error deleting code. Please try again.";
|
246 |
+
$pmpro_msgt = "error";
|
247 |
+
}
|
248 |
+
}
|
249 |
+
else
|
250 |
+
{
|
251 |
+
$pmpro_msg = "Code not found.";
|
252 |
+
$pmpro_msgt = "error";
|
253 |
+
}
|
254 |
+
}
|
255 |
+
?>
|
256 |
+
<div class="wrap pmpro_admin">
|
257 |
+
<div class="pmpro_banner">
|
258 |
+
<a class="pmpro_logo" title="Paid Memberships Pro - Membership Plugin for WordPress" target="_blank" href="<?php echo pmpro_https_filter("http://www.paidmembershipspro.com")?>"><img src="<?php echo PMPRO_URL?>/images/PaidMembershipsPro.gif" width="350" height="45" border="0" alt="Paid Memberships Pro(c) - All Rights Reserved" /></a>
|
259 |
+
<div class="pmpro_tagline">Membership Plugin for WordPress</div>
|
260 |
+
|
261 |
+
<div class="pmpro_meta"><a href="<?php echo pmpro_https_filter("http://www.paidmembershipspro.com")?>">Plugin Support</a> | <a href="http://www.paidmembershipspro.com/forums/">User Forum</a> | <strong>Version <?php echo PMPRO_VERSION?></strong></div>
|
262 |
+
</div>
|
263 |
+
<br style="clear:both;" />
|
264 |
+
|
265 |
+
<?php
|
266 |
+
//include(pmpro_https_filter("http://www.paidmembershipspro.com/notifications/?v=" . PMPRO_VERSION));
|
267 |
+
?>
|
268 |
+
<div id="pmpro_notifications">
|
269 |
+
</div>
|
270 |
+
<script>
|
271 |
+
jQuery.get('<?php echo pmpro_https_filter("http://www.paidmembershipspro.com/notifications/?v=" . PMPRO_VERSION)?>', function(data) {
|
272 |
+
jQuery('#pmpro_notifications').html(data);
|
273 |
+
});
|
274 |
+
</script>
|
275 |
+
|
276 |
+
<?php if($edit) { ?>
|
277 |
+
|
278 |
+
<h2>
|
279 |
+
<?php
|
280 |
+
if($edit > 0)
|
281 |
+
echo "Edit Discount Code";
|
282 |
+
else
|
283 |
+
echo "Add New Discount Code";
|
284 |
+
?>
|
285 |
+
</h2>
|
286 |
+
|
287 |
+
<?php if(!empty($pmpro_msg)) { ?>
|
288 |
+
<div id="message" class="<?php if($pmpro_msgt == "success") echo "updated fade"; else echo "error"; ?>"><p><?php echo $pmpro_msg?></p></div>
|
289 |
+
<?php } ?>
|
290 |
+
|
291 |
+
<div>
|
292 |
+
<?php
|
293 |
+
// get the code...
|
294 |
+
if($edit > 0)
|
295 |
+
{
|
296 |
+
$code = $wpdb->get_row("SELECT *, UNIX_TIMESTAMP(starts) as starts, UNIX_TIMESTAMP(expires) as expires FROM $wpdb->pmpro_discount_codes WHERE id = '" . $edit . "' LIMIT 1", OBJECT);
|
297 |
+
$uses = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->pmpro_discount_codes_uses WHERE code_id = '" . $code->id . "'");
|
298 |
+
$levels = $wpdb->get_results("SELECT l.id, l.name, cl.initial_payment, cl.billing_amount, cl.cycle_number, cl.period, cl.billing_limit, cl.trial_amount, cl.trial_limit FROM $wpdb->pmpro_membership_levels l LEFT JOIN $wpdb->pmpro_discount_codes_levels cl ON l.id = cl.level_id WHERE cl.code_id = '" . $code->code . "'");
|
299 |
+
$temp_id = $code->id;
|
300 |
+
}
|
301 |
+
elseif(!empty($copy) && $copy > 0)
|
302 |
+
{
|
303 |
+
$code = $wpdb->get_row("SELECT *, UNIX_TIMESTAMP(starts) as starts, UNIX_TIMESTAMP(expires) as expires FROM $wpdb->pmpro_discount_codes WHERE id = '" . $copy . "' LIMIT 1", OBJECT);
|
304 |
+
$temp_id = $level->id;
|
305 |
+
$level->id = NULL;
|
306 |
+
}
|
307 |
+
|
308 |
+
// didn't find a discount code, let's add a new one...
|
309 |
+
if(empty($code->id)) $edit = -1;
|
310 |
+
|
311 |
+
//defaults for new codes
|
312 |
+
if($edit == -1)
|
313 |
+
{
|
314 |
+
$code = new stdClass();
|
315 |
+
$code->code = pmpro_getDiscountCode();
|
316 |
+
}
|
317 |
+
?>
|
318 |
+
<form action="" method="post">
|
319 |
+
<input name="saveid" type="hidden" value="<?php echo $edit?>" />
|
320 |
+
<table class="form-table">
|
321 |
+
<tbody>
|
322 |
+
<tr>
|
323 |
+
<th scope="row" valign="top"><label>ID:</label></th>
|
324 |
+
<td class="pmpro_lite"><?php if(!empty($code->id)) echo $code->id; else echo "This will be generated when you save.";?></td>
|
325 |
+
</tr>
|
326 |
+
|
327 |
+
<tr>
|
328 |
+
<th scope="row" valign="top"><label for="code">Code:</label></th>
|
329 |
+
<td><input name="code" type="text" size="20" value="<?php echo str_replace("\"", """, stripslashes($code->code))?>" /></td>
|
330 |
+
</tr>
|
331 |
+
|
332 |
+
<?php
|
333 |
+
//some vars for the dates
|
334 |
+
$current_day = date("j");
|
335 |
+
if(!empty($code->starts))
|
336 |
+
$selected_starts_day = date("j", $code->starts);
|
337 |
+
else
|
338 |
+
$selected_starts_day = $current_day;
|
339 |
+
if(!empty($code->expires))
|
340 |
+
$selected_expires_day = date("j", $code->expires);
|
341 |
+
else
|
342 |
+
$selected_expires_day = $current_day;
|
343 |
+
|
344 |
+
$current_month = date("M");
|
345 |
+
if(!empty($code->starts))
|
346 |
+
$selected_starts_month = date("m", $code->starts);
|
347 |
+
else
|
348 |
+
$selected_starts_month = date("m");
|
349 |
+
if(!empty($code->expires))
|
350 |
+
$selected_expires_month = date("m", $code->expires);
|
351 |
+
else
|
352 |
+
$selected_expires_month = date("m");
|
353 |
+
|
354 |
+
$current_year = date("Y");
|
355 |
+
if(!empty($code->starts))
|
356 |
+
$selected_starts_year = date("Y", $code->starts);
|
357 |
+
else
|
358 |
+
$selected_starts_year = $current_year;
|
359 |
+
if(!empty($code->expires))
|
360 |
+
$selected_expires_year = date("Y", $code->expires);
|
361 |
+
else
|
362 |
+
$selected_expires_year = (int)$current_year + 1;
|
363 |
+
?>
|
364 |
+
|
365 |
+
<tr>
|
366 |
+
<th scope="row" valign="top"><label for="starts">Start Date:</label></th>
|
367 |
+
<td>
|
368 |
+
<select name="starts_month">
|
369 |
+
<?php
|
370 |
+
for($i = 1; $i < 13; $i++)
|
371 |
+
{
|
372 |
+
?>
|
373 |
+
<option value="<?php echo $i?>" <?php if($i == $selected_starts_month) { ?>selected="selected"<?php } ?>><?php echo date("M", strtotime($i . "/1/" . $current_year))?></option>
|
374 |
+
<?php
|
375 |
+
}
|
376 |
+
?>
|
377 |
+
</select>
|
378 |
+
<input name="starts_day" type="text" size="2" value="<?php echo $selected_starts_day?>" />
|
379 |
+
<input name="starts_year" type="text" size="4" value="<?php echo $selected_starts_year?>" />
|
380 |
+
</td>
|
381 |
+
</tr>
|
382 |
+
|
383 |
+
<tr>
|
384 |
+
<th scope="row" valign="top"><label for="expires">Expiration Date:</label></th>
|
385 |
+
<td>
|
386 |
+
<select name="expires_month">
|
387 |
+
<?php
|
388 |
+
for($i = 1; $i < 13; $i++)
|
389 |
+
{
|
390 |
+
?>
|
391 |
+
<option value="<?php echo $i?>" <?php if($i == $selected_expires_month) { ?>selected="selected"<?php } ?>><?php echo date("M", strtotime($i . "/1/" . $current_year))?></option>
|
392 |
+
<?php
|
393 |
+
}
|
394 |
+
?>
|
395 |
+
</select>
|
396 |
+
<input name="expires_day" type="text" size="2" value="<?php echo $selected_expires_day?>" />
|
397 |
+
<input name="expires_year" type="text" size="4" value="<?php echo $selected_expires_year?>" />
|
398 |
+
</td>
|
399 |
+
</tr>
|
400 |
+
|
401 |
+
<tr>
|
402 |
+
<th scope="row" valign="top"><label for="uses">Uses:</label></th>
|
403 |
+
<td>
|
404 |
+
<input name="uses" type="text" size="10" value="<?php if(!empty($code->uses)) echo str_replace("\"", """, stripslashes($code->uses));?>" />
|
405 |
+
<small class="pmpro_lite">Leave blank for unlimited uses.</small>
|
406 |
+
</td>
|
407 |
+
</tr>
|
408 |
+
|
409 |
+
</tbody>
|
410 |
+
</table>
|
411 |
+
|
412 |
+
<?php do_action("pmpro_discount_code_after_settings"); ?>
|
413 |
+
|
414 |
+
<h3>Which Levels Will This Code Apply To?</h3>
|
415 |
+
|
416 |
+
<div class="pmpro_discount_levels">
|
417 |
+
<?php
|
418 |
+
$levels = $wpdb->get_results("SELECT * FROM $wpdb->pmpro_membership_levels");
|
419 |
+
foreach($levels as $level)
|
420 |
+
{
|
421 |
+
//if this level is already managed for this discount code, use the code values
|
422 |
+
if($edit > 0)
|
423 |
+
{
|
424 |
+
$code_level = $wpdb->get_row("SELECT l.id, cl.*, l.name, l.description, l.allow_signups FROM $wpdb->pmpro_discount_codes_levels cl LEFT JOIN $wpdb->pmpro_membership_levels l ON cl.level_id = l.id WHERE cl.code_id = '" . $edit . "' AND cl.level_id = '" . $level->id . "' LIMIT 1");
|
425 |
+
if($code_level)
|
426 |
+
{
|
427 |
+
$level = $code_level;
|
428 |
+
$level->checked = true;
|
429 |
+
}
|
430 |
+
else
|
431 |
+
$level_checked = false;
|
432 |
+
}
|
433 |
+
else
|
434 |
+
$level_checked = false;
|
435 |
+
?>
|
436 |
+
<div>
|
437 |
+
<input type="hidden" name="all_levels[]" value="<?php echo $level->id?>" />
|
438 |
+
<input type="checkbox" name="levels[]" value="<?php echo $level->id?>" <?php if(!empty($level->checked)) { ?>checked="checked"<?php } ?> onclick="if(jQuery(this).is(':checked')) jQuery(this).next().show(); else jQuery(this).next().hide();" />
|
439 |
+
<?php echo $level->name?>
|
440 |
+
<div class="pmpro_discount_levels_pricing level_<?php echo $level->id?>" <?php if(empty($level->checked)) { ?>style="display: none;"<?php } ?>>
|
441 |
+
<table class="form-table">
|
442 |
+
<tbody>
|
443 |
+
<tr>
|
444 |
+
<th scope="row" valign="top"><label for="initial_payment">Initial Payment:</label></th>
|
445 |
+
<td><?php echo $pmpro_currency_symbol?><input name="initial_payment[]" type="text" size="20" value="<?php echo str_replace("\"", """, stripslashes($level->initial_payment))?>" /> <small>The initial amount collected at registration.</small></td>
|
446 |
+
</tr>
|
447 |
+
|
448 |
+
<tr>
|
449 |
+
<th scope="row" valign="top"><label>Recurring Subscription:</label></th>
|
450 |
+
<td><input class="recurring_checkbox" name="recurring[]" type="checkbox" value="<?php echo $level->id?>" <?php if(pmpro_isLevelRecurring($level)) { echo "checked='checked'"; } ?> onclick="if(jQuery(this).attr('checked')) { jQuery(this).parent().parent().siblings('.recurring_info').show(); if(!jQuery('#custom_trial_<?php echo $level->id?>').is(':checked')) jQuery(this).parent().parent().siblings('.trial_info').hide();} else jQuery(this).parent().parent().siblings('.recurring_info').hide();" /> <small>Check if this level has a recurring subscription payment.</small></td>
|
451 |
+
</tr>
|
452 |
+
|
453 |
+
<tr class="recurring_info" <?php if(!pmpro_isLevelRecurring($level)) {?>style="display: none;"<?php } ?>>
|
454 |
+
<th scope="row" valign="top"><label for="billing_amount">Billing Amount:</label></th>
|
455 |
+
<td>
|
456 |
+
<?php echo $pmpro_currency_symbol?><input name="billing_amount[]" type="text" size="20" value="<?php echo str_replace("\"", """, stripslashes($level->billing_amount))?>" /> <small>per</small>
|
457 |
+
<input name="cycle_number[]" type="text" size="10" value="<?php echo str_replace("\"", """, stripslashes($level->cycle_number))?>" />
|
458 |
+
<select name="cycle_period[]" onchange="updateCyclePeriod();">
|
459 |
+
<?php
|
460 |
+
$cycles = array( 'Day(s)' => 'Day', 'Week(s)' => 'Week', 'Month(s)' => 'Month', 'Year(s)' => 'Year' );
|
461 |
+
foreach ( $cycles as $name => $value ) {
|
462 |
+
echo "<option value='$value'";
|
463 |
+
if ( $level->cycle_period == $value ) echo " selected='selected'";
|
464 |
+
echo ">$name</option>";
|
465 |
+
}
|
466 |
+
?>
|
467 |
+
</select>
|
468 |
+
<br /><small>The amount to be billed one cycle after the initial payment.</small>
|
469 |
+
</td>
|
470 |
+
</tr>
|
471 |
+
|
472 |
+
<tr class="recurring_info" <?php if(!pmpro_isLevelRecurring($level)) {?>style="display: none;"<?php } ?>>
|
473 |
+
<th scope="row" valign="top"><label for="billing_limit">Billing Cycle Limit:</label></th>
|
474 |
+
<td>
|
475 |
+
<input name="billing_limit[]" type="text" size="20" value="<?php echo $level->billing_limit?>" />
|
476 |
+
<br /><small>The <strong>total</strong> number of billing cycles for this level, including the trial period (if applicable). Set to zero if membership is indefinite.</small>
|
477 |
+
</td>
|
478 |
+
</tr>
|
479 |
+
|
480 |
+
<tr class="recurring_info" <?php if (!pmpro_isLevelRecurring($level)) echo "style='display:none;'";?>>
|
481 |
+
<th scope="row" valign="top"><label>Custom Trial:</label></th>
|
482 |
+
<td><input id="custom_trial_<?php echo $level->id?>" name="custom_trial[]" type="checkbox" value="<?php echo $level->id?>" <?php if ( pmpro_isLevelTrial($level) ) { echo "checked='checked'"; } ?> onclick="if(jQuery(this).attr('checked')) jQuery(this).parent().parent().siblings('.trial_info').show(); else jQuery(this).parent().parent().siblings('.trial_info').hide();" /> Check to add a custom trial period.</td>
|
483 |
+
</tr>
|
484 |
+
|
485 |
+
<tr class="trial_info recurring_info" <?php if (!pmpro_isLevelTrial($level)) echo "style='display:none;'";?>>
|
486 |
+
<th scope="row" valign="top"><label for="trial_amount">Trial Billing Amount:</label></th>
|
487 |
+
<td>
|
488 |
+
<?php echo $pmpro_currency_symbol?><input name="trial_amount[]" type="text" size="20" value="<?php echo str_replace("\"", """, stripslashes($level->trial_amount))?>" />
|
489 |
+
<small>for the first</small>
|
490 |
+
<input name="trial_limit[]" type="text" size="10" value="<?php echo str_replace("\"", """, stripslashes($level->trial_limit))?>" />
|
491 |
+
<small>subscription payments.</small>
|
492 |
+
</td>
|
493 |
+
</tr>
|
494 |
+
|
495 |
+
<tr>
|
496 |
+
<th scope="row" valign="top"><label>Membership Expiration:</label></th>
|
497 |
+
<td><input id="expiration" name="expiration[]" type="checkbox" value="<?php echo $level->id?>" <?php if(pmpro_isLevelExpiring($level)) { echo "checked='checked'"; } ?> onclick="if(jQuery(this).is(':checked')) { jQuery(this).parent().parent().siblings('.expiration_info').show(); } else { jQuery(this).parent().parent().siblings('.expiration_info').hide();}" /> <small>Check this to set an expiration date for new sign ups.</small></td>
|
498 |
+
</tr>
|
499 |
+
|
500 |
+
<tr class="expiration_info" <?php if(!pmpro_isLevelExpiring($level)) {?>style="display: none;"<?php } ?>>
|
501 |
+
<th scope="row" valign="top"><label for="billing_amount">Expire In:</label></th>
|
502 |
+
<td>
|
503 |
+
<input id="expiration_number" name="expiration_number[]" type="text" size="10" value="<?php echo str_replace("\"", """, stripslashes($level->expiration_number))?>" />
|
504 |
+
<select id="expiration_period" name="expiration_period[]">
|
505 |
+
<?php
|
506 |
+
$cycles = array( 'Day(s)' => 'Day', 'Week(s)' => 'Week', 'Month(s)' => 'Month', 'Year(s)' => 'Year' );
|
507 |
+
foreach ( $cycles as $name => $value ) {
|
508 |
+
echo "<option value='$value'";
|
509 |
+
if ( $level->expiration_period == $value ) echo " selected='selected'";
|
510 |
+
echo ">$name</option>";
|
511 |
+
}
|
512 |
+
?>
|
513 |
+
</select>
|
514 |
+
<br /><small>How long before the expiration expires. Not that any future payments will be canceled when the membership expires.</small>
|
515 |
+
</td>
|
516 |
+
</tr>
|
517 |
+
</tbody>
|
518 |
+
</table>
|
519 |
+
|
520 |
+
<?php do_action("pmpro_discount_code_after_level_settings", $edit, $level); ?>
|
521 |
+
|
522 |
+
</div>
|
523 |
+
</div>
|
524 |
+
<script>
|
525 |
+
|
526 |
+
</script>
|
527 |
+
<?php
|
528 |
+
}
|
529 |
+
?>
|
530 |
+
</div>
|
531 |
+
|
532 |
+
<p class="submit topborder">
|
533 |
+
<input name="save" type="submit" class="button-primary" value="Save Code" />
|
534 |
+
<input name="cancel" type="button" value="Cancel" onclick="location.href='<?php echo get_admin_url(NULL, '/admin.php?page=pmpro-discountcodes')?>';" />
|
535 |
+
</p>
|
536 |
+
</form>
|
537 |
+
</div>
|
538 |
+
|
539 |
+
<?php } else { ?>
|
540 |
+
|
541 |
+
<h2>
|
542 |
+
Memberships Discount Codes
|
543 |
+
<a href="admin.php?page=pmpro-discountcodes&edit=-1" class="button add-new-h2">Add New Discount Code</a>
|
544 |
+
</h2>
|
545 |
+
|
546 |
+
<?php if(!empty($pmpro_msg)) { ?>
|
547 |
+
<div id="message" class="<?php if($pmpro_msgt == "success") echo "updated fade"; else echo "error"; ?>"><p><?php echo $pmpro_msg?></p></div>
|
548 |
+
<?php } ?>
|
549 |
+
|
550 |
+
<form id="posts-filter" method="get" action="">
|
551 |
+
<p class="search-box">
|
552 |
+
<label class="screen-reader-text" for="post-search-input">Search Discount Codes:</label>
|
553 |
+
<input type="hidden" name="page" value="pmpro-discountcodes" />
|
554 |
+
<input id="post-search-input" type="text" value="<?php if(!empty($s)) echo $s;?>" name="s" size="30" />
|
555 |
+
<input class="button" type="submit" value="Search" id="search-submit "/>
|
556 |
+
</p>
|
557 |
+
</form>
|
558 |
+
|
559 |
+
<br class="clear" />
|
560 |
+
|
561 |
+
<table class="widefat">
|
562 |
+
<thead>
|
563 |
+
<tr>
|
564 |
+
<th>ID</th>
|
565 |
+
<th>Code</th>
|
566 |
+
<th>Starts</th>
|
567 |
+
<th>Expires</th>
|
568 |
+
<th>Uses</th>
|
569 |
+
<th>Levels</th>
|
570 |
+
<th></th>
|
571 |
+
<th></th>
|
572 |
+
</tr>
|
573 |
+
</thead>
|
574 |
+
<tbody>
|
575 |
+
<?php
|
576 |
+
$sqlQuery = "SELECT *, UNIX_TIMESTAMP(starts) as starts, UNIX_TIMESTAMP(expires) as expires FROM $wpdb->pmpro_discount_codes ";
|
577 |
+
if(!empty($s))
|
578 |
+
$sqlQuery .= "WHERE code LIKE '%$s%' ";
|
579 |
+
$sqlQuery .= "ORDER BY id ASC";
|
580 |
+
|
581 |
+
$codes = $wpdb->get_results($sqlQuery, OBJECT);
|
582 |
+
|
583 |
+
if(!$codes)
|
584 |
+
{
|
585 |
+
?>
|
586 |
+
<tr><td colspan="7" class="pmpro_pad20">
|
587 |
+
<p>Discount codes allow you to offer your memberships at discounted prices to select customers. <a href="admin.php?page=pmpro-discountcodes&edit=-1">Create your first discount code now</a>.</p>
|
588 |
+
</td></tr>
|
589 |
+
<?php
|
590 |
+
}
|
591 |
+
else
|
592 |
+
{
|
593 |
+
foreach($codes as $code)
|
594 |
+
{
|
595 |
+
?>
|
596 |
+
<tr>
|
597 |
+
<td><?php echo $code->id?></td>
|
598 |
+
<td>
|
599 |
+
<a href="?page=pmpro-discountcodes&edit=<?php echo $code->id?>"><?php echo $code->code?></a>
|
600 |
+
</td>
|
601 |
+
<td>
|
602 |
+
<?php echo date(get_option('date_format'), $code->starts)?>
|
603 |
+
</td>
|
604 |
+
<td>
|
605 |
+
<?php echo date(get_option('date_format'), $code->expires)?>
|
606 |
+
</td>
|
607 |
+
<td>
|
608 |
+
<?php
|
609 |
+
$uses = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->pmpro_discount_codes_uses WHERE code_id = '" . $code->id . "'");
|
610 |
+
if($code->uses > 0)
|
611 |
+
echo "<strong>" . (int)$uses . "</strong>/" . $code->uses;
|
612 |
+
else
|
613 |
+
echo "<strong>" . (int)$uses . "</strong>/unlimited";
|
614 |
+
?>
|
615 |
+
</td>
|
616 |
+
<td>
|
617 |
+
<?php
|
618 |
+
$sqlQuery = "SELECT l.id, l.name FROM $wpdb->pmpro_membership_levels l LEFT JOIN $wpdb->pmpro_discount_codes_levels cl ON l.id = cl.level_id WHERE cl.code_id = '" . $code->id . "'";
|
619 |
+
$levels = $wpdb->get_results($sqlQuery);
|
620 |
+
|
621 |
+
$level_names = array();
|
622 |
+
foreach($levels as $level)
|
623 |
+
$level_names[] = "<a target=\"_blank\" href=\"" . pmpro_url("checkout", "?level=" . $level->id . "&discount_code=" . $code->code) . "\">" . $level->name . "</a>";
|
624 |
+
if($level_names)
|
625 |
+
echo implode(", ", $level_names);
|
626 |
+
else
|
627 |
+
echo "None";
|
628 |
+
?>
|
629 |
+
</td>
|
630 |
+
<td>
|
631 |
+
<a href="?page=pmpro-discountcodes&edit=<?php echo $code->id?>">edit</a>
|
632 |
+
</td>
|
633 |
+
<td>
|
634 |
+
<a href="javascript:askfirst('Are you sure you want to delete the <?php echo $code->code?> discount code? The subscriptions for existing users will not change, but new users will not be able to use this code anymore.', '?page=pmpro-discountcodes&delete=<?php echo $code->id?>'); void(0);">delete</a>
|
635 |
+
</td>
|
636 |
+
</tr>
|
637 |
+
<?php
|
638 |
+
}
|
639 |
+
}
|
640 |
+
?>
|
641 |
+
</tbody>
|
642 |
+
</table>
|
643 |
+
|
644 |
+
<?php } ?>
|
645 |
+
|
646 |
+
</div>
|
647 |
+
<?php
|
648 |
+
?>
|
adminpages/emailsettings.php
CHANGED
@@ -1,181 +1,152 @@
|
|
1 |
-
<?php
|
2 |
-
//only admins can get this
|
3 |
-
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_emailsettings")))
|
4 |
-
{
|
5 |
-
die(
|
6 |
-
}
|
7 |
-
|
8 |
-
global $wpdb, $msg, $msgt;
|
9 |
-
|
10 |
-
//get/set settings
|
11 |
-
global $pmpro_pages;
|
12 |
-
if(!empty($_REQUEST['savesettings']))
|
13 |
-
{
|
14 |
-
//email options
|
15 |
-
pmpro_setOption("from_email");
|
16 |
-
pmpro_setOption("from_name");
|
17 |
-
|
18 |
-
|
19 |
-
pmpro_setOption("
|
20 |
-
pmpro_setOption("
|
21 |
-
pmpro_setOption("
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
$
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
$
|
32 |
-
|
33 |
-
$
|
34 |
-
|
35 |
-
$
|
36 |
-
$
|
37 |
-
|
38 |
-
$
|
39 |
-
|
40 |
-
$
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
$
|
45 |
-
$
|
46 |
-
$
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
</
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
<
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
</td>
|
154 |
-
</tr>
|
155 |
-
</tbody>
|
156 |
-
</table>
|
157 |
-
|
158 |
-
<h3><?php _e('Send members emails', 'pmpro');?>:</h3>
|
159 |
-
|
160 |
-
<table class="form-table">
|
161 |
-
<tbody>
|
162 |
-
<tr>
|
163 |
-
<th scope="row" valign="top">
|
164 |
-
<label for="email_admin_checkout"><?php _e('New Users', 'pmpro');?>:</label>
|
165 |
-
</th>
|
166 |
-
<td>
|
167 |
-
<input type="checkbox" id="email_member_notification" name="email_member_notification" value="1" <?php if(!empty($email_member_notification)) { ?>checked="checked"<?php } ?> />
|
168 |
-
<?php _e('Default WP notification email. (Recommended: Leave unchecked. Members will still get an email confirmation from PMPro after checkout.)', 'pmpro');?>
|
169 |
-
</td>
|
170 |
-
</tr>
|
171 |
-
</tbody>
|
172 |
-
</table>
|
173 |
-
|
174 |
-
<p class="submit">
|
175 |
-
<input name="savesettings" type="submit" class="button-primary" value="Save Settings" />
|
176 |
-
</p>
|
177 |
-
</form>
|
178 |
-
|
179 |
-
<?php
|
180 |
-
require_once(dirname(__FILE__) . "/admin_footer.php");
|
181 |
-
?>
|
1 |
+
<?php
|
2 |
+
//only admins can get this
|
3 |
+
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_emailsettings")))
|
4 |
+
{
|
5 |
+
die("You do not have permissions to perform this action.");
|
6 |
+
}
|
7 |
+
|
8 |
+
global $wpdb, $msg, $msgt;
|
9 |
+
|
10 |
+
//get/set settings
|
11 |
+
global $pmpro_pages;
|
12 |
+
if(!empty($_REQUEST['savesettings']))
|
13 |
+
{
|
14 |
+
//email options
|
15 |
+
pmpro_setOption("from_email");
|
16 |
+
pmpro_setOption("from_name");
|
17 |
+
|
18 |
+
pmpro_setOption("email_admin_checkout");
|
19 |
+
pmpro_setOption("email_admin_changes");
|
20 |
+
pmpro_setOption("email_admin_cancels");
|
21 |
+
pmpro_setOption("email_admin_billing");
|
22 |
+
|
23 |
+
pmpro_setOption("email_member_notification");
|
24 |
+
|
25 |
+
//assume success
|
26 |
+
$msg = true;
|
27 |
+
$msgt = "Your email settings have been updated.";
|
28 |
+
}
|
29 |
+
|
30 |
+
$from_email = pmpro_getOption("from_email");
|
31 |
+
$from_name = pmpro_getOption("from_name");
|
32 |
+
|
33 |
+
$email_admin_checkout = pmpro_getOption("email_admin_checkout");
|
34 |
+
$email_admin_changes = pmpro_getOption("email_admin_changes");
|
35 |
+
$email_admin_cancels = pmpro_getOption("email_admin_cancels");
|
36 |
+
$email_admin_billing = pmpro_getOption("email_admin_billing");
|
37 |
+
|
38 |
+
$email_member_notification = pmpro_getOption("email_member_notification");
|
39 |
+
|
40 |
+
if(empty($from_email))
|
41 |
+
{
|
42 |
+
$parsed = parse_url(home_url());
|
43 |
+
$hostname = $parsed[host];
|
44 |
+
$hostparts = split("\.", $hostname);
|
45 |
+
$email_domain = $hostparts[count($hostparts) - 2] . "." . $hostparts[count($hostparts) - 1];
|
46 |
+
$from_email = "wordpress@" . $email_domain;
|
47 |
+
pmpro_setOption("from_email", $from_email);
|
48 |
+
}
|
49 |
+
|
50 |
+
if(empty($from_name))
|
51 |
+
{
|
52 |
+
$from_name = "WordPress";
|
53 |
+
pmpro_setOption("from_name", $from_name);
|
54 |
+
}
|
55 |
+
|
56 |
+
require_once(dirname(__FILE__) . "/admin_header.php");
|
57 |
+
?>
|
58 |
+
|
59 |
+
<form action="" method="post" enctype="multipart/form-data">
|
60 |
+
<h2>Email Settings</h2>
|
61 |
+
<p>By default, system generated emails are sent from <em><strong>wordpress@yourdomain.com</strong></em>. You can update this from address using the fields below.</p>
|
62 |
+
|
63 |
+
<p>To modify the appearance of system generated emails, add the files <em>email_header.html</em> and <em>email_footer.html</em> to your theme's directory. This will modify both the WordPress default messages as well as messages generated by Paid Memberships Pro. <a title="Paid Memberships Pro - Member Communications" target="_blank" href="http://www.paidmembershipspro.com/support/member-communications/">Click here to learn more about Paid Memberships Pro emails</a>.</p>
|
64 |
+
|
65 |
+
<table class="form-table">
|
66 |
+
<tbody>
|
67 |
+
<tr>
|
68 |
+
<th scope="row" valign="top">
|
69 |
+
<label for="from_email">From Email:</label>
|
70 |
+
</th>
|
71 |
+
<td>
|
72 |
+
<input type="text" name="from_email" size="60" value="<?php echo $from_email?>" />
|
73 |
+
</td>
|
74 |
+
</tr>
|
75 |
+
<tr>
|
76 |
+
<th scope="row" valign="top">
|
77 |
+
<label for="from_name">From Name:</label>
|
78 |
+
</th>
|
79 |
+
<td>
|
80 |
+
<input type="text" name="from_name" size="60" value="<?php echo $from_name?>" />
|
81 |
+
</td>
|
82 |
+
</tr>
|
83 |
+
</tbody>
|
84 |
+
</table>
|
85 |
+
|
86 |
+
<h3>Send the site admin emails:</h3>
|
87 |
+
|
88 |
+
<table class="form-table">
|
89 |
+
<tbody>
|
90 |
+
<tr>
|
91 |
+
<th scope="row" valign="top">
|
92 |
+
<label for="email_admin_checkout">Checkout:</label>
|
93 |
+
</th>
|
94 |
+
<td>
|
95 |
+
<input type="checkbox" id="email_admin_checkout" name="email_admin_checkout" value="1" <?php if(!empty($email_admin_checkout)) { ?>checked="checked"<?php } ?> />
|
96 |
+
when a member checks out.
|
97 |
+
</td>
|
98 |
+
</tr>
|
99 |
+
<tr>
|
100 |
+
<th scope="row" valign="top">
|
101 |
+
<label for="email_admin_changes">Admin Changes:</label>
|
102 |
+
</th>
|
103 |
+
<td>
|
104 |
+
<input type="checkbox" id="email_admin_changes" name="email_admin_changes" value="1" <?php if(!empty($email_admin_changes)) { ?>checked="checked"<?php } ?> />
|
105 |
+
when an admin changes a user's membership level through the dashboard.
|
106 |
+
</td>
|
107 |
+
</tr>
|
108 |
+
<tr>
|
109 |
+
<th scope="row" valign="top">
|
110 |
+
<label for="email_admin_cancels">Cancellation:</label>
|
111 |
+
</th>
|
112 |
+
<td>
|
113 |
+
<input type="checkbox" id="email_admin_cancels" name="email_admin_cancels" value="1" <?php if(!empty($email_admin_cancels)) { ?>checked="checked"<?php } ?> />
|
114 |
+
when a user cancel's his or her account.
|
115 |
+
</td>
|
116 |
+
</tr>
|
117 |
+
<tr>
|
118 |
+
<th scope="row" valign="top">
|
119 |
+
<label for="email_admin_billing">Bill Updates:</label>
|
120 |
+
</th>
|
121 |
+
<td>
|
122 |
+
<input type="checkbox" id="email_admin_billing" name="email_admin_billing" value="1" <?php if(!empty($email_admin_billing)) { ?>checked="checked"<?php } ?> />
|
123 |
+
when a user updates his or her billing information.
|
124 |
+
</td>
|
125 |
+
</tr>
|
126 |
+
</tbody>
|
127 |
+
</table>
|
128 |
+
|
129 |
+
<h3>Send members emails:</h3>
|
130 |
+
|
131 |
+
<table class="form-table">
|
132 |
+
<tbody>
|
133 |
+
<tr>
|
134 |
+
<th scope="row" valign="top">
|
135 |
+
<label for="email_admin_checkout">New Users:</label>
|
136 |
+
</th>
|
137 |
+
<td>
|
138 |
+
<input type="checkbox" id="email_member_notification" name="email_member_notification" value="1" <?php if(!empty($email_member_notification)) { ?>checked="checked"<?php } ?> />
|
139 |
+
Default WP notification email. (Recommended: Leave unchecked. Members will still get an email confirmation from PMPro after checkout.)
|
140 |
+
</td>
|
141 |
+
</tr>
|
142 |
+
</tbody>
|
143 |
+
</table>
|
144 |
+
|
145 |
+
<p class="submit">
|
146 |
+
<input name="savesettings" type="submit" class="button-primary" value="Save Settings" />
|
147 |
+
</p>
|
148 |
+
</form>
|
149 |
+
|
150 |
+
<?php
|
151 |
+
require_once(dirname(__FILE__) . "/admin_footer.php");
|
152 |
+
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/functions.php
DELETED
@@ -1,222 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/****************************************************************
|
3 |
-
|
4 |
-
IMPORTANT. PLEASE READ.
|
5 |
-
|
6 |
-
DO NOT EDIT THIS FILE or any other file in the /wp-content/plugins/paid-memberships-pro/ directory.
|
7 |
-
Doing so could break the PMPro plugin and/or keep you from upgrading this plugin in the future.
|
8 |
-
We regularly release updates to the plugin, including important security fixes and new features.
|
9 |
-
You want to be able to upgrade.
|
10 |
-
|
11 |
-
If you were asked to insert code into "your functions.php file", it was meant that you edit the functions.php
|
12 |
-
in the root folder of your active theme. e.g. /wp-content/themes/twentytwelve/functions.php
|
13 |
-
You can also create a custom plugin to place customization code into. Instructions are here:
|
14 |
-
http://www.paidmembershipspro.com/2012/08/create-a-plugin-for-pmpro-customizations/
|
15 |
-
|
16 |
-
Further documentation for customizing Paid Memberships Pro can be found here:
|
17 |
-
http://www.paidmembershipspro.com/documentation/
|
18 |
-
|
19 |
-
****************************************************************/
|
20 |
-
|
21 |
-
/*
|
22 |
-
Checks if PMPro settings are complete or if there are any errors.
|
23 |
-
*/
|
24 |
-
function pmpro_checkLevelForStripeCompatibility($level = NULL)
|
25 |
-
{
|
26 |
-
$gateway = pmpro_getOption("gateway");
|
27 |
-
if($gateway == "stripe")
|
28 |
-
{
|
29 |
-
global $wpdb;
|
30 |
-
|
31 |
-
//check ALL the levels
|
32 |
-
if(empty($level))
|
33 |
-
{
|
34 |
-
$sqlQuery = "SELECT * FROM $wpdb->pmpro_membership_levels ORDER BY id ASC";
|
35 |
-
$levels = $wpdb->get_results($sqlQuery, OBJECT);
|
36 |
-
if(!empty($levels))
|
37 |
-
{
|
38 |
-
foreach($levels as $level)
|
39 |
-
{
|
40 |
-
/*
|
41 |
-
Stripe currently does not support:
|
42 |
-
* Trial Amounts > 0.
|
43 |
-
* Daily billing periods.
|
44 |
-
* Billing Limits.
|
45 |
-
*/
|
46 |
-
if($level->trial_amount > 0 ||
|
47 |
-
($level->cycle_number > 0 && $level->cycle_period == "Day") ||
|
48 |
-
$level->billing_limit > 0)
|
49 |
-
{
|
50 |
-
return false;
|
51 |
-
}
|
52 |
-
}
|
53 |
-
}
|
54 |
-
}
|
55 |
-
else
|
56 |
-
{
|
57 |
-
//need to look it up?
|
58 |
-
if(is_numeric($level))
|
59 |
-
$level = $wpdb->get_row("SELECT * FROM $wpdb->pmpro_membership_levels WHERE id = '" . esc_sql($level) . "' LIMIT 1");
|
60 |
-
|
61 |
-
//check this level
|
62 |
-
if($level->trial_amount > 0 ||
|
63 |
-
($level->cycle_number > 0 && $level->cycle_period == "Day") ||
|
64 |
-
$level->billing_limit > 0)
|
65 |
-
{
|
66 |
-
return false;
|
67 |
-
}
|
68 |
-
}
|
69 |
-
}
|
70 |
-
|
71 |
-
return true;
|
72 |
-
}
|
73 |
-
|
74 |
-
/*
|
75 |
-
Checks if PMPro settings are complete or if there are any errors.
|
76 |
-
*/
|
77 |
-
function pmpro_checkLevelForPayflowCompatibility($level = NULL)
|
78 |
-
{
|
79 |
-
$gateway = pmpro_getOption("gateway");
|
80 |
-
if($gateway == "payflowpro")
|
81 |
-
{
|
82 |
-
global $wpdb;
|
83 |
-
|
84 |
-
//check ALL the levels
|
85 |
-
if(empty($level))
|
86 |
-
{
|
87 |
-
$sqlQuery = "SELECT * FROM $wpdb->pmpro_membership_levels ORDER BY id ASC";
|
88 |
-
$levels = $wpdb->get_results($sqlQuery, OBJECT);
|
89 |
-
if(!empty($levels))
|
90 |
-
{
|
91 |
-
foreach($levels as $level)
|
92 |
-
{
|
93 |
-
/*
|
94 |
-
Payflow currently does not support:
|
95 |
-
* Trial Amounts > 0.
|
96 |
-
* Daily billing periods.
|
97 |
-
*/
|
98 |
-
|
99 |
-
if($level->trial_amount > 0 ||
|
100 |
-
$level->cycle_number > 1 ||
|
101 |
-
($level->cycle_number == 1 && $level->cycle_period == "Day"))
|
102 |
-
{
|
103 |
-
return false;
|
104 |
-
}
|
105 |
-
}
|
106 |
-
}
|
107 |
-
}
|
108 |
-
else
|
109 |
-
{
|
110 |
-
//need to look it up?
|
111 |
-
if(is_numeric($level))
|
112 |
-
$level = $wpdb->get_row("SELECT * FROM $wpdb->pmpro_membership_levels WHERE id = '" . esc_sql($level) . "' LIMIT 1");
|
113 |
-
|
114 |
-
//check this level
|
115 |
-
if($level->trial_amount > 0 ||
|
116 |
-
$level->cycle_number > 1 ||
|
117 |
-
($level->cycle_number == 1 && $level->cycle_period == "Day"))
|
118 |
-
{
|
119 |
-
return false;
|
120 |
-
}
|
121 |
-
}
|
122 |
-
}
|
123 |
-
|
124 |
-
return true;
|
125 |
-
}
|
126 |
-
|
127 |
-
/*
|
128 |
-
Checks if PMPro settings are complete or if there are any errors.
|
129 |
-
*/
|
130 |
-
function pmpro_checkLevelForBraintreeCompatibility($level = NULL)
|
131 |
-
{
|
132 |
-
$gateway = pmpro_getOption("gateway");
|
133 |
-
if($gateway == "braintree")
|
134 |
-
{
|
135 |
-
global $wpdb;
|
136 |
-
|
137 |
-
//check ALL the levels
|
138 |
-
if(empty($level))
|
139 |
-
{
|
140 |
-
$sqlQuery = "SELECT * FROM $wpdb->pmpro_membership_levels ORDER BY id ASC";
|
141 |
-
$levels = $wpdb->get_results($sqlQuery, OBJECT);
|
142 |
-
if(!empty($levels))
|
143 |
-
{
|
144 |
-
foreach($levels as $level)
|
145 |
-
{
|
146 |
-
/*
|
147 |
-
Braintree currently does not support:
|
148 |
-
* Trial Amounts > 0.
|
149 |
-
* Daily or Weekly billing periods.
|
150 |
-
*/
|
151 |
-
if($level->trial_amount > 0 ||
|
152 |
-
($level->cycle_number > 0 && ($level->cycle_period == "Day" || $level->cycle_period == "Week")))
|
153 |
-
{
|
154 |
-
return false;
|
155 |
-
}
|
156 |
-
}
|
157 |
-
}
|
158 |
-
}
|
159 |
-
else
|
160 |
-
{
|
161 |
-
//need to look it up?
|
162 |
-
if(is_numeric($level))
|
163 |
-
$level = $wpdb->get_row("SELECT * FROM $wpdb->pmpro_membership_levels WHERE id = '" . esc_sql($level) . "' LIMIT 1");
|
164 |
-
|
165 |
-
//check this level
|
166 |
-
if($level->trial_amount > 0 ||
|
167 |
-
($level->cycle_number > 0 && ($level->cycle_period == "Day" || $level->cycle_period == "Week")))
|
168 |
-
{
|
169 |
-
return false;
|
170 |
-
}
|
171 |
-
}
|
172 |
-
}
|
173 |
-
|
174 |
-
return true;
|
175 |
-
}
|
176 |
-
|
177 |
-
/*
|
178 |
-
Checks if PMPro settings are complete or if there are any errors.
|
179 |
-
*/
|
180 |
-
function pmpro_checkLevelForTwoCheckoutCompatibility($level = NULL)
|
181 |
-
{
|
182 |
-
$gateway = pmpro_getOption("gateway");
|
183 |
-
if($gateway == "twocheckout")
|
184 |
-
{
|
185 |
-
global $wpdb;
|
186 |
-
|
187 |
-
//check ALL the levels
|
188 |
-
if(empty($level))
|
189 |
-
{
|
190 |
-
$sqlQuery = "SELECT * FROM $wpdb->pmpro_membership_levels ORDER BY id ASC";
|
191 |
-
$levels = $wpdb->get_results($sqlQuery, OBJECT);
|
192 |
-
if(!empty($levels))
|
193 |
-
{
|
194 |
-
foreach($levels as $level)
|
195 |
-
{
|
196 |
-
/*
|
197 |
-
2Checkout currently does not support:
|
198 |
-
* Trial amounts less than or greater than the absolute value of amonthly recurring amount.
|
199 |
-
*/
|
200 |
-
if(pmpro_isLevelTrial($level))
|
201 |
-
{
|
202 |
-
return false;
|
203 |
-
}
|
204 |
-
}
|
205 |
-
}
|
206 |
-
}
|
207 |
-
else
|
208 |
-
{
|
209 |
-
//need to look it up?
|
210 |
-
if(is_numeric($level))
|
211 |
-
$level = $wpdb->get_row("SELECT * FROM $wpdb->pmpro_membership_levels WHERE id = '" . esc_sql($level) . "' LIMIT 1");
|
212 |
-
|
213 |
-
//check this level
|
214 |
-
if(pmpro_isLevelTrial($level))
|
215 |
-
{
|
216 |
-
return false;
|
217 |
-
}
|
218 |
-
}
|
219 |
-
}
|
220 |
-
|
221 |
-
return true;
|
222 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/membershiplevels.php
CHANGED
@@ -1,588 +1,574 @@
|
|
1 |
-
<?php
|
2 |
-
//only admins can get this
|
3 |
-
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_membershiplevels")))
|
4 |
-
{
|
5 |
-
die(
|
6 |
-
}
|
7 |
-
|
8 |
-
global $wpdb, $msg, $msgt, $pmpro_currency_symbol;
|
9 |
-
|
10 |
-
//some vars
|
11 |
-
$gateway = pmpro_getOption("gateway");
|
12 |
-
global $pmpro_stripe_error, $pmpro_braintree_error, $
|
13 |
-
|
14 |
-
if(isset($_REQUEST['edit']))
|
15 |
-
$edit = $_REQUEST['edit'];
|
16 |
-
else
|
17 |
-
$edit = false;
|
18 |
-
if(isset($_REQUEST['copy']))
|
19 |
-
$copy = $_REQUEST['copy'];
|
20 |
-
if(isset($_REQUEST['s']))
|
21 |
-
$s = $_REQUEST['s'];
|
22 |
-
else
|
23 |
-
$s = "";
|
24 |
-
|
25 |
-
if(isset($_REQUEST['action']))
|
26 |
-
$action = $_REQUEST['action'];
|
27 |
-
else
|
28 |
-
$action = false;
|
29 |
-
|
30 |
-
if(isset($_REQUEST['saveandnext']))
|
31 |
-
$saveandnext = $_REQUEST['saveandnext'];
|
32 |
-
|
33 |
-
if(isset($_REQUEST['saveid']))
|
34 |
-
$saveid = $_REQUEST['saveid'];
|
35 |
-
if(isset($_REQUEST['deleteid']))
|
36 |
-
$deleteid = $_REQUEST['deleteid'];
|
37 |
-
|
38 |
-
if($action == "save_membershiplevel")
|
39 |
-
{
|
40 |
-
$ml_name = addslashes($_REQUEST['name']);
|
41 |
-
$ml_description = $_REQUEST['description'];
|
42 |
-
$ml_confirmation = $_REQUEST['confirmation'];
|
43 |
-
$ml_initial_payment = addslashes($_REQUEST['initial_payment']);
|
44 |
-
if(!empty($_REQUEST['recurring']))
|
45 |
-
$ml_recurring = 1;
|
46 |
-
else
|
47 |
-
$ml_recurring = 0;
|
48 |
-
$ml_billing_amount = addslashes($_REQUEST['billing_amount']);
|
49 |
-
$ml_cycle_number = addslashes($_REQUEST['cycle_number']);
|
50 |
-
$ml_cycle_period = addslashes($_REQUEST['cycle_period']);
|
51 |
-
$ml_billing_limit = addslashes($_REQUEST['billing_limit']);
|
52 |
-
if(!empty($_REQUEST['custom_trial']))
|
53 |
-
$ml_custom_trial = 1;
|
54 |
-
else
|
55 |
-
$ml_custom_trial = 0;
|
56 |
-
$ml_trial_amount = addslashes($_REQUEST['trial_amount']);
|
57 |
-
$ml_trial_limit = addslashes($_REQUEST['trial_limit']);
|
58 |
-
if(!empty($_REQUEST['expiration']))
|
59 |
-
$ml_expiration = 1;
|
60 |
-
else
|
61 |
-
$ml_expiration = 0;
|
62 |
-
$ml_expiration_number = addslashes($_REQUEST['expiration_number']);
|
63 |
-
$ml_expiration_period = addslashes($_REQUEST['expiration_period']);
|
64 |
-
$ml_categories = array();
|
65 |
-
|
66 |
-
//reversing disable to allow here
|
67 |
-
if(empty($_REQUEST['disable_signups']))
|
68 |
-
$ml_allow_signups = 1;
|
69 |
-
else
|
70 |
-
$ml_allow_signups = 0;
|
71 |
-
|
72 |
-
foreach ( $_REQUEST as $key => $value )
|
73 |
-
{
|
74 |
-
if ( $value == 'yes' && preg_match( '/^membershipcategory_(\d+)$/i', $key, $matches ) )
|
75 |
-
{
|
76 |
-
$ml_categories[] = $matches[1];
|
77 |
-
}
|
78 |
-
}
|
79 |
-
|
80 |
-
//clearing out values if checkboxes aren't checked
|
81 |
-
if(empty($ml_recurring))
|
82 |
-
{
|
83 |
-
$ml_billing_amount = $ml_cycle_number = $ml_cycle_period = $ml_billing_limit = $ml_trial_amount = $ml_trial_limit = 0;
|
84 |
-
}
|
85 |
-
elseif(empty($ml_custom_trial))
|
86 |
-
{
|
87 |
-
$ml_trial_amount = $ml_trial_limit = 0;
|
88 |
-
}
|
89 |
-
if(empty($ml_expiration))
|
90 |
-
{
|
91 |
-
$ml_expiration_number = $ml_expiration_period = 0;
|
92 |
-
}
|
93 |
-
|
94 |
-
if($saveid > 0)
|
95 |
-
{
|
96 |
-
$sqlQuery = " UPDATE {$wpdb->pmpro_membership_levels}
|
97 |
-
SET name = '" .
|
98 |
-
description = '" .
|
99 |
-
confirmation = '" .
|
100 |
-
initial_payment = '" .
|
101 |
-
billing_amount = '" .
|
102 |
-
cycle_number = '" .
|
103 |
-
cycle_period = '" .
|
104 |
-
billing_limit = '" .
|
105 |
-
trial_amount = '" .
|
106 |
-
trial_limit = '" .
|
107 |
-
expiration_number = '" .
|
108 |
-
expiration_period = '" .
|
109 |
-
allow_signups = '" .
|
110 |
-
WHERE id = '$saveid' LIMIT 1;";
|
111 |
-
$wpdb->query($sqlQuery);
|
112 |
-
|
113 |
-
pmpro_updateMembershipCategories( $saveid, $ml_categories );
|
114 |
-
if(!mysql_errno())
|
115 |
-
{
|
116 |
-
$edit = false;
|
117 |
-
$msg = 2;
|
118 |
-
$msgt =
|
119 |
-
}
|
120 |
-
else
|
121 |
-
{
|
122 |
-
$msg = -2;
|
123 |
-
$msg = true;
|
124 |
-
$msgt =
|
125 |
-
}
|
126 |
-
}
|
127 |
-
else
|
128 |
-
{
|
129 |
-
$sqlQuery = " INSERT INTO {$wpdb->pmpro_membership_levels}
|
130 |
-
( name, description, confirmation, initial_payment, billing_amount, cycle_number, cycle_period, billing_limit, trial_amount, trial_limit, expiration_number, expiration_period, allow_signups)
|
131 |
-
VALUES
|
132 |
-
( '" .
|
133 |
-
$wpdb->query($sqlQuery);
|
134 |
-
if(!mysql_errno())
|
135 |
-
{
|
136 |
-
$saveid = $wpdb->insert_id;
|
137 |
-
pmpro_updateMembershipCategories( $saveid, $ml_categories );
|
138 |
-
|
139 |
-
$edit = false;
|
140 |
-
$msg = 1;
|
141 |
-
$msgt =
|
142 |
-
}
|
143 |
-
else
|
144 |
-
{
|
145 |
-
$msg = -1;
|
146 |
-
$msgt =
|
147 |
-
}
|
148 |
-
}
|
149 |
-
|
150 |
-
do_action("pmpro_save_membership_level", $saveid);
|
151 |
-
}
|
152 |
-
elseif($action == "delete_membership_level")
|
153 |
-
{
|
154 |
-
global $wpdb;
|
155 |
-
|
156 |
-
$ml_id = $_REQUEST['deleteid'];
|
157 |
-
|
158 |
-
if($ml_id > 0)
|
159 |
-
{
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
$
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
$
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
$
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
$
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
echo
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
$level
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
$level =
|
250 |
-
$level->
|
251 |
-
$level->
|
252 |
-
$level->
|
253 |
-
$level->
|
254 |
-
$level->
|
255 |
-
$level->
|
256 |
-
$level->
|
257 |
-
$level->
|
258 |
-
$level->
|
259 |
-
$
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
<
|
282 |
-
<
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
</
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
echo "
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
<?php
|
366 |
-
<br /><strong <?php if(!empty($
|
367 |
-
<?php }
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
<?php
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
<
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
<
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
<
|
502 |
-
<
|
503 |
-
<
|
504 |
-
<
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
<
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
<?php
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
<?php
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
<?php } ?>
|
556 |
-
</td>
|
557 |
-
<td>
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
</tr>
|
576 |
-
<?php
|
577 |
-
}
|
578 |
-
?>
|
579 |
-
</tbody>
|
580 |
-
</table>
|
581 |
-
<?php
|
582 |
-
}
|
583 |
-
?>
|
584 |
-
|
585 |
-
<?php
|
586 |
-
require_once(dirname(__FILE__) . "/admin_footer.php");
|
587 |
-
?>
|
588 |
-
|
1 |
+
<?php
|
2 |
+
//only admins can get this
|
3 |
+
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_membershiplevels")))
|
4 |
+
{
|
5 |
+
die("You do not have permissions to perform this action.");
|
6 |
+
}
|
7 |
+
|
8 |
+
global $wpdb, $msg, $msgt, $pmpro_currency_symbol;
|
9 |
+
|
10 |
+
//some vars
|
11 |
+
$gateway = pmpro_getOption("gateway");
|
12 |
+
global $pmpro_stripe_error, $pmpro_braintree_error, $wp_version;
|
13 |
+
|
14 |
+
if(isset($_REQUEST['edit']))
|
15 |
+
$edit = $_REQUEST['edit'];
|
16 |
+
else
|
17 |
+
$edit = false;
|
18 |
+
if(isset($_REQUEST['copy']))
|
19 |
+
$copy = $_REQUEST['copy'];
|
20 |
+
if(isset($_REQUEST['s']))
|
21 |
+
$s = $_REQUEST['s'];
|
22 |
+
else
|
23 |
+
$s = "";
|
24 |
+
|
25 |
+
if(isset($_REQUEST['action']))
|
26 |
+
$action = $_REQUEST['action'];
|
27 |
+
else
|
28 |
+
$action = false;
|
29 |
+
|
30 |
+
if(isset($_REQUEST['saveandnext']))
|
31 |
+
$saveandnext = $_REQUEST['saveandnext'];
|
32 |
+
|
33 |
+
if(isset($_REQUEST['saveid']))
|
34 |
+
$saveid = $_REQUEST['saveid'];
|
35 |
+
if(isset($_REQUEST['deleteid']))
|
36 |
+
$deleteid = $_REQUEST['deleteid'];
|
37 |
+
|
38 |
+
if($action == "save_membershiplevel")
|
39 |
+
{
|
40 |
+
$ml_name = addslashes($_REQUEST['name']);
|
41 |
+
$ml_description = $_REQUEST['description'];
|
42 |
+
$ml_confirmation = $_REQUEST['confirmation'];
|
43 |
+
$ml_initial_payment = addslashes($_REQUEST['initial_payment']);
|
44 |
+
if(!empty($_REQUEST['recurring']))
|
45 |
+
$ml_recurring = 1;
|
46 |
+
else
|
47 |
+
$ml_recurring = 0;
|
48 |
+
$ml_billing_amount = addslashes($_REQUEST['billing_amount']);
|
49 |
+
$ml_cycle_number = addslashes($_REQUEST['cycle_number']);
|
50 |
+
$ml_cycle_period = addslashes($_REQUEST['cycle_period']);
|
51 |
+
$ml_billing_limit = addslashes($_REQUEST['billing_limit']);
|
52 |
+
if(!empty($_REQUEST['custom_trial']))
|
53 |
+
$ml_custom_trial = 1;
|
54 |
+
else
|
55 |
+
$ml_custom_trial = 0;
|
56 |
+
$ml_trial_amount = addslashes($_REQUEST['trial_amount']);
|
57 |
+
$ml_trial_limit = addslashes($_REQUEST['trial_limit']);
|
58 |
+
if(!empty($_REQUEST['expiration']))
|
59 |
+
$ml_expiration = 1;
|
60 |
+
else
|
61 |
+
$ml_expiration = 0;
|
62 |
+
$ml_expiration_number = addslashes($_REQUEST['expiration_number']);
|
63 |
+
$ml_expiration_period = addslashes($_REQUEST['expiration_period']);
|
64 |
+
$ml_categories = array();
|
65 |
+
|
66 |
+
//reversing disable to allow here
|
67 |
+
if(empty($_REQUEST['disable_signups']))
|
68 |
+
$ml_allow_signups = 1;
|
69 |
+
else
|
70 |
+
$ml_allow_signups = 0;
|
71 |
+
|
72 |
+
foreach ( $_REQUEST as $key => $value )
|
73 |
+
{
|
74 |
+
if ( $value == 'yes' && preg_match( '/^membershipcategory_(\d+)$/i', $key, $matches ) )
|
75 |
+
{
|
76 |
+
$ml_categories[] = $matches[1];
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
//clearing out values if checkboxes aren't checked
|
81 |
+
if(empty($ml_recurring))
|
82 |
+
{
|
83 |
+
$ml_billing_amount = $ml_cycle_number = $ml_cycle_period = $ml_billing_limit = $ml_trial_amount = $ml_trial_limit = 0;
|
84 |
+
}
|
85 |
+
elseif(empty($ml_custom_trial))
|
86 |
+
{
|
87 |
+
$ml_trial_amount = $ml_trial_limit = 0;
|
88 |
+
}
|
89 |
+
if(empty($ml_expiration))
|
90 |
+
{
|
91 |
+
$ml_expiration_number = $ml_expiration_period = 0;
|
92 |
+
}
|
93 |
+
|
94 |
+
if($saveid > 0)
|
95 |
+
{
|
96 |
+
$sqlQuery = " UPDATE {$wpdb->pmpro_membership_levels}
|
97 |
+
SET name = '" . $wpdb->escape($ml_name) . "',
|
98 |
+
description = '" . $wpdb->escape($ml_description) . "',
|
99 |
+
confirmation = '" . $wpdb->escape($ml_confirmation) . "',
|
100 |
+
initial_payment = '" . $wpdb->escape($ml_initial_payment) . "',
|
101 |
+
billing_amount = '" . $wpdb->escape($ml_billing_amount) . "',
|
102 |
+
cycle_number = '" . $wpdb->escape($ml_cycle_number) . "',
|
103 |
+
cycle_period = '" . $wpdb->escape($ml_cycle_period) . "',
|
104 |
+
billing_limit = '" . $wpdb->escape($ml_billing_limit) . "',
|
105 |
+
trial_amount = '" . $wpdb->escape($ml_trial_amount) . "',
|
106 |
+
trial_limit = '" . $wpdb->escape($ml_trial_limit) . "',
|
107 |
+
expiration_number = '" . $wpdb->escape($ml_expiration_number) . "',
|
108 |
+
expiration_period = '" . $wpdb->escape($ml_expiration_period) . "',
|
109 |
+
allow_signups = '" . $wpdb->escape($ml_allow_signups) . "'
|
110 |
+
WHERE id = '$saveid' LIMIT 1;";
|
111 |
+
$wpdb->query($sqlQuery);
|
112 |
+
|
113 |
+
pmpro_updateMembershipCategories( $saveid, $ml_categories );
|
114 |
+
if(!mysql_errno())
|
115 |
+
{
|
116 |
+
$edit = false;
|
117 |
+
$msg = 2;
|
118 |
+
$msgt = "Membership level updated successfully.";
|
119 |
+
}
|
120 |
+
else
|
121 |
+
{
|
122 |
+
$msg = -2;
|
123 |
+
$msg = true;
|
124 |
+
$msgt = "Error updating membership level.";
|
125 |
+
}
|
126 |
+
}
|
127 |
+
else
|
128 |
+
{
|
129 |
+
$sqlQuery = " INSERT INTO {$wpdb->pmpro_membership_levels}
|
130 |
+
( name, description, confirmation, initial_payment, billing_amount, cycle_number, cycle_period, billing_limit, trial_amount, trial_limit, expiration_number, expiration_period, allow_signups)
|
131 |
+
VALUES
|
132 |
+
( '" . $wpdb->escape($ml_name) . "', '" . $wpdb->escape($ml_description) . "', '" . $wpdb->escape($ml_confirmation) . "', '" . $wpdb->escape($ml_initial_payment) . "', '" . $wpdb->escape($ml_billing_amount) . "', '" . $wpdb->escape($ml_cycle_number) . "', '" . $wpdb->escape($ml_cycle_period) . "', '" . $wpdb->escape($ml_billing_limit) . "', '" . $wpdb->escape($ml_trial_amount) . "', '" . $wpdb->escape($ml_trial_limit) . "', '" . $wpdb->escape($ml_expiration_number) . "', '" . $wpdb->escape($ml_expiration_period) . "', '" . $wpdb->escape($ml_allow_signups) . "' )";
|
133 |
+
$wpdb->query($sqlQuery);
|
134 |
+
if(!mysql_errno())
|
135 |
+
{
|
136 |
+
$saveid = $wpdb->insert_id;
|
137 |
+
pmpro_updateMembershipCategories( $saveid, $ml_categories );
|
138 |
+
|
139 |
+
$edit = false;
|
140 |
+
$msg = 1;
|
141 |
+
$msgt = "Membership level added successfully.";
|
142 |
+
}
|
143 |
+
else
|
144 |
+
{
|
145 |
+
$msg = -1;
|
146 |
+
$msgt = "Error adding membership level.";
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
do_action("pmpro_save_membership_level", $saveid);
|
151 |
+
}
|
152 |
+
elseif($action == "delete_membership_level")
|
153 |
+
{
|
154 |
+
global $wpdb;
|
155 |
+
|
156 |
+
$ml_id = $_REQUEST['deleteid'];
|
157 |
+
|
158 |
+
if($ml_id > 0)
|
159 |
+
{
|
160 |
+
//remove any categories from the ml
|
161 |
+
$sqlQuery = "DELETE FROM $wpdb->pmpro_memberships_categories WHERE membership_id = '$ml_id'";
|
162 |
+
$r1 = $wpdb->query($sqlQuery);
|
163 |
+
|
164 |
+
//cancel any subscriptions to the ml
|
165 |
+
$r2 = true;
|
166 |
+
$user_ids = $wpdb->get_col("SELECT user_id FROM $wpdb->pmpro_memberships_users WHERE membership_id = '$ml_id'");
|
167 |
+
foreach($user_ids as $user_id)
|
168 |
+
{
|
169 |
+
//change there membership level to none. that will handle the cancel
|
170 |
+
if(pmpro_changeMembershipLevel(0, $user_id))
|
171 |
+
{
|
172 |
+
//okay
|
173 |
+
}
|
174 |
+
else
|
175 |
+
{
|
176 |
+
//couldn't delete the subscription
|
177 |
+
//we should probably notify the admin
|
178 |
+
$pmproemail = new PMProEmail();
|
179 |
+
$pmproemail->data = array("body"=>"<p>There was an error canceling the subscription for user with ID=" . $user_id . ". You will want to check your payment gateway to see if their subscription is still active.</p>");
|
180 |
+
$last_order = $wpdb->get_row("SELECT * FROM $wpdb->pmpro_membership_orders WHERE user_id = '" . $user_id . "' ORDER BY timestamp DESC LIMIT 1");
|
181 |
+
if($last_order)
|
182 |
+
$pmproemail->data["body"] .= "<p>Last Invoice:<br />" . nl2br(var_export($last_order, true)) . "</p>";
|
183 |
+
$pmproemail->sendEmail(get_bloginfo("admin_email"));
|
184 |
+
|
185 |
+
$r2 = false;
|
186 |
+
}
|
187 |
+
}
|
188 |
+
|
189 |
+
//delete the ml
|
190 |
+
$sqlQuery = "DELETE FROM $wpdb->pmpro_membership_levels WHERE id = '$ml_id' LIMIT 1";
|
191 |
+
$r3 = $wpdb->query($sqlQuery);
|
192 |
+
|
193 |
+
if($r1 !== FALSE && $r2 !== FALSE && $r3 !== FALSE)
|
194 |
+
{
|
195 |
+
$msg = 3;
|
196 |
+
$msgt = "Membership level deleted successfully.";
|
197 |
+
}
|
198 |
+
else
|
199 |
+
{
|
200 |
+
$msg = -3;
|
201 |
+
$msgt = "Error deleting membership level.";
|
202 |
+
}
|
203 |
+
}
|
204 |
+
else
|
205 |
+
{
|
206 |
+
$msg = -3;
|
207 |
+
$msgt = "Error deleting membership level.";
|
208 |
+
}
|
209 |
+
}
|
210 |
+
|
211 |
+
require_once(dirname(__FILE__) . "/admin_header.php");
|
212 |
+
?>
|
213 |
+
|
214 |
+
<?php
|
215 |
+
if($edit)
|
216 |
+
{
|
217 |
+
?>
|
218 |
+
|
219 |
+
<h2>
|
220 |
+
<?php
|
221 |
+
if($edit > 0)
|
222 |
+
echo "Edit Membership Level";
|
223 |
+
else
|
224 |
+
echo "Add New Membership Level";
|
225 |
+
?>
|
226 |
+
</h2>
|
227 |
+
|
228 |
+
<div>
|
229 |
+
<?php
|
230 |
+
// get the level...
|
231 |
+
if(!empty($edit) && $edit > 0)
|
232 |
+
{
|
233 |
+
$level = $wpdb->get_row("SELECT * FROM $wpdb->pmpro_membership_levels WHERE id = '$edit' LIMIT 1", OBJECT);
|
234 |
+
$temp_id = $level->id;
|
235 |
+
}
|
236 |
+
elseif(!empty($copy) && $copy > 0)
|
237 |
+
{
|
238 |
+
$level = $wpdb->get_row("SELECT * FROM $wpdb->pmpro_membership_levels WHERE id = '$copy' LIMIT 1", OBJECT);
|
239 |
+
$temp_id = $level->id;
|
240 |
+
$level->id = NULL;
|
241 |
+
}
|
242 |
+
else
|
243 |
+
|
244 |
+
// didn't find a membership level, let's add a new one...
|
245 |
+
if(empty($level))
|
246 |
+
{
|
247 |
+
$level = new stdClass();
|
248 |
+
$level->id = NULL;
|
249 |
+
$level->name = NULL;
|
250 |
+
$level->description = NULL;
|
251 |
+
$level->confirmation = NULL;
|
252 |
+
$level->billing_amount = NULL;
|
253 |
+
$level->trial_amount = NULL;
|
254 |
+
$level->initial_payment = NULL;
|
255 |
+
$level->billing_limit = NULL;
|
256 |
+
$level->trial_limit = NULL;
|
257 |
+
$level->expiration_number = NULL;
|
258 |
+
$level->expiration_period = NULL;
|
259 |
+
$edit = -1;
|
260 |
+
}
|
261 |
+
|
262 |
+
//defaults for new levels
|
263 |
+
if(empty($copy) && $edit == -1)
|
264 |
+
{
|
265 |
+
$level->cycle_number = 1;
|
266 |
+
$level->cycle_period = "Month";
|
267 |
+
}
|
268 |
+
|
269 |
+
// grab the categories for the given level...
|
270 |
+
if(!empty($temp_id))
|
271 |
+
$level->categories = $wpdb->get_col("SELECT c.category_id
|
272 |
+
FROM $wpdb->pmpro_memberships_categories c
|
273 |
+
WHERE c.membership_id = '" . $temp_id . "'");
|
274 |
+
if(empty($level->categories))
|
275 |
+
$level->categories = array();
|
276 |
+
|
277 |
+
?>
|
278 |
+
<form action="" method="post" enctype="multipart/form-data">
|
279 |
+
<input name="saveid" type="hidden" value="<?php echo $edit?>" />
|
280 |
+
<input type="hidden" name="action" value="save_membershiplevel" />
|
281 |
+
<table class="form-table">
|
282 |
+
<tbody>
|
283 |
+
<tr>
|
284 |
+
<th scope="row" valign="top"><label>ID:</label></th>
|
285 |
+
<td>
|
286 |
+
<?php echo $level->id?>
|
287 |
+
</td>
|
288 |
+
</tr>
|
289 |
+
|
290 |
+
<tr>
|
291 |
+
<th scope="row" valign="top"><label for="name">Name:</label></th>
|
292 |
+
<td><input name="name" type="text" size="50" value="<?php echo str_replace("\"", """, stripslashes($level->name))?>" /></td>
|
293 |
+
</tr>
|
294 |
+
|
295 |
+
<tr>
|
296 |
+
<th scope="row" valign="top"><label for="description">Description:</label></th>
|
297 |
+
<td>
|
298 |
+
<div id="poststuff" class="pmpro_description">
|
299 |
+
<?php
|
300 |
+
if(version_compare($wp_version, "3.3") >= 0)
|
301 |
+
wp_editor(stripslashes($level->description), "description", array("textarea_rows"=>5));
|
302 |
+
else
|
303 |
+
{
|
304 |
+
?>
|
305 |
+
<textarea rows="10" cols="80" name="description" id="description"><?php echo stripslashes($level->description)?></textarea>
|
306 |
+
<?php
|
307 |
+
}
|
308 |
+
?>
|
309 |
+
</div>
|
310 |
+
</td>
|
311 |
+
</tr>
|
312 |
+
|
313 |
+
<tr>
|
314 |
+
<th scope="row" valign="top"><label for="confirmation">Confirmation Message:</label></th>
|
315 |
+
<td>
|
316 |
+
<div class="pmpro_confirmation">
|
317 |
+
<?php
|
318 |
+
if(version_compare($wp_version, "3.3") >= 0)
|
319 |
+
wp_editor(stripslashes($level->confirmation), "confirmation", array("textarea_rows"=>5));
|
320 |
+
else
|
321 |
+
{
|
322 |
+
?>
|
323 |
+
<textarea rows="10" cols="80" name="confirmation" id="confirmation"><?php echo stripslashes($level->confirmation)?></textarea>
|
324 |
+
<?php
|
325 |
+
}
|
326 |
+
?>
|
327 |
+
</div>
|
328 |
+
</td>
|
329 |
+
</tr>
|
330 |
+
</tbody>
|
331 |
+
</table>
|
332 |
+
|
333 |
+
<h3 class="topborder">Billing Details</h3>
|
334 |
+
<table class="form-table">
|
335 |
+
<tbody>
|
336 |
+
<tr>
|
337 |
+
<th scope="row" valign="top"><label for="initial_payment">Initial Payment:</label></th>
|
338 |
+
<td><?php echo $pmpro_currency_symbol?><input name="initial_payment" type="text" size="20" value="<?php echo str_replace("\"", """, stripslashes($level->initial_payment))?>" /> <small>The initial amount collected at registration.</small></td>
|
339 |
+
</tr>
|
340 |
+
|
341 |
+
<tr>
|
342 |
+
<th scope="row" valign="top"><label>Recurring Subscription:</label></th>
|
343 |
+
<td><input id="recurring" name="recurring" type="checkbox" value="yes" <?php if(pmpro_isLevelRecurring($level)) { echo "checked='checked'"; } ?> onclick="if(jQuery('#recurring').is(':checked')) { jQuery('.recurring_info').show(); if(jQuery('#custom_trial').is(':checked')) {jQuery('.trial_info').show();} else {jQuery('.trial_info').hide();} } else { jQuery('.recurring_info').hide();}" /> <small>Check if this level has a recurring subscription payment.</small></td>
|
344 |
+
</tr>
|
345 |
+
|
346 |
+
<tr class="recurring_info" <?php if(!pmpro_isLevelRecurring($level)) {?>style="display: none;"<?php } ?>>
|
347 |
+
<th scope="row" valign="top"><label for="billing_amount">Billing Amount:</label></th>
|
348 |
+
<td>
|
349 |
+
<?php echo $pmpro_currency_symbol?><input name="billing_amount" type="text" size="20" value="<?php echo str_replace("\"", """, stripslashes($level->billing_amount))?>" /> <small>per</small>
|
350 |
+
<input id="cycle_number" name="cycle_number" type="text" size="10" value="<?php echo str_replace("\"", """, stripslashes($level->cycle_number))?>" />
|
351 |
+
<select id="cycle_period" name="cycle_period">
|
352 |
+
<?php
|
353 |
+
$cycles = array( 'Day(s)' => 'Day', 'Week(s)' => 'Week', 'Month(s)' => 'Month', 'Year(s)' => 'Year' );
|
354 |
+
foreach ( $cycles as $name => $value ) {
|
355 |
+
echo "<option value='$value'";
|
356 |
+
if ( $level->cycle_period == $value ) echo " selected='selected'";
|
357 |
+
echo ">$name</option>";
|
358 |
+
}
|
359 |
+
?>
|
360 |
+
</select>
|
361 |
+
<br /><small>
|
362 |
+
The amount to be billed one cycle after the initial payment.
|
363 |
+
<?php if($gateway == "stripe") { ?>
|
364 |
+
<br /><strong <?php if(!empty($pmpro_stripe_error)) { ?>class="pmpro_red"<?php } ?>>Stripe integration currently only supports billing periods of "Month" or "Year".
|
365 |
+
<?php } elseif($gateway == "braintree") { ?>
|
366 |
+
<br /><strong <?php if(!empty($pmpro_braintree_error)) { ?>class="pmpro_red"<?php } ?>>Braintree integration currently only supports billing periods of "Month" or "Year".
|
367 |
+
<?php } ?>
|
368 |
+
</small>
|
369 |
+
<?php if($gateway == "braintree" && $edit < 0) { ?>
|
370 |
+
<p class="pmpro_message"><strong>Note:</strong> After saving this level, make note of the ID and create a "Plan" in your Braintree dashboard with the same settings and the "Plan ID" set to <em>pmpro_#</em>, where # is the level ID.</p>
|
371 |
+
<?php } elseif($gateway == "braintree") { ?>
|
372 |
+
<p class="pmpro_message"><strong>Note:</strong> You will need to create a "Plan" in your Braintree dashboard with the same settings and the "Plan ID" set to <em>pmpro_<?php echo $level->id;?></em>.</p>
|
373 |
+
<?php } ?>
|
374 |
+
</td>
|
375 |
+
</tr>
|
376 |
+
|
377 |
+
<tr class="recurring_info" <?php if(!pmpro_isLevelRecurring($level)) {?>style="display: none;"<?php } ?>>
|
378 |
+
<th scope="row" valign="top"><label for="billing_limit">Billing Cycle Limit:</label></th>
|
379 |
+
<td>
|
380 |
+
<input name="billing_limit" type="text" size="20" value="<?php echo $level->billing_limit?>" />
|
381 |
+
<br /><small>
|
382 |
+
The <strong>total</strong> number of recurring billing cycles for this level, including the trial period (if applicable) but not including the initial payment. Set to zero if membership is indefinite.
|
383 |
+
<?php if($gateway == "stripe") { ?>
|
384 |
+
<br /><strong <?php if(!empty($pmpro_stripe_error)) { ?>class="pmpro_red"<?php } ?>>Stripe integration currently does not support billing limits. You can still set an expiration date below.</strong>
|
385 |
+
<?php } ?>
|
386 |
+
</small>
|
387 |
+
</td>
|
388 |
+
</tr>
|
389 |
+
|
390 |
+
<tr class="recurring_info" <?php if (!pmpro_isLevelRecurring($level)) echo "style='display:none;'";?>>
|
391 |
+
<th scope="row" valign="top"><label>Custom Trial:</label></th>
|
392 |
+
<td><input id="custom_trial" name="custom_trial" type="checkbox" value="yes" <?php if ( pmpro_isLevelTrial($level) ) { echo "checked='checked'"; } ?> onclick="jQuery('.trial_info').toggle();" /> Check to add a custom trial period.</td>
|
393 |
+
</tr>
|
394 |
+
|
395 |
+
<tr class="trial_info recurring_info" <?php if (!pmpro_isLevelTrial($level)) echo "style='display:none;'";?>>
|
396 |
+
<th scope="row" valign="top"><label for="trial_amount">Trial Billing Amount:</label></th>
|
397 |
+
<td>
|
398 |
+
<?php echo $pmpro_currency_symbol?><input name="trial_amount" type="text" size="20" value="<?php echo str_replace("\"", """, stripslashes($level->trial_amount))?>" />
|
399 |
+
<small>for the first</small>
|
400 |
+
<input name="trial_limit" type="text" size="10" value="<?php echo str_replace("\"", """, stripslashes($level->trial_limit))?>" />
|
401 |
+
<small>subscription payments.</small>
|
402 |
+
<?php if($gateway == "stripe") { ?>
|
403 |
+
<br /><small>
|
404 |
+
<strong <?php if(!empty($pmpro_stripe_error)) { ?>class="pmpro_red"<?php } ?>>Stripe integration currently does not support trial amounts greater than $0.</strong>
|
405 |
+
</small>
|
406 |
+
<?php } elseif($gateway == "braintree") { ?>
|
407 |
+
<br /><small>
|
408 |
+
<strong <?php if(!empty($pmpro_braintree_error)) { ?>class="pmpro_red"<?php } ?>>Braintree integration currently does not support trial amounts greater than $0.</strong>
|
409 |
+
</small>
|
410 |
+
<?php } ?>
|
411 |
+
</td>
|
412 |
+
</tr>
|
413 |
+
|
414 |
+
</tbody>
|
415 |
+
</table>
|
416 |
+
<h3 class="topborder">Other Settings</h3>
|
417 |
+
<table class="form-table">
|
418 |
+
<tbody>
|
419 |
+
<tr>
|
420 |
+
<th scope="row" valign="top"><label>Disable New Signups:</label></th>
|
421 |
+
<td><input name="disable_signups" type="checkbox" value="yes" <?php if($level->id && !$level->allow_signups) { ?>checked="checked"<?php } ?> /> Check to hide this level from the membership levels page and disable registration.</td>
|
422 |
+
</tr>
|
423 |
+
|
424 |
+
<tr>
|
425 |
+
<th scope="row" valign="top"><label>Membership Expiration:</label></th>
|
426 |
+
<td><input id="expiration" name="expiration" type="checkbox" value="yes" <?php if(pmpro_isLevelExpiring($level)) { echo "checked='checked'"; } ?> onclick="if(jQuery('#expiration').is(':checked')) { jQuery('.expiration_info').show(); } else { jQuery('.expiration_info').hide();}" /> Check this to set an expiration date for new sign ups.</td>
|
427 |
+
</tr>
|
428 |
+
|
429 |
+
<tr class="expiration_info" <?php if(!pmpro_isLevelExpiring($level)) {?>style="display: none;"<?php } ?>>
|
430 |
+
<th scope="row" valign="top"><label for="billing_amount">Expires In:</label></th>
|
431 |
+
<td>
|
432 |
+
<input id="expiration_number" name="expiration_number" type="text" size="10" value="<?php echo str_replace("\"", """, stripslashes($level->expiration_number))?>" />
|
433 |
+
<select id="expiration_period" name="expiration_period">
|
434 |
+
<?php
|
435 |
+
$cycles = array( 'Day(s)' => 'Day', 'Week(s)' => 'Week', 'Month(s)' => 'Month', 'Year(s)' => 'Year' );
|
436 |
+
foreach ( $cycles as $name => $value ) {
|
437 |
+
echo "<option value='$value'";
|
438 |
+
if ( $level->expiration_period == $value ) echo " selected='selected'";
|
439 |
+
echo ">$name</option>";
|
440 |
+
}
|
441 |
+
?>
|
442 |
+
</select>
|
443 |
+
<br /><small>How long before the expiration expires. Note that any future payments will be canceled when the membership expires.</small>
|
444 |
+
</td>
|
445 |
+
</tr>
|
446 |
+
</tbody>
|
447 |
+
</table>
|
448 |
+
|
449 |
+
<?php do_action("pmpro_membership_level_after_other_settings"); ?>
|
450 |
+
|
451 |
+
<h3 class="topborder">Content Settings</h3>
|
452 |
+
<table class="form-table">
|
453 |
+
<tbody>
|
454 |
+
<tr>
|
455 |
+
<th scope="row" valign="top"><label>Categories:</label></th>
|
456 |
+
<td>
|
457 |
+
<?php
|
458 |
+
$categories = get_categories( array( 'hide_empty' => 0 ) );
|
459 |
+
echo "<ul>";
|
460 |
+
foreach ( $categories as $cat )
|
461 |
+
{
|
462 |
+
$checked = in_array( $cat->term_id, $level->categories ) ? "checked='checked'" : '';
|
463 |
+
echo "<li><input name='membershipcategory_{$cat->term_id}' type='checkbox' value='yes' $checked /> {$cat->name}</li>\n";
|
464 |
+
}
|
465 |
+
echo "</ul>";
|
466 |
+
?>
|
467 |
+
</td>
|
468 |
+
</tr>
|
469 |
+
</tbody>
|
470 |
+
</table>
|
471 |
+
<p class="submit topborder">
|
472 |
+
<input name="save" type="submit" class="button-primary" value="Save Level" />
|
473 |
+
<input name="cancel" type="button" value="Cancel" onclick="location.href='<?php echo get_admin_url(NULL, '/admin.php?page=pmpro-membershiplevels')?>';" />
|
474 |
+
</p>
|
475 |
+
</form>
|
476 |
+
</div>
|
477 |
+
|
478 |
+
<?php
|
479 |
+
}
|
480 |
+
else
|
481 |
+
{
|
482 |
+
?>
|
483 |
+
|
484 |
+
<h2>Membership Levels <a href="admin.php?page=pmpro-membershiplevels&edit=-1" class="button add-new-h2">Add New Level</a></h2>
|
485 |
+
<form id="posts-filter" method="get" action="">
|
486 |
+
<p class="search-box">
|
487 |
+
<label class="screen-reader-text" for="post-search-input">Search Levels:</label>
|
488 |
+
<input type="hidden" name="page" value="pmpro-membershiplevels" />
|
489 |
+
<input id="post-search-input" type="text" value="<?php echo $s?>" name="s" size="30" />
|
490 |
+
<input class="button" type="submit" value="Search Levels" id="search-submit "/>
|
491 |
+
</p>
|
492 |
+
</form>
|
493 |
+
|
494 |
+
<br class="clear" />
|
495 |
+
|
496 |
+
<table class="widefat">
|
497 |
+
<thead>
|
498 |
+
<tr>
|
499 |
+
<th>ID</th>
|
500 |
+
<th>Name</th>
|
501 |
+
<th>Initial Payment</th>
|
502 |
+
<th>Billing Cycle</th>
|
503 |
+
<th>Trial Cycle</th>
|
504 |
+
<th>Expiration</th>
|
505 |
+
<th>Allow Signups</th>
|
506 |
+
<th></th>
|
507 |
+
<th></th>
|
508 |
+
<th></th>
|
509 |
+
</tr>
|
510 |
+
</thead>
|
511 |
+
<tbody>
|
512 |
+
<?php
|
513 |
+
$sqlQuery = "SELECT * FROM $wpdb->pmpro_membership_levels ";
|
514 |
+
if($s)
|
515 |
+
$sqlQuery .= "WHERE name LIKE '%$s%' ";
|
516 |
+
$sqlQuery .= "ORDER BY id ASC";
|
517 |
+
|
518 |
+
$levels = $wpdb->get_results($sqlQuery, OBJECT);
|
519 |
+
|
520 |
+
foreach($levels as $level)
|
521 |
+
{
|
522 |
+
?>
|
523 |
+
<tr class="<?php if(!$level->allow_signups) { ?>pmpro_gray<?php } ?> <?php if(!pmpro_checkLevelForStripeCompatibility($level) || !pmpro_checkLevelForBraintreeCompatibility($level)) { ?>pmpro_error<?php } ?>">
|
524 |
+
<td><?php echo $level->id?></td>
|
525 |
+
<td><?php echo $level->name?></td>
|
526 |
+
<td>
|
527 |
+
<?php if(pmpro_isLevelFree($level)) { ?>
|
528 |
+
FREE
|
529 |
+
<?php } else { ?>
|
530 |
+
<?php echo $pmpro_currency_symbol?><?php echo $level->initial_payment?>
|
531 |
+
<?php } ?>
|
532 |
+
</td>
|
533 |
+
<td>
|
534 |
+
<?php if(!pmpro_isLevelRecurring($level)) { ?>
|
535 |
+
--
|
536 |
+
<?php } else { ?>
|
537 |
+
<?php echo $pmpro_currency_symbol?><?php echo $level->billing_amount?> every <?php echo $level->cycle_number.' '.sornot($level->cycle_period,$level->cycle_number)?>
|
538 |
+
|
539 |
+
<?php if($level->billing_limit) { ?>(for <?php echo $level->billing_limit?> <?php echo sornot($level->cycle_period,$level->billing_limit)?>)<?php } ?>
|
540 |
+
|
541 |
+
<?php } ?>
|
542 |
+
</td>
|
543 |
+
<td>
|
544 |
+
<?php if(!pmpro_isLevelTrial($level)) { ?>
|
545 |
+
--
|
546 |
+
<?php } else { ?>
|
547 |
+
<?php echo $pmpro_currency_symbol?><?php echo $level->trial_amount?> for <?php echo $level->trial_limit?> <?php echo sornot("payment",$level->trial_limit)?>
|
548 |
+
<?php } ?>
|
549 |
+
</td>
|
550 |
+
<td>
|
551 |
+
<?php if(!pmpro_isLevelExpiring($level)) { ?>
|
552 |
+
--
|
553 |
+
<?php } else { ?>
|
554 |
+
After <?php echo $level->expiration_number?> <?php echo sornot($level->expiration_period,$level->expiration_number)?>
|
555 |
+
<?php } ?>
|
556 |
+
</td>
|
557 |
+
<td><?php if($level->allow_signups) { ?>Yes<?php } else { ?>No<?php } ?></td>
|
558 |
+
<td align="center"><a href="admin.php?page=pmpro-membershiplevels&edit=<?php echo $level->id?>" class="edit">edit</a></td>
|
559 |
+
<td align="center"><a href="admin.php?page=pmpro-membershiplevels©=<?php echo $level->id?>&edit=-1" class="edit">copy</a></td>
|
560 |
+
<td align="center"><a href="javascript: askfirst('Are you sure you want to delete membership level <?php echo $level->name?>? All subscriptions will be canceled.','admin.php?page=pmpro-membershiplevels&action=delete_membership_level&deleteid=<?php echo $level->id?>'); void(0);" class="delete">delete</a></td>
|
561 |
+
</tr>
|
562 |
+
<?php
|
563 |
+
}
|
564 |
+
?>
|
565 |
+
</tbody>
|
566 |
+
</table>
|
567 |
+
<?php
|
568 |
+
}
|
569 |
+
?>
|
570 |
+
|
571 |
+
<?php
|
572 |
+
require_once(dirname(__FILE__) . "/admin_footer.php");
|
573 |
+
?>
|
574 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/memberslist-csv.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
//only admins can get this
|
3 |
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_memberslist_csv")))
|
4 |
{
|
5 |
-
die(
|
6 |
}
|
7 |
|
8 |
global $wpdb;
|
@@ -42,85 +42,26 @@
|
|
42 |
|
43 |
if($s)
|
44 |
{
|
45 |
-
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS u.ID, u.user_login, u.user_email, UNIX_TIMESTAMP(u.user_registered) as joindate, u.user_login, u.user_nicename, u.user_url, u.user_registered, u.user_status, u.display_name, mu.membership_id, mu.initial_payment, mu.billing_amount, mu.cycle_period, UNIX_TIMESTAMP(mu.enddate) as enddate, m.name as membership FROM $wpdb->users u LEFT JOIN $wpdb->usermeta um ON u.ID = um.user_id LEFT JOIN $wpdb->pmpro_memberships_users mu ON u.ID = mu.user_id LEFT JOIN $wpdb->pmpro_membership_levels m ON mu.membership_id = m.id ";
|
46 |
-
|
47 |
-
if($l == "oldmembers")
|
48 |
-
$sqlQuery .= " LEFT JOIN $wpdb->pmpro_memberships_users mu2 ON u.ID = mu2.user_id AND mu2.status = 'active' ";
|
49 |
-
|
50 |
-
$sqlQuery .= " WHERE mu.membership_id > 0 AND (u.user_login LIKE '%" . esc_sql($s) . "%' OR u.user_email LIKE '%" . esc_sql($s) . "%' OR um.meta_value LIKE '%" . esc_sql($s) . "%') ";
|
51 |
|
52 |
-
if($l
|
53 |
-
$sqlQuery .= " AND mu.
|
54 |
-
elseif($l)
|
55 |
-
$sqlQuery .= " AND mu.status = 'active' AND mu.membership_id = '" . esc_sql($l) . "' ";
|
56 |
-
else
|
57 |
-
$sqlQuery .= " AND mu.status = 'active' ";
|
58 |
|
59 |
-
$sqlQuery .= "GROUP BY u.ID ";
|
60 |
-
|
61 |
-
if($l == "oldmembers")
|
62 |
-
$sqlQuery .= "ORDER BY enddate DESC ";
|
63 |
-
else
|
64 |
-
$sqlQuery .= "ORDER BY u.user_registered DESC ";
|
65 |
-
|
66 |
-
if($limit)
|
67 |
-
$sqlQuery .= "LIMIT $start, $limit";
|
68 |
}
|
69 |
else
|
70 |
{
|
71 |
-
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS u.ID, UNIX_TIMESTAMP(mu.enddate) as enddate FROM $wpdb->users u LEFT JOIN $wpdb->pmpro_memberships_users mu ON u.ID = mu.user_id LEFT JOIN $wpdb->pmpro_membership_levels m ON mu.membership_id = m.id
|
72 |
-
|
73 |
-
if($l
|
74 |
-
|
75 |
-
|
76 |
-
$sqlQuery .= " WHERE mu.membership_id > 0 ";
|
77 |
-
|
78 |
-
if($l == "oldmembers")
|
79 |
-
$sqlQuery .= " AND mu.status = 'inactive' AND mu2.status IS NULL ";
|
80 |
-
elseif($l)
|
81 |
-
$sqlQuery .= " AND mu.status = 'active' AND mu.membership_id = '" . $l . "' ";
|
82 |
-
else
|
83 |
-
$sqlQuery .= " AND mu.status = 'active' ";
|
84 |
-
|
85 |
-
$sqlQuery .= "GROUP BY u.ID ";
|
86 |
-
|
87 |
-
if($l == "oldmembers")
|
88 |
-
$sqlQuery .= "ORDER BY enddate DESC ";
|
89 |
-
else
|
90 |
-
$sqlQuery .= "ORDER BY u.user_registered DESC ";
|
91 |
-
|
92 |
if($limit)
|
93 |
$sqlQuery .= "LIMIT $start, $limit";
|
94 |
}
|
95 |
-
|
96 |
-
//filter
|
97 |
-
$sqlQuery = apply_filters("pmpro_members_list_sql", $sqlQuery);
|
98 |
|
99 |
-
|
100 |
-
$
|
101 |
-
|
102 |
-
//begin output
|
103 |
-
header("Content-type: text/csv");
|
104 |
-
if($s && $l == "oldmembers")
|
105 |
-
header("Content-Disposition: attachment; filename=members_list_expired_" . sanitize_file_name($s) . ".csv");
|
106 |
-
elseif($s && $l)
|
107 |
-
header("Content-Disposition: attachment; filename=members_list_" . intval($l) . "_level_" . sanitize_file_name($s) . ".csv");
|
108 |
-
elseif($s)
|
109 |
-
header("Content-Disposition: attachment; filename=members_list_" . sanitize_file_name($s) . ".csv");
|
110 |
-
elseif($l == "oldmembers")
|
111 |
-
header("Content-Disposition: attachment; filename=members_list_expired.csv");
|
112 |
-
else
|
113 |
-
header("Content-Disposition: attachment; filename=members_list.csv");
|
114 |
-
|
115 |
-
$heading = "id,username,firstname,lastname,email,billing firstname,billing lastname,address1,address2,city,state,zipcode,country,phone,membership,initial payment,fee,term,discount_code_id,discount_code,joined";
|
116 |
-
|
117 |
-
if($l == "oldmembers")
|
118 |
-
$heading .= ",ended";
|
119 |
-
else
|
120 |
-
$heading .= ",expires";
|
121 |
-
|
122 |
-
$heading = apply_filters("pmpro_members_list_csv_heading", $heading);
|
123 |
-
$csvoutput = $heading;
|
124 |
|
125 |
//these are the meta_keys for the fields (arrays are object, property. so e.g. $theuser->ID)
|
126 |
$default_columns = array(
|
@@ -134,21 +75,16 @@
|
|
134 |
array("metavalues", "pmpro_baddress1"),
|
135 |
array("metavalues", "pmpro_baddress2"),
|
136 |
array("metavalues", "pmpro_bcity"),
|
137 |
-
array("metavalues", "
|
138 |
array("metavalues", "pmpro_bzipcode"),
|
139 |
array("metavalues", "pmpro_bcountry"),
|
140 |
array("metavalues", "pmpro_bphone"),
|
141 |
array("theuser", "membership"),
|
142 |
array("theuser", "initial_payment"),
|
143 |
array("theuser", "billing_amount"),
|
144 |
-
array("theuser", "cycle_period")
|
145 |
-
array("discount_code", "id"),
|
146 |
-
array("discount_code", "code")
|
147 |
//joindate and enddate are handled specifically below
|
148 |
);
|
149 |
-
|
150 |
-
//filter
|
151 |
-
$default_columns = apply_filters("pmpro_members_list_csv_default_columns", $default_columns);
|
152 |
|
153 |
//any extra columns
|
154 |
$extra_columns = apply_filters("pmpro_members_list_csv_extra_columns", array());
|
@@ -162,28 +98,15 @@
|
|
162 |
|
163 |
$csvoutput .= "\n";
|
164 |
|
165 |
-
//output
|
166 |
-
echo $csvoutput;
|
167 |
-
$csvoutput = "";
|
168 |
-
|
169 |
if($theusers)
|
170 |
{
|
171 |
-
foreach($theusers as $
|
172 |
{
|
173 |
-
//MULTI: This query will need to be updated to support multiple levels per user. Should probably just dump multiple rows for each membership.
|
174 |
//get meta
|
175 |
-
|
176 |
-
if($l == "oldmembers")
|
177 |
-
$theuser = $wpdb->get_row("SELECT u.ID, u.user_login, u.user_email, UNIX_TIMESTAMP(u.user_registered) as joindate, u.user_login, u.user_nicename, u.user_url, u.user_registered, u.user_status, u.display_name, mu.membership_id, mu.initial_payment, mu.billing_amount, mu.cycle_period, UNIX_TIMESTAMP(mu.enddate) as enddate, m.name as membership FROM $wpdb->users u LEFT JOIN $wpdb->usermeta um ON u.ID = um.user_id LEFT JOIN $wpdb->pmpro_memberships_users mu ON u.ID = mu.user_id LEFT JOIN $wpdb->pmpro_membership_levels m ON mu.membership_id = m.id WHERE u.ID = '" . $user_id . "' ORDER BY mu.id DESC LIMIT 1");
|
178 |
-
else
|
179 |
-
$theuser = $wpdb->get_row("SELECT u.ID, u.user_login, u.user_email, UNIX_TIMESTAMP(u.user_registered) as joindate, u.user_login, u.user_nicename, u.user_url, u.user_registered, u.user_status, u.display_name, mu.membership_id, mu.initial_payment, mu.billing_amount, mu.cycle_period, UNIX_TIMESTAMP(mu.enddate) as enddate, m.name as membership FROM $wpdb->users u LEFT JOIN $wpdb->usermeta um ON u.ID = um.user_id LEFT JOIN $wpdb->pmpro_memberships_users mu ON u.ID = mu.user_id AND mu.status = 'active' LEFT JOIN $wpdb->pmpro_membership_levels m ON mu.membership_id = m.id WHERE u.ID = '" . $user_id . "' LIMIT 1");
|
180 |
-
|
181 |
-
$sqlQuery = "SELECT meta_key as `key`, meta_value as `value` FROM $wpdb->usermeta WHERE $wpdb->usermeta.user_id = '" . $user_id . "'";
|
182 |
$metavalues = pmpro_getMetavalues($sqlQuery);
|
183 |
$theuser->metavalues = $metavalues;
|
184 |
-
|
185 |
-
$discount_code = $wpdb->get_row($sqlQuery);
|
186 |
-
|
187 |
//default columns
|
188 |
if(!empty($default_columns))
|
189 |
{
|
@@ -203,41 +126,41 @@
|
|
203 |
|
204 |
//joindate and enddate
|
205 |
$csvoutput .= "," . pmpro_enclose(date("Y-m-d", $theuser->joindate)) . ",";
|
206 |
-
|
207 |
-
if($theuser->membership_id)
|
208 |
-
{
|
209 |
-
if($theuser->enddate)
|
210 |
-
$csvoutput .= pmpro_enclose(apply_filters("pmpro_memberslist_expires_column", date("Y-m-d", $theuser->enddate), $theuser));
|
211 |
-
else
|
212 |
-
$csvoutput .= pmpro_enclose(apply_filters("pmpro_memberslist_expires_column", "Never", $theuser));
|
213 |
-
}
|
214 |
-
elseif($l == "oldmembers" && $theuser->enddate)
|
215 |
-
{
|
216 |
$csvoutput .= pmpro_enclose(date("Y-m-d", $theuser->enddate));
|
217 |
-
}
|
218 |
else
|
219 |
-
$csvoutput .= "
|
220 |
-
|
221 |
//any extra columns
|
222 |
if(!empty($extra_columns))
|
223 |
{
|
224 |
foreach($extra_columns as $heading => $callback)
|
225 |
{
|
226 |
-
$csvoutput .= "," . pmpro_enclose(call_user_func($callback, $theuser
|
227 |
}
|
228 |
}
|
229 |
|
230 |
$csvoutput .= "\n";
|
231 |
-
|
232 |
-
//output
|
233 |
-
echo $csvoutput;
|
234 |
-
$csvoutput = "";
|
235 |
}
|
236 |
}
|
237 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
238 |
print $csvoutput;
|
239 |
|
240 |
function pmpro_enclose($s)
|
241 |
{
|
242 |
return "\"" . str_replace("\"", "\\\"", $s) . "\"";
|
243 |
-
}
|
|
2 |
//only admins can get this
|
3 |
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_memberslist_csv")))
|
4 |
{
|
5 |
+
die("You do not have permissions to perform this action.");
|
6 |
}
|
7 |
|
8 |
global $wpdb;
|
42 |
|
43 |
if($s)
|
44 |
{
|
45 |
+
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS u.ID, u.user_login, u.user_email, UNIX_TIMESTAMP(u.user_registered) as joindate, u.user_login, u.user_nicename, u.user_url, u.user_registered, u.user_status, u.display_name, mu.membership_id, mu.initial_payment, mu.billing_amount, mu.cycle_period, UNIX_TIMESTAMP(mu.enddate) as enddate, m.name as membership FROM $wpdb->users u LEFT JOIN $wpdb->usermeta um ON u.ID = um.user_id LEFT JOIN $wpdb->pmpro_memberships_users mu ON u.ID = mu.user_id LEFT JOIN $wpdb->pmpro_membership_levels m ON mu.membership_id = m.id WHERE mu.status = 'active' AND mu.membership_id > 0 AND (u.user_login LIKE '%" . $wpdb->escape($s) . "%' OR u.user_email LIKE '%" . $wpdb->escape($s) . "%' OR um.meta_value LIKE '%" . $wpdb->escape($s) . "%') ";
|
|
|
|
|
|
|
|
|
|
|
46 |
|
47 |
+
if($l)
|
48 |
+
$sqlQuery .= " AND mu.membership_id = '" . $wpdb->escape($l) . "' ";
|
|
|
|
|
|
|
|
|
49 |
|
50 |
+
$sqlQuery .= "GROUP BY u.ID ORDER BY user_registered DESC LIMIT $start, $limit";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
}
|
52 |
else
|
53 |
{
|
54 |
+
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS u.ID, u.user_login, u.user_email, UNIX_TIMESTAMP(u.user_registered) as joindate, u.user_login, u.user_nicename, u.user_url, u.user_registered, u.user_status, u.display_name, mu.membership_id, mu.initial_payment, mu.billing_amount, mu.cycle_period, UNIX_TIMESTAMP(mu.enddate) as enddate, m.name as membership FROM $wpdb->users u LEFT JOIN $wpdb->pmpro_memberships_users mu ON u.ID = mu.user_id LEFT JOIN $wpdb->pmpro_membership_levels m ON mu.membership_id = m.id";
|
55 |
+
$sqlQuery .= " WHERE mu.membership_id > 0 AND mu.status = 'active' ";
|
56 |
+
if($l)
|
57 |
+
$sqlQuery .= " AND mu.membership_id = '" . $l . "' ";
|
58 |
+
$sqlQuery .= "ORDER BY user_registered DESC ";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
if($limit)
|
60 |
$sqlQuery .= "LIMIT $start, $limit";
|
61 |
}
|
|
|
|
|
|
|
62 |
|
63 |
+
$theusers = $wpdb->get_results($sqlQuery);
|
64 |
+
$csvoutput = "id,username,firstname,lastname,email,billing firstname,billing lastname,address1,address2,city,state,zipcode,country,phone,membership,initial payment,fee,term,joined,expires";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
|
66 |
//these are the meta_keys for the fields (arrays are object, property. so e.g. $theuser->ID)
|
67 |
$default_columns = array(
|
75 |
array("metavalues", "pmpro_baddress1"),
|
76 |
array("metavalues", "pmpro_baddress2"),
|
77 |
array("metavalues", "pmpro_bcity"),
|
78 |
+
array("metavalues", "pmpro_bzipcode"),
|
79 |
array("metavalues", "pmpro_bzipcode"),
|
80 |
array("metavalues", "pmpro_bcountry"),
|
81 |
array("metavalues", "pmpro_bphone"),
|
82 |
array("theuser", "membership"),
|
83 |
array("theuser", "initial_payment"),
|
84 |
array("theuser", "billing_amount"),
|
85 |
+
array("theuser", "cycle_period")
|
|
|
|
|
86 |
//joindate and enddate are handled specifically below
|
87 |
);
|
|
|
|
|
|
|
88 |
|
89 |
//any extra columns
|
90 |
$extra_columns = apply_filters("pmpro_members_list_csv_extra_columns", array());
|
98 |
|
99 |
$csvoutput .= "\n";
|
100 |
|
|
|
|
|
|
|
|
|
101 |
if($theusers)
|
102 |
{
|
103 |
+
foreach($theusers as $theuser)
|
104 |
{
|
|
|
105 |
//get meta
|
106 |
+
$sqlQuery = "SELECT meta_key as `key`, meta_value as `value` FROM $wpdb->usermeta WHERE $wpdb->usermeta.user_id = '" . $theuser->ID . "'";
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
$metavalues = pmpro_getMetavalues($sqlQuery);
|
108 |
$theuser->metavalues = $metavalues;
|
109 |
+
|
|
|
|
|
110 |
//default columns
|
111 |
if(!empty($default_columns))
|
112 |
{
|
126 |
|
127 |
//joindate and enddate
|
128 |
$csvoutput .= "," . pmpro_enclose(date("Y-m-d", $theuser->joindate)) . ",";
|
129 |
+
if($theuser->enddate)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
130 |
$csvoutput .= pmpro_enclose(date("Y-m-d", $theuser->enddate));
|
|
|
131 |
else
|
132 |
+
$csvoutput .= pmpro_enclose("Never");
|
133 |
+
|
134 |
//any extra columns
|
135 |
if(!empty($extra_columns))
|
136 |
{
|
137 |
foreach($extra_columns as $heading => $callback)
|
138 |
{
|
139 |
+
$csvoutput .= "," . pmpro_enclose(call_user_func($callback, $theuser));
|
140 |
}
|
141 |
}
|
142 |
|
143 |
$csvoutput .= "\n";
|
144 |
+
|
|
|
|
|
|
|
145 |
}
|
146 |
}
|
147 |
+
|
148 |
+
$size_in_bytes = strlen($csvoutput);
|
149 |
+
header("Content-type: text/csv");
|
150 |
+
//header("Content-type: application/vnd.ms-excel");
|
151 |
+
if($s && $l)
|
152 |
+
header("Content-Disposition: attachment; filename=members_list_" . intval($l) . "_level" . sanitize_file_name($s) . ".csv; size=$size_in_bytes");
|
153 |
+
elseif($s)
|
154 |
+
header("Content-Disposition: attachment; filename=members_list_" . sanitize_file_name($s) . ".csv; size=$size_in_bytes");
|
155 |
+
elseif($l)
|
156 |
+
header("Content-Disposition: attachment; filename=members_list_level" . intval($l) . ".csv; size=$size_in_bytes");
|
157 |
+
else
|
158 |
+
header("Content-Disposition: attachment; filename=members_list.csv; size=$size_in_bytes");
|
159 |
+
|
160 |
print $csvoutput;
|
161 |
|
162 |
function pmpro_enclose($s)
|
163 |
{
|
164 |
return "\"" . str_replace("\"", "\\\"", $s) . "\"";
|
165 |
+
}
|
166 |
+
?>
|
adminpages/memberslist.php
CHANGED
@@ -1,238 +1,205 @@
|
|
1 |
-
<?php
|
2 |
-
//only admins can get this
|
3 |
-
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_memberslist")))
|
4 |
-
{
|
5 |
-
die(
|
6 |
-
}
|
7 |
-
|
8 |
-
//vars
|
9 |
-
global $wpdb, $pmpro_currency_symbol;
|
10 |
-
if(isset($_REQUEST['s']))
|
11 |
-
$s = $_REQUEST['s'];
|
12 |
-
else
|
13 |
-
$s = "";
|
14 |
-
|
15 |
-
if(isset($_REQUEST['l']))
|
16 |
-
$l = $_REQUEST['l'];
|
17 |
-
else
|
18 |
-
$l = false;
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
<?php
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
?>
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
$sqlQuery .= "
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
{
|
94 |
-
$
|
95 |
-
|
96 |
-
|
97 |
-
$
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
</td>
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
<td><?php echo date(get_option("date_format"), strtotime($theuser->user_registered, current_time("timestamp")))?></td>
|
207 |
-
<td>
|
208 |
-
<?php
|
209 |
-
if($auser->enddate)
|
210 |
-
echo apply_filters("pmpro_memberslist_expires_column", date(get_option('date_format'), $auser->enddate), $auser);
|
211 |
-
else
|
212 |
-
echo __(apply_filters("pmpro_memberslist_expires_column", "Never", $auser), "pmpro");
|
213 |
-
?>
|
214 |
-
</td>
|
215 |
-
</tr>
|
216 |
-
<?php
|
217 |
-
}
|
218 |
-
|
219 |
-
if(!$theusers)
|
220 |
-
{
|
221 |
-
?>
|
222 |
-
<tr>
|
223 |
-
<td colspan="9"><p><?php _e("No members found.", "pmpro");?> <?php if($l) { ?><a href="?page=pmpro-memberslist&s=<?php echo $s?>"><?php _e("Search all levels", "pmpro");?></a>.<?php } ?></p></td>
|
224 |
-
</tr>
|
225 |
-
<?php
|
226 |
-
}
|
227 |
-
?>
|
228 |
-
</tbody>
|
229 |
-
</table>
|
230 |
-
</form>
|
231 |
-
|
232 |
-
<?php
|
233 |
-
echo pmpro_getPaginationString($pn, $totalrows, $limit, 1, get_admin_url(NULL, "/admin.php?page=pmpro-memberslist&s=" . urlencode($s)), "&l=$l&limit=$limit&pn=");
|
234 |
-
?>
|
235 |
-
|
236 |
-
<?php
|
237 |
-
require_once(dirname(__FILE__) . "/admin_footer.php");
|
238 |
-
?>
|
1 |
+
<?php
|
2 |
+
//only admins can get this
|
3 |
+
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_memberslist")))
|
4 |
+
{
|
5 |
+
die("You do not have permissions to perform this action.");
|
6 |
+
}
|
7 |
+
|
8 |
+
//vars
|
9 |
+
global $wpdb, $pmpro_currency_symbol;
|
10 |
+
if(isset($_REQUEST['s']))
|
11 |
+
$s = $_REQUEST['s'];
|
12 |
+
else
|
13 |
+
$s = "";
|
14 |
+
|
15 |
+
if(isset($_REQUEST['l']))
|
16 |
+
$l = $_REQUEST['l'];
|
17 |
+
else
|
18 |
+
$l = false;
|
19 |
+
?>
|
20 |
+
<div class="wrap pmpro_admin">
|
21 |
+
<div class="pmpro_banner">
|
22 |
+
<a class="pmpro_logo" title="Paid Memberships Pro - Membership Plugin for WordPress" target="_blank" href="<?php echo pmpro_https_filter("http://www.paidmembershipspro.com")?>"><img src="<?php echo PMPRO_URL?>/images/PaidMembershipsPro.gif" width="350" height="45" border="0" alt="Paid Memberships Pro(c) - All Rights Reserved" /></a>
|
23 |
+
<div class="pmpro_tagline">Membership Plugin for WordPress</div>
|
24 |
+
|
25 |
+
<div class="pmpro_meta"><a href="<?php echo pmpro_https_filter("http://www.paidmembershipspro.com")?>">Plugin Support</a> | <a href="http://www.paidmembershipspro.com/forums/">User Forum</a> | <strong>Version <?php echo PMPRO_VERSION?></strong></div>
|
26 |
+
</div>
|
27 |
+
<br style="clear:both;" />
|
28 |
+
|
29 |
+
<form id="posts-filter" method="get" action="">
|
30 |
+
<h2>
|
31 |
+
Members Report
|
32 |
+
<small>(<a target="_blank" href="<?php echo admin_url('admin-ajax.php');?>?action=memberslist_csv&s=<?php echo $s?>&l=<?php echo $l?>">Export to CSV</a>)</small>
|
33 |
+
</h2>
|
34 |
+
<ul class="subsubsub">
|
35 |
+
<li>
|
36 |
+
Show <select name="l" onchange="jQuery('#posts-filter').submit();">
|
37 |
+
<option value="" <?php if(!$l) { ?>selected="selected"<?php } ?>>All Levels</option>
|
38 |
+
<?php
|
39 |
+
$levels = $wpdb->get_results("SELECT id, name FROM $wpdb->pmpro_membership_levels ORDER BY name");
|
40 |
+
foreach($levels as $level)
|
41 |
+
{
|
42 |
+
?>
|
43 |
+
<option value="<?php echo $level->id?>" <?php if($l == $level->id) { ?>selected="selected"<?php } ?>><?php echo $level->name?></option>
|
44 |
+
<?php
|
45 |
+
}
|
46 |
+
?>
|
47 |
+
</select>
|
48 |
+
</li>
|
49 |
+
</ul>
|
50 |
+
<p class="search-box">
|
51 |
+
<label class="hidden" for="post-search-input">Search Members:</label>
|
52 |
+
<input type="hidden" name="page" value="pmpro-memberslist" />
|
53 |
+
<input id="post-search-input" type="text" value="<?php echo $s?>" name="s"/>
|
54 |
+
<input class="button" type="submit" value="Search Members"/>
|
55 |
+
</p>
|
56 |
+
<?php
|
57 |
+
//some vars for the search
|
58 |
+
if(isset($_REQUEST['pn']))
|
59 |
+
$pn = $_REQUEST['pn'];
|
60 |
+
else
|
61 |
+
$pn = 1;
|
62 |
+
|
63 |
+
if(isset($_REQUEST['limit']))
|
64 |
+
$limit = $_REQUEST['limit'];
|
65 |
+
else
|
66 |
+
$limit = 15;
|
67 |
+
|
68 |
+
$end = $pn * $limit;
|
69 |
+
$start = $end - $limit;
|
70 |
+
|
71 |
+
if($s)
|
72 |
+
{
|
73 |
+
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS u.ID, u.user_login, u.user_email, UNIX_TIMESTAMP(u.user_registered) as joindate, mu.membership_id, mu.initial_payment, mu.billing_amount, mu.cycle_period, mu.cycle_number, mu.billing_limit, mu.trial_amount, mu.trial_limit, UNIX_TIMESTAMP(mu.startdate) as startdate, UNIX_TIMESTAMP(mu.enddate) as enddate, m.name as membership FROM $wpdb->users u LEFT JOIN $wpdb->usermeta um ON u.ID = um.user_id LEFT JOIN $wpdb->pmpro_memberships_users mu ON u.ID = mu.user_id LEFT JOIN $wpdb->pmpro_membership_levels m ON mu.membership_id = m.id WHERE mu.status = 'active' AND mu.membership_id > 0 AND (u.user_login LIKE '%$s%' OR u.user_email LIKE '%$s%' OR um.meta_value LIKE '%$s%') ";
|
74 |
+
|
75 |
+
if($l)
|
76 |
+
$sqlQuery .= " AND mu.membership_id = '" . $l . "' ";
|
77 |
+
|
78 |
+
$sqlQuery .= "GROUP BY u.ID ORDER BY user_registered DESC LIMIT $start, $limit";
|
79 |
+
}
|
80 |
+
else
|
81 |
+
{
|
82 |
+
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS u.ID, u.user_login, u.user_email, UNIX_TIMESTAMP(u.user_registered) as joindate, mu.membership_id, mu.initial_payment, mu.billing_amount, mu.cycle_period, mu.cycle_number, mu.billing_limit, mu.trial_amount, mu.trial_limit, UNIX_TIMESTAMP(mu.startdate) as startdate, UNIX_TIMESTAMP(mu.enddate) as enddate, m.name as membership FROM $wpdb->users u LEFT JOIN $wpdb->pmpro_memberships_users mu ON u.ID = mu.user_id LEFT JOIN $wpdb->pmpro_membership_levels m ON mu.membership_id = m.id";
|
83 |
+
$sqlQuery .= " WHERE mu.membership_id > 0 AND mu.status = 'active' ";
|
84 |
+
if($l)
|
85 |
+
$sqlQuery .= " AND mu.membership_id = '" . $l . "' ";
|
86 |
+
$sqlQuery .= "GROUP BY u.ID ORDER BY user_registered DESC LIMIT $start, $limit";
|
87 |
+
}
|
88 |
+
|
89 |
+
$theusers = $wpdb->get_results($sqlQuery);
|
90 |
+
$totalrows = $wpdb->get_var("SELECT FOUND_ROWS() as found_rows");
|
91 |
+
|
92 |
+
if($theusers)
|
93 |
+
{
|
94 |
+
$calculate_revenue = apply_filters("pmpro_memberslist_calculate_revenue", false);
|
95 |
+
if($calculate_revenue)
|
96 |
+
{
|
97 |
+
$initial_payments = pmpro_calculateInitialPaymentRevenue($s, $l);
|
98 |
+
$recurring_payments = pmpro_calculateRecurringRevenue($s, $l);
|
99 |
+
?>
|
100 |
+
<p class="clear"><?php echo strval($totalrows)?> members found. These members have paid <strong>$<?php echo number_format($initial_payments)?> in initial payments</strong> and will generate an estimated <strong>$<?php echo number_format($recurring_payments)?> in revenue over the next year</strong>, or <strong>$<?php echo number_format($recurring_payments/12)?>/month</strong>. <span class="pmpro_lite">(This estimate does not take into account trial periods or billing limits.)</span></p>
|
101 |
+
<?php
|
102 |
+
}
|
103 |
+
else
|
104 |
+
{
|
105 |
+
?>
|
106 |
+
<p class="clear"><?php echo strval($totalrows)?> members found.
|
107 |
+
<?php
|
108 |
+
}
|
109 |
+
}
|
110 |
+
?>
|
111 |
+
<table class="widefat">
|
112 |
+
<thead>
|
113 |
+
<tr class="thead">
|
114 |
+
<th>ID</th>
|
115 |
+
<th>Username</th>
|
116 |
+
<th>First Name</th>
|
117 |
+
<th>Last Name</th>
|
118 |
+
<th>Email</th>
|
119 |
+
<?php do_action("pmpro_memberslist_extra_cols_header", $theusers);?>
|
120 |
+
<th>Billing Address</th>
|
121 |
+
<th>Membership</th>
|
122 |
+
<th>Fee</th>
|
123 |
+
<th>Joined</th>
|
124 |
+
<th>Expires</th>
|
125 |
+
</tr>
|
126 |
+
</thead>
|
127 |
+
<tbody id="users" class="list:user user-list">
|
128 |
+
<?php
|
129 |
+
$count = 0;
|
130 |
+
foreach($theusers as $auser)
|
131 |
+
{
|
132 |
+
//get meta
|
133 |
+
$theuser = get_userdata($auser->ID);
|
134 |
+
?>
|
135 |
+
<tr <?php if($count++ % 2 == 0) { ?>class="alternate"<?php } ?>>
|
136 |
+
<td><?php echo $theuser->ID?></td>
|
137 |
+
<td>
|
138 |
+
<?php echo get_avatar($theuser->ID, 32)?>
|
139 |
+
<strong><a href="user-edit.php?user_id=<?php echo $theuser->ID?>"><?php echo $theuser->user_login?></a></strong>
|
140 |
+
</td>
|
141 |
+
<td><?php echo $theuser->first_name?></td>
|
142 |
+
<td><?php echo $theuser->last_name?></td>
|
143 |
+
<td><a href="mailto:<?php echo $theuser->user_email?>"><?php echo $theuser->user_email?></a></td>
|
144 |
+
<?php do_action("pmpro_memberslist_extra_cols_body", $theuser);?>
|
145 |
+
<td>
|
146 |
+
<?php
|
147 |
+
if(empty($theuser->pmpro_bfirstname))
|
148 |
+
$theuser->pmpro_bfirstname = "";
|
149 |
+
if(empty($theuser->pmpro_blastname))
|
150 |
+
$theuser->pmpro_blastname = "";
|
151 |
+
echo trim($theuser->pmpro_bfirstname . " " . $theuser->pmpro_blastname);
|
152 |
+
?><br />
|
153 |
+
<?php if(!empty($theuser->pmpro_baddress1)) { ?>
|
154 |
+
<?php echo $theuser->pmpro_baddress1; ?><br />
|
155 |
+
<?php if(!empty($theuser->pmpro_baddress2)) echo $theuser->pmpro_baddress2 . "<br />"; ?>
|
156 |
+
<?php if($theuser->pmpro_bcity && $theuser->pmpro_bstate) { ?>
|
157 |
+
<?php echo $theuser->pmpro_bcity?>, <?php echo $theuser->pmpro_bstate?> <?php echo $theuser->pmpro_bzipcode?> <?php if(!empty($theuser->pmpro_bcountry)) echo $theuser->pmpro_bcountry?><br />
|
158 |
+
<?php } ?>
|
159 |
+
<?php } ?>
|
160 |
+
<?php if(!empty($theuser->pmpro_bphone)) echo formatPhone($theuser->pmpro_bphone);?>
|
161 |
+
</td>
|
162 |
+
<td><?php echo $auser->membership?></td>
|
163 |
+
<td>
|
164 |
+
<?php if((float)$auser->initial_payment > 0) { ?>
|
165 |
+
<?php echo $pmpro_currency_symbol; ?><?php echo $auser->initial_payment?>
|
166 |
+
<?php } ?>
|
167 |
+
<?php if((float)$auser->initial_payment > 0 && (float)$auser->billing_amount > 0) { ?>+<br /><?php } ?>
|
168 |
+
<?php if((float)$auser->billing_amount > 0) { ?>
|
169 |
+
<?php echo $pmpro_currency_symbol; ?><?php echo $auser->billing_amount?>/<?php echo $auser->cycle_period?>
|
170 |
+
<?php } ?>
|
171 |
+
<?php if((float)$auser->initial_payment <= 0 && (float)$auser->billing_amount <= 0) { ?>
|
172 |
+
-
|
173 |
+
<?php } ?>
|
174 |
+
</td>
|
175 |
+
<td><?php echo date("m/d/Y", strtotime($theuser->user_registered))?></td>
|
176 |
+
<td>
|
177 |
+
<?php
|
178 |
+
if($auser->enddate)
|
179 |
+
echo date(get_option('date_format'), $auser->enddate);
|
180 |
+
else
|
181 |
+
echo "Never";
|
182 |
+
?>
|
183 |
+
</td>
|
184 |
+
</tr>
|
185 |
+
<?php
|
186 |
+
}
|
187 |
+
|
188 |
+
if(!$theusers)
|
189 |
+
{
|
190 |
+
?>
|
191 |
+
<tr>
|
192 |
+
<td colspan="9"><p>No members found. <?php if($l) { ?><a href="?page=pmpro-memberslist&s=<?php echo $s?>">Search all levels</a>.<?php } ?></p></td>
|
193 |
+
</tr>
|
194 |
+
<?php
|
195 |
+
}
|
196 |
+
?>
|
197 |
+
</tbody>
|
198 |
+
</table>
|
199 |
+
</form>
|
200 |
+
|
201 |
+
<?php
|
202 |
+
echo pmpro_getPaginationString($pn, $totalrows, $limit, 1, get_admin_url(NULL, "/admin.php?page=pmpro-memberslist&s=" . urlencode($s)), "&l=$l&limit=$limit&pn=");
|
203 |
+
?>
|
204 |
+
|
205 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/orders-csv.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
//only admins can get this
|
3 |
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_orders_csv")))
|
4 |
{
|
5 |
-
die(
|
6 |
}
|
7 |
|
8 |
global $wpdb;
|
@@ -17,51 +17,6 @@
|
|
17 |
$l = $_REQUEST['l'];
|
18 |
else
|
19 |
$l = false;
|
20 |
-
|
21 |
-
if(isset($_REQUEST['start-month']))
|
22 |
-
$start_month = $_REQUEST['start-month'];
|
23 |
-
else
|
24 |
-
$start_month = "1";
|
25 |
-
|
26 |
-
if(isset($_REQUEST['start-day']))
|
27 |
-
$start_day = $_REQUEST['start-day'];
|
28 |
-
else
|
29 |
-
$start_day = "1";
|
30 |
-
|
31 |
-
if(isset($_REQUEST['start-year']))
|
32 |
-
$start_year = $_REQUEST['start-year'];
|
33 |
-
else
|
34 |
-
$start_year = date("Y");
|
35 |
-
|
36 |
-
if(isset($_REQUEST['end-month']))
|
37 |
-
$end_month = $_REQUEST['end-month'];
|
38 |
-
else
|
39 |
-
$end_month = date("n");
|
40 |
-
|
41 |
-
if(isset($_REQUEST['end-day']))
|
42 |
-
$end_day = $_REQUEST['end-day'];
|
43 |
-
else
|
44 |
-
$end_day = date("j");
|
45 |
-
|
46 |
-
if(isset($_REQUEST['end-year']))
|
47 |
-
$end_year = $_REQUEST['end-year'];
|
48 |
-
else
|
49 |
-
$end_year = date("Y");
|
50 |
-
|
51 |
-
if(isset($_REQUEST['predefined-date']))
|
52 |
-
$predefined_date = $_REQUEST['predefined-date'];
|
53 |
-
else
|
54 |
-
$predefined_date = "This Month";
|
55 |
-
|
56 |
-
if(isset($_REQUEST['status']))
|
57 |
-
$status = $_REQUEST['status'];
|
58 |
-
else
|
59 |
-
$status = "";
|
60 |
-
|
61 |
-
if(isset($_REQUEST['filter']))
|
62 |
-
$filter = sanitize_text_field($_REQUEST['filter']);
|
63 |
-
else
|
64 |
-
$filter = "all";
|
65 |
|
66 |
//some vars for the search
|
67 |
if(!empty($_REQUEST['pn']))
|
@@ -85,62 +40,6 @@
|
|
85 |
$start = NULL;
|
86 |
}
|
87 |
|
88 |
-
//filters
|
89 |
-
if($filter == "all" || !$filter)
|
90 |
-
$condition = "1=1";
|
91 |
-
elseif($filter == "within-a-date-range")
|
92 |
-
{
|
93 |
-
$start_date = $start_year."-".$start_month."-".$start_day;
|
94 |
-
$end_date = $end_year."-".$end_month."-".$end_day;
|
95 |
-
|
96 |
-
//add times to dates
|
97 |
-
$start_date = $start_date . " 00:00:00";
|
98 |
-
$end_date = $end_date . " 23:59:59";
|
99 |
-
|
100 |
-
$condition = "timestamp BETWEEN '".$start_date."' AND '".$end_date."'";
|
101 |
-
}
|
102 |
-
elseif($filter == "predefined-date-range")
|
103 |
-
{
|
104 |
-
if($predefined_date == "Last Month")
|
105 |
-
{
|
106 |
-
$start_date = date("Y-m-d", strtotime("first day of last month", current_time("timestamp")));
|
107 |
-
$end_date = date("Y-m-d", strtotime("last day of last month", current_time("timestamp")));
|
108 |
-
}
|
109 |
-
elseif($predefined_date == "This Month")
|
110 |
-
{
|
111 |
-
$start_date = date("Y-m-d", strtotime("first day of this month", current_time("timestamp")));
|
112 |
-
$end_date = date("Y-m-d", strtotime("last day of this month", current_time("timestamp")));
|
113 |
-
}
|
114 |
-
elseif($predefined_date == "This Year")
|
115 |
-
{
|
116 |
-
$year = date('Y');
|
117 |
-
$start_date = date("Y-m-d", strtotime("first day of January $year", current_time("timestamp")));
|
118 |
-
$end_date = date("Y-m-d", strtotime("last day of December $year", current_time("timestamp")));
|
119 |
-
}
|
120 |
-
|
121 |
-
elseif($predefined_date == "Last Year")
|
122 |
-
{
|
123 |
-
$year = date('Y') - 1;
|
124 |
-
$start_date = date("Y-m-d", strtotime("first day of January $year", current_time("timestamp")));
|
125 |
-
$end_date = date("Y-m-d", strtotime("last day of December $year", current_time("timestamp")));
|
126 |
-
}
|
127 |
-
|
128 |
-
//add times to dates
|
129 |
-
$start_date = $start_date . " 00:00:00";
|
130 |
-
$end_date = $end_date . " 23:59:59";
|
131 |
-
|
132 |
-
$condition = "timestamp BETWEEN '".$start_date."' AND '".$end_date."'";
|
133 |
-
}
|
134 |
-
elseif($filter == "within-a-level")
|
135 |
-
{
|
136 |
-
$condition = "membership_id = $l";
|
137 |
-
}
|
138 |
-
elseif($filter == "within-a-status")
|
139 |
-
{
|
140 |
-
$condition = "status = '$status' ";
|
141 |
-
}
|
142 |
-
|
143 |
-
//string search
|
144 |
if($s)
|
145 |
{
|
146 |
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS o.id FROM $wpdb->pmpro_membership_orders o LEFT JOIN $wpdb->users u ON o.user_id = u.ID LEFT JOIN $wpdb->pmpro_membership_levels l ON o.membership_id = l.id ";
|
@@ -150,42 +49,30 @@
|
|
150 |
$sqlQuery .= "LEFT JOIN $wpdb->usermeta um ON o.user_id = um.user_id ";
|
151 |
|
152 |
$sqlQuery .= "WHERE (1=2 ";
|
153 |
-
|
154 |
$fields = array("o.id", "o.code", "o.billing_name", "o.billing_street", "o.billing_city", "o.billing_state", "o.billing_zip", "o.billing_phone", "o.payment_type", "o.cardtype", "o.accountnumber", "o.status", "o.gateway", "o.gateway_environment", "o.payment_transaction_id", "o.subscription_transaction_id", "u.user_login", "u.user_email", "u.display_name", "l.name");
|
155 |
|
156 |
if($join_with_usermeta)
|
157 |
$fields[] = "um.meta_value";
|
158 |
-
|
159 |
$fields = apply_filters("pmpro_orders_search_fields", $fields);
|
160 |
|
161 |
foreach($fields as $field)
|
162 |
-
$sqlQuery .= " OR " . $field . " LIKE '%" .
|
163 |
$sqlQuery .= ") ";
|
164 |
-
|
165 |
-
$sqlQuery .= "AND " . $condition . " ";
|
166 |
-
|
167 |
-
$sqlQuery .= "GROUP BY o.id ORDER BY o.id DESC, o.timestamp DESC ";
|
168 |
}
|
169 |
else
|
170 |
{
|
171 |
-
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS id FROM $wpdb->pmpro_membership_orders
|
172 |
}
|
173 |
|
174 |
-
if(
|
175 |
$sqlQuery .= "LIMIT $start, $limit";
|
176 |
|
177 |
$order_ids = $wpdb->get_col($sqlQuery);
|
178 |
|
179 |
-
|
180 |
-
header("Content-type: text/csv");
|
181 |
-
|
182 |
-
$filename = "orders.csv";
|
183 |
-
/*
|
184 |
-
Insert logic here for building filename from $filter and other values.
|
185 |
-
*/
|
186 |
-
header("Content-Disposition: attachment; filename=$filename;");
|
187 |
-
|
188 |
-
$csvoutput = "id,user_id,user_login,first_name,last_name,user_email,billing_name,billing_street,billing_city,billing_state,billing_zip,billing_country,billing_phone,membership_id,level_name,subtotal,tax,couponamount,total,payment_type,cardtype,accountnumber,expirationmonth,expirationyear,status,gateway,gateway_environment,payment_transaction_id,subscription_transaction_id,discount_code_id,discount_code,timestamp";
|
189 |
|
190 |
//these are the meta_keys for the fields (arrays are object, property. so e.g. $theuser->ID)
|
191 |
$default_columns = array(
|
@@ -205,7 +92,7 @@
|
|
205 |
array("order", "membership_id"),
|
206 |
array("level", "name"),
|
207 |
array("order", "subtotal"),
|
208 |
-
array("order", "tax"),
|
209 |
array("order", "couponamount"),
|
210 |
array("order", "total"),
|
211 |
array("order", "payment_type"),
|
@@ -217,9 +104,7 @@
|
|
217 |
array("order", "gateway"),
|
218 |
array("order", "gateway_environment"),
|
219 |
array("order", "payment_transaction_id"),
|
220 |
-
array("order", "subscription_transactiond_id")
|
221 |
-
array("discount_code", "id"),
|
222 |
-
array("discount_code", "code")
|
223 |
);
|
224 |
|
225 |
//any extra columns
|
@@ -234,10 +119,6 @@
|
|
234 |
|
235 |
$csvoutput .= "\n";
|
236 |
|
237 |
-
//output
|
238 |
-
echo $csvoutput;
|
239 |
-
$csvoutput = "";
|
240 |
-
|
241 |
if($order_ids)
|
242 |
{
|
243 |
foreach($order_ids as $order_id)
|
@@ -247,8 +128,6 @@
|
|
247 |
$order->getMemberOrderByID($order_id);
|
248 |
$user = get_userdata($order->user_id);
|
249 |
$level = $order->getMembershipLevel();
|
250 |
-
$sqlQuery = "SELECT c.id, c.code FROM $wpdb->pmpro_discount_codes_uses cu LEFT JOIN $wpdb->pmpro_discount_codes c ON cu.code_id = c.id WHERE cu.order_id = '" . $order_id . "' LIMIT 1";
|
251 |
-
$discount_code = $wpdb->get_row($sqlQuery);
|
252 |
|
253 |
//default columns
|
254 |
if(!empty($default_columns))
|
@@ -282,12 +161,21 @@
|
|
282 |
}
|
283 |
|
284 |
$csvoutput .= "\n";
|
285 |
-
|
286 |
-
//output
|
287 |
-
echo $csvoutput;
|
288 |
-
$csvoutput = "";
|
289 |
}
|
290 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
291 |
|
292 |
print $csvoutput;
|
293 |
|
2 |
//only admins can get this
|
3 |
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_orders_csv")))
|
4 |
{
|
5 |
+
die("You do not have permissions to perform this action.");
|
6 |
}
|
7 |
|
8 |
global $wpdb;
|
17 |
$l = $_REQUEST['l'];
|
18 |
else
|
19 |
$l = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
21 |
//some vars for the search
|
22 |
if(!empty($_REQUEST['pn']))
|
40 |
$start = NULL;
|
41 |
}
|
42 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
if($s)
|
44 |
{
|
45 |
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS o.id FROM $wpdb->pmpro_membership_orders o LEFT JOIN $wpdb->users u ON o.user_id = u.ID LEFT JOIN $wpdb->pmpro_membership_levels l ON o.membership_id = l.id ";
|
49 |
$sqlQuery .= "LEFT JOIN $wpdb->usermeta um ON o.user_id = um.user_id ";
|
50 |
|
51 |
$sqlQuery .= "WHERE (1=2 ";
|
52 |
+
|
53 |
$fields = array("o.id", "o.code", "o.billing_name", "o.billing_street", "o.billing_city", "o.billing_state", "o.billing_zip", "o.billing_phone", "o.payment_type", "o.cardtype", "o.accountnumber", "o.status", "o.gateway", "o.gateway_environment", "o.payment_transaction_id", "o.subscription_transaction_id", "u.user_login", "u.user_email", "u.display_name", "l.name");
|
54 |
|
55 |
if($join_with_usermeta)
|
56 |
$fields[] = "um.meta_value";
|
57 |
+
|
58 |
$fields = apply_filters("pmpro_orders_search_fields", $fields);
|
59 |
|
60 |
foreach($fields as $field)
|
61 |
+
$sqlQuery .= " OR " . $field . " LIKE '%" . $wpdb->escape($s) . "%' ";
|
62 |
$sqlQuery .= ") ";
|
63 |
+
$sqlQuery .= "ORDER BY o.timestamp DESC ";
|
|
|
|
|
|
|
64 |
}
|
65 |
else
|
66 |
{
|
67 |
+
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS id FROM $wpdb->pmpro_membership_orders ORDER BY timestamp DESC ";
|
68 |
}
|
69 |
|
70 |
+
if($limit)
|
71 |
$sqlQuery .= "LIMIT $start, $limit";
|
72 |
|
73 |
$order_ids = $wpdb->get_col($sqlQuery);
|
74 |
|
75 |
+
$csvoutput = "id,user_id,user_login,first_name,last_name,user_email,billing_name,billing_street,billing_city,billing_state,billing_zip,billing_country,billing_phone,membership_id,level_name,subtotal,tax,couponamount,total,payment_type,cardtype,accountnumber,expirationmonth,expirationyear,status,gateway,gateway_environment,payment_transaction_id,subscription_transaction_id,timestamp";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
|
77 |
//these are the meta_keys for the fields (arrays are object, property. so e.g. $theuser->ID)
|
78 |
$default_columns = array(
|
92 |
array("order", "membership_id"),
|
93 |
array("level", "name"),
|
94 |
array("order", "subtotal"),
|
95 |
+
array("order", "tax"),
|
96 |
array("order", "couponamount"),
|
97 |
array("order", "total"),
|
98 |
array("order", "payment_type"),
|
104 |
array("order", "gateway"),
|
105 |
array("order", "gateway_environment"),
|
106 |
array("order", "payment_transaction_id"),
|
107 |
+
array("order", "subscription_transactiond_id")
|
|
|
|
|
108 |
);
|
109 |
|
110 |
//any extra columns
|
119 |
|
120 |
$csvoutput .= "\n";
|
121 |
|
|
|
|
|
|
|
|
|
122 |
if($order_ids)
|
123 |
{
|
124 |
foreach($order_ids as $order_id)
|
128 |
$order->getMemberOrderByID($order_id);
|
129 |
$user = get_userdata($order->user_id);
|
130 |
$level = $order->getMembershipLevel();
|
|
|
|
|
131 |
|
132 |
//default columns
|
133 |
if(!empty($default_columns))
|
161 |
}
|
162 |
|
163 |
$csvoutput .= "\n";
|
164 |
+
|
|
|
|
|
|
|
165 |
}
|
166 |
+
}
|
167 |
+
|
168 |
+
$size_in_bytes = strlen($csvoutput);
|
169 |
+
header("Content-type: text/csv");
|
170 |
+
//header("Content-type: application/vnd.ms-excel");
|
171 |
+
if($s && $l)
|
172 |
+
header("Content-Disposition: attachment; filename=orders" . intval($l) . "_level" . sanitize_file_name($s) . ".csv; size=$size_in_bytes");
|
173 |
+
elseif($s)
|
174 |
+
header("Content-Disposition: attachment; filename=orders_" . sanitize_file_name($s) . ".csv; size=$size_in_bytes");
|
175 |
+
elseif($l)
|
176 |
+
header("Content-Disposition: attachment; filename=orders_level" . intval($l) . ".csv; size=$size_in_bytes");
|
177 |
+
else
|
178 |
+
header("Content-Disposition: attachment; filename=orders.csv; size=$size_in_bytes");
|
179 |
|
180 |
print $csvoutput;
|
181 |
|
adminpages/orders.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
//only admins can get this
|
3 |
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_orders")))
|
4 |
{
|
5 |
-
die(
|
6 |
}
|
7 |
|
8 |
//vars
|
@@ -16,47 +16,6 @@
|
|
16 |
$l = $_REQUEST['l'];
|
17 |
else
|
18 |
$l = false;
|
19 |
-
|
20 |
-
if(isset($_REQUEST['start-month']))
|
21 |
-
$start_month = $_REQUEST['start-month'];
|
22 |
-
else
|
23 |
-
$start_month = "1";
|
24 |
-
|
25 |
-
if(isset($_REQUEST['start-day']))
|
26 |
-
$start_day = $_REQUEST['start-day'];
|
27 |
-
else
|
28 |
-
$start_day = "1";
|
29 |
-
|
30 |
-
if(isset($_REQUEST['start-year']))
|
31 |
-
$start_year = $_REQUEST['start-year'];
|
32 |
-
else
|
33 |
-
$start_year = date("Y");
|
34 |
-
|
35 |
-
if(isset($_REQUEST['end-month']))
|
36 |
-
$end_month = $_REQUEST['end-month'];
|
37 |
-
else
|
38 |
-
$end_month = date("n");
|
39 |
-
|
40 |
-
if(isset($_REQUEST['end-day']))
|
41 |
-
$end_day = $_REQUEST['end-day'];
|
42 |
-
else
|
43 |
-
$end_day = date("j");
|
44 |
-
|
45 |
-
if(isset($_REQUEST['end-year']))
|
46 |
-
$end_year = $_REQUEST['end-year'];
|
47 |
-
else
|
48 |
-
$end_year = date("Y");
|
49 |
-
|
50 |
-
if(isset($_REQUEST['predefined-date']))
|
51 |
-
$predefined_date = $_REQUEST['predefined-date'];
|
52 |
-
else
|
53 |
-
$predefined_date = "This Month";
|
54 |
-
|
55 |
-
if(isset($_REQUEST['status']))
|
56 |
-
$status = $_REQUEST['status'];
|
57 |
-
else
|
58 |
-
$status = "";
|
59 |
-
|
60 |
|
61 |
//deleting?
|
62 |
if(!empty($_REQUEST['delete']))
|
@@ -64,25 +23,16 @@
|
|
64 |
$dorder = new MemberOrder(intval($_REQUEST['delete']));
|
65 |
if($dorder->deleteMe())
|
66 |
{
|
67 |
-
$pmpro_msg =
|
68 |
$pmpro_msgt = "success";
|
69 |
}
|
70 |
else
|
71 |
{
|
72 |
-
$pmpro_msg =
|
73 |
$pmpro_msgt = "error";
|
74 |
}
|
75 |
}
|
76 |
|
77 |
-
if(isset($_REQUEST['filter']))
|
78 |
-
$filter = sanitize_text_field($_REQUEST['filter']);
|
79 |
-
else
|
80 |
-
$filter = "all";
|
81 |
-
|
82 |
-
$thisyear = date("Y");
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
//this array stores fields that should be read only
|
87 |
$read_only_fields = apply_filters("pmpro_orders_read_only_fields", array("code", "payment_transaction_id", "subscription_transaction_id"));
|
88 |
|
@@ -166,18 +116,18 @@
|
|
166 |
//handle timestamp
|
167 |
if($order->updateTimestamp($_POST['ts_year'], $_POST['ts_month'], $_POST['ts_day']) !== false)
|
168 |
{
|
169 |
-
$pmpro_msg =
|
170 |
$pmpro_msgt = "success";
|
171 |
}
|
172 |
else
|
173 |
{
|
174 |
-
$pmpro_msg =
|
175 |
$pmpro_msgt = "error";
|
176 |
}
|
177 |
}
|
178 |
else
|
179 |
{
|
180 |
-
$pmpro_msg =
|
181 |
$pmpro_msgt = "error";
|
182 |
}
|
183 |
}
|
@@ -235,16 +185,23 @@
|
|
235 |
}
|
236 |
}
|
237 |
|
238 |
-
require_once(dirname(__FILE__) . "/admin_header.php");
|
239 |
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
240 |
|
241 |
<?php if(!empty($order)) { ?>
|
242 |
|
243 |
<h2>
|
244 |
<?php if(!empty($order->id)) { ?>
|
245 |
-
|
246 |
<?php } else { ?>
|
247 |
-
|
248 |
<?php } ?>
|
249 |
</h2>
|
250 |
|
@@ -258,21 +215,21 @@
|
|
258 |
<tbody>
|
259 |
<tr>
|
260 |
<th scope="row" valign="top"><label>ID:</label></th>
|
261 |
-
<td><?php if(!empty($order->id)) echo $order->id; else echo
|
262 |
</tr>
|
263 |
|
264 |
<tr>
|
265 |
-
<th scope="row" valign="top"><label for="code"
|
266 |
<td>
|
267 |
<?php if(in_array("code", $read_only_fields)) { echo $order->code; } else { ?>
|
268 |
<input id="code" name="code" type="text" size="50" value="<?php echo esc_attr($order->code);?>" />
|
269 |
<?php } ?>
|
270 |
-
<?php if($order_id < 0) { ?><small class="pmpro_lite"
|
271 |
</td>
|
272 |
</tr>
|
273 |
|
274 |
<tr>
|
275 |
-
<th scope="row" valign="top"><label for="user_id"
|
276 |
<td>
|
277 |
<?php if(in_array("user_id", $read_only_fields) && $order_id > 0) { echo $order->user_id; } else { ?>
|
278 |
<input id="user_id" name="user_id" type="text" size="50" value="<?php echo esc_attr($order->user_id);?>" />
|
@@ -281,7 +238,7 @@
|
|
281 |
</tr>
|
282 |
|
283 |
<tr>
|
284 |
-
<th scope="row" valign="top"><label for="membership_id"
|
285 |
<td>
|
286 |
<?php if(in_array("membership_id", $read_only_fields) && $order_id > 0) { echo $order->membership_id; } else { ?>
|
287 |
<input id="membership_id" name="membership_id" type="text" size="50" value="<?php echo esc_attr($order->membership_id);?>" />
|
@@ -290,7 +247,7 @@
|
|
290 |
</tr>
|
291 |
|
292 |
<tr>
|
293 |
-
<th scope="row" valign="top"><label for="billing_name"
|
294 |
<td>
|
295 |
<?php if(in_array("billing_name", $read_only_fields) && $order_id > 0) { echo $order->billing_name; } else { ?>
|
296 |
<input id="billing_name" name="billing_name" type="text" size="50" value="<?php echo esc_attr($order->billing->name);?>" />
|
@@ -298,35 +255,35 @@
|
|
298 |
</td>
|
299 |
</tr>
|
300 |
<tr>
|
301 |
-
<th scope="row" valign="top"><label for="billing_street"
|
302 |
<td>
|
303 |
<?php if(in_array("billing_street", $read_only_fields) && $order_id > 0) { echo $order->billing_street; } else { ?>
|
304 |
<input id="billing_street" name="billing_street" type="text" size="50" value="<?php echo esc_attr($order->billing->street);?>" /></td>
|
305 |
<?php } ?>
|
306 |
</tr>
|
307 |
<tr>
|
308 |
-
<th scope="row" valign="top"><label for="billing_city"
|
309 |
<td>
|
310 |
<?php if(in_array("billing_city", $read_only_fields) && $order_id > 0) { echo $order->billing_city; } else { ?>
|
311 |
<input id="billing_city" name="billing_city" type="text" size="50" value="<?php echo esc_attr($order->billing->city);?>" /></td>
|
312 |
<?php } ?>
|
313 |
</tr>
|
314 |
<tr>
|
315 |
-
<th scope="row" valign="top"><label for="billing_state"
|
316 |
<td>
|
317 |
<?php if(in_array("billing_state", $read_only_fields) && $order_id > 0) { echo $order->billing_state; } else { ?>
|
318 |
<input id="billing_state" name="billing_state" type="text" size="50" value="<?php echo esc_attr($order->billing->state);?>" /></td>
|
319 |
<?php } ?>
|
320 |
</tr>
|
321 |
<tr>
|
322 |
-
<th scope="row" valign="top"><label for="billing_zip"
|
323 |
<td>
|
324 |
<?php if(in_array("billing_zip", $read_only_fields) && $order_id > 0) { echo $order->billing_zip; } else { ?>
|
325 |
<input id="billing_zip" name="billing_zip" type="text" size="50" value="<?php echo esc_attr($order->billing->zip);?>" /></td>
|
326 |
<?php } ?>
|
327 |
</tr>
|
328 |
<tr>
|
329 |
-
<th scope="row" valign="top"><label for="billing_country"
|
330 |
<td>
|
331 |
<?php if(in_array("billing_country", $read_only_fields) && $order_id > 0) { echo $order->billing_country; } else { ?>
|
332 |
<input id="billing_country" name="billing_country" type="text" size="50" value="<?php echo esc_attr($order->billing->country);?>" />
|
@@ -334,7 +291,7 @@
|
|
334 |
</td>
|
335 |
</tr>
|
336 |
<tr>
|
337 |
-
<th scope="row" valign="top"><label for="billing_phone"
|
338 |
<td>
|
339 |
<?php if(in_array("billing_phone", $read_only_fields) && $order_id > 0) { echo $order->billing_phone; } else { ?>
|
340 |
<input id="billing_phone" name="billing_phone" type="text" size="50" value="<?php echo esc_attr($order->billing->phone);?>" />
|
@@ -343,7 +300,7 @@
|
|
343 |
</tr>
|
344 |
|
345 |
<tr>
|
346 |
-
<th scope="row" valign="top"><label for="subtotal"
|
347 |
<td>
|
348 |
<?php if(in_array("subtotal", $read_only_fields) && $order_id > 0) { echo $order->subtotal; } else { ?>
|
349 |
<input id="subtotal" name="subtotal" type="text" size="10" value="<?php echo esc_attr($order->subtotal);?>" />
|
@@ -351,7 +308,7 @@
|
|
351 |
</td>
|
352 |
</tr>
|
353 |
<tr>
|
354 |
-
<th scope="row" valign="top"><label for="tax"
|
355 |
<td>
|
356 |
<?php if(in_array("tax", $read_only_fields) && $order_id > 0) { echo $order->tax; } else { ?>
|
357 |
<input id="tax" name="tax" type="text" size="10" value="<?php echo esc_attr($order->tax);?>" />
|
@@ -359,7 +316,7 @@
|
|
359 |
</td>
|
360 |
</tr>
|
361 |
<tr>
|
362 |
-
<th scope="row" valign="top"><label for="couponamount"
|
363 |
<td>
|
364 |
<?php if(in_array("couponamount", $read_only_fields) && $order_id > 0) { echo $order->couponamount; } else { ?>
|
365 |
<input id="couponamount" name="couponamount" type="text" size="10" value="<?php echo esc_attr($order->couponamount);?>" />
|
@@ -367,52 +324,52 @@
|
|
367 |
</td>
|
368 |
</tr>
|
369 |
<tr>
|
370 |
-
<th scope="row" valign="top"><label for="total"
|
371 |
<td>
|
372 |
<?php if(in_array("total", $read_only_fields) && $order_id > 0) { echo $order->total; } else { ?>
|
373 |
<input id="total" name="total" type="text" size="10" value="<?php echo esc_attr($order->total);?>" />
|
374 |
<?php } ?>
|
375 |
-
<small class="pmpro_lite"
|
376 |
</td>
|
377 |
</tr>
|
378 |
|
379 |
<tr>
|
380 |
-
<th scope="row" valign="top"><label for="payment_type"
|
381 |
<td>
|
382 |
<?php if(in_array("payment_type", $read_only_fields) && $order_id > 0) { echo $order->payment_type; } else { ?>
|
383 |
<input id="payment_type" name="payment_type" type="text" size="50" value="<?php echo esc_attr($order->payment_type);?>" />
|
384 |
<?php } ?>
|
385 |
-
<small class="pmpro_lite"
|
386 |
</td>
|
387 |
</tr>
|
388 |
<tr>
|
389 |
-
<th scope="row" valign="top"><label for="cardtype"
|
390 |
<td>
|
391 |
<?php if(in_array("cardtype", $read_only_fields) && $order_id > 0) { echo $order->cardtype; } else { ?>
|
392 |
<input id="cardtype" name="cardtype" type="text" size="50" value="<?php echo esc_attr($order->cardtype);?>" />
|
393 |
<?php } ?>
|
394 |
-
<small class="pmpro_lite"
|
395 |
</td>
|
396 |
</tr>
|
397 |
<tr>
|
398 |
-
<th scope="row" valign="top"><label for="accountnumber"
|
399 |
<td>
|
400 |
<?php if(in_array("accountnumber", $read_only_fields) && $order_id > 0) { echo $order->accountnumber; } else { ?>
|
401 |
<input id="accountnumber" name="accountnumber" type="text" size="50" value="<?php echo esc_attr($order->accountnumber);?>" />
|
402 |
<?php } ?>
|
403 |
-
<small class="pmpro_lite"
|
404 |
</td>
|
405 |
</tr>
|
406 |
<?php if(in_array("ExpirationDate", $read_only_fields) && $order_id > 0) { echo $order->ExpirationDate; } else { ?>
|
407 |
<tr>
|
408 |
-
<th scope="row" valign="top"><label for="expirationmonth"
|
409 |
<td>
|
410 |
<input id="expirationmonth" name="expirationmonth" type="text" size="10" value="<?php echo esc_attr($order->expirationmonth);?>" />
|
411 |
<small class="pmpro_lite">MM</small>
|
412 |
</td>
|
413 |
</tr>
|
414 |
<tr>
|
415 |
-
<th scope="row" valign="top"><label for="expirationyear"
|
416 |
<td>
|
417 |
<input id="expirationyear" name="expirationyear" type="text" size="10" value="<?php echo esc_attr($order->expirationyear);?>" />
|
418 |
<small class="pmpro_lite">YYYY</small>
|
@@ -420,7 +377,7 @@
|
|
420 |
</tr>
|
421 |
<?php } ?>
|
422 |
<tr>
|
423 |
-
<th scope="row" valign="top"><label for="status"
|
424 |
<td>
|
425 |
<?php if(in_array("status", $read_only_fields) && $order_id > 0) { echo $order->status; } else { ?>
|
426 |
<?php
|
@@ -441,12 +398,12 @@
|
|
441 |
</tr>
|
442 |
|
443 |
<tr>
|
444 |
-
<th scope="row" valign="top"><label for="gateway"
|
445 |
<td>
|
446 |
<?php if(in_array("gateway", $read_only_fields) && $order_id > 0) { echo $order->gateway; } else { ?>
|
447 |
<select id="gateway" name="gateway" onchange="pmpro_changeGateway(jQuery(this).val());">
|
448 |
-
<option value="" <?php if(empty($order->gateway)) { ?>selected="selected"<?php }
|
449 |
-
<option value="check" <?php if($order->gateway == "check") { ?>selected="selected"<?php }
|
450 |
<option value="stripe" <?php if($order->gateway == "stripe") { ?>selected="selected"<?php } ?>>Stripe</option>
|
451 |
<option value="paypalstandard" <?php if($order->gateway == "paypalstandard") { ?>selected="selected"<?php } ?>>PayPal Standard</option>
|
452 |
<option value="paypalexpress" <?php if($order->gateway == "paypalexpress") { ?>selected="selected"<?php } ?>>PayPal Express</option>
|
@@ -458,38 +415,38 @@
|
|
458 |
</td>
|
459 |
</tr>
|
460 |
<tr>
|
461 |
-
<th scope="row" valign="top"><label for="gateway_environment"
|
462 |
<td>
|
463 |
<?php if(in_array("gateway_environment", $read_only_fields) && $order_id > 0) { echo $order->gateway_environment; } else { ?>
|
464 |
<select name="gateway_environment">
|
465 |
-
<option value="sandbox" <?php if($order->gateway_environment == "sandbox") { ?>selected="selected"<?php }
|
466 |
-
<option value="live" <?php if($order->gateway_environment == "live") { ?>selected="selected"<?php }
|
467 |
</select>
|
468 |
<?php } ?>
|
469 |
</td>
|
470 |
</tr>
|
471 |
|
472 |
<tr>
|
473 |
-
<th scope="row" valign="top"><label for="payment_transaction_id"
|
474 |
<td>
|
475 |
<?php if(in_array("payment_transaction_id", $read_only_fields) && $order_id > 0) { echo $order->payment_transaction_id; } else { ?>
|
476 |
<input id="payment_transaction_id" name="payment_transaction_id" type="text" size="50" value="<?php echo esc_attr($order->payment_transaction_id);?>" />
|
477 |
<?php } ?>
|
478 |
-
<small class="pmpro_lite"
|
479 |
</td>
|
480 |
</tr>
|
481 |
<tr>
|
482 |
-
<th scope="row" valign="top"><label for="subscription_transaction_id"
|
483 |
<td>
|
484 |
-
<?php if(in_array("
|
485 |
<input id="subscription_transaction_id" name="subscription_transaction_id" type="text" size="50" value="<?php echo esc_attr($order->subscription_transaction_id);?>" />
|
486 |
<?php } ?>
|
487 |
-
<small class="pmpro_lite"
|
488 |
</td>
|
489 |
</tr>
|
490 |
|
491 |
<tr>
|
492 |
-
<th scope="row" valign="top"><label for="ts_month"
|
493 |
<td>
|
494 |
<?php if(in_array("timestamp", $read_only_fields) && $order_id > 0) { echo date(option("date_format"), $order->timestamp); } else { ?>
|
495 |
<?php
|
@@ -497,7 +454,7 @@
|
|
497 |
if(!empty($order->timestamp))
|
498 |
$timestamp = $order->timestamp;
|
499 |
else
|
500 |
-
$timestamp =
|
501 |
|
502 |
$year = date("Y", $timestamp);
|
503 |
$month = date("n", $timestamp);
|
@@ -508,7 +465,7 @@
|
|
508 |
for($i = 1; $i < 13; $i++)
|
509 |
{
|
510 |
?>
|
511 |
-
<option value="<?php echo $i?>" <?php if($i == $month) { ?>selected="selected"<?php } ?>><?php echo date("M", strtotime($i . "/1/" . $year
|
512 |
<?php
|
513 |
}
|
514 |
?>
|
@@ -524,7 +481,7 @@
|
|
524 |
if(!empty($affiliates)) {
|
525 |
?>
|
526 |
<tr>
|
527 |
-
<th scope="row" valign="top"><label for="affiliate_id"
|
528 |
<td>
|
529 |
<?php if(in_array("affiliate_id", $read_only_fields) && $order_id > 0) { echo $order->affiliate_id; } else { ?>
|
530 |
<input id="affiliate_id" name="affiliate_id" type="text" size="50" value="<?php echo esc_attr($order->affiliate_id);?>" />
|
@@ -532,7 +489,7 @@
|
|
532 |
</td>
|
533 |
</tr>
|
534 |
<tr>
|
535 |
-
<th scope="row" valign="top"><label for="affiliate_subid"
|
536 |
<td>
|
537 |
<?php if(in_array("affiliate_subid", $read_only_fields) && $order_id > 0) { echo $order->affiliate_subid; } else { ?>
|
538 |
<input id="affiliate_subid" name="affiliate_subid" type="text" size="50" value="<?php echo esc_attr($order->affiliate_subid);?>" />
|
@@ -542,7 +499,7 @@
|
|
542 |
<?php } ?>
|
543 |
|
544 |
<tr>
|
545 |
-
<th scope="row" valign="top"><label for="notes"
|
546 |
<td>
|
547 |
<?php if(in_array("notes", $read_only_fields) && $order_id > 0) { echo $order->notes; } else { ?>
|
548 |
<textarea id="notes" name="notes" rows="5" cols="80"><?php echo esc_textarea($order->notes);?></textarea>
|
@@ -557,8 +514,8 @@
|
|
557 |
|
558 |
<p class="submit topborder">
|
559 |
<input name="order" type="hidden" value="<?php if(!empty($order->id)) echo $order->id; else echo $order_id;?>" />
|
560 |
-
<input name="save" type="submit" class="button-primary" value="
|
561 |
-
<input name="cancel" type="button"
|
562 |
</p>
|
563 |
|
564 |
</form>
|
@@ -567,219 +524,26 @@
|
|
567 |
|
568 |
<form id="posts-filter" method="get" action="">
|
569 |
<h2>
|
570 |
-
|
571 |
-
<a href="admin.php?page=pmpro-orders&order=-1" class="add-new-h2">+
|
572 |
-
|
573 |
-
|
574 |
-
//build the export URL
|
575 |
-
$export_url = admin_url('admin-ajax.php') . "?action=orders_csv";
|
576 |
-
$url_params = array(
|
577 |
-
"filter"=>$filter,
|
578 |
-
"s"=>$s,
|
579 |
-
"l"=>$l,
|
580 |
-
"start-month"=>$start_month,
|
581 |
-
"start-day"=>$start_day,
|
582 |
-
"start-year"=>$start_year,
|
583 |
-
"end-month"=>$end_month,
|
584 |
-
"end-day"=>$end_day,
|
585 |
-
"end-year"=>$end_year,
|
586 |
-
"predefined-date"=>$predefined_date,
|
587 |
-
"status"=>$status
|
588 |
-
);
|
589 |
-
$export_url = add_query_arg($url_params, $export_url);
|
590 |
-
?>
|
591 |
-
<a target="_blank" href="<?php echo $export_url;?>" class="add-new-h2"><?php _e('Export to CSV', 'pmpro');?></a>
|
592 |
-
</h2>
|
593 |
-
|
594 |
-
|
595 |
|
596 |
<?php if(!empty($pmpro_msg)) { ?>
|
597 |
<div id="message" class="<?php if($pmpro_msgt == "success") echo "updated fade"; else echo "error"; ?>"><p><?php echo $pmpro_msg?></p></div>
|
598 |
<?php } ?>
|
599 |
|
600 |
-
|
601 |
<ul class="subsubsub">
|
602 |
<li>
|
603 |
-
<?php _ex('Show', 'Dropdown label, e.g. Show Daily Orders for January', 'pmpro')?>
|
604 |
-
<select id="filter" name="filter">
|
605 |
-
<option value="all" <?php selected($filter, "all");?>><?php _e('All', 'pmpro');?></option>
|
606 |
-
<option value="within-a-date-range" <?php selected($filter, "within-a-date-range");?>><?php _e('Within a Date Range', 'pmpro');?></option>
|
607 |
-
<option value="predefined-date-range" <?php selected($filter, "predefined-date-range");?>><?php _e('Predefined Date Range', 'pmpro');?></option>
|
608 |
-
<option value="within-a-level" <?php selected($filter, "within-a-level");?>><?php _e('Within a Level', 'pmpro');?></option>
|
609 |
-
<option value="within-a-status" <?php selected($filter, "within-a-status");?>><?php _e('Within a Status', 'pmpro');?></option>
|
610 |
-
</select>
|
611 |
-
|
612 |
-
<span id="from"><?php _ex('From', 'Dropdown label', 'pmpro')?></span>
|
613 |
-
|
614 |
-
<select id="start-month" name="start-month">
|
615 |
-
<?php for($i = 1; $i < 13; $i++) { ?>
|
616 |
-
<option value="<?php echo $i;?>" <?php selected($start_month, $i);?>><?php echo date("F", mktime(0, 0, 0, $i));?></option>
|
617 |
-
<?php } ?>
|
618 |
-
</select>
|
619 |
-
|
620 |
-
<input id='start-day' name="start-day" type="text" size="2" value="<?php echo $start_day?>" />
|
621 |
-
<input id='start-year' name="start-year" type="text" size="4" value="<?php echo $start_year?>" />
|
622 |
-
|
623 |
-
|
624 |
-
<span id="to"><?php _ex('To', 'Dropdown label', 'pmpro')?></span>
|
625 |
-
|
626 |
-
<select id="end-month" name="end-month">
|
627 |
-
<?php for($i = 1; $i < 13; $i++) { ?>
|
628 |
-
<option value="<?php echo $i;?>" <?php selected($end_month, $i);?>><?php echo date("F", mktime(0, 0, 0, $i));?></option>
|
629 |
-
<?php } ?>
|
630 |
-
</select>
|
631 |
-
|
632 |
-
|
633 |
-
<input id='end-day' name="end-day" type="text" size="2" value="<?php echo $end_day?>" />
|
634 |
-
<input id='end-year' name="end-year" type="text" size="4" value="<?php echo $end_year?>" />
|
635 |
-
|
636 |
-
<span id="filterby"><?php _ex('filter by ', 'Dropdown label', 'pmpro')?></span>
|
637 |
-
|
638 |
-
<select id="predefined-date" name="predefined-date">
|
639 |
-
|
640 |
-
<option value="<?php echo "This Month";?>" <?php selected($predefined_date, "This Month");?>><?php echo "This Month";?></option>
|
641 |
-
<option value="<?php echo "Last Month";?>" <?php selected($predefined_date, "Last Month");?>><?php echo "Last Month";?></option>
|
642 |
-
<option value="<?php echo "This Year";?>" <?php selected($predefined_date, "This Year");?>><?php echo "This Year";?></option>
|
643 |
-
<option value="<?php echo "Last Year";?>" <?php selected($predefined_date, "Last Year");?>><?php echo "Last Year";?></option>
|
644 |
|
645 |
-
</select>
|
646 |
-
|
647 |
-
<?php
|
648 |
-
//Note: only orders belonging to current levels can be filtered. There is no option for orders belonging to deleted levels
|
649 |
-
$levels = pmpro_getAllLevels();
|
650 |
-
|
651 |
-
?>
|
652 |
-
<select id="l" name="l">
|
653 |
-
<?php foreach($levels as $level) { ?>
|
654 |
-
<option value="<?php echo $level->id;?>" <?php selected($l, $level->id);?>><?php echo $level->name;?></option>
|
655 |
-
<?php } ?>
|
656 |
-
|
657 |
-
</select>
|
658 |
-
|
659 |
-
<?php
|
660 |
-
$statuses = array();
|
661 |
-
$default_statuses = array("", "success", "cancelled", "review", "token", "refunded");
|
662 |
-
$used_statuses = $wpdb->get_col("SELECT DISTINCT(status) FROM $wpdb->pmpro_membership_orders");
|
663 |
-
$statuses = array_unique(array_merge($default_statuses, $used_statuses));
|
664 |
-
asort($statuses);
|
665 |
-
$statuses = apply_filters("pmpro_order_statuses", $statuses);
|
666 |
-
?>
|
667 |
-
<select id="status" name="status">
|
668 |
-
<?php foreach($statuses as $the_status) { ?>
|
669 |
-
<option value="<?php echo esc_attr($the_status);?>" <?php selected($the_status, $status);?>><?php echo $the_status;?></option>
|
670 |
-
<?php } ?>
|
671 |
-
</select>
|
672 |
-
|
673 |
-
|
674 |
-
<input id="submit" type="submit" value="<?php _ex('Filter', 'Submit button value.', 'pmpro');?>" />
|
675 |
</li>
|
676 |
</ul>
|
677 |
-
|
678 |
-
<script>
|
679 |
-
//update month/year when period dropdown is changed
|
680 |
-
jQuery(document).ready(function() {
|
681 |
-
jQuery('#filter').change(function() {
|
682 |
-
pmpro_ShowMonthOrYear();
|
683 |
-
});
|
684 |
-
});
|
685 |
-
|
686 |
-
function pmpro_ShowMonthOrYear()
|
687 |
-
{
|
688 |
-
var filter = jQuery('#filter').val();
|
689 |
-
if(filter == 'all')
|
690 |
-
{
|
691 |
-
jQuery('#start-month').hide();
|
692 |
-
jQuery('#start-day').hide();
|
693 |
-
jQuery('#start-year').hide();
|
694 |
-
jQuery('#end-month').hide();
|
695 |
-
jQuery('#end-day').hide();
|
696 |
-
jQuery('#end-year').hide();
|
697 |
-
jQuery('#predefined-date').hide();
|
698 |
-
jQuery('#status').hide();
|
699 |
-
jQuery('#l').hide();
|
700 |
-
jQuery('#from').hide();
|
701 |
-
jQuery('#to').hide();
|
702 |
-
jQuery('#submit').show();
|
703 |
-
jQuery('#filterby').hide();
|
704 |
-
}
|
705 |
-
else if(filter == 'within-a-date-range')
|
706 |
-
{
|
707 |
-
jQuery('#start-month').show();
|
708 |
-
jQuery('#start-day').show();
|
709 |
-
jQuery('#start-year').show();
|
710 |
-
jQuery('#end-month').show();
|
711 |
-
jQuery('#end-day').show();
|
712 |
-
jQuery('#end-year').show();
|
713 |
-
jQuery('#predefined-date').hide();
|
714 |
-
jQuery('#status').hide();
|
715 |
-
jQuery('#l').hide();
|
716 |
-
jQuery('#submit').show();
|
717 |
-
jQuery('#from').show();
|
718 |
-
jQuery('#to').show();
|
719 |
-
jQuery('#filterby').hide();
|
720 |
-
}
|
721 |
-
else if(filter == 'predefined-date-range')
|
722 |
-
{
|
723 |
-
jQuery('#start-month').hide();
|
724 |
-
jQuery('#start-day').hide();
|
725 |
-
jQuery('#start-year').hide();
|
726 |
-
jQuery('#end-month').hide();
|
727 |
-
jQuery('#end-day').hide();
|
728 |
-
jQuery('#end-year').hide();
|
729 |
-
jQuery('#predefined-date').show();
|
730 |
-
jQuery('#status').hide();
|
731 |
-
jQuery('#l').hide();
|
732 |
-
jQuery('#submit').show();
|
733 |
-
jQuery('#from').hide();
|
734 |
-
jQuery('#to').hide();
|
735 |
-
jQuery('#filterby').show();
|
736 |
-
}
|
737 |
-
else if(filter == 'within-a-level')
|
738 |
-
{
|
739 |
-
jQuery('#start-month').hide();
|
740 |
-
jQuery('#start-day').hide();
|
741 |
-
jQuery('#start-year').hide();
|
742 |
-
jQuery('#end-month').hide();
|
743 |
-
jQuery('#end-day').hide();
|
744 |
-
jQuery('#end-year').hide();
|
745 |
-
jQuery('#predefined-date').hide();
|
746 |
-
jQuery('#status').hide();
|
747 |
-
jQuery('#l').show();
|
748 |
-
jQuery('#submit').show();
|
749 |
-
jQuery('#from').hide();
|
750 |
-
jQuery('#to').hide();
|
751 |
-
jQuery('#filterby').show();
|
752 |
-
}
|
753 |
-
else if(filter == 'within-a-status')
|
754 |
-
{
|
755 |
-
jQuery('#start-month').hide();
|
756 |
-
jQuery('#start-day').hide();
|
757 |
-
jQuery('#start-year').hide();
|
758 |
-
jQuery('#end-month').hide();
|
759 |
-
jQuery('#end-day').hide();
|
760 |
-
jQuery('#end-year').hide();
|
761 |
-
jQuery('#predefined-date').hide();
|
762 |
-
jQuery('#status').show();
|
763 |
-
jQuery('#l').hide();
|
764 |
-
jQuery('#submit').show();
|
765 |
-
jQuery('#from').hide();
|
766 |
-
jQuery('#to').hide();
|
767 |
-
jQuery('#filterby').show();
|
768 |
-
}
|
769 |
-
}
|
770 |
-
|
771 |
-
pmpro_ShowMonthOrYear();
|
772 |
-
|
773 |
-
|
774 |
-
</script>
|
775 |
-
|
776 |
<p class="search-box">
|
777 |
-
<label class="hidden" for="post-search-input"
|
778 |
<input type="hidden" name="page" value="pmpro-orders" />
|
779 |
<input id="post-search-input" type="text" value="<?php echo $s?>" name="s"/>
|
780 |
-
<input class="button" type="submit" value="
|
781 |
</p>
|
782 |
-
|
783 |
<?php
|
784 |
//some vars for the search
|
785 |
if(isset($_REQUEST['pn']))
|
@@ -795,62 +559,6 @@
|
|
795 |
$end = $pn * $limit;
|
796 |
$start = $end - $limit;
|
797 |
|
798 |
-
//filters
|
799 |
-
if($filter == "all" || !$filter)
|
800 |
-
$condition = "1=1";
|
801 |
-
elseif($filter == "within-a-date-range")
|
802 |
-
{
|
803 |
-
$start_date = $start_year."-".$start_month."-".$start_day;
|
804 |
-
$end_date = $end_year."-".$end_month."-".$end_day;
|
805 |
-
|
806 |
-
//add times to dates
|
807 |
-
$start_date = $start_date . " 00:00:00";
|
808 |
-
$end_date = $end_date . " 23:59:59";
|
809 |
-
|
810 |
-
$condition = "timestamp BETWEEN '".$start_date."' AND '".$end_date."'";
|
811 |
-
}
|
812 |
-
elseif($filter == "predefined-date-range")
|
813 |
-
{
|
814 |
-
if($predefined_date == "Last Month")
|
815 |
-
{
|
816 |
-
$start_date = date("Y-m-d", strtotime("first day of last month", current_time("timestamp")));
|
817 |
-
$end_date = date("Y-m-d", strtotime("last day of last month", current_time("timestamp")));
|
818 |
-
}
|
819 |
-
elseif($predefined_date == "This Month")
|
820 |
-
{
|
821 |
-
$start_date = date("Y-m-d", strtotime("first day of this month", current_time("timestamp")));
|
822 |
-
$end_date = date("Y-m-d", strtotime("last day of this month", current_time("timestamp")));
|
823 |
-
}
|
824 |
-
elseif($predefined_date == "This Year")
|
825 |
-
{
|
826 |
-
$year = date('Y');
|
827 |
-
$start_date = date("Y-m-d", strtotime("first day of January $year", current_time("timestamp")));
|
828 |
-
$end_date = date("Y-m-d", strtotime("last day of December $year", current_time("timestamp")));
|
829 |
-
}
|
830 |
-
|
831 |
-
elseif($predefined_date == "Last Year")
|
832 |
-
{
|
833 |
-
$year = date('Y') - 1;
|
834 |
-
$start_date = date("Y-m-d", strtotime("first day of January $year", current_time("timestamp")));
|
835 |
-
$end_date = date("Y-m-d", strtotime("last day of December $year", current_time("timestamp")));
|
836 |
-
}
|
837 |
-
|
838 |
-
//add times to dates
|
839 |
-
$start_date = $start_date . " 00:00:00";
|
840 |
-
$end_date = $end_date . " 23:59:59";
|
841 |
-
|
842 |
-
$condition = "timestamp BETWEEN '".$start_date."' AND '".$end_date."'";
|
843 |
-
}
|
844 |
-
elseif($filter == "within-a-level")
|
845 |
-
{
|
846 |
-
$condition = "membership_id = $l";
|
847 |
-
}
|
848 |
-
elseif($filter == "within-a-status")
|
849 |
-
{
|
850 |
-
$condition = "status = '$status' ";
|
851 |
-
}
|
852 |
-
|
853 |
-
//string search
|
854 |
if($s)
|
855 |
{
|
856 |
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS o.id FROM $wpdb->pmpro_membership_orders o LEFT JOIN $wpdb->users u ON o.user_id = u.ID LEFT JOIN $wpdb->pmpro_membership_levels l ON o.membership_id = l.id ";
|
@@ -869,45 +577,41 @@
|
|
869 |
$fields = apply_filters("pmpro_orders_search_fields", $fields);
|
870 |
|
871 |
foreach($fields as $field)
|
872 |
-
$sqlQuery .= " OR " . $field . " LIKE '%" .
|
873 |
$sqlQuery .= ") ";
|
874 |
-
|
875 |
-
$sqlQuery .= "AND " . $condition . " ";
|
876 |
-
|
877 |
$sqlQuery .= "GROUP BY o.id ORDER BY o.id DESC, o.timestamp DESC ";
|
878 |
}
|
879 |
else
|
880 |
{
|
881 |
-
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS id FROM $wpdb->pmpro_membership_orders
|
882 |
}
|
883 |
|
884 |
$sqlQuery .= "LIMIT $start, $limit";
|
885 |
|
886 |
$order_ids = $wpdb->get_col($sqlQuery);
|
887 |
-
|
888 |
$totalrows = $wpdb->get_var("SELECT FOUND_ROWS() as found_rows");
|
889 |
|
890 |
if($order_ids)
|
891 |
{
|
892 |
?>
|
893 |
-
<p class="clear"><?php
|
894 |
<?php
|
895 |
}
|
896 |
?>
|
897 |
<table class="widefat">
|
898 |
<thead>
|
899 |
<tr class="thead">
|
900 |
-
<th
|
901 |
-
<th
|
902 |
-
<th
|
903 |
<?php do_action("pmpro_orders_extra_cols_header", $order_ids);?>
|
904 |
-
<th
|
905 |
-
<th
|
906 |
-
<th
|
907 |
-
<th
|
908 |
-
<th
|
909 |
-
<th
|
910 |
-
<th
|
911 |
<th></th>
|
912 |
<th></th>
|
913 |
<th></th>
|
@@ -930,7 +634,7 @@
|
|
930 |
<?php if(!empty($order->user)) { ?>
|
931 |
<a href="user-edit.php?user_id=<?php echo $order->user->ID?>"><?php echo $order->user->user_login?></a>
|
932 |
<?php } else { ?>
|
933 |
-
[
|
934 |
<?php } ?>
|
935 |
</td>
|
936 |
<?php do_action("pmpro_orders_extra_cols_body", $order);?>
|
@@ -951,20 +655,20 @@
|
|
951 |
</td>
|
952 |
<td><?php echo $order->gateway;?><?php if($order->gateway_environment == "test") echo "(test)";?></td>
|
953 |
<td>
|
954 |
-
|
955 |
<br />
|
956 |
-
|
957 |
</td>
|
958 |
<td><?php echo $order->status;?></td>
|
959 |
<td><?php echo date(get_option('date_format'), $order->timestamp);?></td>
|
960 |
<td align="center">
|
961 |
-
<a href="admin.php?page=pmpro-orders&order=<?php echo $order->id;?>"
|
962 |
</td>
|
963 |
<td align="center">
|
964 |
-
<a href="admin.php?page=pmpro-orders&order=-1©=<?php echo $order->id;?>"
|
965 |
</td>
|
966 |
<td align="center">
|
967 |
-
<a href="javascript:askfirst('
|
968 |
</td>
|
969 |
</tr>
|
970 |
<?php
|
@@ -974,7 +678,7 @@
|
|
974 |
{
|
975 |
?>
|
976 |
<tr>
|
977 |
-
<td colspan="9"><p
|
978 |
</tr>
|
979 |
<?php
|
980 |
}
|
@@ -984,13 +688,9 @@
|
|
984 |
</form>
|
985 |
|
986 |
<?php
|
987 |
-
|
988 |
-
$pagination_url = add_query_arg($url_params, get_admin_url(NULL, "/admin.php?page=pmpro-orders"));
|
989 |
-
echo pmpro_getPaginationString($pn, $totalrows, $limit, 1, $pagination_url, "&limit=$limit&pn=");
|
990 |
?>
|
991 |
|
992 |
<?php } ?>
|
993 |
|
994 |
-
|
995 |
-
require_once(dirname(__FILE__) . "/admin_footer.php");
|
996 |
-
?>
|
2 |
//only admins can get this
|
3 |
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_orders")))
|
4 |
{
|
5 |
+
die("You do not have permissions to perform this action.");
|
6 |
}
|
7 |
|
8 |
//vars
|
16 |
$l = $_REQUEST['l'];
|
17 |
else
|
18 |
$l = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
20 |
//deleting?
|
21 |
if(!empty($_REQUEST['delete']))
|
23 |
$dorder = new MemberOrder(intval($_REQUEST['delete']));
|
24 |
if($dorder->deleteMe())
|
25 |
{
|
26 |
+
$pmpro_msg = "Order deleted successfully.";
|
27 |
$pmpro_msgt = "success";
|
28 |
}
|
29 |
else
|
30 |
{
|
31 |
+
$pmpro_msg = "Error deleting order.";
|
32 |
$pmpro_msgt = "error";
|
33 |
}
|
34 |
}
|
35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
//this array stores fields that should be read only
|
37 |
$read_only_fields = apply_filters("pmpro_orders_read_only_fields", array("code", "payment_transaction_id", "subscription_transaction_id"));
|
38 |
|
116 |
//handle timestamp
|
117 |
if($order->updateTimestamp($_POST['ts_year'], $_POST['ts_month'], $_POST['ts_day']) !== false)
|
118 |
{
|
119 |
+
$pmpro_msg = "Order saved successfully.";
|
120 |
$pmpro_msgt = "success";
|
121 |
}
|
122 |
else
|
123 |
{
|
124 |
+
$pmpro_msg = "Error updating order timestamp.";
|
125 |
$pmpro_msgt = "error";
|
126 |
}
|
127 |
}
|
128 |
else
|
129 |
{
|
130 |
+
$pmpro_msg = "Error saving order.";
|
131 |
$pmpro_msgt = "error";
|
132 |
}
|
133 |
}
|
185 |
}
|
186 |
}
|
187 |
|
|
|
188 |
?>
|
189 |
+
<div class="wrap pmpro_admin">
|
190 |
+
<div class="pmpro_banner">
|
191 |
+
<a class="pmpro_logo" title="Paid Memberships Pro - Membership Plugin for WordPress" target="_blank" href="<?php echo pmpro_https_filter("http://www.paidmembershipspro.com")?>"><img src="<?php echo PMPRO_URL?>/images/PaidMembershipsPro.gif" width="350" height="45" border="0" alt="Paid Memberships Pro(c) - All Rights Reserved" /></a>
|
192 |
+
<div class="pmpro_tagline">Membership Plugin for WordPress</div>
|
193 |
+
|
194 |
+
<div class="pmpro_meta"><a href="<?php echo pmpro_https_filter("http://www.paidmembershipspro.com")?>">Plugin Support</a> | <a href="http://www.paidmembershipspro.com/forums/">User Forum</a> | <strong>Version <?php echo PMPRO_VERSION?></strong></div>
|
195 |
+
</div>
|
196 |
+
<br style="clear:both;" />
|
197 |
|
198 |
<?php if(!empty($order)) { ?>
|
199 |
|
200 |
<h2>
|
201 |
<?php if(!empty($order->id)) { ?>
|
202 |
+
Order #<?php echo $order->id?>: <?php echo $order->code?>
|
203 |
<?php } else { ?>
|
204 |
+
New Order
|
205 |
<?php } ?>
|
206 |
</h2>
|
207 |
|
215 |
<tbody>
|
216 |
<tr>
|
217 |
<th scope="row" valign="top"><label>ID:</label></th>
|
218 |
+
<td><?php if(!empty($order->id)) echo $order->id; else echo "This will be generated when you save.";?></td>
|
219 |
</tr>
|
220 |
|
221 |
<tr>
|
222 |
+
<th scope="row" valign="top"><label for="code">Code:</label></th>
|
223 |
<td>
|
224 |
<?php if(in_array("code", $read_only_fields)) { echo $order->code; } else { ?>
|
225 |
<input id="code" name="code" type="text" size="50" value="<?php echo esc_attr($order->code);?>" />
|
226 |
<?php } ?>
|
227 |
+
<?php if($order_id < 0) { ?><small class="pmpro_lite">Randomly generated for you.</small><?php } ?>
|
228 |
</td>
|
229 |
</tr>
|
230 |
|
231 |
<tr>
|
232 |
+
<th scope="row" valign="top"><label for="user_id">User ID:</label></th>
|
233 |
<td>
|
234 |
<?php if(in_array("user_id", $read_only_fields) && $order_id > 0) { echo $order->user_id; } else { ?>
|
235 |
<input id="user_id" name="user_id" type="text" size="50" value="<?php echo esc_attr($order->user_id);?>" />
|
238 |
</tr>
|
239 |
|
240 |
<tr>
|
241 |
+
<th scope="row" valign="top"><label for="membership_id">Membership Level ID:</label></th>
|
242 |
<td>
|
243 |
<?php if(in_array("membership_id", $read_only_fields) && $order_id > 0) { echo $order->membership_id; } else { ?>
|
244 |
<input id="membership_id" name="membership_id" type="text" size="50" value="<?php echo esc_attr($order->membership_id);?>" />
|
247 |
</tr>
|
248 |
|
249 |
<tr>
|
250 |
+
<th scope="row" valign="top"><label for="billing_name">Billing Name:</label></th>
|
251 |
<td>
|
252 |
<?php if(in_array("billing_name", $read_only_fields) && $order_id > 0) { echo $order->billing_name; } else { ?>
|
253 |
<input id="billing_name" name="billing_name" type="text" size="50" value="<?php echo esc_attr($order->billing->name);?>" />
|
255 |
</td>
|
256 |
</tr>
|
257 |
<tr>
|
258 |
+
<th scope="row" valign="top"><label for="billing_street">Billing Street:</label></th>
|
259 |
<td>
|
260 |
<?php if(in_array("billing_street", $read_only_fields) && $order_id > 0) { echo $order->billing_street; } else { ?>
|
261 |
<input id="billing_street" name="billing_street" type="text" size="50" value="<?php echo esc_attr($order->billing->street);?>" /></td>
|
262 |
<?php } ?>
|
263 |
</tr>
|
264 |
<tr>
|
265 |
+
<th scope="row" valign="top"><label for="billing_city">Billing City:</label></th>
|
266 |
<td>
|
267 |
<?php if(in_array("billing_city", $read_only_fields) && $order_id > 0) { echo $order->billing_city; } else { ?>
|
268 |
<input id="billing_city" name="billing_city" type="text" size="50" value="<?php echo esc_attr($order->billing->city);?>" /></td>
|
269 |
<?php } ?>
|
270 |
</tr>
|
271 |
<tr>
|
272 |
+
<th scope="row" valign="top"><label for="billing_state">Billing State:</label></th>
|
273 |
<td>
|
274 |
<?php if(in_array("billing_state", $read_only_fields) && $order_id > 0) { echo $order->billing_state; } else { ?>
|
275 |
<input id="billing_state" name="billing_state" type="text" size="50" value="<?php echo esc_attr($order->billing->state);?>" /></td>
|
276 |
<?php } ?>
|
277 |
</tr>
|
278 |
<tr>
|
279 |
+
<th scope="row" valign="top"><label for="billing_zip">Billing Postal Code:</label></th>
|
280 |
<td>
|
281 |
<?php if(in_array("billing_zip", $read_only_fields) && $order_id > 0) { echo $order->billing_zip; } else { ?>
|
282 |
<input id="billing_zip" name="billing_zip" type="text" size="50" value="<?php echo esc_attr($order->billing->zip);?>" /></td>
|
283 |
<?php } ?>
|
284 |
</tr>
|
285 |
<tr>
|
286 |
+
<th scope="row" valign="top"><label for="billing_country">Billing Country:</label></th>
|
287 |
<td>
|
288 |
<?php if(in_array("billing_country", $read_only_fields) && $order_id > 0) { echo $order->billing_country; } else { ?>
|
289 |
<input id="billing_country" name="billing_country" type="text" size="50" value="<?php echo esc_attr($order->billing->country);?>" />
|
291 |
</td>
|
292 |
</tr>
|
293 |
<tr>
|
294 |
+
<th scope="row" valign="top"><label for="billing_phone">Billing Phone:</label></th>
|
295 |
<td>
|
296 |
<?php if(in_array("billing_phone", $read_only_fields) && $order_id > 0) { echo $order->billing_phone; } else { ?>
|
297 |
<input id="billing_phone" name="billing_phone" type="text" size="50" value="<?php echo esc_attr($order->billing->phone);?>" />
|
300 |
</tr>
|
301 |
|
302 |
<tr>
|
303 |
+
<th scope="row" valign="top"><label for="subtotal">Sub Total:</label></th>
|
304 |
<td>
|
305 |
<?php if(in_array("subtotal", $read_only_fields) && $order_id > 0) { echo $order->subtotal; } else { ?>
|
306 |
<input id="subtotal" name="subtotal" type="text" size="10" value="<?php echo esc_attr($order->subtotal);?>" />
|
308 |
</td>
|
309 |
</tr>
|
310 |
<tr>
|
311 |
+
<th scope="row" valign="top"><label for="tax">Tax:</label></th>
|
312 |
<td>
|
313 |
<?php if(in_array("tax", $read_only_fields) && $order_id > 0) { echo $order->tax; } else { ?>
|
314 |
<input id="tax" name="tax" type="text" size="10" value="<?php echo esc_attr($order->tax);?>" />
|
316 |
</td>
|
317 |
</tr>
|
318 |
<tr>
|
319 |
+
<th scope="row" valign="top"><label for="couponamount">Coupon Amount:</label></th>
|
320 |
<td>
|
321 |
<?php if(in_array("couponamount", $read_only_fields) && $order_id > 0) { echo $order->couponamount; } else { ?>
|
322 |
<input id="couponamount" name="couponamount" type="text" size="10" value="<?php echo esc_attr($order->couponamount);?>" />
|
324 |
</td>
|
325 |
</tr>
|
326 |
<tr>
|
327 |
+
<th scope="row" valign="top"><label for="total">Total:</label></th>
|
328 |
<td>
|
329 |
<?php if(in_array("total", $read_only_fields) && $order_id > 0) { echo $order->total; } else { ?>
|
330 |
<input id="total" name="total" type="text" size="10" value="<?php echo esc_attr($order->total);?>" />
|
331 |
<?php } ?>
|
332 |
+
<small class="pmpro_lite">Should be subtotal + tax - couponamount.</small>
|
333 |
</td>
|
334 |
</tr>
|
335 |
|
336 |
<tr>
|
337 |
+
<th scope="row" valign="top"><label for="payment_type">Payment Type:</label></th>
|
338 |
<td>
|
339 |
<?php if(in_array("payment_type", $read_only_fields) && $order_id > 0) { echo $order->payment_type; } else { ?>
|
340 |
<input id="payment_type" name="payment_type" type="text" size="50" value="<?php echo esc_attr($order->payment_type);?>" />
|
341 |
<?php } ?>
|
342 |
+
<small class="pmpro_lite">e.g. PayPal Express, PayPal Standard, Credit Card.</small>
|
343 |
</td>
|
344 |
</tr>
|
345 |
<tr>
|
346 |
+
<th scope="row" valign="top"><label for="cardtype">Card Type:</label></th>
|
347 |
<td>
|
348 |
<?php if(in_array("cardtype", $read_only_fields) && $order_id > 0) { echo $order->cardtype; } else { ?>
|
349 |
<input id="cardtype" name="cardtype" type="text" size="50" value="<?php echo esc_attr($order->cardtype);?>" />
|
350 |
<?php } ?>
|
351 |
+
<small class="pmpro_lite">e.g. Visa, MasterCard, AMEX, etc</small>
|
352 |
</td>
|
353 |
</tr>
|
354 |
<tr>
|
355 |
+
<th scope="row" valign="top"><label for="accountnumber">Account Number:</label></th>
|
356 |
<td>
|
357 |
<?php if(in_array("accountnumber", $read_only_fields) && $order_id > 0) { echo $order->accountnumber; } else { ?>
|
358 |
<input id="accountnumber" name="accountnumber" type="text" size="50" value="<?php echo esc_attr($order->accountnumber);?>" />
|
359 |
<?php } ?>
|
360 |
+
<small class="pmpro_lite">Obscure all but last 4 digits.</small>
|
361 |
</td>
|
362 |
</tr>
|
363 |
<?php if(in_array("ExpirationDate", $read_only_fields) && $order_id > 0) { echo $order->ExpirationDate; } else { ?>
|
364 |
<tr>
|
365 |
+
<th scope="row" valign="top"><label for="expirationmonth">Expiration Month:</label></th>
|
366 |
<td>
|
367 |
<input id="expirationmonth" name="expirationmonth" type="text" size="10" value="<?php echo esc_attr($order->expirationmonth);?>" />
|
368 |
<small class="pmpro_lite">MM</small>
|
369 |
</td>
|
370 |
</tr>
|
371 |
<tr>
|
372 |
+
<th scope="row" valign="top"><label for="expirationyear">Expiration Year:</label></th>
|
373 |
<td>
|
374 |
<input id="expirationyear" name="expirationyear" type="text" size="10" value="<?php echo esc_attr($order->expirationyear);?>" />
|
375 |
<small class="pmpro_lite">YYYY</small>
|
377 |
</tr>
|
378 |
<?php } ?>
|
379 |
<tr>
|
380 |
+
<th scope="row" valign="top"><label for="status">Status:</label></th>
|
381 |
<td>
|
382 |
<?php if(in_array("status", $read_only_fields) && $order_id > 0) { echo $order->status; } else { ?>
|
383 |
<?php
|
398 |
</tr>
|
399 |
|
400 |
<tr>
|
401 |
+
<th scope="row" valign="top"><label for="gateway">Gateway:</label></th>
|
402 |
<td>
|
403 |
<?php if(in_array("gateway", $read_only_fields) && $order_id > 0) { echo $order->gateway; } else { ?>
|
404 |
<select id="gateway" name="gateway" onchange="pmpro_changeGateway(jQuery(this).val());">
|
405 |
+
<option value="" <?php if(empty($order->gateway)) { ?>selected="selected"<?php } ?>>Testing Only</option>
|
406 |
+
<option value="check" <?php if($order->gateway == "check") { ?>selected="selected"<?php } ?>>Pay by Check</option>
|
407 |
<option value="stripe" <?php if($order->gateway == "stripe") { ?>selected="selected"<?php } ?>>Stripe</option>
|
408 |
<option value="paypalstandard" <?php if($order->gateway == "paypalstandard") { ?>selected="selected"<?php } ?>>PayPal Standard</option>
|
409 |
<option value="paypalexpress" <?php if($order->gateway == "paypalexpress") { ?>selected="selected"<?php } ?>>PayPal Express</option>
|
415 |
</td>
|
416 |
</tr>
|
417 |
<tr>
|
418 |
+
<th scope="row" valign="top"><label for="gateway_environment">Gateway Environment:</label></th>
|
419 |
<td>
|
420 |
<?php if(in_array("gateway_environment", $read_only_fields) && $order_id > 0) { echo $order->gateway_environment; } else { ?>
|
421 |
<select name="gateway_environment">
|
422 |
+
<option value="sandbox" <?php if($order->gateway_environment == "sandbox") { ?>selected="selected"<?php } ?>>Sandbox/Testing</option>
|
423 |
+
<option value="live" <?php if($order->gateway_environment == "live") { ?>selected="selected"<?php } ?>>Live/Production</option>
|
424 |
</select>
|
425 |
<?php } ?>
|
426 |
</td>
|
427 |
</tr>
|
428 |
|
429 |
<tr>
|
430 |
+
<th scope="row" valign="top"><label for="payment_transaction_id">Payment Transaction ID:</label></th>
|
431 |
<td>
|
432 |
<?php if(in_array("payment_transaction_id", $read_only_fields) && $order_id > 0) { echo $order->payment_transaction_id; } else { ?>
|
433 |
<input id="payment_transaction_id" name="payment_transaction_id" type="text" size="50" value="<?php echo esc_attr($order->payment_transaction_id);?>" />
|
434 |
<?php } ?>
|
435 |
+
<small class="pmpro_lite">Generated by the gateway. Useful to cross reference orders.</small>
|
436 |
</td>
|
437 |
</tr>
|
438 |
<tr>
|
439 |
+
<th scope="row" valign="top"><label for="subscription_transaction_id">Subscription Transaction ID:</label></th>
|
440 |
<td>
|
441 |
+
<?php if(in_array("code", $read_only_fields) && $order_id > 0) { echo $order->code; } else { ?>
|
442 |
<input id="subscription_transaction_id" name="subscription_transaction_id" type="text" size="50" value="<?php echo esc_attr($order->subscription_transaction_id);?>" />
|
443 |
<?php } ?>
|
444 |
+
<small class="pmpro_lite">Generated by the gateway. Useful to cross reference subscriptions.</small>
|
445 |
</td>
|
446 |
</tr>
|
447 |
|
448 |
<tr>
|
449 |
+
<th scope="row" valign="top"><label for="ts_month">Date:</label></th>
|
450 |
<td>
|
451 |
<?php if(in_array("timestamp", $read_only_fields) && $order_id > 0) { echo date(option("date_format"), $order->timestamp); } else { ?>
|
452 |
<?php
|
454 |
if(!empty($order->timestamp))
|
455 |
$timestamp = $order->timestamp;
|
456 |
else
|
457 |
+
$timestamp = time();
|
458 |
|
459 |
$year = date("Y", $timestamp);
|
460 |
$month = date("n", $timestamp);
|
465 |
for($i = 1; $i < 13; $i++)
|
466 |
{
|
467 |
?>
|
468 |
+
<option value="<?php echo $i?>" <?php if($i == $month) { ?>selected="selected"<?php } ?>><?php echo date("M", strtotime($i . "/1/" . $year))?></option>
|
469 |
<?php
|
470 |
}
|
471 |
?>
|
481 |
if(!empty($affiliates)) {
|
482 |
?>
|
483 |
<tr>
|
484 |
+
<th scope="row" valign="top"><label for="affiliate_id">Affiliate ID:</label></th>
|
485 |
<td>
|
486 |
<?php if(in_array("affiliate_id", $read_only_fields) && $order_id > 0) { echo $order->affiliate_id; } else { ?>
|
487 |
<input id="affiliate_id" name="affiliate_id" type="text" size="50" value="<?php echo esc_attr($order->affiliate_id);?>" />
|
489 |
</td>
|
490 |
</tr>
|
491 |
<tr>
|
492 |
+
<th scope="row" valign="top"><label for="affiliate_subid">Affiliate SubID:</label></th>
|
493 |
<td>
|
494 |
<?php if(in_array("affiliate_subid", $read_only_fields) && $order_id > 0) { echo $order->affiliate_subid; } else { ?>
|
495 |
<input id="affiliate_subid" name="affiliate_subid" type="text" size="50" value="<?php echo esc_attr($order->affiliate_subid);?>" />
|
499 |
<?php } ?>
|
500 |
|
501 |
<tr>
|
502 |
+
<th scope="row" valign="top"><label for="notes">Notes:</label></th>
|
503 |
<td>
|
504 |
<?php if(in_array("notes", $read_only_fields) && $order_id > 0) { echo $order->notes; } else { ?>
|
505 |
<textarea id="notes" name="notes" rows="5" cols="80"><?php echo esc_textarea($order->notes);?></textarea>
|
514 |
|
515 |
<p class="submit topborder">
|
516 |
<input name="order" type="hidden" value="<?php if(!empty($order->id)) echo $order->id; else echo $order_id;?>" />
|
517 |
+
<input name="save" type="submit" class="button-primary" value="Save Order" />
|
518 |
+
<input name="cancel" type="button" value="Cancel" onclick="location.href='<?php echo get_admin_url(NULL, '/admin.php?page=pmpro-orders')?>';" />
|
519 |
</p>
|
520 |
|
521 |
</form>
|
524 |
|
525 |
<form id="posts-filter" method="get" action="">
|
526 |
<h2>
|
527 |
+
Orders
|
528 |
+
<a href="admin.php?page=pmpro-orders&order=-1" class="button add-new-h2">+ Add New Order</a>
|
529 |
+
<a target="_blank" href="<?php echo admin_url('admin-ajax.php');?>?action=orders_csv&s=<?php echo $s?>&l=<?php echo $l?>" class="button add-new-h2">Export to CSV</a>
|
530 |
+
</h2>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
531 |
|
532 |
<?php if(!empty($pmpro_msg)) { ?>
|
533 |
<div id="message" class="<?php if($pmpro_msgt == "success") echo "updated fade"; else echo "error"; ?>"><p><?php echo $pmpro_msg?></p></div>
|
534 |
<?php } ?>
|
535 |
|
|
|
536 |
<ul class="subsubsub">
|
537 |
<li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
538 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
539 |
</li>
|
540 |
</ul>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
541 |
<p class="search-box">
|
542 |
+
<label class="hidden" for="post-search-input">Search Orders:</label>
|
543 |
<input type="hidden" name="page" value="pmpro-orders" />
|
544 |
<input id="post-search-input" type="text" value="<?php echo $s?>" name="s"/>
|
545 |
+
<input class="button" type="submit" value="Search Orders"/>
|
546 |
</p>
|
|
|
547 |
<?php
|
548 |
//some vars for the search
|
549 |
if(isset($_REQUEST['pn']))
|
559 |
$end = $pn * $limit;
|
560 |
$start = $end - $limit;
|
561 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
562 |
if($s)
|
563 |
{
|
564 |
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS o.id FROM $wpdb->pmpro_membership_orders o LEFT JOIN $wpdb->users u ON o.user_id = u.ID LEFT JOIN $wpdb->pmpro_membership_levels l ON o.membership_id = l.id ";
|
577 |
$fields = apply_filters("pmpro_orders_search_fields", $fields);
|
578 |
|
579 |
foreach($fields as $field)
|
580 |
+
$sqlQuery .= " OR " . $field . " LIKE '%" . $wpdb->escape($s) . "%' ";
|
581 |
$sqlQuery .= ") ";
|
|
|
|
|
|
|
582 |
$sqlQuery .= "GROUP BY o.id ORDER BY o.id DESC, o.timestamp DESC ";
|
583 |
}
|
584 |
else
|
585 |
{
|
586 |
+
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS id FROM $wpdb->pmpro_membership_orders ORDER BY id DESC, timestamp DESC ";
|
587 |
}
|
588 |
|
589 |
$sqlQuery .= "LIMIT $start, $limit";
|
590 |
|
591 |
$order_ids = $wpdb->get_col($sqlQuery);
|
|
|
592 |
$totalrows = $wpdb->get_var("SELECT FOUND_ROWS() as found_rows");
|
593 |
|
594 |
if($order_ids)
|
595 |
{
|
596 |
?>
|
597 |
+
<p class="clear"><?php echo strval($totalrows)?> orders found.</span></p>
|
598 |
<?php
|
599 |
}
|
600 |
?>
|
601 |
<table class="widefat">
|
602 |
<thead>
|
603 |
<tr class="thead">
|
604 |
+
<th>ID</th>
|
605 |
+
<th>Code</th>
|
606 |
+
<th>User</th>
|
607 |
<?php do_action("pmpro_orders_extra_cols_header", $order_ids);?>
|
608 |
+
<th>Membership Level</th>
|
609 |
+
<th>Total</th>
|
610 |
+
<th>Payment</th>
|
611 |
+
<th>Gateway</th>
|
612 |
+
<th>Transaction IDs</th>
|
613 |
+
<th>Status</th>
|
614 |
+
<th>Date</th>
|
615 |
<th></th>
|
616 |
<th></th>
|
617 |
<th></th>
|
634 |
<?php if(!empty($order->user)) { ?>
|
635 |
<a href="user-edit.php?user_id=<?php echo $order->user->ID?>"><?php echo $order->user->user_login?></a>
|
636 |
<?php } else { ?>
|
637 |
+
[deleted]
|
638 |
<?php } ?>
|
639 |
</td>
|
640 |
<?php do_action("pmpro_orders_extra_cols_body", $order);?>
|
655 |
</td>
|
656 |
<td><?php echo $order->gateway;?><?php if($order->gateway_environment == "test") echo "(test)";?></td>
|
657 |
<td>
|
658 |
+
Payment: <?php if(!empty($order->payment_transaction_id)) echo $order->payment_transaction_id; else echo "N/A";?>
|
659 |
<br />
|
660 |
+
Subscription: <?php if(!empty($order->subscription_transaction_id)) echo $order->subscription_transaction_id; else echo "N/A";?>
|
661 |
</td>
|
662 |
<td><?php echo $order->status;?></td>
|
663 |
<td><?php echo date(get_option('date_format'), $order->timestamp);?></td>
|
664 |
<td align="center">
|
665 |
+
<a href="admin.php?page=pmpro-orders&order=<?php echo $order->id;?>">edit</a>
|
666 |
</td>
|
667 |
<td align="center">
|
668 |
+
<a href="admin.php?page=pmpro-orders&order=-1©=<?php echo $order->id;?>">copy</a>
|
669 |
</td>
|
670 |
<td align="center">
|
671 |
+
<a href="javascript:askfirst('Deleting orders is permanent and can affect active users. Are you sure you want to delete order <?php echo str_replace("'", "", $order->code);?>?', 'admin.php?page=pmpro-orders&delete=<?php echo $order->id;?>'); void(0);">delete</a>
|
672 |
</td>
|
673 |
</tr>
|
674 |
<?php
|
678 |
{
|
679 |
?>
|
680 |
<tr>
|
681 |
+
<td colspan="9"><p>No orders found.</p></td>
|
682 |
</tr>
|
683 |
<?php
|
684 |
}
|
688 |
</form>
|
689 |
|
690 |
<?php
|
691 |
+
echo pmpro_getPaginationString($pn, $totalrows, $limit, 1, get_admin_url(NULL, "/admin.php?page=pmpro-orders&s=" . urlencode($s)), "&l=$l&limit=$limit&pn=");
|
|
|
|
|
692 |
?>
|
693 |
|
694 |
<?php } ?>
|
695 |
|
696 |
+
</div>
|
|
|
|
adminpages/pagesettings.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
//only admins can get this
|
3 |
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_pagesettings")))
|
4 |
{
|
5 |
-
die(
|
6 |
}
|
7 |
|
8 |
global $wpdb, $msg, $msgt;
|
@@ -46,37 +46,9 @@
|
|
46 |
{
|
47 |
if(!$pmpro_page_id)
|
48 |
{
|
49 |
-
switch ($pmpro_page_name) {
|
50 |
-
case 'account':
|
51 |
-
$pmpro_page_title = __( 'Membership Account', 'pmpro' );
|
52 |
-
break;
|
53 |
-
case 'billing':
|
54 |
-
$pmpro_page_title = __( 'Membership Billing', 'pmpro' );
|
55 |
-
break;
|
56 |
-
case 'cancel':
|
57 |
-
$pmpro_page_title = __( 'Membership Cancel', 'pmpro' );
|
58 |
-
break;
|
59 |
-
case 'checkout':
|
60 |
-
$pmpro_page_title = __( 'Membership Checkout', 'pmpro' );
|
61 |
-
break;
|
62 |
-
case 'confirmation':
|
63 |
-
$pmpro_page_title = __( 'Membership Confirmation', 'pmpro' );
|
64 |
-
break;
|
65 |
-
case 'invoice':
|
66 |
-
$pmpro_page_title = __( 'Membership Invoice', 'pmpro' );
|
67 |
-
break;
|
68 |
-
case 'levels':
|
69 |
-
$pmpro_page_title = __( 'Membership Levels', 'pmpro' );
|
70 |
-
break;
|
71 |
-
|
72 |
-
default:
|
73 |
-
$pmpro_page_title = sprintf( __( 'Membership %s', 'Page title template', 'pmpro' ), ucwords($pmpro_page_name) );
|
74 |
-
break;
|
75 |
-
}
|
76 |
-
|
77 |
//no id set. create an array to store the page info
|
78 |
$insert = array(
|
79 |
-
'post_title' => $
|
80 |
'post_status' => 'publish',
|
81 |
'post_type' => 'page',
|
82 |
'post_content' => '[pmpro_' . $pmpro_page_name . ']',
|
@@ -108,7 +80,7 @@
|
|
108 |
if(!empty($pages_created))
|
109 |
{
|
110 |
$msg = true;
|
111 |
-
$msgt =
|
112 |
}
|
113 |
}
|
114 |
|
@@ -117,19 +89,19 @@
|
|
117 |
|
118 |
|
119 |
<form action="" method="post" enctype="multipart/form-data">
|
120 |
-
<h2
|
121 |
<?php
|
122 |
global $pmpro_pages_ready;
|
123 |
if($pmpro_pages_ready)
|
124 |
{
|
125 |
?>
|
126 |
-
<p
|
127 |
<?php
|
128 |
}
|
129 |
else
|
130 |
{
|
131 |
?>
|
132 |
-
<p
|
133 |
<?php
|
134 |
}
|
135 |
?>
|
@@ -137,118 +109,104 @@
|
|
137 |
<tbody>
|
138 |
<tr>
|
139 |
<th scope="row" valign="top">
|
140 |
-
<label for="account_page_id"
|
141 |
</th>
|
142 |
<td>
|
143 |
<?php
|
144 |
wp_dropdown_pages(array("name"=>"account_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['account']));
|
145 |
?>
|
146 |
<?php if(!empty($pmpro_pages['account'])) { ?>
|
147 |
-
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['account']
|
148 |
-
|
149 |
-
<a target="_blank" href="<?php echo get_permalink($pmpro_pages['account']);?>" class="button button-secondary pmpro_page_view"><?php _e('view page', 'pmpro');?></a>
|
150 |
<?php } ?>
|
151 |
-
<br /><small class="pmpro_lite"
|
152 |
</td>
|
153 |
<tr>
|
154 |
<th scope="row" valign="top">
|
155 |
-
<label for="billing_page_id"
|
156 |
</th>
|
157 |
<td>
|
158 |
<?php
|
159 |
wp_dropdown_pages(array("name"=>"billing_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['billing']));
|
160 |
?>
|
161 |
<?php if(!empty($pmpro_pages['billing'])) { ?>
|
162 |
-
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['billing']?>&action=edit" class="
|
163 |
-
|
164 |
-
<a target="_blank" href="<?php echo get_permalink($pmpro_pages['billing']);?>" class="button button-secondary pmpro_page_view"><?php _e('view page', 'pmpro');?></a>
|
165 |
<?php } ?>
|
166 |
-
<br /><small class="pmpro_lite"
|
167 |
</td>
|
168 |
<tr>
|
169 |
<th scope="row" valign="top">
|
170 |
-
<label for="cancel_page_id"
|
171 |
</th>
|
172 |
<td>
|
173 |
<?php
|
174 |
wp_dropdown_pages(array("name"=>"cancel_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['cancel']));
|
175 |
?>
|
176 |
<?php if(!empty($pmpro_pages['cancel'])) { ?>
|
177 |
-
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['cancel']?>&action=edit" class="
|
178 |
-
|
179 |
-
<a target="_blank" href="<?php echo get_permalink($pmpro_pages['cancel']);?>" class="button button-secondary pmpro_page_view"><?php _e('view page', 'pmpro');?></a>
|
180 |
<?php } ?>
|
181 |
-
<br /><small class="pmpro_lite"
|
182 |
</td>
|
183 |
</tr>
|
184 |
<tr>
|
185 |
<th scope="row" valign="top">
|
186 |
-
<label for="checkout_page_id"
|
187 |
</th>
|
188 |
<td>
|
189 |
<?php
|
190 |
wp_dropdown_pages(array("name"=>"checkout_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['checkout']));
|
191 |
?>
|
192 |
<?php if(!empty($pmpro_pages['checkout'])) { ?>
|
193 |
-
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['checkout']?>&action=edit" class="
|
194 |
-
|
195 |
-
<a target="_blank" href="<?php echo get_permalink($pmpro_pages['checkout']);?>" class="button button-secondary pmpro_page_view"><?php _e('view page', 'pmpro');?></a>
|
196 |
<?php } ?>
|
197 |
-
<br /><small class="pmpro_lite"
|
198 |
</td>
|
199 |
</tr>
|
200 |
<tr>
|
201 |
<th scope="row" valign="top">
|
202 |
-
<label for="confirmation_page_id"
|
203 |
</th>
|
204 |
<td>
|
205 |
<?php
|
206 |
wp_dropdown_pages(array("name"=>"confirmation_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['confirmation']));
|
207 |
?>
|
208 |
<?php if(!empty($pmpro_pages['confirmation'])) { ?>
|
209 |
-
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['confirmation']?>&action=edit" class="
|
210 |
-
|
211 |
-
<a target="_blank" href="<?php echo get_permalink($pmpro_pages['confirmation']);?>" class="button button-secondary pmpro_page_view"><?php _e('view page', 'pmpro');?></a>
|
212 |
<?php } ?>
|
213 |
-
<br /><small class="pmpro_lite"
|
214 |
</td>
|
215 |
</tr>
|
216 |
<tr>
|
217 |
<th scope="row" valign="top">
|
218 |
-
<label for="invoice_page_id"
|
219 |
</th>
|
220 |
<td>
|
221 |
<?php
|
222 |
wp_dropdown_pages(array("name"=>"invoice_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['invoice']));
|
223 |
?>
|
224 |
<?php if(!empty($pmpro_pages['invoice'])) { ?>
|
225 |
-
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['invoice']?>&action=edit" class="
|
226 |
-
|
227 |
-
<a target="_blank" href="<?php echo get_permalink($pmpro_pages['invoice']);?>" class="button button-secondary pmpro_page_view"><?php _e('view page', 'pmpro');?></a>
|
228 |
<?php } ?>
|
229 |
-
<br /><small class="pmpro_lite"
|
230 |
</td>
|
231 |
</tr>
|
232 |
<tr>
|
233 |
<th scope="row" valign="top">
|
234 |
-
<label for="levels_page_id"
|
235 |
</th>
|
236 |
<td>
|
237 |
<?php
|
238 |
wp_dropdown_pages(array("name"=>"levels_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['levels']));
|
239 |
?>
|
240 |
<?php if(!empty($pmpro_pages['levels'])) { ?>
|
241 |
-
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['levels']?>&action=edit" class="
|
242 |
-
|
243 |
-
<a target="_blank" href="<?php echo get_permalink($pmpro_pages['levels']);?>" class="button button-secondary pmpro_page_view"><?php _e('view page', 'pmpro');?></a>
|
244 |
<?php } ?>
|
245 |
-
<br /><small class="pmpro_lite"
|
246 |
</td>
|
247 |
</tr>
|
248 |
</tbody>
|
249 |
</table>
|
250 |
<p class="submit">
|
251 |
-
<input name="savesettings" type="submit" class="button
|
252 |
</p>
|
253 |
</form>
|
254 |
|
2 |
//only admins can get this
|
3 |
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_pagesettings")))
|
4 |
{
|
5 |
+
die("You do not have permissions to perform this action.");
|
6 |
}
|
7 |
|
8 |
global $wpdb, $msg, $msgt;
|
46 |
{
|
47 |
if(!$pmpro_page_id)
|
48 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
//no id set. create an array to store the page info
|
50 |
$insert = array(
|
51 |
+
'post_title' => 'Membership ' . ucwords($pmpro_page_name),
|
52 |
'post_status' => 'publish',
|
53 |
'post_type' => 'page',
|
54 |
'post_content' => '[pmpro_' . $pmpro_page_name . ']',
|
80 |
if(!empty($pages_created))
|
81 |
{
|
82 |
$msg = true;
|
83 |
+
$msgt = "The following pages have been created for you: " . implode(", ", $pages_created) . ".";
|
84 |
}
|
85 |
}
|
86 |
|
89 |
|
90 |
|
91 |
<form action="" method="post" enctype="multipart/form-data">
|
92 |
+
<h2>Pages</h2>
|
93 |
<?php
|
94 |
global $pmpro_pages_ready;
|
95 |
if($pmpro_pages_ready)
|
96 |
{
|
97 |
?>
|
98 |
+
<p>Manage the WordPress pages assigned to each required Paid Memberships Pro page.</p>
|
99 |
<?php
|
100 |
}
|
101 |
else
|
102 |
{
|
103 |
?>
|
104 |
+
<p>Assign the WordPress pages for each required Paid Memberships Pro page or <a href="?page=pmpro-pagesettings&createpages=1">click here to let us generate them for you</a>.</p>
|
105 |
<?php
|
106 |
}
|
107 |
?>
|
109 |
<tbody>
|
110 |
<tr>
|
111 |
<th scope="row" valign="top">
|
112 |
+
<label for="account_page_id">Account Page:</label>
|
113 |
</th>
|
114 |
<td>
|
115 |
<?php
|
116 |
wp_dropdown_pages(array("name"=>"account_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['account']));
|
117 |
?>
|
118 |
<?php if(!empty($pmpro_pages['account'])) { ?>
|
119 |
+
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['account']?>&action=edit" class="pmpro_page_edit">edit page</a>
|
|
|
|
|
120 |
<?php } ?>
|
121 |
+
<br /><small class="pmpro_lite">Include the shortcode [pmpro_account].</small>
|
122 |
</td>
|
123 |
<tr>
|
124 |
<th scope="row" valign="top">
|
125 |
+
<label for="billing_page_id">Billing Information Page:</label>
|
126 |
</th>
|
127 |
<td>
|
128 |
<?php
|
129 |
wp_dropdown_pages(array("name"=>"billing_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['billing']));
|
130 |
?>
|
131 |
<?php if(!empty($pmpro_pages['billing'])) { ?>
|
132 |
+
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['billing']?>&action=edit" class="pmpro_page_edit">edit page</a>
|
|
|
|
|
133 |
<?php } ?>
|
134 |
+
<br /><small class="pmpro_lite">Include the shortcode [pmpro_billing].</small>
|
135 |
</td>
|
136 |
<tr>
|
137 |
<th scope="row" valign="top">
|
138 |
+
<label for="cancel_page_id">Cancel Page:</label>
|
139 |
</th>
|
140 |
<td>
|
141 |
<?php
|
142 |
wp_dropdown_pages(array("name"=>"cancel_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['cancel']));
|
143 |
?>
|
144 |
<?php if(!empty($pmpro_pages['cancel'])) { ?>
|
145 |
+
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['cancel']?>&action=edit" class="pmpro_page_edit">edit page</a>
|
|
|
|
|
146 |
<?php } ?>
|
147 |
+
<br /><small class="pmpro_lite">Include the shortcode [pmpro_cancel].</small>
|
148 |
</td>
|
149 |
</tr>
|
150 |
<tr>
|
151 |
<th scope="row" valign="top">
|
152 |
+
<label for="checkout_page_id">Checkout Page:</label>
|
153 |
</th>
|
154 |
<td>
|
155 |
<?php
|
156 |
wp_dropdown_pages(array("name"=>"checkout_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['checkout']));
|
157 |
?>
|
158 |
<?php if(!empty($pmpro_pages['checkout'])) { ?>
|
159 |
+
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['checkout']?>&action=edit" class="pmpro_page_edit">edit page</a>
|
|
|
|
|
160 |
<?php } ?>
|
161 |
+
<br /><small class="pmpro_lite">Include the shortcode [pmpro_checkout].</small>
|
162 |
</td>
|
163 |
</tr>
|
164 |
<tr>
|
165 |
<th scope="row" valign="top">
|
166 |
+
<label for="confirmation_page_id">Confirmation Page:</label>
|
167 |
</th>
|
168 |
<td>
|
169 |
<?php
|
170 |
wp_dropdown_pages(array("name"=>"confirmation_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['confirmation']));
|
171 |
?>
|
172 |
<?php if(!empty($pmpro_pages['confirmation'])) { ?>
|
173 |
+
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['confirmation']?>&action=edit" class="pmpro_page_edit">edit page</a>
|
|
|
|
|
174 |
<?php } ?>
|
175 |
+
<br /><small class="pmpro_lite">Include the shortcode [pmpro_confirmation].</small>
|
176 |
</td>
|
177 |
</tr>
|
178 |
<tr>
|
179 |
<th scope="row" valign="top">
|
180 |
+
<label for="invoice_page_id">Invoice Page:</label>
|
181 |
</th>
|
182 |
<td>
|
183 |
<?php
|
184 |
wp_dropdown_pages(array("name"=>"invoice_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['invoice']));
|
185 |
?>
|
186 |
<?php if(!empty($pmpro_pages['invoice'])) { ?>
|
187 |
+
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['invoice']?>&action=edit" class="pmpro_page_edit">edit page</a>
|
|
|
|
|
188 |
<?php } ?>
|
189 |
+
<br /><small class="pmpro_lite">Include the shortcode [pmpro_invoice].</small>
|
190 |
</td>
|
191 |
</tr>
|
192 |
<tr>
|
193 |
<th scope="row" valign="top">
|
194 |
+
<label for="levels_page_id">Levels Page:</label>
|
195 |
</th>
|
196 |
<td>
|
197 |
<?php
|
198 |
wp_dropdown_pages(array("name"=>"levels_page_id", "show_option_none"=>"-- Choose One --", "selected"=>$pmpro_pages['levels']));
|
199 |
?>
|
200 |
<?php if(!empty($pmpro_pages['levels'])) { ?>
|
201 |
+
<a target="_blank" href="post.php?post=<?php echo $pmpro_pages['levels']?>&action=edit" class="pmpro_page_edit">edit page</a>
|
|
|
|
|
202 |
<?php } ?>
|
203 |
+
<br /><small class="pmpro_lite">Include the shortcode [pmpro_levels].</small>
|
204 |
</td>
|
205 |
</tr>
|
206 |
</tbody>
|
207 |
</table>
|
208 |
<p class="submit">
|
209 |
+
<input name="savesettings" type="submit" class="button-primary" value="Save Settings" />
|
210 |
</p>
|
211 |
</form>
|
212 |
|
adminpages/paymentsettings.php
CHANGED
@@ -1,538 +1,484 @@
|
|
1 |
-
<?php
|
2 |
-
//only admins can get this
|
3 |
-
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_paymentsettings")))
|
4 |
-
{
|
5 |
-
die(
|
6 |
-
}
|
7 |
-
|
8 |
-
global $wpdb, $pmpro_currency_symbol, $msg, $msgt;
|
9 |
-
|
10 |
-
//get/set settings
|
11 |
-
if(!empty($_REQUEST['savesettings']))
|
12 |
-
{
|
13 |
-
pmpro_setOption("sslseal");
|
14 |
-
pmpro_setOption("nuclear_HTTPS");
|
15 |
-
|
16 |
-
//gateway options
|
17 |
-
pmpro_setOption("gateway");
|
18 |
-
pmpro_setOption("gateway_environment");
|
19 |
-
pmpro_setOption("gateway_email");
|
20 |
-
pmpro_setOption("payflow_partner");
|
21 |
-
pmpro_setOption("payflow_vendor");
|
22 |
-
pmpro_setOption("payflow_user");
|
23 |
-
pmpro_setOption("payflow_pwd");
|
24 |
-
pmpro_setOption("apiusername");
|
25 |
-
pmpro_setOption("apipassword");
|
26 |
-
pmpro_setOption("apisignature");
|
27 |
-
pmpro_setOption("loginname");
|
28 |
-
pmpro_setOption("transactionkey");
|
29 |
-
pmpro_setOption("stripe_secretkey");
|
30 |
-
pmpro_setOption("stripe_publishablekey");
|
31 |
-
pmpro_setOption("
|
32 |
-
pmpro_setOption("
|
33 |
-
pmpro_setOption("
|
34 |
-
pmpro_setOption("
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
if(!empty($_REQUEST['
|
51 |
-
$pmpro_accepted_credit_cards[] = "
|
52 |
-
if(!empty($_REQUEST['
|
53 |
-
$pmpro_accepted_credit_cards[] = "
|
54 |
-
if(!empty($_REQUEST['
|
55 |
-
$pmpro_accepted_credit_cards[] = "
|
56 |
-
if(!empty($_REQUEST['
|
57 |
-
$pmpro_accepted_credit_cards[] = "
|
58 |
-
if(!empty($_REQUEST['
|
59 |
-
$pmpro_accepted_credit_cards[] = "
|
60 |
-
if(!empty($_REQUEST['
|
61 |
-
$pmpro_accepted_credit_cards[] = "
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
$
|
86 |
-
$
|
87 |
-
|
88 |
-
$
|
89 |
-
$
|
90 |
-
$
|
91 |
-
$
|
92 |
-
$
|
93 |
-
$
|
94 |
-
$
|
95 |
-
$
|
96 |
-
$
|
97 |
-
$
|
98 |
-
$
|
99 |
-
$
|
100 |
-
$
|
101 |
-
$
|
102 |
-
$
|
103 |
-
$
|
104 |
-
$
|
105 |
-
$
|
106 |
-
|
107 |
-
$
|
108 |
-
|
109 |
-
$
|
110 |
-
|
111 |
-
$
|
112 |
-
|
113 |
-
$
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
<
|
147 |
-
|
148 |
-
<
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
<option value=""
|
159 |
-
<option value="
|
160 |
-
<option value="
|
161 |
-
<option value="
|
162 |
-
<option value="
|
163 |
-
<option value="
|
164 |
-
<option value="
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
</
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
<tr class="gateway
|
259 |
-
<th scope="row" valign="top">
|
260 |
-
<label for="
|
261 |
-
</th>
|
262 |
-
<td>
|
263 |
-
<input type="text"
|
264 |
-
</td>
|
265 |
-
</tr>
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
<tr class="gateway
|
276 |
-
<th scope="row" valign="top">
|
277 |
-
<label for="
|
278 |
-
</th>
|
279 |
-
<td>
|
280 |
-
<input type="text"
|
281 |
-
</td>
|
282 |
-
</tr>
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
<tr class="gateway
|
293 |
-
<th scope="row" valign="top">
|
294 |
-
<label for="
|
295 |
-
</th>
|
296 |
-
<td>
|
297 |
-
<input type="text"
|
298 |
-
</td>
|
299 |
-
</tr>
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
<tr class="gateway
|
326 |
-
<th scope="row" valign="top">
|
327 |
-
<label for="
|
328 |
-
</th>
|
329 |
-
<td>
|
330 |
-
<
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
</
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
<
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
<
|
389 |
-
<
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
<
|
411 |
-
|
412 |
-
|
413 |
-
<
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
</td>
|
426 |
-
</tr>
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
<
|
438 |
-
</
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
<
|
473 |
-
</td>
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
<label><?php _e('IPN Handler URL', 'pmpro');?>:</label>
|
486 |
-
</th>
|
487 |
-
<td>
|
488 |
-
<p><?php _e('To fully integrate with PayPal, be sure to set your IPN Handler URL to ', 'pmpro');?> <pre><?php echo admin_url("admin-ajax.php") . "?action=ipnhandler";?></pre></p>
|
489 |
-
</td>
|
490 |
-
</tr>
|
491 |
-
<tr class="gateway gateway_twocheckout" <?php if($gateway != "twocheckout") { ?>style="display: none;"<?php } ?>>
|
492 |
-
<th scope="row" valign="top">
|
493 |
-
<label><?php _e('TwoCheckout INS URL', 'pmpro');?>:</label>
|
494 |
-
</th>
|
495 |
-
<td>
|
496 |
-
<p><?php _e('To fully integrate with 2Checkout, be sure to set your 2Checkout INS URL ', 'pmpro');?> <pre><?php echo admin_url("admin-ajax.php") . "?action=twocheckout-ins";?></pre></p>
|
497 |
-
</td>
|
498 |
-
</tr>
|
499 |
-
<tr class="gateway gateway_authorizenet" <?php if($gateway != "authorizenet") { ?>style="display: none;"<?php } ?>>
|
500 |
-
<th scope="row" valign="top">
|
501 |
-
<label><?php _e('Silent Post URL', 'pmpro');?>:</label>
|
502 |
-
</th>
|
503 |
-
<td>
|
504 |
-
<p><?php _e('To fully integrate with Authorize.net, be sure to set your Silent Post URL to', 'pmpro');?> <pre><?php echo admin_url("admin-ajax.php") . "?action=authnet_silent_post";?></pre></p>
|
505 |
-
</td>
|
506 |
-
</tr>
|
507 |
-
<tr class="gateway gateway_stripe" <?php if($gateway != "stripe") { ?>style="display: none;"<?php } ?>>
|
508 |
-
<th scope="row" valign="top">
|
509 |
-
<label><?php _e('Web Hook URL', 'pmpro');?>:</label>
|
510 |
-
</th>
|
511 |
-
<td>
|
512 |
-
<p><?php _e('To fully integrate with Stripe, be sure to set your Web Hook URL to', 'pmpro');?> <pre><?php echo admin_url("admin-ajax.php") . "?action=stripe_webhook";?></pre></p>
|
513 |
-
</td>
|
514 |
-
</tr>
|
515 |
-
<tr class="gateway gateway_braintree" <?php if($gateway != "braintree") { ?>style="display: none;"<?php } ?>>
|
516 |
-
<th scope="row" valign="top">
|
517 |
-
<label><?php _e('Web Hook URL', 'pmpro');?>:</label>
|
518 |
-
</th>
|
519 |
-
<td>
|
520 |
-
<p>
|
521 |
-
<?php _e('To fully integrate with Braintree, be sure to set your Web Hook URL to', 'pmpro');?>
|
522 |
-
<pre><?php
|
523 |
-
//echo admin_url("admin-ajax.php") . "?action=braintree_webhook";
|
524 |
-
echo PMPRO_URL . "/services/braintree-webhook.php";
|
525 |
-
?></pre>.
|
526 |
-
</p>
|
527 |
-
</td>
|
528 |
-
</tr>
|
529 |
-
</tbody>
|
530 |
-
</table>
|
531 |
-
<p class="submit">
|
532 |
-
<input name="savesettings" type="submit" class="button-primary" value="<?php _e('Save Settings', 'pmpro');?>" />
|
533 |
-
</p>
|
534 |
-
</form>
|
535 |
-
|
536 |
-
<?php
|
537 |
-
require_once(dirname(__FILE__) . "/admin_footer.php");
|
538 |
-
?>
|
1 |
+
<?php
|
2 |
+
//only admins can get this
|
3 |
+
if(!function_exists("current_user_can") || (!current_user_can("manage_options") && !current_user_can("pmpro_paymentsettings")))
|
4 |
+
{
|
5 |
+
die("You do not have permissions to perform this action.");
|
6 |
+
}
|
7 |
+
|
8 |
+
global $wpdb, $pmpro_currency_symbol, $msg, $msgt;
|
9 |
+
|
10 |
+
//get/set settings
|
11 |
+
if(!empty($_REQUEST['savesettings']))
|
12 |
+
{
|
13 |
+
pmpro_setOption("sslseal");
|
14 |
+
pmpro_setOption("nuclear_HTTPS");
|
15 |
+
|
16 |
+
//gateway options
|
17 |
+
pmpro_setOption("gateway");
|
18 |
+
pmpro_setOption("gateway_environment");
|
19 |
+
pmpro_setOption("gateway_email");
|
20 |
+
pmpro_setOption("payflow_partner");
|
21 |
+
pmpro_setOption("payflow_vendor");
|
22 |
+
pmpro_setOption("payflow_user");
|
23 |
+
pmpro_setOption("payflow_pwd");
|
24 |
+
pmpro_setOption("apiusername");
|
25 |
+
pmpro_setOption("apipassword");
|
26 |
+
pmpro_setOption("apisignature");
|
27 |
+
pmpro_setOption("loginname");
|
28 |
+
pmpro_setOption("transactionkey");
|
29 |
+
pmpro_setOption("stripe_secretkey");
|
30 |
+
pmpro_setOption("stripe_publishablekey");
|
31 |
+
pmpro_setOption("braintree_merchantid");
|
32 |
+
pmpro_setOption("braintree_publickey");
|
33 |
+
pmpro_setOption("braintree_privatekey");
|
34 |
+
pmpro_setOption("braintree_encryptionkey");
|
35 |
+
|
36 |
+
//currency
|
37 |
+
$currency_paypal = $_POST['currency_paypal'];
|
38 |
+
$currency_stripe = $_POST['currency_stripe'];
|
39 |
+
$currency_fixed = $_POST['currency_fixed'];
|
40 |
+
|
41 |
+
if($_POST['gateway'] == "authorizenet" || $_POST['gateway'] == "payflowpro")
|
42 |
+
pmpro_setOption("currency", $currency_fixed);
|
43 |
+
elseif($_POST['gateway'] == "stripe")
|
44 |
+
pmpro_setOption("currency", $currency_stripe);
|
45 |
+
else
|
46 |
+
pmpro_setOption("currency", $currency_paypal);
|
47 |
+
|
48 |
+
//credit cards
|
49 |
+
$pmpro_accepted_credit_cards = array();
|
50 |
+
if(!empty($_REQUEST['creditcards_visa']))
|
51 |
+
$pmpro_accepted_credit_cards[] = "Visa";
|
52 |
+
if(!empty($_REQUEST['creditcards_mastercard']))
|
53 |
+
$pmpro_accepted_credit_cards[] = "Mastercard";
|
54 |
+
if(!empty($_REQUEST['creditcards_amex']))
|
55 |
+
$pmpro_accepted_credit_cards[] = "American Express";
|
56 |
+
if(!empty($_REQUEST['creditcards_discover']))
|
57 |
+
$pmpro_accepted_credit_cards[] = "Discover";
|
58 |
+
if(!empty($_REQUEST['creditcards_dinersclub']))
|
59 |
+
$pmpro_accepted_credit_cards[] = "Diners Club";
|
60 |
+
if(!empty($_REQUEST['creditcards_enroute']))
|
61 |
+
$pmpro_accepted_credit_cards[] = "EnRoute";
|
62 |
+
if(!empty($_REQUEST['creditcards_jcb']))
|
63 |
+
$pmpro_accepted_credit_cards[] = "JCB";
|
64 |
+
|
65 |
+
//check instructions
|
66 |
+
pmpro_setOption("instructions");
|
67 |
+
|
68 |
+
//use_ssl is based on gateway
|
69 |
+
if($_REQUEST['gateway'] == "paypal" || $_REQUEST['gateway'] == "authorizenet" || $_REQUEST['gateway'] == "payflowpro")
|
70 |
+
pmpro_setOption("use_ssl", 1);
|
71 |
+
else
|
72 |
+
pmpro_setOption("use_ssl");
|
73 |
+
|
74 |
+
//tax
|
75 |
+
pmpro_setOption("tax_state");
|
76 |
+
pmpro_setOption("tax_rate");
|
77 |
+
|
78 |
+
pmpro_setOption("accepted_credit_cards", implode(",", $pmpro_accepted_credit_cards));
|
79 |
+
|
80 |
+
//assume success
|
81 |
+
$msg = true;
|
82 |
+
$msgt = "Your payment settings have been updated.";
|
83 |
+
}
|
84 |
+
|
85 |
+
$sslseal = pmpro_getOption("sslseal");
|
86 |
+
$nuclear_HTTPS = pmpro_getOption("nuclear_HTTPS");
|
87 |
+
|
88 |
+
$gateway = pmpro_getOption("gateway");
|
89 |
+
$gateway_environment = pmpro_getOption("gateway_environment");
|
90 |
+
$gateway_email = pmpro_getOption("gateway_email");
|
91 |
+
$payflow_partner = pmpro_getOption("payflow_partner");
|
92 |
+
$payflow_vendor = pmpro_getOption("payflow_vendor");
|
93 |
+
$payflow_user = pmpro_getOption("payflow_user");
|
94 |
+
$payflow_pwd = pmpro_getOption("payflow_pwd");
|
95 |
+
$apiusername = pmpro_getOption("apiusername");
|
96 |
+
$apipassword = pmpro_getOption("apipassword");
|
97 |
+
$apisignature = pmpro_getOption("apisignature");
|
98 |
+
$loginname = pmpro_getOption("loginname");
|
99 |
+
$transactionkey = pmpro_getOption("transactionkey");
|
100 |
+
$stripe_secretkey = pmpro_getOption("stripe_secretkey");
|
101 |
+
$stripe_publishablekey = pmpro_getOption("stripe_publishablekey");
|
102 |
+
$braintree_merchantid = pmpro_getOption("braintree_merchantid");
|
103 |
+
$braintree_publickey = pmpro_getOption("braintree_publickey");
|
104 |
+
$braintree_privatekey = pmpro_getOption("braintree_privatekey");
|
105 |
+
$braintree_encryptionkey = pmpro_getOption("braintree_encryptionkey");
|
106 |
+
|
107 |
+
$currency = pmpro_getOption("currency");
|
108 |
+
|
109 |
+
$pmpro_accepted_credit_cards = pmpro_getOption("accepted_credit_cards");
|
110 |
+
|
111 |
+
$instructions = pmpro_getOption("instructions");
|
112 |
+
|
113 |
+
$tax_state = pmpro_getOption("tax_state");
|
114 |
+
$tax_rate = pmpro_getOption("tax_rate");
|
115 |
+
|
116 |
+
//make sure the tax rate is not > 1
|
117 |
+
if((double)$tax_rate > 1)
|
118 |
+
{
|
119 |
+
//assume the entered X%
|
120 |
+
$tax_rate = $tax_rate / 100;
|
121 |
+
pmpro_setOption("tax_rate", $tax_rate);
|
122 |
+
}
|
123 |
+
|
124 |
+
$use_ssl = pmpro_getOption("use_ssl");
|
125 |
+
|
126 |
+
//default settings
|
127 |
+
if(empty($gateway_environment))
|
128 |
+
{
|
129 |
+
$gateway_environment = "sandbox";
|
130 |
+
pmpro_setOption("gateway_environment", $gateway_environment);
|
131 |
+
}
|
132 |
+
if(empty($pmpro_accepted_credit_cards))
|
133 |
+
{
|
134 |
+
$pmpro_accepted_credit_cards = "Visa,Mastercard,American Express,Discover";
|
135 |
+
pmpro_setOption("accepted_credit_cards", $pmpro_accepted_credit_cards);
|
136 |
+
}
|
137 |
+
|
138 |
+
$pmpro_accepted_credit_cards = explode(",", $pmpro_accepted_credit_cards);
|
139 |
+
|
140 |
+
require_once(dirname(__FILE__) . "/admin_header.php");
|
141 |
+
?>
|
142 |
+
|
143 |
+
<form action="" method="post" enctype="multipart/form-data">
|
144 |
+
<h2>Payment Gateway & SSL Settings</h2>
|
145 |
+
|
146 |
+
<p>Learn more about <a title="Paid Memberships Pro - SSL Settings" target="_blank" href="http://www.paidmembershipspro.com/support/initial-plugin-setup/ssl/">SSL</a> or <a title="Paid Memberships Pro - Payment Gateway Settings" target="_blank" href="http://www.paidmembershipspro.com/support/initial-plugin-setup/payment-gateway/">Payment Gateway Settings</a>.</p>
|
147 |
+
|
148 |
+
<table class="form-table">
|
149 |
+
<tbody>
|
150 |
+
<tr>
|
151 |
+
<th scope="row" valign="top">
|
152 |
+
<label for="gateway">Payment Gateway:</label>
|
153 |
+
</th>
|
154 |
+
<td>
|
155 |
+
<select id="gateway" name="gateway" onchange="pmpro_changeGateway(jQuery(this).val());">
|
156 |
+
<option value="">Testing Only</option>
|
157 |
+
<option value="check" <?php if($gateway == "check") { ?>selected="selected"<?php } ?>>Pay by Check</option>
|
158 |
+
<option value="stripe" <?php if($gateway == "stripe") { ?>selected="selected"<?php } ?>>Stripe</option>
|
159 |
+
<option value="paypalstandard" <?php if($gateway == "paypalstandard") { ?>selected="selected"<?php } ?>>PayPal Standard</option>
|
160 |
+
<option value="paypalexpress" <?php if($gateway == "paypalexpress") { ?>selected="selected"<?php } ?>>PayPal Express</option>
|
161 |
+
<option value="paypal" <?php if($gateway == "paypal") { ?>selected="selected"<?php } ?>>PayPal Website Payments Pro</option>
|
162 |
+
<option value="payflowpro" <?php if($gateway == "payflowpro") { ?>selected="selected"<?php } ?>>PayPal Payflow Pro</option>
|
163 |
+
<option value="authorizenet" <?php if($gateway == "authorizenet") { ?>selected="selected"<?php } ?>>Authorize.net</option>
|
164 |
+
<option value="braintree" <?php if($gateway == "braintree") { ?>selected="selected"<?php } ?>>Braintree Payments</option>
|
165 |
+
</select>
|
166 |
+
</td>
|
167 |
+
</tr>
|
168 |
+
<tr class="gateway gateway_payflowpro" <?php if($gateway != "payflowpro") { ?>style="display: none;"<?php } ?>>
|
169 |
+
<td colspan="2">
|
170 |
+
<strong>Note:</strong> Payflow Pro currently only supports one-time payments. Users will not be able to checkout for levels with recurring payments.
|
171 |
+
</td>
|
172 |
+
</tr>
|
173 |
+
<tr>
|
174 |
+
<th scope="row" valign="top">
|
175 |
+
<label for="gateway_environment">Gateway Environment:</label>
|
176 |
+
</th>
|
177 |
+
<td>
|
178 |
+
<select name="gateway_environment">
|
179 |
+
<option value="sandbox" <?php if($gateway_environment == "sandbox") { ?>selected="selected"<?php } ?>>Sandbox/Testing</option>
|
180 |
+
<option value="live" <?php if($gateway_environment == "live") { ?>selected="selected"<?php } ?>>Live/Production</option>
|
181 |
+
</select>
|
182 |
+
<script>
|
183 |
+
function pmpro_changeGateway(gateway)
|
184 |
+
{
|
185 |
+
//hide all gateway options
|
186 |
+
jQuery('tr.gateway').hide();
|
187 |
+
jQuery('tr.gateway_'+gateway).show();
|
188 |
+
}
|
189 |
+
pmpro_changeGateway(jQuery('#gateway').val());
|
190 |
+
</script>
|
191 |
+
</td>
|
192 |
+
</tr>
|
193 |
+
<tr class="gateway gateway_payflowpro" <?php if($gateway != "payflowpro") { ?>style="display: none;"<?php } ?>>
|
194 |
+
<th scope="row" valign="top">
|
195 |
+
<label for="payflow_partner">Partner:</label>
|
196 |
+
</th>
|
197 |
+
<td>
|
198 |
+
<input type="text" name="payflow_partner" size="60" value="<?php echo $payflow_partner?>" />
|
199 |
+
</td>
|
200 |
+
</tr>
|
201 |
+
<tr class="gateway gateway_payflowpro" <?php if($gateway != "payflowpro") { ?>style="display: none;"<?php } ?>>
|
202 |
+
<th scope="row" valign="top">
|
203 |
+
<label for="payflow_vendor">Vendor:</label>
|
204 |
+
</th>
|
205 |
+
<td>
|
206 |
+
<input type="text" name="payflow_vendor" size="60" value="<?php echo $payflow_vendor?>" />
|
207 |
+
</td>
|
208 |
+
</tr>
|
209 |
+
<tr class="gateway gateway_payflowpro" <?php if($gateway != "payflowpro") { ?>style="display: none;"<?php } ?>>
|
210 |
+
<th scope="row" valign="top">
|
211 |
+
<label for="payflow_user">User:</label>
|
212 |
+
</th>
|
213 |
+
<td>
|
214 |
+
<input type="text" name="payflow_user" size="60" value="<?php echo $payflow_user?>" />
|
215 |
+
</td>
|
216 |
+
</tr>
|
217 |
+
<tr class="gateway gateway_payflowpro" <?php if($gateway != "payflowpro") { ?>style="display: none;"<?php } ?>>
|
218 |
+
<th scope="row" valign="top">
|
219 |
+
<label for="payflow_pwd">Password:</label>
|
220 |
+
</th>
|
221 |
+
<td>
|
222 |
+
<input type="password" name="payflow_pwd" size="60" value="<?php echo $payflow_pwd?>" />
|
223 |
+
</td>
|
224 |
+
</tr>
|
225 |
+
<tr class="gateway gateway_paypal gateway_paypalexpress gateway_paypalstandard" <?php if($gateway != "paypal" && $gateway != "paypalexpress" && $gateway != "paypalstandard") { ?>style="display: none;"<?php } ?>>
|
226 |
+
<th scope="row" valign="top">
|
227 |
+
<label for="gateway_email">Gateway Account Email:</label>
|
228 |
+
</th>
|
229 |
+
<td>
|
230 |
+
<input type="text" name="gateway_email" size="60" value="<?php echo $gateway_email?>" />
|
231 |
+
</td>
|
232 |
+
</tr>
|
233 |
+
<tr class="gateway gateway_paypal gateway_paypalexpress" <?php if($gateway != "paypal" && $gateway != "paypalexpress") { ?>style="display: none;"<?php } ?>>
|
234 |
+
<th scope="row" valign="top">
|
235 |
+
<label for="apiusername">API Username:</label>
|
236 |
+
</th>
|
237 |
+
<td>
|
238 |
+
<input type="text" name="apiusername" size="60" value="<?php echo $apiusername?>" />
|
239 |
+
</td>
|
240 |
+
</tr>
|
241 |
+
<tr class="gateway gateway_paypal gateway_paypalexpress" <?php if($gateway != "paypal" && $gateway != "paypalexpress") { ?>style="display: none;"<?php } ?>>
|
242 |
+
<th scope="row" valign="top">
|
243 |
+
<label for="apipassword">API Password:</label>
|
244 |
+
</th>
|
245 |
+
<td>
|
246 |
+
<input type="text" name="apipassword" size="60" value="<?php echo $apipassword?>" />
|
247 |
+
</td>
|
248 |
+
</tr>
|
249 |
+
<tr class="gateway gateway_paypal gateway_paypalexpress" <?php if($gateway != "paypal" && $gateway != "paypalexpress") { ?>style="display: none;"<?php } ?>>
|
250 |
+
<th scope="row" valign="top">
|
251 |
+
<label for="apisignature">API Signature:</label>
|
252 |
+
</th>
|
253 |
+
<td>
|
254 |
+
<input type="text" name="apisignature" size="60" value="<?php echo $apisignature?>" />
|
255 |
+
</td>
|
256 |
+
</tr>
|
257 |
+
|
258 |
+
<tr class="gateway gateway_authorizenet" <?php if($gateway != "authorizenet") { ?>style="display: none;"<?php } ?>>
|
259 |
+
<th scope="row" valign="top">
|
260 |
+
<label for="loginname">Login Name:</label>
|
261 |
+
</th>
|
262 |
+
<td>
|
263 |
+
<input type="text" name="loginname" size="60" value="<?php echo $loginname?>" />
|
264 |
+
</td>
|
265 |
+
</tr>
|
266 |
+
<tr class="gateway gateway_authorizenet" <?php if($gateway != "authorizenet") { ?>style="display: none;"<?php } ?>>
|
267 |
+
<th scope="row" valign="top">
|
268 |
+
<label for="transactionkey">Transaction Key:</label>
|
269 |
+
</th>
|
270 |
+
<td>
|
271 |
+
<input type="text" name="transactionkey" size="60" value="<?php echo $transactionkey?>" />
|
272 |
+
</td>
|
273 |
+
</tr>
|
274 |
+
|
275 |
+
<tr class="gateway gateway_stripe" <?php if($gateway != "stripe") { ?>style="display: none;"<?php } ?>>
|
276 |
+
<th scope="row" valign="top">
|
277 |
+
<label for="stripe_secretkey">Secret Key:</label>
|
278 |
+
</th>
|
279 |
+
<td>
|
280 |
+
<input type="text" name="stripe_secretkey" size="60" value="<?php echo $stripe_secretkey?>" />
|
281 |
+
</td>
|
282 |
+
</tr>
|
283 |
+
<tr class="gateway gateway_stripe" <?php if($gateway != "stripe") { ?>style="display: none;"<?php } ?>>
|
284 |
+
<th scope="row" valign="top">
|
285 |
+
<label for="stripe_publishablekey">Publishable Key:</label>
|
286 |
+
</th>
|
287 |
+
<td>
|
288 |
+
<input type="text" name="stripe_publishablekey" size="60" value="<?php echo $stripe_publishablekey?>" />
|
289 |
+
</td>
|
290 |
+
</tr>
|
291 |
+
|
292 |
+
<tr class="gateway gateway_braintree" <?php if($gateway != "braintree") { ?>style="display: none;"<?php } ?>>
|
293 |
+
<th scope="row" valign="top">
|
294 |
+
<label for="braintree_merchantid">Merchant ID:</label>
|
295 |
+
</th>
|
296 |
+
<td>
|
297 |
+
<input type="text" name="braintree_merchantid" size="60" value="<?php echo $braintree_merchantid?>" />
|
298 |
+
</td>
|
299 |
+
</tr>
|
300 |
+
<tr class="gateway gateway_braintree" <?php if($gateway != "braintree") { ?>style="display: none;"<?php } ?>>
|
301 |
+
<th scope="row" valign="top">
|
302 |
+
<label for="braintree_publickey">Public Key:</label>
|
303 |
+
</th>
|
304 |
+
<td>
|
305 |
+
<input type="text" name="braintree_publickey" size="60" value="<?php echo $braintree_publickey?>" />
|
306 |
+
</td>
|
307 |
+
</tr>
|
308 |
+
<tr class="gateway gateway_braintree" <?php if($gateway != "braintree") { ?>style="display: none;"<?php } ?>>
|
309 |
+
<th scope="row" valign="top">
|
310 |
+
<label for="braintree_privatekey">Private Key:</label>
|
311 |
+
</th>
|
312 |
+
<td>
|
313 |
+
<input type="text" name="braintree_privatekey" size="60" value="<?php echo $braintree_privatekey?>" />
|
314 |
+
</td>
|
315 |
+
</tr>
|
316 |
+
<tr class="gateway gateway_braintree" <?php if($gateway != "braintree") { ?>style="display: none;"<?php } ?>>
|
317 |
+
<th scope="row" valign="top">
|
318 |
+
<label for="braintree_encryptionkey">Client-Side Encryption Key:</label>
|
319 |
+
</th>
|
320 |
+
<td>
|
321 |
+
<textarea id="braintree_encryptionkey" name="braintree_encryptionkey" rows="3" cols="80"><?php echo esc_textarea($braintree_encryptionkey)?></textarea>
|
322 |
+
</td>
|
323 |
+
</tr>
|
324 |
+
|
325 |
+
<tr class="gateway gateway_authorizenet gateway_payflowpro" <?php if($gateway != "authorizenet" && $gateway != "payflowpro") { ?>style="display: none;"<?php } ?>>
|
326 |
+
<th scope="row" valign="top">
|
327 |
+
<label for="transactionkey">Currency:</label>
|
328 |
+
</th>
|
329 |
+
<td>
|
330 |
+
<input type="hidden" name="currency_fixed" size="60" value="USD" />
|
331 |
+
USD
|
332 |
+
</td>
|
333 |
+
</tr>
|
334 |
+
|
335 |
+
<tr class="gateway gateway_stripe" <?php if($gateway != "stripe") { ?>style="display: none;"<?php } ?>>
|
336 |
+
<th scope="row" valign="top">
|
337 |
+
<label for="transactionkey">Currency:</label>
|
338 |
+
</th>
|
339 |
+
<td>
|
340 |
+
<select name="currency_stripe">
|
341 |
+
<?php
|
342 |
+
global $pmpro_stripe_currencies;
|
343 |
+
foreach($pmpro_stripe_currencies as $ccode => $cdescription)
|
344 |
+
{
|
345 |
+
?>
|
346 |
+
<option value="<?php echo $ccode?>" <?php if($currency == $ccode) { ?>selected="selected"<?php } ?>><?php echo $cdescription?></option>
|
347 |
+
<?php
|
348 |
+
}
|
349 |
+
?>
|
350 |
+
</select>
|
351 |
+
</td>
|
352 |
+
</tr>
|
353 |
+
|
354 |
+
<tr class="gateway gateway_ gateway_paypal gateway_paypalexpress gateway_paypalstandard gateway_braintree" <?php if(!empty($gateway) && $gateway != "paypal" && $gateway != "paypalexpress" && $gateway != "paypalstandard" && $gateway != "braintree") { ?>style="display: none;"<?php } ?>>
|
355 |
+
<th scope="row" valign="top">
|
356 |
+
<label for="transactionkey">Currency:</label>
|
357 |
+
</th>
|
358 |
+
<td>
|
359 |
+
<select name="currency_paypal">
|
360 |
+
<?php
|
361 |
+
global $pmpro_currencies;
|
362 |
+
foreach($pmpro_currencies as $ccode => $cdescription)
|
363 |
+
{
|
364 |
+
?>
|
365 |
+
<option value="<?php echo $ccode?>" <?php if($currency == $ccode) { ?>selected="selected"<?php } ?>><?php echo $cdescription?></option>
|
366 |
+
<?php
|
367 |
+
}
|
368 |
+
?>
|
369 |
+
</select>
|
370 |
+
</td>
|
371 |
+
</tr>
|
372 |
+
|
373 |
+
<tr class="gateway gateway_ gateway_stripe gateway_authorizenet gateway_paypal gateway_payflowpro gateway_braintree" <?php if(!empty($gateway) && $gateway != "authorizenet" && $gateway != "paypal" && $gateway != "stripe" && $gateway != "payflowpro" && $gateway != "braintree") { ?>style="display: none;"<?php } ?>>
|
374 |
+
<th scope="row" valign="top">
|
375 |
+
<label for="creditcards">Accepted Credit Card Types</label>
|
376 |
+
</th>
|
377 |
+
<td>
|
378 |
+
<input type="checkbox" name="creditcards_visa" value="1" <?php if(in_array("Visa", $pmpro_accepted_credit_cards)) { ?>checked="checked"<?php } ?> /> Visa<br />
|
379 |
+
<input type="checkbox" name="creditcards_mastercard" value="1" <?php if(in_array("Mastercard", $pmpro_accepted_credit_cards)) { ?>checked="checked"<?php } ?> /> Mastercard<br />
|
380 |
+
<input type="checkbox" name="creditcards_amex" value="1" <?php if(in_array("American Express", $pmpro_accepted_credit_cards)) { ?>checked="checked"<?php } ?> /> American Express<br />
|
381 |
+
<input type="checkbox" name="creditcards_discover" value="1" <?php if(in_array("Discover", $pmpro_accepted_credit_cards)) { ?>checked="checked"<?php } ?> /> Discover<br />
|
382 |
+
<input type="checkbox" name="creditcards_dinersclub" value="1" <?php if(in_array("Diners Club", $pmpro_accepted_credit_cards)) {?>checked="checked"<?php } ?> /> Diner's Club<br />
|
383 |
+
<input type="checkbox" name="creditcards_enroute" value="1" <?php if(in_array("EnRoute", $pmpro_accepted_credit_cards)) {?>checked="checked"<?php } ?> /> EnRoute<br />
|
384 |
+
<input type="checkbox" name="creditcards_jcb" value="1" <?php if(in_array("JCB", $pmpro_accepted_credit_cards)) {?>checked="checked"<?php } ?> /> JCB<br />
|
385 |
+
</td>
|
386 |
+
</tr>
|
387 |
+
<tr class="gateway gateway_check" <?php if($gateway != "check") { ?>style="display: none;"<?php } ?>>
|
388 |
+
<th scope="row" valign="top">
|
389 |
+
<label for="instructions">Instructions</label>
|
390 |
+
</th>
|
391 |
+
<td>
|
392 |
+
<textarea id="instructions" name="instructions" rows="3" cols="80"><?php echo esc_textarea($instructions)?></textarea>
|
393 |
+
<p><small>Who to write the check out to. Where to mail it. Shown on checkout, confirmation, and invoice pages.</small></p>
|
394 |
+
</td>
|
395 |
+
</tr>
|
396 |
+
<tr class="gateway gateway_ gateway_stripe gateway_authorizenet gateway_paypal gateway_paypalexpress gateway_check gateway_paypalstandard gateway_payflowpro gateway_braintree" <?php if(!empty($gateway) && $gateway != "authorizenet" && $gateway != "paypal" && $gateway != "paypalexpress" && $gateway != "check" && $gateway != "paypalstandard" && $gateway != "payflowpro" && $gateway != "braintree") { ?>style="display: none;"<?php } ?>>
|
397 |
+
<th scope="row" valign="top">
|
398 |
+
<label for="tax">Sales Tax <small>(optional)</small></label>
|
399 |
+
</th>
|
400 |
+
<td>
|
401 |
+
Tax State:
|
402 |
+
<input type="text" name="tax_state" size="4" value="<?php echo $tax_state?>" /> <small>(abbreviation, e.g. "PA")</small>
|
403 |
+
Tax Rate:
|
404 |
+
<input type="text" name="tax_rate" size="10" value="<?php echo $tax_rate?>" /> <small>(decimal, e.g. "0.06")</small>
|
405 |
+
<p><small>If values are given, tax will be applied for any members ordering from the selected state. For more complex tax rules, use the "pmpro_tax" filter.</small></p>
|
406 |
+
</td>
|
407 |
+
</tr>
|
408 |
+
<tr class="gateway gateway_ gateway_stripe gateway_paypalexpress gateway_check gateway_paypalstandard gateway_braintree" <?php if(!empty($gateway) && $gateway != "stripe" && $gateway != "paypalexpress" && $gateway != "check" && $gateway != "paypalstandard" && $gateway != "braintree") { ?>style="display: none;"<?php } ?>>
|
409 |
+
<th scope="row" valign="top">
|
410 |
+
<label for="use_ssl">Use SSL:</label>
|
411 |
+
</th>
|
412 |
+
<td>
|
413 |
+
<select id="use_ssl" name="use_ssl">
|
414 |
+
<option value="0" <?php if(empty($use_ssl)) { ?>selected="selected"<?php } ?>>No</option>
|
415 |
+
<option value="1" <?php if(!empty($use_ssl)) { ?>selected="selected"<?php } ?>>Yes</option>
|
416 |
+
</select>
|
417 |
+
</td>
|
418 |
+
</tr>
|
419 |
+
<tr class="gateway gateway_paypal gateway_authorizenet gateway_payflowpro" <?php if($gateway != "paypal" && $gateway != "authorizenet" && $gateway != "payflowpro") { ?>style="display: none;"<?php } ?>>
|
420 |
+
<th scope="row" valign="top">
|
421 |
+
<label for="use_ssl">Use SSL:</label>
|
422 |
+
</th>
|
423 |
+
<td>
|
424 |
+
Yes. (Required by this Gateway Option)
|
425 |
+
</td>
|
426 |
+
</tr>
|
427 |
+
<tr>
|
428 |
+
<th scope="row" valign="top">
|
429 |
+
<label for="sslseal">SSL Seal Code:</label>
|
430 |
+
</th>
|
431 |
+
<td>
|
432 |
+
<textarea id="sslseal" name="sslseal" rows="3" cols="80"><?php echo stripslashes($sslseal)?></textarea>
|
433 |
+
</td>
|
434 |
+
</tr>
|
435 |
+
<tr>
|
436 |
+
<th scope="row" valign="top">
|
437 |
+
<label for="nuclear_HTTPS">HTTPS Nuclear Option:</label>
|
438 |
+
</th>
|
439 |
+
<td>
|
440 |
+
<input type="checkbox" id="nuclear_HTTPS" name="nuclear_HTTPS" value="1" <?php if(!empty($nuclear_HTTPS)) { ?>checked="checked"<?php } ?> /> Use the "Nuclear Option" to use secure (HTTPS) URLs on your secure pages. Check this if you are using SSL and have warnings on your checkout pages.
|
441 |
+
</td>
|
442 |
+
</tr>
|
443 |
+
<tr class="gateway gateway_paypal gateway_paypalexpress gateway_paypalstandard gateway_payflowpro" <?php if($gateway != "paypal" && $gateway != "paypalexpress" && $gateway != "paypalstandard" && $gateway != "payflowpro") { ?>style="display: none;"<?php } ?>>
|
444 |
+
<th scope="row" valign="top">
|
445 |
+
<label>IPN Handler URL:</label>
|
446 |
+
</th>
|
447 |
+
<td>
|
448 |
+
<p>To fully integrate with PayPal, be sure to set your IPN Handler URL to <pre><?php echo admin_url("admin-ajax.php") . "?action=ipnhandler";?></pre>.</p>
|
449 |
+
</td>
|
450 |
+
</tr>
|
451 |
+
<tr class="gateway gateway_authorizenet" <?php if($gateway != "authorizenet") { ?>style="display: none;"<?php } ?>>
|
452 |
+
<th scope="row" valign="top">
|
453 |
+
<label>Silent Post URL:</label>
|
454 |
+
</th>
|
455 |
+
<td>
|
456 |
+
<p>To fully integrate with Authorize.net, be sure to set your Silent Post URL to <pre><?php echo admin_url("admin-ajax.php") . "?action=authnet_silent_post";?></pre>.</p>
|
457 |
+
</td>
|
458 |
+
</tr>
|
459 |
+
<tr class="gateway gateway_stripe" <?php if($gateway != "stripe") { ?>style="display: none;"<?php } ?>>
|
460 |
+
<th scope="row" valign="top">
|
461 |
+
<label>Web Hook URL:</label>
|
462 |
+
</th>
|
463 |
+
<td>
|
464 |
+
<p>To fully integrate with Stripe, be sure to set your Web Hook URL to <pre><?php echo admin_url("admin-ajax.php") . "?action=stripe_webhook";?></pre>.</p>
|
465 |
+
</td>
|
466 |
+
</tr>
|
467 |
+
<tr class="gateway gateway_braintree" <?php if($gateway != "braintree") { ?>style="display: none;"<?php } ?>>
|
468 |
+
<th scope="row" valign="top">
|
469 |
+
<label>Web Hook URL:</label>
|
470 |
+
</th>
|
471 |
+
<td>
|
472 |
+
<p>To fully integrate with Braintree, be sure to set your Web Hook URL to <pre><?php echo admin_url("admin-ajax.php") . "?action=braintree_webhook";?></pre>.</p>
|
473 |
+
</td>
|
474 |
+
</tr>
|
475 |
+
</tbody>
|
476 |
+
</table>
|
477 |
+
<p class="submit">
|
478 |
+
<input name="savesettings" type="submit" class="button-primary" value="Save Settings" />
|
479 |
+
</p>
|
480 |
+
</form>
|
481 |
+
|
482 |
+
<?php
|
483 |
+
require_once(dirname(__FILE__) . "/admin_footer.php");
|
484 |
+
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/reports.php
DELETED
@@ -1,62 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
global $pmpro_reports;
|
3 |
-
|
4 |
-
require_once(dirname(__FILE__) . "/admin_header.php");
|
5 |
-
|
6 |
-
//default view, report widgets
|
7 |
-
if(empty($_REQUEST['report']))
|
8 |
-
{
|
9 |
-
//wrapper
|
10 |
-
?>
|
11 |
-
<div id="dashboard-widgets-wrap">
|
12 |
-
<div id="dashboard-widgets" class="metabox-holder pmpro_reports-holder columns-2">
|
13 |
-
<div id="postbox-container-1" class="postbox-container">
|
14 |
-
<div id="normal-sortables" class="meta-box-sortables ui-sortable">
|
15 |
-
<?php
|
16 |
-
|
17 |
-
//report widgets
|
18 |
-
$count = 0;
|
19 |
-
$nreports = count($pmpro_reports);
|
20 |
-
$split = false;
|
21 |
-
foreach($pmpro_reports as $report => $title)
|
22 |
-
{
|
23 |
-
//make sure title is translated (since these are set before translations happen)
|
24 |
-
$title = __($title, "pmpro");
|
25 |
-
|
26 |
-
//put half of the report widgets in postbox-container-2
|
27 |
-
if(!$split && $count++ > $nreports/2)
|
28 |
-
{
|
29 |
-
$split = true;
|
30 |
-
?>
|
31 |
-
</div></div><div id="postbox-container-2" class="postbox-container"><div id="side-sortables" class="meta-box-sortables ui-sortable">
|
32 |
-
<?php
|
33 |
-
}
|
34 |
-
?>
|
35 |
-
<div id="pmpro_report_<?php echo $report; ?>" class="postbox pmpro_clickable" onclick="location.href='<?php echo admin_url("admin.php?page=pmpro-reports&report=" . $report);?>';">
|
36 |
-
<h3 class="hndle"><span><?php echo $title; ?></span></h3>
|
37 |
-
<div class="inside">
|
38 |
-
<?php call_user_func("pmpro_report_" . $report . "_widget"); ?>
|
39 |
-
<div style="margin-top:10px;border-top: 1px solid #ddd; padding-top: 10px; text-align:center;">
|
40 |
-
<a class="button button-primary" href="<?php echo admin_url("admin.php?page=pmpro-reports&report=" . $report);?>"><?php _e('Details', 'pmpro');?></a>
|
41 |
-
</div>
|
42 |
-
</div>
|
43 |
-
</div>
|
44 |
-
<?php
|
45 |
-
}
|
46 |
-
|
47 |
-
//end wrapper
|
48 |
-
?>
|
49 |
-
</div>
|
50 |
-
</div>
|
51 |
-
</div>
|
52 |
-
<?php
|
53 |
-
}
|
54 |
-
else
|
55 |
-
{
|
56 |
-
//view a single report
|
57 |
-
$report = $_REQUEST['report'];
|
58 |
-
call_user_func("pmpro_report_" . $report . "_page");
|
59 |
-
}
|
60 |
-
|
61 |
-
require_once(dirname(__FILE__) . "/admin_footer.php");
|
62 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/reports/login.php
DELETED
@@ -1,412 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
PMPro Report
|
4 |
-
Title: Logins
|
5 |
-
Slug: login
|
6 |
-
|
7 |
-
For each report, add a line like:
|
8 |
-
global $pmpro_reports;
|
9 |
-
$pmpro_reports['slug'] = 'Title';
|
10 |
-
|
11 |
-
For each report, also write two functions:
|
12 |
-
* pmpro_report_{slug}_widget() to show up on the report homepage.
|
13 |
-
* pmpro_report_{slug}_page() to show up when users click on the report page widget.
|
14 |
-
*/
|
15 |
-
global $pmpro_reports;
|
16 |
-
$pmpro_reports['login'] = __('Visits, Views, and Logins', 'pmpro');
|
17 |
-
|
18 |
-
function pmpro_report_login_widget()
|
19 |
-
{
|
20 |
-
global $wpdb;
|
21 |
-
$visits = get_option("pmpro_visits", array("today"=>0, "thisday"=>date("Y-m-d"), "alltime"=>0, "month"=>0, "thismonth"=>date("n")));
|
22 |
-
$views = get_option("pmpro_views", array("today"=>0, "thisday"=>date("Y-m-d"), "alltime"=>0, "month"=>0, "thismonth"=>date("n")));
|
23 |
-
$logins = get_option("pmpro_logins", array("today"=>0, "thisday"=>date("Y-m-d"), "alltime"=>0, "month"=>0, "thismonth"=>date("n")));
|
24 |
-
?>
|
25 |
-
<div style="width: 33%; float: left;">
|
26 |
-
<p><?php _e('Visits Today', 'pmpro')?>: <?php echo $visits['today'];?></p>
|
27 |
-
<p><?php _e('Visits This Month', 'pmpro')?>: <?php echo $visits['month'];?></p>
|
28 |
-
<p><?php _e('Visits All Time', 'pmpro')?>: <?php echo $visits['alltime'];?></p>
|
29 |
-
</div>
|
30 |
-
<div style="width: 33%; float: left;">
|
31 |
-
<p><?php _e('Views Today', 'pmpro')?>: <?php echo $views['today'];?></p>
|
32 |
-
<p><?php _e('Views This Month', 'pmpro')?>: <?php echo $views['month'];?></p>
|
33 |
-
<p><?php _e('Views All Time', 'pmpro')?>: <?php echo $views['alltime'];?></p>
|
34 |
-
</div>
|
35 |
-
<div style="width: 33%; float: left;">
|
36 |
-
<p><?php _e('Logins Today', 'pmpro')?>: <?php echo $logins['today'];?></p>
|
37 |
-
<p><?php _e('Logins This Month', 'pmpro')?>: <?php echo $logins['month'];?></p>
|
38 |
-
<p><?php _e('Logins All Time', 'pmpro')?>: <?php echo $logins['alltime'];?></p>
|
39 |
-
</div>
|
40 |
-
<div class="clear"></div>
|
41 |
-
<?php
|
42 |
-
}
|
43 |
-
|
44 |
-
function pmpro_report_login_page()
|
45 |
-
{
|
46 |
-
global $wpdb;
|
47 |
-
|
48 |
-
//vars
|
49 |
-
if(!empty($_REQUEST['s']))
|
50 |
-
$s = $_REQUEST['s'];
|
51 |
-
else
|
52 |
-
$s = "";
|
53 |
-
|
54 |
-
if(!empty($_REQUEST['l']))
|
55 |
-
$l = $_REQUEST['l'];
|
56 |
-
else
|
57 |
-
$l = "";
|
58 |
-
?>
|
59 |
-
<form id="posts-filter" method="get" action="">
|
60 |
-
<h2>
|
61 |
-
<?php _e('Visits, Views, and Logins Report', 'pmpro');?>
|
62 |
-
</h2>
|
63 |
-
<ul class="subsubsub">
|
64 |
-
<li>
|
65 |
-
<?php _ex('Show', 'Dropdown label, e.g. Show All Users', 'pmpro')?> <select name="l" onchange="jQuery('#posts-filter').submit();">
|
66 |
-
<option value="" <?php if(!$l) { ?>selected="selected"<?php } ?>><?php _e('All Users', 'pmpro')?></option>
|
67 |
-
<option value="all" <?php if($l == "all") { ?>selected="selected"<?php } ?>><?php _e('All Levels', 'pmpro')?></option>
|
68 |
-
<?php
|
69 |
-
$levels = $wpdb->get_results("SELECT id, name FROM $wpdb->pmpro_membership_levels ORDER BY name");
|
70 |
-
foreach($levels as $level)
|
71 |
-
{
|
72 |
-
?>
|
73 |
-
<option value="<?php echo $level->id?>" <?php if($l == $level->id) { ?>selected="selected"<?php } ?>><?php echo $level->name?></option>
|
74 |
-
<?php
|
75 |
-
}
|
76 |
-
?>
|
77 |
-
</select>
|
78 |
-
</li>
|
79 |
-
</ul>
|
80 |
-
<p class="search-box">
|
81 |
-
<label class="hidden" for="post-search-input"><?php _ex('Search', 'Search form label', 'pmpro')?> <?php if(empty($l)) echo "Users"; else echo "Members";?>:</label>
|
82 |
-
<input type="hidden" name="page" value="pmpro-reports" />
|
83 |
-
<input type="hidden" name="report" value="login" />
|
84 |
-
<input id="post-search-input" type="text" value="<?php echo $s?>" name="s"/>
|
85 |
-
<input class="button" type="submit" value="Search Members"/>
|
86 |
-
</p>
|
87 |
-
<?php
|
88 |
-
//some vars for the search
|
89 |
-
if(isset($_REQUEST['pn']))
|
90 |
-
$pn = $_REQUEST['pn'];
|
91 |
-
else
|
92 |
-
$pn = 1;
|
93 |
-
|
94 |
-
if(isset($_REQUEST['limit']))
|
95 |
-
$limit = $_REQUEST['limit'];
|
96 |
-
else
|
97 |
-
$limit = 15;
|
98 |
-
|
99 |
-
$end = $pn * $limit;
|
100 |
-
$start = $end - $limit;
|
101 |
-
|
102 |
-
if($s)
|
103 |
-
{
|
104 |
-
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS u.ID, u.user_login, u.user_email, UNIX_TIMESTAMP(u.user_registered) as joindate, mu.membership_id, mu.initial_payment, mu.billing_amount, mu.cycle_period, mu.cycle_number, mu.billing_limit, mu.trial_amount, mu.trial_limit, UNIX_TIMESTAMP(mu.startdate) as startdate, UNIX_TIMESTAMP(mu.enddate) as enddate, m.name as membership FROM $wpdb->users u LEFT JOIN $wpdb->usermeta um ON u.ID = um.user_id LEFT JOIN $wpdb->pmpro_memberships_users mu ON u.ID = mu.user_id AND mu.status = 'active' LEFT JOIN $wpdb->pmpro_membership_levels m ON mu.membership_id = m.id WHERE (u.user_login LIKE '%$s%' OR u.user_email LIKE '%$s%' OR um.meta_value LIKE '%$s%') ";
|
105 |
-
|
106 |
-
if($l == "all")
|
107 |
-
$sqlQuery .= " AND mu.status = 'active' AND mu.membership_id > 0 ";
|
108 |
-
elseif($l)
|
109 |
-
$sqlQuery .= " AND mu.membership_id = '" . $l . "' ";
|
110 |
-
|
111 |
-
$sqlQuery .= "GROUP BY u.ID ORDER BY user_registered DESC LIMIT $start, $limit";
|
112 |
-
}
|
113 |
-
else
|
114 |
-
{
|
115 |
-
$sqlQuery = "SELECT SQL_CALC_FOUND_ROWS u.ID, u.user_login, u.user_email, UNIX_TIMESTAMP(u.user_registered) as joindate, mu.membership_id, mu.initial_payment, mu.billing_amount, mu.cycle_period, mu.cycle_number, mu.billing_limit, mu.trial_amount, mu.trial_limit, UNIX_TIMESTAMP(mu.startdate) as startdate, UNIX_TIMESTAMP(mu.enddate) as enddate, m.name as membership FROM $wpdb->users u LEFT JOIN $wpdb->pmpro_memberships_users mu ON u.ID = mu.user_id AND mu.status = 'active' LEFT JOIN $wpdb->pmpro_membership_levels m ON mu.membership_id = m.id";
|
116 |
-
$sqlQuery .= " WHERE 1=1 ";
|
117 |
-
|
118 |
-
if($l == "all")
|
119 |
-
$sqlQuery .= " AND mu.membership_id > 0 AND mu.status = 'active' ";
|
120 |
-
elseif($l)
|
121 |
-
$sqlQuery .= " AND mu.membership_id = '" . $l . "' ";
|
122 |
-
$sqlQuery .= "GROUP BY u.ID ORDER BY user_registered DESC LIMIT $start, $limit";
|
123 |
-
}
|
124 |
-
|
125 |
-
$sqlQuery = apply_filters("pmpro_members_list_sql", $sqlQuery);
|
126 |
-
|
127 |
-
$theusers = $wpdb->get_results($sqlQuery);
|
128 |
-
$totalrows = $wpdb->get_var("SELECT FOUND_ROWS() as found_rows");
|
129 |
-
|
130 |
-
if($theusers)
|
131 |
-
{
|
132 |
-
?>
|
133 |
-
<p class="clear"><?php echo strval($totalrows)?> <?php if(empty($l)) echo "users"; else echo "members";?> found.
|
134 |
-
<?php
|
135 |
-
}
|
136 |
-
?>
|
137 |
-
<table class="widefat">
|
138 |
-
<thead>
|
139 |
-
<tr class="thead">
|
140 |
-
<th><?php _e('ID', 'pmpro')?></th>
|
141 |
-
<th><?php _e('User', 'pmpro')?></th>
|
142 |
-
<th><?php _e('Name', 'pmpro')?></th>
|
143 |
-
<th><?php _e('Membership', 'pmpro')?></th>
|
144 |
-
<th><?php _e('Joined', 'pmpro')?></th>
|
145 |
-
<th><?php _e('Expires', 'pmpro')?></th>
|
146 |
-
<th><?php _e('Last Visit', 'pmpro')?></th>
|
147 |
-
<th><?php _e('Visits This Month', 'pmpro')?></th>
|
148 |
-
<th><?php _e('Total Visits', 'pmpro')?></th>
|
149 |
-
<th><?php _e('Views This Month', 'pmpro')?></th>
|
150 |
-
<th><?php _e('Total Views', 'pmpro')?></th>
|
151 |
-
<th><?php _e('Last Login', 'pmpro')?></th>
|
152 |
-
<th><?php _e('Logins This Month', 'pmpro')?></th>
|
153 |
-
<th><?php _e('Total Logins', 'pmpro')?></th>
|
154 |
-
</tr>
|
155 |
-
</thead>
|
156 |
-
<tbody id="users" class="list:user user-list">
|
157 |
-
<?php
|
158 |
-
$count = 0;
|
159 |
-
foreach($theusers as $auser)
|
160 |
-
{
|
161 |
-
//get meta
|
162 |
-
$theuser = get_userdata($auser->ID);
|
163 |
-
$visits = get_user_meta($auser->ID, "pmpro_visits", true);
|
164 |
-
$views = get_user_meta($auser->ID, "pmpro_views", true);
|
165 |
-
$logins = get_user_meta($auser->ID, "pmpro_logins", true);
|
166 |
-
if(empty($logins))
|
167 |
-
$logins = array("last"=>"N/A", "month"=>"N/A", "alltime"=>"N/A");
|
168 |
-
?>
|
169 |
-
<tr <?php if($count++ % 2 == 0) { ?>class="alternate"<?php } ?>>
|
170 |
-
<td><?php echo $theuser->ID?></td>
|
171 |
-
<td>
|
172 |
-
<?php echo get_avatar($theuser->ID, 32)?>
|
173 |
-
<strong>
|
174 |
-
<?php
|
175 |
-
$userlink = '<a href="user-edit.php?user_id=' . $theuser->ID . '">' . $theuser->user_login . '</a>';
|
176 |
-
$userlink = apply_filters("pmpro_members_list_user_link", $userlink, $theuser);
|
177 |
-
echo $userlink;
|
178 |
-
?>
|
179 |
-
</strong>
|
180 |
-
</td>
|
181 |
-
<td>
|
182 |
-
<?php echo $theuser->display_name;?>
|
183 |
-
</td>
|
184 |
-
<td><?php echo $auser->membership?></td>
|
185 |
-
<td><?php echo date("m/d/Y", strtotime($theuser->user_registered, current_time("timestamp")))?></td>
|
186 |
-
<td>
|
187 |
-
<?php
|
188 |
-
if($auser->enddate)
|
189 |
-
echo date(get_option('date_format'), $auser->enddate);
|
190 |
-
else
|
191 |
-
echo "Never";
|
192 |
-
?>
|
193 |
-
</td>
|
194 |
-
<td><?php if(!empty($visits['last'])) echo $visits['last'];?></td>
|
195 |
-
<td><?php if(!empty($visits['month'])) echo $visits['month'];?></td>
|
196 |
-
<td><?php if(!empty($visits['alltime'])) echo $visits['alltime'];?></td>
|
197 |
-
<td><?php if(!empty($visits['month'])) echo $views['month'];?></td>
|
198 |
-
<td><?php if(!empty($visits['alltime'])) echo $views['alltime'];?></td>
|
199 |
-
<td><?php if(!empty($visits['last'])) echo $logins['last'];?></td>
|
200 |
-
<td><?php if(!empty($visits['month'])) echo $logins['month'];?></td>
|
201 |
-
<td><?php if(!empty($visits['alltime'])) echo $logins['alltime'];?></td>
|
202 |
-
</tr>
|
203 |
-
<?php
|
204 |
-
}
|
205 |
-
|
206 |
-
if(!$theusers)
|
207 |
-
{
|
208 |
-
?>
|
209 |
-
<tr>
|
210 |
-
<td colspan="9"><p><?php _e('No members found.', 'pmpro')?> <?php if($l) { ?><a href="?page=pmpro-memberslist&s=<?php echo $s?>"><?php _e('Search all levels', 'pmpro')?></a>.<?php } ?></p></td>
|
211 |
-
</tr>
|
212 |
-
<?php
|
213 |
-
}
|
214 |
-
?>
|
215 |
-
</tbody>
|
216 |
-
</table>
|
217 |
-
</form>
|
218 |
-
|
219 |
-
<?php
|
220 |
-
echo pmpro_getPaginationString($pn, $totalrows, $limit, 1, get_admin_url(NULL, "/admin.php?page=pmpro-reports&report=login&s=" . urlencode($s)), "&l=$l&limit=$limit&pn=");
|
221 |
-
?>
|
222 |
-
<?php
|
223 |
-
}
|
224 |
-
|
225 |
-
/*
|
226 |
-
Other code required for your reports. This file is loaded every time WP loads with PMPro enabled.
|
227 |
-
*/
|
228 |
-
|
229 |
-
//track visits
|
230 |
-
function pmpro_report_login_wp_visits()
|
231 |
-
{
|
232 |
-
//don't track admin
|
233 |
-
if(is_admin())
|
234 |
-
return;
|
235 |
-
|
236 |
-
//only track logged in users
|
237 |
-
if(!is_user_logged_in())
|
238 |
-
return;
|
239 |
-
|
240 |
-
//check for cookie
|
241 |
-
if(!empty($_COOKIE['pmpro_visit']))
|
242 |
-
return;
|
243 |
-
|
244 |
-
//set cookie, then track
|
245 |
-
setcookie("pmpro_visit", "1", NULL, COOKIEPATH, COOKIE_DOMAIN, false);
|
246 |
-
|
247 |
-
global $current_user;
|
248 |
-
//track for user
|
249 |
-
if(!empty($current_user->ID))
|
250 |
-
{
|
251 |
-
$visits = $current_user->pmpro_visits;
|
252 |
-
if(empty($visits))
|
253 |
-
$visits = array("last"=>"N/A", "thisdate"=>NULL, "month"=>0, "thismonth"=>NULL, "alltime"=>0);
|
254 |
-
|
255 |
-
//track logins for user
|
256 |
-
$visits['last'] = date(get_option("date_format"));
|
257 |
-
$visits['alltime']++;
|
258 |
-
$thismonth = date("n");
|
259 |
-
if($thismonth == $visits['thismonth'])
|
260 |
-
$visits['month']++;
|
261 |
-
else
|
262 |
-
{
|
263 |
-
$visits['month'] = 1;
|
264 |
-
$visits['thismonth'] = $thismonth;
|
265 |
-
}
|
266 |
-
|
267 |
-
//update user data
|
268 |
-
update_user_meta($current_user->ID, "pmpro_visits", $visits);
|
269 |
-
}
|
270 |
-
|
271 |
-
//track for all
|
272 |
-
$visits = get_option("pmpro_visits");
|
273 |
-
if(empty($visits))
|
274 |
-
$visits = array("today"=>0, "thisdate"=>NULL, "month"=>0, "thismonth"=> NULL, "alltime"=>0);
|
275 |
-
|
276 |
-
$visits['alltime']++;
|
277 |
-
$thisdate = date("Y-d-m");
|
278 |
-
if($thisdate == $visits['thisdate'])
|
279 |
-
$visits['today']++;
|
280 |
-
else
|
281 |
-
{
|
282 |
-
$visits['today'] = 1;
|
283 |
-
$visits['thisdate'] = $thisdate;
|
284 |
-
}
|
285 |
-
if($thismonth == $visits['thismonth'])
|
286 |
-
$visits['month']++;
|
287 |
-
else
|
288 |
-
{
|
289 |
-
$visits['month'] = 1;
|
290 |
-
$visits['thismonth'] = $thismonth;
|
291 |
-
}
|
292 |
-
|
293 |
-
update_option("pmpro_visits", $visits);
|
294 |
-
}
|
295 |
-
add_action("wp", "pmpro_report_login_wp_visits");
|
296 |
-
|
297 |
-
//we want to clear the pmpro_visit cookie on login/logout
|
298 |
-
function pmpro_report_login_clear_visit_cookie()
|
299 |
-
{
|
300 |
-
if(isset($_COOKIE['pmpro_visit']))
|
301 |
-
unset($_COOKIE['pmpro_visit']);
|
302 |
-
}
|
303 |
-
add_action("wp_login", "pmpro_report_login_clear_visit_cookie");
|
304 |
-
add_action("wp_logout", "pmpro_report_login_clear_visit_cookie");
|
305 |
-
|
306 |
-
//track views
|
307 |
-
function pmpro_report_login_wp_views()
|
308 |
-
{
|
309 |
-
//don't track admin
|
310 |
-
if(is_admin())
|
311 |
-
return;
|
312 |
-
|
313 |
-
global $current_user;
|
314 |
-
//track for user
|
315 |
-
if(!empty($current_user->ID))
|
316 |
-
{
|
317 |
-
$views = $current_user->pmpro_views;
|
318 |
-
if(empty($views))
|
319 |
-
$views = array("last"=>"N/A", "month"=>0, "alltime"=>0);
|
320 |
-
|
321 |
-
//track logins for user
|
322 |
-
$views['last'] = date(get_option("date_format"));
|
323 |
-
$views['alltime']++;
|
324 |
-
$thismonth = date("n");
|
325 |
-
if(isset($views['thismonth']) && $thismonth == $views['thismonth'])
|
326 |
-
$views['month']++;
|
327 |
-
else
|
328 |
-
{
|
329 |
-
$views['month'] = 1;
|
330 |
-
$views['thismonth'] = $thismonth;
|
331 |
-
}
|
332 |
-
|
333 |
-
//update user data
|
334 |
-
update_user_meta($current_user->ID, "pmpro_views", $views);
|
335 |
-
}
|
336 |
-
|
337 |
-
//track for all
|
338 |
-
$views = get_option("pmpro_views");
|
339 |
-
if(empty($views))
|
340 |
-
$views = array("today"=>0, "thisdate"=> NULL, "month"=>0, "thismonth"=> NULL, "alltime"=>0);
|
341 |
-
|
342 |
-
$views['alltime']++;
|
343 |
-
$thisdate = date("Y-d-m");
|
344 |
-
if($thisdate == $views['thisdate'])
|
345 |
-
$views['today']++;
|
346 |
-
else
|
347 |
-
{
|
348 |
-
$views['today'] = 1;
|
349 |
-
$views['thisdate'] = $thisdate;
|
350 |
-
}
|
351 |
-
$thismonth = date("n");
|
352 |
-
if(isset($views['thismonth']) && $thismonth == $views['thismonth'])
|
353 |
-
$views['month']++;
|
354 |
-
else
|
355 |
-
{
|
356 |
-
$views['month'] = 1;
|
357 |
-
$views['thismonth'] = $thismonth;
|
358 |
-
}
|
359 |
-
|
360 |
-
update_option("pmpro_views", $views);
|
361 |
-
}
|
362 |
-
add_action("wp", "pmpro_report_login_wp_views");
|
363 |
-
|
364 |
-
//track logins
|
365 |
-
function pmpro_report_login_wp_login($user_login)
|
366 |
-
{
|
367 |
-
//get user data
|
368 |
-
$user = get_user_by("login", $user_login);
|
369 |
-
$logins = $user->pmpro_logins;
|
370 |
-
if(empty($logins))
|
371 |
-
$logins = array("last"=>"N/A", "thisdate"=>NULL, "month"=>0, "thismonth"=> NULL, "alltime"=>0);
|
372 |
-
|
373 |
-
//track logins for user
|
374 |
-
$logins['last'] = date(get_option("date_format"));
|
375 |
-
$logins['alltime']++;
|
376 |
-
$thismonth = date("n");
|
377 |
-
if($thismonth == $logins['thismonth'])
|
378 |
-
$logins['month']++;
|
379 |
-
else
|
380 |
-
{
|
381 |
-
$logins['month'] = 1;
|
382 |
-
$logins['thismonth'] = $thismonth;
|
383 |
-
}
|
384 |
-
|
385 |
-
//update user data
|
386 |
-
update_user_meta($user->ID, "pmpro_logins", $logins);
|
387 |
-
|
388 |
-
//track logins overall
|
389 |
-
$logins = get_option("pmpro_logins");
|
390 |
-
if(empty($logins))
|
391 |
-
$logins = array("today"=>0, "thisdate"=>NULL, "month"=>0, "thismonth"=>NULL, "alltime"=>0);
|
392 |
-
|
393 |
-
$logins['alltime']++;
|
394 |
-
$thisdate = date("Y-d-m");
|
395 |
-
if($thisdate == $logins['thisdate'])
|
396 |
-
$logins['today']++;
|
397 |
-
else
|
398 |
-
{
|
399 |
-
$logins['today'] = 1;
|
400 |
-
$logins['thisdate'] = $thisdate;
|
401 |
-
}
|
402 |
-
if($thismonth == $logins['thismonth'])
|
403 |
-
$logins['month']++;
|
404 |
-
else
|
405 |
-
{
|
406 |
-
$logins['month'] = 1;
|
407 |
-
$logins['thismonth'] = $thismonth;
|
408 |
-
}
|
409 |
-
|
410 |
-
update_option("pmpro_logins", $logins);
|
411 |
-
}
|
412 |
-
add_action("wp_login", "pmpro_report_login_wp_login");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/reports/memberships.php
DELETED
@@ -1,651 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
PMPro Report
|
4 |
-
Title: Membership Stats
|
5 |
-
Slug: memberships
|
6 |
-
|
7 |
-
For each report, add a line like:
|
8 |
-
global $pmpro_reports;
|
9 |
-
$pmpro_reports['slug'] = 'Title';
|
10 |
-
|
11 |
-
For each report, also write two functions:
|
12 |
-
* pmpro_report_{slug}_widget() to show up on the report homepage.
|
13 |
-
* pmpro_report_{slug}_page() to show up when users click on the report page widget.
|
14 |
-
*/
|
15 |
-
|
16 |
-
global $pmpro_reports;
|
17 |
-
|
18 |
-
$pmpro_reports['memberships'] = __('Membership Stats', 'pmpro');
|
19 |
-
|
20 |
-
//queue Google Visualization JS on report page
|
21 |
-
function pmpro_report_memberships_init() {
|
22 |
-
if(is_admin() && isset($_REQUEST['report']) && $_REQUEST['report'] == "memberships" && isset($_REQUEST['page']) && $_REQUEST['page'] == "pmpro-reports")
|
23 |
-
wp_enqueue_script("jsapi", "https://www.google.com/jsapi");
|
24 |
-
}
|
25 |
-
add_action( 'init', 'pmpro_report_memberships_init' );
|
26 |
-
|
27 |
-
|
28 |
-
//widget
|
29 |
-
function pmpro_report_memberships_widget() {
|
30 |
-
global $wpdb, $pmpro_currency_symbol;
|
31 |
-
?>
|
32 |
-
<style type="text/css">
|
33 |
-
#pmpro_report_memberships .section-label {
|
34 |
-
margin: 15px 0;
|
35 |
-
font-size: 18px;
|
36 |
-
text-align: left;
|
37 |
-
display: block;
|
38 |
-
}
|
39 |
-
|
40 |
-
#pmpro_report_memberships .section-label:first-child {
|
41 |
-
margin-top: 0;
|
42 |
-
}
|
43 |
-
|
44 |
-
#pmpro_report_memberships div {text-align: center;}
|
45 |
-
#pmpro_report_memberships em {display: block; font-style: normal; font-size: 2em; margin: 5px; line-height: 26px;}
|
46 |
-
</style>
|
47 |
-
<span id="pmpro_report_memberships">
|
48 |
-
<label class="section-label"><?php _e('Signups', 'pmpro');?>:</label>
|
49 |
-
<div style="width: 25%; float: left;">
|
50 |
-
<label><?php _e('All Time', 'pmpro');?></label>
|
51 |
-
<em><?php echo pmpro_getSignups( 'all time' ); ?></em>
|
52 |
-
</div>
|
53 |
-
<div style="width: 25%; float: left;">
|
54 |
-
<label><?php _e('This Year', 'pmpro');?></label>
|
55 |
-
<em><?php echo pmpro_getSignups( 'this year' ); ?></em>
|
56 |
-
</div>
|
57 |
-
<div style="width: 25%; float: left;">
|
58 |
-
<label><?php _e('This Month', 'pmpro');?></label>
|
59 |
-
<em><?php echo pmpro_getSignups( 'this month' ); ?></em>
|
60 |
-
</div>
|
61 |
-
<div style="width: 25%; float: left;">
|
62 |
-
<label><?php _e('Today', 'pmpro');?></label>
|
63 |
-
<em><?php echo pmpro_getSignups( 'today' ); ?></em>
|
64 |
-
</div>
|
65 |
-
<div class="clear"></div>
|
66 |
-
|
67 |
-
<label class="section-label"><?php _e('Cancellations', 'pmpro');?>:</label>
|
68 |
-
<div style="width: 25%; float: left;">
|
69 |
-
<label><?php _e('All Time', 'pmpro');?></label>
|
70 |
-
<em><?php echo pmpro_getCancellations( 'all time' ); ?></em>
|
71 |
-
</div>
|
72 |
-
<div style="width: 25%; float: left;">
|
73 |
-
<label><?php _e('This Year', 'pmpro');?></label>
|
74 |
-
<em><?php echo pmpro_getCancellations( 'this year' ); ?></em>
|
75 |
-
</div>
|
76 |
-
<div style="width: 25%; float: left;">
|
77 |
-
<label><?php _e('This Month', 'pmpro');?></label>
|
78 |
-
<em><?php echo pmpro_getCancellations( 'this month' ); ?></em>
|
79 |
-
</div>
|
80 |
-
<div style="width: 25%; float: left;">
|
81 |
-
<label><?php _e('Today', 'pmpro');?></label>
|
82 |
-
<em><?php echo pmpro_getCancellations( 'today' ); ?></em>
|
83 |
-
</div>
|
84 |
-
<div class="clear"></div>
|
85 |
-
|
86 |
-
<label class="section-label"><?php _e('Other Stats', 'pmpro');?>:</label>
|
87 |
-
<div style="width: 33%; float: left;">
|
88 |
-
<label><?php _e('Monthly Recurring Revenue (MRR)', 'pmpro');?></label>
|
89 |
-
<em><?php echo $pmpro_currency_symbol . $pmpro_mrr = number_format(pmpro_getMRR( 'all time' ), 2); ?></em>
|
90 |
-
</div>
|
91 |
-
<div style="width: 33%; float: left;">
|
92 |
-
<label><?php _e('Cancellation Rate', 'pmpro');?></label>
|
93 |
-
<em><?php echo pmpro_getCancellationRate('all time' ); ?>%</em>
|
94 |
-
</div>
|
95 |
-
<div style="width: 33%; float: left;">
|
96 |
-
<label><?php _e('Lifetime Value (LTV)', 'pmpro');?></label>
|
97 |
-
<em><?php echo $pmpro_currency_symbol . number_format(pmpro_getLTV('all time' ), 2); ?></em>
|
98 |
-
</div>
|
99 |
-
<div class="clear"></div>
|
100 |
-
</span>
|
101 |
-
<?php
|
102 |
-
}
|
103 |
-
|
104 |
-
function pmpro_report_memberships_page()
|
105 |
-
{
|
106 |
-
global $wpdb, $pmpro_currency_symbol;
|
107 |
-
|
108 |
-
//get values from form
|
109 |
-
if(isset($_REQUEST['type']))
|
110 |
-
$type = sanitize_text_field($_REQUEST['type']);
|
111 |
-
else
|
112 |
-
$type = "signup_v_cancel";
|
113 |
-
|
114 |
-
if(isset($_REQUEST['period']))
|
115 |
-
$period = sanitize_text_field($_REQUEST['period']);
|
116 |
-
else
|
117 |
-
$period = "monthly";
|
118 |
-
|
119 |
-
if(isset($_REQUEST['month']))
|
120 |
-
$month = intval($_REQUEST['month']);
|
121 |
-
else
|
122 |
-
$month = date("n");
|
123 |
-
|
124 |
-
$thisyear = date("Y");
|
125 |
-
if(isset($_REQUEST['year']))
|
126 |
-
$year = intval($_REQUEST['year']);
|
127 |
-
else
|
128 |
-
$year = date("Y");
|
129 |
-
|
130 |
-
if(isset($_REQUEST['level']))
|
131 |
-
$l = intval($_REQUEST['level']);
|
132 |
-
else
|
133 |
-
$l = "";
|
134 |
-
|
135 |
-
//calculate start date and how to group dates returned from DB
|
136 |
-
if($period == "daily")
|
137 |
-
{
|
138 |
-
$startdate = $year . '-' . substr("0" . $month, strlen($month) - 1, 2) . '-01';
|
139 |
-
$enddate = $year . '-' . substr("0" . $month, strlen($month) - 1, 2) . '-31';
|
140 |
-
$date_function = 'DAY';
|
141 |
-
}
|
142 |
-
elseif($period == "monthly")
|
143 |
-
{
|
144 |
-
$startdate = $year . '-01-01';
|
145 |
-
$enddate = strval(intval($year)+1) . '-01-01';
|
146 |
-
$date_function = 'MONTH';
|
147 |
-
}
|
148 |
-
elseif($period == "annual")
|
149 |
-
{
|
150 |
-
$startdate = '1960-01-01'; //all time
|
151 |
-
$date_function = 'YEAR';
|
152 |
-
}
|
153 |
-
|
154 |
-
//testing or live data
|
155 |
-
$gateway_environment = pmpro_getOption("gateway_environment");
|
156 |
-
|
157 |
-
//get data
|
158 |
-
if ( $type === "signup_v_cancel" ) {
|
159 |
-
$sqlQuery = "SELECT $date_function(startdate) as date, COUNT(DISTINCT user_id) as signups
|
160 |
-
FROM $wpdb->pmpro_memberships_users WHERE startdate >= '" . $startdate . "' ";
|
161 |
-
|
162 |
-
if(!empty($enddate))
|
163 |
-
$sqlQuery .= "AND startdate < '" . $enddate . "' ";
|
164 |
-
}
|
165 |
-
if ( $type === "mrr_ltv" ) {
|
166 |
-
// Get total revenue, number of months in system, and date
|
167 |
-
if ( $period == 'annual' )
|
168 |
-
$sqlQuery = "SELECT SUM(total) as total, COUNT(DISTINCT MONTH(timestamp)) as months, $date_function(timestamp) as date
|
169 |
-
FROM $wpdb->pmpro_membership_orders WHERE status NOT IN('refunded', 'review', 'token')
|
170 |
-
AND timestamp >= '" . $startdate . "' AND gateway_environment = '" . esc_sql($gateway_environment) . "' ";
|
171 |
-
|
172 |
-
if ( $period == 'monthly' )
|
173 |
-
$sqlQuery = "SELECT SUM(total) as total, $date_function(timestamp) as date
|
174 |
-
FROM $wpdb->pmpro_membership_orders WHERE status NOT IN('refunded', 'review', 'token')
|
175 |
-
AND timestamp >= '" . $startdate . "' AND gateway_environment = '" . esc_sql($gateway_environment) . "' ";
|
176 |
-
|
177 |
-
if(!empty($enddate))
|
178 |
-
$sqlQuery .= "AND timestamp < '" . $enddate . "' ";
|
179 |
-
}
|
180 |
-
|
181 |
-
if(!empty($l))
|
182 |
-
$sqlQuery .= "AND membership_id IN(" . $l . ") ";
|
183 |
-
|
184 |
-
$sqlQuery .= " GROUP BY date ORDER BY date ";
|
185 |
-
|
186 |
-
$dates = $wpdb->get_results($sqlQuery);
|
187 |
-
|
188 |
-
//fill in blanks in dates
|
189 |
-
$cols = array();
|
190 |
-
if($period == "daily")
|
191 |
-
{
|
192 |
-
$lastday = date("t", $startdate);
|
193 |
-
|
194 |
-
for($i = 1; $i <= $lastday; $i++)
|
195 |
-
{
|
196 |
-
// Signups vs. Cancellations
|
197 |
-
if ( $type === "signup_v_cancel" ) {
|
198 |
-
$cols[$i] = new stdClass();
|
199 |
-
$cols[$i]->signups = 0;
|
200 |
-
foreach($dates as $date)
|
201 |
-
{
|
202 |
-
if( $date->date == $i ) {
|
203 |
-
$cols[$i]->signups = $date->signups;
|
204 |
-
}
|
205 |
-
}
|
206 |
-
}
|
207 |
-
}
|
208 |
-
}
|
209 |
-
elseif($period == "monthly")
|
210 |
-
{
|
211 |
-
for($i = 1; $i < 13; $i++)
|
212 |
-
{
|
213 |
-
// Signups vs. Cancellations
|
214 |
-
if ( $type === "signup_v_cancel" ) {
|
215 |
-
$cols[$i] = new stdClass();
|
216 |
-
$cols[$i]->date = $i;
|
217 |
-
$cols[$i]->signups = 0;
|
218 |
-
foreach($dates as $date)
|
219 |
-
{
|
220 |
-
if( $date->date == $i ) {
|
221 |
-
$cols[$i]->date = $date->date;
|
222 |
-
$cols[$i]->signups = $date->signups;
|
223 |
-
}
|
224 |
-
}
|
225 |
-
}
|
226 |
-
|
227 |
-
// MRR & LTV
|
228 |
-
if ( $type === "mrr_ltv" ) {
|
229 |
-
$cols[$i] = new stdClass();
|
230 |
-
$cols[$i]->date = $i;
|
231 |
-
$cols[$i]->months = 1;
|
232 |
-
foreach($dates as $date)
|
233 |
-
{
|
234 |
-
if( $date->date == $i ) {
|
235 |
-
$cols[$i]->total = $date->total;
|
236 |
-
}
|
237 |
-
}
|
238 |
-
}
|
239 |
-
}
|
240 |
-
}
|
241 |
-
elseif($period == "annual") //annual
|
242 |
-
{
|
243 |
-
}
|
244 |
-
|
245 |
-
$dates = ( ! empty( $cols ) ) ? $cols : $dates;
|
246 |
-
|
247 |
-
// Signups vs. cancellations
|
248 |
-
if ( $type === "signup_v_cancel" )
|
249 |
-
{
|
250 |
-
$sqlQuery = "SELECT $date_function(mu1.modified) as date, COUNT(DISTINCT mu1.user_id) as cancellations
|
251 |
-
FROM $wpdb->pmpro_memberships_users mu1
|
252 |
-
LEFT JOIN $wpdb->pmpro_memberships_users mu2 ON mu1.user_id = mu2.user_id AND
|
253 |
-
mu2.modified > mu1.enddate AND
|
254 |
-
DATE_ADD(mu1.modified, INTERVAL 1 DAY) > mu2.startdate
|
255 |
-
WHERE mu1.status = 'inactive'
|
256 |
-
AND mu2.id IS NULL
|
257 |
-
AND mu1.startdate >= '" . $startdate . "'
|
258 |
-
AND mu1.startdate < '" . $enddate . "' ";
|
259 |
-
|
260 |
-
//restrict by level
|
261 |
-
if(!empty($l))
|
262 |
-
$sqlQuery .= "AND membership_id IN(" . $l . ") ";
|
263 |
-
|
264 |
-
$sqlQuery .= " GROUP BY date ORDER BY date ";
|
265 |
-
|
266 |
-
$cdates = $wpdb->get_results($sqlQuery, OBJECT_K);
|
267 |
-
|
268 |
-
foreach( $dates as &$date )
|
269 |
-
{
|
270 |
-
if(!empty($cdates[$date->date]))
|
271 |
-
$date->cancellations = $cdates[$date->date]->cancellations;
|
272 |
-
else
|
273 |
-
$date->cancellations = 0;
|
274 |
-
}
|
275 |
-
}
|
276 |
-
|
277 |
-
// MRR & LTV
|
278 |
-
if ( $type === "mrr_ltv" && count( $dates ) === 1 ) {
|
279 |
-
$dummy_date = new stdClass();
|
280 |
-
$dummy_date->total = 0;
|
281 |
-
$dummy_date->months = 0;
|
282 |
-
$dummy_date->date = $dates[0]->date - 1;
|
283 |
-
array_unshift( $dates, $dummy_date ); // Add to beginning
|
284 |
-
}
|
285 |
-
?>
|
286 |
-
<form id="posts-filter" method="get" action="">
|
287 |
-
<h2>
|
288 |
-
<?php _e('Membership Stats', 'pmpro');?>
|
289 |
-
</h2>
|
290 |
-
<ul class="subsubsub">
|
291 |
-
<li>
|
292 |
-
<?php _ex('Show', 'Dropdown label, e.g. Show Daily Revenue for January', 'pmpro')?>
|
293 |
-
<select id="period" name="period">
|
294 |
-
<option value="daily" <?php selected($period, "daily");?>><?php _e('Daily', 'pmpro');?></option>
|
295 |
-
<option value="monthly" <?php selected($period, "monthly");?>><?php _e('Monthly', 'pmpro');?></option>
|
296 |
-
<option value="annual" <?php selected($period, "annual");?>><?php _e('Annual', 'pmpro');?></option>
|
297 |
-
</select>
|
298 |
-
<select id="type" name="type">
|
299 |
-
<option value="signup_v_cancel" <?php selected($type, "signup_v_cancel");?>><?php _e('Signups vs. Cancellations', 'pmpro');?></option>
|
300 |
-
<?php /*
|
301 |
-
<option value="mrr_ltv" <?php selected($type, "mrr_ltv");?>><?php _e('MRR & LTV', 'pmpro');?></option>
|
302 |
-
*/ ?>
|
303 |
-
</select>
|
304 |
-
<span id="for"><?php _ex('for', 'Dropdown label, e.g. Show Daily Revenue for January', 'pmpro')?></span>
|
305 |
-
<select id="month" name="month">
|
306 |
-
<?php for($i = 1; $i < 13; $i++) { ?>
|
307 |
-
<option value="<?php echo $i;?>" <?php selected($month, $i);?>><?php echo date("F", mktime(0, 0, 0, $i));?></option>
|
308 |
-
<?php } ?>
|
309 |
-
</select>
|
310 |
-
<select id="year" name="year">
|
311 |
-
<?php for($i = $thisyear; $i > 2007; $i--) { ?>
|
312 |
-
<option value="<?php echo $i;?>" <?php selected($year, $i);?>><?php echo $i;?></option>
|
313 |
-
<?php } ?>
|
314 |
-
</select>
|
315 |
-
<span id="for"><?php _ex('for', 'Dropdown label, e.g. Show Daily Revenue for January', 'pmpro')?></span>
|
316 |
-
<select name="level">
|
317 |
-
<option value="" <?php if(!$l) { ?>selected="selected"<?php } ?>><?php _e('All Levels', 'pmpro');?></option>
|
318 |
-
<?php
|
319 |
-
$levels = $wpdb->get_results("SELECT id, name FROM $wpdb->pmpro_membership_levels ORDER BY name");
|
320 |
-
foreach($levels as $level)
|
321 |
-
{
|
322 |
-
?>
|
323 |
-
<option value="<?php echo $level->id?>" <?php if($l == $level->id) { ?>selected="selected"<?php } ?>><?php echo $level->name?></option>
|
324 |
-
<?php
|
325 |
-
}
|
326 |
-
?>
|
327 |
-
</select>
|
328 |
-
|
329 |
-
<input type="hidden" name="page" value="pmpro-reports" />
|
330 |
-
<input type="hidden" name="report" value="memberships" />
|
331 |
-
<input type="submit" value="<?php _ex('Generate Report', 'Submit button value.', 'pmpro');?>" />
|
332 |
-
</li>
|
333 |
-
</ul>
|
334 |
-
|
335 |
-
<div id="chart_div" style="clear: both; width: 100%; height: 500px;"></div>
|
336 |
-
|
337 |
-
<script>
|
338 |
-
//update month/year when period dropdown is changed
|
339 |
-
jQuery(document).ready(function() {
|
340 |
-
jQuery('#period').change(function() {
|
341 |
-
pmpro_ShowMonthOrYear();
|
342 |
-
});
|
343 |
-
});
|
344 |
-
|
345 |
-
function pmpro_ShowMonthOrYear()
|
346 |
-
{
|
347 |
-
var period = jQuery('#period').val();
|
348 |
-
if(period == 'daily')
|
349 |
-
{
|
350 |
-
jQuery('#for').show();
|
351 |
-
jQuery('#month').show();
|
352 |
-
jQuery('#year').show();
|
353 |
-
}
|
354 |
-
else if(period == 'monthly')
|
355 |
-
{
|
356 |
-
jQuery('#for').show();
|
357 |
-
jQuery('#month').hide();
|
358 |
-
jQuery('#year').show();
|
359 |
-
}
|
360 |
-
else
|
361 |
-
{
|
362 |
-
jQuery('#for').hide();
|
363 |
-
jQuery('#month').hide();
|
364 |
-
jQuery('#year').hide();
|
365 |
-
}
|
366 |
-
}
|
367 |
-
|
368 |
-
pmpro_ShowMonthOrYear();
|
369 |
-
|
370 |
-
//draw the chart
|
371 |
-
google.load("visualization", "1", {packages:["corechart"]});
|
372 |
-
google.setOnLoadCallback(drawChart);
|
373 |
-
function drawChart() {
|
374 |
-
|
375 |
-
var data = google.visualization.arrayToDataTable([
|
376 |
-
<?php if ( $type === "signup_v_cancel" ) : // Signups vs. cancellations ?>
|
377 |
-
['<?php echo $date_function;?>', 'Signups', 'Cancellations'],
|
378 |
-
<?php foreach($dates as $key => $value) { ?>
|
379 |
-
['<?php if($period == "monthly") echo date("M", mktime(0,0,0,$value->date)); else if($period == "daily") echo $key; else echo $value->date;?>', <?php echo $value->signups; ?>, <?php echo $value->cancellations; ?>],
|
380 |
-
<?php } ?>
|
381 |
-
<?php endif; ?>
|
382 |
-
|
383 |
-
<?php if ( $type === "mrr_ltv" ) : // Signups vs. cancellations ?>
|
384 |
-
['<?php echo $date_function;?>', 'MRR', 'LTV'],
|
385 |
-
<?php foreach($dates as $key => $value) { ?>
|
386 |
-
['<?php if($period == "monthly") echo date("M", mktime(0,0,0,$value->date)); else if($period == "daily") echo $key; else echo $value->date;?>', <?php echo (($mrr = $value->total / $value->months) && $mrr != 0) ? $mrr : 0; ?>, <?php echo pmpro_getLTV($period, NULL, $mrr ); ?>],
|
387 |
-
<?php } ?>
|
388 |
-
<?php endif; ?>
|
389 |
-
]);
|
390 |
-
|
391 |
-
var options = {
|
392 |
-
colors: ['#0099c6', '#dc3912'],
|
393 |
-
hAxis: {title: '<?php echo $date_function;?>', titleTextStyle: {color: 'black'}, maxAlternation: 1},
|
394 |
-
vAxis: {color: 'green', titleTextStyle: {color: '#51a351'}},
|
395 |
-
};
|
396 |
-
|
397 |
-
<?php if ( $type === "signup_v_cancel" ) : // Signups vs. cancellations ?>
|
398 |
-
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
|
399 |
-
<?php elseif ( $type === "mrr_ltv" ) : // MRR & LTV ?>
|
400 |
-
var formatter = new google.visualization.NumberFormat({prefix: '<?php echo html_entity_decode($pmpro_currency_symbol);?>'});
|
401 |
-
formatter.format(data, 2);
|
402 |
-
var formatter = new google.visualization.NumberFormat({prefix: '<?php echo html_entity_decode($pmpro_currency_symbol);?>'});
|
403 |
-
formatter.format(data, 1);
|
404 |
-
|
405 |
-
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
|
406 |
-
<?php endif; ?>
|
407 |
-
chart.draw(data, options);
|
408 |
-
}
|
409 |
-
</script>
|
410 |
-
|
411 |
-
</form>
|
412 |
-
<?php
|
413 |
-
}
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
/*
|
418 |
-
Other code required for your reports. This file is loaded every time WP loads with PMPro enabled.
|
419 |
-
*/
|
420 |
-
|
421 |
-
//get signups
|
422 |
-
function pmpro_getSignups($period = false, $levels = 'all')
|
423 |
-
{
|
424 |
-
//check for a transient
|
425 |
-
$cache = get_transient( 'pmpro_report_memberships_signups' );
|
426 |
-
if( ! empty( $cache ) && ! empty( $cache[$period] ) && ! empty( $cache[$period][$levels] ) )
|
427 |
-
return $cache[$period][$levels];
|
428 |
-
|
429 |
-
//a sale is an order with status = success
|
430 |
-
if( $period == 'today' )
|
431 |
-
$startdate = date(' Y-m-d' );
|
432 |
-
elseif( $period == 'this month')
|
433 |
-
$startdate = date( 'Y-m' ) . '-01';
|
434 |
-
elseif( $period == 'this year')
|
435 |
-
$startdate = date( 'Y' ) . '-01-01';
|
436 |
-
else
|
437 |
-
$startdate = '';
|
438 |
-
|
439 |
-
|
440 |
-
//build query
|
441 |
-
global $wpdb;
|
442 |
-
|
443 |
-
$sqlQuery = "SELECT COUNT(DISTINCT user_id) FROM $wpdb->pmpro_memberships_users WHERE startdate >= '" . $startdate . "' ";
|
444 |
-
|
445 |
-
//restrict by level
|
446 |
-
if(!empty($levels) && $levels != 'all')
|
447 |
-
$sqlQuery .= "AND membership_id IN(" . $levels . ") ";
|
448 |
-
|
449 |
-
$signups = $wpdb->get_var($sqlQuery);
|
450 |
-
|
451 |
-
//save in cache
|
452 |
-
if(!empty($cache) && !empty($cache[$period]))
|
453 |
-
$cache[$period][$levels] = $signups;
|
454 |
-
elseif(!empty($cache))
|
455 |
-
$cache[$period] = array($levels => $signups);
|
456 |
-
else
|
457 |
-
$cache = array($period => array($levels => $signups));
|
458 |
-
|
459 |
-
set_transient("pmpro_report_memberships_signups", $cache, 3600*24);
|
460 |
-
|
461 |
-
return $signups;
|
462 |
-
}
|
463 |
-
|
464 |
-
//get cancellations
|
465 |
-
function pmpro_getCancellations($period = false, $levels = 'all')
|
466 |
-
{
|
467 |
-
//check for a transient
|
468 |
-
$cache = get_transient( 'pmpro_report_memberships_cancellations' );
|
469 |
-
if( ! empty( $cache ) && ! empty( $cache[$period] ) && ! empty( $cache[$period][$levels] ) )
|
470 |
-
return $cache[$period][$levels];
|
471 |
-
|
472 |
-
//figure out start date
|
473 |
-
if( $period == 'today' )
|
474 |
-
$startdate = date(' Y-m-d' );
|
475 |
-
elseif( $period == 'this month')
|
476 |
-
$startdate = date( 'Y-m' ) . '-01';
|
477 |
-
elseif( $period == 'this year')
|
478 |
-
$startdate = date( 'Y' ) . '-01-01';
|
479 |
-
else
|
480 |
-
$startdate = '';
|
481 |
-
|
482 |
-
$startdate_plus_one = strtotime( $startdate . + ' + 1 day', current_time("timestamp") );
|
483 |
-
|
484 |
-
/*
|
485 |
-
build query.
|
486 |
-
cancellations are marked in the memberships users table with status = 'inactive'
|
487 |
-
we try to ignore cancellations when the user gets a new level with 24 hours (probably an upgrade or downgrade)
|
488 |
-
*/
|
489 |
-
global $wpdb;
|
490 |
-
|
491 |
-
//$sqlQuery = "SELECT mu1.user_id, mu2.user_id FROM $wpdb->pmpro_memberships_users mu1 LEFT JOIN $wpdb->pmpro_memberships_users mu2 ON mu1.user_id = mu2.user_id AND mu2.status = 'inactive' AND mu2.startdate > mu1.startdate";
|
492 |
-
$sqlQuery = "SELECT COUNT(mu1.id)
|
493 |
-
FROM $wpdb->pmpro_memberships_users mu1
|
494 |
-
LEFT JOIN $wpdb->pmpro_memberships_users mu2 ON mu1.user_id = mu2.user_id AND
|
495 |
-
mu2.modified > mu1.enddate AND
|
496 |
-
DATE_ADD(mu1.modified, INTERVAL 1 DAY) > mu2.startdate
|
497 |
-
WHERE mu1.status = 'inactive'
|
498 |
-
AND mu2.id IS NULL
|
499 |
-
AND mu1.startdate >= '" . $startdate . "' ";
|
500 |
-
|
501 |
-
//restrict by level
|
502 |
-
if(!empty($levels) && $levels != 'all')
|
503 |
-
$sqlQuery .= "AND membership_id IN(" . $levels . ") ";
|
504 |
-
|
505 |
-
$cancellations = $wpdb->get_var($sqlQuery);
|
506 |
-
|
507 |
-
//save in cache
|
508 |
-
if(!empty($cache) && !empty($cache[$period]) && is_array($cache[$period]))
|
509 |
-
$cache[$period][$levels] = $cancellations;
|
510 |
-
elseif(!empty($cache))
|
511 |
-
$cache[$period] = array($levels => $cancellations);
|
512 |
-
else
|
513 |
-
$cache = array($period => array($levels => $cancellations));
|
514 |
-
|
515 |
-
set_transient("pmpro_report_memberships_cancellations", $cache, 3600*24);
|
516 |
-
|
517 |
-
return $cancellations;
|
518 |
-
}
|
519 |
-
|
520 |
-
//get MRR
|
521 |
-
function pmpro_getMRR($period, $levels = 'all')
|
522 |
-
{
|
523 |
-
//check for a transient
|
524 |
-
//$cache = get_transient("pmpro_report_mrr");
|
525 |
-
if(!empty($cache) && !empty($cache[$period]) && !empty($cache[$period][$levels]))
|
526 |
-
return $cache[$period][$levels];
|
527 |
-
|
528 |
-
//a sale is an order with status NOT IN refunded, review, token, error
|
529 |
-
if($period == "this month")
|
530 |
-
$startdate = date("Y-m") . "-01";
|
531 |
-
elseif($period == "this year")
|
532 |
-
$startdate = date("Y") . "-01-01";
|
533 |
-
else
|
534 |
-
$startdate = "";
|
535 |
-
|
536 |
-
$gateway_environment = pmpro_getOption("gateway_environment");
|
537 |
-
|
538 |
-
//build query
|
539 |
-
global $wpdb;
|
540 |
-
// Get total revenue
|
541 |
-
$sqlQuery = "SELECT SUM(total) FROM $wpdb->pmpro_membership_orders WHERE status NOT IN('refunded', 'review', 'token', 'error') AND timestamp >= '" . $startdate . "' AND gateway_environment = '" . esc_sql($gateway_environment) . "' ";
|
542 |
-
|
543 |
-
//restrict by level
|
544 |
-
if(!empty($levels) && $levels != 'all') {
|
545 |
-
$sqlQuery .= "AND membership_id IN(" . $levels . ") ";
|
546 |
-
}
|
547 |
-
|
548 |
-
$revenue = $wpdb->get_var($sqlQuery);
|
549 |
-
|
550 |
-
//when was the first order
|
551 |
-
$first_order_timestamp = $wpdb->get_var("SELECT UNIX_TIMESTAMP(`timestamp`) FROM $wpdb->pmpro_membership_orders WHERE `timestamp` IS NOT NULL AND `timestamp` > '0000-00-00 00:00:00' ORDER BY `timestamp` LIMIT 1");
|
552 |
-
|
553 |
-
//if we don't have a timestamp, we can't do this
|
554 |
-
if(empty($first_order_timestamp))
|
555 |
-
return false;
|
556 |
-
|
557 |
-
//how many months ago was the first order
|
558 |
-
$months = $wpdb->get_var("SELECT PERIOD_DIFF('" . date("Ym") . "', '" . date("Ym", $first_order_timestamp) . "')");
|
559 |
-
|
560 |
-
/* this works in PHP 5.3+ without using MySQL to get the diff
|
561 |
-
$date1 = new DateTime(date("Y-m-d", $first_order_timestamp));
|
562 |
-
$date2 = new DateTime(date("Y-m-d"));
|
563 |
-
$interval = $date1->diff($date2);
|
564 |
-
$years = intval($interval->format('%y'));
|
565 |
-
$months = $years*12 + intval($interval->format('%m'));
|
566 |
-
*/
|
567 |
-
|
568 |
-
if($months > 0)
|
569 |
-
$mrr = $revenue / $months;
|
570 |
-
else
|
571 |
-
$mrr = 0;
|
572 |
-
|
573 |
-
//save in cache
|
574 |
-
if(!empty($cache) && !empty($cache[$period]))
|
575 |
-
$cache[$period][$levels] = $mrr;
|
576 |
-
elseif(!empty($cache))
|
577 |
-
$cache[$period] = array($levels => $mrr);
|
578 |
-
else
|
579 |
-
$cache = array($period => array($levels => $mrr));
|
580 |
-
|
581 |
-
set_transient("pmpro_report_mrr", $cache, 3600*24);
|
582 |
-
|
583 |
-
return $mrr;
|
584 |
-
}
|
585 |
-
|
586 |
-
//get Cancellation Rate
|
587 |
-
function pmpro_getCancellationRate($period, $levels = 'all')
|
588 |
-
{
|
589 |
-
//check for a transient
|
590 |
-
$cache = get_transient("pmpro_report_cancellation_rate");
|
591 |
-
if(!empty($cache) && !empty($cache[$period]) && !empty($cache[$period][$levels]))
|
592 |
-
return $cache[$period][$levels];
|
593 |
-
|
594 |
-
$signups = pmpro_getSignups($period, $levels);
|
595 |
-
$cancellations = pmpro_getCancellations($period, $levels);
|
596 |
-
|
597 |
-
if(empty($signups))
|
598 |
-
return false;
|
599 |
-
|
600 |
-
$rate = number_format(($cancellations / $signups)*100, 2);
|
601 |
-
|
602 |
-
//save in cache
|
603 |
-
if(!empty($cache) && !empty($cache[$period]))
|
604 |
-
$cache[$period][$levels] = $rate;
|
605 |
-
elseif(!empty($cache))
|
606 |
-
$cache[$period] = array($levels => $rate);
|
607 |
-
else
|
608 |
-
$cache = array($period => array($levels => $rate));
|
609 |
-
|
610 |
-
set_transient("pmpro_report_cancellation_rate", $cache, 3600*24);
|
611 |
-
|
612 |
-
return $rate;
|
613 |
-
}
|
614 |
-
|
615 |
-
//get LTV
|
616 |
-
function pmpro_getLTV($period, $levels = 'all', $mrr = NULL, $signups = NULL, $cancellation_rate = NULL)
|
617 |
-
{
|
618 |
-
if(empty($mrr))
|
619 |
-
$mrr = pmpro_getMRR($period, $levels);
|
620 |
-
if(empty($signups))
|
621 |
-
$signups = pmpro_getSignups($period, $levels);
|
622 |
-
if(empty($cancellation_rate))
|
623 |
-
$cancellation_rate = pmpro_getCancellationRate($period, $levels);
|
624 |
-
|
625 |
-
//average monthly spend
|
626 |
-
if(empty($signups))
|
627 |
-
return false;
|
628 |
-
|
629 |
-
if($signups > 0)
|
630 |
-
$ams = $mrr / $signups;
|
631 |
-
else
|
632 |
-
$ams = 0;
|
633 |
-
|
634 |
-
if($cancellation_rate > 0)
|
635 |
-
$ltv = $ams * (1/$cancellation_rate);
|
636 |
-
else
|
637 |
-
$ltv = $ams;
|
638 |
-
|
639 |
-
return $ltv;
|
640 |
-
}
|
641 |
-
|
642 |
-
//delete transients when an order goes through
|
643 |
-
function pmpro_report_memberships_delete_transients()
|
644 |
-
{
|
645 |
-
delete_transient("pmpro_report_mrr");
|
646 |
-
delete_transient("pmpro_report_cancellation_rate");
|
647 |
-
delete_transient("pmpro_report_memberships_cancellations");
|
648 |
-
delete_transient("pmpro_report_memberships_signups");
|
649 |
-
}
|
650 |
-
add_action("pmpro_after_checkout", "pmpro_report_memberships_delete_transients");
|
651 |
-
add_action("pmpro_updated_order", "pmpro_report_memberships_delete_transients");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adminpages/reports/sales.php
DELETED
@@ -1,397 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
PMPro Report
|
4 |
-
Title: Sales
|
5 |
-
Slug: sales
|
6 |
-
|
7 |
-
For each report, add a line like:
|
8 |
-
global $pmpro_reports;
|
9 |
-
$pmpro_reports['slug'] = 'Title';
|
10 |
-
|
11 |
-
For each report, also write two functions:
|
12 |
-
* pmpro_report_{slug}_widget() to show up on the report homepage.
|
13 |
-
* pmpro_report_{slug}_page() to show up when users click on the report page widget.
|
14 |
-
*/
|
15 |
-
global $pmpro_reports;
|
16 |
-
$gateway_environment = pmpro_getOption("gateway_environment");
|
17 |
-
if($gateway_environment == "sandbox")
|
18 |
-
$pmpro_reports['sales'] = __('Sales and Revenue (Testing/Sandbox)', 'pmpro');
|
19 |
-
else
|
20 |
-
$pmpro_reports['sales'] = __('Sales and Revenue', 'pmpro');
|
21 |
-
|
22 |
-
//queue Google Visualization JS on report page
|
23 |
-
function pmpro_report_sales_init()
|
24 |
-
{
|
25 |
-
if(is_admin() && isset($_REQUEST['report']) && $_REQUEST['report'] == "sales" && isset($_REQUEST['page']) && $_REQUEST['page'] == "pmpro-reports")
|
26 |
-
{
|
27 |
-
wp_enqueue_script("jsapi", "https://www.google.com/jsapi");
|
28 |
-
}
|
29 |
-
}
|
30 |
-
add_action("init", "pmpro_report_sales_init");
|
31 |
-
|
32 |
-
//widget
|
33 |
-
function pmpro_report_sales_widget()
|
34 |
-
{
|
35 |
-
global $wpdb, $pmpro_currency_symbol;
|
36 |
-
?>
|
37 |
-
<style>
|
38 |
-
#pmpro_report_sales div {text-align: center;}
|
39 |
-
#pmpro_report_sales em {display: block; font-style: normal; font-size: 2em; margin: 5px;}
|
40 |
-
</style>
|
41 |
-
<span id="#pmpro_report_sales">
|
42 |
-
<div style="width: 25%; float: left;">
|
43 |
-
<em><?php echo pmpro_getSales("all time");?></em>
|
44 |
-
<label>All Time</label>
|
45 |
-
<em><?php echo $pmpro_currency_symbol . number_format(pmpro_getRevenue("all time"), 2);?></em>
|
46 |
-
</div>
|
47 |
-
<div style="width: 25%; float: left;">
|
48 |
-
<em><?php echo pmpro_getSales("this year");?></em>
|
49 |
-
<label>This Year</label>
|
50 |
-
<em><?php echo $pmpro_currency_symbol . number_format(pmpro_getRevenue("this year"), 2);?></em>
|
51 |
-
</div>
|
52 |
-
<div style="width: 25%; float: left;">
|
53 |
-
<em><?php echo pmpro_getSales("this month");?></em>
|
54 |
-
<label>This Month</label>
|
55 |
-
<em><?php echo $pmpro_currency_symbol . number_format(pmpro_getRevenue("this month"), 2);?></em>
|
56 |
-
</div>
|
57 |
-
<div style="width: 25%; float: left;">
|
58 |
-
<em><?php echo pmpro_getSales("today");?></em>
|
59 |
-
<label>Today</label>
|
60 |
-
<em><?php echo $pmpro_currency_symbol . number_format(pmpro_getRevenue("today"), 2);?></em>
|
61 |
-
</div>
|
62 |
-
<div class="clear"></div>
|
63 |
-
</span>
|
64 |
-
<?php
|
65 |
-
}
|
66 |
-
|
67 |
-
function pmpro_report_sales_page()
|
68 |
-
{
|
69 |
-
global $wpdb, $pmpro_currency_symbol;
|
70 |
-
|
71 |
-
//get values from form
|
72 |
-
if(isset($_REQUEST['type']))
|
73 |
-
$type = sanitize_text_field($_REQUEST['type']);
|
74 |
-
else
|
75 |
-
$type = "revenue";
|
76 |
-
|
77 |
-
if($type == "sales")
|
78 |
-
$type_function = "COUNT";
|
79 |
-
else
|
80 |
-
$type_function = "SUM";
|
81 |
-
|
82 |
-
if(isset($_REQUEST['period']))
|
83 |
-
$period = sanitize_text_field($_REQUEST['period']);
|
84 |
-
else
|
85 |
-
$period = "daily";
|
86 |
-
|
87 |
-
if(isset($_REQUEST['month']))
|
88 |
-
$month = intval($_REQUEST['month']);
|
89 |
-
else
|
90 |
-
$month = date("n");
|
91 |
-
|
92 |
-
$thisyear = date("Y");
|
93 |
-
if(isset($_REQUEST['year']))
|
94 |
-
$year = intval($_REQUEST['year']);
|
95 |
-
else
|
96 |
-
$year = $thisyear;
|
97 |
-
|
98 |
-
if(isset($_REQUEST['level']))
|
99 |
-
$l = intval($_REQUEST['level']);
|
100 |
-
else
|
101 |
-
$l = "";
|
102 |
-
|
103 |
-
//calculate start date and how to group dates returned from DB
|
104 |
-
if($period == "daily")
|
105 |
-
{
|
106 |
-
$startdate = $year . '-' . substr("0" . $month, strlen($month) - 1, 2) . '-01';
|
107 |
-
$enddate = $year . '-' . substr("0" . $month, strlen($month) - 1, 2) . '-31';
|
108 |
-
$date_function = 'DAY';
|
109 |
-
}
|
110 |
-
elseif($period == "monthly")
|
111 |
-
{
|
112 |
-
$startdate = $year . '-01-01';
|
113 |
-
$enddate = strval(intval($year)+1) . '-01-01';
|
114 |
-
$date_function = 'MONTH';
|
115 |
-
}
|
116 |
-
else
|
117 |
-
{
|
118 |
-
$startdate = '1960-01-01'; //all time
|
119 |
-
$date_function = 'YEAR';
|
120 |
-
}
|
121 |
-
|
122 |
-
//testing or live data
|
123 |
-
$gateway_environment = pmpro_getOption("gateway_environment");
|
124 |
-
|
125 |
-
//get data
|
126 |
-
$sqlQuery = "SELECT $date_function(timestamp) as date, $type_function(total) as value FROM $wpdb->pmpro_membership_orders WHERE timestamp >= '" . $startdate . "' AND status NOT IN('refunded', 'review', 'token', 'error') AND gateway_environment = '" . esc_sql($gateway_environment) . "' ";
|
127 |
-
|
128 |
-
if(!empty($enddate))
|
129 |
-
$sqlQuery .= "AND timestamp < '" . $enddate . "' ";
|
130 |
-
|
131 |
-
if(!empty($l))
|
132 |
-
$sqlQuery .= "AND membership_id IN(" . $l . ") ";
|
133 |
-
|
134 |
-
$sqlQuery .= " GROUP BY date ORDER BY date ";
|
135 |
-
|
136 |
-
$dates = $wpdb->get_results($sqlQuery);
|
137 |
-
|
138 |
-
//fill in blanks in dates
|
139 |
-
$cols = array();
|
140 |
-
if($period == "daily")
|
141 |
-
{
|
142 |
-
$lastday = date("t", $startdate);
|
143 |
-
|
144 |
-
for($i = 1; $i <= $lastday; $i++)
|
145 |
-
{
|
146 |
-
$cols[$i] = 0;
|
147 |
-
foreach($dates as $date)
|
148 |
-
{
|
149 |
-
if($date->date == $i)
|
150 |
-
$cols[$i] = $date->value;
|
151 |
-
}
|
152 |
-
}
|
153 |
-
}
|
154 |
-
elseif($period == "monthly")
|
155 |
-
{
|
156 |
-
for($i = 1; $i < 13; $i++)
|
157 |
-
{
|
158 |
-
$cols[$i] = 0;
|
159 |
-
foreach($dates as $date)
|
160 |
-
{
|
161 |
-
if($date->date == $i)
|
162 |
-
$cols[$i] = $date->value;
|
163 |
-
}
|
164 |
-
}
|
165 |
-
}
|
166 |
-
else //annual
|
167 |
-
{
|
168 |
-
//get min and max years
|
169 |
-
$min = 9999;
|
170 |
-
$max = 0;
|
171 |
-
foreach($dates as $date)
|
172 |
-
{
|
173 |
-
$min = min($min, $date->date);
|
174 |
-
$max = max($max, $date->date);
|
175 |
-
}
|
176 |
-
|
177 |
-
for($i = $min; $i <= $max; $i++)
|
178 |
-
{
|
179 |
-
foreach($dates as $date)
|
180 |
-
{
|
181 |
-
if($date->date == $i)
|
182 |
-
$cols[$i] = $date->value;
|
183 |
-
}
|
184 |
-
}
|
185 |
-
}
|
186 |
-
?>
|
187 |
-
<form id="posts-filter" method="get" action="">
|
188 |
-
<h2>
|
189 |
-
<?php _e('Sales and Revenue', 'pmpro');?>
|
190 |
-
</h2>
|
191 |
-
|
192 |
-
<div class="tablenav top">
|
193 |
-
<?php _ex('Show', 'Dropdown label, e.g. Show Daily Revenue for January', 'pmpro')?>
|
194 |
-
<select id="period" name="period">
|
195 |
-
<option value="daily" <?php selected($period, "daily");?>><?php _e('Daily', 'pmpro');?></option>
|
196 |
-
<option value="monthly" <?php selected($period, "monthly");?>><?php _e('Monthly', 'pmpro');?></option>
|
197 |
-
<option value="annual" <?php selected($period, "annual");?>><?php _e('Annual', 'pmpro');?></option>
|
198 |
-
</select>
|
199 |
-
<select name="type">
|
200 |
-
<option value="revenue" <?php selected($type, "revenue");?>><?php _e('Revenue', 'pmpro');?></option>
|
201 |
-
<option value="sales" <?php selected($type, "sales");?>><?php _e('Sales', 'pmpro');?></option>
|
202 |
-
</select>
|
203 |
-
<span id="for"><?php _ex('for', 'Dropdown label, e.g. Show Daily Revenue for January', 'pmpro')?></span>
|
204 |
-
<select id="month" name="month">
|
205 |
-
<?php for($i = 1; $i < 13; $i++) { ?>
|
206 |
-
<option value="<?php echo $i;?>" <?php selected($month, $i);?>><?php echo date("F", mktime(0, 0, 0, $i));?></option>
|
207 |
-
<?php } ?>
|
208 |
-
</select>
|
209 |
-
<select id="year" name="year">
|
210 |
-
<?php for($i = $thisyear; $i > 2007; $i--) { ?>
|
211 |
-
<option value="<?php echo $i;?>" <?php selected($year, $i);?>><?php echo $i;?></option>
|
212 |
-
<?php } ?>
|
213 |
-
</select>
|
214 |
-
<span id="for"><?php _ex('for', 'Dropdown label, e.g. Show Daily Revenue for January', 'pmpro')?></span>
|
215 |
-
<select name="level">
|
216 |
-
<option value="" <?php if(!$l) { ?>selected="selected"<?php } ?>><?php _e('All Levels', 'pmpro');?></option>
|
217 |
-
<?php
|
218 |
-
$levels = $wpdb->get_results("SELECT id, name FROM $wpdb->pmpro_membership_levels ORDER BY name");
|
219 |
-
foreach($levels as $level)
|
220 |
-
{
|
221 |
-
?>
|
222 |
-
<option value="<?php echo $level->id?>" <?php if($l == $level->id) { ?>selected="selected"<?php } ?>><?php echo $level->name?></option>
|
223 |
-
<?php
|
224 |
-
}
|
225 |
-
?>
|
226 |
-
</select>
|
227 |
-
|
228 |
-
<input type="hidden" name="page" value="pmpro-reports" />
|
229 |
-
<input type="hidden" name="report" value="sales" />
|
230 |
-
<input type="submit" class="button action" value="<?php _ex('Generate Report', 'Submit button value.', 'pmpro');?>" />
|
231 |
-
</div>
|
232 |
-
|
233 |
-
<div id="chart_div" style="clear: both; width: 100%; height: 500px;"></div>
|
234 |
-
|
235 |
-
<script>
|
236 |
-
//update month/year when period dropdown is changed
|
237 |
-
jQuery(document).ready(function() {
|
238 |
-
jQuery('#period').change(function() {
|
239 |
-
pmpro_ShowMonthOrYear();
|
240 |
-
});
|
241 |
-
});
|
242 |
-
|
243 |
-
function pmpro_ShowMonthOrYear()
|
244 |
-
{
|
245 |
-
var period = jQuery('#period').val();
|
246 |
-
if(period == 'daily')
|
247 |
-
{
|
248 |
-
jQuery('#for').show();
|
249 |
-
jQuery('#month').show();
|
250 |
-
jQuery('#year').show();
|
251 |
-
}
|
252 |
-
else if(period == 'monthly')
|
253 |
-
{
|
254 |
-
jQuery('#for').show();
|
255 |
-
jQuery('#month').hide();
|
256 |
-
jQuery('#year').show();
|
257 |
-
}
|
258 |
-
else
|
259 |
-
{
|
260 |
-
jQuery('#for').hide();
|
261 |
-
jQuery('#month').hide();
|
262 |
-
jQuery('#year').hide();
|
263 |
-
}
|
264 |
-
}
|
265 |
-
|
266 |
-
pmpro_ShowMonthOrYear();
|
267 |
-
|
268 |
-
//draw the chart
|
269 |
-
google.load("visualization", "1", {packages:["corechart"]});
|
270 |
-
google.setOnLoadCallback(drawChart);
|
271 |
-
function drawChart() {
|
272 |
-
|
273 |
-
var data = google.visualization.arrayToDataTable([
|
274 |
-
['<?php echo $date_function;?>', '<?php echo ucwords($type);?>'],
|
275 |
-
<?php foreach($cols as $date => $value) { ?>
|
276 |
-
['<?php if($period == "monthly") echo date("M", mktime(0,0,0,$date)); else echo $date;?>', <?php echo $value;?>],
|
277 |
-
<?php } ?>
|
278 |
-
]);
|
279 |
-
|
280 |
-
var options = {
|
281 |
-
colors: ['#51a351', '#387038'],
|
282 |
-
hAxis: {title: '<?php echo $date_function;?>', titleTextStyle: {color: 'black'}, maxAlternation: 1},
|
283 |
-
vAxis: {color: 'green', titleTextStyle: {color: '#51a351'}},
|
284 |
-
};
|
285 |
-
|
286 |
-
<?php if($type != "sales") { ?>
|
287 |
-
var formatter = new google.visualization.NumberFormat({prefix: '<?php echo html_entity_decode($pmpro_currency_symbol);?>'});
|
288 |
-
formatter.format(data, 1);
|
289 |
-
<?php } ?>
|
290 |
-
|
291 |
-
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
|
292 |
-
chart.draw(data, options);
|
293 |
-
}
|
294 |
-
</script>
|
295 |
-
|
296 |
-
</form>
|
297 |
-
<?php
|
298 |
-
}
|
299 |
-
|
300 |
-
/*
|
301 |
-
Other code required for your reports. This file is loaded every time WP loads with PMPro enabled.
|
302 |
-
*/
|
303 |
-
|
304 |
-
//get sales
|
305 |
-
function pmpro_getSales($period, $levels = NULL)
|
306 |
-
{
|
307 |
-
//check for a transient
|
308 |
-
$cache = get_transient("pmpro_report_sales");
|
309 |
-
if(!empty($cache) && !empty($cache[$period]) && !empty($cache[$period][$levels]))
|
310 |
-
return $cache[$period][$levels];
|
311 |
-
|
312 |
-
//a sale is an order with status NOT IN('refunded', 'review', 'token', 'error')
|
313 |
-
if($period == "today")
|
314 |
-
$startdate = date("Y-m-d");
|
315 |
-
elseif($period == "this month")
|
316 |
-
$startdate = date("Y-m") . "-01";
|
317 |
-
elseif($period == "this year")
|
318 |
-
$startdate = date("Y") . "-01-01";
|
319 |
-
else
|
320 |
-
$startdate = "";
|
321 |
-
|
322 |
-
$gateway_environment = pmpro_getOption("gateway_environment");
|
323 |
-
|
324 |
-
//build query
|
325 |
-
global $wpdb;
|
326 |
-
$sqlQuery = "SELECT COUNT(*) FROM $wpdb->pmpro_membership_orders WHERE status NOT IN('refunded', 'review', 'token', 'error') AND timestamp >= '" . $startdate . "' AND gateway_environment = '" . esc_sql($gateway_environment) . "' ";
|
327 |
-
|
328 |
-
//restrict by level
|
329 |
-
if(!empty($levels))
|
330 |
-
$sqlQuery .= "AND membership_id IN(" . $levels . ") ";
|
331 |
-
|
332 |
-
$sales = $wpdb->get_var($sqlQuery);
|
333 |
-
|
334 |
-
//save in cache
|
335 |
-
if(!empty($cache) && !empty($cache[$period]))
|
336 |
-
$cache[$period][$levels] = $sales;
|
337 |
-
elseif(!empty($cache))
|
338 |
-
$cache[$period] = array($levels => $sales);
|
339 |
-
else
|
340 |
-
$cache = array($period => array($levels => $sales));
|
341 |
-
|
342 |
-
set_transient("pmpro_report_sales", $cache, 3600*24);
|
343 |
-
|
344 |
-
return $sales;
|
345 |
-
}
|
346 |
-
|
347 |
-
//get revenue
|
348 |
-
function pmpro_getRevenue($period, $levels = NULL)
|
349 |
-
{
|
350 |
-
//check for a transient
|
351 |
-
$cache = get_transient("pmpro_report_revenue");
|
352 |
-
if(!empty($cache) && !empty($cache[$period]) && !empty($cache[$period][$levels]))
|
353 |
-
return $cache[$period][$levels];
|
354 |
-
|
355 |
-
//a sale is an order with status NOT IN('refunded', 'review', 'token', 'error')
|
356 |
-
if($period == "today")
|
357 |
-
$startdate = date("Y-m-d");
|
358 |
-
elseif($period == "this month")
|
359 |
-
$startdate = date("Y-m") . "-01";
|
360 |
-
elseif($period == "this year")
|
361 |
-
$startdate = date("Y") . "-01-01";
|
362 |
-
else
|
363 |
-
$startdate = "";
|
364 |
-
|
365 |
-
$gateway_environment = pmpro_getOption("gateway_environment");
|
366 |
-
|
367 |
-
//build query
|
368 |
-
global $wpdb;
|
369 |
-
$sqlQuery = "SELECT SUM(total) FROM $wpdb->pmpro_membership_orders WHERE status NOT IN('refunded', 'review', 'token', 'error') AND timestamp >= '" . $startdate . "' AND gateway_environment = '" . esc_sql($gateway_environment) . "' ";
|
370 |
-
|
371 |
-
//restrict by level
|
372 |
-
if(!empty($levels))
|
373 |
-
$sqlQuery .= "AND membership_id IN(" . $levels . ") ";
|
374 |
-
|
375 |
-
$revenue = $wpdb->get_var($sqlQuery);
|
376 |
-
|
377 |
-
//save in cache
|
378 |
-
if(!empty($cache) && !empty($cache[$period]))
|
379 |
-
$cache[$period][$levels] = $revenue;
|
380 |
-
elseif(!empty($cache))
|
381 |
-
$cache[$period] = array($levels => $revenue);
|
382 |
-
else
|
383 |
-
$cache = array($period => array($levels => $revenue));
|
384 |
-
|
385 |
-
set_transient("pmpro_report_revenue", $cache, 3600*24);
|
386 |
-
|
387 |
-
return $revenue;
|
388 |
-
}
|
389 |
-
|
390 |
-
//delete transients when an order goes through
|
391 |
-
function pmpro_report_sales_delete_transients()
|
392 |
-
{
|
393 |
-
delete_transient("pmpro_report_sales");
|
394 |
-
delete_transient("pmpro_report_revenue");
|
395 |
-
}
|
396 |
-
add_action("pmpro_after_checkout", "pmpro_report_sales_delete_transients");
|
397 |
-
add_action("pmpro_updated_order", "pmpro_report_sales_delete_transients");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/class.memberorder.php
CHANGED
@@ -109,7 +109,7 @@
|
|
109 |
|
110 |
//which one to load?
|
111 |
$classname = "PMProGateway"; //default test gateway
|
112 |
-
if(!empty($this->gateway)
|
113 |
$classname .= "_" . $this->gateway; //adding the gateway suffix
|
114 |
|
115 |
//try to load it
|
@@ -125,7 +125,7 @@
|
|
125 |
return $this->Gateway;
|
126 |
}
|
127 |
|
128 |
-
function getLastMemberOrder($user_id = NULL, $status = 'success'
|
129 |
{
|
130 |
global $current_user, $wpdb;
|
131 |
if(!$user_id)
|
@@ -139,10 +139,7 @@
|
|
139 |
if(!empty($status) && is_array($status))
|
140 |
$this->sqlQuery .= "AND status IN('" . implode("','", $status) . "') ";
|
141 |
elseif(!empty($status))
|
142 |
-
$this->sqlQuery .= "AND status = '" .
|
143 |
-
|
144 |
-
if(!empty($membership_id))
|
145 |
-
$this->sqlQuery .= "AND membership_id = '" . $membership_id . "' ";
|
146 |
$this->sqlQuery .= "ORDER BY timestamp DESC LIMIT 1";
|
147 |
|
148 |
//get id
|
@@ -151,9 +148,6 @@
|
|
151 |
return $this->getMemberOrderByID($id);
|
152 |
}
|
153 |
|
154 |
-
/*
|
155 |
-
Returns the order using the given order code.
|
156 |
-
*/
|
157 |
function getMemberOrderByCode($code)
|
158 |
{
|
159 |
global $wpdb;
|
@@ -164,17 +158,10 @@
|
|
164 |
return false;
|
165 |
}
|
166 |
|
167 |
-
/*
|
168 |
-
Returns the last order using the given payment_transaction_id.
|
169 |
-
*/
|
170 |
function getMemberOrderByPaymentTransactionID($payment_transaction_id)
|
171 |
{
|
172 |
-
//did they pass a trans id?
|
173 |
-
if(empty($payment_transaction_id))
|
174 |
-
return false;
|
175 |
-
|
176 |
global $wpdb;
|
177 |
-
$id = $wpdb->get_var("SELECT id FROM $wpdb->pmpro_membership_orders WHERE payment_transaction_id = '" .
|
178 |
if($id)
|
179 |
return $this->getMemberOrderByID($id);
|
180 |
else
|
@@ -186,13 +173,8 @@
|
|
186 |
*/
|
187 |
function getLastMemberOrderBySubscriptionTransactionID($subscription_transaction_id)
|
188 |
{
|
189 |
-
//did they pass a sub id?
|
190 |
-
if(empty($subscription_transaction_id))
|
191 |
-
return false;
|
192 |
-
|
193 |
global $wpdb;
|
194 |
-
$id = $wpdb->get_var("SELECT id FROM $wpdb->pmpro_membership_orders WHERE subscription_transaction_id = '" .
|
195 |
-
|
196 |
if($id)
|
197 |
return $this->getMemberOrderByID($id);
|
198 |
else
|
@@ -217,9 +199,6 @@
|
|
217 |
global $wpdb;
|
218 |
$this->discount_code = $wpdb->get_row("SELECT dc.* FROM $wpdb->pmpro_discount_codes dc LEFT JOIN $wpdb->pmpro_discount_codes_uses dcu ON dc.id = dcu.code_id WHERE dcu.order_id = '" . $this->id . "' LIMIT 1");
|
219 |
|
220 |
-
//filter @since v1.7.14
|
221 |
-
$this->discount_code = apply_filters("pmpro_order_discount_code", $this->discount_code, $this);
|
222 |
-
|
223 |
return $this->discount_code;
|
224 |
}
|
225 |
|
@@ -255,13 +234,7 @@
|
|
255 |
//okay, do I have a discount code to check? (if there is no membership_level->membership_id value, that means there was no entry in memberships_users)
|
256 |
if(!empty($this->discount_code) && empty($this->membership_level->membership_id))
|
257 |
{
|
258 |
-
|
259 |
-
$discount_code = $this->discount_code->code;
|
260 |
-
else
|
261 |
-
$discount_code = $this->discount_code;
|
262 |
-
|
263 |
-
$sqlQuery = "SELECT l.id, cl.*, l.name, l.description, l.allow_signups FROM $wpdb->pmpro_discount_codes_levels cl LEFT JOIN $wpdb->pmpro_membership_levels l ON cl.level_id = l.id LEFT JOIN $wpdb->pmpro_discount_codes dc ON dc.id = cl.code_id WHERE dc.code = '" . $discount_code . "' AND cl.level_id = '" . $this->membership_id . "' LIMIT 1";
|
264 |
-
|
265 |
$this->membership_level = $wpdb->get_row($sqlQuery);
|
266 |
}
|
267 |
|
@@ -287,7 +260,7 @@
|
|
287 |
if($tax_state && $tax_rate)
|
288 |
{
|
289 |
//we have values, is this order in the tax state?
|
290 |
-
if(
|
291 |
{
|
292 |
//return value, pass through filter
|
293 |
$tax = round((float)$price * (float)$tax_rate, 2);
|
@@ -375,11 +348,10 @@
|
|
375 |
//these fix some warnings/notices
|
376 |
if(empty($this->billing))
|
377 |
{
|
378 |
-
$this->billing = new stdClass();
|
379 |
$this->billing->name = $this->billing->street = $this->billing->city = $this->billing->state = $this->billing->zip = $this->billing->country = $this->billing->phone = "";
|
380 |
}
|
381 |
if(empty($this->user_id))
|
382 |
-
$this->user_id =
|
383 |
if(empty($this->paypal_token))
|
384 |
$this->paypal_token = "";
|
385 |
if(empty($this->couponamount))
|
@@ -393,17 +365,7 @@
|
|
393 |
if(empty($this->affiliate_id))
|
394 |
$this->affiliate_id = "";
|
395 |
if(empty($this->affiliate_subid))
|
396 |
-
$this->affiliate_subid = "";
|
397 |
-
if(empty($this->session_id))
|
398 |
-
$this->session_id = "";
|
399 |
-
if(empty($this->accountnumber))
|
400 |
-
$this->accountnumber = "";
|
401 |
-
if(empty($this->cardtype))
|
402 |
-
$this->cardtype = "";
|
403 |
-
if(empty($this->ExpirationDate))
|
404 |
-
$this->ExpirationDate = "";
|
405 |
-
if (empty($this->status))
|
406 |
-
$this->status = "";
|
407 |
|
408 |
if(empty($this->gateway))
|
409 |
$this->gateway = pmpro_getOption("gateway");
|
@@ -423,20 +385,20 @@
|
|
423 |
$this->sqlQuery = "UPDATE $wpdb->pmpro_membership_orders
|
424 |
SET `code` = '" . $this->code . "',
|
425 |
`session_id` = '" . $this->session_id . "',
|
426 |
-
`user_id` = " .
|
427 |
-
`membership_id` = " .
|
428 |
`paypal_token` = '" . $this->paypal_token . "',
|
429 |
-
`billing_name` = '" .
|
430 |
-
`billing_street` = '" .
|
431 |
-
`billing_city` = '" .
|
432 |
-
`billing_state` = '" .
|
433 |
-
`billing_zip` = '" .
|
434 |
-
`billing_country` = '" .
|
435 |
-
`billing_phone` = '" .
|
436 |
`subtotal` = '" . $this->subtotal . "',
|
437 |
`tax` = '" . $this->tax . "',
|
438 |
`couponamount` = '" . $this->couponamount . "',
|
439 |
-
`certificate_id` = " .
|
440 |
`certificateamount` = '" . $this->certificateamount . "',
|
441 |
`total` = '" . $this->total . "',
|
442 |
`payment_type` = '" . $this->payment_type . "',
|
@@ -444,14 +406,14 @@
|
|
444 |
`accountnumber` = '" . $this->accountnumber . "',
|
445 |
`expirationmonth` = '" . $this->expirationmonth . "',
|
446 |
`expirationyear` = '" . $this->expirationyear . "',
|
447 |
-
`status` = '" .
|
448 |
`gateway` = '" . $this->gateway . "',
|
449 |
`gateway_environment` = '" . $this->gateway_environment . "',
|
450 |
-
`payment_transaction_id` = '" .
|
451 |
-
`subscription_transaction_id` = '" .
|
452 |
-
`affiliate_id` = '" .
|
453 |
-
`affiliate_subid` = '" .
|
454 |
-
`notes` = '" .
|
455 |
WHERE id = '" . $this->id . "'
|
456 |
LIMIT 1";
|
457 |
}
|
@@ -465,20 +427,20 @@
|
|
465 |
(`code`, `session_id`, `user_id`, `membership_id`, `paypal_token`, `billing_name`, `billing_street`, `billing_city`, `billing_state`, `billing_zip`, `billing_country`, `billing_phone`, `subtotal`, `tax`, `couponamount`, `certificate_id`, `certificateamount`, `total`, `payment_type`, `cardtype`, `accountnumber`, `expirationmonth`, `expirationyear`, `status`, `gateway`, `gateway_environment`, `payment_transaction_id`, `subscription_transaction_id`, `timestamp`, `affiliate_id`, `affiliate_subid`, `notes`)
|
466 |
VALUES('" . $this->code . "',
|
467 |
'" . session_id() . "',
|
468 |
-
" .
|
469 |
-
" .
|
470 |
'" . $this->paypal_token . "',
|
471 |
-
'" .
|
472 |
-
'" .
|
473 |
-
'" .
|
474 |
-
'" .
|
475 |
-
'" .
|
476 |
-
'" .
|
477 |
'" . cleanPhone($this->billing->phone) . "',
|
478 |
'" . $amount . "',
|
479 |
'" . $tax . "',
|
480 |
'" . $this->couponamount. "',
|
481 |
-
" . intval($this->certificate_id) . ",
|
482 |
'" . $this->certificateamount . "',
|
483 |
'" . $total . "',
|
484 |
'" . $this->payment_type . "',
|
@@ -486,15 +448,15 @@
|
|
486 |
'" . hideCardNumber($this->accountnumber, false) . "',
|
487 |
'" . substr($this->ExpirationDate, 0, 2) . "',
|
488 |
'" . substr($this->ExpirationDate, 2, 4) . "',
|
489 |
-
'" .
|
490 |
'" . $this->gateway . "',
|
491 |
'" . $this->gateway_environment . "',
|
492 |
-
'" .
|
493 |
-
'" .
|
494 |
-
|
495 |
-
'" .
|
496 |
-
'" .
|
497 |
-
'" .
|
498 |
)";
|
499 |
}
|
500 |
|
@@ -518,9 +480,8 @@
|
|
518 |
|
519 |
while(empty($code))
|
520 |
{
|
521 |
-
$scramble = md5(AUTH_KEY .
|
522 |
$code = substr($scramble, 0, 10);
|
523 |
-
$code = apply_filters("pmpro_random_code", $code, $this); //filter
|
524 |
$check = $wpdb->get_var("SELECT id FROM $wpdb->pmpro_membership_orders WHERE code = '$code' LIMIT 1");
|
525 |
if($check || is_numeric($code))
|
526 |
$code = NULL;
|
@@ -537,7 +498,7 @@
|
|
537 |
return false;
|
538 |
|
539 |
$this->status = $newstatus;
|
540 |
-
$this->sqlQuery = "UPDATE $wpdb->pmpro_membership_orders SET status = '" .
|
541 |
if($wpdb->query($this->sqlQuery) !== false)
|
542 |
return true;
|
543 |
else
|
@@ -550,7 +511,7 @@
|
|
550 |
}
|
551 |
|
552 |
function cancel()
|
553 |
-
{
|
554 |
//only need to cancel on the gateway if there is a subscription id
|
555 |
if(empty($this->subscription_transaction_id))
|
556 |
{
|
@@ -559,28 +520,9 @@
|
|
559 |
return true;
|
560 |
}
|
561 |
else
|
562 |
-
{
|
563 |
//cancel the gateway subscription first
|
564 |
-
|
565 |
-
if($result == false)
|
566 |
-
{
|
567 |
-
//there was an error, but cancel the order no matter what
|
568 |
-
$this->updateStatus("cancelled");
|
569 |
-
|
570 |
-
//we should probably notify the admin
|
571 |
-
$pmproemail = new PMProEmail();
|
572 |
-
$pmproemail->template = "subscription_cancel_error";
|
573 |
-
$pmproemail->data = array("body"=>"<p>" . sprintf(__("There was an error canceling the subscription for user with ID=%s. You will want to check your payment gateway to see if their subscription is still active.", "pmpro"), strval($this->user_id)) . "</p><p>Error: " . $this->error . "</p>");
|
574 |
-
$pmproemail->data["body"] .= "<p>Associated Order:<br />" . nl2br(var_export($this, true)) . "</p>";
|
575 |
-
$pmproemail->sendEmail(get_bloginfo("admin_email"));
|
576 |
-
|
577 |
-
return false;
|
578 |
-
}
|
579 |
-
else
|
580 |
-
{
|
581 |
-
//would have been cancelled by the gateway class
|
582 |
-
return $result;
|
583 |
-
}
|
584 |
}
|
585 |
}
|
586 |
|
@@ -589,16 +531,6 @@
|
|
589 |
return $this->Gateway->update($this);
|
590 |
}
|
591 |
|
592 |
-
function getGatewaySubscriptionStatus()
|
593 |
-
{
|
594 |
-
return $this->Gateway->getSubscriptionStatus($this);
|
595 |
-
}
|
596 |
-
|
597 |
-
function getGatewayTransactionStatus()
|
598 |
-
{
|
599 |
-
return $this->Gateway->getTransactionStatus($this);
|
600 |
-
}
|
601 |
-
|
602 |
function deleteMe()
|
603 |
{
|
604 |
if(empty($this->id))
|
109 |
|
110 |
//which one to load?
|
111 |
$classname = "PMProGateway"; //default test gateway
|
112 |
+
if(!empty($this->gateway))
|
113 |
$classname .= "_" . $this->gateway; //adding the gateway suffix
|
114 |
|
115 |
//try to load it
|
125 |
return $this->Gateway;
|
126 |
}
|
127 |
|
128 |
+
function getLastMemberOrder($user_id = NULL, $status = 'success')
|
129 |
{
|
130 |
global $current_user, $wpdb;
|
131 |
if(!$user_id)
|
139 |
if(!empty($status) && is_array($status))
|
140 |
$this->sqlQuery .= "AND status IN('" . implode("','", $status) . "') ";
|
141 |
elseif(!empty($status))
|
142 |
+
$this->sqlQuery .= "AND status = '" . $wpdb->escape($status) . "' ";
|
|
|
|
|
|
|
143 |
$this->sqlQuery .= "ORDER BY timestamp DESC LIMIT 1";
|
144 |
|
145 |
//get id
|
148 |
return $this->getMemberOrderByID($id);
|
149 |
}
|
150 |
|
|
|
|
|
|
|
151 |
function getMemberOrderByCode($code)
|
152 |
{
|
153 |
global $wpdb;
|
158 |
return false;
|
159 |
}
|
160 |
|
|
|
|
|
|
|
161 |
function getMemberOrderByPaymentTransactionID($payment_transaction_id)
|
162 |
{
|
|
|
|
|
|
|
|
|
163 |
global $wpdb;
|
164 |
+
$id = $wpdb->get_var("SELECT id FROM $wpdb->pmpro_membership_orders WHERE payment_transaction_id = '" . $wpdb->escape($payment_transaction_id) . "' LIMIT 1");
|
165 |
if($id)
|
166 |
return $this->getMemberOrderByID($id);
|
167 |
else
|
173 |
*/
|
174 |
function getLastMemberOrderBySubscriptionTransactionID($subscription_transaction_id)
|
175 |
{
|
|
|
|
|
|
|
|
|
176 |
global $wpdb;
|
177 |
+
$id = $wpdb->get_var("SELECT id FROM $wpdb->pmpro_membership_orders WHERE subscription_transaction_id = '" . $wpdb->escape($subscription_transaction_id) . "' ORDER BY id DESC LIMIT 1");
|
|
|
178 |
if($id)
|
179 |
return $this->getMemberOrderByID($id);
|
180 |
else
|
199 |
global $wpdb;
|
200 |
$this->discount_code = $wpdb->get_row("SELECT dc.* FROM $wpdb->pmpro_discount_codes dc LEFT JOIN $wpdb->pmpro_discount_codes_uses dcu ON dc.id = dcu.code_id WHERE dcu.order_id = '" . $this->id . "' LIMIT 1");
|
201 |
|
|
|
|
|
|
|
202 |
return $this->discount_code;
|
203 |
}
|
204 |
|
234 |
//okay, do I have a discount code to check? (if there is no membership_level->membership_id value, that means there was no entry in memberships_users)
|
235 |
if(!empty($this->discount_code) && empty($this->membership_level->membership_id))
|
236 |
{
|
237 |
+
$sqlQuery = "SELECT l.id, cl.*, l.name, l.description, l.allow_signups FROM $wpdb->pmpro_discount_codes_levels cl LEFT JOIN $wpdb->pmpro_membership_levels l ON cl.level_id = l.id LEFT JOIN $wpdb->pmpro_discount_codes dc ON dc.id = cl.code_id WHERE dc.code = '" . $this->discount_code . "' AND cl.level_id = '" . $this->membership_id . "' LIMIT 1";
|
|
|
|
|
|
|
|
|
|
|
|
|
238 |
$this->membership_level = $wpdb->get_row($sqlQuery);
|
239 |
}
|
240 |
|
260 |
if($tax_state && $tax_rate)
|
261 |
{
|
262 |
//we have values, is this order in the tax state?
|
263 |
+
if(trim(strtoupper($this->billing->state)) == trim(strtoupper($tax_state)))
|
264 |
{
|
265 |
//return value, pass through filter
|
266 |
$tax = round((float)$price * (float)$tax_rate, 2);
|
348 |
//these fix some warnings/notices
|
349 |
if(empty($this->billing))
|
350 |
{
|
|
|
351 |
$this->billing->name = $this->billing->street = $this->billing->city = $this->billing->state = $this->billing->zip = $this->billing->country = $this->billing->phone = "";
|
352 |
}
|
353 |
if(empty($this->user_id))
|
354 |
+
$this->user_id = "";
|
355 |
if(empty($this->paypal_token))
|
356 |
$this->paypal_token = "";
|
357 |
if(empty($this->couponamount))
|
365 |
if(empty($this->affiliate_id))
|
366 |
$this->affiliate_id = "";
|
367 |
if(empty($this->affiliate_subid))
|
368 |
+
$this->affiliate_subid = "";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
369 |
|
370 |
if(empty($this->gateway))
|
371 |
$this->gateway = pmpro_getOption("gateway");
|
385 |
$this->sqlQuery = "UPDATE $wpdb->pmpro_membership_orders
|
386 |
SET `code` = '" . $this->code . "',
|
387 |
`session_id` = '" . $this->session_id . "',
|
388 |
+
`user_id` = '" . $this->user_id . "',
|
389 |
+
`membership_id` = '" . $this->membership_id . "',
|
390 |
`paypal_token` = '" . $this->paypal_token . "',
|
391 |
+
`billing_name` = '" . $wpdb->escape($this->billing->name) . "',
|
392 |
+
`billing_street` = '" . $wpdb->escape($this->billing->street) . "',
|
393 |
+
`billing_city` = '" . $wpdb->escape($this->billing->city) . "',
|
394 |
+
`billing_state` = '" . $wpdb->escape($this->billing->state) . "',
|
395 |
+
`billing_zip` = '" . $wpdb->escape($this->billing->zip) . "',
|
396 |
+
`billing_country` = '" . $wpdb->escape($this->billing->country) . "',
|
397 |
+
`billing_phone` = '" . $wpdb->escape($this->billing->phone) . "',
|
398 |
`subtotal` = '" . $this->subtotal . "',
|
399 |
`tax` = '" . $this->tax . "',
|
400 |
`couponamount` = '" . $this->couponamount . "',
|
401 |
+
`certificate_id` = '" . $this->certificate_id . "',
|
402 |
`certificateamount` = '" . $this->certificateamount . "',
|
403 |
`total` = '" . $this->total . "',
|
404 |
`payment_type` = '" . $this->payment_type . "',
|
406 |
`accountnumber` = '" . $this->accountnumber . "',
|
407 |
`expirationmonth` = '" . $this->expirationmonth . "',
|
408 |
`expirationyear` = '" . $this->expirationyear . "',
|
409 |
+
`status` = '" . $wpdb->escape($this->status) . "',
|
410 |
`gateway` = '" . $this->gateway . "',
|
411 |
`gateway_environment` = '" . $this->gateway_environment . "',
|
412 |
+
`payment_transaction_id` = '" . $wpdb->escape($this->payment_transaction_id) . "',
|
413 |
+
`subscription_transaction_id` = '" . $wpdb->escape($this->subscription_transaction_id) . "',
|
414 |
+
`affiliate_id` = '" . $wpdb->escape($this->affiliate_id) . "',
|
415 |
+
`affiliate_subid` = '" . $wpdb->escape($this->affiliate_subid) . "',
|
416 |
+
`notes` = '" . $wpdb->escape($this->notes) . "'
|
417 |
WHERE id = '" . $this->id . "'
|
418 |
LIMIT 1";
|
419 |
}
|
427 |
(`code`, `session_id`, `user_id`, `membership_id`, `paypal_token`, `billing_name`, `billing_street`, `billing_city`, `billing_state`, `billing_zip`, `billing_country`, `billing_phone`, `subtotal`, `tax`, `couponamount`, `certificate_id`, `certificateamount`, `total`, `payment_type`, `cardtype`, `accountnumber`, `expirationmonth`, `expirationyear`, `status`, `gateway`, `gateway_environment`, `payment_transaction_id`, `subscription_transaction_id`, `timestamp`, `affiliate_id`, `affiliate_subid`, `notes`)
|
428 |
VALUES('" . $this->code . "',
|
429 |
'" . session_id() . "',
|
430 |
+
'" . $this->user_id . "',
|
431 |
+
'" . $this->membership_id . "',
|
432 |
'" . $this->paypal_token . "',
|
433 |
+
'" . $wpdb->escape(trim($this->billing->name)) . "',
|
434 |
+
'" . $wpdb->escape(trim($this->billing->street)) . "',
|
435 |
+
'" . $wpdb->escape($this->billing->city) . "',
|
436 |
+
'" . $wpdb->escape($this->billing->state) . "',
|
437 |
+
'" . $wpdb->escape($this->billing->zip) . "',
|
438 |
+
'" . $wpdb->escape($this->billing->country) . "',
|
439 |
'" . cleanPhone($this->billing->phone) . "',
|
440 |
'" . $amount . "',
|
441 |
'" . $tax . "',
|
442 |
'" . $this->couponamount. "',
|
443 |
+
'" . intval($this->certificate_id) . "',
|
444 |
'" . $this->certificateamount . "',
|
445 |
'" . $total . "',
|
446 |
'" . $this->payment_type . "',
|
448 |
'" . hideCardNumber($this->accountnumber, false) . "',
|
449 |
'" . substr($this->ExpirationDate, 0, 2) . "',
|
450 |
'" . substr($this->ExpirationDate, 2, 4) . "',
|
451 |
+
'" . $wpdb->escape($this->status) . "',
|
452 |
'" . $this->gateway . "',
|
453 |
'" . $this->gateway_environment . "',
|
454 |
+
'" . $wpdb->escape($this->payment_transaction_id) . "',
|
455 |
+
'" . $wpdb->escape($this->subscription_transaction_id) . "',
|
456 |
+
now(),
|
457 |
+
'" . $wpdb->escape($this->affiliate_id) . "',
|
458 |
+
'" . $wpdb->escape($this->affiliate_subid) . "',
|
459 |
+
'" . $wpdb->escape($this->notes) . "'
|
460 |
)";
|
461 |
}
|
462 |
|
480 |
|
481 |
while(empty($code))
|
482 |
{
|
483 |
+
$scramble = md5(AUTH_KEY . time() . SECURE_AUTH_KEY);
|
484 |
$code = substr($scramble, 0, 10);
|
|
|
485 |
$check = $wpdb->get_var("SELECT id FROM $wpdb->pmpro_membership_orders WHERE code = '$code' LIMIT 1");
|
486 |
if($check || is_numeric($code))
|
487 |
$code = NULL;
|
498 |
return false;
|
499 |
|
500 |
$this->status = $newstatus;
|
501 |
+
$this->sqlQuery = "UPDATE $wpdb->pmpro_membership_orders SET status = '" . $wpdb->escape($newstatus) . "' WHERE id = '" . $this->id . "' LIMIT 1";
|
502 |
if($wpdb->query($this->sqlQuery) !== false)
|
503 |
return true;
|
504 |
else
|
511 |
}
|
512 |
|
513 |
function cancel()
|
514 |
+
{
|
515 |
//only need to cancel on the gateway if there is a subscription id
|
516 |
if(empty($this->subscription_transaction_id))
|
517 |
{
|
520 |
return true;
|
521 |
}
|
522 |
else
|
523 |
+
{
|
524 |
//cancel the gateway subscription first
|
525 |
+
return $this->Gateway->cancel($this);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
526 |
}
|
527 |
}
|
528 |
|
531 |
return $this->Gateway->update($this);
|
532 |
}
|
533 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
534 |
function deleteMe()
|
535 |
{
|
536 |
if(empty($this->id))
|
classes/class.pmproemail.php
CHANGED
@@ -34,7 +34,7 @@
|
|
34 |
$this->fromname = pmpro_getOption("from_name");
|
35 |
|
36 |
if(!$this->subject)
|
37 |
-
$this->subject =
|
38 |
|
39 |
//decode the subject line in case there are apostrophes/etc in it
|
40 |
$this->subject = html_entity_decode($this->subject, ENT_QUOTES, 'UTF-8');
|
@@ -44,25 +44,16 @@
|
|
44 |
|
45 |
$this->headers = array("Content-Type: text/html");
|
46 |
|
47 |
-
$this->attachments = NULL;
|
48 |
-
|
49 |
//load the template
|
50 |
-
$locale = apply_filters("plugin_locale", get_locale(), "pmpro");
|
51 |
if(file_exists(get_stylesheet_directory() . "/paid-memberships-pro/email/" . $this->template . ".html"))
|
52 |
-
$this->body = file_get_contents(get_stylesheet_directory() . "/paid-memberships-pro/email/" . $this->template . ".html");
|
53 |
elseif(file_exists(get_stylesheet_directory() . "/membership-email-" . $this->template . ".html"))
|
54 |
-
$this->body = file_get_contents(get_stylesheet_directory() . "/membership-email-" . $this->template . ".html");
|
55 |
elseif(file_exists(TEMPLATEPATH . "/membership-email-" . $this->template . ".html"))
|
56 |
-
$this->body = file_get_contents(TEMPLATEPATH . "/membership-email-" . $this->template . ".html");
|
57 |
-
elseif(file_exists(WP_LANG_DIR . '/pmpro/email/' . $this->template . ".html"))
|
58 |
-
$this->body = file_get_contents(WP_LANG_DIR . '/pmpro/email/' . $this->template . ".html"); //email folder in WP language folder
|
59 |
-
elseif(file_exists(PMPRO_DIR . "/languages/" . $locale . "/" . $this->template . ".html"))
|
60 |
-
$this->body = file_get_contents(PMPRO_DIR . "/languages/" . $locale . "/" . $this->template . ".html"); //email folder in PMPro language folder
|
61 |
elseif(file_exists(PMPRO_DIR . "/email/" . $this->template . ".html"))
|
62 |
-
$this->body = file_get_contents(PMPRO_DIR . "/email/" . $this->template . ".html");
|
63 |
-
|
64 |
-
$this->body = $this->data['body'];
|
65 |
-
|
66 |
//header and footer
|
67 |
/* This is handled for all emails via the pmpro_send_html function in paid-memberships-pro now
|
68 |
if(file_exists(TEMPLATEPATH . "/email_header.html"))
|
@@ -100,9 +91,8 @@
|
|
100 |
$this->template = apply_filters("pmpro_email_template", $temail->template, $this);
|
101 |
$this->body = apply_filters("pmpro_email_body", $temail->body, $this);
|
102 |
$this->headers = apply_filters("pmpro_email_headers", $temail->headers, $this);
|
103 |
-
$this->attachments = apply_filters("pmpro_email_attachments", $temail->attachments, $this);
|
104 |
|
105 |
-
if(wp_mail($this->email,$this->subject,$this->body,$this->headers
|
106 |
{
|
107 |
return true;
|
108 |
}
|
@@ -122,7 +112,7 @@
|
|
122 |
return false;
|
123 |
|
124 |
$this->email = $user->user_email;
|
125 |
-
$this->subject =
|
126 |
$this->template = "cancel";
|
127 |
$this->data = array("name" => $user->display_name, "user_login" => $user->user_login, "sitename" => get_option("blogname"), "siteemail" => pmpro_getOption("from_email"));
|
128 |
|
@@ -144,10 +134,9 @@
|
|
144 |
return true; //didn't send, but we also don't want to indicate failure because the settings say to not send
|
145 |
|
146 |
$this->email = get_bloginfo("admin_email");
|
147 |
-
$this->subject =
|
148 |
$this->template = "cancel_admin";
|
149 |
-
$this->data = array("user_login" => $user->user_login, "user_email" => $user->user_email, "display_name" => $user->display_name, "sitename" => get_option("blogname"), "siteemail" => pmpro_getOption("from_email")
|
150 |
-
$this->data['membership_id'] = $old_level_id;
|
151 |
$this->data['membership_level_name'] = $wpdb->get_var("SELECT name FROM $wpdb->pmpro_membership_levels WHERE id = '" . $old_level_id . "' LIMIT 1");
|
152 |
|
153 |
//start and end date
|
@@ -175,7 +164,7 @@
|
|
175 |
return false;
|
176 |
|
177 |
$this->email = $user->user_email;
|
178 |
-
$this->subject =
|
179 |
|
180 |
$this->data = array(
|
181 |
"subject" => $this->subject,
|
@@ -183,15 +172,14 @@
|
|
183 |
"user_login" => $user->user_login,
|
184 |
"sitename" => get_option("blogname"),
|
185 |
"siteemail" => pmpro_getOption("from_email"),
|
186 |
-
"membership_id" => $user->membership_level->id,
|
187 |
"membership_level_name" => $user->membership_level->name,
|
188 |
"membership_cost" => pmpro_getLevelCost($user->membership_level),
|
189 |
-
"login_link" =>
|
190 |
"display_name" => $user->display_name,
|
191 |
"user_email" => $user->user_email,0
|
192 |
);
|
193 |
-
|
194 |
-
if(
|
195 |
{
|
196 |
if($invoice->gateway == "paypalexpress")
|
197 |
$this->template = "checkout_express";
|
@@ -218,17 +206,9 @@
|
|
218 |
$this->data["accountnumber"] = hideCardNumber($invoice->accountnumber);
|
219 |
$this->data["expirationmonth"] = $invoice->expirationmonth;
|
220 |
$this->data["expirationyear"] = $invoice->expirationyear;
|
221 |
-
$this->data["billing_address"] = pmpro_formatAddress($invoice->billing->name,
|
222 |
-
$invoice->billing->street,
|
223 |
-
"", //address 2
|
224 |
-
$invoice->billing->city,
|
225 |
-
$invoice->billing->state,
|
226 |
-
$invoice->billing->zip,
|
227 |
-
$invoice->billing->country,
|
228 |
-
$invoice->billing->phone);
|
229 |
|
230 |
if($invoice->getDiscountCode())
|
231 |
-
$this->data["discount_code"] = "<p>
|
232 |
else
|
233 |
$this->data["discount_code"] = "";
|
234 |
}
|
@@ -237,23 +217,19 @@
|
|
237 |
$this->template = "checkout_free";
|
238 |
global $discount_code;
|
239 |
if(!empty($discount_code))
|
240 |
-
$this->data["discount_code"] = "<p>
|
241 |
else
|
242 |
$this->data["discount_code"] = "";
|
243 |
}
|
244 |
else
|
245 |
{
|
246 |
$this->template = "checkout_freetrial";
|
247 |
-
|
248 |
-
if(!empty($discount_code))
|
249 |
-
$this->data["discount_code"] = "<p>" . __("Discount Code", "pmpro") . ": " . $discount_code . "</p>\n";
|
250 |
-
else
|
251 |
-
$this->data["discount_code"] = "";
|
252 |
}
|
253 |
|
254 |
$enddate = $wpdb->get_var("SELECT UNIX_TIMESTAMP(enddate) FROM $wpdb->pmpro_memberships_users WHERE user_id = '" . $user->ID . "' AND status = 'active' LIMIT 1");
|
255 |
if($enddate)
|
256 |
-
$this->data["membership_expiration"] = "<p>
|
257 |
else
|
258 |
$this->data["membership_expiration"] = "";
|
259 |
|
@@ -275,7 +251,7 @@
|
|
275 |
return true; //didn't send, but we also don't want to indicate failure because the settings say to not send
|
276 |
|
277 |
$this->email = get_bloginfo("admin_email");
|
278 |
-
$this->subject =
|
279 |
|
280 |
$this->data = array(
|
281 |
"subject" => $this->subject,
|
@@ -283,15 +259,14 @@
|
|
283 |
"user_login" => $user->user_login,
|
284 |
"sitename" => get_option("blogname"),
|
285 |
"siteemail" => pmpro_getOption("from_email"),
|
286 |
-
"membership_id" => $user->membership_level->id,
|
287 |
"membership_level_name" => $user->membership_level->name,
|
288 |
"membership_cost" => pmpro_getLevelCost($user->membership_level),
|
289 |
-
"login_link" =>
|
290 |
"display_name" => $user->display_name,
|
291 |
"user_email" => $user->user_email,0
|
292 |
);
|
293 |
|
294 |
-
if(
|
295 |
{
|
296 |
if($invoice->gateway == "paypalexpress")
|
297 |
$this->template = "checkout_express_admin";
|
@@ -315,17 +290,9 @@
|
|
315 |
$this->data["accountnumber"] = hideCardNumber($invoice->accountnumber);
|
316 |
$this->data["expirationmonth"] = $invoice->expirationmonth;
|
317 |
$this->data["expirationyear"] = $invoice->expirationyear;
|
318 |
-
$this->data["billing_address"] = pmpro_formatAddress($invoice->billing->name,
|
319 |
-
$invoice->billing->street,
|
320 |
-
"", //address 2
|
321 |
-
$invoice->billing->city,
|
322 |
-
$invoice->billing->state,
|
323 |
-
$invoice->billing->zip,
|
324 |
-
$invoice->billing->country,
|
325 |
-
$invoice->billing->phone);
|
326 |
|
327 |
if($invoice->getDiscountCode())
|
328 |
-
$this->data["discount_code"] = "<p>
|
329 |
else
|
330 |
$this->data["discount_code"] = "";
|
331 |
}
|
@@ -334,7 +301,7 @@
|
|
334 |
$this->template = "checkout_free_admin";
|
335 |
global $discount_code;
|
336 |
if(!empty($discount_code))
|
337 |
-
$this->data["discount_code"] = "<p>
|
338 |
else
|
339 |
$this->data["discount_code"] = "";
|
340 |
}
|
@@ -342,11 +309,11 @@
|
|
342 |
{
|
343 |
$this->template = "checkout_freetrial_admin";
|
344 |
$this->data["discount_code"] = "";
|
345 |
-
}
|
346 |
|
347 |
$enddate = $wpdb->get_var("SELECT UNIX_TIMESTAMP(enddate) FROM $wpdb->pmpro_memberships_users WHERE user_id = '" . $user->ID . "' AND status = 'active' LIMIT 1");
|
348 |
if($enddate)
|
349 |
-
$this->data["membership_expiration"] = "<p>
|
350 |
else
|
351 |
$this->data["membership_expiration"] = "";
|
352 |
|
@@ -363,7 +330,7 @@
|
|
363 |
return false;
|
364 |
|
365 |
$this->email = $user->user_email;
|
366 |
-
$this->subject =
|
367 |
$this->template = "billing";
|
368 |
|
369 |
$this->data = array(
|
@@ -372,7 +339,6 @@
|
|
372 |
"user_login" => $user->user_login,
|
373 |
"sitename" => get_option("blogname"),
|
374 |
"siteemail" => pmpro_getOption("from_email"),
|
375 |
-
"membership_id" => $user->membership_level->id,
|
376 |
"membership_level_name" => $user->membership_level->name,
|
377 |
"display_name" => $user->display_name,
|
378 |
"user_email" => $user->user_email,
|
@@ -387,16 +353,8 @@
|
|
387 |
"accountnumber" => hideCardNumber($invoice->accountnumber),
|
388 |
"expirationmonth" => $invoice->expirationmonth,
|
389 |
"expirationyear" => $invoice->expirationyear,
|
390 |
-
"login_link" =>
|
391 |
);
|
392 |
-
$this->data["billing_address"] = pmpro_formatAddress($invoice->billing->name,
|
393 |
-
$invoice->billing->street,
|
394 |
-
"", //address 2
|
395 |
-
$invoice->billing->city,
|
396 |
-
$invoice->billing->state,
|
397 |
-
$invoice->billing->zip,
|
398 |
-
$invoice->billing->country,
|
399 |
-
$invoice->billing->phone);
|
400 |
|
401 |
return $this->sendEmail();
|
402 |
}
|
@@ -416,7 +374,7 @@
|
|
416 |
return true; //didn't send, but we also don't want to indicate failure because the settings say to not send
|
417 |
|
418 |
$this->email = get_bloginfo("admin_email");
|
419 |
-
$this->subject =
|
420 |
$this->template = "billing_admin";
|
421 |
|
422 |
$this->data = array(
|
@@ -425,7 +383,6 @@
|
|
425 |
"user_login" => $user->user_login,
|
426 |
"sitename" => get_option("blogname"),
|
427 |
"siteemail" => pmpro_getOption("from_email"),
|
428 |
-
"membership_id" => $user->membership_level->id,
|
429 |
"membership_level_name" => $user->membership_level->name,
|
430 |
"display_name" => $user->display_name,
|
431 |
"user_email" => $user->user_email,
|
@@ -442,14 +399,6 @@
|
|
442 |
"expirationyear" => $invoice->expirationyear,
|
443 |
"login_link" => wp_login_url()
|
444 |
);
|
445 |
-
$this->data["billing_address"] = pmpro_formatAddress($invoice->billing->name,
|
446 |
-
$invoice->billing->street,
|
447 |
-
"", //address 2
|
448 |
-
$invoice->billing->city,
|
449 |
-
$invoice->billing->state,
|
450 |
-
$invoice->billing->zip,
|
451 |
-
$invoice->billing->country,
|
452 |
-
$invoice->billing->phone);
|
453 |
|
454 |
return $this->sendEmail();
|
455 |
}
|
@@ -464,7 +413,7 @@
|
|
464 |
return false;
|
465 |
|
466 |
$this->email = $user->user_email;
|
467 |
-
$this->subject =
|
468 |
$this->template = "billing_failure";
|
469 |
|
470 |
$this->data = array(
|
@@ -473,7 +422,6 @@
|
|
473 |
"user_login" => $user->user_login,
|
474 |
"sitename" => get_option("blogname"),
|
475 |
"siteemail" => pmpro_getOption("from_email"),
|
476 |
-
"membership_id" => $user->membership_level->id,
|
477 |
"membership_level_name" => $user->membership_level->name,
|
478 |
"display_name" => $user->display_name,
|
479 |
"user_email" => $user->user_email,
|
@@ -488,19 +436,11 @@
|
|
488 |
"accountnumber" => hideCardNumber($invoice->accountnumber),
|
489 |
"expirationmonth" => $invoice->expirationmonth,
|
490 |
"expirationyear" => $invoice->expirationyear,
|
491 |
-
"login_link" =>
|
492 |
);
|
493 |
-
$this->data["billing_address"] = pmpro_formatAddress($invoice->billing->name,
|
494 |
-
$invoice->billing->street,
|
495 |
-
"", //address 2
|
496 |
-
$invoice->billing->city,
|
497 |
-
$invoice->billing->state,
|
498 |
-
$invoice->billing->zip,
|
499 |
-
$invoice->billing->country,
|
500 |
-
$invoice->billing->phone);
|
501 |
|
502 |
return $this->sendEmail();
|
503 |
-
}
|
504 |
|
505 |
function sendBillingFailureAdminEmail($email, $invoice = NULL)
|
506 |
{
|
@@ -510,7 +450,7 @@
|
|
510 |
$user = get_userdata($invoice->user_id);
|
511 |
|
512 |
$this->email = $email;
|
513 |
-
$this->subject =
|
514 |
$this->template = "billing_failure_admin";
|
515 |
|
516 |
$this->data = array(
|
@@ -519,7 +459,6 @@
|
|
519 |
"user_login" => $user->user_login,
|
520 |
"sitename" => get_option("blogname"),
|
521 |
"siteemail" => pmpro_getOption("from_email"),
|
522 |
-
"membership_id" => $user->membership_level->id,
|
523 |
"membership_level_name" => $user->membership_level->name,
|
524 |
"display_name" => $user->display_name,
|
525 |
"user_email" => $user->user_email,
|
@@ -534,63 +473,8 @@
|
|
534 |
"accountnumber" => hideCardNumber($invoice->accountnumber),
|
535 |
"expirationmonth" => $invoice->expirationmonth,
|
536 |
"expirationyear" => $invoice->expirationyear,
|
537 |
-
"login_link" =>
|
538 |
);
|
539 |
-
$this->data["billing_address"] = pmpro_formatAddress($invoice->billing->name,
|
540 |
-
$invoice->billing->street,
|
541 |
-
"", //address 2
|
542 |
-
$invoice->billing->city,
|
543 |
-
$invoice->billing->state,
|
544 |
-
$invoice->billing->zip,
|
545 |
-
$invoice->billing->country,
|
546 |
-
$invoice->billing->phone);
|
547 |
-
return $this->sendEmail();
|
548 |
-
}
|
549 |
-
|
550 |
-
function sendCreditCardExpiringEmail($user = NULL, $invoice = NULL)
|
551 |
-
{
|
552 |
-
global $current_user;
|
553 |
-
if(!$user)
|
554 |
-
$user = $current_user;
|
555 |
-
|
556 |
-
if(!$user || !$invoice)
|
557 |
-
return false;
|
558 |
-
|
559 |
-
$this->email = $user->user_email;
|
560 |
-
$this->subject = sprintf(__("Credit Card on File Expiring Soon at %s", "pmpro"), get_option("blogname"));
|
561 |
-
$this->template = "credit_card_expiring";
|
562 |
-
|
563 |
-
$this->data = array(
|
564 |
-
"subject" => $this->subject,
|
565 |
-
"name" => $user->display_name,
|
566 |
-
"user_login" => $user->user_login,
|
567 |
-
"sitename" => get_option("blogname"),
|
568 |
-
"siteemail" => pmpro_getOption("from_email"),
|
569 |
-
"membership_id" => $user->membership_level->id,
|
570 |
-
"membership_level_name" => $user->membership_level->name,
|
571 |
-
"display_name" => $user->display_name,
|
572 |
-
"user_email" => $user->user_email,
|
573 |
-
"billing_name" => $invoice->billing->name,
|
574 |
-
"billing_street" => $invoice->billing->street,
|
575 |
-
"billing_city" => $invoice->billing->city,
|
576 |
-
"billing_state" => $invoice->billing->state,
|
577 |
-
"billing_zip" => $invoice->billing->zip,
|
578 |
-
"billing_country" => $invoice->billing->country,
|
579 |
-
"billing_phone" => $invoice->billing->phone,
|
580 |
-
"cardtype" => $invoice->cardtype,
|
581 |
-
"accountnumber" => hideCardNumber($invoice->accountnumber),
|
582 |
-
"expirationmonth" => $invoice->expirationmonth,
|
583 |
-
"expirationyear" => $invoice->expirationyear,
|
584 |
-
"login_link" => wp_login_url(pmpro_url("billing"))
|
585 |
-
);
|
586 |
-
$this->data["billing_address"] = pmpro_formatAddress($invoice->billing->name,
|
587 |
-
$invoice->billing->street,
|
588 |
-
"", //address 2
|
589 |
-
$invoice->billing->city,
|
590 |
-
$invoice->billing->state,
|
591 |
-
$invoice->billing->zip,
|
592 |
-
$invoice->billing->country,
|
593 |
-
$invoice->billing->phone);
|
594 |
|
595 |
return $this->sendEmail();
|
596 |
}
|
@@ -605,7 +489,7 @@
|
|
605 |
return false;
|
606 |
|
607 |
$this->email = $user->user_email;
|
608 |
-
$this->subject =
|
609 |
$this->template = "invoice";
|
610 |
|
611 |
$this->data = array(
|
@@ -614,11 +498,10 @@
|
|
614 |
"user_login" => $user->user_login,
|
615 |
"sitename" => get_option("blogname"),
|
616 |
"siteemail" => pmpro_getOption("from_email"),
|
617 |
-
"membership_id" => $user->membership_level->id,
|
618 |
"membership_level_name" => $user->membership_level->name,
|
619 |
"display_name" => $user->display_name,
|
620 |
"user_email" => $user->user_email,
|
621 |
-
"invoice_id" => $invoice->
|
622 |
"invoice_total" => $pmpro_currency_symbol . number_format($invoice->total, 2),
|
623 |
"invoice_date" => date(get_option('date_format'), $invoice->timestamp),
|
624 |
"billing_name" => $invoice->billing->name,
|
@@ -632,26 +515,18 @@
|
|
632 |
"accountnumber" => hideCardNumber($invoice->accountnumber),
|
633 |
"expirationmonth" => $invoice->expirationmonth,
|
634 |
"expirationyear" => $invoice->expirationyear,
|
635 |
-
"login_link" =>
|
636 |
-
"invoice_link" =>
|
637 |
-
)
|
638 |
-
$this->data["billing_address"] = pmpro_formatAddress($invoice->billing->name,
|
639 |
-
$invoice->billing->street,
|
640 |
-
"", //address 2
|
641 |
-
$invoice->billing->city,
|
642 |
-
$invoice->billing->state,
|
643 |
-
$invoice->billing->zip,
|
644 |
-
$invoice->billing->country,
|
645 |
-
$invoice->billing->phone);
|
646 |
|
647 |
if($invoice->getDiscountCode())
|
648 |
-
$this->data["discount_code"] = "<p>
|
649 |
else
|
650 |
$this->data["discount_code"] = "";
|
651 |
|
652 |
$enddate = $wpdb->get_var("SELECT UNIX_TIMESTAMP(enddate) FROM $wpdb->pmpro_memberships_users WHERE user_id = '" . $user->ID . "' AND status = 'active' LIMIT 1");
|
653 |
if($enddate)
|
654 |
-
$this->data["membership_expiration"] = "<p>
|
655 |
else
|
656 |
$this->data["membership_expiration"] = "";
|
657 |
|
@@ -676,16 +551,15 @@
|
|
676 |
$user->membership_level = pmpro_getMembershipLevelForUser($user->ID);
|
677 |
|
678 |
$this->email = $user->user_email;
|
679 |
-
$this->subject =
|
680 |
$this->template = "trial_ending";
|
681 |
$this->data = array(
|
682 |
"subject" => $this->subject,
|
683 |
"name" => $user->display_name,
|
684 |
"user_login" => $user->user_login,
|
685 |
"sitename" => get_option("blogname"),
|
686 |
-
"membership_id" => $user->membership_level->id,
|
687 |
"membership_level_name" => $user->membership_level->name,
|
688 |
-
"siteemail" =>
|
689 |
"login_link" => wp_login_url(),
|
690 |
"display_name" => $user->display_name,
|
691 |
"user_email" => $user->user_email,
|
@@ -694,7 +568,7 @@
|
|
694 |
"cycle_period" => $user->membership_level->cycle_period,
|
695 |
"trial_amount" => $pmpro_currency_symbol . $user->membership_level->trial_amount,
|
696 |
"trial_limit" => $user->membership_level->trial_limit,
|
697 |
-
"trial_end" => date(get_option('date_format'), strtotime(date("m/d/Y", $user->membership_level->startdate) . " + " . $user->membership_level->trial_limit . " " . $user->membership_level->cycle_period)
|
698 |
);
|
699 |
|
700 |
return $this->sendEmail();
|
@@ -710,9 +584,9 @@
|
|
710 |
return false;
|
711 |
|
712 |
$this->email = $user->user_email;
|
713 |
-
$this->subject =
|
714 |
$this->template = "membership_expired";
|
715 |
-
$this->data = array("subject" => $this->subject, "name" => $user->display_name, "user_login" => $user->user_login, "sitename" => get_option("blogname"), "siteemail" =>
|
716 |
|
717 |
return $this->sendEmail();
|
718 |
}
|
@@ -735,9 +609,9 @@
|
|
735 |
$user->membership_level = pmpro_getMembershipLevelForUser($user->ID);
|
736 |
|
737 |
$this->email = $user->user_email;
|
738 |
-
$this->subject =
|
739 |
$this->template = "membership_expiring";
|
740 |
-
$this->data = array("subject" => $this->subject, "name" => $user->display_name, "user_login" => $user->user_login, "sitename" => get_option("blogname"), "
|
741 |
|
742 |
return $this->sendEmail();
|
743 |
}
|
@@ -755,21 +629,21 @@
|
|
755 |
$user->membership_level = pmpro_getMembershipLevelForUser($user->ID);
|
756 |
|
757 |
$this->email = $user->user_email;
|
758 |
-
$this->subject =
|
759 |
$this->template = "admin_change";
|
760 |
-
$this->data = array("subject" => $this->subject, "name" => $user->display_name, "user_login" => $user->user_login, "sitename" => get_option("blogname"), "
|
761 |
if($user->membership_level->ID)
|
762 |
-
$this->data["membership_change"] =
|
763 |
else
|
764 |
-
$this->data["membership_change"] =
|
765 |
|
766 |
if(!empty($user->membership_level->enddate))
|
767 |
{
|
768 |
-
$this->data["membership_change"] .= ".
|
769 |
}
|
770 |
elseif(!empty($this->expiration_changed))
|
771 |
{
|
772 |
-
$this->data["membership_change"] .= ".
|
773 |
}
|
774 |
|
775 |
return $this->sendEmail();
|
@@ -793,21 +667,21 @@
|
|
793 |
$user->membership_level = pmpro_getMembershipLevelForUser($user->ID);
|
794 |
|
795 |
$this->email = get_bloginfo("admin_email");
|
796 |
-
$this->subject =
|
797 |
$this->template = "admin_change_admin";
|
798 |
$this->data = array("subject" => $this->subject, "name" => $user->display_name, "user_login" => $user->user_login, "sitename" => get_option("blogname"), "membership_level_name" => $user->membership_level->name, "siteemail" => get_bloginfo("admin_email"), "login_link" => wp_login_url());
|
799 |
if($user->membership_level->ID)
|
800 |
-
$this->data["membership_change"] =
|
801 |
else
|
802 |
-
$this->data["membership_change"] =
|
803 |
|
804 |
if(!empty($user->membership_level->enddate))
|
805 |
{
|
806 |
-
$this->data["membership_change"] .= ".
|
807 |
}
|
808 |
elseif(!empty($this->expiration_changed))
|
809 |
{
|
810 |
-
$this->data["membership_change"] .= ".
|
811 |
}
|
812 |
|
813 |
return $this->sendEmail();
|
34 |
$this->fromname = pmpro_getOption("from_name");
|
35 |
|
36 |
if(!$this->subject)
|
37 |
+
$this->subject = "An Email From " . get_option("blogname");
|
38 |
|
39 |
//decode the subject line in case there are apostrophes/etc in it
|
40 |
$this->subject = html_entity_decode($this->subject, ENT_QUOTES, 'UTF-8');
|
44 |
|
45 |
$this->headers = array("Content-Type: text/html");
|
46 |
|
|
|
|
|
47 |
//load the template
|
|
|
48 |
if(file_exists(get_stylesheet_directory() . "/paid-memberships-pro/email/" . $this->template . ".html"))
|
49 |
+
$this->body = file_get_contents(get_stylesheet_directory() . "/paid-memberships-pro/email/" . $this->template . ".html");
|
50 |
elseif(file_exists(get_stylesheet_directory() . "/membership-email-" . $this->template . ".html"))
|
51 |
+
$this->body = file_get_contents(get_stylesheet_directory() . "/membership-email-" . $this->template . ".html");
|
52 |
elseif(file_exists(TEMPLATEPATH . "/membership-email-" . $this->template . ".html"))
|
53 |
+
$this->body = file_get_contents(TEMPLATEPATH . "/membership-email-" . $this->template . ".html");
|
|
|
|
|
|
|
|
|
54 |
elseif(file_exists(PMPRO_DIR . "/email/" . $this->template . ".html"))
|
55 |
+
$this->body = file_get_contents(PMPRO_DIR . "/email/" . $this->template . ".html");
|
56 |
+
|
|
|
|
|
57 |
//header and footer
|
58 |
/* This is handled for all emails via the pmpro_send_html function in paid-memberships-pro now
|
59 |
if(file_exists(TEMPLATEPATH . "/email_header.html"))
|
91 |
$this->template = apply_filters("pmpro_email_template", $temail->template, $this);
|
92 |
$this->body = apply_filters("pmpro_email_body", $temail->body, $this);
|
93 |
$this->headers = apply_filters("pmpro_email_headers", $temail->headers, $this);
|
|
|
94 |
|
95 |
+
if(wp_mail($this->email,$this->subject,$this->body,$this->headers))
|
96 |
{
|
97 |
return true;
|
98 |
}
|
112 |
return false;
|
113 |
|
114 |
$this->email = $user->user_email;
|
115 |
+
$this->subject = "Your membership at " . get_option("blogname") . " has been CANCELED";
|
116 |
$this->template = "cancel";
|
117 |
$this->data = array("name" => $user->display_name, "user_login" => $user->user_login, "sitename" => get_option("blogname"), "siteemail" => pmpro_getOption("from_email"));
|
118 |
|
134 |
return true; //didn't send, but we also don't want to indicate failure because the settings say to not send
|
135 |
|
136 |
$this->email = get_bloginfo("admin_email");
|
137 |
+
$this->subject = "Membership for " . $user->user_login . " at " . get_option("blogname") . " has been CANCELED";
|
138 |
$this->template = "cancel_admin";
|
139 |
+
$this->data = array("user_login" => $user->user_login, "user_email" => $user->user_email, "display_name" => $user->display_name, "sitename" => get_option("blogname"), "siteemail" => pmpro_getOption("from_email"));
|
|
|
140 |
$this->data['membership_level_name'] = $wpdb->get_var("SELECT name FROM $wpdb->pmpro_membership_levels WHERE id = '" . $old_level_id . "' LIMIT 1");
|
141 |
|
142 |
//start and end date
|
164 |
return false;
|
165 |
|
166 |
$this->email = $user->user_email;
|
167 |
+
$this->subject = "Your membership confirmation for " . get_option("blogname");
|
168 |
|
169 |
$this->data = array(
|
170 |
"subject" => $this->subject,
|
172 |
"user_login" => $user->user_login,
|
173 |
"sitename" => get_option("blogname"),
|
174 |
"siteemail" => pmpro_getOption("from_email"),
|
|
|
175 |
"membership_level_name" => $user->membership_level->name,
|
176 |
"membership_cost" => pmpro_getLevelCost($user->membership_level),
|
177 |
+
"login_link" => pmpro_url("account"),
|
178 |
"display_name" => $user->display_name,
|
179 |
"user_email" => $user->user_email,0
|
180 |
);
|
181 |
+
|
182 |
+
if($invoice)
|
183 |
{
|
184 |
if($invoice->gateway == "paypalexpress")
|
185 |
$this->template = "checkout_express";
|
206 |
$this->data["accountnumber"] = hideCardNumber($invoice->accountnumber);
|
207 |
$this->data["expirationmonth"] = $invoice->expirationmonth;
|
208 |
$this->data["expirationyear"] = $invoice->expirationyear;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
209 |
|
210 |
if($invoice->getDiscountCode())
|
211 |
+
$this->data["discount_code"] = "<p>Discount Code: " . $invoice->discount_code->code . "</p>\n";
|
212 |
else
|
213 |
$this->data["discount_code"] = "";
|
214 |
}
|
217 |
$this->template = "checkout_free";
|
218 |
global $discount_code;
|
219 |
if(!empty($discount_code))
|
220 |
+
$this->data["discount_code"] = "<p>Discount Code: " . $discount_code . "</p>\n";
|
221 |
else
|
222 |
$this->data["discount_code"] = "";
|
223 |
}
|
224 |
else
|
225 |
{
|
226 |
$this->template = "checkout_freetrial";
|
227 |
+
$this->data["discount_code"] = "";
|
|
|
|
|
|
|
|
|
228 |
}
|
229 |
|
230 |
$enddate = $wpdb->get_var("SELECT UNIX_TIMESTAMP(enddate) FROM $wpdb->pmpro_memberships_users WHERE user_id = '" . $user->ID . "' AND status = 'active' LIMIT 1");
|
231 |
if($enddate)
|
232 |
+
$this->data["membership_expiration"] = "<p>This membership will expire on " . date(get_option('date_format'), $enddate) . ".</p>\n";
|
233 |
else
|
234 |
$this->data["membership_expiration"] = "";
|
235 |
|
251 |
return true; //didn't send, but we also don't want to indicate failure because the settings say to not send
|
252 |
|
253 |
$this->email = get_bloginfo("admin_email");
|
254 |
+
$this->subject = "Member Checkout for " . $user->membership_level->name . " at " . get_option("blogname");
|
255 |
|
256 |
$this->data = array(
|
257 |
"subject" => $this->subject,
|
259 |
"user_login" => $user->user_login,
|
260 |
"sitename" => get_option("blogname"),
|
261 |
"siteemail" => pmpro_getOption("from_email"),
|
|
|
262 |
"membership_level_name" => $user->membership_level->name,
|
263 |
"membership_cost" => pmpro_getLevelCost($user->membership_level),
|
264 |
+
"login_link" => pmpro_url("account"),
|
265 |
"display_name" => $user->display_name,
|
266 |
"user_email" => $user->user_email,0
|
267 |
);
|
268 |
|
269 |
+
if($invoice)
|
270 |
{
|
271 |
if($invoice->gateway == "paypalexpress")
|
272 |
$this->template = "checkout_express_admin";
|
290 |
$this->data["accountnumber"] = hideCardNumber($invoice->accountnumber);
|
291 |
$this->data["expirationmonth"] = $invoice->expirationmonth;
|
292 |
$this->data["expirationyear"] = $invoice->expirationyear;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
293 |
|
294 |
if($invoice->getDiscountCode())
|
295 |
+
$this->data["discount_code"] = "<p>Discount Code: " . $invoice->discount_code->code . "</p>\n";
|
296 |
else
|
297 |
$this->data["discount_code"] = "";
|
298 |
}
|
301 |
$this->template = "checkout_free_admin";
|
302 |
global $discount_code;
|
303 |
if(!empty($discount_code))
|
304 |
+
$this->data["discount_code"] = "<p>Discount Code: " . $discount_code . "</p>\n";
|
305 |
else
|
306 |
$this->data["discount_code"] = "";
|
307 |
}
|
309 |
{
|
310 |
$this->template = "checkout_freetrial_admin";
|
311 |
$this->data["discount_code"] = "";
|
312 |
+
}
|
313 |
|
314 |
$enddate = $wpdb->get_var("SELECT UNIX_TIMESTAMP(enddate) FROM $wpdb->pmpro_memberships_users WHERE user_id = '" . $user->ID . "' AND status = 'active' LIMIT 1");
|
315 |
if($enddate)
|
316 |
+
$this->data["membership_expiration"] = "<p>This membership will expire on " . date(get_option('date_format'), $enddate) . ".</p>\n";
|
317 |
else
|
318 |
$this->data["membership_expiration"] = "";
|
319 |
|
330 |
return false;
|
331 |
|
332 |
$this->email = $user->user_email;
|
333 |
+
$this->subject = "Your billing information has been udpated at " . get_option("blogname");
|
334 |
$this->template = "billing";
|
335 |
|
336 |
$this->data = array(
|
339 |
"user_login" => $user->user_login,
|
340 |
"sitename" => get_option("blogname"),
|
341 |
"siteemail" => pmpro_getOption("from_email"),
|
|
|
342 |
"membership_level_name" => $user->membership_level->name,
|
343 |
"display_name" => $user->display_name,
|
344 |
"user_email" => $user->user_email,
|
353 |
"accountnumber" => hideCardNumber($invoice->accountnumber),
|
354 |
"expirationmonth" => $invoice->expirationmonth,
|
355 |
"expirationyear" => $invoice->expirationyear,
|
356 |
+
"login_link" => pmpro_url("account")
|
357 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
358 |
|
359 |
return $this->sendEmail();
|
360 |
}
|
374 |
return true; //didn't send, but we also don't want to indicate failure because the settings say to not send
|
375 |
|
376 |
$this->email = get_bloginfo("admin_email");
|
377 |
+
$this->subject = "Billing information has been udpated for " . $user->user_login . " at " . get_option("blogname");
|
378 |
$this->template = "billing_admin";
|
379 |
|
380 |
$this->data = array(
|
383 |
"user_login" => $user->user_login,
|
384 |
"sitename" => get_option("blogname"),
|
385 |
"siteemail" => pmpro_getOption("from_email"),
|
|
|
386 |
"membership_level_name" => $user->membership_level->name,
|
387 |
"display_name" => $user->display_name,
|
388 |
"user_email" => $user->user_email,
|
399 |
"expirationyear" => $invoice->expirationyear,
|
400 |
"login_link" => wp_login_url()
|
401 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
402 |
|
403 |
return $this->sendEmail();
|
404 |
}
|
413 |
return false;
|
414 |
|
415 |
$this->email = $user->user_email;
|
416 |
+
$this->subject = "Membership Payment Failed at " . get_option("blogname");
|
417 |
$this->template = "billing_failure";
|
418 |
|
419 |
$this->data = array(
|
422 |
"user_login" => $user->user_login,
|
423 |
"sitename" => get_option("blogname"),
|
424 |
"siteemail" => pmpro_getOption("from_email"),
|
|
|
425 |
"membership_level_name" => $user->membership_level->name,
|
426 |
"display_name" => $user->display_name,
|
427 |
"user_email" => $user->user_email,
|
436 |
"accountnumber" => hideCardNumber($invoice->accountnumber),
|
437 |
"expirationmonth" => $invoice->expirationmonth,
|
438 |
"expirationyear" => $invoice->expirationyear,
|
439 |
+
"login_link" => pmpro_url("billing")
|
440 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
441 |
|
442 |
return $this->sendEmail();
|
443 |
+
}
|
444 |
|
445 |
function sendBillingFailureAdminEmail($email, $invoice = NULL)
|
446 |
{
|
450 |
$user = get_userdata($invoice->user_id);
|
451 |
|
452 |
$this->email = $email;
|
453 |
+
$this->subject = "Membership Payment Failed For " . $user->display_name . " at " . get_option("blogname");
|
454 |
$this->template = "billing_failure_admin";
|
455 |
|
456 |
$this->data = array(
|
459 |
"user_login" => $user->user_login,
|
460 |
"sitename" => get_option("blogname"),
|
461 |
"siteemail" => pmpro_getOption("from_email"),
|
|
|
462 |
"membership_level_name" => $user->membership_level->name,
|
463 |
"display_name" => $user->display_name,
|
464 |
"user_email" => $user->user_email,
|
473 |
"accountnumber" => hideCardNumber($invoice->accountnumber),
|
474 |
"expirationmonth" => $invoice->expirationmonth,
|
475 |
"expirationyear" => $invoice->expirationyear,
|
476 |
+
"login_link" => pmpro_url("billing")
|
477 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
478 |
|
479 |
return $this->sendEmail();
|
480 |
}
|
489 |
return false;
|
490 |
|
491 |
$this->email = $user->user_email;
|
492 |
+
$this->subject = "INVOICE for " . get_option("blogname") . " membership";
|
493 |
$this->template = "invoice";
|
494 |
|
495 |
$this->data = array(
|
498 |
"user_login" => $user->user_login,
|
499 |
"sitename" => get_option("blogname"),
|
500 |
"siteemail" => pmpro_getOption("from_email"),
|
|
|
501 |
"membership_level_name" => $user->membership_level->name,
|
502 |
"display_name" => $user->display_name,
|
503 |
"user_email" => $user->user_email,
|
504 |
+
"invoice_id" => $invoice->payment_transaction_id,
|
505 |
"invoice_total" => $pmpro_currency_symbol . number_format($invoice->total, 2),
|
506 |
"invoice_date" => date(get_option('date_format'), $invoice->timestamp),
|
507 |
"billing_name" => $invoice->billing->name,
|
515 |
"accountnumber" => hideCardNumber($invoice->accountnumber),
|
516 |
"expirationmonth" => $invoice->expirationmonth,
|
517 |
"expirationyear" => $invoice->expirationyear,
|
518 |
+
"login_link" => pmpro_url("account"),
|
519 |
+
"invoice_link" => pmpro_url("invoice", "?invoice=" . $invoice->code)
|
520 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
521 |
|
522 |
if($invoice->getDiscountCode())
|
523 |
+
$this->data["discount_code"] = "<p>Discount Code: " . $invoice->discount_code . "</p>\n";
|
524 |
else
|
525 |
$this->data["discount_code"] = "";
|
526 |
|
527 |
$enddate = $wpdb->get_var("SELECT UNIX_TIMESTAMP(enddate) FROM $wpdb->pmpro_memberships_users WHERE user_id = '" . $user->ID . "' AND status = 'active' LIMIT 1");
|
528 |
if($enddate)
|
529 |
+
$this->data["membership_expiration"] = "<p>This membership will expire on " . date(get_option('date_format'), $enddate) . ".</p>\n";
|
530 |
else
|
531 |
$this->data["membership_expiration"] = "";
|
532 |
|
551 |
$user->membership_level = pmpro_getMembershipLevelForUser($user->ID);
|
552 |
|
553 |
$this->email = $user->user_email;
|
554 |
+
$this->subject = "Your trial membership at " . get_option("blogname") . " is ending soon";
|
555 |
$this->template = "trial_ending";
|
556 |
$this->data = array(
|
557 |
"subject" => $this->subject,
|
558 |
"name" => $user->display_name,
|
559 |
"user_login" => $user->user_login,
|
560 |
"sitename" => get_option("blogname"),
|
|
|
561 |
"membership_level_name" => $user->membership_level->name,
|
562 |
+
"siteemail" => get_bloginfo("admin_email"),
|
563 |
"login_link" => wp_login_url(),
|
564 |
"display_name" => $user->display_name,
|
565 |
"user_email" => $user->user_email,
|
568 |
"cycle_period" => $user->membership_level->cycle_period,
|
569 |
"trial_amount" => $pmpro_currency_symbol . $user->membership_level->trial_amount,
|
570 |
"trial_limit" => $user->membership_level->trial_limit,
|
571 |
+
"trial_end" => date(get_option('date_format'), strtotime(date("m/d/Y", $user->membership_level->startdate) . " + " . $user->membership_level->trial_limit . " " . $user->membership_level->cycle_period))
|
572 |
);
|
573 |
|
574 |
return $this->sendEmail();
|
584 |
return false;
|
585 |
|
586 |
$this->email = $user->user_email;
|
587 |
+
$this->subject = "Your membership at " . get_option("blogname") . " has ended";
|
588 |
$this->template = "membership_expired";
|
589 |
+
$this->data = array("subject" => $this->subject, "name" => $user->display_name, "user_login" => $user->user_login, "sitename" => get_option("blogname"), "siteemail" => get_bloginfo("admin_email"), "login_link" => wp_login_url(), "display_name" => $user->display_name, "user_email" => $user->user_email, "levels_link" => pmpro_url("levels"));
|
590 |
|
591 |
return $this->sendEmail();
|
592 |
}
|
609 |
$user->membership_level = pmpro_getMembershipLevelForUser($user->ID);
|
610 |
|
611 |
$this->email = $user->user_email;
|
612 |
+
$this->subject = "Your membership at " . get_option("blogname") . " will end soon";
|
613 |
$this->template = "membership_expiring";
|
614 |
+
$this->data = array("subject" => $this->subject, "name" => $user->display_name, "user_login" => $user->user_login, "sitename" => get_option("blogname"), "membership_level_name" => $user->membership_level->name, "siteemail" => get_bloginfo("admin_email"), "login_link" => wp_login_url(), "enddate" => date(get_option('date_format'), $user->membership_level->enddate), "display_name" => $user->display_name, "user_email" => $user->user_email);
|
615 |
|
616 |
return $this->sendEmail();
|
617 |
}
|
629 |
$user->membership_level = pmpro_getMembershipLevelForUser($user->ID);
|
630 |
|
631 |
$this->email = $user->user_email;
|
632 |
+
$this->subject = "Your membership at " . get_option("blogname") . " has been changed";
|
633 |
$this->template = "admin_change";
|
634 |
+
$this->data = array("subject" => $this->subject, "name" => $user->display_name, "user_login" => $user->user_login, "sitename" => get_option("blogname"), "membership_level_name" => $user->membership_level->name, "siteemail" => get_bloginfo("admin_email"), "login_link" => wp_login_url());
|
635 |
if($user->membership_level->ID)
|
636 |
+
$this->data["membership_change"] = "new level is " . $user->membership_level->name . ". This membership is free";
|
637 |
else
|
638 |
+
$this->data["membership_change"] = "membership has been canceled";
|
639 |
|
640 |
if(!empty($user->membership_level->enddate))
|
641 |
{
|
642 |
+
$this->data["membership_change"] .= ". Your membership will expire on " . date(get_option('date_format'), $user->membership_level->enddate);
|
643 |
}
|
644 |
elseif(!empty($this->expiration_changed))
|
645 |
{
|
646 |
+
$this->data["membership_change"] .= ". Your membership does not expire";
|
647 |
}
|
648 |
|
649 |
return $this->sendEmail();
|
667 |
$user->membership_level = pmpro_getMembershipLevelForUser($user->ID);
|
668 |
|
669 |
$this->email = get_bloginfo("admin_email");
|
670 |
+
$this->subject = "Membership for " . $user->user_login . " at " . get_option("blogname") . " has been changed";
|
671 |
$this->template = "admin_change_admin";
|
672 |
$this->data = array("subject" => $this->subject, "name" => $user->display_name, "user_login" => $user->user_login, "sitename" => get_option("blogname"), "membership_level_name" => $user->membership_level->name, "siteemail" => get_bloginfo("admin_email"), "login_link" => wp_login_url());
|
673 |
if($user->membership_level->ID)
|
674 |
+
$this->data["membership_change"] = "The new level is " . $user->membership_level->name . ". This membership is free";
|
675 |
else
|
676 |
+
$this->data["membership_change"] = "membership has been canceled";
|
677 |
|
678 |
if(!empty($user->membership_level->enddate))
|
679 |
{
|
680 |
+
$this->data["membership_change"] .= ". This membership will expire on " . date(get_option('date_format'), $user->membership_level->enddate);
|
681 |
}
|
682 |
elseif(!empty($this->expiration_changed))
|
683 |
{
|
684 |
+
$this->data["membership_change"] .= ". This membership does not expire";
|
685 |
}
|
686 |
|
687 |
return $this->sendEmail();
|
classes/gateways/class.pmprogateway.php
CHANGED
@@ -43,7 +43,7 @@
|
|
43 |
else
|
44 |
{
|
45 |
//add a period to the start date to account for the initial payment
|
46 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod
|
47 |
}
|
48 |
|
49 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
@@ -52,7 +52,7 @@
|
|
52 |
else
|
53 |
{
|
54 |
if(empty($order->error))
|
55 |
-
$order->error =
|
56 |
return false;
|
57 |
}
|
58 |
}
|
@@ -90,7 +90,7 @@
|
|
90 |
else
|
91 |
{
|
92 |
//add a period to the start date to account for the initial payment
|
93 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $this->BillingFrequency . " " . $this->BillingPeriod
|
94 |
}
|
95 |
|
96 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
@@ -103,14 +103,14 @@
|
|
103 |
if($this->void($order))
|
104 |
{
|
105 |
if(!$order->error)
|
106 |
-
$order->error =
|
107 |
}
|
108 |
else
|
109 |
{
|
110 |
if(!$order->error)
|
111 |
-
$order->error =
|
112 |
|
113 |
-
$order->error .= "
|
114 |
}
|
115 |
|
116 |
return false;
|
@@ -126,7 +126,7 @@
|
|
126 |
else
|
127 |
{
|
128 |
if(empty($order->error))
|
129 |
-
$order->error =
|
130 |
|
131 |
return false;
|
132 |
}
|
@@ -174,9 +174,6 @@
|
|
174 |
//create a code for the order
|
175 |
if(empty($order->code))
|
176 |
$order->code = $order->getRandomCode();
|
177 |
-
|
178 |
-
//filter order before subscription. use with care.
|
179 |
-
$order = apply_filters("pmpro_subscribe_order", $order, $this);
|
180 |
|
181 |
//simulate a successful subscription processing
|
182 |
$order->status = "success";
|
@@ -200,21 +197,5 @@
|
|
200 |
$order->updateStatus("cancelled");
|
201 |
return true;
|
202 |
}
|
203 |
-
|
204 |
-
function getSubscriptionStatus(&$order)
|
205 |
-
{
|
206 |
-
//require a subscription id
|
207 |
-
if(empty($order->subscription_transaction_id))
|
208 |
-
return false;
|
209 |
-
|
210 |
-
//this looks different for each gateway, but generally an array of some sort
|
211 |
-
return array();
|
212 |
-
}
|
213 |
-
|
214 |
-
function getTransactionStatus(&$order)
|
215 |
-
{
|
216 |
-
//this looks different for each gateway, but generally an array of some sort
|
217 |
-
return array();
|
218 |
-
}
|
219 |
}
|
220 |
?>
|
43 |
else
|
44 |
{
|
45 |
//add a period to the start date to account for the initial payment
|
46 |
+
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod)) . "T0:0:0";
|
47 |
}
|
48 |
|
49 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
52 |
else
|
53 |
{
|
54 |
if(empty($order->error))
|
55 |
+
$order->error = "Unknown error: Authorization failed.";
|
56 |
return false;
|
57 |
}
|
58 |
}
|
90 |
else
|
91 |
{
|
92 |
//add a period to the start date to account for the initial payment
|
93 |
+
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $this->BillingFrequency . " " . $this->BillingPeriod)) . "T0:0:0";
|
94 |
}
|
95 |
|
96 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
103 |
if($this->void($order))
|
104 |
{
|
105 |
if(!$order->error)
|
106 |
+
$order->error = "Unknown error: Payment failed.";
|
107 |
}
|
108 |
else
|
109 |
{
|
110 |
if(!$order->error)
|
111 |
+
$order->error = "Unknown error: Payment failed.";
|
112 |
|
113 |
+
$order->error .= " A partial payment was made that we could not void. Please contact the site owner immediately to correct this.";
|
114 |
}
|
115 |
|
116 |
return false;
|
126 |
else
|
127 |
{
|
128 |
if(empty($order->error))
|
129 |
+
$order->error = "Unknown error: Payment failed.";
|
130 |
|
131 |
return false;
|
132 |
}
|
174 |
//create a code for the order
|
175 |
if(empty($order->code))
|
176 |
$order->code = $order->getRandomCode();
|
|
|
|
|
|
|
177 |
|
178 |
//simulate a successful subscription processing
|
179 |
$order->status = "success";
|
197 |
$order->updateStatus("cancelled");
|
198 |
return true;
|
199 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
200 |
}
|
201 |
?>
|
classes/gateways/class.pmprogateway_authorizenet.php
CHANGED
@@ -43,7 +43,7 @@
|
|
43 |
else
|
44 |
{
|
45 |
//add a period to the start date to account for the initial payment
|
46 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod
|
47 |
}
|
48 |
|
49 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
@@ -52,7 +52,7 @@
|
|
52 |
else
|
53 |
{
|
54 |
if(empty($order->error))
|
55 |
-
$order->error =
|
56 |
return false;
|
57 |
}
|
58 |
}
|
@@ -90,7 +90,7 @@
|
|
90 |
else
|
91 |
{
|
92 |
//add a period to the start date to account for the initial payment
|
93 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod
|
94 |
}
|
95 |
|
96 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
@@ -103,13 +103,14 @@
|
|
103 |
if($this->void($order))
|
104 |
{
|
105 |
if(!$order->error)
|
106 |
-
$order->error =
|
107 |
}
|
108 |
else
|
109 |
{
|
110 |
if(!$order->error)
|
111 |
-
$order->error =
|
112 |
-
|
|
|
113 |
}
|
114 |
|
115 |
return false;
|
@@ -125,7 +126,7 @@
|
|
125 |
else
|
126 |
{
|
127 |
if(empty($order->error))
|
128 |
-
$order->error =
|
129 |
|
130 |
return false;
|
131 |
}
|
@@ -184,7 +185,7 @@
|
|
184 |
"x_exp_date" => $order->ExpirationDate,
|
185 |
|
186 |
"x_amount" => $amount,
|
187 |
-
"x_description" => $order->membership_level->name . "
|
188 |
|
189 |
"x_first_name" => $order->FirstName,
|
190 |
"x_last_name" => $order->LastName,
|
@@ -434,9 +435,6 @@
|
|
434 |
if(empty($order->code))
|
435 |
$order->code = $order->getRandomCode();
|
436 |
|
437 |
-
//filter order before subscription. use with care.
|
438 |
-
$order = apply_filters("pmpro_subscribe_order", $order, $this);
|
439 |
-
|
440 |
if(!empty($order->gateway_environment))
|
441 |
$gateway_environment = $order->gateway_environment;
|
442 |
if(empty($gateway_environment))
|
@@ -490,7 +488,8 @@
|
|
490 |
//taxes
|
491 |
$amount_tax = $order->getTaxForPrice($amount);
|
492 |
$trial_tax = $order->getTaxForPrice($trialAmount);
|
493 |
-
|
|
|
494 |
$amount = round((float)$amount + (float)$amount_tax, 2);
|
495 |
$trialAmount = round((float)$trialAmount + (float)$trial_tax, 2);
|
496 |
|
@@ -784,8 +783,8 @@
|
|
784 |
else
|
785 |
{
|
786 |
$order->status = "error";
|
787 |
-
$order->error =
|
788 |
-
$order->shorterror =
|
789 |
return false;
|
790 |
}
|
791 |
}
|
43 |
else
|
44 |
{
|
45 |
//add a period to the start date to account for the initial payment
|
46 |
+
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod)) . "T0:0:0";
|
47 |
}
|
48 |
|
49 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
52 |
else
|
53 |
{
|
54 |
if(empty($order->error))
|
55 |
+
$order->error = "Unknown error: Authorization failed.";
|
56 |
return false;
|
57 |
}
|
58 |
}
|
90 |
else
|
91 |
{
|
92 |
//add a period to the start date to account for the initial payment
|
93 |
+
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod)) . "T0:0:0";
|
94 |
}
|
95 |
|
96 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
103 |
if($this->void($order))
|
104 |
{
|
105 |
if(!$order->error)
|
106 |
+
$order->error = "Unknown error: Payment failed.";
|
107 |
}
|
108 |
else
|
109 |
{
|
110 |
if(!$order->error)
|
111 |
+
$order->error = "Unknown error: Payment failed.";
|
112 |
+
|
113 |
+
$order->error .= " A partial payment was made that we could not void. Please contact the site owner immediately to correct this.";
|
114 |
}
|
115 |
|
116 |
return false;
|
126 |
else
|
127 |
{
|
128 |
if(empty($order->error))
|
129 |
+
$order->error = "Unknown error: Payment failed.";
|
130 |
|
131 |
return false;
|
132 |
}
|
185 |
"x_exp_date" => $order->ExpirationDate,
|
186 |
|
187 |
"x_amount" => $amount,
|
188 |
+
"x_description" => $order->membership_level->name . " Membership",
|
189 |
|
190 |
"x_first_name" => $order->FirstName,
|
191 |
"x_last_name" => $order->LastName,
|
435 |
if(empty($order->code))
|
436 |
$order->code = $order->getRandomCode();
|
437 |
|
|
|
|
|
|
|
438 |
if(!empty($order->gateway_environment))
|
439 |
$gateway_environment = $order->gateway_environment;
|
440 |
if(empty($gateway_environment))
|
488 |
//taxes
|
489 |
$amount_tax = $order->getTaxForPrice($amount);
|
490 |
$trial_tax = $order->getTaxForPrice($trialAmount);
|
491 |
+
|
492 |
+
$order->subtotal = $amount;
|
493 |
$amount = round((float)$amount + (float)$amount_tax, 2);
|
494 |
$trialAmount = round((float)$trialAmount + (float)$trial_tax, 2);
|
495 |
|
783 |
else
|
784 |
{
|
785 |
$order->status = "error";
|
786 |
+
$order->error = "Could not connect to Authorize.net";
|
787 |
+
$order->shorterror = "Could not connect to Authorize.net";
|
788 |
return false;
|
789 |
}
|
790 |
}
|
classes/gateways/class.pmprogateway_braintree.php
CHANGED
@@ -9,12 +9,7 @@
|
|
9 |
$this->gateway = $gateway;
|
10 |
$this->gateway_environment = pmpro_getOption("gateway_environment");
|
11 |
|
12 |
-
|
13 |
-
$environment = $this->gateway_environment;
|
14 |
-
if($environment == "live")
|
15 |
-
$environment = "production";
|
16 |
-
|
17 |
-
Braintree_Configuration::environment($environment);
|
18 |
Braintree_Configuration::merchantId(pmpro_getOption("braintree_merchantid"));
|
19 |
Braintree_Configuration::publicKey(pmpro_getOption("braintree_publickey"));
|
20 |
Braintree_Configuration::privateKey(pmpro_getOption("braintree_privatekey"));
|
@@ -23,7 +18,7 @@
|
|
23 |
}
|
24 |
|
25 |
function process(&$order)
|
26 |
-
{
|
27 |
//check for initial payment
|
28 |
if(floatval($order->InitialPayment) == 0)
|
29 |
{
|
@@ -58,7 +53,7 @@
|
|
58 |
else
|
59 |
{
|
60 |
if(empty($order->error))
|
61 |
-
$order->error =
|
62 |
return false;
|
63 |
}
|
64 |
}
|
@@ -117,7 +112,7 @@
|
|
117 |
else
|
118 |
{
|
119 |
$order->errorcode = true;
|
120 |
-
$order->error =
|
121 |
$order->shorterror = $response->message;
|
122 |
return false;
|
123 |
}
|
@@ -126,7 +121,7 @@
|
|
126 |
{
|
127 |
//$order->status = "error";
|
128 |
$order->errorcode = true;
|
129 |
-
$order->error =
|
130 |
$order->shorterror = $response->message;
|
131 |
return false;
|
132 |
}
|
@@ -183,19 +178,19 @@
|
|
183 |
'expirationDate' => $order->braintree->expiration_date,
|
184 |
'cardholderName' => trim($order->FirstName . " " . $order->LastName),
|
185 |
'options' => array(
|
186 |
-
'updateExistingToken' => $
|
187 |
)
|
188 |
)
|
189 |
)
|
190 |
);
|
191 |
-
|
192 |
if($response->success)
|
193 |
{
|
194 |
-
$this->customer = $
|
195 |
}
|
196 |
else
|
197 |
{
|
198 |
-
$order->error =
|
199 |
$order->shorterror = $order->error;
|
200 |
return false;
|
201 |
}
|
@@ -208,7 +203,7 @@
|
|
208 |
//assume no customer found
|
209 |
}
|
210 |
}
|
211 |
-
|
212 |
//no customer id, create one
|
213 |
if(!empty($order->accountnumber))
|
214 |
{
|
@@ -243,14 +238,14 @@
|
|
243 |
}
|
244 |
else
|
245 |
{
|
246 |
-
$order->error =
|
247 |
$order->shorterror = $order->error;
|
248 |
return false;
|
249 |
}
|
250 |
}
|
251 |
catch (Exception $e)
|
252 |
{
|
253 |
-
$order->error =
|
254 |
$order->shorterror = $order->error;
|
255 |
return false;
|
256 |
}
|
@@ -275,7 +270,8 @@
|
|
275 |
|
276 |
//figure out the amounts
|
277 |
$amount = $order->PaymentAmount;
|
278 |
-
$amount_tax = $order->getTaxForPrice($amount);
|
|
|
279 |
$amount = round((float)$amount + (float)$amount_tax, 2);
|
280 |
|
281 |
/*
|
@@ -296,13 +292,13 @@
|
|
296 |
$trial_period_days = $order->BillingFrequency * 30; //assume monthly
|
297 |
|
298 |
//convert to a profile start date
|
299 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $trial_period_days . " Day"
|
300 |
|
301 |
//filter the start date
|
302 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
303 |
|
304 |
//convert back to days
|
305 |
-
$trial_period_days = ceil(abs(strtotime(date("Y-m-d")) - strtotime($order->ProfileStartDate
|
306 |
|
307 |
//now add the actual trial set by the site
|
308 |
if(!empty($order->TrialBillingCycles))
|
@@ -341,7 +337,7 @@
|
|
341 |
}
|
342 |
catch (Exception $e)
|
343 |
{
|
344 |
-
$order->error =
|
345 |
//return error
|
346 |
$order->shorterror = $order->error;
|
347 |
return false;
|
@@ -356,7 +352,7 @@
|
|
356 |
}
|
357 |
else
|
358 |
{
|
359 |
-
$order->error =
|
360 |
$order->shorterror = $result->message;
|
361 |
return false;
|
362 |
}
|
@@ -367,12 +363,12 @@
|
|
367 |
//we just have to run getCustomer which will look for the customer and update it with the new token
|
368 |
$this->getCustomer($order);
|
369 |
|
370 |
-
if(!empty($this->customer)
|
371 |
{
|
372 |
return true;
|
373 |
}
|
374 |
else
|
375 |
-
{
|
376 |
return false; //couldn't find the customer
|
377 |
}
|
378 |
}
|
@@ -394,7 +390,7 @@
|
|
394 |
catch(Exception $e)
|
395 |
{
|
396 |
$order->updateStatus("cancelled"); //assume it's been cancelled already
|
397 |
-
$order->error =
|
398 |
$order->shorterror = $order->error;
|
399 |
return false; //no subscription found
|
400 |
}
|
@@ -407,16 +403,17 @@
|
|
407 |
else
|
408 |
{
|
409 |
$order->updateStatus("cancelled"); //assume it's been cancelled already
|
410 |
-
$order->error =
|
411 |
$order->shorterror = $order->error;
|
412 |
return false; //no subscription found
|
413 |
}
|
414 |
}
|
415 |
else
|
416 |
{
|
417 |
-
$order->error =
|
418 |
$order->shorterror = $order->error;
|
419 |
return false; //no customer found
|
420 |
}
|
421 |
}
|
422 |
}
|
|
9 |
$this->gateway = $gateway;
|
10 |
$this->gateway_environment = pmpro_getOption("gateway_environment");
|
11 |
|
12 |
+
Braintree_Configuration::environment($this->gateway_environment);
|
|
|
|
|
|
|
|
|
|
|
13 |
Braintree_Configuration::merchantId(pmpro_getOption("braintree_merchantid"));
|
14 |
Braintree_Configuration::publicKey(pmpro_getOption("braintree_publickey"));
|
15 |
Braintree_Configuration::privateKey(pmpro_getOption("braintree_privatekey"));
|
18 |
}
|
19 |
|
20 |
function process(&$order)
|
21 |
+
{
|
22 |
//check for initial payment
|
23 |
if(floatval($order->InitialPayment) == 0)
|
24 |
{
|
53 |
else
|
54 |
{
|
55 |
if(empty($order->error))
|
56 |
+
$order->error = "Unknown error: Initial payment failed.";
|
57 |
return false;
|
58 |
}
|
59 |
}
|
112 |
else
|
113 |
{
|
114 |
$order->errorcode = true;
|
115 |
+
$order->error = "Error during settlement: " . $response->message;
|
116 |
$order->shorterror = $response->message;
|
117 |
return false;
|
118 |
}
|
121 |
{
|
122 |
//$order->status = "error";
|
123 |
$order->errorcode = true;
|
124 |
+
$order->error = "Error during charge: " . $response->message;
|
125 |
$order->shorterror = $response->message;
|
126 |
return false;
|
127 |
}
|
178 |
'expirationDate' => $order->braintree->expiration_date,
|
179 |
'cardholderName' => trim($order->FirstName . " " . $order->LastName),
|
180 |
'options' => array(
|
181 |
+
'updateExistingToken' => $customer_id
|
182 |
)
|
183 |
)
|
184 |
)
|
185 |
);
|
186 |
+
|
187 |
if($response->success)
|
188 |
{
|
189 |
+
$this->customer = $result->customer;
|
190 |
}
|
191 |
else
|
192 |
{
|
193 |
+
$order->error = "Failed to update customer.";
|
194 |
$order->shorterror = $order->error;
|
195 |
return false;
|
196 |
}
|
203 |
//assume no customer found
|
204 |
}
|
205 |
}
|
206 |
+
|
207 |
//no customer id, create one
|
208 |
if(!empty($order->accountnumber))
|
209 |
{
|
238 |
}
|
239 |
else
|
240 |
{
|
241 |
+
$order->error = "Failed to create customer.";
|
242 |
$order->shorterror = $order->error;
|
243 |
return false;
|
244 |
}
|
245 |
}
|
246 |
catch (Exception $e)
|
247 |
{
|
248 |
+
$order->error = "Error creating customer record with Braintree: " . $e->getMessage();
|
249 |
$order->shorterror = $order->error;
|
250 |
return false;
|
251 |
}
|
270 |
|
271 |
//figure out the amounts
|
272 |
$amount = $order->PaymentAmount;
|
273 |
+
$amount_tax = $order->getTaxForPrice($amount);
|
274 |
+
$order->subtotal = $amount;
|
275 |
$amount = round((float)$amount + (float)$amount_tax, 2);
|
276 |
|
277 |
/*
|
292 |
$trial_period_days = $order->BillingFrequency * 30; //assume monthly
|
293 |
|
294 |
//convert to a profile start date
|
295 |
+
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $trial_period_days . " Day")) . "T0:0:0";
|
296 |
|
297 |
//filter the start date
|
298 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
299 |
|
300 |
//convert back to days
|
301 |
+
$trial_period_days = ceil(abs(strtotime(date("Y-m-d")) - strtotime($order->ProfileStartDate)) / 86400);
|
302 |
|
303 |
//now add the actual trial set by the site
|
304 |
if(!empty($order->TrialBillingCycles))
|
337 |
}
|
338 |
catch (Exception $e)
|
339 |
{
|
340 |
+
$order->error = "Error subscribing customer to plan with B:" . $e->getMessage();
|
341 |
//return error
|
342 |
$order->shorterror = $order->error;
|
343 |
return false;
|
352 |
}
|
353 |
else
|
354 |
{
|
355 |
+
$order->error = "Failed to subscribe with Braintree: " . $result->message;
|
356 |
$order->shorterror = $result->message;
|
357 |
return false;
|
358 |
}
|
363 |
//we just have to run getCustomer which will look for the customer and update it with the new token
|
364 |
$this->getCustomer($order);
|
365 |
|
366 |
+
if(!empty($this->customer))
|
367 |
{
|
368 |
return true;
|
369 |
}
|
370 |
else
|
371 |
+
{
|
372 |
return false; //couldn't find the customer
|
373 |
}
|
374 |
}
|
390 |
catch(Exception $e)
|
391 |
{
|
392 |
$order->updateStatus("cancelled"); //assume it's been cancelled already
|
393 |
+
$order->error = "Could not find the subscription.";
|
394 |
$order->shorterror = $order->error;
|
395 |
return false; //no subscription found
|
396 |
}
|
403 |
else
|
404 |
{
|
405 |
$order->updateStatus("cancelled"); //assume it's been cancelled already
|
406 |
+
$order->error = "Could not find the subscription.";
|
407 |
$order->shorterror = $order->error;
|
408 |
return false; //no subscription found
|
409 |
}
|
410 |
}
|
411 |
else
|
412 |
{
|
413 |
+
$order->error = "Could not find the subscription.";
|
414 |
$order->shorterror = $order->error;
|
415 |
return false; //no customer found
|
416 |
}
|
417 |
}
|
418 |
}
|
419 |
+
?>
|
classes/gateways/class.pmprogateway_check.php
CHANGED
@@ -48,7 +48,7 @@
|
|
48 |
else
|
49 |
{
|
50 |
//add a period to the start date to account for the initial payment
|
51 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod
|
52 |
}
|
53 |
|
54 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
@@ -57,7 +57,7 @@
|
|
57 |
else
|
58 |
{
|
59 |
if(empty($order->error))
|
60 |
-
$order->error =
|
61 |
return false;
|
62 |
}
|
63 |
}
|
@@ -95,7 +95,7 @@
|
|
95 |
else
|
96 |
{
|
97 |
//add a period to the start date to account for the initial payment
|
98 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $this->BillingFrequency . " " . $this->BillingPeriod
|
99 |
}
|
100 |
|
101 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
@@ -108,14 +108,14 @@
|
|
108 |
if($this->void($order))
|
109 |
{
|
110 |
if(!$order->error)
|
111 |
-
$order->error =
|
112 |
}
|
113 |
else
|
114 |
{
|
115 |
if(!$order->error)
|
116 |
-
$order->error =
|
117 |
|
118 |
-
$order->error .= "
|
119 |
}
|
120 |
|
121 |
return false;
|
@@ -131,7 +131,7 @@
|
|
131 |
else
|
132 |
{
|
133 |
if(empty($order->error))
|
134 |
-
$order->error =
|
135 |
|
136 |
return false;
|
137 |
}
|
@@ -179,10 +179,7 @@
|
|
179 |
//create a code for the order
|
180 |
if(empty($order->code))
|
181 |
$order->code = $order->getRandomCode();
|
182 |
-
|
183 |
-
//filter order before subscription. use with care.
|
184 |
-
$order = apply_filters("pmpro_subscribe_order", $order, $this);
|
185 |
-
|
186 |
//simulate a successful subscription processing
|
187 |
$order->status = "success";
|
188 |
$order->subscription_transaction_id = "CHECK" . $order->code;
|
@@ -205,4 +202,5 @@
|
|
205 |
$order->updateStatus("cancelled");
|
206 |
return true;
|
207 |
}
|
208 |
-
}
|
|
48 |
else
|
49 |
{
|
50 |
//add a period to the start date to account for the initial payment
|
51 |
+
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod)) . "T0:0:0";
|
52 |
}
|
53 |
|
54 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
57 |
else
|
58 |
{
|
59 |
if(empty($order->error))
|
60 |
+
$order->error = "Unknown error: Authorization failed.";
|
61 |
return false;
|
62 |
}
|
63 |
}
|
95 |
else
|
96 |
{
|
97 |
//add a period to the start date to account for the initial payment
|
98 |
+
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $this->BillingFrequency . " " . $this->BillingPeriod)) . "T0:0:0";
|
99 |
}
|
100 |
|
101 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
108 |
if($this->void($order))
|
109 |
{
|
110 |
if(!$order->error)
|
111 |
+
$order->error = "Unknown error: Payment failed.";
|
112 |
}
|
113 |
else
|
114 |
{
|
115 |
if(!$order->error)
|
116 |
+
$order->error = "Unknown error: Payment failed.";
|
117 |
|
118 |
+
$order->error .= " A partial payment was made that we could not void. Please contact the site owner immediately to correct this.";
|
119 |
}
|
120 |
|
121 |
return false;
|
131 |
else
|
132 |
{
|
133 |
if(empty($order->error))
|
134 |
+
$order->error = "Unknown error: Payment failed.";
|
135 |
|
136 |
return false;
|
137 |
}
|
179 |
//create a code for the order
|
180 |
if(empty($order->code))
|
181 |
$order->code = $order->getRandomCode();
|
182 |
+
|
|
|
|
|
|
|
183 |
//simulate a successful subscription processing
|
184 |
$order->status = "success";
|
185 |
$order->subscription_transaction_id = "CHECK" . $order->code;
|
202 |
$order->updateStatus("cancelled");
|
203 |
return true;
|
204 |
}
|
205 |
+
}
|
206 |
+
?>
|
classes/gateways/class.pmprogateway_cybersource.php
DELETED
@@ -1,765 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
require_once(dirname(__FILE__) . "/class.pmprogateway.php");
|
3 |
-
if(!class_exists("CyberSourceSoapClient"))
|
4 |
-
require_once(dirname(__FILE__) . "/../../includes/lib/CyberSource/cyber_source_soap_client.php");
|
5 |
-
class PMProGateway_cybersource
|
6 |
-
{
|
7 |
-
function PMProGateway_cybersource($gateway = NULL)
|
8 |
-
{
|
9 |
-
$this->gateway = $gateway;
|
10 |
-
return $this->gateway;
|
11 |
-
}
|
12 |
-
|
13 |
-
function process(&$order)
|
14 |
-
{
|
15 |
-
//check for initial payment
|
16 |
-
if(floatval($order->InitialPayment) == 0)
|
17 |
-
{
|
18 |
-
//auth first, then process
|
19 |
-
if($this->authorize($order))
|
20 |
-
{
|
21 |
-
$this->void($order);
|
22 |
-
if(!pmpro_isLevelTrial($order->membership_level))
|
23 |
-
{
|
24 |
-
//subscription will start today with a 1 period trial
|
25 |
-
$order->ProfileStartDate = date("Y-m-d") . "T0:0:0";
|
26 |
-
$order->TrialBillingPeriod = $order->BillingPeriod;
|
27 |
-
$order->TrialBillingFrequency = $order->BillingFrequency;
|
28 |
-
$order->TrialBillingCycles = 1;
|
29 |
-
$order->TrialAmount = 0;
|
30 |
-
|
31 |
-
//add a billing cycle to make up for the trial, if applicable
|
32 |
-
if(!empty($order->TotalBillingCycles))
|
33 |
-
$order->TotalBillingCycles++;
|
34 |
-
}
|
35 |
-
elseif($order->InitialPayment == 0 && $order->TrialAmount == 0)
|
36 |
-
{
|
37 |
-
//it has a trial, but the amount is the same as the initial payment, so we can squeeze it in there
|
38 |
-
$order->ProfileStartDate = date("Y-m-d") . "T0:0:0";
|
39 |
-
$order->TrialBillingCycles++;
|
40 |
-
|
41 |
-
//add a billing cycle to make up for the trial, if applicable
|
42 |
-
if($order->TotalBillingCycles)
|
43 |
-
$order->TotalBillingCycles++;
|
44 |
-
}
|
45 |
-
else
|
46 |
-
{
|
47 |
-
//add a period to the start date to account for the initial payment
|
48 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod, current_time("timestamp"))) . "T0:0:0";
|
49 |
-
}
|
50 |
-
|
51 |
-
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
52 |
-
return $this->subscribe($order);
|
53 |
-
}
|
54 |
-
else
|
55 |
-
{
|
56 |
-
if(empty($order->error))
|
57 |
-
$order->error = __("Unknown error: Authorization failed.", "pmpro");
|
58 |
-
return false;
|
59 |
-
}
|
60 |
-
}
|
61 |
-
else
|
62 |
-
{
|
63 |
-
//charge first payment
|
64 |
-
if($this->charge($order))
|
65 |
-
{
|
66 |
-
//setup recurring billing
|
67 |
-
if(pmpro_isLevelRecurring($order->membership_level))
|
68 |
-
{
|
69 |
-
if(!pmpro_isLevelTrial($order->membership_level))
|
70 |
-
{
|
71 |
-
//subscription will start today with a 1 period trial
|
72 |
-
$order->ProfileStartDate = date("Y-m-d") . "T0:0:0";
|
73 |
-
$order->TrialBillingPeriod = $order->BillingPeriod;
|
74 |
-
$order->TrialBillingFrequency = $order->BillingFrequency;
|
75 |
-
$order->TrialBillingCycles = 1;
|
76 |
-
$order->TrialAmount = 0;
|
77 |
-
|
78 |
-
//add a billing cycle to make up for the trial, if applicable
|
79 |
-
if(!empty($order->TotalBillingCycles))
|
80 |
-
$order->TotalBillingCycles++;
|
81 |
-
}
|
82 |
-
elseif($order->InitialPayment == 0 && $order->TrialAmount == 0)
|
83 |
-
{
|
84 |
-
//it has a trial, but the amount is the same as the initial payment, so we can squeeze it in there
|
85 |
-
$order->ProfileStartDate = date("Y-m-d") . "T0:0:0";
|
86 |
-
$order->TrialBillingCycles++;
|
87 |
-
|
88 |
-
//add a billing cycle to make up for the trial, if applicable
|
89 |
-
if(!empty($order->TotalBillingCycles))
|
90 |
-
$order->TotalBillingCycles++;
|
91 |
-
}
|
92 |
-
else
|
93 |
-
{
|
94 |
-
//add a period to the start date to account for the initial payment
|
95 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $this->BillingFrequency . " " . $this->BillingPeriod, current_time("timestamp"))) . "T0:0:0";
|
96 |
-
}
|
97 |
-
|
98 |
-
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
99 |
-
if($this->subscribe($order))
|
100 |
-
{
|
101 |
-
return true;
|
102 |
-
}
|
103 |
-
else
|
104 |
-
{
|
105 |
-
if($this->void($order))
|
106 |
-
{
|
107 |
-
if(!$order->error)
|
108 |
-
$order->error = __("Unknown error: Payment failed.", "pmpro");
|
109 |
-
}
|
110 |
-
else
|
111 |
-
{
|
112 |
-
if(!$order->error)
|
113 |
-
$order->error = __("Unknown error: Payment failed.", "pmpro");
|
114 |
-
|
115 |
-
$order->error .= " " . __("A partial payment was made that we could not void. Please contact the site owner immediately to correct this.", "pmpro");
|
116 |
-
}
|
117 |
-
|
118 |
-
return false;
|
119 |
-
}
|
120 |
-
}
|
121 |
-
else
|
122 |
-
{
|
123 |
-
//only a one time charge
|
124 |
-
$order->status = "success"; //saved on checkout page
|
125 |
-
return true;
|
126 |
-
}
|
127 |
-
}
|
128 |
-
else
|
129 |
-
{
|
130 |
-
if(empty($order->error))
|
131 |
-
$order->error = __("Unknown error: Payment failed.", "pmpro");
|
132 |
-
|
133 |
-
return false;
|
134 |
-
}
|
135 |
-
}
|
136 |
-
}
|
137 |
-
|
138 |
-
function getCardType($name)
|
139 |
-
{
|
140 |
-
$card_types = array(
|
141 |
-
'Visa' => '001',
|
142 |
-
'MasterCard' => '002',
|
143 |
-
'Master Card' => '002',
|
144 |
-
'AMEX' => '003',
|
145 |
-
'American Express' => '003',
|
146 |
-
'Discover' => '004',
|
147 |
-
'Diners Club' => '005',
|
148 |
-
'Carte Blanche' => '006',
|
149 |
-
'JCB' => '007'
|
150 |
-
);
|
151 |
-
|
152 |
-
if(isset($card_types[$name]))
|
153 |
-
return $card_types[$name];
|
154 |
-
else
|
155 |
-
return false;
|
156 |
-
}
|
157 |
-
|
158 |
-
function getWSDL($order)
|
159 |
-
{
|
160 |
-
//which gateway environment?
|
161 |
-
if(empty($order->gateway_environment))
|
162 |
-
$gateway_environment = pmpro_getOption("gateway_environment");
|
163 |
-
else
|
164 |
-
$gateway_environment = $order->gateway_environment;
|
165 |
-
|
166 |
-
//which host?
|
167 |
-
if($gateway_environment == "live")
|
168 |
-
$host = "ics2ws.ic3.com";
|
169 |
-
else
|
170 |
-
$host = "ics2wstest.ic3.com";
|
171 |
-
|
172 |
-
//path
|
173 |
-
$path = "/commerce/1.x/transactionProcessor/CyberSourceTransaction_1.90.wsdl";
|
174 |
-
|
175 |
-
//build url
|
176 |
-
$wsdl_url = "https://" . $host . $path;
|
177 |
-
|
178 |
-
//filter
|
179 |
-
$wsdl_url = apply_filters("pmpro_cybersource_wsdl_url", $wsdl_url, $gateway_environment);
|
180 |
-
|
181 |
-
return $wsdl_url;
|
182 |
-
}
|
183 |
-
|
184 |
-
function authorize(&$order)
|
185 |
-
{
|
186 |
-
if(empty($order->code))
|
187 |
-
$order->code = $order->getRandomCode();
|
188 |
-
|
189 |
-
$wsdl_url = $this->getWSDL($order);
|
190 |
-
|
191 |
-
//what amount to authorize? just $1 to test
|
192 |
-
$amount = "1.00";
|
193 |
-
|
194 |
-
//combine address
|
195 |
-
$address = $order->Address1;
|
196 |
-
if(!empty($order->Address2))
|
197 |
-
$address .= "\n" . $order->Address2;
|
198 |
-
|
199 |
-
//customer stuff
|
200 |
-
$customer_email = $order->Email;
|
201 |
-
$customer_phone = $order->billing->phone;
|
202 |
-
|
203 |
-
if(!isset($order->membership_level->name))
|
204 |
-
$order->membership_level->name = "";
|
205 |
-
|
206 |
-
//to store our request
|
207 |
-
$request = new stdClass();
|
208 |
-
|
209 |
-
//which service?
|
210 |
-
$ccAuthService = new stdClass();
|
211 |
-
$ccAuthService->run = "true";
|
212 |
-
$request->ccAuthService = $ccAuthService;
|
213 |
-
|
214 |
-
//merchant id and order code
|
215 |
-
$request->merchantID = pmpro_getOption("cybersource_merchantid");
|
216 |
-
$request->merchantReferenceCode = $order->code;
|
217 |
-
|
218 |
-
//bill to
|
219 |
-
$billTo = new stdClass();
|
220 |
-
$billTo->firstName = $order->FirstName;
|
221 |
-
$billTo->lastName = $order->LastName;
|
222 |
-
$billTo->street1 = $address;
|
223 |
-
$billTo->city = $order->billing->city;
|
224 |
-
$billTo->state = $order->billing->state;
|
225 |
-
$billTo->postalCode = $order->billing->zip;
|
226 |
-
$billTo->country = $order->billing->country;
|
227 |
-
$billTo->email = $order->Email;
|
228 |
-
$billTo->ipAddress = $_SERVER['REMOTE_ADDR'];
|
229 |
-
$request->billTo = $billTo;
|
230 |
-
|
231 |
-
//card
|
232 |
-
$card = new stdClass();
|
233 |
-
$card->cardType = $this->getCardType($order->cardtype);
|
234 |
-
$card->accountNumber = $order->accountnumber;
|
235 |
-
$card->expirationMonth = $order->expirationmonth;
|
236 |
-
$card->expirationYear = $order->expirationyear;
|
237 |
-
$card->cvNumber = $order->CVV2;
|
238 |
-
$request->card = $card;
|
239 |
-
|
240 |
-
//currency
|
241 |
-
$purchaseTotals = new stdClass();
|
242 |
-
$purchaseTotals->currency = pmpro_getOption("currency");
|
243 |
-
$request->purchaseTotals = $purchaseTotals;
|
244 |
-
|
245 |
-
//item/price
|
246 |
-
$item0 = new stdClass();
|
247 |
-
$item0->unitPrice = $amount;
|
248 |
-
$item0->quantity = "1";
|
249 |
-
$item0->productName = $order->membership_level->name . " Membership";
|
250 |
-
$item0->productSKU = $order->membership_level->id;
|
251 |
-
$item0->id = $order->membership_id;
|
252 |
-
$request->item = array($item0);
|
253 |
-
|
254 |
-
$soapClient = new CyberSourceSoapClient($wsdl_url, array("merchantID"=>pmpro_getOption("cybersource_merchantid"), "transactionKey"=>pmpro_getOption("cybersource_securitykey")));
|
255 |
-
$reply = $soapClient->runTransaction($request);
|
256 |
-
|
257 |
-
if($reply->reasonCode == "100")
|
258 |
-
{
|
259 |
-
//success
|
260 |
-
$order->payment_transaction_id = $reply->requestID;
|
261 |
-
$order->updateStatus("authorized");
|
262 |
-
return true;
|
263 |
-
}
|
264 |
-
else
|
265 |
-
{
|
266 |
-
//error
|
267 |
-
$order->errorcode = $reply->reasonCode;
|
268 |
-
$order->error = $this->getErrorFromCode($reply->reasonCode);
|
269 |
-
$order->shorterror = $this->getErrorFromCode($reply->reasonCode);
|
270 |
-
return false;
|
271 |
-
}
|
272 |
-
}
|
273 |
-
|
274 |
-
function void(&$order)
|
275 |
-
{
|
276 |
-
//need a transaction id
|
277 |
-
if(empty($order->payment_transaction_id))
|
278 |
-
return false;
|
279 |
-
|
280 |
-
//get wsdl
|
281 |
-
$wsdl_url = $this->getWSDL($order);
|
282 |
-
|
283 |
-
//to store our request
|
284 |
-
$request = new stdClass();
|
285 |
-
|
286 |
-
//which service?
|
287 |
-
$voidService = new stdClass();
|
288 |
-
$voidService->run = "true";
|
289 |
-
$voidService->voidRequestID = $order->payment_transaction_id;
|
290 |
-
$request->voidService = $voidService;
|
291 |
-
|
292 |
-
//merchant id and order code
|
293 |
-
$request->merchantID = pmpro_getOption("cybersource_merchantid");
|
294 |
-
$request->merchantReferenceCode = $order->code;
|
295 |
-
|
296 |
-
$soapClient = new CyberSourceSoapClient($wsdl_url, array("merchantID"=>pmpro_getOption("cybersource_merchantid"), "transactionKey"=>pmpro_getOption("cybersource_securitykey")));
|
297 |
-
$reply = $soapClient->runTransaction($request);
|
298 |
-
|
299 |
-
if($reply->reasonCode == "100")
|
300 |
-
{
|
301 |
-
//success
|
302 |
-
$order->payment_transaction_id = $reply->requestID;
|
303 |
-
$order->updateStatus("voided");
|
304 |
-
return true;
|
305 |
-
}
|
306 |
-
else
|
307 |
-
{
|
308 |
-
//error
|
309 |
-
$order->errorcode = $reply->reasonCode;
|
310 |
-
$order->error = $this->getErrorFromCode($reply->reasonCode);
|
311 |
-
$order->shorterror = $this->getErrorFromCode($reply->reasonCode);
|
312 |
-
return false;
|
313 |
-
}
|
314 |
-
}
|
315 |
-
|
316 |
-
function charge(&$order)
|
317 |
-
{
|
318 |
-
//get a code
|
319 |
-
if(empty($order->code))
|
320 |
-
$order->code = $order->getRandomCode();
|
321 |
-
|
322 |
-
//get wsdl
|
323 |
-
$wsdl_url = $this->getWSDL($order);
|
324 |
-
|
325 |
-
//what amount to charge?
|
326 |
-
$amount = $order->InitialPayment;
|
327 |
-
|
328 |
-
//tax
|
329 |
-
$order->subtotal = $amount;
|
330 |
-
$tax = $order->getTax(true);
|
331 |
-
$amount = round((float)$order->subtotal + (float)$tax, 2);
|
332 |
-
|
333 |
-
//combine address
|
334 |
-
$address = $order->Address1;
|
335 |
-
if(!empty($order->Address2))
|
336 |
-
$address .= "\n" . $order->Address2;
|
337 |
-
|
338 |
-
//customer stuff
|
339 |
-
$customer_email = $order->Email;
|
340 |
-
$customer_phone = $order->billing->phone;
|
341 |
-
|
342 |
-
if(!isset($order->membership_level->name))
|
343 |
-
$order->membership_level->name = "";
|
344 |
-
|
345 |
-
//to store our request
|
346 |
-
$request = new stdClass();
|
347 |
-
|
348 |
-
//authorize and capture
|
349 |
-
$ccAuthService = new stdClass();
|
350 |
-
$ccAuthService->run = "true";
|
351 |
-
$request->ccAuthService = $ccAuthService;
|
352 |
-
|
353 |
-
$ccCaptureService = new stdClass();
|
354 |
-
$ccCaptureService->run = "true";
|
355 |
-
$request->ccCaptureService = $ccCaptureService;
|
356 |
-
|
357 |
-
//merchant id and order code
|
358 |
-
$request->merchantID = pmpro_getOption("cybersource_merchantid");
|
359 |
-
$request->merchantReferenceCode = $order->code;
|
360 |
-
|
361 |
-
//bill to
|
362 |
-
$billTo = new stdClass();
|
363 |
-
$billTo->firstName = $order->FirstName;
|
364 |
-
$billTo->lastName = $order->LastName;
|
365 |
-
$billTo->street1 = $address;
|
366 |
-
$billTo->city = $order->billing->city;
|
367 |
-
$billTo->state = $order->billing->state;
|
368 |
-
$billTo->postalCode = $order->billing->zip;
|
369 |
-
$billTo->country = $order->billing->country;
|
370 |
-
$billTo->email = $order->Email;
|
371 |
-
$billTo->ipAddress = $_SERVER['REMOTE_ADDR'];
|
372 |
-
$request->billTo = $billTo;
|
373 |
-
|
374 |
-
//card
|
375 |
-
$card = new stdClass();
|
376 |
-
$card->cardType = $this->getCardType($order->cardtype);
|
377 |
-
$card->accountNumber = $order->accountnumber;
|
378 |
-
$card->expirationMonth = $order->expirationmonth;
|
379 |
-
$card->expirationYear = $order->expirationyear;
|
380 |
-
$card->cvNumber = $order->CVV2;
|
381 |
-
$request->card = $card;
|
382 |
-
|
383 |
-
//currency
|
384 |
-
$purchaseTotals = new stdClass();
|
385 |
-
$purchaseTotals->currency = pmpro_getOption("currency");
|
386 |
-
$request->purchaseTotals = $purchaseTotals;
|
387 |
-
|
388 |
-
//item/price
|
389 |
-
$item0 = new stdClass();
|
390 |
-
$item0->unitPrice = $amount;
|
391 |
-
$item0->quantity = "1";
|
392 |
-
$item0->productName = $order->membership_level->name . " Membership";
|
393 |
-
$item0->productSKU = $order->membership_level->id;
|
394 |
-
$item0->id = $order->membership_id;
|
395 |
-
$request->item = array($item0);
|
396 |
-
|
397 |
-
$soapClient = new CyberSourceSoapClient($wsdl_url, array("merchantID"=>pmpro_getOption("cybersource_merchantid"), "transactionKey"=>pmpro_getOption("cybersource_securitykey")));
|
398 |
-
$reply = $soapClient->runTransaction($request);
|
399 |
-
|
400 |
-
if($reply->reasonCode == "100")
|
401 |
-
{
|
402 |
-
//success
|
403 |
-
$order->payment_transaction_id = $reply->requestID;
|
404 |
-
$order->updateStatus("success");
|
405 |
-
return true;
|
406 |
-
}
|
407 |
-
else
|
408 |
-
{
|
409 |
-
//error
|
410 |
-
$order->errorcode = $reply->reasonCode;
|
411 |
-
$order->error = $this->getErrorFromCode($reply->reasonCode);
|
412 |
-
$order->shorterror = $this->getErrorFromCode($reply->reasonCode);
|
413 |
-
return false;
|
414 |
-
}
|
415 |
-
}
|
416 |
-
|
417 |
-
function subscribe(&$order)
|
418 |
-
{
|
419 |
-
//create a code for the order
|
420 |
-
if(empty($order->code))
|
421 |
-
$order->code = $order->getRandomCode();
|
422 |
-
|
423 |
-
//filter order before subscription. use with care.
|
424 |
-
$order = apply_filters("pmpro_subscribe_order", $order, $this);
|
425 |
-
|
426 |
-
//get wsdl
|
427 |
-
$wsdl_url = $this->getWSDL($order);
|
428 |
-
|
429 |
-
//to store our request
|
430 |
-
$request = new stdClass();
|
431 |
-
|
432 |
-
//set service type
|
433 |
-
$paySubscriptionCreateService = new stdClass();
|
434 |
-
$paySubscriptionCreateService->run = 'true';
|
435 |
-
$paySubscriptionCreateService->disableAutoAuth = 'true'; //we do our own auth check
|
436 |
-
$request->paySubscriptionCreateService = $paySubscriptionCreateService;
|
437 |
-
|
438 |
-
//merchant id and order code
|
439 |
-
$request->merchantID = pmpro_getOption("cybersource_merchantid");
|
440 |
-
$request->merchantReferenceCode = $order->code;
|
441 |
-
|
442 |
-
/*
|
443 |
-
setup billing amount/etc
|
444 |
-
*/
|
445 |
-
//figure out the amounts
|
446 |
-
$amount = $order->PaymentAmount;
|
447 |
-
$amount_tax = $order->getTaxForPrice($amount);
|
448 |
-
$order->subtotal = $amount;
|
449 |
-
$amount = round((float)$amount + (float)$amount_tax, 2);
|
450 |
-
|
451 |
-
/*
|
452 |
-
There are two parts to the trial. Part 1 is simply the delay until the first payment
|
453 |
-
since we are doing the first payment as a separate transaction.
|
454 |
-
The second part is the actual "trial" set by the admin.
|
455 |
-
*/
|
456 |
-
//figure out the trial length (first payment handled by initial charge)
|
457 |
-
if($order->BillingPeriod == "Year")
|
458 |
-
$trial_period_days = $order->BillingFrequency * 365; //annual
|
459 |
-
elseif($order->BillingPeriod == "Day")
|
460 |
-
$trial_period_days = $order->BillingFrequency * 1; //daily
|
461 |
-
elseif($order->BillingPeriod == "Week")
|
462 |
-
$trial_period_days = $order->BillingFrequency * 7; //weekly
|
463 |
-
else
|
464 |
-
$trial_period_days = $order->BillingFrequency * 30; //assume monthly
|
465 |
-
|
466 |
-
//convert to a profile start date
|
467 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $trial_period_days . " Day", current_time("timestamp"))) . "T0:0:0";
|
468 |
-
|
469 |
-
//filter the start date
|
470 |
-
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
471 |
-
|
472 |
-
//convert back to days
|
473 |
-
$trial_period_days = ceil(abs(strtotime(date("Y-m-d"), current_time('timestamp')) - strtotime($order->ProfileStartDate, current_time("timestamp"))) / 86400);
|
474 |
-
|
475 |
-
//now add the actual trial set by the site
|
476 |
-
if(!empty($order->TrialBillingCycles))
|
477 |
-
{
|
478 |
-
$trialOccurrences = (int)$order->TrialBillingCycles;
|
479 |
-
if($order->BillingPeriod == "Year")
|
480 |
-
$trial_period_days = $trial_period_days + (365 * $order->BillingFrequency * $trialOccurrences); //annual
|
481 |
-
elseif($order->BillingPeriod == "Day")
|
482 |
-
$trial_period_days = $trial_period_days + (1 * $order->BillingFrequency * $trialOccurrences); //daily
|
483 |
-
elseif($order->BillingPeriod == "Week")
|
484 |
-
$trial_period_days = $trial_period_days + (7 * $order->BillingFrequency * $trialOccurrences); //weekly
|
485 |
-
else
|
486 |
-
$trial_period_days = $trial_period_days + (30 * $order->BillingFrequency * $trialOccurrences); //assume monthly
|
487 |
-
}
|
488 |
-
|
489 |
-
//convert back into a date
|
490 |
-
$profile_start_date = date("Ymd", strtotime("+ " . $trial_period_days . " Days"));
|
491 |
-
|
492 |
-
//figure out the frequency
|
493 |
-
if($order->BillingPeriod == "Year")
|
494 |
-
{
|
495 |
-
$frequency = "annually"; //ignoring BillingFrequency set on level.
|
496 |
-
}
|
497 |
-
elseif($order->BillingPeriod == "Month")
|
498 |
-
{
|
499 |
-
if($order->BillingFrequency == 6)
|
500 |
-
$frequency = "semi annually";
|
501 |
-
elseif($order->BillingFrequency == 3)
|
502 |
-
$frequency = "quarterly";
|
503 |
-
else
|
504 |
-
$frequency = "monthly";
|
505 |
-
}
|
506 |
-
elseif($order->BillingPeriod == "Week")
|
507 |
-
{
|
508 |
-
if($order->BillingFrequency == 4)
|
509 |
-
$frequency = "quad-weekly";
|
510 |
-
elseif($order->BillingFrequency == 2)
|
511 |
-
$frequency = "bi-weekly";
|
512 |
-
else
|
513 |
-
$frequency = "weekly";
|
514 |
-
}
|
515 |
-
elseif($order->BillingPeriod == "Day")
|
516 |
-
{
|
517 |
-
if($order->BillingFrequency == 365)
|
518 |
-
$frequency = "annually";
|
519 |
-
elseif($order->BillingFrequency == 182)
|
520 |
-
$frequency = "semi annually";
|
521 |
-
elseif($order->BillingFrequency == 183)
|
522 |
-
$frequency = "semi annually";
|
523 |
-
elseif($order->BillingFrequency == 90)
|
524 |
-
$frequency = "quaterly";
|
525 |
-
elseif($order->BillingFrequency == 30)
|
526 |
-
$frequency = "monthly";
|
527 |
-
elseif($order->BillingFrequency == 15)
|
528 |
-
$frequency = "semi-monthly";
|
529 |
-
elseif($order->BillingFrequency == 28)
|
530 |
-
$frequency = "quad-weekly";
|
531 |
-
elseif($order->BillingFrequency == 14)
|
532 |
-
$frequency = "bi-weekly";
|
533 |
-
elseif($order->BillingFrequency == 7)
|
534 |
-
$frequency = "weekly";
|
535 |
-
}
|
536 |
-
|
537 |
-
//set subscription info for API
|
538 |
-
$subscription = new stdClass();
|
539 |
-
$subscription->title = $order->membership_level->name;
|
540 |
-
$subscription->paymentMethod = "credit card";
|
541 |
-
$request->subscription = $subscription;
|
542 |
-
|
543 |
-
//recurring info
|
544 |
-
$recurringSubscriptionInfo = new stdClass();
|
545 |
-
$recurringSubscriptionInfo->amount = number_format($amount, 2);
|
546 |
-
$recurringSubscriptionInfo->startDate = $profile_start_date;
|
547 |
-
$recurringSubscriptionInfo->frequency = $frequency;
|
548 |
-
if(!empty($order->TotalBillingCycles))
|
549 |
-
$recurringSubscriptionInfo->numberOfPayments = $order->TotalBillingCycles;
|
550 |
-
$request->recurringSubscriptionInfo = $recurringSubscriptionInfo;
|
551 |
-
|
552 |
-
//combine address
|
553 |
-
$address = $order->Address1;
|
554 |
-
if(!empty($order->Address2))
|
555 |
-
$address .= "\n" . $order->Address2;
|
556 |
-
|
557 |
-
//bill to
|
558 |
-
$billTo = new stdClass();
|
559 |
-
$billTo->firstName = $order->FirstName;
|
560 |
-
$billTo->lastName = $order->LastName;
|
561 |
-
$billTo->street1 = $address;
|
562 |
-
$billTo->city = $order->billing->city;
|
563 |
-
$billTo->state = $order->billing->state;
|
564 |
-
$billTo->postalCode = $order->billing->zip;
|
565 |
-
$billTo->country = $order->billing->country;
|
566 |
-
$billTo->email = $order->Email;
|
567 |
-
$billTo->ipAddress = $_SERVER['REMOTE_ADDR'];
|
568 |
-
$request->billTo = $billTo;
|
569 |
-
|
570 |
-
//card
|
571 |
-
$card = new stdClass();
|
572 |
-
$card->cardType = $this->getCardType($order->cardtype);
|
573 |
-
$card->accountNumber = $order->accountnumber;
|
574 |
-
$card->expirationMonth = $order->expirationmonth;
|
575 |
-
$card->expirationYear = $order->expirationyear;
|
576 |
-
$card->cvNumber = $order->CVV2;
|
577 |
-
$request->card = $card;
|
578 |
-
|
579 |
-
//currency
|
580 |
-
$purchaseTotals = new stdClass();
|
581 |
-
$purchaseTotals->currency = pmpro_getOption("currency");
|
582 |
-
$request->purchaseTotals = $purchaseTotals;
|
583 |
-
|
584 |
-
$soapClient = new CyberSourceSoapClient($wsdl_url, array("merchantID"=>pmpro_getOption("cybersource_merchantid"), "transactionKey"=>pmpro_getOption("cybersource_securitykey")));
|
585 |
-
$reply = $soapClient->runTransaction($request);
|
586 |
-
|
587 |
-
if($reply->reasonCode == "100")
|
588 |
-
{
|
589 |
-
//success
|
590 |
-
$order->subscription_transaction_id = $reply->requestID;
|
591 |
-
$order->status = "success";
|
592 |
-
return true;
|
593 |
-
}
|
594 |
-
else
|
595 |
-
{
|
596 |
-
//error
|
597 |
-
$order->status = "error";
|
598 |
-
$order->errorcode = $reply->reasonCode;
|
599 |
-
$order->error = $this->getErrorFromCode($reply->reasonCode);
|
600 |
-
$order->shorterror = $this->getErrorFromCode($reply->reasonCode);
|
601 |
-
return false;
|
602 |
-
}
|
603 |
-
}
|
604 |
-
|
605 |
-
function update(&$order)
|
606 |
-
{
|
607 |
-
//get wsdl
|
608 |
-
$wsdl_url = $this->getWSDL($order);
|
609 |
-
|
610 |
-
//to store our request
|
611 |
-
$request = new stdClass();
|
612 |
-
|
613 |
-
//set service type
|
614 |
-
$paySubscriptionUpdateService = new stdClass();
|
615 |
-
$paySubscriptionUpdateService ->run = "true";
|
616 |
-
$request->paySubscriptionUpdateService = $paySubscriptionUpdateService ;
|
617 |
-
|
618 |
-
//merchant id and order code
|
619 |
-
$request->merchantID = pmpro_getOption("cybersource_merchantid");
|
620 |
-
$request->merchantReferenceCode = $order->code;
|
621 |
-
|
622 |
-
//set subscription info for API
|
623 |
-
$recurringSubscriptionInfo = new stdClass();
|
624 |
-
$recurringSubscriptionInfo->subscriptionID = $order->subscription_transaction_id;
|
625 |
-
$request->recurringSubscriptionInfo = $recurringSubscriptionInfo;
|
626 |
-
|
627 |
-
//combine address
|
628 |
-
$address = $order->Address1;
|
629 |
-
if(!empty($order->Address2))
|
630 |
-
$address .= "\n" . $order->Address2;
|
631 |
-
|
632 |
-
//bill to
|
633 |
-
$billTo = new stdClass();
|
634 |
-
$billTo->firstName = $order->FirstName;
|
635 |
-
$billTo->lastName = $order->LastName;
|
636 |
-
$billTo->street1 = $address;
|
637 |
-
$billTo->city = $order->billing->city;
|
638 |
-
$billTo->state = $order->billing->state;
|
639 |
-
$billTo->postalCode = $order->billing->zip;
|
640 |
-
$billTo->country = $order->billing->country;
|
641 |
-
$billTo->email = $order->Email;
|
642 |
-
$billTo->ipAddress = $_SERVER['REMOTE_ADDR'];
|
643 |
-
$request->billTo = $billTo;
|
644 |
-
|
645 |
-
//card
|
646 |
-
$card = new stdClass();
|
647 |
-
$card->cardType = $this->getCardType($order->cardtype);
|
648 |
-
$card->accountNumber = $order->accountnumber;
|
649 |
-
$card->expirationMonth = $order->expirationmonth;
|
650 |
-
$card->expirationYear = $order->expirationyear;
|
651 |
-
$card->cvNumber = $order->CVV2;
|
652 |
-
$request->card = $card;
|
653 |
-
|
654 |
-
$soapClient = new CyberSourceSoapClient($wsdl_url, array("merchantID"=>pmpro_getOption("cybersource_merchantid"), "transactionKey"=>pmpro_getOption("cybersource_securitykey")));
|
655 |
-
$reply = $soapClient->runTransaction($request);
|
656 |
-
|
657 |
-
if($reply->reasonCode == "100")
|
658 |
-
{
|
659 |
-
//success
|
660 |
-
return true;
|
661 |
-
}
|
662 |
-
else
|
663 |
-
{
|
664 |
-
//error
|
665 |
-
$order->errorcode = $reply->reasonCode;
|
666 |
-
$order->error = $this->getErrorFromCode($reply->reasonCode);
|
667 |
-
$order->shorterror = $this->getErrorFromCode($reply->reasonCode);
|
668 |
-
return false;
|
669 |
-
}
|
670 |
-
}
|
671 |
-
|
672 |
-
function cancel(&$order)
|
673 |
-
{
|
674 |
-
//require a subscription id
|
675 |
-
if(empty($order->subscription_transaction_id))
|
676 |
-
return false;
|
677 |
-
|
678 |
-
//get wsdl
|
679 |
-
$wsdl_url = $this->getWSDL($order);
|
680 |
-
|
681 |
-
//to store our request
|
682 |
-
$request = new stdClass();
|
683 |
-
|
684 |
-
//which service?
|
685 |
-
$paySubscriptionDeleteService = new stdClass();
|
686 |
-
$paySubscriptionDeleteService ->run = "true";
|
687 |
-
$request->paySubscriptionDeleteService = $paySubscriptionDeleteService ;
|
688 |
-
|
689 |
-
//which order
|
690 |
-
$recurringSubscriptionInfo = new stdClass();
|
691 |
-
$recurringSubscriptionInfo->subscriptionID = $order->subscription_transaction_id;
|
692 |
-
$request->recurringSubscriptionInfo = $recurringSubscriptionInfo;
|
693 |
-
|
694 |
-
//merchant id and order code
|
695 |
-
$request->merchantID = pmpro_getOption("cybersource_merchantid");
|
696 |
-
$request->merchantReferenceCode = $order->code;
|
697 |
-
|
698 |
-
$soapClient = new CyberSourceSoapClient($wsdl_url, array("merchantID"=>pmpro_getOption("cybersource_merchantid"), "transactionKey"=>pmpro_getOption("cybersource_securitykey")));
|
699 |
-
$reply = $soapClient->runTransaction($request);
|
700 |
-
|
701 |
-
if($reply->reasonCode == "100")
|
702 |
-
{
|
703 |
-
//success
|
704 |
-
$order->updateStatus("cancelled");
|
705 |
-
return true;
|
706 |
-
}
|
707 |
-
else
|
708 |
-
{
|
709 |
-
//error
|
710 |
-
$order->errorcode = $reply->reasonCode;
|
711 |
-
$order->error = $this->getErrorFromCode($reply->reasonCode);
|
712 |
-
$order->shorterror = $this->getErrorFromCode($reply->reasonCode);
|
713 |
-
return false;
|
714 |
-
}
|
715 |
-
}
|
716 |
-
|
717 |
-
function getErrorFromCode($code)
|
718 |
-
{
|
719 |
-
$error_messages = array(
|
720 |
-
"100" => "Successful transaction.",
|
721 |
-
"101" => "The request is missing one or more required fields.",
|
722 |
-
"102" => "One or more fields in the request contains invalid data. Check that your billing address is valid.",
|
723 |
-
"104" => "Duplicate order detected.",
|
724 |
-
"110" => "Only partial amount was approved.",
|
725 |
-
"150" => "Error: General system failure.",
|
726 |
-
"151" => "Error: The request was received but there was a server timeout.",
|
727 |
-
"152" => "Error: The request was received, but a service did not finish running in time. ",
|
728 |
-
"200" => "Address Verification Service (AVS) failure.",
|
729 |
-
"201" => "Authorization failed.",
|
730 |
-
"202" => "Expired card or invalid expiration date.",
|
731 |
-
"203" => "The card was declined.",
|
732 |
-
"204" => "Insufficient funds in the account.",
|
733 |
-
"205" => "Stolen or lost card.",
|
734 |
-
"207" => "Issuing bank unavailable.",
|
735 |
-
"208" => "Inactive card or card not authorized for card-not-present transactions.",
|
736 |
-
"209" => "American Express Card Identification Digits (CID) did not match.",
|
737 |
-
"210" => "The card has reached the credit limit. ",
|
738 |
-
"211" => "Invalid card verification number.",
|
739 |
-
"221" => "The customer matched an entry on the processors negative file. ",
|
740 |
-
"230" => "Card verification (CV) check failed.",
|
741 |
-
"231" => "Invalid account number.",
|
742 |
-
"232" => "The card type is not accepted by the payment processor.",
|
743 |
-
"233" => "General decline by the processor.",
|
744 |
-
"234" => "There is a problem with your CyberSource merchant configuration.",
|
745 |
-
"235" => "The requested amount exceeds the originally authorized amount.",
|
746 |
-
"236" => "Processor failure.",
|
747 |
-
"237" => "The authorization has already been reversed.",
|
748 |
-
"238" => "The authorization has already been captured.",
|
749 |
-
"239" => "The requested transaction amount must match the previous transaction amount.",
|
750 |
-
"240" => "The card type sent is invalid or does not correlate with the credit card number.",
|
751 |
-
"241" => "The referenced request id is invalid for all follow-on transactions.",
|
752 |
-
"242" => "The request ID is invalid.",
|
753 |
-
"243" => "The transaction has already been settled or reversed.",
|
754 |
-
"246" => "The capture or credit is not voidable because the capture or credit information has already been submitted to your processor. Or, you requested a void for a type of transaction that cannot be voided.",
|
755 |
-
"247" => "You requested a credit for a capture that was previously voided.",
|
756 |
-
"250" => "Error: The request was received, but there was a timeout at the payment processor.",
|
757 |
-
"520" => "Smart Authorization failed."
|
758 |
-
);
|
759 |
-
|
760 |
-
if(isset($error_messages[$code]))
|
761 |
-
return $error_messages[$code];
|
762 |
-
else
|
763 |
-
return "Unknown error.";
|
764 |
-
}
|
765 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/gateways/class.pmprogateway_payflowpro.php
CHANGED
@@ -16,27 +16,34 @@
|
|
16 |
$authorization_id = $this->authorize($order);
|
17 |
if($authorization_id)
|
18 |
{
|
19 |
-
$this->void($order, $authorization_id);
|
20 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod
|
21 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
22 |
return $this->subscribe($order);
|
23 |
}
|
24 |
else
|
25 |
{
|
26 |
if(empty($order->error))
|
27 |
-
$order->error =
|
28 |
return false;
|
29 |
}
|
30 |
}
|
31 |
else
|
32 |
-
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
//charge first payment
|
34 |
if($this->charge($order))
|
35 |
{
|
36 |
//setup recurring billing
|
37 |
if(pmpro_isLevelRecurring($order->membership_level))
|
38 |
{
|
39 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod
|
40 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
41 |
if($this->subscribe($order))
|
42 |
{
|
@@ -47,14 +54,14 @@
|
|
47 |
if($this->void($order, $order->payment_transaction_id))
|
48 |
{
|
49 |
if(empty($order->error))
|
50 |
-
$order->error =
|
51 |
}
|
52 |
else
|
53 |
{
|
54 |
if(empty($order->error))
|
55 |
-
$order->error =
|
56 |
|
57 |
-
$order->error .= "
|
58 |
}
|
59 |
|
60 |
return false;
|
@@ -91,7 +98,7 @@
|
|
91 |
else
|
92 |
$cardtype = $order->cardtype;
|
93 |
|
94 |
-
if(!empty($
|
95 |
$nvpStr .= "&ACCT=" . $order->accountnumber . "&EXPDATE=" . $order->expirationmonth . substr($order->expirationyear, 2, 2) . "&CVV2=" . $order->CVV2;
|
96 |
|
97 |
//billing address, etc
|
@@ -109,7 +116,7 @@
|
|
109 |
$this->nvpStr = $nvpStr;
|
110 |
|
111 |
$this->httpParsedResponseAr = $this->PPHttpPost('A', $nvpStr);
|
112 |
-
|
113 |
if("0" == strtoupper($this->httpParsedResponseAr["RESULT"])) {
|
114 |
$order->authorization_id = $this->httpParsedResponseAr['PNREF'];
|
115 |
$order->updateStatus("authorized");
|
@@ -131,8 +138,8 @@
|
|
131 |
//paypal profile stuff
|
132 |
$nvpStr="&ORIGID=" . $authorization_id;
|
133 |
|
134 |
-
$this->httpParsedResponseAr = $this->PPHttpPost('
|
135 |
-
|
136 |
if("0" == strtoupper($this->httpParsedResponseAr["RESULT"])) {
|
137 |
return true;
|
138 |
} else {
|
@@ -159,7 +166,7 @@
|
|
159 |
|
160 |
//paypal profile stuff
|
161 |
$nvpStr = "";
|
162 |
-
$nvpStr .="&AMT=" . $amount . "&TAXAMT=" . $amount_tax
|
163 |
$nvpStr .= "&NOTIFYURL=" . urlencode(admin_url('admin-ajax.php') . "?action=ipnhandler");
|
164 |
//$nvpStr .= "&L_BILLINGTYPE0=RecurringPayments&L_BILLINGAGREEMENTDESCRIPTION0=" . $order->PaymentAmount;
|
165 |
|
@@ -179,7 +186,7 @@
|
|
179 |
$nvpStr .= "&CITY=" . $order->billing->city . "&STATE=" . $order->billing->state . "&BILLTOCOUNTRY=" . $order->billing->country . "&ZIP=" . $order->billing->zip . "&PHONENUM=" . $order->billing->phone;
|
180 |
}
|
181 |
|
182 |
-
$this->nvpStr = $nvpStr;
|
183 |
$this->httpParsedResponseAr = $this->PPHttpPost('S', $nvpStr);
|
184 |
|
185 |
if("0" == strtoupper($this->httpParsedResponseAr["RESULT"])) {
|
@@ -197,160 +204,14 @@
|
|
197 |
|
198 |
function subscribe(&$order)
|
199 |
{
|
200 |
-
|
201 |
-
|
202 |
-
if(empty($order->code))
|
203 |
-
$order->code = $order->getRandomCode();
|
204 |
-
|
205 |
-
//filter order before subscription. use with care.
|
206 |
-
$order = apply_filters("pmpro_subscribe_order", $order, $this);
|
207 |
-
|
208 |
-
//taxes on the amount
|
209 |
-
$amount = $order->PaymentAmount;
|
210 |
-
$amount_tax = $order->getTaxForPrice($amount);
|
211 |
-
$amount = round((float)$amount + (float)$amount_tax, 2);
|
212 |
-
|
213 |
-
if($order->BillingPeriod == "Week")
|
214 |
-
$payperiod = "WEEK";
|
215 |
-
elseif($order->BillingPeriod == "Month")
|
216 |
-
$payperiod = "MONT";
|
217 |
-
elseif($order->BillingPeriod == "Year")
|
218 |
-
$payperiod = "YEAR";
|
219 |
-
|
220 |
-
//paypal profile stuff
|
221 |
-
$nvpStr = "&ACTION=A";
|
222 |
-
$nvpStr .="&AMT=" . $amount . "&TAXAMT=" . $amount_tax . "&CURRENCY=" . $pmpro_currency;
|
223 |
-
$nvpStr .= "&NOTIFYURL=" . urlencode(admin_url('admin-ajax.php') . "?action=ipnhandler");
|
224 |
-
//$nvpStr .= "&L_BILLINGTYPE0=RecurringPayments&L_BILLINGAGREEMENTDESCRIPTION0=" . $order->PaymentAmount;
|
225 |
-
|
226 |
-
$nvpStr .= "&PROFILENAME=" . urlencode(substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127));
|
227 |
-
|
228 |
-
$nvpStr .= "&PAYPERIOD=" . $payperiod;
|
229 |
-
|
230 |
-
$nvpStr .= "&CUSTIP=" . $_SERVER['REMOTE_ADDR']; // . "&INVNUM=" . $order->code;
|
231 |
-
|
232 |
-
//if billing cycles are defined
|
233 |
-
if(!empty($order->TotalBillingCycles))
|
234 |
-
$nvpStr .= "&TERM=" . $order->TotalBillingCycles;
|
235 |
-
else
|
236 |
-
$nvpStr .= "&TERM=0";
|
237 |
-
|
238 |
-
if(!empty($order->accountnumber))
|
239 |
-
$nvpStr .= "&ACCT=" . $order->accountnumber . "&EXPDATE=" . $order->expirationmonth . substr($order->expirationyear, 2, 2) . "&CVV2=" . $order->CVV2;
|
240 |
-
|
241 |
-
/*
|
242 |
-
Let's figure out the start date. There are two parts.
|
243 |
-
1. We need to add the billing period to the start date to account for the initial payment.
|
244 |
-
2. We can allow for free trials by further delaying the start date of the subscription.
|
245 |
-
*/
|
246 |
-
if($order->BillingPeriod == "Year")
|
247 |
-
$trial_period_days = $order->BillingFrequency * 365; //annual
|
248 |
-
elseif($order->BillingPeriod == "Day")
|
249 |
-
$trial_period_days = $order->BillingFrequency * 1; //daily
|
250 |
-
elseif($order->BillingPeriod == "Week")
|
251 |
-
$trial_period_days = $order->BillingFrequency * 7; //weekly
|
252 |
-
else
|
253 |
-
$trial_period_days = $order->BillingFrequency * 30; //assume monthly
|
254 |
-
|
255 |
-
//convert to a profile start date
|
256 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $trial_period_days . " Day", current_time("timestamp"))) . "T0:0:0";
|
257 |
-
|
258 |
-
//filter the start date
|
259 |
-
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
260 |
-
|
261 |
-
//convert back to days
|
262 |
-
$trial_period_days = ceil(abs(strtotime(date("Y-m-d"), current_time('timestamp')) - strtotime($order->ProfileStartDate, current_time("timestamp"))) / 86400);
|
263 |
-
|
264 |
-
//now add the actual trial set by the site
|
265 |
-
if(!empty($order->TrialBillingCycles))
|
266 |
-
{
|
267 |
-
$trialOccurrences = (int)$order->TrialBillingCycles;
|
268 |
-
if($order->BillingPeriod == "Year")
|
269 |
-
$trial_period_days = $trial_period_days + (365 * $order->BillingFrequency * $trialOccurrences); //annual
|
270 |
-
elseif($order->BillingPeriod == "Day")
|
271 |
-
$trial_period_days = $trial_period_days + (1 * $order->BillingFrequency * $trialOccurrences); //daily
|
272 |
-
elseif($order->BillingPeriod == "Week")
|
273 |
-
$trial_period_days = $trial_period_days + (7 * $order->BillingFrequency * $trialOccurrences); //weekly
|
274 |
-
else
|
275 |
-
$trial_period_days = $trial_period_days + (30 * $order->BillingFrequency * $trialOccurrences); //assume monthly
|
276 |
-
}
|
277 |
-
|
278 |
-
//convert back into a date
|
279 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $trial_period_days . " Day", current_time("timestamp"))) . "T0:0:0";
|
280 |
-
|
281 |
-
//start date
|
282 |
-
$nvpStr .= "&START=" . date("mdY", strtotime($order->ProfileStartDate));
|
283 |
-
|
284 |
-
if(!empty($order->accountnumber))
|
285 |
-
$nvpStr .= "&ACCT=" . $order->accountnumber . "&EXPDATE=" . $order->expirationmonth . substr($order->expirationyear, 2, 2) . "&CVV2=" . $order->CVV2;
|
286 |
-
|
287 |
-
//billing address, etc
|
288 |
-
if($order->Address1)
|
289 |
-
{
|
290 |
-
$nvpStr .= "&EMAIL=" . $order->Email . "&FIRSTNAME=" . $order->FirstName . "&LASTNAME=" . $order->LastName . "&STREET=" . $order->Address1;
|
291 |
-
|
292 |
-
if($order->Address2)
|
293 |
-
$nvpStr .= " " . $order->Address2;
|
294 |
-
|
295 |
-
$nvpStr .= "&CITY=" . $order->billing->city . "&STATE=" . $order->billing->state . "&BILLTOCOUNTRY=" . $order->billing->country . "&ZIP=" . $order->billing->zip . "&PHONENUM=" . $order->billing->phone;
|
296 |
-
}
|
297 |
-
|
298 |
-
$this->nvpStr = $nvpStr;
|
299 |
-
$this->httpParsedResponseAr = $this->PPHttpPost('R', $nvpStr);
|
300 |
-
|
301 |
-
if("0" == strtoupper($this->httpParsedResponseAr["RESULT"])) {
|
302 |
-
$order->subscription_transaction_id = $this->httpParsedResponseAr['PROFILEID'];
|
303 |
-
$order->status = "success";
|
304 |
-
return true;
|
305 |
-
} else {
|
306 |
-
$order->status = "error";
|
307 |
-
$order->errorcode = $this->httpParsedResponseAr['RESULT'];
|
308 |
-
$order->error = urldecode($this->httpParsedResponseAr['RESPMSG']);
|
309 |
-
$order->shorterror = urldecode($this->httpParsedResponseAr['RESPMSG']);
|
310 |
-
return false;
|
311 |
-
}
|
312 |
}
|
313 |
|
314 |
function update(&$order)
|
315 |
{
|
316 |
-
$order->
|
317 |
-
|
318 |
-
//paypal profile stuff
|
319 |
-
$nvpStr = "&ORIGPROFILEID=" . $order->subscription_transaction_id . "&ACTION=M";
|
320 |
-
$nvpStr .= "&NOTIFYURL=" . urlencode(admin_url('admin-ajax.php') . "?action=ipnhandler");
|
321 |
-
|
322 |
-
$nvpStr .= "&PROFILENAME=" . urlencode(substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127));
|
323 |
-
|
324 |
-
$nvpStr .= "&CUSTIP=" . $_SERVER['REMOTE_ADDR']; // . "&INVNUM=" . $order->code;
|
325 |
-
|
326 |
-
if(!empty($order->accountnumber))
|
327 |
-
$nvpStr .= "&ACCT=" . $order->accountnumber . "&EXPDATE=" . $order->expirationmonth . substr($order->expirationyear, 2, 2) . "&CVV2=" . $order->CVV2;
|
328 |
-
|
329 |
-
//billing address, etc
|
330 |
-
if($order->Address1)
|
331 |
-
{
|
332 |
-
$nvpStr .= "&EMAIL=" . $order->Email . "&FIRSTNAME=" . $order->FirstName . "&LASTNAME=" . $order->LastName . "&STREET=" . $order->Address1;
|
333 |
-
|
334 |
-
if($order->Address2)
|
335 |
-
$nvpStr .= " " . $order->Address2;
|
336 |
-
|
337 |
-
$nvpStr .= "&CITY=" . $order->billing->city . "&STATE=" . $order->billing->state . "&BILLTOCOUNTRY=" . $order->billing->country . "&ZIP=" . $order->billing->zip . "&PHONENUM=" . $order->billing->phone;
|
338 |
-
}
|
339 |
-
|
340 |
-
$this->nvpStr = $nvpStr;
|
341 |
-
$this->httpParsedResponseAr = $this->PPHttpPost('R', $nvpStr);
|
342 |
-
|
343 |
-
if("0" == strtoupper($this->httpParsedResponseAr["RESULT"])) {
|
344 |
-
$order->subscription_transaction_id = $this->httpParsedResponseAr['PROFILEID'];
|
345 |
-
$order->updateStatus("success");
|
346 |
-
return true;
|
347 |
-
} else {
|
348 |
-
$order->status = "error";
|
349 |
-
$order->errorcode = $this->httpParsedResponseAr['RESULT'];
|
350 |
-
$order->error = urldecode($this->httpParsedResponseAr['RESPMSG']);
|
351 |
-
$order->shorterror = urldecode($this->httpParsedResponseAr['RESPMSG']);
|
352 |
-
return false;
|
353 |
-
}
|
354 |
}
|
355 |
|
356 |
function cancel(&$order)
|
@@ -359,25 +220,9 @@
|
|
359 |
if(empty($order->subscription_transaction_id))
|
360 |
return false;
|
361 |
|
362 |
-
//
|
363 |
-
$
|
364 |
-
|
365 |
-
$this->nvpStr = $nvpStr;
|
366 |
-
$this->httpParsedResponseAr = $this->PPHttpPost('R', $nvpStr);
|
367 |
-
|
368 |
-
if("0" == strtoupper($this->httpParsedResponseAr["RESULT"]))
|
369 |
-
{
|
370 |
-
$order->updateStatus("cancelled");
|
371 |
-
return true;
|
372 |
-
}
|
373 |
-
else
|
374 |
-
{
|
375 |
-
$order->status = "error";
|
376 |
-
$order->errorcode = $this->httpParsedResponseAr['RESULT'];
|
377 |
-
$order->error = urldecode($this->httpParsedResponseAr['RESPMSG']);
|
378 |
-
$order->shorterror = urldecode($this->httpParsedResponseAr['RESPMSG']);
|
379 |
-
return false;
|
380 |
-
}
|
381 |
}
|
382 |
|
383 |
/**
|
@@ -446,3 +291,4 @@
|
|
446 |
return $httpParsedResponseAr;
|
447 |
}
|
448 |
}
|
|
16 |
$authorization_id = $this->authorize($order);
|
17 |
if($authorization_id)
|
18 |
{
|
19 |
+
$this->void($order, $authorization_id);
|
20 |
+
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod)) . "T0:0:0";
|
21 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
22 |
return $this->subscribe($order);
|
23 |
}
|
24 |
else
|
25 |
{
|
26 |
if(empty($order->error))
|
27 |
+
$order->error = "Unknown error: Authorization failed.";
|
28 |
return false;
|
29 |
}
|
30 |
}
|
31 |
else
|
32 |
+
{
|
33 |
+
//let's return an error for recurring levels for now
|
34 |
+
if(pmpro_isLevelRecurring($order->membership_level))
|
35 |
+
{
|
36 |
+
$order->error = "Recurring payments with Payflow is not supported by Paid Memberships Pro at this time.";
|
37 |
+
return false;
|
38 |
+
}
|
39 |
+
|
40 |
//charge first payment
|
41 |
if($this->charge($order))
|
42 |
{
|
43 |
//setup recurring billing
|
44 |
if(pmpro_isLevelRecurring($order->membership_level))
|
45 |
{
|
46 |
+
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod)) . "T0:0:0";
|
47 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
48 |
if($this->subscribe($order))
|
49 |
{
|
54 |
if($this->void($order, $order->payment_transaction_id))
|
55 |
{
|
56 |
if(empty($order->error))
|
57 |
+
$order->error = "Unknown error: Payment failed.";
|
58 |
}
|
59 |
else
|
60 |
{
|
61 |
if(empty($order->error))
|
62 |
+
$order->error = "Unknown error: Payment failed.";
|
63 |
|
64 |
+
$order->error .= " A partial payment was made that we could not refund. Please contact the site owner immediately to correct this.";
|
65 |
}
|
66 |
|
67 |
return false;
|
98 |
else
|
99 |
$cardtype = $order->cardtype;
|
100 |
|
101 |
+
if(!empty($accountnumber))
|
102 |
$nvpStr .= "&ACCT=" . $order->accountnumber . "&EXPDATE=" . $order->expirationmonth . substr($order->expirationyear, 2, 2) . "&CVV2=" . $order->CVV2;
|
103 |
|
104 |
//billing address, etc
|
116 |
$this->nvpStr = $nvpStr;
|
117 |
|
118 |
$this->httpParsedResponseAr = $this->PPHttpPost('A', $nvpStr);
|
119 |
+
|
120 |
if("0" == strtoupper($this->httpParsedResponseAr["RESULT"])) {
|
121 |
$order->authorization_id = $this->httpParsedResponseAr['PNREF'];
|
122 |
$order->updateStatus("authorized");
|
138 |
//paypal profile stuff
|
139 |
$nvpStr="&ORIGID=" . $authorization_id;
|
140 |
|
141 |
+
$this->httpParsedResponseAr = $this->PPHttpPost('C', $nvpStr);
|
142 |
+
|
143 |
if("0" == strtoupper($this->httpParsedResponseAr["RESULT"])) {
|
144 |
return true;
|
145 |
} else {
|
166 |
|
167 |
//paypal profile stuff
|
168 |
$nvpStr = "";
|
169 |
+
$nvpStr .="&AMT=" . $amount . "&TAXAMT=" . $amount_tax;
|
170 |
$nvpStr .= "&NOTIFYURL=" . urlencode(admin_url('admin-ajax.php') . "?action=ipnhandler");
|
171 |
//$nvpStr .= "&L_BILLINGTYPE0=RecurringPayments&L_BILLINGAGREEMENTDESCRIPTION0=" . $order->PaymentAmount;
|
172 |
|
186 |
$nvpStr .= "&CITY=" . $order->billing->city . "&STATE=" . $order->billing->state . "&BILLTOCOUNTRY=" . $order->billing->country . "&ZIP=" . $order->billing->zip . "&PHONENUM=" . $order->billing->phone;
|
187 |
}
|
188 |
|
189 |
+
$this->nvpStr = $nvpStr;
|
190 |
$this->httpParsedResponseAr = $this->PPHttpPost('S', $nvpStr);
|
191 |
|
192 |
if("0" == strtoupper($this->httpParsedResponseAr["RESULT"])) {
|
204 |
|
205 |
function subscribe(&$order)
|
206 |
{
|
207 |
+
$order->error = "Recurring subscriptions with Payflow are not currently supported by Paid Memberships Pro";
|
208 |
+
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
209 |
}
|
210 |
|
211 |
function update(&$order)
|
212 |
{
|
213 |
+
$order->error = "Updated billing with Payflow is not currently supported by Paid Memberships Pro";
|
214 |
+
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
215 |
}
|
216 |
|
217 |
function cancel(&$order)
|
220 |
if(empty($order->subscription_transaction_id))
|
221 |
return false;
|
222 |
|
223 |
+
//simulate a successful cancel
|
224 |
+
$order->updateStatus("cancelled");
|
225 |
+
return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
}
|
227 |
|
228 |
/**
|
291 |
return $httpParsedResponseAr;
|
292 |
}
|
293 |
}
|
294 |
+
?>
|
classes/gateways/class.pmprogateway_paypal.php
CHANGED
@@ -17,14 +17,14 @@
|
|
17 |
if($authorization_id)
|
18 |
{
|
19 |
$this->void($order, $authorization_id);
|
20 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod
|
21 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
22 |
return $this->subscribe($order);
|
23 |
}
|
24 |
else
|
25 |
{
|
26 |
if(empty($order->error))
|
27 |
-
$order->error =
|
28 |
return false;
|
29 |
}
|
30 |
}
|
@@ -36,7 +36,7 @@
|
|
36 |
//setup recurring billing
|
37 |
if(pmpro_isLevelRecurring($order->membership_level))
|
38 |
{
|
39 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod
|
40 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
41 |
if($this->subscribe($order))
|
42 |
{
|
@@ -47,14 +47,14 @@
|
|
47 |
if($this->refund($order, $order->payment_transaction_id))
|
48 |
{
|
49 |
if(empty($order->error))
|
50 |
-
$order->error =
|
51 |
}
|
52 |
else
|
53 |
{
|
54 |
if(empty($order->error))
|
55 |
$order->error = "Unknown error: Payment failed.";
|
56 |
|
57 |
-
$order->error .= "
|
58 |
}
|
59 |
|
60 |
return false;
|
@@ -239,12 +239,10 @@
|
|
239 |
if(empty($order->code))
|
240 |
$order->code = $order->getRandomCode();
|
241 |
|
242 |
-
//filter order before subscription. use with care.
|
243 |
-
$order = apply_filters("pmpro_subscribe_order", $order, $this);
|
244 |
-
|
245 |
//taxes on the amount
|
246 |
$amount = $order->PaymentAmount;
|
247 |
-
$amount_tax = $order->getTaxForPrice($amount);
|
|
|
248 |
$amount = round((float)$amount + (float)$amount_tax, 2);
|
249 |
|
250 |
//paypal profile stuff
|
@@ -369,23 +367,21 @@
|
|
369 |
{
|
370 |
//paypal profile stuff
|
371 |
$nvpStr = "";
|
372 |
-
$nvpStr .= "&PROFILEID=" .
|
373 |
|
374 |
$this->httpParsedResponseAr = $this->PPHttpPost('ManageRecurringPaymentsProfileStatus', $nvpStr);
|
375 |
|
376 |
-
if("SUCCESS" == strtoupper($this->httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($this->httpParsedResponseAr["ACK"]))
|
377 |
-
{
|
378 |
$order->updateStatus("cancelled");
|
379 |
-
return true;
|
380 |
-
|
381 |
-
else
|
382 |
-
{
|
383 |
$order->status = "error";
|
384 |
$order->errorcode = $this->httpParsedResponseAr['L_ERRORCODE0'];
|
385 |
-
$order->error = urldecode($this->httpParsedResponseAr['L_LONGMESSAGE0'])
|
386 |
$order->shorterror = urldecode($this->httpParsedResponseAr['L_SHORTMESSAGE0']);
|
387 |
-
|
388 |
-
|
389 |
}
|
390 |
}
|
391 |
|
@@ -453,4 +449,5 @@
|
|
453 |
|
454 |
return $httpParsedResponseAr;
|
455 |
}
|
456 |
-
}
|
|
17 |
if($authorization_id)
|
18 |
{
|
19 |
$this->void($order, $authorization_id);
|
20 |
+
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod)) . "T0:0:0";
|
21 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
22 |
return $this->subscribe($order);
|
23 |
}
|
24 |
else
|
25 |
{
|
26 |
if(empty($order->error))
|
27 |
+
$order->error = "Unknown error: Authorization failed.";
|
28 |
return false;
|
29 |
}
|
30 |
}
|
36 |
//setup recurring billing
|
37 |
if(pmpro_isLevelRecurring($order->membership_level))
|
38 |
{
|
39 |
+
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod)) . "T0:0:0";
|
40 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
41 |
if($this->subscribe($order))
|
42 |
{
|
47 |
if($this->refund($order, $order->payment_transaction_id))
|
48 |
{
|
49 |
if(empty($order->error))
|
50 |
+
$order->error = "Unknown error: Payment failed.";
|
51 |
}
|
52 |
else
|
53 |
{
|
54 |
if(empty($order->error))
|
55 |
$order->error = "Unknown error: Payment failed.";
|
56 |
|
57 |
+
$order->error .= " A partial payment was made that we could not refund. Please contact the site owner immediately to correct this.";
|
58 |
}
|
59 |
|
60 |
return false;
|
239 |
if(empty($order->code))
|
240 |
$order->code = $order->getRandomCode();
|
241 |
|
|
|
|
|
|
|
242 |
//taxes on the amount
|
243 |
$amount = $order->PaymentAmount;
|
244 |
+
$amount_tax = $order->getTaxForPrice($amount);
|
245 |
+
$order->subtotal = $amount;
|
246 |
$amount = round((float)$amount + (float)$amount_tax, 2);
|
247 |
|
248 |
//paypal profile stuff
|
367 |
{
|
368 |
//paypal profile stuff
|
369 |
$nvpStr = "";
|
370 |
+
$nvpStr .= "&PROFILEID=" . $order->subscription_transaction_id . "&ACTION=Cancel&NOTE=User requested cancel.";
|
371 |
|
372 |
$this->httpParsedResponseAr = $this->PPHttpPost('ManageRecurringPaymentsProfileStatus', $nvpStr);
|
373 |
|
374 |
+
if("SUCCESS" == strtoupper($this->httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($this->httpParsedResponseAr["ACK"]) || $this->httpParsedResponseAr['L_ERRORCODE0'] == "11556") {
|
|
|
375 |
$order->updateStatus("cancelled");
|
376 |
+
return true;
|
377 |
+
//exit('CreateRecurringPaymentsProfile Completed Successfully: '.print_r($this->httpParsedResponseAr, true));
|
378 |
+
} else {
|
|
|
379 |
$order->status = "error";
|
380 |
$order->errorcode = $this->httpParsedResponseAr['L_ERRORCODE0'];
|
381 |
+
$order->error = urldecode($this->httpParsedResponseAr['L_LONGMESSAGE0']);
|
382 |
$order->shorterror = urldecode($this->httpParsedResponseAr['L_SHORTMESSAGE0']);
|
383 |
+
return false;
|
384 |
+
//exit('CreateRecurringPaymentsProfile failed: ' . print_r($httpParsedResponseAr, true));
|
385 |
}
|
386 |
}
|
387 |
|
449 |
|
450 |
return $httpParsedResponseAr;
|
451 |
}
|
452 |
+
}
|
453 |
+
?>
|
classes/gateways/class.pmprogateway_paypalexpress.php
CHANGED
@@ -9,10 +9,10 @@
|
|
9 |
}
|
10 |
|
11 |
function process(&$order)
|
12 |
-
{
|
13 |
if(pmpro_isLevelRecurring($order->membership_level))
|
14 |
{
|
15 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod
|
16 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
17 |
return $this->subscribe($order);
|
18 |
}
|
@@ -40,20 +40,17 @@
|
|
40 |
|
41 |
//taxes on the amount
|
42 |
$amount = $order->PaymentAmount;
|
43 |
-
$amount_tax = $order->getTaxForPrice($amount);
|
44 |
$order->subtotal = $amount;
|
45 |
$amount = round((float)$amount + (float)$amount_tax, 2);
|
46 |
|
47 |
//paypal profile stuff
|
48 |
$nvpStr = "";
|
49 |
-
$nvpStr .="&AMT=" . $initial_payment . "&CURRENCYCODE=" . $pmpro_currency;
|
50 |
-
|
51 |
-
$nvpStr .= "&PROFILESTARTDATE=" . $order->ProfileStartDate;
|
52 |
-
if(!empty($order->BillingFrequency))
|
53 |
-
$nvpStr .= "&BILLINGPERIOD=" . $order->BillingPeriod . "&BILLINGFREQUENCY=" . $order->BillingFrequency . "&AUTOBILLAMT=AddToNextBilling&L_BILLINGTYPE0=RecurringPayments";
|
54 |
$nvpStr .= "&DESC=" . urlencode(substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127));
|
55 |
-
$nvpStr .= "&NOTIFYURL=" . urlencode(admin_url('admin-ajax.php') . "?action=ipnhandler");
|
56 |
-
$nvpStr .= "&NOSHIPPING=1&L_BILLINGAGREEMENTDESCRIPTION0=" . urlencode(substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127)) . "&L_PAYMENTTYPE0=Any";
|
57 |
|
58 |
//if billing cycles are defined
|
59 |
if(!empty($order->TotalBillingCycles))
|
@@ -88,16 +85,7 @@
|
|
88 |
}
|
89 |
|
90 |
$nvpStr .= "&CANCELURL=" . urlencode(pmpro_url("levels"));
|
91 |
-
|
92 |
-
$account_optional = apply_filters('pmpro_paypal_account_optional', true);
|
93 |
-
if ($account_optional)
|
94 |
-
$nvpStr .= '&SOLUTIONTYPE=Sole&LANDINGPAGE=Billing';
|
95 |
-
|
96 |
-
$nvpStr = apply_filters("pmpro_set_express_checkout_nvpstr", $nvpStr, $order);
|
97 |
-
|
98 |
-
///echo str_replace("&", "&<br />", $nvpStr);
|
99 |
-
///exit;
|
100 |
-
|
101 |
$this->httpParsedResponseAr = $this->PPHttpPost('SetExpressCheckout', $nvpStr);
|
102 |
|
103 |
if("SUCCESS" == strtoupper($this->httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($this->httpParsedResponseAr["ACK"])) {
|
@@ -178,13 +166,10 @@
|
|
178 |
$nvpStr = "";
|
179 |
if(!empty($order->Token))
|
180 |
$nvpStr .= "&TOKEN=" . $order->Token;
|
181 |
-
$nvpStr .="&AMT=" . $amount . "&CURRENCYCODE=" . $pmpro_currency;
|
182 |
-
/*
|
183 |
if(!empty($amount_tax))
|
184 |
$nvpStr .= "&TAXAMT=" . $amount_tax;
|
185 |
-
|
186 |
-
if(!empty($order->BillingFrequency))
|
187 |
-
$nvpStr .= "&BILLINGPERIOD=" . $order->BillingPeriod . "&BILLINGFREQUENCY=" . $order->BillingFrequency . "&AUTOBILLAMT=AddToNextBilling";
|
188 |
$nvpStr .= "&DESC=" . urlencode(substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127));
|
189 |
$nvpStr .= "&NOTIFYURL=" . urlencode(admin_url('admin-ajax.php') . "?action=ipnhandler");
|
190 |
$nvpStr .= "&NOSHIPPING=1";
|
@@ -193,7 +178,7 @@
|
|
193 |
$order->nvpStr = $nvpStr;
|
194 |
|
195 |
$this->httpParsedResponseAr = $this->PPHttpPost('DoExpressCheckoutPayment', $nvpStr);
|
196 |
-
|
197 |
if("SUCCESS" == strtoupper($this->httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($this->httpParsedResponseAr["ACK"])) {
|
198 |
$order->payment_transaction_id = urldecode($this->httpParsedResponseAr['TRANSACTIONID']);
|
199 |
$order->status = "success";
|
@@ -218,10 +203,7 @@
|
|
218 |
|
219 |
if(empty($order->code))
|
220 |
$order->code = $order->getRandomCode();
|
221 |
-
|
222 |
-
//filter order before subscription. use with care.
|
223 |
-
$order = apply_filters("pmpro_subscribe_order", $order, $this);
|
224 |
-
|
225 |
//taxes on initial amount
|
226 |
$initial_payment = $order->InitialPayment;
|
227 |
$initial_payment_tax = $order->getTaxForPrice($initial_payment);
|
@@ -229,8 +211,9 @@
|
|
229 |
|
230 |
//taxes on the amount
|
231 |
$amount = $order->PaymentAmount;
|
232 |
-
$amount_tax = $order->getTaxForPrice($amount);
|
233 |
-
|
|
|
234 |
|
235 |
//paypal profile stuff
|
236 |
$nvpStr = "";
|
@@ -260,10 +243,7 @@
|
|
260 |
$nvpStr .= "&TRIALTOTALBILLINGCYCLES=" . $order->TrialBillingCycles;
|
261 |
|
262 |
$this->nvpStr = $nvpStr;
|
263 |
-
|
264 |
-
///echo str_replace("&", "&<br />", $nvpStr);
|
265 |
-
///exit;
|
266 |
-
|
267 |
$this->httpParsedResponseAr = $this->PPHttpPost('CreateRecurringPaymentsProfile', $nvpStr);
|
268 |
|
269 |
if("SUCCESS" == strtoupper($this->httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($this->httpParsedResponseAr["ACK"])) {
|
@@ -289,51 +269,23 @@
|
|
289 |
{
|
290 |
//paypal profile stuff
|
291 |
$nvpStr = "";
|
292 |
-
$nvpStr .= "&PROFILEID=" .
|
293 |
|
294 |
$this->httpParsedResponseAr = $this->PPHttpPost('ManageRecurringPaymentsProfileStatus', $nvpStr);
|
295 |
-
|
296 |
-
if("SUCCESS" == strtoupper($this->httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($this->httpParsedResponseAr["ACK"]))
|
297 |
-
{
|
298 |
$order->updateStatus("cancelled");
|
299 |
-
return true;
|
300 |
-
|
301 |
-
else
|
302 |
-
{
|
303 |
$order->status = "error";
|
304 |
$order->errorcode = $this->httpParsedResponseAr['L_ERRORCODE0'];
|
305 |
-
$order->error = urldecode($this->httpParsedResponseAr['L_LONGMESSAGE0'])
|
306 |
$order->shorterror = urldecode($this->httpParsedResponseAr['L_SHORTMESSAGE0']);
|
307 |
|
308 |
-
return false;
|
309 |
-
}
|
310 |
-
}
|
311 |
-
|
312 |
-
function getSubscriptionStatus(&$order)
|
313 |
-
{
|
314 |
-
if(empty($order->subscription_transaction_id))
|
315 |
return false;
|
316 |
-
|
317 |
-
//paypal profile stuff
|
318 |
-
$nvpStr = "";
|
319 |
-
$nvpStr .= "&PROFILEID=" . urlencode($order->subscription_transaction_id);
|
320 |
-
|
321 |
-
$this->httpParsedResponseAr = $this->PPHttpPost('GetRecurringPaymentsProfileDetails', $nvpStr);
|
322 |
-
|
323 |
-
if("SUCCESS" == strtoupper($this->httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($this->httpParsedResponseAr["ACK"]))
|
324 |
-
{
|
325 |
-
return $this->httpParsedResponseAr;
|
326 |
-
}
|
327 |
-
else
|
328 |
-
{
|
329 |
-
$order->status = "error";
|
330 |
-
$order->errorcode = $this->httpParsedResponseAr['L_ERRORCODE0'];
|
331 |
-
$order->error = urldecode($this->httpParsedResponseAr['L_LONGMESSAGE0']);
|
332 |
-
$order->shorterror = urldecode($this->httpParsedResponseAr['L_SHORTMESSAGE0']);
|
333 |
-
|
334 |
-
return false;
|
335 |
}
|
336 |
-
}
|
337 |
|
338 |
/**
|
339 |
* PAYPAL Function
|
@@ -400,3 +352,4 @@
|
|
400 |
return $httpParsedResponseAr;
|
401 |
}
|
402 |
}
|
|
9 |
}
|
10 |
|
11 |
function process(&$order)
|
12 |
+
{
|
13 |
if(pmpro_isLevelRecurring($order->membership_level))
|
14 |
{
|
15 |
+
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod)) . "T0:0:0";
|
16 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
17 |
return $this->subscribe($order);
|
18 |
}
|
40 |
|
41 |
//taxes on the amount
|
42 |
$amount = $order->PaymentAmount;
|
43 |
+
$amount_tax = $order->getTaxForPrice($amount);
|
44 |
$order->subtotal = $amount;
|
45 |
$amount = round((float)$amount + (float)$amount_tax, 2);
|
46 |
|
47 |
//paypal profile stuff
|
48 |
$nvpStr = "";
|
49 |
+
$nvpStr .="&AMT=" . $initial_payment . "&CURRENCYCODE=" . $pmpro_currency . "&PROFILESTARTDATE=" . $order->ProfileStartDate;
|
50 |
+
$nvpStr .= "&BILLINGPERIOD=" . $order->BillingPeriod . "&BILLINGFREQUENCY=" . $order->BillingFrequency . "&AUTOBILLAMT=AddToNextBilling";
|
|
|
|
|
|
|
51 |
$nvpStr .= "&DESC=" . urlencode(substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127));
|
52 |
+
$nvpStr .= "&NOTIFYURL=" . urlencode(admin_url('admin-ajax.php') . "?action=ipnhandler");
|
53 |
+
$nvpStr .= "&NOSHIPPING=1&L_BILLINGTYPE0=RecurringPayments&L_BILLINGAGREEMENTDESCRIPTION0=" . urlencode(substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127)) . "&L_PAYMENTTYPE0=Any";
|
54 |
|
55 |
//if billing cycles are defined
|
56 |
if(!empty($order->TotalBillingCycles))
|
85 |
}
|
86 |
|
87 |
$nvpStr .= "&CANCELURL=" . urlencode(pmpro_url("levels"));
|
88 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
$this->httpParsedResponseAr = $this->PPHttpPost('SetExpressCheckout', $nvpStr);
|
90 |
|
91 |
if("SUCCESS" == strtoupper($this->httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($this->httpParsedResponseAr["ACK"])) {
|
166 |
$nvpStr = "";
|
167 |
if(!empty($order->Token))
|
168 |
$nvpStr .= "&TOKEN=" . $order->Token;
|
169 |
+
$nvpStr .="&AMT=" . $amount . "&CURRENCYCODE=" . $pmpro_currency . "&PROFILESTARTDATE=" . $order->ProfileStartDate;
|
|
|
170 |
if(!empty($amount_tax))
|
171 |
$nvpStr .= "&TAXAMT=" . $amount_tax;
|
172 |
+
$nvpStr .= "&BILLINGPERIOD=" . $order->BillingPeriod . "&BILLINGFREQUENCY=" . $order->BillingFrequency . "&AUTOBILLAMT=AddToNextBilling";
|
|
|
|
|
173 |
$nvpStr .= "&DESC=" . urlencode(substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127));
|
174 |
$nvpStr .= "&NOTIFYURL=" . urlencode(admin_url('admin-ajax.php') . "?action=ipnhandler");
|
175 |
$nvpStr .= "&NOSHIPPING=1";
|
178 |
$order->nvpStr = $nvpStr;
|
179 |
|
180 |
$this->httpParsedResponseAr = $this->PPHttpPost('DoExpressCheckoutPayment', $nvpStr);
|
181 |
+
|
182 |
if("SUCCESS" == strtoupper($this->httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($this->httpParsedResponseAr["ACK"])) {
|
183 |
$order->payment_transaction_id = urldecode($this->httpParsedResponseAr['TRANSACTIONID']);
|
184 |
$order->status = "success";
|
203 |
|
204 |
if(empty($order->code))
|
205 |
$order->code = $order->getRandomCode();
|
206 |
+
|
|
|
|
|
|
|
207 |
//taxes on initial amount
|
208 |
$initial_payment = $order->InitialPayment;
|
209 |
$initial_payment_tax = $order->getTaxForPrice($initial_payment);
|
211 |
|
212 |
//taxes on the amount
|
213 |
$amount = $order->PaymentAmount;
|
214 |
+
$amount_tax = $order->getTaxForPrice($amount);
|
215 |
+
$order->subtotal = $amount;
|
216 |
+
$amount = round((float)$amount + (float)$amount_tax, 2);
|
217 |
|
218 |
//paypal profile stuff
|
219 |
$nvpStr = "";
|
243 |
$nvpStr .= "&TRIALTOTALBILLINGCYCLES=" . $order->TrialBillingCycles;
|
244 |
|
245 |
$this->nvpStr = $nvpStr;
|
246 |
+
|
|
|
|
|
|
|
247 |
$this->httpParsedResponseAr = $this->PPHttpPost('CreateRecurringPaymentsProfile', $nvpStr);
|
248 |
|
249 |
if("SUCCESS" == strtoupper($this->httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($this->httpParsedResponseAr["ACK"])) {
|
269 |
{
|
270 |
//paypal profile stuff
|
271 |
$nvpStr = "";
|
272 |
+
$nvpStr .= "&PROFILEID=" . $order->subscription_transaction_id . "&ACTION=Cancel&NOTE=User requested cancel.";
|
273 |
|
274 |
$this->httpParsedResponseAr = $this->PPHttpPost('ManageRecurringPaymentsProfileStatus', $nvpStr);
|
275 |
+
if("SUCCESS" == strtoupper($this->httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($this->httpParsedResponseAr["ACK"]) || $this->httpParsedResponseAr['L_ERRORCODE0'] == "11556") {
|
|
|
|
|
276 |
$order->updateStatus("cancelled");
|
277 |
+
return true;
|
278 |
+
//exit('CreateRecurringPaymentsProfile Completed Successfully: '.print_r($this->httpParsedResponseAr, true));
|
279 |
+
} else {
|
|
|
280 |
$order->status = "error";
|
281 |
$order->errorcode = $this->httpParsedResponseAr['L_ERRORCODE0'];
|
282 |
+
$order->error = urldecode($this->httpParsedResponseAr['L_LONGMESSAGE0']);
|
283 |
$order->shorterror = urldecode($this->httpParsedResponseAr['L_SHORTMESSAGE0']);
|
284 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
285 |
return false;
|
286 |
+
//exit('CreateRecurringPaymentsProfile failed: ' . print_r($httpParsedResponseAr, true));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
287 |
}
|
288 |
+
}
|
289 |
|
290 |
/**
|
291 |
* PAYPAL Function
|
352 |
return $httpParsedResponseAr;
|
353 |
}
|
354 |
}
|
355 |
+
?>
|
classes/gateways/class.pmprogateway_paypalstandard.php
CHANGED
@@ -69,7 +69,7 @@
|
|
69 |
$paypal_args = array(
|
70 |
'cmd' => '_xclick-subscriptions',
|
71 |
'a1' => number_format($initial_payment, 2),
|
72 |
-
'p1' =>
|
73 |
't1' => $period,
|
74 |
'a3' => number_format($amount, 2),
|
75 |
'p3' => $order->BillingFrequency,
|
@@ -114,13 +114,13 @@
|
|
114 |
else
|
115 |
{
|
116 |
//we can try to work in any change in ProfileStartDate
|
117 |
-
$psd = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod
|
118 |
$adjusted_psd = apply_filters("pmpro_profile_start_date", $psd, $order);
|
119 |
if($psd != $adjusted_psd)
|
120 |
{
|
121 |
//someone is trying to push the start date back
|
122 |
-
$adjusted_psd_time = strtotime($adjusted_psd
|
123 |
-
$seconds_til_psd = $adjusted_psd_time -
|
124 |
$days_til_psd = floor($seconds_til_psd/(60*60*24));
|
125 |
|
126 |
//push back trial one by days_til_psd
|
@@ -144,20 +144,9 @@
|
|
144 |
if(!empty($order->TotalBillingCycles))
|
145 |
{
|
146 |
if(!empty($trial_amount))
|
147 |
-
|
148 |
-
|
149 |
-
$srt = intval($order->TotalBillingCycles) - 1; //subtract one for the trial period
|
150 |
-
}
|
151 |
-
else
|
152 |
-
{
|
153 |
-
$srt = intval($order->TotalBillingCycles);
|
154 |
-
}
|
155 |
-
|
156 |
-
//srt must be at least 2 or the subscription is not "recurring" according to paypal
|
157 |
-
if($srt > 1)
|
158 |
-
$paypal_args['srt'] = $srt;
|
159 |
else
|
160 |
-
$paypal_args['
|
161 |
}
|
162 |
else
|
163 |
$paypal_args['srt'] = '0'; //indefinite subscription
|
@@ -195,17 +184,11 @@
|
|
195 |
foreach($additional_parameters as $key => $value)
|
196 |
$nvpStr .= urlencode("&" . $key . "=" . $value);
|
197 |
}
|
198 |
-
|
199 |
-
$account_optional = apply_filters('pmpro_paypal_account_optional', true);
|
200 |
-
if ($account_optional)
|
201 |
-
$nvpStr .= '&SOLUTIONTYPE=Sole&LANDINGPAGE=Billing';
|
202 |
|
203 |
-
$nvpStr = apply_filters("pmpro_paypal_standard_nvpstr", $nvpStr, $order);
|
204 |
-
|
205 |
//redirect to paypal
|
206 |
$paypal_url .= $nvpStr;
|
207 |
|
208 |
-
//
|
209 |
|
210 |
wp_redirect($paypal_url);
|
211 |
exit;
|
@@ -215,23 +198,21 @@
|
|
215 |
{
|
216 |
//paypal profile stuff
|
217 |
$nvpStr = "";
|
218 |
-
$nvpStr .= "&PROFILEID=" .
|
219 |
|
220 |
$this->httpParsedResponseAr = $this->PPHttpPost('ManageRecurringPaymentsProfileStatus', $nvpStr);
|
221 |
-
|
222 |
-
if("SUCCESS" == strtoupper($this->httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($this->httpParsedResponseAr["ACK"]))
|
223 |
-
{
|
224 |
$order->updateStatus("cancelled");
|
225 |
-
return true;
|
226 |
-
|
227 |
-
else
|
228 |
-
{
|
229 |
$order->status = "error";
|
230 |
$order->errorcode = $this->httpParsedResponseAr['L_ERRORCODE0'];
|
231 |
-
$order->error = urldecode($this->httpParsedResponseAr['L_LONGMESSAGE0'])
|
232 |
$order->shorterror = urldecode($this->httpParsedResponseAr['L_SHORTMESSAGE0']);
|
233 |
|
234 |
-
return false;
|
|
|
235 |
}
|
236 |
}
|
237 |
|
@@ -271,7 +252,7 @@
|
|
271 |
|
272 |
// NVPRequest for submitting to server
|
273 |
$nvpreq = "METHOD=$methodName_&VERSION=$version&PWD=$API_Password&USER=$API_UserName&SIGNATURE=$API_Signature$nvpStr_";
|
274 |
-
|
275 |
// setting the nvpreq as POST FIELD to curl
|
276 |
curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
|
277 |
|
@@ -300,3 +281,4 @@
|
|
300 |
return $httpParsedResponseAr;
|
301 |
}
|
302 |
}
|
|
69 |
$paypal_args = array(
|
70 |
'cmd' => '_xclick-subscriptions',
|
71 |
'a1' => number_format($initial_payment, 2),
|
72 |
+
'p1' => '1',
|
73 |
't1' => $period,
|
74 |
'a3' => number_format($amount, 2),
|
75 |
'p3' => $order->BillingFrequency,
|
114 |
else
|
115 |
{
|
116 |
//we can try to work in any change in ProfileStartDate
|
117 |
+
$psd = date("Y-m-d", strtotime("+ " . $order->BillingFrequency . " " . $order->BillingPeriod)) . "T0:0:0";
|
118 |
$adjusted_psd = apply_filters("pmpro_profile_start_date", $psd, $order);
|
119 |
if($psd != $adjusted_psd)
|
120 |
{
|
121 |
//someone is trying to push the start date back
|
122 |
+
$adjusted_psd_time = strtotime($adjusted_psd);
|
123 |
+
$seconds_til_psd = $adjusted_psd_time - time();
|
124 |
$days_til_psd = floor($seconds_til_psd/(60*60*24));
|
125 |
|
126 |
//push back trial one by days_til_psd
|
144 |
if(!empty($order->TotalBillingCycles))
|
145 |
{
|
146 |
if(!empty($trial_amount))
|
147 |
+
$paypal_args['srt'] = intval($order->TotalBillingCycles) - 1; //subtract 1 for the trial period
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
else
|
149 |
+
$paypal_args['srt'] = intval($order->TotalBillingCycles);
|
150 |
}
|
151 |
else
|
152 |
$paypal_args['srt'] = '0'; //indefinite subscription
|
184 |
foreach($additional_parameters as $key => $value)
|
185 |
$nvpStr .= urlencode("&" . $key . "=" . $value);
|
186 |
}
|
|
|
|
|
|
|
|
|
187 |
|
|
|
|
|
188 |
//redirect to paypal
|
189 |
$paypal_url .= $nvpStr;
|
190 |
|
191 |
+
//die($paypal_url);
|
192 |
|
193 |
wp_redirect($paypal_url);
|
194 |
exit;
|
198 |
{
|
199 |
//paypal profile stuff
|
200 |
$nvpStr = "";
|
201 |
+
$nvpStr .= "&PROFILEID=" . $order->subscription_transaction_id . "&ACTION=Cancel&NOTE=User requested cancel.";
|
202 |
|
203 |
$this->httpParsedResponseAr = $this->PPHttpPost('ManageRecurringPaymentsProfileStatus', $nvpStr);
|
204 |
+
if("SUCCESS" == strtoupper($this->httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($this->httpParsedResponseAr["ACK"]) || $this->httpParsedResponseAr['L_ERRORCODE0'] == "11556") {
|
|
|
|
|
205 |
$order->updateStatus("cancelled");
|
206 |
+
return true;
|
207 |
+
//exit('CreateRecurringPaymentsProfile Completed Successfully: '.print_r($this->httpParsedResponseAr, true));
|
208 |
+
} else {
|
|
|
209 |
$order->status = "error";
|
210 |
$order->errorcode = $this->httpParsedResponseAr['L_ERRORCODE0'];
|
211 |
+
$order->error = urldecode($this->httpParsedResponseAr['L_LONGMESSAGE0']);
|
212 |
$order->shorterror = urldecode($this->httpParsedResponseAr['L_SHORTMESSAGE0']);
|
213 |
|
214 |
+
return false;
|
215 |
+
//exit('CreateRecurringPaymentsProfile failed: ' . print_r($httpParsedResponseAr, true));
|
216 |
}
|
217 |
}
|
218 |
|
252 |
|
253 |
// NVPRequest for submitting to server
|
254 |
$nvpreq = "METHOD=$methodName_&VERSION=$version&PWD=$API_Password&USER=$API_UserName&SIGNATURE=$API_Signature$nvpStr_";
|
255 |
+
|
256 |
// setting the nvpreq as POST FIELD to curl
|
257 |
curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
|
258 |
|
281 |
return $httpParsedResponseAr;
|
282 |
}
|
283 |
}
|
284 |
+
?>
|
classes/gateways/class.pmprogateway_stripe.php
CHANGED
@@ -50,7 +50,7 @@
|
|
50 |
else
|
51 |
{
|
52 |
if(empty($order->error))
|
53 |
-
$order->error =
|
54 |
return false;
|
55 |
}
|
56 |
}
|
@@ -58,8 +58,6 @@
|
|
58 |
|
59 |
function charge(&$order)
|
60 |
{
|
61 |
-
global $pmpro_currency;
|
62 |
-
|
63 |
//create a code for the order
|
64 |
if(empty($order->code))
|
65 |
$order->code = $order->getRandomCode();
|
@@ -85,7 +83,7 @@
|
|
85 |
{
|
86 |
$response = Stripe_Charge::create(array(
|
87 |
"amount" => $amount * 100, # amount in cents, again
|
88 |
-
"currency" =>
|
89 |
"customer" => $this->customer->id,
|
90 |
"description" => "Order #" . $order->code . ", " . trim($order->FirstName . " " . $order->LastName) . " (" . $order->Email . ")"
|
91 |
)
|
@@ -164,21 +162,13 @@
|
|
164 |
//update the customer description and card
|
165 |
if(!empty($order->stripeToken))
|
166 |
{
|
167 |
-
$
|
168 |
-
|
169 |
-
if (empty($name))
|
170 |
-
{
|
171 |
-
$name = trim($current_user->first_name . " " . $current_user->last_name);
|
172 |
-
}
|
173 |
-
|
174 |
-
$this->customer->description = $name . " (" . $order->Email . ")";
|
175 |
-
$this->customer->email = $order->Email;
|
176 |
$this->customer->card = $order->stripeToken;
|
177 |
$this->customer->save();
|
178 |
}
|
179 |
|
180 |
return $this->customer;
|
181 |
-
}
|
182 |
catch (Exception $e)
|
183 |
{
|
184 |
//assume no customer found
|
@@ -192,36 +182,19 @@
|
|
192 |
{
|
193 |
$this->customer = Stripe_Customer::create(array(
|
194 |
"description" => trim($order->FirstName . " " . $order->LastName) . " (" . $order->Email . ")",
|
195 |
-
"email" => $order->Email,
|
196 |
"card" => $order->stripeToken
|
197 |
));
|
198 |
}
|
199 |
catch (Exception $e)
|
200 |
{
|
201 |
-
$order->error =
|
202 |
$order->shorterror = $order->error;
|
203 |
return false;
|
204 |
}
|
205 |
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
update_user_meta($user_id, "pmpro_stripe_customerid", $this->customer->id);
|
210 |
-
}
|
211 |
-
else
|
212 |
-
{
|
213 |
-
//user not registered yet, queue it up
|
214 |
-
global $pmpro_stripe_customer_id;
|
215 |
-
$pmpro_stripe_customer_id = $this->customer->id;
|
216 |
-
function pmpro_user_register_stripe_customerid($user_id)
|
217 |
-
{
|
218 |
-
global $pmpro_stripe_customer_id;
|
219 |
-
update_user_meta($user_id, "pmpro_stripe_customerid", $pmpro_stripe_customer_id);
|
220 |
-
}
|
221 |
-
add_action("user_register", "pmpro_user_register_stripe_customerid");
|
222 |
-
}
|
223 |
-
|
224 |
-
return apply_filters('pmpro_stripe_create_customer', $this->customer);
|
225 |
}
|
226 |
|
227 |
return false;
|
@@ -229,15 +202,10 @@
|
|
229 |
|
230 |
function subscribe(&$order)
|
231 |
{
|
232 |
-
global $pmpro_currency;
|
233 |
-
|
234 |
//create a code for the order
|
235 |
if(empty($order->code))
|
236 |
$order->code = $order->getRandomCode();
|
237 |
|
238 |
-
//filter order before subscription. use with care.
|
239 |
-
$order = apply_filters("pmpro_subscribe_order", $order, $this);
|
240 |
-
|
241 |
//setup customer
|
242 |
$this->getCustomer($order);
|
243 |
if(empty($this->customer))
|
@@ -245,7 +213,8 @@
|
|
245 |
|
246 |
//figure out the amounts
|
247 |
$amount = $order->PaymentAmount;
|
248 |
-
$amount_tax = $order->getTaxForPrice($amount);
|
|
|
249 |
$amount = round((float)$amount + (float)$amount_tax, 2);
|
250 |
|
251 |
/*
|
@@ -266,13 +235,13 @@
|
|
266 |
$trial_period_days = $order->BillingFrequency * 30; //assume monthly
|
267 |
|
268 |
//convert to a profile start date
|
269 |
-
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $trial_period_days . " Day"
|
270 |
|
271 |
//filter the start date
|
272 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
273 |
|
274 |
//convert back to days
|
275 |
-
$trial_period_days = ceil(abs(strtotime(date("Y-m-d")
|
276 |
|
277 |
//now add the actual trial set by the site
|
278 |
if(!empty($order->TrialBillingCycles))
|
@@ -290,22 +259,20 @@
|
|
290 |
|
291 |
//create a plan
|
292 |
try
|
293 |
-
{
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
$plan = Stripe_Plan::create(apply_filters('pmpro_stripe_create_plan_array', $plan));
|
305 |
}
|
306 |
catch (Exception $e)
|
307 |
{
|
308 |
-
$order->error =
|
309 |
$order->shorterror = $order->error;
|
310 |
return false;
|
311 |
}
|
@@ -321,7 +288,7 @@
|
|
321 |
$plan->delete();
|
322 |
|
323 |
//return error
|
324 |
-
$order->error =
|
325 |
$order->shorterror = $order->error;
|
326 |
return false;
|
327 |
}
|
@@ -353,55 +320,37 @@
|
|
353 |
|
354 |
function cancel(&$order)
|
355 |
{
|
356 |
-
//no matter what happens below, we're going to cancel the order in our system
|
357 |
-
$order->updateStatus("cancelled");
|
358 |
-
|
359 |
//require a subscription id
|
360 |
if(empty($order->subscription_transaction_id))
|
361 |
return false;
|
362 |
|
363 |
//find the customer
|
364 |
-
$this->getCustomer($order);
|
365 |
|
366 |
if(!empty($this->customer))
|
367 |
{
|
368 |
-
//
|
369 |
-
|
370 |
-
|
371 |
-
|
|
|
|
|
372 |
{
|
373 |
-
//
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
{
|
379 |
-
if($sub->data[0]->plan->id == $order->code)
|
380 |
-
{
|
381 |
-
//found it, cancel it
|
382 |
-
try
|
383 |
-
{
|
384 |
-
$this->customer->subscriptions->retrieve($sub->data[0]->id)->cancel();
|
385 |
-
break;
|
386 |
-
}
|
387 |
-
catch(Exception $e)
|
388 |
-
{
|
389 |
-
$order->error = __("Could not cancel old subscription.", "pmpro");
|
390 |
-
$order->shorterror = $order->error;
|
391 |
-
|
392 |
-
return false;
|
393 |
-
}
|
394 |
-
}
|
395 |
-
}
|
396 |
-
}
|
397 |
|
|
|
398 |
return true;
|
399 |
}
|
400 |
else
|
401 |
{
|
402 |
-
$order->error =
|
403 |
$order->shorterror = $order->error;
|
404 |
return false; //no customer found
|
405 |
}
|
406 |
}
|
407 |
-
}
|
|
50 |
else
|
51 |
{
|
52 |
if(empty($order->error))
|
53 |
+
$order->error = "Unknown error: Initial payment failed.";
|
54 |
return false;
|
55 |
}
|
56 |
}
|
58 |
|
59 |
function charge(&$order)
|
60 |
{
|
|
|
|
|
61 |
//create a code for the order
|
62 |
if(empty($order->code))
|
63 |
$order->code = $order->getRandomCode();
|
83 |
{
|
84 |
$response = Stripe_Charge::create(array(
|
85 |
"amount" => $amount * 100, # amount in cents, again
|
86 |
+
"currency" => strtolower(pmpro_getOption("currency")),
|
87 |
"customer" => $this->customer->id,
|
88 |
"description" => "Order #" . $order->code . ", " . trim($order->FirstName . " " . $order->LastName) . " (" . $order->Email . ")"
|
89 |
)
|
162 |
//update the customer description and card
|
163 |
if(!empty($order->stripeToken))
|
164 |
{
|
165 |
+
$this->customer->description = trim($order->FirstName . " " . $order->LastName) . " (" . $order->Email . ")";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
166 |
$this->customer->card = $order->stripeToken;
|
167 |
$this->customer->save();
|
168 |
}
|
169 |
|
170 |
return $this->customer;
|
171 |
+
}
|
172 |
catch (Exception $e)
|
173 |
{
|
174 |
//assume no customer found
|
182 |
{
|
183 |
$this->customer = Stripe_Customer::create(array(
|
184 |
"description" => trim($order->FirstName . " " . $order->LastName) . " (" . $order->Email . ")",
|
|
|
185 |
"card" => $order->stripeToken
|
186 |
));
|
187 |
}
|
188 |
catch (Exception $e)
|
189 |
{
|
190 |
+
$order->error = "Error creating customer record with Stripe: " . $e->getMessage();
|
191 |
$order->shorterror = $order->error;
|
192 |
return false;
|
193 |
}
|
194 |
|
195 |
+
update_user_meta($user_id, "pmpro_stripe_customerid", $customer->id);
|
196 |
+
|
197 |
+
return $this->customer;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
}
|
199 |
|
200 |
return false;
|
202 |
|
203 |
function subscribe(&$order)
|
204 |
{
|
|
|
|
|
205 |
//create a code for the order
|
206 |
if(empty($order->code))
|
207 |
$order->code = $order->getRandomCode();
|
208 |
|
|
|
|
|
|
|
209 |
//setup customer
|
210 |
$this->getCustomer($order);
|
211 |
if(empty($this->customer))
|
213 |
|
214 |
//figure out the amounts
|
215 |
$amount = $order->PaymentAmount;
|
216 |
+
$amount_tax = $order->getTaxForPrice($amount);
|
217 |
+
$order->subtotal = $amount;
|
218 |
$amount = round((float)$amount + (float)$amount_tax, 2);
|
219 |
|
220 |
/*
|
235 |
$trial_period_days = $order->BillingFrequency * 30; //assume monthly
|
236 |
|
237 |
//convert to a profile start date
|
238 |
+
$order->ProfileStartDate = date("Y-m-d", strtotime("+ " . $trial_period_days . " Day")) . "T0:0:0";
|
239 |
|
240 |
//filter the start date
|
241 |
$order->ProfileStartDate = apply_filters("pmpro_profile_start_date", $order->ProfileStartDate, $order);
|
242 |
|
243 |
//convert back to days
|
244 |
+
$trial_period_days = ceil(abs(strtotime(date("Y-m-d")) - strtotime($order->ProfileStartDate)) / 86400);
|
245 |
|
246 |
//now add the actual trial set by the site
|
247 |
if(!empty($order->TrialBillingCycles))
|
259 |
|
260 |
//create a plan
|
261 |
try
|
262 |
+
{
|
263 |
+
$plan = Stripe_Plan::create(array(
|
264 |
+
"amount" => $amount * 100,
|
265 |
+
"interval_count" => $order->BillingFrequency,
|
266 |
+
"interval" => strtolower($order->BillingPeriod),
|
267 |
+
"trial_period_days" => $trial_period_days,
|
268 |
+
"name" => $order->membership_name . " for order " . $order->code,
|
269 |
+
"currency" => strtolower(pmpro_getOption("currency")),
|
270 |
+
"id" => $order->code)
|
271 |
+
);
|
|
|
|
|
272 |
}
|
273 |
catch (Exception $e)
|
274 |
{
|
275 |
+
$order->error = "Error creating plan with Stripe:" . $e->getMessage();
|
276 |
$order->shorterror = $order->error;
|
277 |
return false;
|
278 |
}
|
288 |
$plan->delete();
|
289 |
|
290 |
//return error
|
291 |
+
$order->error = "Error subscribing customer to plan with Stripe:" . $e->getMessage();
|
292 |
$order->shorterror = $order->error;
|
293 |
return false;
|
294 |
}
|
320 |
|
321 |
function cancel(&$order)
|
322 |
{
|
|
|
|
|
|
|
323 |
//require a subscription id
|
324 |
if(empty($order->subscription_transaction_id))
|
325 |
return false;
|
326 |
|
327 |
//find the customer
|
328 |
+
$this->getCustomer($order);
|
329 |
|
330 |
if(!empty($this->customer))
|
331 |
{
|
332 |
+
//cancel
|
333 |
+
try
|
334 |
+
{
|
335 |
+
$this->customer->cancelSubscription();
|
336 |
+
}
|
337 |
+
catch(Exception $e)
|
338 |
{
|
339 |
+
$order->updateStatus("cancelled"); //assume it's been cancelled already
|
340 |
+
$order->error = "Could not find the subscription.";
|
341 |
+
$order->shorterror = $order->error;
|
342 |
+
return false; //no subscription found
|
343 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
344 |
|
345 |
+
$order->updateStatus("cancelled");
|
346 |
return true;
|
347 |
}
|
348 |
else
|
349 |
{
|
350 |
+
$order->error = "Could not find the subscription.";
|
351 |
$order->shorterror = $order->error;
|
352 |
return false; //no customer found
|
353 |
}
|
354 |
}
|
355 |
+
}
|
356 |
+
?>
|
classes/gateways/class.pmprogateway_twocheckout.php
DELETED
@@ -1,145 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
require_once(dirname(__FILE__) . "/class.pmprogateway.php");
|
3 |
-
if(!class_exists("Twocheckout"))
|
4 |
-
require_once(dirname(__FILE__) . "/../../includes/lib/Twocheckout/Twocheckout.php");
|
5 |
-
class PMProGateway_Twocheckout
|
6 |
-
{
|
7 |
-
function PMProGateway_Twocheckout($gateway = NULL)
|
8 |
-
{
|
9 |
-
$this->gateway = $gateway;
|
10 |
-
return $this->gateway;
|
11 |
-
}
|
12 |
-
|
13 |
-
function process(&$order)
|
14 |
-
{
|
15 |
-
if(empty($order->code))
|
16 |
-
$order->code = $order->getRandomCode();
|
17 |
-
|
18 |
-
//clean up a couple values
|
19 |
-
$order->payment_type = "2CheckOut";
|
20 |
-
$order->CardType = "";
|
21 |
-
$order->cardtype = "";
|
22 |
-
|
23 |
-
//just save, the user will go to 2checkout to pay
|
24 |
-
$order->status = "review";
|
25 |
-
$order->saveOrder();
|
26 |
-
|
27 |
-
return true;
|
28 |
-
}
|
29 |
-
|
30 |
-
function sendToTwocheckout(&$order)
|
31 |
-
{
|
32 |
-
global $pmpro_currency;
|
33 |
-
// Set up credentials
|
34 |
-
Twocheckout::setCredentials( pmpro_getOption("twocheckout_apiusername"), pmpro_getOption("twocheckout_apipassword") );
|
35 |
-
|
36 |
-
$tco_args = array(
|
37 |
-
'sid' => pmpro_getOption("twocheckout_accountnumber"),
|
38 |
-
'mode' => '2CO', // will always be 2CO according to docs (@see https://www.2checkout.com/documentation/checkout/parameter-sets/pass-through-products/)
|
39 |
-
'li_0_type' => 'product',
|
40 |
-
'li_0_name' => substr($order->membership_level->name . " at " . get_bloginfo("name"), 0, 127),
|
41 |
-
'li_0_quantity' => 1,
|
42 |
-
'li_0_tangible' => 'N',
|
43 |
-
'li_0_product_id' => $order->code,
|
44 |
-
'merchant_order_id' => $order->code,
|
45 |
-
'currency_code' => $pmpro_currency,
|
46 |
-
'pay_method' => 'CC',
|
47 |
-
'purchase_step' => 'billing-information',
|
48 |
-
'x_receipt_link_url' => admin_url("admin-ajax.php") . "?action=twocheckout-ins" //pmpro_url("confirmation", "?level=" . $order->membership_level->id)
|
49 |
-
);
|
50 |
-
|
51 |
-
//taxes on initial amount
|
52 |
-
$initial_payment = $order->InitialPayment;
|
53 |
-
$initial_payment_tax = $order->getTaxForPrice($initial_payment);
|
54 |
-
$initial_payment = round((float)$initial_payment + (float)$initial_payment_tax, 2);
|
55 |
-
|
56 |
-
//taxes on the amount (NOT CURRENTLY USED)
|
57 |
-
$amount = $order->PaymentAmount;
|
58 |
-
$amount_tax = $order->getTaxForPrice($amount);
|
59 |
-
$order->subtotal = $amount;
|
60 |
-
$amount = round((float)$amount + (float)$amount_tax, 2);
|
61 |
-
|
62 |
-
// Recurring membership
|
63 |
-
if( pmpro_isLevelRecurring( $order->membership_level ) ) {
|
64 |
-
$tco_args['li_0_startup_fee'] = number_format($initial_payment - $amount, 2); //negative amount for lower initial payments
|
65 |
-
$recurring_payment = $order->membership_level->billing_amount;
|
66 |
-
$recurring_payment_tax = $order->getTaxForPrice($recurring_payment);
|
67 |
-
$recurring_payment = round((float)$recurring_payment + (float)$recurring_payment_tax, 2);
|
68 |
-
$tco_args['li_0_price'] = number_format($recurring_payment, 2);
|
69 |
-
|
70 |
-
$tco_args['li_0_recurrence'] = ( $order->BillingFrequency == 1 ) ? $order->BillingFrequency . ' ' . $order->BillingPeriod : $order->BillingFrequency . ' ' . $order->BillingPeriod . 's';
|
71 |
-
|
72 |
-
if( property_exists( $order, 'TotalBillingCycles' ) )
|
73 |
-
$tco_args['li_0_duration'] = ($order->BillingFrequency * $order->TotalBillingCycles ) . ' ' . $order->BillingPeriod;
|
74 |
-
else
|
75 |
-
$tco_args['li_0_duration'] = 'Forever';
|
76 |
-
}
|
77 |
-
// Non-recurring membership
|
78 |
-
else {
|
79 |
-
$tco_args['li_0_price'] = $initial_payment;
|
80 |
-
}
|
81 |
-
|
82 |
-
// Demo mode?
|
83 |
-
$environment = pmpro_getOption("gateway_environment");
|
84 |
-
if("sandbox" === $environment || "beta-sandbox" === $environment)
|
85 |
-
$tco_args['demo'] = 'Y';
|
86 |
-
|
87 |
-
// Trial?
|
88 |
-
//li_#_startup_fee Any start up fees for the product or service. Can be negative to provide discounted first installment pricing, but cannot equal or surpass the product price.
|
89 |
-
if(!empty($order->TrialBillingPeriod)) {
|
90 |
-
$trial_amount = $order->TrialAmount;
|
91 |
-
$trial_tax = $order->getTaxForPrice($trial_amount);
|
92 |
-
$trial_amount = round((float)$trial_amount + (float)$trial_tax, 2);
|
93 |
-
$tco_args['li_0_startup_fee'] = $trial_amount; // Negative trial amount
|
94 |
-
}
|
95 |
-
|
96 |
-
$ptpStr = '';
|
97 |
-
foreach( $tco_args as $key => $value ) {
|
98 |
-
reset( $tco_args ); // Used to verify whether or not we're on the first argument
|
99 |
-
$ptpStr .= ( $key == key($tco_args) ) ? '?' . $key . '=' . urlencode( $value ) : '&' . $key . '=' . urlencode( $value );
|
100 |
-
}
|
101 |
-
|
102 |
-
//anything modders might add
|
103 |
-
$additional_parameters = apply_filters( 'pmpro_twocheckout_return_url_parameters', array() );
|
104 |
-
if( ! empty( $additional_parameters ) )
|
105 |
-
foreach( $additional_parameters as $key => $value )
|
106 |
-
$ptpStr .= "&" . urlencode($key) . "=" . urlencode($value);
|
107 |
-
|
108 |
-
$ptpStr = apply_filters( 'pmpro_twocheckout_ptpstr', $ptpStr, $order );
|
109 |
-
|
110 |
-
//echo str_replace("&", "&<br />", $ptpStr);
|
111 |
-
//exit;
|
112 |
-
|
113 |
-
//redirect to 2checkout
|
114 |
-
$tco_url = 'https://www.2checkout.com/checkout/purchase' . $ptpStr;
|
115 |
-
|
116 |
-
//echo $tco_url;
|
117 |
-
//die();
|
118 |
-
wp_redirect( $tco_url );
|
119 |
-
exit;
|
120 |
-
}
|
121 |
-
|
122 |
-
function cancel(&$order) {
|
123 |
-
// If recurring, stop the recurring payment
|
124 |
-
if(pmpro_isLevelRecurring($order->membership_level)) {
|
125 |
-
$params['sale_id'] = $order->payment_transaction_id;
|
126 |
-
$result = Twocheckout_Sale::stop( $params ); // Stop the recurring billing
|
127 |
-
|
128 |
-
// Successfully cancelled
|
129 |
-
if (isset($result['response_code']) && $result['response_code'] === 'OK') {
|
130 |
-
$order->updateStatus("cancelled");
|
131 |
-
return true;
|
132 |
-
}
|
133 |
-
// Failed
|
134 |
-
else {
|
135 |
-
$order->status = "error";
|
136 |
-
$order->errorcode = $result->getCode();
|
137 |
-
$order->error = $result->getMessage();
|
138 |
-
|
139 |
-
return false;
|
140 |
-
}
|
141 |
-
}
|
142 |
-
|
143 |
-
return $order;
|
144 |
-
}
|
145 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/admin-rtl.css
DELETED
@@ -1,63 +0,0 @@
|
|
1 |
-
.pmpro_admin {
|
2 |
-
background: url(../images/Paid-Memberships-Pro_watermark.png) bottom left no-repeat !important;
|
3 |
-
}
|
4 |
-
|
5 |
-
.pmpro_admin .pmpro_banner h2 {
|
6 |
-
float: right;
|
7 |
-
}
|
8 |
-
|
9 |
-
.pmpro_admin .pmpro_banner .pmpro_meta {
|
10 |
-
float: right;
|
11 |
-
}
|
12 |
-
|
13 |
-
.pmpro_admin .pmpro_banner .pmpro_meta .pmpro_tag-blue {
|
14 |
-
margin: 0 5px 0 0;
|
15 |
-
}
|
16 |
-
|
17 |
-
.pmpro_admin .pmpro_banner .pmpro_logo {
|
18 |
-
float: right;
|
19 |
-
margin: 0 0 0 1em;
|
20 |
-
}
|
21 |
-
|
22 |
-
.pmpro_admin .pmpro_banner ul.pmpro_menu li {
|
23 |
-
border-left: 1px solid #CCC;
|
24 |
-
border-right: none;
|
25 |
-
}
|
26 |
-
|
27 |
-
/* messages */
|
28 |
-
.pmpro_message {
|
29 |
-
padding: 6px 25px 6px 6px;
|
30 |
-
}
|
31 |
-
|
32 |
-
/* highlighted trs */
|
33 |
-
|
34 |
-
/* discount levels */
|
35 |
-
|
36 |
-
/* pagination */
|
37 |
-
div.pmpro_pagination {
|
38 |
-
float: left;
|
39 |
-
}
|
40 |
-
|
41 |
-
/* add ons */
|
42 |
-
|
43 |
-
.pmpro_admin .widgets-holder-wrap .widget {
|
44 |
-
float: right;
|
45 |
-
margin: 0 0 1% 1%;
|
46 |
-
}
|
47 |
-
|
48 |
-
.pmpro_admin .widgets-holder-wrap .widget-title .status-label {
|
49 |
-
float: right;
|
50 |
-
margin: 0 0 0 5px;
|
51 |
-
}
|
52 |
-
|
53 |
-
.pmpro_admin .widgets-holder-wrap .widget-title .version {
|
54 |
-
left: 10px;
|
55 |
-
left: auto;
|
56 |
-
}
|
57 |
-
|
58 |
-
.pmpro_admin .widgets-holder-wrap .widget-inside .addon-thumb {
|
59 |
-
float: left;
|
60 |
-
margin: 10px 10px 0 0;
|
61 |
-
}
|
62 |
-
|
63 |
-
/* Generated by the RTLer - http://l0uy.com/rtler/ */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/admin.css
CHANGED
@@ -1,97 +1,61 @@
|
|
1 |
-
.pmpro_admin {background: url(../images/
|
2 |
-
|
3 |
-
.pmpro_admin .pmpro_banner
|
4 |
-
.pmpro_admin .pmpro_banner .pmpro_meta {float:
|
5 |
-
.pmpro_admin .pmpro_banner .
|
6 |
-
.pmpro_admin .pmpro_banner .
|
7 |
-
.pmpro_admin .pmpro_banner ul.pmpro_menu {clear: both; border: 1px solid #CCC; border-radius: 5px; -moz-border-radius: 5px; background: #FFF; }
|
8 |
-
.pmpro_admin .pmpro_banner ul.pmpro_menu li {display: inline-block; margin: 10px 0; padding: 0px 10px; border-right: 1px solid #CCC; }
|
9 |
-
.pmpro_admin .pmpro_banner ul.pmpro_menu li a, .pmpro_admin .pmpro_banner ul.pmpro_menu li a:link {color: #1e0741; text-decoration: none; }
|
10 |
-
.pmpro_admin .pmpro_banner ul.pmpro_menu li a:hover {text-decoration: underline; color: #412f5b; }
|
11 |
-
|
12 |
-
.pmpro_admin .
|
13 |
-
.pmpro_admin
|
14 |
-
.pmpro_admin
|
15 |
-
|
16 |
-
.
|
17 |
-
.
|
18 |
-
.
|
19 |
-
|
20 |
-
.
|
21 |
-
.
|
22 |
-
|
23 |
-
.
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
.
|
31 |
-
|
32 |
-
.
|
33 |
-
.
|
34 |
-
.
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
.
|
39 |
-
.
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
.
|
50 |
-
.
|
51 |
-
|
52 |
-
|
53 |
-
div.pmpro_pagination {padding:
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
.pmpro_admin .widgets-holder-wrap {clear: both; margin-top: 20px; padding: 0 8px; }
|
63 |
-
.pmpro_admin .widgets-holder-wrap .widget {float: left; width: 32%; margin: 0 1% 1% 0; position: relative; }
|
64 |
-
.pmpro_admin .widgets-holder-wrap p.description {padding: 0; }
|
65 |
-
.pmpro_admin .widgets-holder-wrap .widget-top {height: auto; cursor: default; }
|
66 |
-
.pmpro_admin .widgets-holder-wrap .widget-inside {display: block; height: 130px; overflow: hidden; }
|
67 |
-
.pmpro_admin .widgets-holder-wrap .widget-inside p {height: 80px; overflow: hidden; }
|
68 |
-
.pmpro_admin #pmpro-gists.widgets-holder-wrap .widget-inside, .pmpro_admin #pmpro-gists.widgets-holder-wrap .widget-inside p {height: auto; }
|
69 |
-
.pmpro_admin .widgets-holder-wrap .widget-title { }
|
70 |
-
.pmpro_admin .widgets-holder-wrap .widget-title h4 { }
|
71 |
-
.pmpro_admin .widgets-holder-wrap .widget-title .status-label {display: block; float: left; margin: 0 5px 0 0; width: 10px;
|
72 |
-
height: 10px; overflow: hidden; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border: 1px solid #DFDFDF; text-indent: -9999em; }
|
73 |
-
.pmpro_admin .widgets-holder-wrap .disabled .widget-title .status-label {background: #F00; }
|
74 |
-
.pmpro_admin .widgets-holder-wrap .enabled .widget-title .status-label {background: #0C0; }
|
75 |
-
|
76 |
-
.pmpro_admin .widgets-holder-wrap .widget-title .version {position: absolute; top: 13px; right: 10px; }
|
77 |
-
.pmpro_admin .widgets-holder-wrap .widget-inside .addon-thumb {width: 100px; height: 100px; float: right; margin: 10px 0 0 10px; border: 1px solid #DFDFDF; background: #FFF; padding: 2px;}
|
78 |
-
|
79 |
-
/*@media (min-width: 1200px) {
|
80 |
-
.auto-fold .pmpro_admin .widgets-holder-wrap .widget-inside, .auto-fold .pmpro_admin .widgets-holder-wrap .widget-inside p {height: auto; }
|
81 |
-
}
|
82 |
-
*/
|
83 |
-
@media (max-width:900px) {
|
84 |
-
.auto-fold .pmpro_admin .widgets-holder-wrap .widget {float: none; width: 100%; }
|
85 |
-
.auto-fold .pmpro_admin .widgets-holder-wrap .widget-inside, .auto-fold .pmpro_admin .widgets-holder-wrap .widget-inside p {height: auto; }
|
86 |
-
}
|
87 |
-
|
88 |
-
/* misc */
|
89 |
-
.pmpro_lite {color: #AAA;}
|
90 |
-
.pmpro_pad20 {padding: 20px !important;}
|
91 |
-
.pmpro_red {color: #CC0000;}
|
92 |
-
.pmpro_green {color: #00AA00;}
|
93 |
-
|
94 |
-
/* reports */
|
95 |
-
.pmpro_reports-holder { }
|
96 |
-
.pmpro_clickable {cursor: pointer;}
|
97 |
-
.js .postbox.pmpro_clickable h3 {cursor: pointer;}
|
1 |
+
.pmpro_admin {background: url(../images/PaidMembershipsPro-grey.gif) bottom right no-repeat !important; padding-bottom: 70px; }
|
2 |
+
|
3 |
+
.pmpro_admin .pmpro_banner {margin: 2em 0; font-family: Georgia, "Times New Roman", Times, serif; }
|
4 |
+
.pmpro_admin .pmpro_banner .pmpro_meta {float: right; margin: 2em 0 1em 1em; font-size: 12px; font-style: italic; }
|
5 |
+
.pmpro_admin .pmpro_banner .pmpro_logo {float: left; margin: 0 1em 1em 0; width: 350px; }
|
6 |
+
.pmpro_admin .pmpro_banner .pmpro_tagline {float: left; width: 350px; font-family: "Arial Black", Gadget, sans-serif; color: #412f5b; text-transform: uppercase; font-size: 13px; padding: 15px 0; }
|
7 |
+
.pmpro_admin .pmpro_banner ul.pmpro_menu {clear: both; border: 1px solid #CCC; border-radius: 5px; -moz-border-radius: 5px; background: #FFF; }
|
8 |
+
.pmpro_admin .pmpro_banner ul.pmpro_menu li {display: inline-block; margin: 10px 0; padding: 0px 10px; border-right: 1px solid #CCC; }
|
9 |
+
.pmpro_admin .pmpro_banner ul.pmpro_menu li a, .pmpro_admin .pmpro_banner ul.pmpro_menu li a:link {color: #1e0741; text-decoration: none; }
|
10 |
+
.pmpro_admin .pmpro_banner ul.pmpro_menu li a:hover {text-decoration: underline; color: #412f5b; }
|
11 |
+
|
12 |
+
.pmpro_admin .topborder {border-top: 1px solid #CCC; margin-top: 1em; padding-top: 1em; }
|
13 |
+
.pmpro_admin #editorcontainer #description {width: 100%; height: 180px; }
|
14 |
+
.pmpro_admin .widefat {margin-top: 1em; }
|
15 |
+
|
16 |
+
.ssp_description #description {width: 100%;}
|
17 |
+
.checkbox_box {width: 300px; background: #FFFFFF; border: 1px solid #CCC;}
|
18 |
+
.checkbox_box div {border-bottom: 1px solid #CCC; padding: 3px;}
|
19 |
+
.checkbox_box .clickable {cursor: pointer;}
|
20 |
+
.checkbox_box .clickable:hover {background: #FFC;}
|
21 |
+
.top0em {margin-top: 0;}
|
22 |
+
|
23 |
+
tr.pmpro_gray td {color: #AAA;}
|
24 |
+
|
25 |
+
/* messages */
|
26 |
+
.pmpro_message {background-color: #D5E4F7; background-image: url(../images/icon_information.gif); background-position: 3px 5px; background-repeat: no-repeat; margin: .5em 0; padding: 6px 6px 6px 25px; color: #345395; font-size: 11px; font-weight: bold; line-height: 1.3em; }
|
27 |
+
|
28 |
+
.pmpro_success {background-color: #CFEECA; background-image: url(../images/icon_success.gif); color: #208A1B; }
|
29 |
+
.pmpro_error {background-color: #F9D6CB; background-image: url(../images/icon_error.gif); color: #E36154; }
|
30 |
+
.pmpro_alert {background-color: #FFF6CC; background-image: url(../images/icon_alert.gif); color: #CF8516; }
|
31 |
+
|
32 |
+
.pmpro_message a {color: #345395; }
|
33 |
+
.pmpro_success a {color: #208A1B; }
|
34 |
+
.pmpro_error a {color: #E36154; }
|
35 |
+
.pmpro_alert a {color: #CF8516; }
|
36 |
+
|
37 |
+
/* highlighted trs */
|
38 |
+
tr.pmpro_message {background-image: none;}
|
39 |
+
tr.pmpro_success {background-image: none;}
|
40 |
+
tr.pmpro_error {background-image: none;}
|
41 |
+
tr.pmpro_alert {background-image: none;}
|
42 |
+
|
43 |
+
/* discount levels */
|
44 |
+
.pmpro_discount_levels {border: 1px solid #CCC;}
|
45 |
+
.pmpro_discount_levels div {padding: 5px; border: 1px solid #CCC;}
|
46 |
+
.pmpro_discount_levels div div {margin-top: 5px; background: #F5F5F5;}
|
47 |
+
|
48 |
+
/* pagination */
|
49 |
+
div.pmpro_pagination {padding: 3px; margin: 5px 0px 5px 0px; font-size: 10px; float: right; }
|
50 |
+
div.pmpro_pagination a {padding: 2px 5px 2px 5px; margin: 1px; border: 1px solid #666; text-decoration: none; /* no underline */ color: #666; background: #EEE; }
|
51 |
+
div.pmpro_pagination a:hover, div.pmpro_pagination a:active {background: #FFF; }
|
52 |
+
div.pmpro_pagination span.current {border: 1px solid #FFF; color: #FFF; background: #666; padding: 2px 5px 2px 5px; margin: 1px; font-weight: bold; }
|
53 |
+
div.pmpro_pagination span.disabled {padding: 2px 5px 2px 5px; margin: 2px; border: 1px solid #BBB; color: #BBB; background: #EFEFEF;}
|
54 |
+
|
55 |
+
p.pmpro_meta_notice {font-size: .6em; padding-top: 5px; border-top: 1px solid #CCC;}
|
56 |
+
|
57 |
+
/* misc */
|
58 |
+
.pmpro_lite {color: #AAA;}
|
59 |
+
.pmpro_pad20 {padding: 20px !important;}
|
60 |
+
.pmpro_red {color: #CC0000;}
|
61 |
+
.pmpro_green {color: #00AA00;}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/frontend-rtl.css
DELETED
@@ -1,111 +0,0 @@
|
|
1 |
-
/*---------------------------------------
|
2 |
-
Buttons
|
3 |
-
---------------------------------------*/
|
4 |
-
|
5 |
-
/*---------------------------------------
|
6 |
-
Forms
|
7 |
-
---------------------------------------*/
|
8 |
-
form.pmpro_form div {
|
9 |
-
clear: right;
|
10 |
-
}
|
11 |
-
|
12 |
-
form.pmpro_form label {
|
13 |
-
float: right;
|
14 |
-
margin: 3px 0 0 10px;
|
15 |
-
text-align: left;
|
16 |
-
}
|
17 |
-
|
18 |
-
form.pmpro_form .input, form.pmpro_form textarea, .input, form.pmpro_form select {
|
19 |
-
margin: 0 0 0 3px;
|
20 |
-
}
|
21 |
-
|
22 |
-
form.pmpro_form .leftmar {
|
23 |
-
margin: 8px 130px 0 0;
|
24 |
-
}
|
25 |
-
|
26 |
-
form.pmpro_form .pmpro_captcha {
|
27 |
-
margin: 0 130px 0 0 !important;
|
28 |
-
}
|
29 |
-
|
30 |
-
form.pmpro_form .pmpro_submit {
|
31 |
-
margin-right: 130px;
|
32 |
-
margin-left: auto;
|
33 |
-
}
|
34 |
-
|
35 |
-
form.pmpro_form .pmpro_submit span {
|
36 |
-
float: right;
|
37 |
-
}
|
38 |
-
|
39 |
-
form.pmpro_form #pmpro_processing_message {
|
40 |
-
margin: 5px 10px 0 0;
|
41 |
-
}
|
42 |
-
|
43 |
-
/*--------------------------------------------------
|
44 |
-
Messages - Success, Error, Alert
|
45 |
-
----------------------------------------------------*/
|
46 |
-
|
47 |
-
.pmpro_content_message a {
|
48 |
-
margin: 5px 0 0 5px;
|
49 |
-
}
|
50 |
-
|
51 |
-
/*---------------------------------------
|
52 |
-
Membership Checkout
|
53 |
-
---------------------------------------*/
|
54 |
-
|
55 |
-
.pmpro_checkout ul {
|
56 |
-
margin: 5px 20px 0 0;
|
57 |
-
}
|
58 |
-
|
59 |
-
.pmpro_checkout td.rtbdr {
|
60 |
-
border-left: 1px solid #CCC;
|
61 |
-
border-right: none;
|
62 |
-
}
|
63 |
-
|
64 |
-
.pmpro_thead-msg {
|
65 |
-
float: left;
|
66 |
-
text-align: left;
|
67 |
-
}
|
68 |
-
|
69 |
-
.pmpro_ordersummary {
|
70 |
-
float: left;
|
71 |
-
}
|
72 |
-
|
73 |
-
.pmpro_sslseal {
|
74 |
-
float: left;
|
75 |
-
}
|
76 |
-
|
77 |
-
/*---------------------------------------
|
78 |
-
Membership Invoice
|
79 |
-
---------------------------------------*/
|
80 |
-
|
81 |
-
/*---------------------------------------
|
82 |
-
Membership Account
|
83 |
-
---------------------------------------*/
|
84 |
-
|
85 |
-
li.pmpro_more {
|
86 |
-
margin-right: -20px;
|
87 |
-
padding-right: 0;
|
88 |
-
padding-left: 0;
|
89 |
-
margin-left: auto;
|
90 |
-
}
|
91 |
-
|
92 |
-
/*---------------------------------------
|
93 |
-
Membership Levels
|
94 |
-
---------------------------------------*/
|
95 |
-
|
96 |
-
/*---------------------------------------
|
97 |
-
Misc
|
98 |
-
---------------------------------------*/
|
99 |
-
.pmpro_a-right {
|
100 |
-
float: left;
|
101 |
-
text-align: left;
|
102 |
-
}
|
103 |
-
|
104 |
-
.pmpro_a-print {
|
105 |
-
float: left;
|
106 |
-
background: url(../images/printer.gif) top right no-repeat;
|
107 |
-
padding: 0px 20px 2px 0px;
|
108 |
-
}
|
109 |
-
|
110 |
-
|
111 |
-
/* Generated by the RTLer - http://l0uy.com/rtler/ */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/frontend.css
CHANGED
@@ -1,174 +1,119 @@
|
|
1 |
-
/*---------------------------------------
|
2 |
-
Buttons
|
3 |
-
---------------------------------------*/
|
4 |
-
.pmpro_btn
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
}
|
35 |
-
|
36 |
-
.
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
}
|
49 |
-
|
50 |
-
.
|
51 |
-
.
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
}
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
.
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
.
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
.
|
109 |
-
.
|
110 |
-
|
111 |
-
.
|
112 |
-
.
|
113 |
-
|
114 |
-
.
|
115 |
-
|
116 |
-
.
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
.pmpro_thead-msg {display: block; float: right; width: auto; font-style: italic; font-weight: normal; text-align: right; white-space: nowrap; }
|
121 |
-
|
122 |
-
.pmpro_ordersummary {float: right; }
|
123 |
-
|
124 |
-
#pmpro_license { background: #FFF; padding: 5px; border: 1px solid #CCC; height: 200px; margin: 3px; color: #666; overflow: auto; }
|
125 |
-
|
126 |
-
.pmpro_sslseal {float: right; clear: none !important; margin: 0 !important; }
|
127 |
-
|
128 |
-
a.pmpro_radio {text-decoration: none; color: #000;}
|
129 |
-
|
130 |
-
/*---------------------------------------
|
131 |
-
Membership Invoice
|
132 |
-
---------------------------------------*/
|
133 |
-
.pmpro_invoice { }
|
134 |
-
|
135 |
-
|
136 |
-
/*---------------------------------------
|
137 |
-
Membership Account
|
138 |
-
---------------------------------------*/
|
139 |
-
#pmpro_account .pmpro_box {border-top: 1px solid #CCC; padding: 1em 0; margin: 1em 0; }
|
140 |
-
#pmpro_account .pmpro_box h3 {margin: 0; padding: 0; border: none; background: none; }
|
141 |
-
#pmpro_account .pmpro_box p {margin: .5em 0 0 0; padding: 0; }
|
142 |
-
#pmpro_account .pmpro_box ul {margin-bottom: 0; }
|
143 |
-
|
144 |
-
#pmpro_account #pmpro_account-membership { }
|
145 |
-
#pmpro_account #pmpro_account-profile { }
|
146 |
-
#pmpro_account #pmpro_account-billing { }
|
147 |
-
#pmpro_account #pmpro_account-invoices { }
|
148 |
-
#pmpro_account #pmpro_account-links { }
|
149 |
-
|
150 |
-
|
151 |
-
.pmpro_hidden {display: none;}
|
152 |
-
li.pmpro_more {list-style-type: none; text-align: center; margin-left: -20px; padding-left: 0;}
|
153 |
-
|
154 |
-
/*---------------------------------------
|
155 |
-
Membership Levels
|
156 |
-
---------------------------------------*/
|
157 |
-
#pmpro_levels_table {background: #FFF; }
|
158 |
-
#pmpro_levels_table .pmpro_btn {display: block; }
|
159 |
-
|
160 |
-
/*---------------------------------------
|
161 |
-
Misc
|
162 |
-
---------------------------------------*/
|
163 |
-
.pmpro_a-right {float: right; width: auto; text-align: right; text-decoration: underline; font-size: 11px; }
|
164 |
-
.pmpro_a-print {float: right; width: auto; text-decoration: none; color: #345395; background: url(../images/printer.gif) top left no-repeat; padding: 0px 0px 2px 20px; font-size: 11px; line-height: 16px; cursor: pointer; }
|
165 |
-
|
166 |
-
.pmpro_red {color: #CC0000; }
|
167 |
-
.pmpro_grey {color: #999; }
|
168 |
-
|
169 |
-
.top1em {margin-top: 1em;}
|
170 |
-
.bot1em {margin-bottom: 1em;}
|
171 |
-
.bot0em {margin-bottom: 0em;}
|
172 |
-
.clear {clear: both; }
|
173 |
-
|
174 |
.pmpro_small {font-size: .8em;}
|
1 |
+
/*---------------------------------------
|
2 |
+
Buttons
|
3 |
+
---------------------------------------*/
|
4 |
+
.pmpro_btn {display: inline-block; margin: 0; cursor: pointer; }
|
5 |
+
.pmpro_btn:hover { }
|
6 |
+
|
7 |
+
/*---------------------------------------
|
8 |
+
Forms
|
9 |
+
---------------------------------------*/
|
10 |
+
form.pmpro_form div {clear: left; margin: .5em 0 1em 0; }
|
11 |
+
form.pmpro_form label {float: left; margin: 3px 10px 0 0; width: 120px; font-weight: bold; text-align: right; }
|
12 |
+
/*form.pmpro_form div div {width: 380px; margin-left: 130px; clear: none;}*/
|
13 |
+
form.pmpro_form .likelabel {font-weight: bold; }
|
14 |
+
form.pmpro_form .input, form.pmpro_form textarea, .input, form.pmpro_form select {padding: 3px; border: 1px solid #AAA; margin: 0 3px 0 0; }
|
15 |
+
form.pmpro_form textarea {font-family: Arial, Helvetica, sans-serif; font-size: 12px; }
|
16 |
+
form.pmpro_form select {margin: 2px 0 0 0 ; font-size: 12px;}
|
17 |
+
form.pmpro_form .lite {color: #666; }
|
18 |
+
form.pmpro_form .leftmar {margin: 8px 0 0 130px; }
|
19 |
+
|
20 |
+
form.pmpro_form .pmpro_captcha {margin: 0 0 0 130px !important; }
|
21 |
+
form.pmpro_form .pmpro_captcha div {clear: none; margin: 0; }
|
22 |
+
form.pmpro_form .pmpro_submit {margin-left: 140px; }
|
23 |
+
form.pmpro_form .pmpro_submit span {float: left; }
|
24 |
+
form.pmpro_form #pmpro_processing_message {margin: 5px 0 0 10px; font-style: italic; color: #999; }
|
25 |
+
|
26 |
+
/*--------------------------------------------------
|
27 |
+
Messages - Success, Error, Alert
|
28 |
+
----------------------------------------------------*/
|
29 |
+
.pmpro_message, .pmpro_content_message {background-color: #D5E4F7; background-image: url(../images/icon_information.gif); background-position: 3px 5px; background-repeat: no-repeat; margin: .5em 0; padding: 6px 6px 6px 25px; color: #345395; font-size: 11px; font-weight: bold; line-height: 1.3em; }
|
30 |
+
|
31 |
+
.pmpro_success {background-color: #CFEECA; background-image: url(../images/icon_success.gif); color: #208A1B; }
|
32 |
+
.pmpro_error {background-color: #F9D6CB; background-image: url(../images/icon_error.gif); color: #E36154; }
|
33 |
+
.pmpro_alert, .pmpro_content_message {background-color: #FFF6CC; background-image: url(../images/icon_alert.gif); color: #CF8516; }
|
34 |
+
.pmpro_content_message {background-position: 5px 10px; }
|
35 |
+
|
36 |
+
.pmpro_message a {color: #345395; }
|
37 |
+
.pmpro_success a {color: #208A1B; }
|
38 |
+
.pmpro_error a {color: #E36154; }
|
39 |
+
.pmpro_alert a {color: #CF8516; }
|
40 |
+
|
41 |
+
input.pmpro_error {background-image: none;}
|
42 |
+
|
43 |
+
/*---------------------------------------
|
44 |
+
Membership Checkout
|
45 |
+
---------------------------------------*/
|
46 |
+
.pmpro_checkout thead th {font-weight: bold; color: #444; padding: 10px; }
|
47 |
+
.pmpro_checkout tbody td {padding: 10px; }
|
48 |
+
.pmpro_checkout tr.odd td {background: #FAFAFA; }
|
49 |
+
.pmpro_checkout tr.selected td {background: #FFC; }
|
50 |
+
.pmpro_checkout tr.active td {background: #FFC; }
|
51 |
+
.pmpro_checkout .name {font-weight: bold; }
|
52 |
+
.pmpro_checkout ul {margin: 5px 0 0 20px; padding: 0; font-size: .8em; color: #444; }
|
53 |
+
|
54 |
+
.pmpro_checkout tfoot td {padding: 10px; color: #444; }
|
55 |
+
.pmpro_checkout .topfoot td {border-top: 2px solid #CCC;}
|
56 |
+
.pmpro_checkout .total td {border-top: 1px solid #CCC; font-size: 1.2em; font-weight: bold; padding-bottom: 30px;}
|
57 |
+
.pmpro_checkout tfoot .entercode td {background: #EEE; }
|
58 |
+
|
59 |
+
.pmpro_checkout td.rtbdr {border-right: 1px solid #CCC; }
|
60 |
+
|
61 |
+
.pmpro_checkout select {font-size: 11px; }
|
62 |
+
|
63 |
+
.pmpro_thead-msg {display: block; float: right; width: auto; font-style: italic; font-weight: normal; text-align: right; }
|
64 |
+
|
65 |
+
.pmpro_ordersummary {float: right; }
|
66 |
+
|
67 |
+
#pmpro_license { background: #FFF; padding: 5px; border: 1px solid #CCC; height: 200px; margin: 3px; color: #666; overflow: auto; }
|
68 |
+
|
69 |
+
.pmpro_sslseal {float: right; clear: none !important; margin: 0 !important; }
|
70 |
+
|
71 |
+
a.pmpro_radio {text-decoration: none; color: #000;}
|
72 |
+
|
73 |
+
/* button styles from member lite */
|
74 |
+
.pmpro_btn, .pmpro_btn:link, #pmpro_levels_table tbody a, #pmpro_levels_table tbody a:link, .pmpro_btn-submit-checkout, .pmpro_yeslink, .pmpro_nolink, .pmpro_yeslink:link, .pmpro_nolink:link, .pmpro_content_message a {display: inline-block; margin: 0; background-position: top left; background-repeat: repeat-x; cursor: pointer; border-radius: 4px; -moz-border-radius: 4px; padding: 5px 10px; text-decoration: none; text-shadow: 1px 1px 3px #000; border: none; font-family: Arial, Helvetica, sans-serif; }
|
75 |
+
.pmpro_btn:hover {background-position: bottom left; }
|
76 |
+
.pmpro_btn-grey, .pmpro_btn-grey:link, .pmpro_nolink, .pmpro_nolink:link {background: #EEE url(../images/bg_grad-grey.gif) 0px -5px repeat-x; border: 1px solid #CCC; text-shadow: none; }
|
77 |
+
.pmpro_btn-inactive {color: #AAA; text-shadow: none; border: 1px solid #CCC; cursor: not-allowed; }
|
78 |
+
.pmpro_btn {font-size: 14px; }
|
79 |
+
.pmpro_btn-primary, .pmpro_btn-primary:link, #pmpro_levels_table tbody a, #pmpro_levels_table tbody a:link, .pmpro_btn-submit-checkout, .pmpro_yeslink, .pmpro_yeslink:link {background-color: #666; background-image: url(../images/bg_grad-chrome.gif); color: #FFF; }
|
80 |
+
.pmpro_btn-primary:hover, #pmpro_levels_table tbody a:hover, .pmpro_btn-submit-checkout:hover, .pmpro_yeslink:hover {background: #444; color: #FFF; }
|
81 |
+
.pmpro_btn-inactive, .pmpro_btn-inactive:hover {background: #EEE url(../images/bg_grad-grey.gif) 0px -5px repeat-x; }
|
82 |
+
|
83 |
+
.pmpro_content_message a, .pmpro_content_message a:link {text-shadow: none; background: #EEE url(../images/bg_grad-grey.gif) 0px -5px repeat-x; border: 1px solid #CCC; color: #666; text-decoration: none; margin: 0 0 0 5px; }
|
84 |
+
.pmpro_content_message a:hover {background: #FFF; }
|
85 |
+
|
86 |
+
/*---------------------------------------
|
87 |
+
Membership Invoice
|
88 |
+
---------------------------------------*/
|
89 |
+
.pmpro_invoice { }
|
90 |
+
|
91 |
+
|
92 |
+
/*---------------------------------------
|
93 |
+
Membership Account
|
94 |
+
---------------------------------------*/
|
95 |
+
.pmpro_left {float: left; width: 49%; }
|
96 |
+
.pmpro_right {float: right; width: 49%; }
|
97 |
+
|
98 |
+
.pmpro_box {border: 1px solid #CCC; padding: 1em; margin: 0 0 1em 0; }
|
99 |
+
.pmpro_box h3 {border:none; background: none; border-bottom: 1px solid #CCC; padding: 0 0 .5em 0; margin: 0 0 .5em 0; }
|
100 |
+
|
101 |
+
.pmpro_hidden {display: none;}
|
102 |
+
li.pmpro_more {list-style-type: none; text-align: center; margin-left: -20px; padding-left: 0;}
|
103 |
+
|
104 |
+
|
105 |
+
/*---------------------------------------
|
106 |
+
Misc
|
107 |
+
---------------------------------------*/
|
108 |
+
.pmpro_a-right {float: right; width: auto; text-align: right; text-decoration: underline; font-size: 11px; }
|
109 |
+
.pmpro_a-print {float: right; width: auto; text-decoration: none; color: #345395; background: url(../images/printer.gif) top left no-repeat; padding: 0px 0px 2px 20px; font-size: 11px; line-height: 16px; cursor: pointer; }
|
110 |
+
|
111 |
+
.pmpro_red {color: #CC0000; }
|
112 |
+
.pmpro_grey {color: #999; }
|
113 |
+
|
114 |
+
.top1em {margin-top: 1em;}
|
115 |
+
.bot1em {margin-bottom: 1em;}
|
116 |
+
.bot0em {margin-bottom: 0em;}
|
117 |
+
.clear {clear: both; }
|
118 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
.pmpro_small {font-size: .8em;}
|
email/admin_change.html
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<p>An administrator at !!sitename!! has changed your membership level.</p>
|
2 |
|
3 |
-
<p
|
4 |
|
5 |
<p>If you did not request this membership change and would like more information please contact us at !!siteemail!!</p>
|
6 |
|
1 |
<p>An administrator at !!sitename!! has changed your membership level.</p>
|
2 |
|
3 |
+
<p>Your !!membership_change!!.</p>
|
4 |
|
5 |
<p>If you did not request this membership change and would like more information please contact us at !!siteemail!!</p>
|
6 |
|
email/billing.html
CHANGED
@@ -3,7 +3,10 @@
|
|
3 |
<p>Account: !!display_name!! (!!user_email!!)</p>
|
4 |
<p>
|
5 |
Billing Information:<br />
|
6 |
-
!!
|
|
|
|
|
|
|
7 |
</p>
|
8 |
|
9 |
<p>
|
3 |
<p>Account: !!display_name!! (!!user_email!!)</p>
|
4 |
<p>
|
5 |
Billing Information:<br />
|
6 |
+
!!billing_name!!<br />
|
7 |
+
!!billing_street!!<br />
|
8 |
+
!!billing_city!!, !!billing_state!! !!billing_zip!! !!billing_country!!
|
9 |
+
!!billing_phone!!
|
10 |
</p>
|
11 |
|
12 |
<p>
|
email/billing_failure.html
CHANGED
@@ -3,7 +3,11 @@
|
|
3 |
<p>Account: !!display_name!! (!!user_email!!)</p>
|
4 |
<p>The most recent account information we have on file is:</p>
|
5 |
|
6 |
-
<p>!!
|
|
|
|
|
|
|
|
|
7 |
|
8 |
<p>
|
9 |
!!cardtype!!: !!accountnumber!!<br />
|
3 |
<p>Account: !!display_name!! (!!user_email!!)</p>
|
4 |
<p>The most recent account information we have on file is:</p>
|
5 |
|
6 |
+
<p>!!billing_name!!</br />
|
7 |
+
!!billing_street!!<br />
|
8 |
+
!!billing_city!!, !!billing_state!! !!billing_zip!! !!billing_country!!
|
9 |
+
!!billing_phone!!
|
10 |
+
</p>
|
11 |
|
12 |
<p>
|
13 |
!!cardtype!!: !!accountnumber!!<br />
|
email/billing_failure_admin.html
CHANGED
@@ -3,7 +3,11 @@
|
|
3 |
<p>Account: !!display_name!! (!!user_email!!)</p>
|
4 |
<p>The most recent account information we have on file is:</p>
|
5 |
|
6 |
-
<p>!!
|
|
|
|
|
|
|
|
|
7 |
|
8 |
<p>
|
9 |
!!cardtype!!: !!accountnumber!!<br />
|
3 |
<p>Account: !!display_name!! (!!user_email!!)</p>
|
4 |
<p>The most recent account information we have on file is:</p>
|
5 |
|
6 |
+
<p>!!billing_name!!</br />
|
7 |
+
!!billing_street!!<br />
|
8 |
+
!!billing_city!!, !!billing_state!! !!billing_zip!! !!billing_country!!
|
9 |
+
!!billing_phone!!
|
10 |
+
</p>
|
11 |
|
12 |
<p>
|
13 |
!!cardtype!!: !!accountnumber!!<br />
|
email/cancel.html
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
<p>Your membership at !!sitename!! has been
|
2 |
|
3 |
<p>If you did not request this cancellation and would like more information please contact us at !!siteemail!!</p>
|
1 |
+
<p>Your membership at !!sitename!! has been canceled.</p>
|
2 |
|
3 |
<p>If you did not request this cancellation and would like more information please contact us at !!siteemail!!</p>
|
email/cancel_admin.html
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
<p>The membership for !!user_login!! at !!sitename!! has been
|
2 |
|
3 |
<p>Account: !!display_name!! (!!user_email!!)</p>
|
4 |
<p>Membership Level: !!membership_level_name!!</p>
|
1 |
+
<p>The membership for !!user_login!! at !!sitename!! has been canceled.</p>
|
2 |
|
3 |
<p>Account: !!display_name!! (!!user_email!!)</p>
|
4 |
<p>Membership Level: !!membership_level_name!!</p>
|
email/checkout_check.html
CHANGED
@@ -11,7 +11,7 @@
|
|
11 |
|
12 |
<p>
|
13 |
Invoice #!!invoice_id!! on !!invoice_date!!<br />
|
14 |
-
Total Billed:
|
15 |
</p>
|
16 |
|
17 |
<p>Log in to your membership account here: !!login_link!!</p>
|
11 |
|
12 |
<p>
|
13 |
Invoice #!!invoice_id!! on !!invoice_date!!<br />
|
14 |
+
Total Billed: $!!invoice_total!!
|
15 |
</p>
|
16 |
|
17 |
<p>Log in to your membership account here: !!login_link!!</p>
|
email/checkout_express.html
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
|
9 |
<p>
|
10 |
Invoice #!!invoice_id!! on !!invoice_date!!<br />
|
11 |
-
Total Billed:
|
12 |
</p>
|
13 |
|
14 |
-
<p>Log in to your membership account here: !!login_link!!</p>
|
8 |
|
9 |
<p>
|
10 |
Invoice #!!invoice_id!! on !!invoice_date!!<br />
|
11 |
+
Total Billed: $!!invoice_total!!
|
12 |
</p>
|
13 |
|
14 |
+
<p>Log in to your membership account here: !!login_link!!</p>
|
email/checkout_express_admin.html
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
|
9 |
<p>
|
10 |
Invoice #!!invoice_id!! on !!invoice_date!!<br />
|
11 |
-
Total Billed:
|
12 |
</p>
|
13 |
|
14 |
-
<p>Log in to your membership account here: !!login_link!!</p>
|
8 |
|
9 |
<p>
|
10 |
Invoice #!!invoice_id!! on !!invoice_date!!<br />
|
11 |
+
Total Billed: $!!invoice_total!!
|
12 |
</p>
|
13 |
|
14 |
+
<p>Log in to your membership account here: !!login_link!!</p>
|
email/checkout_freetrial.html
CHANGED
@@ -8,7 +8,10 @@
|
|
8 |
|
9 |
<p>
|
10 |
Billing Information on File:<br />
|
11 |
-
!!
|
|
|
|
|
|
|
12 |
</p>
|
13 |
|
14 |
<p>
|
8 |
|
9 |
<p>
|
10 |
Billing Information on File:<br />
|
11 |
+
!!billing_name!!<br />
|
12 |
+
!!billing_street!!<br />
|
13 |
+
!!billing_city!!, !!billing_state!! !!billing_zip!! !!billing_country!!
|
14 |
+
!!billing_phone!!
|
15 |
</p>
|
16 |
|
17 |
<p>
|
email/checkout_freetrial_admin.html
CHANGED
@@ -8,7 +8,10 @@
|
|
8 |
|
9 |
<p>
|
10 |
Billing Information on File:<br />
|
11 |
-
!!
|
|
|
|
|
|
|
12 |
</p>
|
13 |
|
14 |
<p>
|
8 |
|
9 |
<p>
|
10 |
Billing Information on File:<br />
|
11 |
+
!!billing_name!!<br />
|
12 |
+
!!billing_street!!<br />
|
13 |
+
!!billing_city!!, !!billing_state!! !!billing_zip!! !!billing_country!!
|
14 |
+
!!billing_phone!!
|
15 |
</p>
|
16 |
|
17 |
<p>
|
email/checkout_paid.html
CHANGED
@@ -12,7 +12,10 @@
|
|
12 |
</p>
|
13 |
<p>
|
14 |
Billing Information:<br />
|
15 |
-
!!
|
|
|
|
|
|
|
16 |
</p>
|
17 |
|
18 |
<p>
|
12 |
</p>
|
13 |
<p>
|
14 |
Billing Information:<br />
|
15 |
+
!!billing_name!!<br />
|
16 |
+
!!billing_street!!<br />
|
17 |
+
!!billing_city!!, !!billing_state!! !!billing_zip!! !!billing_country!!
|
18 |
+
!!billing_phone!!
|
19 |
</p>
|
20 |
|
21 |
<p>
|
email/checkout_paid_admin.html
CHANGED
@@ -12,7 +12,10 @@
|
|
12 |
</p>
|
13 |
<p>
|
14 |
Billing Information:<br />
|
15 |
-
!!
|
|
|
|
|
|
|
16 |
</p>
|
17 |
|
18 |
<p>
|
@@ -20,4 +23,6 @@
|
|
20 |
Expires: !!expirationmonth!!/!!expirationyear!!
|
21 |
</p>
|
22 |
|
|
|
|
|
23 |
<p>Log in to your membership account here: !!login_link!!</p>
|
12 |
</p>
|
13 |
<p>
|
14 |
Billing Information:<br />
|
15 |
+
!!billing_name!!<br />
|
16 |
+
!!billing_street!!<br />
|
17 |
+
!!billing_city!!, !!billing_state!! !!billing_zip!! !!billing_country!!
|
18 |
+
!!billing_phone!!
|
19 |
</p>
|
20 |
|
21 |
<p>
|
23 |
Expires: !!expirationmonth!!/!!expirationyear!!
|
24 |
</p>
|
25 |
|
26 |
+
Field: !!field!!
|
27 |
+
|
28 |
<p>Log in to your membership account here: !!login_link!!</p>
|
email/checkout_trial.html
CHANGED
@@ -12,7 +12,10 @@
|
|
12 |
</p>
|
13 |
<p>
|
14 |
Billing Information:<br />
|
15 |
-
!!
|
|
|
|
|
|
|
16 |
</p>
|
17 |
|
18 |
<p>
|
12 |
</p>
|
13 |
<p>
|
14 |
Billing Information:<br />
|
15 |
+
!!billing_name!!<br />
|
16 |
+
!!billing_street!!<br />
|
17 |
+
!!billing_city!!, !!billing_state!! !!billing_zip!! !!billing_country!!
|
18 |
+
!!billing_phone!!
|
19 |
</p>
|
20 |
|
21 |
<p>
|
email/checkout_trial_admin.html
CHANGED
@@ -12,7 +12,10 @@
|
|
12 |
</p>
|
13 |
<p>
|
14 |
Billing Information:<br />
|
15 |
-
!!
|
|
|
|
|
|
|
16 |
</p>
|
17 |
|
18 |
<p>
|
@@ -20,4 +23,6 @@
|
|
20 |
Expires: !!expirationmonth!!/!!expirationyear!!
|
21 |
</p>
|
22 |
|
|
|
|
|
23 |
<p>Log in to your membership account here: !!login_link!!</p>
|
12 |
</p>
|
13 |
<p>
|
14 |
Billing Information:<br />
|
15 |
+
!!billing_name!!<br />
|
16 |
+
!!billing_street!!<br />
|
17 |
+
!!billing_city!!, !!billing_state!! !!billing_zip!! !!billing_country!!
|
18 |
+
!!billing_phone!!
|
19 |
</p>
|
20 |
|
21 |
<p>
|
23 |
Expires: !!expirationmonth!!/!!expirationyear!!
|
24 |
</p>
|
25 |
|
26 |
+
Field: !!field!!
|
27 |
+
|
28 |
<p>Log in to your membership account here: !!login_link!!</p>
|
email/credit_card_expiring.html
DELETED
@@ -1,13 +0,0 @@
|
|
1 |
-
<p>The payment method used for your membership at !!sitename!! will expire soon. <strong>Please click the following link to log in and update your billing information to avoid account suspension. !!login_link!!</strong></p>
|
2 |
-
|
3 |
-
<p>Account: !!display_name!! (!!user_email!!)</p>
|
4 |
-
<p>The most recent account information we have on file is:</p>
|
5 |
-
|
6 |
-
<p>!!billing_name!!</br />
|
7 |
-
!!billing_address!!
|
8 |
-
</p>
|
9 |
-
|
10 |
-
<p>
|
11 |
-
!!cardtype!!: !!accountnumber!!<br />
|
12 |
-
Expires: !!expirationmonth!!/!!expirationyear!!
|
13 |
-
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
email/invoice.html
CHANGED
@@ -3,11 +3,15 @@
|
|
3 |
<p>Account: !!display_name!! (!!user_email!!)</p>
|
4 |
<p>
|
5 |
Invoice #!!invoice_id!! on !!invoice_date!!<br />
|
6 |
-
Total Billed:
|
7 |
</p>
|
8 |
<p>
|
9 |
Billing Information:<br />
|
10 |
-
!!
|
|
|
|
|
|
|
|
|
11 |
</p>
|
12 |
|
13 |
<p>
|
3 |
<p>Account: !!display_name!! (!!user_email!!)</p>
|
4 |
<p>
|
5 |
Invoice #!!invoice_id!! on !!invoice_date!!<br />
|
6 |
+
Total Billed: $!!invoice_total!!
|
7 |
</p>
|
8 |
<p>
|
9 |
Billing Information:<br />
|
10 |
+
!!billing_name!!<br />
|
11 |
+
!!billing_street!!<br />
|
12 |
+
!!billing_city!!, !!billing_state!! !!billing_zip!!<br />
|
13 |
+
!!billing_country!!<br />
|
14 |
+
!!billing_phone!!
|
15 |
</p>
|
16 |
|
17 |
<p>
|
images/Paid-Memberships-Pro.png
DELETED
Binary file
|
images/Paid-Memberships-Pro_watermark.png
DELETED
Binary file
|
images/icon-pmproadmin16-sprite.png
DELETED
Binary file
|
images/icon-pmproadmin16-sprite_2x.png
DELETED
Binary file
|
images/icon-pmproadmin32.png
DELETED
Binary file
|
images/icon-pmproadmin32_2x.png
DELETED
Binary file
|
includes/adminpages.php
DELETED
@@ -1,226 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Get array of PMPro Capabilities
|
4 |
-
*/
|
5 |
-
function pmpro_getPMProCaps()
|
6 |
-
{
|
7 |
-
$pmpro_caps = array(
|
8 |
-
//pmpro_memberships_menu //this controls viewing the menu itself
|
9 |
-
'pmpro_membershiplevels',
|
10 |
-
'pmpro_pagesettings',
|
11 |
-
'pmpro_paymentsettings',
|
12 |
-
'pmpro_emailsettings',
|
13 |
-
'pmpro_advancedsettings',
|
14 |
-
'pmpro_addons',
|
15 |
-
'pmpro_memberslist',
|
16 |
-
'pmpro_reports',
|
17 |
-
'pmpro_orders',
|
18 |
-
'pmpro_discountcodes'
|
19 |
-
);
|
20 |
-
|
21 |
-
return $pmpro_caps;
|
22 |
-
}
|
23 |
-
|
24 |
-
/*
|
25 |
-
Dashboard Menu
|
26 |
-
*/
|
27 |
-
function pmpro_add_pages()
|
28 |
-
{
|
29 |
-
global $wpdb;
|
30 |
-
|
31 |
-
//array of all caps in the menu
|
32 |
-
$pmpro_caps = pmpro_getPMProCaps();
|
33 |
-
|
34 |
-
//the top level menu links to the first page they have access to
|
35 |
-
foreach($pmpro_caps as $cap)
|
36 |
-
{
|
37 |
-
if(current_user_can($cap))
|
38 |
-
{
|
39 |
-
$top_menu_cap = $cap;
|
40 |
-
break;
|
41 |
-
}
|
42 |
-
}
|
43 |
-
|
44 |
-
if(empty($top_menu_cap))
|
45 |
-
return;
|
46 |
-
|
47 |
-
add_menu_page(__('Memberships', 'pmpro'), __('Memberships', 'pmpro'), 'pmpro_memberships_menu', 'pmpro-membershiplevels', $top_menu_cap, PMPRO_URL . '/images/menu_users.png');
|
48 |
-
add_submenu_page('pmpro-membershiplevels', __('Page Settings', 'pmpro'), __('Page Settings', 'pmpro'), 'pmpro_pagesettings', 'pmpro-pagesettings', 'pmpro_pagesettings');
|
49 |
-
add_submenu_page('pmpro-membershiplevels', __('Payment Settings', 'pmpro'), __('Payment Settings', 'pmpro'), 'pmpro_paymentsettings', 'pmpro-paymentsettings', 'pmpro_paymentsettings');
|
50 |
-
add_submenu_page('pmpro-membershiplevels', __('Email Settings', 'pmpro'), __('Email Settings', 'pmpro'), 'pmpro_emailsettings', 'pmpro-emailsettings', 'pmpro_emailsettings');
|
51 |
-
add_submenu_page('pmpro-membershiplevels', __('Advanced Settings', 'pmpro'), __('Advanced Settings', 'pmpro'), 'pmpro_advancedsettings', 'pmpro-advancedsettings', 'pmpro_advancedsettings');
|
52 |
-
add_submenu_page('pmpro-membershiplevels', __('Add Ons', 'pmpro'), __('Add Ons', 'pmpro'), 'pmpro_addons', 'pmpro-addons', 'pmpro_addons');
|
53 |
-
add_submenu_page('pmpro-membershiplevels', __('Members List', 'pmpro'), __('Members List', 'pmpro'), 'pmpro_memberslist', 'pmpro-memberslist', 'pmpro_memberslist');
|
54 |
-
add_submenu_page('pmpro-membershiplevels', __('Reports', 'pmpro'), __('Reports', 'pmpro'), 'pmpro_reports', 'pmpro-reports', 'pmpro_reports');
|
55 |
-
add_submenu_page('pmpro-membershiplevels', __('Orders', 'pmpro'), __('Orders', 'pmpro'), 'pmpro_orders', 'pmpro-orders', 'pmpro_orders');
|
56 |
-
add_submenu_page('pmpro-membershiplevels', __('Discount Codes', 'pmpro'), __('Discount Codes', 'pmpro'), 'pmpro_discountcodes', 'pmpro-discountcodes', 'pmpro_discountcodes');
|
57 |
-
|
58 |
-
//rename the automatically added Memberships submenu item
|
59 |
-
global $submenu;
|
60 |
-
if(!empty($submenu['pmpro-membershiplevels']))
|
61 |
-
{
|
62 |
-
if(current_user_can("pmpro_membershiplevels"))
|
63 |
-
{
|
64 |
-
$submenu['pmpro-membershiplevels'][0][0] = __( 'Membership Levels', 'pmpro' );
|
65 |
-
$submenu['pmpro-membershiplevels'][0][3] = __( 'Membership Levels', 'pmpro' );
|
66 |
-
}
|
67 |
-
else
|
68 |
-
{
|
69 |
-
unset($submenu['pmpro-membershiplevels']);
|
70 |
-
}
|
71 |
-
}
|
72 |
-
}
|
73 |
-
add_action('admin_menu', 'pmpro_add_pages');
|
74 |
-
|
75 |
-
/*
|
76 |
-
Admin Bar
|
77 |
-
*/
|
78 |
-
function pmpro_admin_bar_menu() {
|
79 |
-
global $wp_admin_bar;
|
80 |
-
|
81 |
-
//view menu at all?
|
82 |
-
if ( !current_user_can('pmpro_memberships_menu') || !is_admin_bar_showing() )
|
83 |
-
return;
|
84 |
-
|
85 |
-
//array of all caps in the menu
|
86 |
-
$pmpro_caps = pmpro_getPMProCaps();
|
87 |
-
|
88 |
-
//the top level menu links to the first page they have access to
|
89 |
-
foreach($pmpro_caps as $cap)
|
90 |
-
{
|
91 |
-
if(current_user_can($cap))
|
92 |
-
{
|
93 |
-
$top_menu_page = str_replace("_", "-", $cap);
|
94 |
-
break;
|
95 |
-
}
|
96 |
-
}
|
97 |
-
|
98 |
-
$wp_admin_bar->add_menu( array(
|
99 |
-
'id' => 'paid-memberships-pro',
|
100 |
-
'title' => __( 'Memberships', 'pmpro'),
|
101 |
-
'href' => get_admin_url(NULL, '/admin.php?page=' . $top_menu_page) ) );
|
102 |
-
|
103 |
-
if(current_user_can('pmpro_membershiplevels'))
|
104 |
-
$wp_admin_bar->add_menu( array(
|
105 |
-
'id' => 'pmpro-membership-levels',
|
106 |
-
'parent' => 'paid-memberships-pro',
|
107 |
-
'title' => __( 'Membership Levels', 'pmpro'),
|
108 |
-
'href' => get_admin_url(NULL, '/admin.php?page=pmpro-membershiplevels') ) );
|
109 |
-
|
110 |
-
if(current_user_can('pmpro_pagesettings'))
|
111 |
-
$wp_admin_bar->add_menu( array(
|
112 |
-
'id' => 'pmpro-page-settings',
|
113 |
-
'parent' => 'paid-memberships-pro',
|
114 |
-
'title' => __( 'Page Settings', 'pmpro'),
|
115 |
-
'href' => get_admin_url(NULL, '/admin.php?page=pmpro-pagesettings') ) );
|
116 |
-
|
117 |
-
if(current_user_can('pmpro_paymentsettings'))
|
118 |
-
$wp_admin_bar->add_menu( array(
|
119 |
-
'id' => 'pmpro-payment-settings',
|
120 |
-
'parent' => 'paid-memberships-pro',
|
121 |
-
'title' => __( 'Payment Settings', 'pmpro'),
|
122 |
-
'href' => get_admin_url(NULL, '/admin.php?page=pmpro-paymentsettings') ) );
|
123 |
-
|
124 |
-
if(current_user_can('pmpro_emailsettings'))
|
125 |
-
$wp_admin_bar->add_menu( array(
|
126 |
-
'id' => 'pmpro-email-settings',
|
127 |
-
'parent' => 'paid-memberships-pro',
|
128 |
-
'title' => __( 'Email Settings', 'pmpro'),
|
129 |
-
'href' => get_admin_url(NULL, '/admin.php?page=pmpro-emailsettings') ) );
|
130 |
-
|
131 |
-
if(current_user_can('pmpro_advancedsettings'))
|
132 |
-
$wp_admin_bar->add_menu( array(
|
133 |
-
'id' => 'pmpro-advanced-settings',
|
134 |
-
'parent' => 'paid-memberships-pro',
|
135 |
-
'title' => __( 'Advanced Settings', 'pmpro'),
|
136 |
-
'href' => get_admin_url(NULL, '/admin.php?page=pmpro-advancedsettings') ) );
|
137 |
-
|
138 |
-
if(current_user_can('pmpro_addons'))
|
139 |
-
$wp_admin_bar->add_menu( array(
|
140 |
-
'id' => 'pmpro-addons',
|
141 |
-
'parent' => 'paid-memberships-pro',
|
142 |
-
'title' => __( 'Add Ons', 'pmpro'),
|
143 |
-
'href' => get_admin_url(NULL, '/admin.php?page=pmpro-addons') ) );
|
144 |
-
|
145 |
-
if(current_user_can('pmpro_memberslist'))
|
146 |
-
$wp_admin_bar->add_menu( array(
|
147 |
-
'id' => 'pmpro-members-list',
|
148 |
-
'parent' => 'paid-memberships-pro',
|
149 |
-
'title' => __( 'Members List', 'pmpro'),
|
150 |
-
'href' => get_admin_url(NULL, '/admin.php?page=pmpro-memberslist') ) );
|
151 |
-
|
152 |
-
if(current_user_can('pmpro_reports'))
|
153 |
-
$wp_admin_bar->add_menu( array(
|
154 |
-
'id' => 'pmpro-reports',
|
155 |
-
'parent' => 'paid-memberships-pro',
|
156 |
-
'title' => __( 'Reports', 'pmpro'),
|
157 |
-
'href' => get_admin_url(NULL, '/admin.php?page=pmpro-reports') ) );
|
158 |
-
|
159 |
-
if(current_user_can('pmpro_orders'))
|
160 |
-
$wp_admin_bar->add_menu( array(
|
161 |
-
'id' => 'pmpro-orders',
|
162 |
-
'parent' => 'paid-memberships-pro',
|
163 |
-
'title' => __( 'Orders', 'pmpro'),
|
164 |
-
'href' => get_admin_url(NULL, '/admin.php?page=pmpro-orders') ) );
|
165 |
-
|
166 |
-
if(current_user_can('pmpro_discountcodes'))
|
167 |
-
$wp_admin_bar->add_menu( array(
|
168 |
-
'id' => 'pmpro-discount-codes',
|
169 |
-
'parent' => 'paid-memberships-pro',
|
170 |
-
'title' => __( 'Discount Codes', 'pmpro'),
|
171 |
-
'href' => get_admin_url(NULL, '/admin.php?page=pmpro-discountcodes') ) );
|
172 |
-
}
|
173 |
-
add_action('admin_bar_menu', 'pmpro_admin_bar_menu', 1000);
|
174 |
-
|
175 |
-
/*
|
176 |
-
Functions to load pages from adminpages directory
|
177 |
-
*/
|
178 |
-
function pmpro_reports()
|
179 |
-
{
|
180 |
-
require_once(PMPRO_DIR . "/adminpages/reports.php");
|
181 |
-
}
|
182 |
-
|
183 |
-
function pmpro_memberslist()
|
184 |
-
{
|
185 |
-
require_once(PMPRO_DIR . "/adminpages/memberslist.php");
|
186 |
-
}
|
187 |
-
|
188 |
-
function pmpro_discountcodes()
|
189 |
-
{
|
190 |
-
require_once(PMPRO_DIR . "/adminpages/discountcodes.php");
|
191 |
-
}
|
192 |
-
|
193 |
-
function pmpro_membershiplevels()
|
194 |
-
{
|
195 |
-
require_once(PMPRO_DIR . "/adminpages/membershiplevels.php");
|
196 |
-
}
|
197 |
-
|
198 |
-
function pmpro_pagesettings()
|
199 |
-
{
|
200 |
-
require_once(PMPRO_DIR . "/adminpages/pagesettings.php");
|
201 |
-
}
|
202 |
-
|
203 |
-
function pmpro_paymentsettings()
|
204 |
-
{
|
205 |
-
require_once(PMPRO_DIR . "/adminpages/paymentsettings.php");
|
206 |
-
}
|
207 |
-
|
208 |
-
function pmpro_emailsettings()
|
209 |
-
{
|
210 |
-
require_once(PMPRO_DIR . "/adminpages/emailsettings.php");
|
211 |
-
}
|
212 |
-
|
213 |
-
function pmpro_advancedsettings()
|
214 |
-
{
|
215 |
-
require_once(PMPRO_DIR . "/adminpages/advancedsettings.php");
|
216 |
-
}
|
217 |
-
|
218 |
-
function pmpro_addons()
|
219 |
-
{
|
220 |
-
require_once(PMPRO_DIR . "/adminpages/addons.php");
|
221 |
-
}
|
222 |
-
|
223 |
-
function pmpro_orders()
|
224 |
-
{
|
225 |
-
require_once(PMPRO_DIR . "/adminpages/orders.php");
|
226 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/cleanup.php
DELETED
@@ -1,40 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Clean things up when deletes happen, etc. (This stuff needs a better home.)
|
4 |
-
*/
|
5 |
-
//deleting a user? remove their account info.
|
6 |
-
function pmpro_delete_user($user_id = NULL)
|
7 |
-
{
|
8 |
-
global $wpdb;
|
9 |
-
|
10 |
-
//changing their membership level to 0 will cancel any subscription and remove their membership level entry
|
11 |
-
//we don't remove the orders because it would affect reporting
|
12 |
-
if(pmpro_changeMembershipLevel(0, $user_id))
|
13 |
-
{
|
14 |
-
//okay
|
15 |
-
}
|
16 |
-
else
|
17 |
-
{
|
18 |
-
//okay, guessing they didn't have a level
|
19 |
-
}
|
20 |
-
}
|
21 |
-
add_action('delete_user', 'pmpro_delete_user');
|
22 |
-
add_action('wpmu_delete_user', 'pmpro_delete_user');
|
23 |
-
|
24 |
-
//deleting a category? remove any level associations
|
25 |
-
function pmpro_delete_category($cat_id = NULL)
|
26 |
-
{
|
27 |
-
global $wpdb;
|
28 |
-
$sqlQuery = "DELETE FROM $wpdb->pmpro_memberships_categories WHERE category_id = '" . $cat_id . "'";
|
29 |
-
$wpdb->query($sqlQuery);
|
30 |
-
}
|
31 |
-
add_action('delete_category', 'pmpro_delete_category');
|
32 |
-
|
33 |
-
//deleting a post? remove any level associations
|
34 |
-
function pmpro_delete_post($post_id = NULL)
|
35 |
-
{
|
36 |
-
global $wpdb;
|
37 |
-
$sqlQuery = "DELETE FROM $wpdb->pmpro_memberships_pages WHERE page_id = '" . $post_id . "'";
|
38 |
-
$wpdb->query($sqlQuery);
|
39 |
-
}
|
40 |
-
add_action('delete_post', 'pmpro_delete_post');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/content.php
DELETED
@@ -1,405 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Functions to detect member content and protect it.
|
4 |
-
*/
|
5 |
-
function pmpro_has_membership_access($post_id = NULL, $user_id = NULL, $return_membership_levels = false)
|
6 |
-
{
|
7 |
-
global $post, $wpdb, $current_user;
|
8 |
-
//use globals if no values supplied
|
9 |
-
if(!$post_id)
|
10 |
-
$post_id = $post->ID;
|
11 |
-
if(!$user_id)
|
12 |
-
$user_id = $current_user->ID;
|
13 |
-
|
14 |
-
//no post, return true (changed from false in version 1.7.2)
|
15 |
-
if(!$post_id)
|
16 |
-
return true;
|
17 |
-
|
18 |
-
//if no post or current_user object, set them up
|
19 |
-
if(!empty($post->ID) && $post_id == $post->ID)
|
20 |
-
$mypost = $post;
|
21 |
-
else
|
22 |
-
$mypost = get_post($post_id);
|
23 |
-
|
24 |
-
if($user_id == $current_user->ID)
|
25 |
-
$myuser = $current_user;
|
26 |
-
else
|
27 |
-
$myuser = get_userdata($user_id);
|
28 |
-
|
29 |
-
//for these post types, we want to check the parent
|
30 |
-
if($mypost->post_type == "attachment" || $mypost->post_type == "revision")
|
31 |
-
{
|
32 |
-
$mypost = get_post($mypost->post_parent);
|
33 |
-
}
|
34 |
-
|
35 |
-
if($mypost->post_type == "post")
|
36 |
-
{
|
37 |
-
$post_categories = wp_get_post_categories($mypost->ID);
|
38 |
-
|
39 |
-
if(!$post_categories)
|
40 |
-
{
|
41 |
-
//just check for entries in the memberships_pages table
|
42 |
-
$sqlQuery = "SELECT m.id, m.name FROM $wpdb->pmpro_memberships_pages mp LEFT JOIN $wpdb->pmpro_membership_levels m ON mp.membership_id = m.id WHERE mp.page_id = '" . $mypost->ID . "'";
|
43 |
-
}
|
44 |
-
else
|
45 |
-
{
|
46 |
-
//are any of the post categories associated with membership levels? also check the memberships_pages table
|
47 |
-
$sqlQuery = "(SELECT m.id, m.name FROM $wpdb->pmpro_memberships_categories mc LEFT JOIN $wpdb->pmpro_membership_levels m ON mc.membership_id = m.id WHERE mc.category_id IN(" . implode(",", $post_categories) . ") AND m.id IS NOT NULL) UNION (SELECT m.id, m.name FROM $wpdb->pmpro_memberships_pages mp LEFT JOIN $wpdb->pmpro_membership_levels m ON mp.membership_id = m.id WHERE mp.page_id = '" . $mypost->ID . "')";
|
48 |
-
}
|
49 |
-
}
|
50 |
-
else
|
51 |
-
{
|
52 |
-
//are any membership levels associated with this page?
|
53 |
-
$sqlQuery = "SELECT m.id, m.name FROM $wpdb->pmpro_memberships_pages mp LEFT JOIN $wpdb->pmpro_membership_levels m ON mp.membership_id = m.id WHERE mp.page_id = '" . $mypost->ID . "'";
|
54 |
-
}
|
55 |
-
|
56 |
-
|
57 |
-
$post_membership_levels = $wpdb->get_results($sqlQuery);
|
58 |
-
|
59 |
-
$post_membership_levels_ids = array();
|
60 |
-
$post_membership_levels_names = array();
|
61 |
-
|
62 |
-
if(!$post_membership_levels)
|
63 |
-
{
|
64 |
-
$hasaccess = true;
|
65 |
-
}
|
66 |
-
else
|
67 |
-
{
|
68 |
-
//we need to see if the user has access
|
69 |
-
foreach($post_membership_levels as $level)
|
70 |
-
{
|
71 |
-
$post_membership_levels_ids[] = $level->id;
|
72 |
-
$post_membership_levels_names[] = $level->name;
|
73 |
-
}
|
74 |
-
|
75 |
-
//levels found. check if this is in a feed or if the current user is in at least one of those membership levels
|
76 |
-
if(is_feed())
|
77 |
-
{
|
78 |
-
//always block restricted feeds
|
79 |
-
$hasaccess = false;
|
80 |
-
}
|
81 |
-
elseif(!empty($myuser->ID))
|
82 |
-
{
|
83 |
-
$myuser->membership_level = pmpro_getMembershipLevelForUser($myuser->ID);
|
84 |
-
if(!empty($myuser->membership_level->ID) && in_array($myuser->membership_level->ID, $post_membership_levels_ids))
|
85 |
-
{
|
86 |
-
//the users membership id is one that will grant access
|
87 |
-
$hasaccess = true;
|
88 |
-
}
|
89 |
-
else
|
90 |
-
{
|
91 |
-
//user isn't a member of a level with access
|
92 |
-
$hasaccess = false;
|
93 |
-
}
|
94 |
-
}
|
95 |
-
else
|
96 |
-
{
|
97 |
-
//user is not logged in and this content requires membership
|
98 |
-
$hasaccess = false;
|
99 |
-
}
|
100 |
-
}
|
101 |
-
|
102 |
-
/*
|
103 |
-
Filters
|
104 |
-
The generic filter is run first. Then if there is a filter for this post type, that is run.
|
105 |
-
*/
|
106 |
-
//general filter for all posts
|
107 |
-
$hasaccess = apply_filters("pmpro_has_membership_access_filter", $hasaccess, $mypost, $myuser, $post_membership_levels);
|
108 |
-
//filter for this post type
|
109 |
-
if(has_filter("pmpro_has_membership_access_filter_" . $mypost->post_type))
|
110 |
-
$hasaccess = apply_filters("pmpro_has_membership_access_filter_" . $mypost->post_type, $hasaccess, $mypost, $myuser, $post_membership_levels);
|
111 |
-
|
112 |
-
//return
|
113 |
-
if($return_membership_levels)
|
114 |
-
return array($hasaccess, $post_membership_levels_ids, $post_membership_levels_names);
|
115 |
-
else
|
116 |
-
return $hasaccess;
|
117 |
-
}
|
118 |
-
|
119 |
-
function pmpro_search_filter($query)
|
120 |
-
{
|
121 |
-
global $current_user, $wpdb, $pmpro_pages;
|
122 |
-
|
123 |
-
//hide pmpro pages from search results
|
124 |
-
if(!$query->is_admin && $query->is_search && empty($query->query['post_parent']))
|
125 |
-
{
|
126 |
-
$query->set('post__not_in', $pmpro_pages ); // id of page or post
|
127 |
-
}
|
128 |
-
|
129 |
-
//hide member pages from non-members (make sure they aren't hidden from members)
|
130 |
-
if(!$query->is_admin &&
|
131 |
-
!$query->is_singular &&
|
132 |
-
empty($query->query['post_parent']) &&
|
133 |
-
(
|
134 |
-
empty($query->query_vars['post_type']) ||
|
135 |
-
in_array($query->query_vars['post_type'], apply_filters('pmpro_search_filter_post_types', array("page", "post")))
|
136 |
-
)
|
137 |
-
)
|
138 |
-
{
|
139 |
-
//get page ids that are in my levels
|
140 |
-
$levels = pmpro_getMembershipLevelsForUser($current_user->ID);
|
141 |
-
$my_pages = array();
|
142 |
-
|
143 |
-
if($levels) {
|
144 |
-
foreach($levels as $key => $level) {
|
145 |
-
//get restricted posts for level
|
146 |
-
$sql = "SELECT page_id FROM $wpdb->pmpro_memberships_pages WHERE membership_id=" . $current_user->membership_level->ID;
|
147 |
-
$member_pages = $wpdb->get_col($sql);
|
148 |
-
$my_pages = array_unique(array_merge($my_pages, $member_pages));
|
149 |
-
}
|
150 |
-
}
|
151 |
-
|
152 |
-
//get hidden page ids
|
153 |
-
if(!empty($my_pages))
|
154 |
-
$sql = "SELECT page_id FROM $wpdb->pmpro_memberships_pages WHERE page_id NOT IN(" . implode(',', $my_pages) . ")";
|
155 |
-
else
|
156 |
-
$sql = "SELECT page_id FROM $wpdb->pmpro_memberships_pages";
|
157 |
-
$hidden_page_ids = array_values(array_unique($wpdb->get_col($sql)));
|
158 |
-
|
159 |
-
if($hidden_page_ids)
|
160 |
-
$query->set('post__not_in', $hidden_page_ids);
|
161 |
-
|
162 |
-
//get categories that are filtered by level, but not my level
|
163 |
-
$my_cats = array();
|
164 |
-
|
165 |
-
if($levels) {
|
166 |
-
foreach($levels as $key => $level) {
|
167 |
-
$member_cats = pmpro_getMembershipCategories($level->id);
|
168 |
-
$my_cats = array_unique(array_merge($my_cats, $member_cats));
|
169 |
-
}
|
170 |
-
}
|
171 |
-
|
172 |
-
//get hidden cats
|
173 |
-
if(!empty($my_cats))
|
174 |
-
$sql = "SELECT category_id FROM $wpdb->pmpro_memberships_categories WHERE category_id NOT IN(" . implode(',', $my_cats) . ")";
|
175 |
-
else
|
176 |
-
$sql = "SELECT category_id FROM $wpdb->pmpro_memberships_categories";
|
177 |
-
|
178 |
-
$hidden_cat_ids = array_values(array_unique($wpdb->get_col($sql)));
|
179 |
-
|
180 |
-
//make this work
|
181 |
-
if($hidden_cat_ids)
|
182 |
-
$query->set('category__not_in', $hidden_cat_ids);
|
183 |
-
}
|
184 |
-
|
185 |
-
return $query;
|
186 |
-
}
|
187 |
-
$filterqueries = pmpro_getOption("filterqueries");
|
188 |
-
if(!empty($filterqueries))
|
189 |
-
add_filter( 'pre_get_posts', 'pmpro_search_filter' );
|
190 |
-
|
191 |
-
function pmpro_membership_content_filter($content, $skipcheck = false)
|
192 |
-
{
|
193 |
-
global $post, $current_user;
|
194 |
-
|
195 |
-
if(!$skipcheck)
|
196 |
-
{
|
197 |
-
$hasaccess = pmpro_has_membership_access(NULL, NULL, true);
|
198 |
-
if(is_array($hasaccess))
|
199 |
-
{
|
200 |
-
//returned an array to give us the membership level values
|
201 |
-
$post_membership_levels_ids = $hasaccess[1];
|
202 |
-
$post_membership_levels_names = $hasaccess[2];
|
203 |
-
$hasaccess = $hasaccess[0];
|
204 |
-
}
|
205 |
-
}
|
206 |
-
|
207 |
-
if($hasaccess)
|
208 |
-
{
|
209 |
-
//all good, return content
|
210 |
-
return $content;
|
211 |
-
}
|
212 |
-
else
|
213 |
-
{
|
214 |
-
//if show excerpts is set, return just the excerpt
|
215 |
-
if(pmpro_getOption("showexcerpts"))
|
216 |
-
{
|
217 |
-
//show excerpt
|
218 |
-
global $post;
|
219 |
-
if($post->post_excerpt)
|
220 |
-
{
|
221 |
-
//defined exerpt
|
222 |
-
$content = wpautop($post->post_excerpt);
|
223 |
-
}
|
224 |
-
elseif(strpos($content, "<span id=\"more-" . $post->ID . "\"></span>") !== false)
|
225 |
-
{
|
226 |
-
//more tag
|
227 |
-
$pos = strpos($content, "<span id=\"more-" . $post->ID . "\"></span>");
|
228 |
-
$content = wpautop(substr($content, 0, $pos));
|
229 |
-
}
|
230 |
-
elseif(strpos($content, 'class="more-link">') !== false)
|
231 |
-
{
|
232 |
-
//more link
|
233 |
-
$content = preg_replace("/\<a.*class\=\"more\-link\".*\>.*\<\/a\>/", "", $content);
|
234 |
-
}
|
235 |
-
else
|
236 |
-
{
|
237 |
-
//auto generated excerpt. pulled from wp_trim_excerpt
|
238 |
-
$content = strip_shortcodes( $content );
|
239 |
-
$content = str_replace(']]>', ']]>', $content);
|
240 |
-
$content = strip_tags($content);
|
241 |
-
$excerpt_length = apply_filters('excerpt_length', 55);
|
242 |
-
$words = preg_split("/[\n\r\t ]+/", $content, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
|
243 |
-
if ( count($words) > $excerpt_length ) {
|
244 |
-
array_pop($words);
|
245 |
-
$content = implode(' ', $words);
|
246 |
-
$content = $content . "... ";
|
247 |
-
} else {
|
248 |
-
$content = implode(' ', $words) . "... ";
|
249 |
-
}
|
250 |
-
|
251 |
-
$content = wpautop($content);
|
252 |
-
}
|
253 |
-
}
|
254 |
-
else
|
255 |
-
{
|
256 |
-
//else hide everything
|
257 |
-
$content = "";
|
258 |
-
}
|
259 |
-
|
260 |
-
if(empty($post_membership_levels_ids))
|
261 |
-
$post_membership_levels_ids = array();
|
262 |
-
|
263 |
-
if(empty($post_membership_levels_names))
|
264 |
-
$post_membership_levels_names = array();
|
265 |
-
|
266 |
-
$pmpro_content_message_pre = '<div class="pmpro_content_message">';
|
267 |
-
$pmpro_content_message_post = '</div>';
|
268 |
-
|
269 |
-
$sr_search = array("!!levels!!", "!!referrer!!");
|
270 |
-
$sr_replace = array(pmpro_implodeToEnglish($post_membership_levels_names), $_SERVER['REQUEST_URI']);
|
271 |
-
|
272 |
-
//get the correct message to show at the bottom
|
273 |
-
if(is_feed())
|
274 |
-
{
|
275 |
-
$newcontent = apply_filters("pmpro_rss_text_filter", stripslashes(pmpro_getOption("rsstext")));
|
276 |
-
$content .= $pmpro_content_message_pre . str_replace($sr_search, $sr_replace, $newcontent) . $pmpro_content_message_post;
|
277 |
-
}
|
278 |
-
elseif($current_user->ID)
|
279 |
-
{
|
280 |
-
//not a member
|
281 |
-
$newcontent = apply_filters("pmpro_non_member_text_filter", stripslashes(pmpro_getOption("nonmembertext")));
|
282 |
-
$content .= $pmpro_content_message_pre . str_replace($sr_search, $sr_replace, $newcontent) . $pmpro_content_message_post;
|
283 |
-
}
|
284 |
-
else
|
285 |
-
{
|
286 |
-
//not logged in!
|
287 |
-
$newcontent = apply_filters("pmpro_not_logged_in_text_filter", stripslashes(pmpro_getOption("notloggedintext")));
|
288 |
-
$content .= $pmpro_content_message_pre . str_replace($sr_search, $sr_replace, $newcontent) . $pmpro_content_message_post;
|
289 |
-
}
|
290 |
-
}
|
291 |
-
|
292 |
-
return $content;
|
293 |
-
}
|
294 |
-
add_filter('the_content', 'pmpro_membership_content_filter', 5);
|
295 |
-
add_filter('the_content_rss', 'pmpro_membership_content_filter', 5);
|
296 |
-
add_filter('comment_text_rss', 'pmpro_membership_content_filter', 5);
|
297 |
-
|
298 |
-
/*
|
299 |
-
If the_excerpt is called, we want to disable the_content filters so the PMPro messages aren't added to the content before AND after the ecerpt.
|
300 |
-
*/
|
301 |
-
function pmpro_membership_excerpt_filter($content, $skipcheck = false)
|
302 |
-
{
|
303 |
-
remove_filter('the_content', 'pmpro_membership_content_filter', 5);
|
304 |
-
$content = pmpro_membership_content_filter($content, $skipcheck);
|
305 |
-
add_filter('the_content', 'pmpro_membership_content_filter', 5);
|
306 |
-
|
307 |
-
return $content;
|
308 |
-
}
|
309 |
-
function pmpro_membership_get_excerpt_filter_start($content, $skipcheck = false)
|
310 |
-
{
|
311 |
-
remove_filter('the_content', 'pmpro_membership_content_filter', 5);
|
312 |
-
return $content;
|
313 |
-
}
|
314 |
-
function pmpro_membership_get_excerpt_filter_end($content, $skipcheck = false)
|
315 |
-
{
|
316 |
-
add_filter('the_content', 'pmpro_membership_content_filter', 5);
|
317 |
-
return $content;
|
318 |
-
}
|
319 |
-
add_filter('the_excerpt', 'pmpro_membership_excerpt_filter', 15);
|
320 |
-
add_filter('get_the_excerpt', 'pmpro_membership_get_excerpt_filter_start', 1);
|
321 |
-
add_filter('get_the_excerpt', 'pmpro_membership_get_excerpt_filter_end', 100);
|
322 |
-
|
323 |
-
function pmpro_comments_filter($comments, $post_id = NULL)
|
324 |
-
{
|
325 |
-
global $post, $wpdb, $current_user;
|
326 |
-
if(!$post_id)
|
327 |
-
$post_id = $post->ID;
|
328 |
-
|
329 |
-
if(!$comments)
|
330 |
-
return $comments; //if they are closed anyway, we don't need to check
|
331 |
-
|
332 |
-
global $post, $current_user;
|
333 |
-
|
334 |
-
$hasaccess = pmpro_has_membership_access(NULL, NULL, true);
|
335 |
-
if(is_array($hasaccess))
|
336 |
-
{
|
337 |
-
//returned an array to give us the membership level values
|
338 |
-
$post_membership_levels_ids = $hasaccess[1];
|
339 |
-
$post_membership_levels_names = $hasaccess[2];
|
340 |
-
$hasaccess = $hasaccess[0];
|
341 |
-
}
|
342 |
-
|
343 |
-
if($hasaccess)
|
344 |
-
{
|
345 |
-
//all good, return content
|
346 |
-
return $comments;
|
347 |
-
}
|
348 |
-
else
|
349 |
-
{
|
350 |
-
if(!$post_membership_levels_ids)
|
351 |
-
$post_membership_levels_ids = array();
|
352 |
-
|
353 |
-
if(!$post_membership_levels_names)
|
354 |
-
$post_membership_levels_names = array();
|
355 |
-
|
356 |
-
//get the correct message
|
357 |
-
if(is_feed())
|
358 |
-
{
|
359 |
-
if(is_array($comments))
|
360 |
-
return array();
|
361 |
-
else
|
362 |
-
return false;
|
363 |
-
}
|
364 |
-
elseif($current_user->ID)
|
365 |
-
{
|
366 |
-
//not a member
|
367 |
-
if(is_array($comments))
|
368 |
-
return array();
|
369 |
-
else
|
370 |
-
return false;
|
371 |
-
}
|
372 |
-
else
|
373 |
-
{
|
374 |
-
//not logged in!
|
375 |
-
if(is_array($comments))
|
376 |
-
return array();
|
377 |
-
else
|
378 |
-
return false;
|
379 |
-
}
|
380 |
-
}
|
381 |
-
|
382 |
-
return $comments;
|
383 |
-
}
|
384 |
-
add_filter("comments_array", "pmpro_comments_filter");
|
385 |
-
add_filter("comments_open", "pmpro_comments_filter");
|
386 |
-
|
387 |
-
//keep non-members from getting to certain pages (attachments, etc)
|
388 |
-
function pmpro_hide_pages_redirect()
|
389 |
-
{
|
390 |
-
global $post;
|
391 |
-
|
392 |
-
if(!is_admin() && !empty($post->ID))
|
393 |
-
{
|
394 |
-
if($post->post_type == "attachment")
|
395 |
-
{
|
396 |
-
//check if the user has access to the parent
|
397 |
-
if(!pmpro_has_membership_access($post->ID))
|
398 |
-
{
|
399 |
-
wp_redirect(pmpro_url("levels"));
|
400 |
-
exit;
|
401 |
-
}
|
402 |
-
}
|
403 |
-
}
|
404 |
-
}
|
405 |
-
add_action('wp', 'pmpro_hide_pages_redirect');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/currencies.php
CHANGED
@@ -10,13 +10,10 @@
|
|
10 |
'AUD' => __('Australian Dollars ($)', 'pmpro'),
|
11 |
'BRL' => __('Brazilian Real ($)', 'pmpro'),
|
12 |
'CAD' => __('Canadian Dollars ($)', 'pmpro'),
|
13 |
-
'CNY' => __('Chinese Yuan', 'pmpro'),
|
14 |
'CZK' => __('Czech Koruna', 'pmpro'),
|
15 |
'DKK' => __('Danish Krone', 'pmpro'),
|
16 |
'HKD' => __('Hong Kong Dollar ($)', 'pmpro'),
|
17 |
'HUF' => __('Hungarian Forint', 'pmpro'),
|
18 |
-
'INR' => __('Indian Rupee', 'pmpro'),
|
19 |
-
'IDR' => __('Indonesia Rupiah', 'pmpro'),
|
20 |
'ILS' => __('Israeli Shekel', 'pmpro'),
|
21 |
'JPY' => __('Japanese Yen (¥)', 'pmpro'),
|
22 |
'MYR' => __('Malaysian Ringgits', 'pmpro'),
|
@@ -26,24 +23,18 @@
|
|
26 |
'PHP' => __('Philippine Pesos', 'pmpro'),
|
27 |
'PLN' => __('Polish Zloty', 'pmpro'),
|
28 |
'SGD' => __('Singapore Dollar ($)', 'pmpro'),
|
29 |
-
'ZAR' => __('South African Rand', 'pmpro'),
|
30 |
-
'KRW' => __('South Korean Won', 'pmpro'),
|
31 |
'SEK' => __('Swedish Krona', 'pmpro'),
|
32 |
'CHF' => __('Swiss Franc', 'pmpro'),
|
33 |
'TWD' => __('Taiwan New Dollars', 'pmpro'),
|
34 |
-
'THB' => __('Thai Baht', 'pmpro')
|
35 |
-
'TRY' => __('Turkish Lira', 'pmpro'),
|
36 |
-
'VND' => __('Vietnamese Dong', 'pmpro')
|
37 |
);
|
38 |
|
39 |
$pmpro_currencies = apply_filters("pmpro_currencies", $pmpro_currencies);
|
40 |
|
41 |
-
//stripe only supports a few
|
42 |
global $pmpro_stripe_currencies;
|
43 |
$pmpro_stripe_currencies = array(
|
44 |
'USD' => __('US Dollars ($)', 'pmpro'),
|
45 |
-
'CAD' => __('Canadian Dollars ($)', 'pmpro')
|
46 |
-
'GBP' => __('Pounds Sterling (£)', 'pmpro'),
|
47 |
-
'EUR' => __('Euros (€)', 'pmpro')
|
48 |
);
|
49 |
?>
|
10 |
'AUD' => __('Australian Dollars ($)', 'pmpro'),
|
11 |
'BRL' => __('Brazilian Real ($)', 'pmpro'),
|
12 |
'CAD' => __('Canadian Dollars ($)', 'pmpro'),
|
|
|
13 |
'CZK' => __('Czech Koruna', 'pmpro'),
|
14 |
'DKK' => __('Danish Krone', 'pmpro'),
|
15 |
'HKD' => __('Hong Kong Dollar ($)', 'pmpro'),
|
16 |
'HUF' => __('Hungarian Forint', 'pmpro'),
|
|
|
|
|
17 |
'ILS' => __('Israeli Shekel', 'pmpro'),
|
18 |
'JPY' => __('Japanese Yen (¥)', 'pmpro'),
|
19 |
'MYR' => __('Malaysian Ringgits', 'pmpro'),
|
23 |
'PHP' => __('Philippine Pesos', 'pmpro'),
|
24 |
'PLN' => __('Polish Zloty', 'pmpro'),
|
25 |
'SGD' => __('Singapore Dollar ($)', 'pmpro'),
|
|
|
|
|
26 |
'SEK' => __('Swedish Krona', 'pmpro'),
|
27 |
'CHF' => __('Swiss Franc', 'pmpro'),
|
28 |
'TWD' => __('Taiwan New Dollars', 'pmpro'),
|
29 |
+
'THB' => __('Thai Baht', 'pmpro')
|
|
|
|
|
30 |
);
|
31 |
|
32 |
$pmpro_currencies = apply_filters("pmpro_currencies", $pmpro_currencies);
|
33 |
|
34 |
+
//stripe only supports a few
|
35 |
global $pmpro_stripe_currencies;
|
36 |
$pmpro_stripe_currencies = array(
|
37 |
'USD' => __('US Dollars ($)', 'pmpro'),
|
38 |
+
'CAD' => __('Canadian Dollars ($)', 'pmpro')
|
|
|
|
|
39 |
);
|
40 |
?>
|
includes/email.php
DELETED
@@ -1,111 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Nicer default emails
|
4 |
-
*/
|
5 |
-
function pmpro_wp_mail_from_name($from_name)
|
6 |
-
{
|
7 |
-
$default_from_name = 'WordPress';
|
8 |
-
|
9 |
-
//make sure it's the default from name
|
10 |
-
if($from_name == $default_from_name)
|
11 |
-
{
|
12 |
-
$pmpro_from_name = pmpro_getOption("from_name");
|
13 |
-
if ($pmpro_from_name)
|
14 |
-
$from_name = $pmpro_from_name;
|
15 |
-
}
|
16 |
-
|
17 |
-
return $from_name;
|
18 |
-
}
|
19 |
-
function pmpro_wp_mail_from($from_email)
|
20 |
-
{
|
21 |
-
// default from email wordpress@sitename
|
22 |
-
$sitename = strtolower( $_SERVER['SERVER_NAME'] );
|
23 |
-
if ( substr( $sitename, 0, 4 ) == 'www.' ) {
|
24 |
-
$sitename = substr( $sitename, 4 );
|
25 |
-
}
|
26 |
-
$default_from_email = 'wordpress@' . $sitename;
|
27 |
-
|
28 |
-
//make sure it's the default email address
|
29 |
-
if($from_email == $default_from_email)
|
30 |
-
{
|
31 |
-
$pmpro_from_email = pmpro_getOption("from_email");
|
32 |
-
if ($pmpro_from_email && is_email( $pmpro_from_email ) )
|
33 |
-
$from_email = $pmpro_from_email;
|
34 |
-
}
|
35 |
-
|
36 |
-
return $from_email;
|
37 |
-
}
|
38 |
-
|
39 |
-
$only_filter_pmpro_emails = pmpro_getOption("only_filter_pmpro_emails");
|
40 |
-
if($only_filter_pmpro_emails)
|
41 |
-
{
|
42 |
-
add_filter('pmpro_email_sender_name', 'pmpro_wp_mail_from_name');
|
43 |
-
add_filter('pmpro_email_sender', 'pmpro_wp_mail_from');
|
44 |
-
}
|
45 |
-
else
|
46 |
-
{
|
47 |
-
add_filter('wp_mail_from_name', 'pmpro_wp_mail_from_name');
|
48 |
-
add_filter('wp_mail_from', 'pmpro_wp_mail_from');
|
49 |
-
}
|
50 |
-
|
51 |
-
/*
|
52 |
-
If the $email_member_notification option is empty, disable the wp_new_user_notification email at checkout.
|
53 |
-
*/
|
54 |
-
$email_member_notification = pmpro_getOption("email_member_notification");
|
55 |
-
if(empty($email_member_notification))
|
56 |
-
add_filter("pmpro_wp_new_user_notification", "__return_false", 0);
|
57 |
-
|
58 |
-
/*
|
59 |
-
Adds template files and changes content type to html if using PHPMailer directly.
|
60 |
-
*/
|
61 |
-
function pmpro_send_html( $phpmailer ) {
|
62 |
-
|
63 |
-
// Set the original plain text message
|
64 |
-
$phpmailer->AltBody = wp_specialchars_decode($phpmailer->Body, ENT_QUOTES);
|
65 |
-
// Clean < and > around text links in WP 3.1
|
66 |
-
$phpmailer->Body = preg_replace('#<(http://[^*]+)>#', '$1', $phpmailer->Body);
|
67 |
-
// Convert line breaks & make links clickable
|
68 |
-
$phpmailer->Body = make_clickable ($phpmailer->Body);
|
69 |
-
|
70 |
-
// Add header to message if found
|
71 |
-
if(file_exists(get_stylesheet_directory() . "/email_header.html"))
|
72 |
-
$phpmailer->Body = file_get_contents(get_stylesheet_directory() . "/email_header.html") . "\n" . $phpmailer->Body;
|
73 |
-
elseif(file_exists(get_template_directory() . "/email_header.html"))
|
74 |
-
$phpmailer->Body = file_get_contents(get_template_directory() . "/email_header.html") . "\n" . $phpmailer->Body;
|
75 |
-
|
76 |
-
// Add footer to message if found
|
77 |
-
if(file_exists(get_stylesheet_directory() . "/email_footer.html"))
|
78 |
-
$phpmailer->Body = $phpmailer->Body . "\n" . file_get_contents(get_stylesheet_directory() . "/email_footer.html");
|
79 |
-
elseif(file_exists(get_template_directory() . "/email_footer.html"))
|
80 |
-
$phpmailer->Body = $phpmailer->Body . "\n" . file_get_contents(get_template_directory() . "/email_footer.html");
|
81 |
-
|
82 |
-
// Replace variables in email
|
83 |
-
global $current_user;
|
84 |
-
$data = array(
|
85 |
-
"name" => $current_user->display_name,
|
86 |
-
"sitename" => get_option("blogname"),
|
87 |
-
"login_link" => pmpro_url("account"),
|
88 |
-
"display_name" => $current_user->display_name,
|
89 |
-
"user_email" => $current_user->user_email,
|
90 |
-
"subject" => $phpmailer->Subject
|
91 |
-
);
|
92 |
-
foreach($data as $key => $value)
|
93 |
-
{
|
94 |
-
$phpmailer->Body = str_replace("!!" . $key . "!!", $value, $phpmailer->Body);
|
95 |
-
}
|
96 |
-
|
97 |
-
do_action("pmpro_after_phpmailer_init", $phpmailer);
|
98 |
-
do_action("pmpro_after_pmpmailer_init", $phpmailer); //typo left in for backwards compatibility
|
99 |
-
}
|
100 |
-
|
101 |
-
function pmpro_wp_mail_content_type( $content_type ) {
|
102 |
-
add_action('phpmailer_init', 'pmpro_send_html');
|
103 |
-
|
104 |
-
//change to html if not already
|
105 |
-
if( $content_type == 'text/plain')
|
106 |
-
{
|
107 |
-
$content_type = 'text/html';
|
108 |
-
}
|
109 |
-
return $content_type;
|
110 |
-
}
|
111 |
-
add_filter('wp_mail_content_type', 'pmpro_wp_mail_content_type');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/filters.php
CHANGED
@@ -19,7 +19,7 @@ function pmpro_checkout_level_extend_memberships($level)
|
|
19 |
$expiration_date = $current_user->membership_level->enddate;
|
20 |
|
21 |
//calculate days left
|
22 |
-
$todays_date =
|
23 |
$time_left = $expiration_date - $todays_date;
|
24 |
|
25 |
//time left?
|
@@ -62,7 +62,7 @@ function pmpro_ipnhandler_level_extend_memberships($level, $user_id)
|
|
62 |
$expiration_date = $user_level->enddate;
|
63 |
|
64 |
//calculate days left
|
65 |
-
$todays_date =
|
66 |
$time_left = $expiration_date - $todays_date;
|
67 |
|
68 |
//time left?
|
@@ -100,7 +100,7 @@ function pmpro_checkout_start_date_keep_startdate($startdate, $user_id, $level)
|
|
100 |
if(pmpro_hasMembershipLevel($level->id, $user_id))
|
101 |
{
|
102 |
global $wpdb;
|
103 |
-
$sqlQuery = "SELECT startdate FROM $wpdb->pmpro_memberships_users WHERE user_id = '" .
|
104 |
$old_startdate = $wpdb->get_var($sqlQuery);
|
105 |
|
106 |
if(!empty($old_startdate))
|
@@ -110,41 +110,3 @@ function pmpro_checkout_start_date_keep_startdate($startdate, $user_id, $level)
|
|
110 |
return $startdate;
|
111 |
}
|
112 |
add_filter("pmpro_checkout_start_date", "pmpro_checkout_start_date_keep_startdate", 10, 3);
|
113 |
-
|
114 |
-
/*
|
115 |
-
Stripe Lite Pulled into Core Plugin
|
116 |
-
*/
|
117 |
-
//Stripe Lite, Set the Globals/etc
|
118 |
-
$stripe_billingaddress = pmpro_getOption("stripe_billingaddress");
|
119 |
-
if(empty($stripe_billingaddress))
|
120 |
-
{
|
121 |
-
global $pmpro_stripe_lite;
|
122 |
-
$pmpro_stripe_lite = true;
|
123 |
-
add_filter("pmpro_stripe_lite", "__return_true");
|
124 |
-
add_filter("pmpro_required_billing_fields", "pmpro_required_billing_fields_stripe_lite");
|
125 |
-
}
|
126 |
-
|
127 |
-
//Stripe Lite, Don't Require Billing Fields
|
128 |
-
function pmpro_required_billing_fields_stripe_lite($fields)
|
129 |
-
{
|
130 |
-
global $gateway;
|
131 |
-
|
132 |
-
//ignore if not using stripe
|
133 |
-
if($gateway != "stripe")
|
134 |
-
return $fields;
|
135 |
-
|
136 |
-
//some fields to remove
|
137 |
-
$remove = array('bfirstname', 'blastname', 'baddress1', 'bcity', 'bstate', 'bzipcode', 'bphone', 'bcountry', 'CardType');
|
138 |
-
|
139 |
-
//if a user is logged in, don't require bemail either
|
140 |
-
global $current_user;
|
141 |
-
if(!empty($current_user->user_email))
|
142 |
-
$remove[] = 'bemail';
|
143 |
-
|
144 |
-
//remove the fields
|
145 |
-
foreach($remove as $field)
|
146 |
-
unset($fields[$field]);
|
147 |
-
|
148 |
-
//ship it!
|
149 |
-
return $fields;
|
150 |
-
}
|
19 |
$expiration_date = $current_user->membership_level->enddate;
|
20 |
|
21 |
//calculate days left
|
22 |
+
$todays_date = time();
|
23 |
$time_left = $expiration_date - $todays_date;
|
24 |
|
25 |
//time left?
|
62 |
$expiration_date = $user_level->enddate;
|
63 |
|
64 |
//calculate days left
|
65 |
+
$todays_date = time();
|
66 |
$time_left = $expiration_date - $todays_date;
|
67 |
|
68 |
//time left?
|
100 |
if(pmpro_hasMembershipLevel($level->id, $user_id))
|
101 |
{
|
102 |
global $wpdb;
|
103 |
+
$sqlQuery = "SELECT startdate FROM $wpdb->pmpro_memberships_users WHERE user_id = '" . $wpdb->escape($user_id) . "' AND membership_id = '" . $wpdb->escape($level->id) . "' AND status = 'active' ORDER BY id DESC LIMIT 1";
|
104 |
$old_startdate = $wpdb->get_var($sqlQuery);
|
105 |
|
106 |
if(!empty($old_startdate))
|
110 |
return $startdate;
|
111 |
}
|
112 |
add_filter("pmpro_checkout_start_date", "pmpro_checkout_start_date_keep_startdate", 10, 3);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/functions.php
CHANGED
@@ -1,1742 +1,1505 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
$
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
$
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
return
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
$
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
$
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
}
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
{
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
if(
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
}
|
297 |
-
|
298 |
-
|
299 |
-
{
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
{
|
319 |
-
|
320 |
-
|
321 |
-
}
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
{
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
}
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
$
|
394 |
-
|
395 |
-
$
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
if(
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
elseif(
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
$
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
$
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
{
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
if
|
694 |
-
{
|
695 |
-
$
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
$pagination .= "
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
879 |
-
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
|
911 |
-
|
912 |
-
$
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
|
922 |
-
|
923 |
-
|
924 |
-
|
925 |
-
|
926 |
-
|
927 |
-
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
|
935 |
-
|
936 |
-
|
937 |
-
|
938 |
-
|
939 |
-
|
940 |
-
|
941 |
-
|
942 |
-
|
943 |
-
|
944 |
-
|
945 |
-
|
946 |
-
|
947 |
-
$
|
948 |
-
|
949 |
-
|
950 |
-
|
951 |
-
|
952 |
-
|
953 |
-
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
|
961 |
-
$
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
-
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
1003 |
-
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
-
|
1014 |
-
|
1015 |
-
|
1016 |
-
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
|
1030 |
-
$
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
1040 |
-
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
1044 |
-
|
1045 |
-
|
1046 |
-
$
|
1047 |
-
|
1048 |
-
|
1049 |
-
|
1050 |
-
|
1051 |
-
|
1052 |
-
|
1053 |
-
|
1054 |
-
|
1055 |
-
|
1056 |
-
|
1057 |
-
|
1058 |
-
|
1059 |
-
|
1060 |
-
|
1061 |
-
|
1062 |
-
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
|
1088 |
-
|
1089 |
-
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
|
1095 |
-
|
1096 |
-
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
|
1103 |
-
|
1104 |
-
|
1105 |
-
|
1106 |
-
|
1107 |
-
|
1108 |
-
|
1109 |
-
|
1110 |
-
|
1111 |
-
|
1112 |
-
|
1113 |
-
|
1114 |
-
|
1115 |
-
|
1116 |
-
//
|
1117 |
-
|
1118 |
-
|
1119 |
-
|
1120 |
-
|
1121 |
-
|
1122 |
-
|
1123 |
-
|
1124 |
-
|
1125 |
-
|
1126 |
-
|
1127 |
-
|
1128 |
-
|
1129 |
-
|
1130 |
-
|
1131 |
-
|
1132 |
-
|
1133 |
-
|
1134 |
-
|
1135 |
-
|
1136 |
-
|
1137 |
-
|
1138 |
-
|
1139 |
-
|
1140 |
-
|
1141 |
-
|
1142 |
-
|
1143 |
-
|
1144 |
-
|
1145 |
-
|
1146 |
-
|
1147 |
-
|
1148 |
-
|
1149 |
-
|
1150 |
-
if(
|
1151 |
-
{
|
1152 |
-
|
1153 |
-
|
1154 |
-
|
1155 |
-
|
1156 |
-
|
1157 |
-
|
1158 |
-
|
1159 |
-
|
1160 |
-
|
1161 |
-
|
1162 |
-
|
1163 |
-
|
1164 |
-
|
1165 |
-
|
1166 |
-
|
1167 |
-
|
1168 |
-
|
1169 |
-
|
1170 |
-
|
1171 |
-
|
1172 |
-
|
1173 |
-
|
1174 |
-
|
1175 |
-
|
1176 |
-
|
1177 |
-
|
1178 |
-
|
1179 |
-
|
1180 |
-
|
1181 |
-
|
1182 |
-
|
1183 |
-
|
1184 |
-
|
1185 |
-
|
1186 |
-
|
1187 |
-
|
1188 |
-
|
1189 |
-
|
1190 |
-
|
1191 |
-
|
1192 |
-
|
1193 |
-
|
1194 |
-
|
1195 |
-
|
1196 |
-
|
1197 |
-
|
1198 |
-
|
1199 |
-
|
1200 |
-
|
1201 |
-
|
1202 |
-
|
1203 |
-
|
1204 |
-
|
1205 |
-
|
1206 |
-
|
1207 |
-
|
1208 |
-
|
1209 |
-
|
1210 |
-
|
1211 |
-
|
1212 |
-
|
1213 |
-
$
|
1214 |
-
|
1215 |
-
|
1216 |
-
|
1217 |
-
|
1218 |
-
|
1219 |
-
|
1220 |
-
|
1221 |
-
|
1222 |
-
|
1223 |
-
|
1224 |
-
|
1225 |
-
|
1226 |
-
|
1227 |
-
|
1228 |
-
|
1229 |
-
|
1230 |
-
|
1231 |
-
|
1232 |
-
|
1233 |
-
|
1234 |
-
}
|
1235 |
-
|
1236 |
-
|
1237 |
-
|
1238 |
-
|
1239 |
-
|
1240 |
-
|
1241 |
-
|
1242 |
-
|
1243 |
-
|
1244 |
-
|
1245 |
-
|
1246 |
-
|
1247 |
-
|
1248 |
-
|
1249 |
-
|
1250 |
-
|
1251 |
-
|
1252 |
-
|
1253 |
-
|
1254 |
-
|
1255 |
-
|
1256 |
-
|
1257 |
-
|
1258 |
-
|
1259 |
-
|
1260 |
-
|
1261 |
-
|
1262 |
-
|
1263 |
-
|
1264 |
-
|
1265 |
-
|
1266 |
-
|
1267 |
-
|
1268 |
-
|
1269 |
-
|
1270 |
-
|
1271 |
-
|
1272 |
-
|
1273 |
-
|
1274 |
-
}
|
1275 |
-
|
1276 |
-
/*
|
1277 |
-
|
1278 |
-
|
1279 |
-
|
1280 |
-
|
1281 |
-
|
1282 |
-
|
1283 |
-
|
1284 |
-
|
1285 |
-
|
1286 |
-
|
1287 |
-
|
1288 |
-
|
1289 |
-
|
1290 |
-
$
|
1291 |
-
|
1292 |
-
|
1293 |
-
|
1294 |
-
|
1295 |
-
|
1296 |
-
|
1297 |
-
|
1298 |
-
|
1299 |
-
|
1300 |
-
|
1301 |
-
|
1302 |
-
|
1303 |
-
|
1304 |
-
|
1305 |
-
|
1306 |
-
|
1307 |
-
|
1308 |
-
|
1309 |
-
|
1310 |
-
|
1311 |
-
|
1312 |
-
|
1313 |
-
|
1314 |
-
|
1315 |
-
|
1316 |
-
|
1317 |
-
|
1318 |
-
|
1319 |
-
|
1320 |
-
|
1321 |
-
|
1322 |
-
|
1323 |
-
|
1324 |
-
|
1325 |
-
|
1326 |
-
|
1327 |
-
|
1328 |
-
|
1329 |
-
|
1330 |
-
|
1331 |
-
|
1332 |
-
|
1333 |
-
|
1334 |
-
|
1335 |
-
|
1336 |
-
|
1337 |
-
|
1338 |
-
|
1339 |
-
|
1340 |
-
|
1341 |
-
|
1342 |
-
|
1343 |
-
|
1344 |
-
|
1345 |
-
|
1346 |
-
|
1347 |
-
|
1348 |
-
|
1349 |
-
|
1350 |
-
|
1351 |
-
|
1352 |
-
|
1353 |
-
|
1354 |
-
|
1355 |
-
|
1356 |
-
|
1357 |
-
|
1358 |
-
|
1359 |
-
|
1360 |
-
|
1361 |
-
|
1362 |
-
|
1363 |
-
|
1364 |
-
|
1365 |
-
|
1366 |
-
|
1367 |
-
|
1368 |
-
|
1369 |
-
|
1370 |
-
|
1371 |
-
|
1372 |
-
|
1373 |
-
|
1374 |
-
|
1375 |
-
|
1376 |
-
|
1377 |
-
|
1378 |
-
|
1379 |
-
|
1380 |
-
|
1381 |
-
|
1382 |
-
|
1383 |
-
|
1384 |
-
|
1385 |
-
|
1386 |
-
|
1387 |
-
|
1388 |
-
|
1389 |
-
|
1390 |
-
|
1391 |
-
|
1392 |
-
|
1393 |
-
|
1394 |
-
|
1395 |
-
|
1396 |
-
|
1397 |
-
|
1398 |
-
|
1399 |
-
|
1400 |
-
|
1401 |
-
|
1402 |
-
|
1403 |
-
|
1404 |
-
|
1405 |
-
|
1406 |
-
|
1407 |
-
|
1408 |
-
|
1409 |
-
|
1410 |
-
|
1411 |
-
|
1412 |
-
|
1413 |
-
|
1414 |
-
|
1415 |
-
|
1416 |
-
|
1417 |
-
|
1418 |
-
|
1419 |
-
|
1420 |
-
|
1421 |
-
|
1422 |
-
|
1423 |
-
|
1424 |
-
|
1425 |
-
|
1426 |
-
|
1427 |
-
|
1428 |
-
|
1429 |
-
|
1430 |
-
|
1431 |
-
|
1432 |
-
|
1433 |
-
|
1434 |
-
|
1435 |
-
|
1436 |
-
|
1437 |
-
|
1438 |
-
|
1439 |
-
|
1440 |
-
|
1441 |
-
|
1442 |
-
|
1443 |
-
|
1444 |
-
|
1445 |
-
|
1446 |
-
|
1447 |
-
|
1448 |
-
|
1449 |
-
|
1450 |
-
|
1451 |
-
|
1452 |
-
|
1453 |
-
|
1454 |
-
|
1455 |
-
|
1456 |
-
|
1457 |
-
|
1458 |
-
|
1459 |
-
|
1460 |
-
|
1461 |
-
|
1462 |
-
|
1463 |
-
|
1464 |
-
|
1465 |
-
|
1466 |
-
|
1467 |
-
|
1468 |
-
|
1469 |
-
|
1470 |
-
|
1471 |
-
|
1472 |
-
|
1473 |
-
|
1474 |
-
|
1475 |
-
|
1476 |
-
|
1477 |
-
|
1478 |
-
|
1479 |
-
|
1480 |
-
|
1481 |
-
|
1482 |
-
|
1483 |
-
|
1484 |
-
|
1485 |
-
|
1486 |
-
|
1487 |
-
|
1488 |
-
if(
|
1489 |
-
{
|
1490 |
-
|
1491 |
-
|
1492 |
-
|
1493 |
-
|
1494 |
-
|
1495 |
-
|
1496 |
-
|
1497 |
-
|
1498 |
-
|
1499 |
-
|
1500 |
-
|
1501 |
-
|
1502 |
-
|
1503 |
-
|
1504 |
-
|
1505 |
-
|
1506 |
-
/*
|
1507 |
-
How long has this member been a member
|
1508 |
-
*/
|
1509 |
-
if(!function_exists("pmpro_getMemberDays"))
|
1510 |
-
{
|
1511 |
-
function pmpro_getMemberDays($user_id = NULL, $level_id = 0)
|
1512 |
-
{
|
1513 |
-
if(empty($user_id))
|
1514 |
-
{
|
1515 |
-
global $current_user;
|
1516 |
-
$user_id = $current_user->ID;
|
1517 |
-
}
|
1518 |
-
|
1519 |
-
global $pmpro_member_days;
|
1520 |
-
if(empty($pmpro_member_days[$user_id][$level_id]))
|
1521 |
-
{
|
1522 |
-
$startdate = pmpro_getMemberStartdate($user_id, $level_id);
|
1523 |
-
|
1524 |
-
//check that there was a startdate at all
|
1525 |
-
if(empty($startdate))
|
1526 |
-
$pmpro_member_days[$user_id][$level_id] = 0;
|
1527 |
-
else
|
1528 |
-
{
|
1529 |
-
$now = current_time('timestamp');
|
1530 |
-
$days = ($now - $startdate)/3600/24;
|
1531 |
-
|
1532 |
-
$pmpro_member_days[$user_id][$level_id] = $days;
|
1533 |
-
}
|
1534 |
-
}
|
1535 |
-
|
1536 |
-
return $pmpro_member_days[$user_id][$level_id];
|
1537 |
-
}
|
1538 |
-
}
|
1539 |
-
|
1540 |
-
//the start of a message handling script
|
1541 |
-
function pmpro_setMessage($message, $type, $force = false)
|
1542 |
-
{
|
1543 |
-
global $pmpro_msg, $pmpro_msgt;
|
1544 |
-
|
1545 |
-
//for now, we only show the first message generated
|
1546 |
-
if($force || empty($pmpro_msg))
|
1547 |
-
{
|
1548 |
-
$pmpro_msg = $message;
|
1549 |
-
$pmpro_msgt = $type;
|
1550 |
-
}
|
1551 |
-
}
|
1552 |
-
|
1553 |
-
//used in class definitions for input fields to see if there was an error
|
1554 |
-
function pmpro_getClassForField($field)
|
1555 |
-
{
|
1556 |
-
global $pmpro_error_fields, $pmpro_required_billing_fields, $pmpro_required_user_fields;
|
1557 |
-
$classes = array();
|
1558 |
-
|
1559 |
-
//error on this field?
|
1560 |
-
if(in_array($field, $pmpro_error_fields))
|
1561 |
-
{
|
1562 |
-
$classes[] = "pmpro_error";
|
1563 |
-
}
|
1564 |
-
|
1565 |
-
$required_fields = array_merge(array_keys($pmpro_required_billing_fields), array_keys($pmpro_required_user_fields));
|
1566 |
-
|
1567 |
-
//required?
|
1568 |
-
if(in_array($field, $required_fields))
|
1569 |
-
{
|
1570 |
-
$classes[] = "pmpro_required";
|
1571 |
-
}
|
1572 |
-
|
1573 |
-
$classes = apply_filters("pmpro_field_classes", $classes, $field);
|
1574 |
-
|
1575 |
-
if(!empty($classes))
|
1576 |
-
return implode(" ", $classes);
|
1577 |
-
else
|
1578 |
-
return "";
|
1579 |
-
}
|
1580 |
-
|
1581 |
-
//get a var from $_GET or $_POST
|
1582 |
-
function pmpro_getParam($index, $method = "REQUEST", $default = "")
|
1583 |
-
{
|
1584 |
-
if($method == "REQUEST")
|
1585 |
-
{
|
1586 |
-
if(!empty($_REQUEST[$index]))
|
1587 |
-
return $_REQUEST[$index];
|
1588 |
-
}
|
1589 |
-
elseif($method == "POST")
|
1590 |
-
{
|
1591 |
-
if(!empty($_POST[$index]))
|
1592 |
-
return $_POST[$index];
|
1593 |
-
}
|
1594 |
-
elseif($method == "GET")
|
1595 |
-
{
|
1596 |
-
if(!empty($_GET[$index]))
|
1597 |
-
return $_GET[$index];
|
1598 |
-
}
|
1599 |
-
|
1600 |
-
return $default;
|
1601 |
-
}
|
1602 |
-
|
1603 |
-
/*
|
1604 |
-
Format an address from address, city, state, zip, country, and phone
|
1605 |
-
*/
|
1606 |
-
function pmpro_formatAddress($name, $address1, $address2, $city, $state, $zip, $country, $phone, $nl2br = true)
|
1607 |
-
{
|
1608 |
-
$address = "";
|
1609 |
-
|
1610 |
-
if(!empty($name))
|
1611 |
-
$address .= $name . "\n";
|
1612 |
-
|
1613 |
-
if(!empty($address1))
|
1614 |
-
$address .= $address1 . "\n";
|
1615 |
-
|
1616 |
-
if(!empty($address2))
|
1617 |
-
$address .= $address2 . "\n";
|
1618 |
-
|
1619 |
-
if(!empty($city) && !empty($state))
|
1620 |
-
{
|
1621 |
-
$address .= $city . ", " . $state;
|
1622 |
-
|
1623 |
-
if(!empty($zip))
|
1624 |
-
$address .= " " . $zip;
|
1625 |
-
|
1626 |
-
$address .= "\n";
|
1627 |
-
}
|
1628 |
-
|
1629 |
-
if(!empty($country))
|
1630 |
-
$address .= $country . "\n";
|
1631 |
-
|
1632 |
-
if(!empty($phone))
|
1633 |
-
$address .= formatPhone($phone);
|
1634 |
-
|
1635 |
-
if($nl2br)
|
1636 |
-
$address = nl2br($address);
|
1637 |
-
|
1638 |
-
return $address;
|
1639 |
-
}
|
1640 |
-
|
1641 |
-
/*
|
1642 |
-
Checks if all required settings are set.
|
1643 |
-
*/
|
1644 |
-
function pmpro_is_ready()
|
1645 |
-
{
|
1646 |
-
global $wpdb, $pmpro_pages, $pmpro_level_ready, $pmpro_gateway_ready, $pmpro_pages_ready;
|
1647 |
-
|
1648 |
-
//check if there is at least one level
|
1649 |
-
$pmpro_level_ready = (bool)$wpdb->get_var("SELECT id FROM $wpdb->pmpro_membership_levels LIMIT 1");
|
1650 |
-
|
1651 |
-
//check if the gateway settings are good. first check if it's needed (is there paid membership level)
|
1652 |
-
$paid_membership_level = $wpdb->get_var("SELECT id FROM $wpdb->pmpro_membership_levels WHERE allow_signups = 1 AND (initial_payment > 0 OR billing_amount > 0 OR trial_amount > 0) LIMIT 1");
|
1653 |
-
$paid_user_subscription = $wpdb->get_var("SELECT user_id FROM $wpdb->pmpro_memberships_users WHERE initial_payment > 0 OR billing_amount > 0 OR trial_amount > 0 LIMIT 1");
|
1654 |
-
|
1655 |
-
if(empty($paid_membership_level) && empty($paid_user_subscription))
|
1656 |
-
{
|
1657 |
-
//no paid membership level now or attached to a user. we don't need the gateway setup
|
1658 |
-
$pmpro_gateway_ready = true;
|
1659 |
-
}
|
1660 |
-
else
|
1661 |
-
{
|
1662 |
-
$gateway = pmpro_getOption("gateway");
|
1663 |
-
if($gateway == "authorizenet")
|
1664 |
-
{
|
1665 |
-
if(pmpro_getOption("gateway_environment") && pmpro_getOption("loginname") && pmpro_getOption("transactionkey"))
|
1666 |
-
$pmpro_gateway_ready = true;
|
1667 |
-
else
|
1668 |
-
$pmpro_gateway_ready = false;
|
1669 |
-
}
|
1670 |
-
elseif($gateway == "paypal" || $gateway == "paypalexpress")
|
1671 |
-
{
|
1672 |
-
if(pmpro_getOption("gateway_environment") && pmpro_getOption("gateway_email") && pmpro_getOption("apiusername") && pmpro_getOption("apipassword") && pmpro_getOption("apisignature"))
|
1673 |
-
$pmpro_gateway_ready = true;
|
1674 |
-
else
|
1675 |
-
$pmpro_gateway_ready = false;
|
1676 |
-
}
|
1677 |
-
elseif($gateway == "paypalstandard")
|
1678 |
-
{
|
1679 |
-
if(pmpro_getOption("gateway_environment") && pmpro_getOption("gateway_email"))
|
1680 |
-
$pmpro_gateway_ready = true;
|
1681 |
-
else
|
1682 |
-
$pmpro_gateway_ready = false;
|
1683 |
-
}
|
1684 |
-
elseif($gateway == "payflowpro")
|
1685 |
-
{
|
1686 |
-
if(pmpro_getOption("payflow_partner") && pmpro_getOption("payflow_vendor") && pmpro_getOption("payflow_user") && pmpro_getOption("payflow_pwd"))
|
1687 |
-
$pmpro_gateway_ready = true;
|
1688 |
-
else
|
1689 |
-
$pmpro_gateway_ready = false;
|
1690 |
-
}
|
1691 |
-
elseif($gateway == "stripe")
|
1692 |
-
{
|
1693 |
-
if(pmpro_getOption("gateway_environment") && pmpro_getOption("stripe_secretkey") && pmpro_getOption("stripe_publishablekey"))
|
1694 |
-
$pmpro_gateway_ready = true;
|
1695 |
-
else
|
1696 |
-
$pmpro_gateway_ready = false;
|
1697 |
-
}
|
1698 |
-
elseif($gateway == "braintree")
|
1699 |
-
{
|
1700 |
-
if(pmpro_getOption("gateway_environment") && pmpro_getOption("braintree_merchantid") && pmpro_getOption("braintree_publickey") && pmpro_getOption("braintree_privatekey"))
|
1701 |
-
$pmpro_gateway_ready = true;
|
1702 |
-
else
|
1703 |
-
$pmpro_gateway_ready = false;
|
1704 |
-
}
|
1705 |
-
elseif($gateway == "twocheckout")
|
1706 |
-
{
|
1707 |
-
if(pmpro_getOption("gateway_environment") && pmpro_getOption("twocheckout_apiusername") && pmpro_getOption("twocheckout_apipassword"))
|
1708 |
-
$pmpro_gateway_ready = true;
|
1709 |
-
else
|
1710 |
-
$pmpro_gateway_ready = false;
|
1711 |
-
}
|
1712 |
-
elseif($gateway == "cybersource")
|
1713 |
-
{
|
1714 |
-
if(pmpro_getOption("gateway_environment") && pmpro_getOption("cybersource_merchantid") && pmpro_getOption("cybersource_securitykey"))
|
1715 |
-
$pmpro_gateway_ready = true;
|
1716 |
-
else
|
1717 |
-
$pmpro_gateway_ready = false;
|
1718 |
-
}
|
1719 |
-
else
|
1720 |
-
{
|
1721 |
-
$pmpro_gateway_ready = false;
|
1722 |
-
}
|
1723 |
-
}
|
1724 |
-
|
1725 |
-
//check if we have all pages
|
1726 |
-
if($pmpro_pages["account"] &&
|
1727 |
-
$pmpro_pages["billing"] &&
|
1728 |
-
$pmpro_pages["cancel"] &&
|
1729 |
-
$pmpro_pages["checkout"] &&
|
1730 |
-
$pmpro_pages["confirmation"] &&
|
1731 |
-
$pmpro_pages["invoice"] &&
|
1732 |
-
$pmpro_pages["levels"])
|
1733 |
-
$pmpro_pages_ready = true;
|
1734 |
-
else
|
1735 |
-
$pmpro_pages_ready = false;
|
1736 |
-
|
1737 |
-
//now check both
|
1738 |
-
if($pmpro_gateway_ready && $pmpro_pages_ready)
|
1739 |
-
return true;
|
1740 |
-
else
|
1741 |
-
return false;
|
1742 |
-
}
|
1 |
+
<?php
|
2 |
+
if(!function_exists("sornot"))
|
3 |
+
{
|
4 |
+
function sornot($t, $n)
|
5 |
+
{
|
6 |
+
if($n == 1)
|
7 |
+
return $t;
|
8 |
+
else
|
9 |
+
return $t . "s";
|
10 |
+
}
|
11 |
+
}
|
12 |
+
|
13 |
+
//setup wpdb for the tables we need
|
14 |
+
function pmpro_setDBTables()
|
15 |
+
{
|
16 |
+
global $table_prefix, $wpdb;
|
17 |
+
$wpdb->hide_errors();
|
18 |
+
$wpdb->pmpro_membership_levels = $table_prefix . 'pmpro_membership_levels';
|
19 |
+
$wpdb->pmpro_memberships_users = $table_prefix . 'pmpro_memberships_users';
|
20 |
+
$wpdb->pmpro_memberships_categories = $table_prefix . 'pmpro_memberships_categories';
|
21 |
+
$wpdb->pmpro_memberships_pages = $table_prefix . 'pmpro_memberships_pages';
|
22 |
+
$wpdb->pmpro_membership_orders = $table_prefix . 'pmpro_membership_orders';
|
23 |
+
$wpdb->pmpro_discount_codes = $wpdb->prefix . 'pmpro_discount_codes';
|
24 |
+
$wpdb->pmpro_discount_codes_levels = $wpdb->prefix . 'pmpro_discount_codes_levels';
|
25 |
+
$wpdb->pmpro_discount_codes_uses = $wpdb->prefix . 'pmpro_discount_codes_uses';
|
26 |
+
}
|
27 |
+
pmpro_setDBTables();
|
28 |
+
|
29 |
+
//from: http://stackoverflow.com/questions/5266945/wordpress-how-detect-if-current-page-is-the-login-page/5892694#5892694
|
30 |
+
function pmpro_is_login_page() {
|
31 |
+
return (in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php')) || is_page("login"));
|
32 |
+
}
|
33 |
+
|
34 |
+
//thanks: http://wordpress.org/support/topic/is_plugin_active
|
35 |
+
function pmpro_is_plugin_active( $plugin ) {
|
36 |
+
return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
|
37 |
+
}
|
38 |
+
|
39 |
+
//scraping - override n if you have more than 1 group of matches and don't want the first group
|
40 |
+
function pmpro_getMatches($p, $s, $firstvalue = FALSE, $n = 1)
|
41 |
+
{
|
42 |
+
$ok = preg_match_all($p, $s, $matches);
|
43 |
+
|
44 |
+
if(!$ok)
|
45 |
+
return false;
|
46 |
+
else
|
47 |
+
{
|
48 |
+
if($firstvalue)
|
49 |
+
return $matches[$n][0];
|
50 |
+
else
|
51 |
+
return $matches[$n];
|
52 |
+
}
|
53 |
+
}
|
54 |
+
|
55 |
+
function pmpro_br2nl($text, $tags = "br")
|
56 |
+
{
|
57 |
+
if(!is_array($tags))
|
58 |
+
$tags = explode(" ", $tags);
|
59 |
+
|
60 |
+
foreach($tags as $tag)
|
61 |
+
{
|
62 |
+
$text = eregi_replace("<" . $tag . "[^>]*>", "\n", $text);
|
63 |
+
$text = eregi_replace("</" . $tag . "[^>]*>", "\n", $text);
|
64 |
+
}
|
65 |
+
|
66 |
+
return($text);
|
67 |
+
}
|
68 |
+
|
69 |
+
function pmpro_getOption($s, $force = false)
|
70 |
+
{
|
71 |
+
if(isset($_REQUEST[$s]) && !$force)
|
72 |
+
return $_REQUEST[$s];
|
73 |
+
elseif(get_option("pmpro_" . $s))
|
74 |
+
return get_option("pmpro_" . $s);
|
75 |
+
else
|
76 |
+
return "";
|
77 |
+
}
|
78 |
+
|
79 |
+
function pmpro_setOption($s, $v = NULL)
|
80 |
+
{
|
81 |
+
//no value is given, set v to the request var
|
82 |
+
if($v === NULL && isset($_REQUEST[$s]))
|
83 |
+
$v = $_REQUEST[$s];
|
84 |
+
|
85 |
+
if(is_array($v))
|
86 |
+
$v = implode(",", $v);
|
87 |
+
|
88 |
+
return update_option("pmpro_" . $s, $v);
|
89 |
+
}
|
90 |
+
|
91 |
+
function pmpro_get_slug($post_id)
|
92 |
+
{
|
93 |
+
global $pmpro_slugs, $wpdb;
|
94 |
+
if(!$pmpro_slugs[$post_id])
|
95 |
+
$pmpro_slugs[$post_id] = $wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE ID = '" . $post_id . "' LIMIT 1");
|
96 |
+
|
97 |
+
return $pmpro_slugs[$post_id];
|
98 |
+
}
|
99 |
+
|
100 |
+
function pmpro_url($page = NULL, $querystring = "", $scheme = NULL)
|
101 |
+
{
|
102 |
+
global $besecure;
|
103 |
+
$besecure = apply_filters("besecure", $besecure);
|
104 |
+
|
105 |
+
if(!$scheme && $besecure)
|
106 |
+
$scheme = "https";
|
107 |
+
elseif(!$scheme)
|
108 |
+
$scheme = "http";
|
109 |
+
|
110 |
+
if(!$page)
|
111 |
+
$page = "levels";
|
112 |
+
|
113 |
+
global $pmpro_pages;
|
114 |
+
|
115 |
+
//? vs &
|
116 |
+
if(strpos(get_permalink($pmpro_pages[$page]), "?"))
|
117 |
+
return home_url(str_replace(home_url(), "", get_permalink($pmpro_pages[$page])) . str_replace("?", "&", $querystring), $scheme);
|
118 |
+
else
|
119 |
+
return home_url(str_replace(home_url(), "", get_permalink($pmpro_pages[$page])) . $querystring, $scheme);
|
120 |
+
}
|
121 |
+
|
122 |
+
function pmpro_isLevelFree(&$level)
|
123 |
+
{
|
124 |
+
if($level->initial_payment <= 0 && $level->billing_amount <= 0 && $level->trial_amount <= 0)
|
125 |
+
return true;
|
126 |
+
else
|
127 |
+
return false;
|
128 |
+
}
|
129 |
+
|
130 |
+
function pmpro_isLevelRecurring(&$level)
|
131 |
+
{
|
132 |
+
if($level->billing_amount > 0 || $level->trial_amount > 0)
|
133 |
+
return true;
|
134 |
+
else
|
135 |
+
return false;
|
136 |
+
}
|
137 |
+
|
138 |
+
function pmpro_isLevelTrial(&$level)
|
139 |
+
{
|
140 |
+
if($level->trial_limit > 0)
|
141 |
+
{
|
142 |
+
return true;
|
143 |
+
}
|
144 |
+
else
|
145 |
+
return false;
|
146 |
+
}
|
147 |
+
|
148 |
+
function pmpro_isLevelExpiring(&$level)
|
149 |
+
{
|
150 |
+
if($level->expiration_number > 0)
|
151 |
+
return true;
|
152 |
+
else
|
153 |
+
return false;
|
154 |
+
}
|
155 |
+
|
156 |
+
function pmpro_getLevelCost(&$level, $tags = true)
|
157 |
+
{
|
158 |
+
global $pmpro_currency_symbol;
|
159 |
+
$r = '
|
160 |
+
The price for membership is <strong>' . $pmpro_currency_symbol . number_format($level->initial_payment, 2) . '</strong> now';
|
161 |
+
if($level->billing_amount != '0.00')
|
162 |
+
{
|
163 |
+
$r .= ' and then <strong>' . $pmpro_currency_symbol . $level->billing_amount;
|
164 |
+
if($level->cycle_number == '1')
|
165 |
+
{
|
166 |
+
$r .= ' per ';
|
167 |
+
}
|
168 |
+
elseif($level->billing_limit == 1)
|
169 |
+
{
|
170 |
+
$r .= ' after ' . $level->cycle_number . ' ';
|
171 |
+
}
|
172 |
+
else
|
173 |
+
{
|
174 |
+
$r .= ' every ' . $level->cycle_number . ' ';
|
175 |
+
}
|
176 |
+
|
177 |
+
$r .= sornot($level->cycle_period,$level->cycle_number);
|
178 |
+
|
179 |
+
if($level->billing_limit > 1)
|
180 |
+
{
|
181 |
+
$r .= ' for ' . $level->billing_limit . ' more ' . sornot("payment",$level->billing_limit) . '.';
|
182 |
+
}
|
183 |
+
else
|
184 |
+
$r .= '.';
|
185 |
+
|
186 |
+
$r .= '</strong>';
|
187 |
+
}
|
188 |
+
else
|
189 |
+
$r .= '.';
|
190 |
+
|
191 |
+
if($level->trial_limit)
|
192 |
+
{
|
193 |
+
$r .= ' After your initial payment, your first ';
|
194 |
+
if($level->trial_amount == '0.00')
|
195 |
+
{
|
196 |
+
if($level->trial_limit == '1')
|
197 |
+
{
|
198 |
+
$r .= 'payment is Free.';
|
199 |
+
}
|
200 |
+
else
|
201 |
+
{
|
202 |
+
$r .= $level->trial_limit . ' payments are Free.';
|
203 |
+
}
|
204 |
+
}
|
205 |
+
else
|
206 |
+
{
|
207 |
+
$r .= $level->trial_limit.' ' .sornot("payment", $level->trial_limit) . ' will cost ' . $pmpro_currency_symbol . $level->trial_amount . '.';
|
208 |
+
}
|
209 |
+
}
|
210 |
+
|
211 |
+
//taxes?
|
212 |
+
$tax_state = pmpro_getOption("tax_state");
|
213 |
+
$tax_rate = pmpro_getOption("tax_rate");
|
214 |
+
|
215 |
+
if($tax_state && $tax_rate && !pmpro_isLevelFree($level))
|
216 |
+
{
|
217 |
+
$r .= " Customers in " . $tax_state . " will be charged " . round($tax_rate * 100, 2) . "% tax.";
|
218 |
+
}
|
219 |
+
|
220 |
+
if(!$tags)
|
221 |
+
$r = strip_tags($r);
|
222 |
+
|
223 |
+
$r = apply_filters("pmpro_level_cost_text", $r, $level);
|
224 |
+
return $r;
|
225 |
+
}
|
226 |
+
|
227 |
+
function pmpro_getLevelExpiration(&$level)
|
228 |
+
{
|
229 |
+
if($level->expiration_number)
|
230 |
+
{
|
231 |
+
$expiration_text = "Membership expires after " . $level->expiration_number . " " . sornot(strtolower($level->expiration_period), $level->expiration_number) . ".";
|
232 |
+
}
|
233 |
+
else
|
234 |
+
$expiration_text = "";
|
235 |
+
|
236 |
+
$expiration_text = apply_filters("pmpro_level_expiration_text", $expiration_text, $level);
|
237 |
+
return $expiration_text;
|
238 |
+
}
|
239 |
+
|
240 |
+
function pmpro_hideAds()
|
241 |
+
{
|
242 |
+
global $pmpro_display_ads;
|
243 |
+
return !$pmpro_display_ads;
|
244 |
+
}
|
245 |
+
|
246 |
+
function pmpro_displayAds()
|
247 |
+
{
|
248 |
+
global $pmpro_display_ads;
|
249 |
+
return $pmpro_display_ads;
|
250 |
+
}
|
251 |
+
|
252 |
+
function pmpro_next_payment($user_id = NULL)
|
253 |
+
{
|
254 |
+
global $wpdb, $current_user;
|
255 |
+
if(!$user_id)
|
256 |
+
$user_id = $current_user->ID;
|
257 |
+
|
258 |
+
if(!$user_id)
|
259 |
+
return false;
|
260 |
+
|
261 |
+
//when were they last billed
|
262 |
+
$lastdate = $wpdb->get_var("SELECT UNIX_TIMESTAMP(timestamp) as timestamp FROM $wpdb->pmpro_membership_orders WHERE user_id = '" . $user_id . "' ORDER BY timestamp DESC LIMIT 1");
|
263 |
+
|
264 |
+
if($lastdate)
|
265 |
+
{
|
266 |
+
//next payment will be same day, following month
|
267 |
+
$lastmonth = date("n", $lastdate);
|
268 |
+
$lastday = date("j", $lastdate);
|
269 |
+
$lastyear = date("Y", $lastdate);
|
270 |
+
|
271 |
+
$nextmonth = ((int)$lastmonth) + 1;
|
272 |
+
if($nextmonth == 13)
|
273 |
+
{
|
274 |
+
$nextmonth = 1;
|
275 |
+
$nextyear = ((int)$lastyear) + 1;
|
276 |
+
}
|
277 |
+
else
|
278 |
+
$nextyear = $lastyear;
|
279 |
+
|
280 |
+
$daysinnextmonth = date("t", strtotime($nextyear . "-" . $nextmonth . "-1"));
|
281 |
+
|
282 |
+
if($daysinnextmonth < $lastday)
|
283 |
+
{
|
284 |
+
$nextday = $daysinnextmonth;
|
285 |
+
}
|
286 |
+
else
|
287 |
+
$nextday = $lastday;
|
288 |
+
|
289 |
+
return strtotime($nextyear . "-" . $nextmonth . "-" . $nextday);
|
290 |
+
}
|
291 |
+
else
|
292 |
+
{
|
293 |
+
return false;
|
294 |
+
}
|
295 |
+
|
296 |
+
}
|
297 |
+
|
298 |
+
if(!function_exists("last4"))
|
299 |
+
{
|
300 |
+
function last4($t)
|
301 |
+
{
|
302 |
+
return substr($t, strlen($t) - 4, 4);
|
303 |
+
}
|
304 |
+
}
|
305 |
+
|
306 |
+
if(!function_exists("hideCardNumber"))
|
307 |
+
{
|
308 |
+
function hideCardNumber($c, $dashes = true)
|
309 |
+
{
|
310 |
+
if($c)
|
311 |
+
{
|
312 |
+
if($dashes)
|
313 |
+
return "XXXX-XXXX-XXXX-" . substr($c, strlen($c) - 4, 4);
|
314 |
+
else
|
315 |
+
return "XXXXXXXXXXXX" . substr($c, strlen($c) - 4, 4);
|
316 |
+
}
|
317 |
+
else
|
318 |
+
{
|
319 |
+
return "";
|
320 |
+
}
|
321 |
+
}
|
322 |
+
}
|
323 |
+
|
324 |
+
if(!function_exists("cleanPhone"))
|
325 |
+
{
|
326 |
+
function cleanPhone($phone)
|
327 |
+
{
|
328 |
+
//if a + is passed, just pass it along
|
329 |
+
if(strpos($phone, "+") !== false)
|
330 |
+
return $phone;
|
331 |
+
|
332 |
+
//clean the phone
|
333 |
+
$phone = str_replace("-", "", $phone);
|
334 |
+
$phone = str_replace(".", "", $phone);
|
335 |
+
$phone = str_replace("(", "", $phone);
|
336 |
+
$phone = str_replace(")", "", $phone);
|
337 |
+
$phone = str_replace(" ", "", $phone);
|
338 |
+
|
339 |
+
return $phone;
|
340 |
+
}
|
341 |
+
}
|
342 |
+
|
343 |
+
if(!function_exists("formatPhone"))
|
344 |
+
{
|
345 |
+
function formatPhone($phone)
|
346 |
+
{
|
347 |
+
$phone = cleanPhone($phone);
|
348 |
+
|
349 |
+
if(strlen($phone) == 11)
|
350 |
+
return substr($phone, 0, 1) . " (" . substr($phone, 1, 3) . ") " . substr($phone, 4, 3) . "-" . substr($phone, 7, 4);
|
351 |
+
elseif(strlen($phone) == 10)
|
352 |
+
return "(" . substr($phone, 0, 3) . ") " . substr($phone, 3, 3) . "-" . substr($phone, 6, 4);
|
353 |
+
elseif(strlen($phone) == 7)
|
354 |
+
return substr($phone, 0, 3) . "-" . substr($phone, 3, 4);
|
355 |
+
else
|
356 |
+
return $phone;
|
357 |
+
}
|
358 |
+
}
|
359 |
+
|
360 |
+
function pmpro_showRequiresMembershipMessage()
|
361 |
+
{
|
362 |
+
//get the correct message
|
363 |
+
if(is_feed())
|
364 |
+
{
|
365 |
+
$content = pmpro_getOption("rsstext");
|
366 |
+
$content = str_replace("!!levels!!", implode(", ", $post_membership_levels_names), $content);
|
367 |
+
}
|
368 |
+
elseif($current_user->ID)
|
369 |
+
{
|
370 |
+
//not a member
|
371 |
+
$content = pmpro_getOption("nonmembertext");
|
372 |
+
$content = str_replace("!!levels!!", implode(", ", $post_membership_levels_names), $content);
|
373 |
+
}
|
374 |
+
else
|
375 |
+
{
|
376 |
+
//not logged in!
|
377 |
+
$content = pmpro_getOption("notloggedintext");
|
378 |
+
$content = str_replace("!!levels!!", implode(", ", $post_membership_levels_names), $content);
|
379 |
+
}
|
380 |
+
}
|
381 |
+
|
382 |
+
/* pmpro_hasMembershipLevel() checks if the passed user is a member of the passed level
|
383 |
+
*
|
384 |
+
* $level may either be the ID or name of the desired membership_level. (or an array of such)
|
385 |
+
* If $user_id is omitted, the value will be retrieved from $current_user.
|
386 |
+
*
|
387 |
+
* Return values:
|
388 |
+
* Success returns boolean true.
|
389 |
+
* Failure returns a string containing the error message.
|
390 |
+
*/
|
391 |
+
function pmpro_hasMembershipLevel($levels = NULL, $user_id = NULL)
|
392 |
+
{
|
393 |
+
global $current_user, $all_membership_levels, $wpdb;
|
394 |
+
|
395 |
+
$return = false;
|
396 |
+
|
397 |
+
if(empty($user_id)) //no user_id passed, check the current user
|
398 |
+
{
|
399 |
+
$user_id = $current_user->ID;
|
400 |
+
$membership_levels = $current_user->membership_levels;
|
401 |
+
}
|
402 |
+
else //get membership levels for given user
|
403 |
+
{
|
404 |
+
$membership_levels = pmpro_getMembershipLevelsForUser($user_id);
|
405 |
+
}
|
406 |
+
|
407 |
+
if($levels === "0" || $levels === 0) //if 0 was passed, return true if they have no level and false if they have any
|
408 |
+
{
|
409 |
+
$return = empty($membership_levels);
|
410 |
+
}
|
411 |
+
elseif(empty($levels)) //if no level var was passed, we're just checking if they have any level
|
412 |
+
{
|
413 |
+
$return = !empty($membership_levels);
|
414 |
+
}
|
415 |
+
else
|
416 |
+
{
|
417 |
+
if(!is_array($levels)) //make an array out of a single element so we can use the same code
|
418 |
+
{
|
419 |
+
$levels = array($levels);
|
420 |
+
}
|
421 |
+
|
422 |
+
if(empty($membership_levels))
|
423 |
+
{
|
424 |
+
//user has no levels just check if 0 was sent in one of the levels
|
425 |
+
if(in_array(0, $levels) || in_array("0", $levels))
|
426 |
+
$return = true;
|
427 |
+
}
|
428 |
+
else
|
429 |
+
{
|
430 |
+
foreach($levels as $level)
|
431 |
+
{
|
432 |
+
$level_obj = pmpro_getLevel(is_numeric($level) ? abs(intval($level)) : $level); //make sure our level is in a proper format
|
433 |
+
if(empty($level_obj)){continue;} //invalid level
|
434 |
+
$found_level = false;
|
435 |
+
foreach($membership_levels as $membership_level)
|
436 |
+
{
|
437 |
+
if($membership_level->id == $level_obj->id) //found a match
|
438 |
+
{
|
439 |
+
$found_level = true;
|
440 |
+
}
|
441 |
+
}
|
442 |
+
|
443 |
+
if(is_numeric($level) and intval($level) < 0 and !$found_level) //checking for the absence of this level
|
444 |
+
{
|
445 |
+
$return = true;
|
446 |
+
}
|
447 |
+
else if($found_level) //checking for the presence of this level
|
448 |
+
{
|
449 |
+
$return = true;
|
450 |
+
}
|
451 |
+
}
|
452 |
+
}
|
453 |
+
}
|
454 |
+
|
455 |
+
$return = apply_filters("pmpro_has_membership_level", $return, $user_id, $levels);
|
456 |
+
return $return;
|
457 |
+
}
|
458 |
+
|
459 |
+
/* pmpro_changeMembershipLevel() creates or updates the membership level of the given user to the given level.
|
460 |
+
*
|
461 |
+
* $level may either be the ID or name of the desired membership_level.
|
462 |
+
* If $user_id is omitted, the value will be retrieved from $current_user.
|
463 |
+
*
|
464 |
+
* Return values:
|
465 |
+
* Success returns boolean true.
|
466 |
+
* Failure returns boolean false.
|
467 |
+
*/
|
468 |
+
function pmpro_changeMembershipLevel($level, $user_id = NULL)
|
469 |
+
{
|
470 |
+
global $wpdb;
|
471 |
+
global $current_user, $pmpro_error;
|
472 |
+
|
473 |
+
if(empty($user_id))
|
474 |
+
{
|
475 |
+
$user_id = $current_user->ID;
|
476 |
+
}
|
477 |
+
|
478 |
+
if(empty($user_id))
|
479 |
+
{
|
480 |
+
$pmpro_error = "User ID not found.";
|
481 |
+
return false;
|
482 |
+
}
|
483 |
+
|
484 |
+
if(empty($level)) //cancelling membership
|
485 |
+
{
|
486 |
+
$level = 0;
|
487 |
+
}
|
488 |
+
else if(is_array($level))
|
489 |
+
{
|
490 |
+
//custom level
|
491 |
+
}
|
492 |
+
else
|
493 |
+
{
|
494 |
+
$level_obj = pmpro_getLevel($level);
|
495 |
+
if(empty($level_obj))
|
496 |
+
{
|
497 |
+
$pmpro_error = "Invalid level.";
|
498 |
+
return false;
|
499 |
+
}
|
500 |
+
$level = $level_obj->id;
|
501 |
+
}
|
502 |
+
|
503 |
+
|
504 |
+
//if it's a custom level, they're changing
|
505 |
+
if(!is_array($level))
|
506 |
+
{
|
507 |
+
//are they even changing?
|
508 |
+
if(pmpro_hasMembershipLevel($level, $user_id)) {
|
509 |
+
$pmpro_error = "not is changing?";
|
510 |
+
return false; //not changing
|
511 |
+
}
|
512 |
+
}
|
513 |
+
|
514 |
+
$old_levels = pmpro_getMembershipLevelsForUser($user_id);
|
515 |
+
|
516 |
+
$pmpro_cancel_previous_subscriptions = apply_filters("pmpro_cancel_previous_subscriptions", true);
|
517 |
+
if($pmpro_cancel_previous_subscriptions)
|
518 |
+
{
|
519 |
+
//deactivate old memberships (updates pmpro_memberships_users table)
|
520 |
+
if(!empty($old_levels))
|
521 |
+
{
|
522 |
+
foreach($old_levels as $old_level) {
|
523 |
+
$sql = "UPDATE $wpdb->pmpro_memberships_users SET `status`='inactive', `enddate`=NOW() WHERE `id`=".$old_level->subscription_id;
|
524 |
+
if(!$wpdb->query($sql))
|
525 |
+
{
|
526 |
+
$pmpro_error = "Error interacting with database: ".(mysql_errno()?mysql_error():'unavailable');
|
527 |
+
return false;
|
528 |
+
}
|
529 |
+
}
|
530 |
+
}
|
531 |
+
|
532 |
+
//cancel any other subscriptions they have (updates pmpro_membership_orders table)
|
533 |
+
$other_order_ids = $wpdb->get_col("SELECT id FROM $wpdb->pmpro_membership_orders WHERE user_id = '" . $user_id . "' AND status = 'success' ORDER BY id DESC");
|
534 |
+
foreach($other_order_ids as $order_id)
|
535 |
+
{
|
536 |
+
$c_order = new MemberOrder($order_id);
|
537 |
+
$c_order->cancel();
|
538 |
+
}
|
539 |
+
}
|
540 |
+
|
541 |
+
//insert current membership
|
542 |
+
if(!empty($level)) //are we getting a new one or just cancelling the old ones
|
543 |
+
{
|
544 |
+
if(is_array($level))
|
545 |
+
{
|
546 |
+
//make sure the dates are in good formats
|
547 |
+
if($level['startdate'] != "NOW()" && $level['startdate'] != "NULL" && substr($level['startdate'], 0, 1) != "'")
|
548 |
+
$level['startdate'] = "'" . $level['startdate'] . "'";
|
549 |
+
|
550 |
+
if($level['enddate'] != "NOW()" && $level['enddate'] != "NULL" && substr($level['enddate'], 0, 1) != "'")
|
551 |
+
$level['enddate'] = "'" . $level['enddate'] . "'";
|
552 |
+
|
553 |
+
$sql = "INSERT INTO $wpdb->pmpro_memberships_users (user_id, membership_id, code_id, initial_payment, billing_amount, cycle_number, cycle_period, billing_limit, trial_amount, trial_limit, startdate, enddate)
|
554 |
+
VALUES('" . $level['user_id'] . "',
|
555 |
+
'" . $level['membership_id'] . "',
|
556 |
+
'" . intval($level['code_id']) . "',
|
557 |
+
'" . $level['initial_payment'] . "',
|
558 |
+
'" . $level['billing_amount'] . "',
|
559 |
+
'" . $level['cycle_number'] . "',
|
560 |
+
'" . $level['cycle_period'] . "',
|
561 |
+
'" . $level['billing_limit'] . "',
|
562 |
+
'" . $level['trial_amount'] . "',
|
563 |
+
'" . $level['trial_limit'] . "',
|
564 |
+
" . $level['startdate'] . ",
|
565 |
+
" . $level['enddate'] . ")";
|
566 |
+
|
567 |
+
if(!$wpdb->query($sql))
|
568 |
+
{
|
569 |
+
$pmpro_error = "Error interacting with database: ".(mysql_errno()?mysql_error():'unavailable');
|
570 |
+
return false;
|
571 |
+
}
|
572 |
+
}
|
573 |
+
else
|
574 |
+
{
|
575 |
+
$sql = "INSERT INTO $wpdb->pmpro_memberships_users (`membership_id`,`user_id`) VALUES ('" . $level . "','" . $user_id . "')";
|
576 |
+
if(!$wpdb->query($sql))
|
577 |
+
{
|
578 |
+
$pmpro_error = "Error interacting with database: ".(mysql_errno()?mysql_error():'unavailable');
|
579 |
+
return false;
|
580 |
+
}
|
581 |
+
}
|
582 |
+
}
|
583 |
+
|
584 |
+
//get level id
|
585 |
+
if(is_array($level))
|
586 |
+
$level_id = $level['membership_id']; //custom level
|
587 |
+
else
|
588 |
+
$level_id = $level; //just id
|
589 |
+
|
590 |
+
//update user data and call action
|
591 |
+
pmpro_set_current_user();
|
592 |
+
do_action("pmpro_after_change_membership_level", $level_id, $user_id); //$level is the $level_id here
|
593 |
+
return true;
|
594 |
+
}
|
595 |
+
|
596 |
+
/* pmpro_toggleMembershipCategory() creates or deletes a linking entry between the membership level and post category tables.
|
597 |
+
*
|
598 |
+
* $level may either be the ID or name of the desired membership_level.
|
599 |
+
* $category must be a valid post category ID.
|
600 |
+
*
|
601 |
+
* Return values:
|
602 |
+
* Success returns boolean true.
|
603 |
+
* Failure returns a string containing the error message.
|
604 |
+
*/
|
605 |
+
function pmpro_toggleMembershipCategory( $level, $category, $value )
|
606 |
+
{
|
607 |
+
global $wpdb;
|
608 |
+
$category = intval($category);
|
609 |
+
|
610 |
+
if ( ($level = intval($level)) <= 0 )
|
611 |
+
{
|
612 |
+
$safe = addslashes($level);
|
613 |
+
if ( ($level = intval($wpdb->get_var("SELECT id FROM {$wpdb->pmpro_membership_levels} WHERE name = '$safe' LIMIT 1"))) <= 0 )
|
614 |
+
{
|
615 |
+
return "Membership level not found.";
|
616 |
+
}
|
617 |
+
}
|
618 |
+
|
619 |
+
if ( $value )
|
620 |
+
{
|
621 |
+
$sql = "REPLACE INTO {$wpdb->pmpro_memberships_categories} (`membership_id`,`category_id`) VALUES ('$level','$category')";
|
622 |
+
$wpdb->query($sql);
|
623 |
+
if(mysql_errno()) return mysql_error();
|
624 |
+
}
|
625 |
+
else
|
626 |
+
{
|
627 |
+
$sql = "DELETE FROM {$wpdb->pmpro_memberships_categories} WHERE `membership_id` = '$level' AND `category_id` = '$category' LIMIT 1";
|
628 |
+
$wpdb->query($sql);
|
629 |
+
if(mysql_errno()) return mysql_error();
|
630 |
+
}
|
631 |
+
|
632 |
+
return true;
|
633 |
+
}
|
634 |
+
|
635 |
+
/* pmpro_updateMembershipCategories() ensures that all those and only those categories given
|
636 |
+
* are associated with the given membership level.
|
637 |
+
*
|
638 |
+
* $level is a valid membership level ID or name
|
639 |
+
* $categories is an array of post category IDs
|
640 |
+
*
|
641 |
+
* Return values:
|
642 |
+
* Success returns boolean true.
|
643 |
+
* Failure returns a string containing the error message.
|
644 |
+
*/
|
645 |
+
function pmpro_updateMembershipCategories($level, $categories)
|
646 |
+
{
|
647 |
+
global $wpdb;
|
648 |
+
|
649 |
+
if(!is_numeric($level))
|
650 |
+
{
|
651 |
+
$level = $wpdb->get_var("SELECT id FROM $wpdb->pmpro_membership_levels WHERE name = '" . $wpdb->escape($level) . "' LIMIT 1");
|
652 |
+
if(empty($level))
|
653 |
+
{
|
654 |
+
return "Membership level not found.";
|
655 |
+
}
|
656 |
+
}
|
657 |
+
|
658 |
+
// remove all existing links...
|
659 |
+
$sqlQuery = "DELETE FROM $wpdb->pmpro_memberships_categories WHERE `membership_id` = '" . $wpdb->escape($level) . "'";
|
660 |
+
$wpdb->query($sqlQuery);
|
661 |
+
if(mysql_errno()) return mysql_error();
|
662 |
+
|
663 |
+
// add the given links [back?] in...
|
664 |
+
foreach($categories as $cat)
|
665 |
+
{
|
666 |
+
if(is_string($r = pmpro_toggleMembershipCategory( $level, $cat, true)))
|
667 |
+
{
|
668 |
+
//uh oh, error
|
669 |
+
return $r;
|
670 |
+
}
|
671 |
+
}
|
672 |
+
|
673 |
+
//all good
|
674 |
+
return true;
|
675 |
+
}
|
676 |
+
|
677 |
+
/* pmpro_getMembershipCategories() returns the categories for a given level
|
678 |
+
*
|
679 |
+
* $level_id is a valid membership level ID
|
680 |
+
*
|
681 |
+
* Return values:
|
682 |
+
* Success returns boolean true.
|
683 |
+
* Failure returns boolean false.
|
684 |
+
*/
|
685 |
+
function pmpro_getMembershipCategories($level_id)
|
686 |
+
{
|
687 |
+
global $wpdb;
|
688 |
+
$categories = $wpdb->get_results("SELECT c.category_id
|
689 |
+
FROM {$wpdb->pmpro_memberships_categories} AS c
|
690 |
+
WHERE c.membership_id = '" . $level_id . "'", ARRAY_N);
|
691 |
+
|
692 |
+
$returns = array();
|
693 |
+
if(is_array($categories))
|
694 |
+
{
|
695 |
+
foreach($categories as $cat)
|
696 |
+
{
|
697 |
+
$returns[] = $cat;
|
698 |
+
}
|
699 |
+
}
|
700 |
+
return $returns;
|
701 |
+
}
|
702 |
+
|
703 |
+
function pmpro_isAdmin($user_id = NULL)
|
704 |
+
{
|
705 |
+
global $current_user, $wpdb;
|
706 |
+
if(!$user_id)
|
707 |
+
$user_id = $current_user->ID;
|
708 |
+
|
709 |
+
if(!$user_id)
|
710 |
+
return false;
|
711 |
+
|
712 |
+
$admincap = user_can($user_id, "manage_options");
|
713 |
+
if($admincap)
|
714 |
+
return true;
|
715 |
+
else
|
716 |
+
return false;
|
717 |
+
}
|
718 |
+
|
719 |
+
function pmpro_replaceUserMeta($user_id, $meta_keys, $meta_values, $prev_values = NULL)
|
720 |
+
{
|
721 |
+
//expects all arrays for last 3 params or all strings
|
722 |
+
if(!is_array($meta_keys))
|
723 |
+
{
|
724 |
+
$meta_keys = array($meta_keys);
|
725 |
+
$meta_values = array($meta_values);
|
726 |
+
$prev_values = array($prev_values);
|
727 |
+
}
|
728 |
+
|
729 |
+
for($i = 0; $i < count($meta_values); $i++)
|
730 |
+
{
|
731 |
+
if($prev_values[$i])
|
732 |
+
{
|
733 |
+
update_user_meta($user_id, $meta_keys[$i], $meta_values[$i], $prev_values[$i]);
|
734 |
+
}
|
735 |
+
else
|
736 |
+
{
|
737 |
+
$old_value = get_user_meta($user_id, $meta_keys[$i], true);
|
738 |
+
if($old_value)
|
739 |
+
{
|
740 |
+
update_user_meta($user_id, $meta_keys[$i], $meta_values[$i], $old_value);
|
741 |
+
}
|
742 |
+
else
|
743 |
+
{
|
744 |
+
update_user_meta($user_id, $meta_keys[$i], $meta_values[$i]);
|
745 |
+
}
|
746 |
+
}
|
747 |
+
}
|
748 |
+
|
749 |
+
return $i;
|
750 |
+
}
|
751 |
+
|
752 |
+
function pmpro_getMetavalues($query)
|
753 |
+
{
|
754 |
+
global $wpdb;
|
755 |
+
|
756 |
+
$results = $wpdb->get_results($query);
|
757 |
+
foreach($results as $result)
|
758 |
+
{
|
759 |
+
$r->{$result->key} = $result->value;
|
760 |
+
}
|
761 |
+
|
762 |
+
return $r;
|
763 |
+
}
|
764 |
+
|
765 |
+
//function to return the pagination string
|
766 |
+
function pmpro_getPaginationString($page = 1, $totalitems, $limit = 15, $adjacents = 1, $targetpage = "/", $pagestring = "&pn=")
|
767 |
+
{
|
768 |
+
//defaults
|
769 |
+
if(!$adjacents) $adjacents = 1;
|
770 |
+
if(!$limit) $limit = 15;
|
771 |
+
if(!$page) $page = 1;
|
772 |
+
if(!$targetpage) $targetpage = "/";
|
773 |
+
|
774 |
+
//other vars
|
775 |
+
$prev = $page - 1; //previous page is page - 1
|
776 |
+
$next = $page + 1; //next page is page + 1
|
777 |
+
$lastpage = ceil($totalitems / $limit); //lastpage is = total items / items per page, rounded up.
|
778 |
+
$lpm1 = $lastpage - 1; //last page minus 1
|
779 |
+
|
780 |
+
/*
|
781 |
+
Now we apply our rules and draw the pagination object.
|
782 |
+
We're actually saving the code to a variable in case we want to draw it more than once.
|
783 |
+
*/
|
784 |
+
$pagination = "";
|
785 |
+
if($lastpage > 1)
|
786 |
+
{
|
787 |
+
$pagination .= "<div class=\"pmpro_pagination\"";
|
788 |
+
if(!empty($margin) || !empty($padding))
|
789 |
+
{
|
790 |
+
$pagination .= " style=\"";
|
791 |
+
if($margin)
|
792 |
+
$pagination .= "margin: $margin;";
|
793 |
+
if($padding)
|
794 |
+
$pagination .= "padding: $padding;";
|
795 |
+
$pagination .= "\"";
|
796 |
+
}
|
797 |
+
$pagination .= ">";
|
798 |
+
|
799 |
+
//previous button
|
800 |
+
if ($page > 1)
|
801 |
+
$pagination .= "<a href=\"$targetpage$pagestring$prev\">« prev</a>";
|
802 |
+
else
|
803 |
+
$pagination .= "<span class=\"disabled\">« prev</span>";
|
804 |
+
|
805 |
+
//pages
|
806 |
+
if ($lastpage < 7 + ($adjacents * 2)) //not enough pages to bother breaking it up
|
807 |
+
{
|
808 |
+
for ($counter = 1; $counter <= $lastpage; $counter++)
|
809 |
+
{
|
810 |
+
if ($counter == $page)
|
811 |
+
$pagination .= "<span class=\"current\">$counter</span>";
|
812 |
+
else
|
813 |
+
$pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . "\">$counter</a>";
|
814 |
+
}
|
815 |
+
}
|
816 |
+
elseif($lastpage >= 7 + ($adjacents * 2)) //enough pages to hide some
|
817 |
+
{
|
818 |
+
//close to beginning; only hide later pages
|
819 |
+
if($page < 1 + ($adjacents * 3))
|
820 |
+
{
|
821 |
+
for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
|
822 |
+
{
|
823 |
+
if ($counter == $page)
|
824 |
+
$pagination .= "<span class=\"current\">$counter</span>";
|
825 |
+
else
|
826 |
+
$pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . "\">$counter</a>";
|
827 |
+
}
|
828 |
+
$pagination .= "...";
|
829 |
+
$pagination .= "<a href=\"" . $targetpage . $pagestring . $lpm1 . "\">$lpm1</a>";
|
830 |
+
$pagination .= "<a href=\"" . $targetpage . $pagestring . $lastpage . "\">$lastpage</a>";
|
831 |
+
}
|
832 |
+
//in middle; hide some front and some back
|
833 |
+
elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
|
834 |
+
{
|
835 |
+
$pagination .= "<a href=\"" . $targetpage . $pagestring . "1\">1</a>";
|
836 |
+
$pagination .= "<a href=\"" . $targetpage . $pagestring . "2\">2</a>";
|
837 |
+
$pagination .= "...";
|
838 |
+
for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
|
839 |
+
{
|
840 |
+
if ($counter == $page)
|
841 |
+
$pagination .= "<span class=\"current\">$counter</span>";
|
842 |
+
else
|
843 |
+
$pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . "\">$counter</a>";
|
844 |
+
}
|
845 |
+
$pagination .= "...";
|
846 |
+
$pagination .= "<a href=\"" . $targetpage . $pagestring . $lpm1 . "\">$lpm1</a>";
|
847 |
+
$pagination .= "<a href=\"" . $targetpage . $pagestring . $lastpage . "\">$lastpage</a>";
|
848 |
+
}
|
849 |
+
//close to end; only hide early pages
|
850 |
+
else
|
851 |
+
{
|
852 |
+
$pagination .= "<a href=\"" . $targetpage . $pagestring . "1\">1</a>";
|
853 |
+
$pagination .= "<a href=\"" . $targetpage . $pagestring . "2\">2</a>";
|
854 |
+
$pagination .= "...";
|
855 |
+
for ($counter = $lastpage - (1 + ($adjacents * 3)); $counter <= $lastpage; $counter++)
|
856 |
+
{
|
857 |
+
if ($counter == $page)
|
858 |
+
$pagination .= "<span class=\"current\">$counter</span>";
|
859 |
+
else
|
860 |
+
$pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . "\">$counter</a>";
|
861 |
+
}
|
862 |
+
}
|
863 |
+
}
|
864 |
+
|
865 |
+
//next button
|
866 |
+
if ($page < $counter - 1)
|
867 |
+
$pagination .= "<a href=\"" . $targetpage . $pagestring . $next . "\">next »</a>";
|
868 |
+
else
|
869 |
+
$pagination .= "<span class=\"disabled\">next »</span>";
|
870 |
+
$pagination .= "</div>\n";
|
871 |
+
}
|
872 |
+
|
873 |
+
return $pagination;
|
874 |
+
|
875 |
+
}
|
876 |
+
|
877 |
+
function pmpro_calculateInitialPaymentRevenue($s = NULL, $l = NULL)
|
878 |
+
{
|
879 |
+
global $wpdb;
|
880 |
+
|
881 |
+
//if we're limiting users by search
|
882 |
+
if($s || $l)
|
883 |
+
{
|
884 |
+
$user_ids_query = "SELECT u.ID FROM $wpdb->users u LEFT JOIN $wpdb->usermeta um ON u.ID = um.user_id LEFT JOIN $wpdb->pmpro_memberships_users mu ON u.ID = mu.user_id WHERE mu.status = 'active' ";
|
885 |
+
if($s)
|
886 |
+
$user_ids_query .= "AND (u.user_login LIKE '%$s%' OR u.user_email LIKE '%$s%' OR um.meta_value LIKE '%$s%') ";
|
887 |
+
if($l)
|
888 |
+
$user_ids_query .= "AND mu.membership_id = '$l' ";
|
889 |
+
}
|
890 |
+
|
891 |
+
//query to sum initial payments
|
892 |
+
$sqlQuery = "SELECT SUM(initial_payment) FROM $wpdb->pmpro_memberships_users WHERE `status` = 'active' ";
|
893 |
+
if(!empty($user_ids_query))
|
894 |
+
$sqlQuery .= "AND user_id IN(" . $user_ids_query . ") ";
|
895 |
+
|
896 |
+
$total = $wpdb->get_var($sqlQuery);
|
897 |
+
|
898 |
+
return (double)$total;
|
899 |
+
}
|
900 |
+
|
901 |
+
function pmpro_calculateRecurringRevenue($s, $l)
|
902 |
+
{
|
903 |
+
global $wpdb;
|
904 |
+
|
905 |
+
//if we're limiting users by search
|
906 |
+
if($s || $l)
|
907 |
+
{
|
908 |
+
$user_ids_query = "AND user_id IN(SELECT u.ID FROM $wpdb->users u LEFT JOIN $wpdb->usermeta um ON u.ID = um.user_id LEFT JOIN $wpdb->pmpro_memberships_users mu ON u.ID = mu.user_id WHERE mu.status = 'active' ";
|
909 |
+
if($s)
|
910 |
+
$user_ids_query .= "AND (u.user_login LIKE '%$s%' OR u.user_email LIKE '%$s%' OR um.meta_value LIKE '%$s%') ";
|
911 |
+
if($l)
|
912 |
+
$user_ids_query .= "AND mu.membership_id = '$l' ";
|
913 |
+
$user_ids_query .= ")";
|
914 |
+
}
|
915 |
+
else
|
916 |
+
$user_ids_query = "";
|
917 |
+
|
918 |
+
//4 queries to get annual earnings for each cycle period. currently ignoring trial periods and billing limits.
|
919 |
+
$sqlQuery = "
|
920 |
+
SELECT SUM((12/cycle_number)*billing_amount) FROM $wpdb->pmpro_memberships_users WHERE status = 'active' AND cycle_period = 'Month' AND cycle_number <> 12 $user_ids_query
|
921 |
+
UNION
|
922 |
+
SELECT SUM((365/cycle_number)*billing_amount) FROM $wpdb->pmpro_memberships_users WHERE status = 'active' AND cycle_period = 'Day' AND cycle_number <> 365 $user_ids_query
|
923 |
+
UNION
|
924 |
+
SELECT SUM((52/cycle_number)*billing_amount) FROM $wpdb->pmpro_memberships_users WHERE status = 'active' AND cycle_period = 'Week' AND cycle_number <> 52 $user_ids_query
|
925 |
+
UNION
|
926 |
+
SELECT SUM(billing_amount) FROM $wpdb->pmpro_memberships_users WHERE status = 'active' AND cycle_period = 'Year' $user_ids_query
|
927 |
+
";
|
928 |
+
|
929 |
+
$annual_revenues = $wpdb->get_col($sqlQuery);
|
930 |
+
|
931 |
+
$total = 0;
|
932 |
+
foreach($annual_revenues as $r)
|
933 |
+
{
|
934 |
+
$total += $r;
|
935 |
+
}
|
936 |
+
|
937 |
+
return $total;
|
938 |
+
}
|
939 |
+
|
940 |
+
function pmpro_generateUsername($firstname = "", $lastname = "", $email = "")
|
941 |
+
{
|
942 |
+
global $wpdb;
|
943 |
+
|
944 |
+
//try first initial + last name, firstname, lastname
|
945 |
+
$firstname = preg_replace("/[^A-Za-z]/", "", $firstname);
|
946 |
+
$lastname = preg_replace("/[^A-Za-z]/", "", $lastname);
|
947 |
+
if($firstname && $lastname)
|
948 |
+
{
|
949 |
+
$username = substr($firstname, 0, 1) . $lastname;
|
950 |
+
}
|
951 |
+
elseif($firstname)
|
952 |
+
{
|
953 |
+
$username = $firstname;
|
954 |
+
}
|
955 |
+
elseif($lastname)
|
956 |
+
{
|
957 |
+
$username = $lastname;
|
958 |
+
}
|
959 |
+
|
960 |
+
//is it taken?
|
961 |
+
$taken = $wpdb->get_var("SELECT user_login FROM $wpdb->users WHERE user_login = '" . $username . "' LIMIT 1");
|
962 |
+
|
963 |
+
if(!$taken)
|
964 |
+
return $username;
|
965 |
+
|
966 |
+
//try the beginning of the email address
|
967 |
+
$emailparts = explode("@", "email");
|
968 |
+
if(is_array($emailparts))
|
969 |
+
$email = preg_replace("/[^A-Za-z]/", "", $emailparts[0]);
|
970 |
+
|
971 |
+
if($email)
|
972 |
+
{
|
973 |
+
$username = $email;
|
974 |
+
}
|
975 |
+
|
976 |
+
//is this taken? if not, add numbers until it works
|
977 |
+
$taken = true;
|
978 |
+
$count = 0;
|
979 |
+
while($taken)
|
980 |
+
{
|
981 |
+
//add a # to the end
|
982 |
+
if($count)
|
983 |
+
{
|
984 |
+
$username = preg_replace("/[0-9]/", "", $username) . $count;
|
985 |
+
}
|
986 |
+
|
987 |
+
//taken?
|
988 |
+
$taken = $wpdb->get_var("SELECT user_login FROM $wpdb->users WHERE user_login = '" . $username . "' LIMIT 1");
|
989 |
+
|
990 |
+
//increment the number
|
991 |
+
$count++;
|
992 |
+
}
|
993 |
+
|
994 |
+
//must have a good username now
|
995 |
+
return $username;
|
996 |
+
}
|
997 |
+
|
998 |
+
//get a new random code for discount codes
|
999 |
+
function pmpro_getDiscountCode()
|
1000 |
+
{
|
1001 |
+
global $wpdb;
|
1002 |
+
|
1003 |
+
while(empty($code))
|
1004 |
+
{
|
1005 |
+
$scramble = md5(AUTH_KEY . time() . SECURE_AUTH_KEY);
|
1006 |
+
$code = substr($scramble, 0, 10);
|
1007 |
+
$check = $wpdb->get_var("SELECT code FROM $wpdb->pmpro_discount_codes WHERE code = '$code' LIMIT 1");
|
1008 |
+
if($check || is_numeric($code))
|
1009 |
+
$code = NULL;
|
1010 |
+
}
|
1011 |
+
|
1012 |
+
return strtoupper($code);
|
1013 |
+
}
|
1014 |
+
|
1015 |
+
//is a discount code valid
|
1016 |
+
function pmpro_checkDiscountCode($code, $level_id = NULL, $return_errors = false)
|
1017 |
+
{
|
1018 |
+
global $wpdb;
|
1019 |
+
|
1020 |
+
//no code, no code
|
1021 |
+
if(empty($code))
|
1022 |
+
{
|
1023 |
+
if($return_errors)
|
1024 |
+
return array(false, "No code was given to check.");
|
1025 |
+
else
|
1026 |
+
return false;
|
1027 |
+
}
|
1028 |
+
|
1029 |
+
//get code from db
|
1030 |
+
$dbcode = $wpdb->get_row("SELECT *, UNIX_TIMESTAMP(starts) as starts, UNIX_TIMESTAMP(expires) as expires FROM $wpdb->pmpro_discount_codes WHERE code ='" . $code . "' LIMIT 1");
|
1031 |
+
|
1032 |
+
//did we find it?
|
1033 |
+
if(empty($dbcode->id))
|
1034 |
+
{
|
1035 |
+
if($return_errors)
|
1036 |
+
return array(false, "The code could not be found.");
|
1037 |
+
else
|
1038 |
+
return false;
|
1039 |
+
}
|
1040 |
+
|
1041 |
+
//fix the date timestamps
|
1042 |
+
$dbcode->starts = strtotime(date("m/d/Y", $dbcode->starts));
|
1043 |
+
$dbcode->expires = strtotime(date("m/d/Y", $dbcode->expires));
|
1044 |
+
|
1045 |
+
//today
|
1046 |
+
$today = strtotime(date("m/d/Y 00:00:00"));
|
1047 |
+
|
1048 |
+
//has this code started yet?
|
1049 |
+
if(!empty($dbcode->starts) && $dbcode->starts > $today)
|
1050 |
+
{
|
1051 |
+
if($return_errors)
|
1052 |
+
return array(false, "This discount code goes into effect on " . date(get_option('date_format'), $dbcode->starts) . ".");
|
1053 |
+
else
|
1054 |
+
return false;
|
1055 |
+
}
|
1056 |
+
|
1057 |
+
//has this code expired?
|
1058 |
+
if(!empty($dbcode->expires) && $dbcode->expires < $today)
|
1059 |
+
{
|
1060 |
+
if($return_errors)
|
1061 |
+
return array(false, "This discount code expired on " . date(get_option('date_format'), $dbcode->expires) . ".");
|
1062 |
+
else
|
1063 |
+
return false;
|
1064 |
+
}
|
1065 |
+
|
1066 |
+
//have we run out of uses?
|
1067 |
+
if($dbcode->uses > 0)
|
1068 |
+
{
|
1069 |
+
$used = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->pmpro_discount_codes_uses WHERE code_id = '" . $dbcode->id . "'");
|
1070 |
+
if($used >= $dbcode->uses)
|
1071 |
+
{
|
1072 |
+
if($return_errors)
|
1073 |
+
return array(false, "This discount code is no longer valid.");
|
1074 |
+
else
|
1075 |
+
return false;
|
1076 |
+
}
|
1077 |
+
}
|
1078 |
+
|
1079 |
+
//if a level was passed check if this code applies
|
1080 |
+
$pmpro_check_discount_code_levels = apply_filters("pmpro_check_discount_code_levels", true, $dbcode->id);
|
1081 |
+
if(!empty($level_id) && $pmpro_check_discount_code_levels)
|
1082 |
+
{
|
1083 |
+
$code_level = $wpdb->get_row("SELECT l.id, cl.*, l.name, l.description, l.allow_signups FROM $wpdb->pmpro_discount_codes_levels cl LEFT JOIN $wpdb->pmpro_membership_levels l ON cl.level_id = l.id WHERE cl.code_id = '" . $dbcode->id . "' AND cl.level_id = '" . $level_id . "' LIMIT 1");
|
1084 |
+
|
1085 |
+
if(empty($code_level))
|
1086 |
+
{
|
1087 |
+
if(!empty($return_errors))
|
1088 |
+
return array(false, "This code does not apply to this membership level.");
|
1089 |
+
else
|
1090 |
+
return false;
|
1091 |
+
}
|
1092 |
+
}
|
1093 |
+
|
1094 |
+
//guess we're all good
|
1095 |
+
if(!empty($return_errors))
|
1096 |
+
return array(true, "This discount code is okay.");
|
1097 |
+
else
|
1098 |
+
return true;
|
1099 |
+
}
|
1100 |
+
|
1101 |
+
function pmpro_no_quotes($s, $quotes = array("'", '"'))
|
1102 |
+
{
|
1103 |
+
return str_replace($quotes, "", $s);
|
1104 |
+
}
|
1105 |
+
|
1106 |
+
//from: http://www.php.net/manual/en/function.implode.php#86845
|
1107 |
+
function pmpro_implodeToEnglish($array)
|
1108 |
+
{
|
1109 |
+
// sanity check
|
1110 |
+
if (!$array || !count ($array))
|
1111 |
+
return '';
|
1112 |
+
|
1113 |
+
// get last element
|
1114 |
+
$last = array_pop ($array);
|
1115 |
+
|
1116 |
+
// if it was the only element - return it
|
1117 |
+
if (!count ($array))
|
1118 |
+
return $last;
|
1119 |
+
|
1120 |
+
return implode (', ', $array).' and '.$last;
|
1121 |
+
}
|
1122 |
+
|
1123 |
+
//from yoast wordpress seo
|
1124 |
+
function pmpro_text_limit( $text, $limit, $finish = '…')
|
1125 |
+
{
|
1126 |
+
if( strlen( $text ) > $limit ) {
|
1127 |
+
$text = substr( $text, 0, $limit );
|
1128 |
+
$text = substr( $text, 0, - ( strlen( strrchr( $text,' ') ) ) );
|
1129 |
+
$text .= $finish;
|
1130 |
+
}
|
1131 |
+
return $text;
|
1132 |
+
}
|
1133 |
+
|
1134 |
+
/* pmpro_getMembershipLevelForUser() returns the first active membership level for a user
|
1135 |
+
*
|
1136 |
+
* If $user_id is omitted, the value will be retrieved from $current_user.
|
1137 |
+
*
|
1138 |
+
* Return values:
|
1139 |
+
* Success returns the level object.
|
1140 |
+
* Failure returns false.
|
1141 |
+
*/
|
1142 |
+
function pmpro_getMembershipLevelForUser($user_id = NULL)
|
1143 |
+
{
|
1144 |
+
if(empty($user_id))
|
1145 |
+
{
|
1146 |
+
global $current_user;
|
1147 |
+
$user_id = $current_user->ID;
|
1148 |
+
}
|
1149 |
+
|
1150 |
+
if(empty($user_id))
|
1151 |
+
{
|
1152 |
+
return false;
|
1153 |
+
}
|
1154 |
+
|
1155 |
+
global $all_membership_levels;
|
1156 |
+
|
1157 |
+
if(isset($all_membership_levels[$user_id]))
|
1158 |
+
{
|
1159 |
+
return $all_membership_levels[$user_id];
|
1160 |
+
}
|
1161 |
+
else
|
1162 |
+
{
|
1163 |
+
global $wpdb;
|
1164 |
+
$all_membership_levels[$user_id] = $wpdb->get_row("SELECT
|
1165 |
+
l.id AS ID,
|
1166 |
+
l.id as id,
|
1167 |
+
mu.id as subscription_id,
|
1168 |
+
l.name AS name,
|
1169 |
+
l.description,
|
1170 |
+
l.expiration_number,
|
1171 |
+
l.expiration_period,
|
1172 |
+
mu.initial_payment,
|
1173 |
+
mu.billing_amount,
|
1174 |
+
mu.cycle_number,
|
1175 |
+
mu.cycle_period,
|
1176 |
+
mu.billing_limit,
|
1177 |
+
mu.trial_amount,
|
1178 |
+
mu.trial_limit,
|
1179 |
+
mu.code_id as code_id,
|
1180 |
+
UNIX_TIMESTAMP(startdate) as startdate,
|
1181 |
+
UNIX_TIMESTAMP(enddate) as enddate
|
1182 |
+
FROM {$wpdb->pmpro_membership_levels} AS l
|
1183 |
+
JOIN {$wpdb->pmpro_memberships_users} AS mu ON (l.id = mu.membership_id)
|
1184 |
+
WHERE mu.user_id = $user_id AND mu.status = 'active'
|
1185 |
+
LIMIT 1");
|
1186 |
+
return $all_membership_levels[$user_id];
|
1187 |
+
}
|
1188 |
+
}
|
1189 |
+
|
1190 |
+
/* pmpro_getMembershipLevelsForUser() returns the membership levels for a user
|
1191 |
+
*
|
1192 |
+
* If $user_id is omitted, the value will be retrieved from $current_user.
|
1193 |
+
* By default it only includes actvie memberships.
|
1194 |
+
*
|
1195 |
+
* Return values:
|
1196 |
+
* Success returns an array of level objects.
|
1197 |
+
* Failure returns false.
|
1198 |
+
*/
|
1199 |
+
function pmpro_getMembershipLevelsForUser($user_id = NULL, $include_inactive = false)
|
1200 |
+
{
|
1201 |
+
if(empty($user_id))
|
1202 |
+
{
|
1203 |
+
global $current_user;
|
1204 |
+
$user_id = $current_user->ID;
|
1205 |
+
}
|
1206 |
+
|
1207 |
+
if(empty($user_id))
|
1208 |
+
{
|
1209 |
+
return false;
|
1210 |
+
}
|
1211 |
+
|
1212 |
+
global $wpdb;
|
1213 |
+
return $wpdb->get_results("SELECT
|
1214 |
+
l.id AS ID,
|
1215 |
+
l.id as id,
|
1216 |
+
mu.id as subscription_id,
|
1217 |
+
l.name,
|
1218 |
+
l.description,
|
1219 |
+
l.expiration_number,
|
1220 |
+
l.expiration_period,
|
1221 |
+
mu.initial_payment,
|
1222 |
+
mu.billing_amount,
|
1223 |
+
mu.cycle_number,
|
1224 |
+
mu.cycle_period,
|
1225 |
+
mu.billing_limit,
|
1226 |
+
mu.trial_amount,
|
1227 |
+
mu.trial_limit,
|
1228 |
+
mu.code_id as code_id,
|
1229 |
+
UNIX_TIMESTAMP(startdate) as startdate,
|
1230 |
+
UNIX_TIMESTAMP(enddate) as enddate
|
1231 |
+
FROM {$wpdb->pmpro_membership_levels} AS l
|
1232 |
+
JOIN {$wpdb->pmpro_memberships_users} AS mu ON (l.id = mu.membership_id)
|
1233 |
+
WHERE mu.user_id = $user_id".($include_inactive?"":" AND mu.status = 'active'"));
|
1234 |
+
}
|
1235 |
+
|
1236 |
+
/* pmpro_getLevel() returns the level object for a level
|
1237 |
+
*
|
1238 |
+
* $level may be the level id or name
|
1239 |
+
*
|
1240 |
+
* Return values:
|
1241 |
+
* Success returns the level object.
|
1242 |
+
* Failure returns false.
|
1243 |
+
*/
|
1244 |
+
function pmpro_getLevel($level)
|
1245 |
+
{
|
1246 |
+
global $pmpro_levels;
|
1247 |
+
|
1248 |
+
if(is_object($level) && !empty($level->id))
|
1249 |
+
$level = $level->id;
|
1250 |
+
|
1251 |
+
//was a name passed? (Todo: make sure level names have at least one non-numeric character.
|
1252 |
+
if(is_numeric($level))
|
1253 |
+
{
|
1254 |
+
$level_id = intval($level);
|
1255 |
+
if(isset($pmpro_levels[$level_id]))
|
1256 |
+
{
|
1257 |
+
return $pmpro_levels[$level_id];
|
1258 |
+
}
|
1259 |
+
else
|
1260 |
+
{
|
1261 |
+
global $wpdb;
|
1262 |
+
$pmpro_levels[$level_id] = $wpdb->get_row("SELECT * FROM $wpdb->pmpro_membership_levels WHERE id = '" . $level_id . "' LIMIT 1");
|
1263 |
+
return $pmpro_levels[$level_id];
|
1264 |
+
}
|
1265 |
+
}
|
1266 |
+
else
|
1267 |
+
{
|
1268 |
+
global $wpdb;
|
1269 |
+
$level_obj = $wpdb->get_row("SELECT * FROM $wpdb->pmpro_membership_levels WHERE name = '" . $level . "' LIMIT 1");
|
1270 |
+
$level_id = $level->ID;
|
1271 |
+
$pmpro_levels[$level_id] = $level_obj;
|
1272 |
+
return $pmpro_levels[$level_id];
|
1273 |
+
}
|
1274 |
+
}
|
1275 |
+
|
1276 |
+
/*
|
1277 |
+
Function to populate pmpro_levels with all levels. We query the DB every time just to be sure we have the latest.
|
1278 |
+
This should be called if you want to be sure you get all levels as $pmpro_levels may only have a subset of levels.
|
1279 |
+
*/
|
1280 |
+
function pmpro_getAllLevels($include_hidden = false)
|
1281 |
+
{
|
1282 |
+
global $pmpro_levels, $wpdb;
|
1283 |
+
|
1284 |
+
//build query
|
1285 |
+
$sqlQuery = "SELECT * FROM $wpdb->pmpro_membership_levels ";
|
1286 |
+
if(!$include_hidden)
|
1287 |
+
$sqlQuery .= " WHERE allow_signups = 1 ORDER BY id";
|
1288 |
+
|
1289 |
+
//get levels from the DB
|
1290 |
+
$raw_levels = $wpdb->get_results($sqlQuery);
|
1291 |
+
|
1292 |
+
//lets put them into an array where the key is the id of the level
|
1293 |
+
$pmpro_levels = array();
|
1294 |
+
foreach($raw_levels as $raw_level)
|
1295 |
+
{
|
1296 |
+
$pmpro_levels[$raw_level->id] = $raw_level;
|
1297 |
+
}
|
1298 |
+
|
1299 |
+
return $pmpro_levels;
|
1300 |
+
}
|
1301 |
+
|
1302 |
+
function pmpro_getCheckoutButton($level_id, $button_text = NULL, $classes = NULL)
|
1303 |
+
{
|
1304 |
+
if(empty($button_text))
|
1305 |
+
$button_text = "Sign Up for !!name!! Now";
|
1306 |
+
|
1307 |
+
if(empty($classes))
|
1308 |
+
$classes = "btn btn-primary";
|
1309 |
+
|
1310 |
+
if(empty($level_id))
|
1311 |
+
$r = "Please specify a level id.";
|
1312 |
+
else
|
1313 |
+
{
|
1314 |
+
//get level
|
1315 |
+
$level = pmpro_getLevel($level_id);
|
1316 |
+
|
1317 |
+
//replace vars
|
1318 |
+
$replacements = array(
|
1319 |
+
"!!id!!" => $level->id,
|
1320 |
+
"!!name!!" => $level->name,
|
1321 |
+
"!!description!!" => $level->description,
|
1322 |
+
"!!confirmation!!" => $level->confirmation,
|
1323 |
+
"!!initial_payment!!" => $level->initial_payment,
|
1324 |
+
"!!billing_amount!!" => $level->billing_amount,
|
1325 |
+
"!!cycle_number!!" => $level->cycle_number,
|
1326 |
+
"!!cycle_period!!" => $level->cycle_period,
|
1327 |
+
"!!billing_limit!!" => $level->billing_limit,
|
1328 |
+
"!!trial_amount!!" => $level->trial_amount,
|
1329 |
+
"!!trial_limit!!" => $level->trial_limit,
|
1330 |
+
"!!expiration_number!!" => $level->expiration_number,
|
1331 |
+
"!!expiration_period!!" => $level->expiration_period
|
1332 |
+
);
|
1333 |
+
$button_text = str_replace(array_keys($replacements), $replacements, $button_text);
|
1334 |
+
|
1335 |
+
//button text
|
1336 |
+
$r = "<a href=\"" . pmpro_url("checkout", "?level=" . $level_id) . "\" class=\"" . $classes . "\">" . $button_text . "</a>";
|
1337 |
+
}
|
1338 |
+
return $r;
|
1339 |
+
}
|
1340 |
+
|
1341 |
+
/**
|
1342 |
+
* Get the "domain" from a URL. By domain, we mean the host name, minus any subdomains. So just the domain and TLD.
|
1343 |
+
*
|
1344 |
+
* @param string $url The URL to parse. (generally pass site_url() in WP)
|
1345 |
+
* @return string The domain.
|
1346 |
+
*/
|
1347 |
+
function pmpro_getDomainFromURL($url = NULL)
|
1348 |
+
{
|
1349 |
+
$domainparts = parse_url($url);
|
1350 |
+
$domainparts = explode(".", $domainparts['host']);
|
1351 |
+
if(count($domainparts) > 1)
|
1352 |
+
{
|
1353 |
+
//check for ips
|
1354 |
+
$isip = true;
|
1355 |
+
foreach($domainparts as $part)
|
1356 |
+
{
|
1357 |
+
if(!is_numeric($part))
|
1358 |
+
{
|
1359 |
+
$isip = false;
|
1360 |
+
break;
|
1361 |
+
}
|
1362 |
+
}
|
1363 |
+
|
1364 |
+
if($isip)
|
1365 |
+
{
|
1366 |
+
//ip, e.g. 127.1.1.1
|
1367 |
+
$domain = implode(".", $domainparts);
|
1368 |
+
}
|
1369 |
+
else
|
1370 |
+
{
|
1371 |
+
//www.something.com, etc.
|
1372 |
+
$domain = $domainparts[count($domainparts)-2] . "." . $domainparts[count($domainparts)-1];
|
1373 |
+
}
|
1374 |
+
}
|
1375 |
+
else
|
1376 |
+
{
|
1377 |
+
//localhost or another single word domain
|
1378 |
+
$domain = $domainparts[0];
|
1379 |
+
}
|
1380 |
+
|
1381 |
+
return $domain;
|
1382 |
+
}
|
1383 |
+
|
1384 |
+
/*
|
1385 |
+
Get a member's start date... either in general or for a specific level_id.
|
1386 |
+
*/
|
1387 |
+
if(!function_exists("pmpro_getMemberStartdate"))
|
1388 |
+
{
|
1389 |
+
function pmpro_getMemberStartdate($user_id = NULL, $level_id = 0)
|
1390 |
+
{
|
1391 |
+
if(empty($user_id))
|
1392 |
+
{
|
1393 |
+
global $current_user;
|
1394 |
+
$user_id = $current_user->ID;
|
1395 |
+
}
|
1396 |
+
|
1397 |
+
global $pmpro_startdates; //for cache
|
1398 |
+
if(empty($pmpro_startdates[$user_id][$level_id]))
|
1399 |
+
{
|
1400 |
+
global $wpdb;
|
1401 |
+
|
1402 |
+
if(!empty($level_id))
|
1403 |
+
$sqlQuery = "SELECT UNIX_TIMESTAMP(startdate) FROM $wpdb->pmpro_memberships_users WHERE status = 'active' AND membership_id IN(" . $wpdb->escape($level_id) . ") AND user_id = '" . $user_id . "' ORDER BY id LIMIT 1";
|
1404 |
+
else
|
1405 |
+
$sqlQuery = "SELECT UNIX_TIMESTAMP(startdate) FROM $wpdb->pmpro_memberships_users WHERE status = 'active' AND user_id = '" . $user_id . "' ORDER BY id LIMIT 1";
|
1406 |
+
|
1407 |
+
$startdate = $wpdb->get_var($sqlQuery);
|
1408 |
+
|
1409 |
+
$pmpro_startdates[$user_id][$level_id] = $startdate;
|
1410 |
+
}
|
1411 |
+
|
1412 |
+
return $pmpro_startdates[$user_id][$level_id];
|
1413 |
+
}
|
1414 |
+
}
|
1415 |
+
|
1416 |
+
/*
|
1417 |
+
How long has this member been a member
|
1418 |
+
*/
|
1419 |
+
if(!function_exists("pmpro_getMemberDays"))
|
1420 |
+
{
|
1421 |
+
function pmpro_getMemberDays($user_id = NULL, $level_id = 0)
|
1422 |
+
{
|
1423 |
+
if(empty($user_id))
|
1424 |
+
{
|
1425 |
+
global $current_user;
|
1426 |
+
$user_id = $current_user->ID;
|
1427 |
+
}
|
1428 |
+
|
1429 |
+
global $pmpro_member_days;
|
1430 |
+
if(empty($pmpro_member_days[$user_id][$level_id]))
|
1431 |
+
{
|
1432 |
+
$startdate = pmpro_getMemberStartdate($user_id, $level_id);
|
1433 |
+
|
1434 |
+
$now = time();
|
1435 |
+
$days = ($now - $startdate)/3600/24;
|
1436 |
+
|
1437 |
+
$pmpro_member_days[$user_id][$level_id] = $days;
|
1438 |
+
}
|
1439 |
+
|
1440 |
+
return $pmpro_member_days[$user_id][$level_id];
|
1441 |
+
}
|
1442 |
+
}
|
1443 |
+
|
1444 |
+
//the start of a message handling script
|
1445 |
+
function pmpro_setMessage($message, $type, $force = false)
|
1446 |
+
{
|
1447 |
+
global $pmpro_msg, $pmpro_msgt;
|
1448 |
+
|
1449 |
+
//for now, we only show the first message generated
|
1450 |
+
if($force || empty($pmpro_msg))
|
1451 |
+
{
|
1452 |
+
$pmpro_msg = $message;
|
1453 |
+
$pmpro_msgt = $type;
|
1454 |
+
}
|
1455 |
+
}
|
1456 |
+
|
1457 |
+
//used in class definitions for input fields to see if there was an error
|
1458 |
+
function pmpro_getClassForField($field)
|
1459 |
+
{
|
1460 |
+
global $pmpro_error_fields, $pmpro_required_billing_fields, $pmpro_required_user_fields;
|
1461 |
+
$classes = array();
|
1462 |
+
|
1463 |
+
//error on this field?
|
1464 |
+
if(in_array($field, $pmpro_error_fields))
|
1465 |
+
{
|
1466 |
+
$classes[] = "pmpro_error";
|
1467 |
+
}
|
1468 |
+
|
1469 |
+
$required_fields = array_merge(array_keys($pmpro_required_billing_fields), array_keys($pmpro_required_user_fields));
|
1470 |
+
|
1471 |
+
//required?
|
1472 |
+
if(in_array($field, $required_fields))
|
1473 |
+
{
|
1474 |
+
$classes[] = "pmpro_required";
|
1475 |
+
}
|
1476 |
+
|
1477 |
+
$classes = apply_filters("pmpro_field_classes", $classes, $field);
|
1478 |
+
|
1479 |
+
if(!empty($classes))
|
1480 |
+
return implode(" ", $classes);
|
1481 |
+
else
|
1482 |
+
return "";
|
1483 |
+
}
|
1484 |
+
|
1485 |
+
//get a var from $_GET or $_POST
|
1486 |
+
function pmpro_getParam($index, $method = "REQUEST", $default = "")
|
1487 |
+
{
|
1488 |
+
if($method == "REQUEST")
|
1489 |
+
{
|
1490 |
+
if(!empty($_REQUEST[$index]))
|
1491 |
+
return $_REQUEST[$index];
|
1492 |
+
}
|
1493 |
+
elseif($method == "POST")
|
1494 |
+
{
|
1495 |
+
if(!empty($_POST[$index]))
|
1496 |
+
return $_POST[$index];
|
1497 |
+
}
|
1498 |
+
elseif($method == "GET")
|
1499 |
+
{
|
1500 |
+
if(!empty($_GET[$index]))
|
1501 |
+
return $_GET[$index];
|
1502 |
+
}
|
1503 |
+
|
1504 |
+
return $default;
|
1505 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/https.php
DELETED
@@ -1,185 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Code related to HTTPS/SSL
|
4 |
-
*/
|
5 |
-
|
6 |
-
//this function checks if we have set the $isapage variable, and if so prevents WP from sending a 404
|
7 |
-
function pmpro_status_filter($s)
|
8 |
-
{
|
9 |
-
global $isapage;
|
10 |
-
if($isapage && strpos($s, "404"))
|
11 |
-
return false; //don't send the 404
|
12 |
-
else
|
13 |
-
return $s;
|
14 |
-
}
|
15 |
-
|
16 |
-
//filters links/etc to add HTTPS to URL if needed
|
17 |
-
function pmpro_https_filter($s)
|
18 |
-
{
|
19 |
-
global $besecure;
|
20 |
-
$besecure = apply_filters('pmpro_besecure', $besecure);
|
21 |
-
|
22 |
-
if($besecure || is_ssl())
|
23 |
-
return str_replace("http:", "https:", $s);
|
24 |
-
else
|
25 |
-
return str_replace("https:", "http:", $s);
|
26 |
-
}
|
27 |
-
add_filter('status_header', 'pmpro_status_filter');
|
28 |
-
add_filter('bloginfo_url', 'pmpro_https_filter');
|
29 |
-
add_filter('wp_list_pages', 'pmpro_https_filter');
|
30 |
-
add_filter('option_home', 'pmpro_https_filter');
|
31 |
-
add_filter('option_siteurl', 'pmpro_https_filter');
|
32 |
-
add_filter('logout_url', 'pmpro_https_filter');
|
33 |
-
add_filter('login_url', 'pmpro_https_filter');
|
34 |
-
add_filter('home_url', 'pmpro_https_filter');
|
35 |
-
|
36 |
-
//this function sets the besecure global which may be used in early code
|
37 |
-
/*
|
38 |
-
function pmpro_besecure_set()
|
39 |
-
{
|
40 |
-
global $besecure;
|
41 |
-
if(force_ssl_admin() || force_ssl_login() || is_ssl())
|
42 |
-
$besecure = true;
|
43 |
-
|
44 |
-
$besecure = apply_filters("pmpro_besecure", $besecure);
|
45 |
-
}
|
46 |
-
add_action('init', 'pmpro_besecure_set', 2);
|
47 |
-
*/
|
48 |
-
|
49 |
-
//this function updates the besecure global with post data and redirects if needed
|
50 |
-
function pmpro_besecure()
|
51 |
-
{
|
52 |
-
global $besecure, $post;
|
53 |
-
|
54 |
-
//check the post option
|
55 |
-
if(!is_admin() && !empty($post->ID) && !$besecure)
|
56 |
-
$besecure = get_post_meta($post->ID, "besecure", true);
|
57 |
-
|
58 |
-
//if forcing ssl on admin, be secure in admin and login page
|
59 |
-
if(!$besecure && force_ssl_admin() && (is_admin() || pmpro_is_login_page()))
|
60 |
-
$besecure = true;
|
61 |
-
|
62 |
-
//if forcing ssl on login, be secure on the login page
|
63 |
-
if(!$besecure && force_ssl_login() && pmpro_is_login_page())
|
64 |
-
$besecure = true;
|
65 |
-
|
66 |
-
$besecure = apply_filters("pmpro_besecure", $besecure);
|
67 |
-
|
68 |
-
$use_ssl = pmpro_getOption("use_ssl");
|
69 |
-
if($use_ssl == 1)
|
70 |
-
{
|
71 |
-
if($besecure && (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == "off" || $_SERVER['HTTPS'] == "false"))
|
72 |
-
{
|
73 |
-
//need to be secure
|
74 |
-
wp_redirect("https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
|
75 |
-
exit;
|
76 |
-
}
|
77 |
-
elseif(!$besecure && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != "off" && $_SERVER['HTTPS'] != "false")
|
78 |
-
{
|
79 |
-
//don't need to be secure
|
80 |
-
wp_redirect("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
|
81 |
-
exit;
|
82 |
-
}
|
83 |
-
}
|
84 |
-
}
|
85 |
-
add_action('wp', 'pmpro_besecure', 2);
|
86 |
-
add_action('login_init', 'pmpro_besecure', 2);
|
87 |
-
|
88 |
-
//JavaScript SSL redirect
|
89 |
-
function pmpro_ssl_javascript_redirect()
|
90 |
-
{
|
91 |
-
global $besecure;
|
92 |
-
$use_ssl = pmpro_getOption("use_ssl");
|
93 |
-
if(!is_admin() && $use_ssl == 2)
|
94 |
-
{
|
95 |
-
if($besecure)
|
96 |
-
{
|
97 |
-
?>
|
98 |
-
<script lang="JavaScript">
|
99 |
-
//needs to be secure
|
100 |
-
if (window.location.protocol != "https:")
|
101 |
-
window.location.href = "https:" + window.location.href.substring(window.location.protocol.length);
|
102 |
-
</script>
|
103 |
-
<?php
|
104 |
-
}
|
105 |
-
else
|
106 |
-
{
|
107 |
-
?>
|
108 |
-
<script lang="JavaScript">
|
109 |
-
//should be over http
|
110 |
-
if (window.location.protocol != "http:")
|
111 |
-
window.location.href = "http:" + window.location.href.substring(window.location.protocol.length);
|
112 |
-
</script>
|
113 |
-
<?php
|
114 |
-
}
|
115 |
-
}
|
116 |
-
}
|
117 |
-
add_action('wp_print_scripts', 'pmpro_ssl_javascript_redirect');
|
118 |
-
|
119 |
-
//If the site URL starts with https:, then force SSL/besecure to true. (Added 1.5.2)
|
120 |
-
function pmpro_check_site_url_for_https($besecure)
|
121 |
-
{
|
122 |
-
global $wpdb, $pmpro_siteurl;
|
123 |
-
|
124 |
-
//need to get this from the database because we filter get_option
|
125 |
-
if(empty($pmpro_siteurl))
|
126 |
-
$pmpro_siteurl = $wpdb->get_var("SELECT option_value FROM $wpdb->options WHERE option_name = 'siteurl' LIMIT 1");
|
127 |
-
|
128 |
-
//entire site is over https?
|
129 |
-
if(strpos($pmpro_siteurl, "https:") !== false)
|
130 |
-
$besecure = true;
|
131 |
-
|
132 |
-
return $besecure;
|
133 |
-
}
|
134 |
-
add_filter("pmpro_besecure", "pmpro_check_site_url_for_https");
|
135 |
-
|
136 |
-
//capturing case where a user links to https admin without admin over https
|
137 |
-
function pmpro_admin_https_handler()
|
138 |
-
{
|
139 |
-
if(!empty($_SERVER['HTTPS']))
|
140 |
-
{
|
141 |
-
if($_SERVER['HTTPS'] && $_SERVER['HTTPS'] != "off" && $_SERVER['HTTPS'] != "false" && is_admin())
|
142 |
-
{
|
143 |
-
if(substr(get_option("siteurl"), 0, 5) == "http:" && !force_ssl_admin())
|
144 |
-
{
|
145 |
-
//need to redirect to non https
|
146 |
-
wp_redirect("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
|
147 |
-
exit;
|
148 |
-
}
|
149 |
-
}
|
150 |
-
}
|
151 |
-
}
|
152 |
-
add_action('init', 'pmpro_admin_https_handler');
|
153 |
-
|
154 |
-
/*
|
155 |
-
This code is for the "nuke" option to make URLs secure on secure pages.
|
156 |
-
*/
|
157 |
-
function pmpro_NuclearHTTPS()
|
158 |
-
{
|
159 |
-
//did they choose the option?
|
160 |
-
$nuking = pmpro_getOption("nuclear_HTTPS");
|
161 |
-
if(!empty($nuking))
|
162 |
-
{
|
163 |
-
ob_start("pmpro_replaceURLsInBuffer");
|
164 |
-
}
|
165 |
-
}
|
166 |
-
add_action("init", "pmpro_NuclearHTTPS");
|
167 |
-
|
168 |
-
function pmpro_replaceURLsInBuffer($buffer)
|
169 |
-
{
|
170 |
-
global $besecure;
|
171 |
-
|
172 |
-
//only swap URLs if this page is secure
|
173 |
-
if($besecure)
|
174 |
-
{
|
175 |
-
/*
|
176 |
-
okay swap out all links like these:
|
177 |
-
* http://domain.com
|
178 |
-
* http://anysubdomain.domain.com
|
179 |
-
* http://any.number.of.sub.domains.domain.com
|
180 |
-
*/
|
181 |
-
$buffer = preg_replace("/http\:\/\/([a-zA-Z0-9\.\-]*" . str_replace(".", "\.", PMPRO_DOMAIN) . ")/i", "https://$1", $buffer);
|
182 |
-
}
|
183 |
-
|
184 |
-
return $buffer;
|
185 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/init.php
DELETED
@@ -1,240 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Code that runs on the init, set_current_user, or wp hooks to setup PMPro
|
4 |
-
*/
|
5 |
-
//init code
|
6 |
-
function pmpro_init()
|
7 |
-
{
|
8 |
-
require_once(PMPRO_DIR . "/includes/countries.php");
|
9 |
-
require_once(PMPRO_DIR . "/includes/states.php");
|
10 |
-
require_once(PMPRO_DIR . "/includes/currencies.php");
|
11 |
-
|
12 |
-
wp_enqueue_script('ssmemberships_js', plugins_url('js/paid-memberships-pro.js',dirname(__FILE__) ), array('jquery'));
|
13 |
-
|
14 |
-
if(is_admin())
|
15 |
-
{
|
16 |
-
$admin_css_rtl = false;
|
17 |
-
if(file_exists(get_stylesheet_directory() . "/paid-memberships-pro/css/admin.css")) {
|
18 |
-
$admin_css = get_stylesheet_directory_uri() . "/paid-memberships-pro/css/admin.css";
|
19 |
-
if( is_rtl() && file_exists(get_stylesheet_directory() . "/paid-memberships-pro/css/admin-rtl.css") ) {
|
20 |
-
$admin_css_rtl = get_stylesheet_directory_uri() . "/paid-memberships-pro/css/admin-rtl.css";
|
21 |
-
}
|
22 |
-
} elseif(file_exists(get_template_directory() . "/paid-memberships-pro/admin.css")) {
|
23 |
-
$admin_css = get_template_directory_uri() . "/paid-memberships-pro/admin.css";
|
24 |
-
if( is_rtl() && file_exists(get_template_directory() . "/paid-memberships-pro/css/admin-rtl.css") ) {
|
25 |
-
$admin_css_rtl = get_template_directory_uri() . "/paid-memberships-pro/css/admin-rtl.css";
|
26 |
-
}
|
27 |
-
} else {
|
28 |
-
$admin_css = plugins_url('css/admin.css',dirname(__FILE__) );
|
29 |
-
if( is_rtl() ) {
|
30 |
-
$admin_css_rtl = plugins_url('css/admin-rtl.css',dirname(__FILE__) );
|
31 |
-
}
|
32 |
-
}
|
33 |
-
wp_enqueue_style('pmpro_admin', $admin_css, array(), PMPRO_VERSION, "screen");
|
34 |
-
if( $admin_css_rtl ) {
|
35 |
-
wp_enqueue_style('pmpro_admin_rtl', $admin_css_rtl, array(), PMPRO_VERSION, "screen");
|
36 |
-
}
|
37 |
-
}
|
38 |
-
else
|
39 |
-
{
|
40 |
-
$frontend_css_rtl = false;
|
41 |
-
if(file_exists(get_stylesheet_directory() . "/paid-memberships-pro/css/frontend.css")) {
|
42 |
-
$frontend_css = get_stylesheet_directory_uri() . "/paid-memberships-pro/css/frontend.css";
|
43 |
-
if( is_rtl() && file_exists(get_stylesheet_directory() . "/paid-memberships-pro/css/frontend-rtl.css") ) {
|
44 |
-
$frontend_css_rtl = get_stylesheet_directory_uri() . "/paid-memberships-pro/css/frontend-rtl.css";
|
45 |
-
}
|
46 |
-
} elseif(file_exists(get_template_directory() . "/paid-memberships-pro/frontend.css")) {
|
47 |
-
$frontend_css = get_template_directory_uri() . "/paid-memberships-pro/frontend.css";
|
48 |
-
if( is_rtl() && file_exists(get_template_directory() . "/paid-memberships-pro/css/frontend-rtl.css") ) {
|
49 |
-
$frontend_css_rtl = get_template_directory_uri() . "/paid-memberships-pro/css/frontend-rtl.css";
|
50 |
-
}
|
51 |
-
} else {
|
52 |
-
$frontend_css = plugins_url('css/frontend.css',dirname(__FILE__) );
|
53 |
-
if( is_rtl() ) {
|
54 |
-
$frontend_css_rtl = plugins_url('css/frontend-rtl.css',dirname(__FILE__) );
|
55 |
-
}
|
56 |
-
}
|
57 |
-
wp_enqueue_style('pmpro_frontend', $frontend_css, array(), PMPRO_VERSION, "screen");
|
58 |
-
if( $frontend_css_rtl ) {
|
59 |
-
wp_enqueue_style('pmpro_frontend_rtl', $frontend_css_rtl, array(), PMPRO_VERSION, "screen");
|
60 |
-
}
|
61 |
-
|
62 |
-
if(file_exists(get_stylesheet_directory() . "/paid-memberships-pro/css/print.css"))
|
63 |
-
$print_css = get_stylesheet_directory_uri() . "/paid-memberships-pro/css/print.css";
|
64 |
-
elseif(file_exists(get_template_directory() . "/paid-memberships-pro/print.css"))
|
65 |
-
$print_css = get_template_directory_uri() . "/paid-memberships-pro/print.css";
|
66 |
-
else
|
67 |
-
$print_css = plugins_url('css/print.css',dirname(__FILE__) );
|
68 |
-
wp_enqueue_style('pmpro_print', $print_css, array(), PMPRO_VERSION, "print");
|
69 |
-
}
|
70 |
-
|
71 |
-
global $pmpro_pages, $pmpro_ready, $pmpro_currency, $pmpro_currency_symbol;
|
72 |
-
$pmpro_pages = array();
|
73 |
-
$pmpro_pages["account"] = pmpro_getOption("account_page_id");
|
74 |
-
$pmpro_pages["billing"] = pmpro_getOption("billing_page_id");
|
75 |
-
$pmpro_pages["cancel"] = pmpro_getOption("cancel_page_id");
|
76 |
-
$pmpro_pages["checkout"] = pmpro_getOption("checkout_page_id");
|
77 |
-
$pmpro_pages["confirmation"] = pmpro_getOption("confirmation_page_id");
|
78 |
-
$pmpro_pages["invoice"] = pmpro_getOption("invoice_page_id");
|
79 |
-
$pmpro_pages["levels"] = pmpro_getOption("levels_page_id");
|
80 |
-
|
81 |
-
$pmpro_ready = pmpro_is_ready();
|
82 |
-
|
83 |
-
//set currency
|
84 |
-
$pmpro_currency = pmpro_getOption("currency");
|
85 |
-
if(!$pmpro_currency)
|
86 |
-
{
|
87 |
-
global $pmpro_default_currency;
|
88 |
-
$pmpro_currency = $pmpro_default_currency;
|
89 |
-
}
|
90 |
-
|
91 |
-
//figure out what symbol to show for currency
|
92 |
-
if(in_array($pmpro_currency, array("USD", "AUD", "BRL", "CAD", "HKD", "MXN", "NZD", "SGD")))
|
93 |
-
$pmpro_currency_symbol = "$";
|
94 |
-
elseif($pmpro_currency == "EUR")
|
95 |
-
$pmpro_currency_symbol = "€";
|
96 |
-
elseif($pmpro_currency == "GBP")
|
97 |
-
$pmpro_currency_symbol = "£";
|
98 |
-
elseif($pmpro_currency == "JPY")
|
99 |
-
$pmpro_currency_symbol = "¥";
|
100 |
-
else
|
101 |
-
$pmpro_currency_symbol = $pmpro_currency . " "; //just use the code
|
102 |
-
}
|
103 |
-
add_action("init", "pmpro_init");
|
104 |
-
|
105 |
-
//this code runs after $post is set, but before template output
|
106 |
-
function pmpro_wp()
|
107 |
-
{
|
108 |
-
if(!is_admin())
|
109 |
-
{
|
110 |
-
global $post, $pmpro_pages, $pmpro_page_name, $pmpro_page_id, $pmpro_body_classes;
|
111 |
-
|
112 |
-
//run the appropriate preheader function
|
113 |
-
foreach($pmpro_pages as $pmpro_page_name => $pmpro_page_id)
|
114 |
-
{
|
115 |
-
if(!empty($post->post_content) && strpos($post->post_content, "[pmpro_" . $pmpro_page_name . "]") !== false)
|
116 |
-
{
|
117 |
-
//preheader
|
118 |
-
require_once(PMPRO_DIR . "/preheaders/" . $pmpro_page_name . ".php");
|
119 |
-
|
120 |
-
//add class to body
|
121 |
-
$pmpro_body_classes[] = "pmpro-" . str_replace("_", "-", $pmpro_page_name);
|
122 |
-
|
123 |
-
//shortcode
|
124 |
-
function pmpro_pages_shortcode($atts, $content=null, $code="")
|
125 |
-
{
|
126 |
-
global $pmpro_page_name;
|
127 |
-
ob_start();
|
128 |
-
if(file_exists(get_stylesheet_directory() . "/paid-memberships-pro/pages/" . $pmpro_page_name . ".php"))
|
129 |
-
include(get_stylesheet_directory() . "/paid-memberships-pro/pages/" . $pmpro_page_name . ".php");
|
130 |
-
else
|
131 |
-
include(PMPRO_DIR . "/pages/" . $pmpro_page_name . ".php");
|
132 |
-
|
133 |
-
$temp_content = ob_get_contents();
|
134 |
-
ob_end_clean();
|
135 |
-
return apply_filters("pmpro_pages_shortcode_" . $pmpro_page_name, $temp_content);
|
136 |
-
}
|
137 |
-
add_shortcode("pmpro_" . $pmpro_page_name, "pmpro_pages_shortcode");
|
138 |
-
break; //only the first page found gets a shortcode replacement
|
139 |
-
}
|
140 |
-
}
|
141 |
-
}
|
142 |
-
}
|
143 |
-
add_action("wp", "pmpro_wp", 1);
|
144 |
-
|
145 |
-
/*
|
146 |
-
Add PMPro page names to the BODY class.
|
147 |
-
*/
|
148 |
-
function pmpro_body_class($classes)
|
149 |
-
{
|
150 |
-
global $pmpro_body_classes;
|
151 |
-
|
152 |
-
if(is_array($pmpro_body_classes))
|
153 |
-
$classes = array_merge($pmpro_body_classes, $classes);
|
154 |
-
|
155 |
-
return $classes;
|
156 |
-
}
|
157 |
-
add_filter("body_class", "pmpro_body_class");
|
158 |
-
|
159 |
-
//add membership level to current user object
|
160 |
-
function pmpro_set_current_user()
|
161 |
-
{
|
162 |
-
//this code runs at the beginning of the plugin
|
163 |
-
global $current_user, $wpdb;
|
164 |
-
get_currentuserinfo();
|
165 |
-
$id = intval($current_user->ID);
|
166 |
-
if($id)
|
167 |
-
{
|
168 |
-
$current_user->membership_level = pmpro_getMembershipLevelForUser($current_user->ID);
|
169 |
-
if(!empty($current_user->membership_level))
|
170 |
-
{
|
171 |
-
$current_user->membership_level->categories = pmpro_getMembershipCategories($current_user->membership_level->ID);
|
172 |
-
}
|
173 |
-
$current_user->membership_levels = pmpro_getMembershipLevelsForUser($current_user->ID);
|
174 |
-
}
|
175 |
-
|
176 |
-
//hiding ads?
|
177 |
-
$hideads = pmpro_getOption("hideads");
|
178 |
-
$hideadslevels = pmpro_getOption("hideadslevels");
|
179 |
-
if(!is_array($hideadslevels))
|
180 |
-
$hideadslevels = explode(",", $hideadslevels);
|
181 |
-
if($hideads == 1 && pmpro_hasMembershipLevel() || $hideads == 2 && pmpro_hasMembershipLevel($hideadslevels))
|
182 |
-
{
|
183 |
-
//disable ads in ezAdsense
|
184 |
-
if(class_exists("ezAdSense"))
|
185 |
-
{
|
186 |
-
global $ezCount, $urCount;
|
187 |
-
$ezCount = 100;
|
188 |
-
$urCount = 100;
|
189 |
-
}
|
190 |
-
|
191 |
-
//disable ads in Easy Adsense (newer versions)
|
192 |
-
if(class_exists("EzAdSense"))
|
193 |
-
{
|
194 |
-
global $ezAdSense;
|
195 |
-
$ezAdSense->ezCount = 100;
|
196 |
-
$ezAdSense->urCount = 100;
|
197 |
-
}
|
198 |
-
|
199 |
-
//set a global variable to hide ads
|
200 |
-
global $pmpro_display_ads;
|
201 |
-
$pmpro_display_ads = false;
|
202 |
-
}
|
203 |
-
else
|
204 |
-
{
|
205 |
-
global $pmpro_display_ads;
|
206 |
-
$pmpro_display_ads = true;
|
207 |
-
}
|
208 |
-
|
209 |
-
do_action("pmpro_after_set_current_user");
|
210 |
-
}
|
211 |
-
add_action('set_current_user', 'pmpro_set_current_user');
|
212 |
-
add_action('init', 'pmpro_set_current_user');
|
213 |
-
|
214 |
-
/*
|
215 |
-
* Add Membership Level to Users page in WordPress dashboard.
|
216 |
-
*/
|
217 |
-
function pmpro_manage_users_columns($columns) {
|
218 |
-
$columns['pmpro_membership_level'] = __('Membership Level', 'pmpro');
|
219 |
-
return $columns;
|
220 |
-
}
|
221 |
-
|
222 |
-
function pmpro_manage_users_custom_column($column_data, $column_name, $user_id) {
|
223 |
-
|
224 |
-
if($column_name == 'pmpro_membership_level') {
|
225 |
-
$levels = pmpro_getMembershipLevelsForUser($user_id);
|
226 |
-
$level_names = array();
|
227 |
-
if(!empty($levels)) {
|
228 |
-
foreach($levels as $key => $level)
|
229 |
-
$level_names[] = $level->name;
|
230 |
-
$column_data = implode(',', $level_names);
|
231 |
-
}
|
232 |
-
else
|
233 |
-
$column_data = __('None', 'pmpro');
|
234 |
-
}
|
235 |
-
return $column_data;
|
236 |
-
}
|
237 |
-
|
238 |
-
add_filter('manage_users_columns', 'pmpro_manage_users_columns');
|
239 |
-
add_filter('manage_users_custom_column', 'pmpro_manage_users_custom_column', 10, 3);
|
240 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/CyberSource/cyber_source_soap_client.php
DELETED
@@ -1,87 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* CyberSource version of SoapClient.
|
4 |
-
*
|
5 |
-
* An extension of PHP's own SoapClient library that includes the security
|
6 |
-
* header required by CyberSource. To enable SOAP support, PHP must be
|
7 |
-
* configured with --enable-soap.
|
8 |
-
*
|
9 |
-
* @author joe bartlett (xo@jdbartlett.com)
|
10 |
-
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
11 |
-
* @package CyberSource
|
12 |
-
* @subpackage CyberSource.libs
|
13 |
-
* @github https://github.com/jdbartlett/CyberSource/blob/master/libs/cyber_source_soap_client.php
|
14 |
-
*/
|
15 |
-
class CyberSourceSoapClient extends SoapClient {
|
16 |
-
|
17 |
-
/**
|
18 |
-
* Instance-specific array to contain CyberSource-specific configuration
|
19 |
-
* settings.
|
20 |
-
*
|
21 |
-
* @var array
|
22 |
-
* @access protected
|
23 |
-
*/
|
24 |
-
protected $_cyberSourceOptions = null;
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Constructor.
|
28 |
-
*
|
29 |
-
* The WSDL is generated by CyberSourceSource::_buildWsdl, in accordance with
|
30 |
-
* the DataSource settings.
|
31 |
-
*
|
32 |
-
* The CyberSource Options array should contain a 'merchantID' key and a
|
33 |
-
* 'transactionKey' key, with appropriate string values.
|
34 |
-
*
|
35 |
-
* The SOAP options array (the standard options array for PHP's SoapClient
|
36 |
-
* class) can be empty for CyberSource transactions.
|
37 |
-
*
|
38 |
-
* @param mixed $wsdl
|
39 |
-
* @param array $cyberSourceOptions
|
40 |
-
* @param array $soapOptions
|
41 |
-
* @access private
|
42 |
-
*/
|
43 |
-
public function __construct($wsdl, $cyberSourceOptions = null, $soapOptions = array()) {
|
44 |
-
parent::__construct($wsdl, $soapOptions);
|
45 |
-
|
46 |
-
$this->_cyberSourceOptions = array_merge(array(
|
47 |
-
'merchantID' => '',
|
48 |
-
'transactionKey' => '',
|
49 |
-
), is_array($cyberSourceOptions) ? $cyberSourceOptions : array());
|
50 |
-
}
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Transport layer for SOAP request.
|
54 |
-
*
|
55 |
-
* This is a straightforward wrapper for the standard SoapClient::__doRequest
|
56 |
-
* method; its parameters are identical.
|
57 |
-
*
|
58 |
-
* @param string $request
|
59 |
-
* @param string $location
|
60 |
-
* @param string $action
|
61 |
-
* @param string $version
|
62 |
-
* @param integer $one_way
|
63 |
-
* @return string XML SOAP response
|
64 |
-
* @access private
|
65 |
-
*/
|
66 |
-
public function __doRequest($request, $location, $action, $version, $one_way = 0) {
|
67 |
-
$soapHeader = sprintf("<SOAP-ENV:Header xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\"><wsse:Security SOAP-ENV:mustUnderstand=\"1\"><wsse:UsernameToken><wsse:Username>%s</wsse:Username><wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">%s</wsse:Password></wsse:UsernameToken></wsse:Security></SOAP-ENV:Header>", $this->_cyberSourceOptions['merchantID'], $this->_cyberSourceOptions['transactionKey']);
|
68 |
-
|
69 |
-
$requestDOM = new DOMDocument('1.0');
|
70 |
-
$soapHeaderDOM = new DOMDocument('1.0');
|
71 |
-
|
72 |
-
try {
|
73 |
-
$requestDOM->loadXML($request);
|
74 |
-
$soapHeaderDOM->loadXML($soapHeader);
|
75 |
-
$node = $requestDOM->importNode($soapHeaderDOM->firstChild, true);
|
76 |
-
$requestDOM->firstChild->insertBefore(
|
77 |
-
$node, $requestDOM->firstChild->firstChild);
|
78 |
-
|
79 |
-
$request = $requestDOM->saveXML();
|
80 |
-
} catch (DOMException $e) {
|
81 |
-
trigger_error("CybserSource Error: Couldn't add token: " . $e->code, E_USER_WARNING);
|
82 |
-
}
|
83 |
-
|
84 |
-
return parent::__doRequest($request, $location, $action, $version);
|
85 |
-
}
|
86 |
-
|
87 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Stripe/Stripe.php
CHANGED
@@ -9,9 +9,6 @@ if (!function_exists('curl_init')) {
|
|
9 |
if (!function_exists('json_decode')) {
|
10 |
throw new Exception('Stripe needs the JSON PHP extension.');
|
11 |
}
|
12 |
-
if (!function_exists('mb_detect_encoding')) {
|
13 |
-
throw new Exception('Stripe needs the Multibyte String PHP extension.');
|
14 |
-
}
|
15 |
|
16 |
// Stripe singleton
|
17 |
require(dirname(__FILE__) . '/Stripe/Stripe.php');
|
@@ -33,23 +30,16 @@ require(dirname(__FILE__) . '/Stripe/Object.php');
|
|
33 |
require(dirname(__FILE__) . '/Stripe/ApiRequestor.php');
|
34 |
require(dirname(__FILE__) . '/Stripe/ApiResource.php');
|
35 |
require(dirname(__FILE__) . '/Stripe/SingletonApiResource.php');
|
36 |
-
require(dirname(__FILE__) . '/Stripe/AttachedObject.php');
|
37 |
require(dirname(__FILE__) . '/Stripe/List.php');
|
38 |
|
39 |
// Stripe API Resources
|
40 |
require(dirname(__FILE__) . '/Stripe/Account.php');
|
41 |
-
require(dirname(__FILE__) . '/Stripe/Card.php');
|
42 |
-
require(dirname(__FILE__) . '/Stripe/Balance.php');
|
43 |
-
require(dirname(__FILE__) . '/Stripe/BalanceTransaction.php');
|
44 |
require(dirname(__FILE__) . '/Stripe/Charge.php');
|
45 |
require(dirname(__FILE__) . '/Stripe/Customer.php');
|
46 |
require(dirname(__FILE__) . '/Stripe/Invoice.php');
|
47 |
require(dirname(__FILE__) . '/Stripe/InvoiceItem.php');
|
48 |
require(dirname(__FILE__) . '/Stripe/Plan.php');
|
49 |
-
require(dirname(__FILE__) . '/Stripe/Subscription.php');
|
50 |
require(dirname(__FILE__) . '/Stripe/Token.php');
|
51 |
require(dirname(__FILE__) . '/Stripe/Coupon.php');
|
52 |
require(dirname(__FILE__) . '/Stripe/Event.php');
|
53 |
require(dirname(__FILE__) . '/Stripe/Transfer.php');
|
54 |
-
require(dirname(__FILE__) . '/Stripe/Recipient.php');
|
55 |
-
require(dirname(__FILE__) . '/Stripe/ApplicationFee.php');
|
9 |
if (!function_exists('json_decode')) {
|
10 |
throw new Exception('Stripe needs the JSON PHP extension.');
|
11 |
}
|
|
|
|
|
|
|
12 |
|
13 |
// Stripe singleton
|
14 |
require(dirname(__FILE__) . '/Stripe/Stripe.php');
|
30 |
require(dirname(__FILE__) . '/Stripe/ApiRequestor.php');
|
31 |
require(dirname(__FILE__) . '/Stripe/ApiResource.php');
|
32 |
require(dirname(__FILE__) . '/Stripe/SingletonApiResource.php');
|
|
|
33 |
require(dirname(__FILE__) . '/Stripe/List.php');
|
34 |
|
35 |
// Stripe API Resources
|
36 |
require(dirname(__FILE__) . '/Stripe/Account.php');
|
|
|
|
|
|
|
37 |
require(dirname(__FILE__) . '/Stripe/Charge.php');
|
38 |
require(dirname(__FILE__) . '/Stripe/Customer.php');
|
39 |
require(dirname(__FILE__) . '/Stripe/Invoice.php');
|
40 |
require(dirname(__FILE__) . '/Stripe/InvoiceItem.php');
|
41 |
require(dirname(__FILE__) . '/Stripe/Plan.php');
|
|
|
42 |
require(dirname(__FILE__) . '/Stripe/Token.php');
|
43 |
require(dirname(__FILE__) . '/Stripe/Coupon.php');
|
44 |
require(dirname(__FILE__) . '/Stripe/Event.php');
|
45 |
require(dirname(__FILE__) . '/Stripe/Transfer.php');
|
|
|
|
includes/lib/Stripe/Stripe/Account.php
CHANGED
@@ -2,11 +2,12 @@
|
|
2 |
|
3 |
class Stripe_Account extends Stripe_SingletonApiResource
|
4 |
{
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
|
|
10 |
public static function retrieve($apiKey=null)
|
11 |
{
|
12 |
$class = get_class();
|
2 |
|
3 |
class Stripe_Account extends Stripe_SingletonApiResource
|
4 |
{
|
5 |
+
public static function constructFrom($values, $apiKey=null)
|
6 |
+
{
|
7 |
+
$class = get_class();
|
8 |
+
return self::scopedConstructFrom($class, $values, $apiKey);
|
9 |
+
}
|
10 |
+
|
11 |
public static function retrieve($apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
includes/lib/Stripe/Stripe/ApiRequestor.php
CHANGED
@@ -2,9 +2,6 @@
|
|
2 |
|
3 |
class Stripe_ApiRequestor
|
4 |
{
|
5 |
-
/**
|
6 |
-
* @var string $apiKey The API key that's to be used to make requests.
|
7 |
-
*/
|
8 |
public $apiKey;
|
9 |
|
10 |
public function __construct($apiKey=null)
|
@@ -12,37 +9,24 @@ class Stripe_ApiRequestor
|
|
12 |
$this->_apiKey = $apiKey;
|
13 |
}
|
14 |
|
15 |
-
/**
|
16 |
-
* @param string $url The path to the API endpoint.
|
17 |
-
*
|
18 |
-
* @returns string The full path.
|
19 |
-
*/
|
20 |
public static function apiUrl($url='')
|
21 |
{
|
22 |
$apiBase = Stripe::$apiBase;
|
23 |
return "$apiBase$url";
|
24 |
}
|
25 |
|
26 |
-
/**
|
27 |
-
* @param string|mixed $value A string to UTF8-encode.
|
28 |
-
*
|
29 |
-
* @returns string|mixed The UTF8-encoded string, or the object passed in if
|
30 |
-
* it wasn't a string.
|
31 |
-
*/
|
32 |
public static function utf8($value)
|
33 |
{
|
34 |
-
if (is_string($value)
|
35 |
-
&& mb_detect_encoding($value, "UTF-8", TRUE) != "UTF-8") {
|
36 |
return utf8_encode($value);
|
37 |
-
|
38 |
return $value;
|
39 |
-
}
|
40 |
}
|
41 |
|
42 |
private static function _encodeObjects($d)
|
43 |
{
|
44 |
if ($d instanceof Stripe_ApiResource) {
|
45 |
-
return
|
46 |
} else if ($d === true) {
|
47 |
return 'true';
|
48 |
} else if ($d === false) {
|
@@ -50,136 +34,71 @@ class Stripe_ApiRequestor
|
|
50 |
} else if (is_array($d)) {
|
51 |
$res = array();
|
52 |
foreach ($d as $k => $v)
|
53 |
-
|
54 |
return $res;
|
55 |
} else {
|
56 |
-
return
|
57 |
}
|
58 |
}
|
59 |
|
60 |
-
|
61 |
-
* @param array $arr An map of param keys to values.
|
62 |
-
* @param string|null $prefix (It doesn't look like we ever use $prefix...)
|
63 |
-
*
|
64 |
-
* @returns string A querystring, essentially.
|
65 |
-
*/
|
66 |
-
public static function encode($arr, $prefix=null)
|
67 |
{
|
68 |
-
|
69 |
-
return $arr;
|
70 |
-
|
71 |
-
$r = array();
|
72 |
-
foreach ($arr as $k => $v) {
|
73 |
-
if (is_null($v))
|
74 |
-
continue;
|
75 |
-
|
76 |
-
if ($prefix && $k && !is_int($k))
|
77 |
-
$k = $prefix."[".$k."]";
|
78 |
-
else if ($prefix)
|
79 |
-
$k = $prefix."[]";
|
80 |
-
|
81 |
-
if (is_array($v)) {
|
82 |
-
$r[] = self::encode($v, $k, true);
|
83 |
-
} else {
|
84 |
-
$r[] = urlencode($k)."=".urlencode($v);
|
85 |
-
}
|
86 |
-
}
|
87 |
-
|
88 |
-
return implode("&", $r);
|
89 |
}
|
90 |
|
91 |
-
|
92 |
-
* @param string $method
|
93 |
-
* @param string $url
|
94 |
-
* @param array|null $params
|
95 |
-
*
|
96 |
-
* @return array An array whose first element is the response and second
|
97 |
-
* element is the API key used to make the request.
|
98 |
-
*/
|
99 |
-
public function request($method, $url, $params=null)
|
100 |
{
|
101 |
if (!$params)
|
102 |
$params = array();
|
103 |
-
list($rbody, $rcode, $myApiKey) = $this->_requestRaw($
|
104 |
$resp = $this->_interpretResponse($rbody, $rcode);
|
105 |
return array($resp, $myApiKey);
|
106 |
}
|
107 |
|
108 |
-
|
109 |
-
/**
|
110 |
-
* @param string $rbody A JSON string.
|
111 |
-
* @param int $rcode
|
112 |
-
* @param array $resp
|
113 |
-
*
|
114 |
-
* @throws Stripe_InvalidRequestError if the error is caused by the user.
|
115 |
-
* @throws Stripe_AuthenticationError if the error is caused by a lack of
|
116 |
-
* permissions.
|
117 |
-
* @throws Stripe_CardError if the error is the error code is 402 (payment
|
118 |
-
* required)
|
119 |
-
* @throws Stripe_ApiError otherwise.
|
120 |
-
*/
|
121 |
public function handleApiError($rbody, $rcode, $resp)
|
122 |
{
|
123 |
-
if (!is_array($resp) || !isset($resp['error']))
|
124 |
-
|
125 |
-
."(HTTP response code was $rcode)";
|
126 |
-
throw new Stripe_ApiError($msg, $rcode, $rbody, $resp);
|
127 |
-
}
|
128 |
-
|
129 |
$error = $resp['error'];
|
130 |
-
$msg = isset($error['message']) ? $error['message'] : null;
|
131 |
-
$param = isset($error['param']) ? $error['param'] : null;
|
132 |
-
$code = isset($error['code']) ? $error['code'] : null;
|
133 |
-
|
134 |
switch ($rcode) {
|
135 |
case 400:
|
136 |
case 404:
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
case 401:
|
141 |
-
|
142 |
case 402:
|
143 |
-
|
|
|
|
|
|
|
144 |
default:
|
145 |
-
|
146 |
}
|
147 |
}
|
148 |
|
149 |
-
private function _requestRaw($
|
150 |
{
|
151 |
$myApiKey = $this->_apiKey;
|
152 |
if (!$myApiKey)
|
153 |
$myApiKey = Stripe::$apiKey;
|
154 |
-
|
155 |
-
|
156 |
-
$msg = 'No API key provided. (HINT: set your API key using '
|
157 |
-
. '"Stripe::setApiKey(<API-KEY>)". You can generate API keys from '
|
158 |
-
. 'the Stripe web interface. See https://stripe.com/api for '
|
159 |
-
. 'details, or email support@stripe.com if you have any questions.';
|
160 |
-
throw new Stripe_AuthenticationError($msg);
|
161 |
-
}
|
162 |
|
163 |
$absUrl = $this->apiUrl($url);
|
164 |
$params = self::_encodeObjects($params);
|
165 |
$langVersion = phpversion();
|
166 |
$uname = php_uname();
|
167 |
$ua = array('bindings_version' => Stripe::VERSION,
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
$headers = array('X-Stripe-Client-User-Agent: ' . json_encode($ua),
|
173 |
-
|
174 |
'Authorization: Bearer ' . $myApiKey);
|
175 |
-
|
176 |
-
$headers[] = 'Stripe-Version: ' . Stripe::$apiVersion;
|
177 |
-
list($rbody, $rcode) = $this->_curlRequest(
|
178 |
-
$method,
|
179 |
-
$absUrl,
|
180 |
-
$headers,
|
181 |
-
$params
|
182 |
-
);
|
183 |
return array($rbody, $rcode, $myApiKey);
|
184 |
}
|
185 |
|
@@ -188,9 +107,7 @@ class Stripe_ApiRequestor
|
|
188 |
try {
|
189 |
$resp = json_decode($rbody, true);
|
190 |
} catch (Exception $e) {
|
191 |
-
|
192 |
-
. "(HTTP response code was $rcode)";
|
193 |
-
throw new Stripe_ApiError($msg, $rcode, $rbody);
|
194 |
}
|
195 |
|
196 |
if ($rcode < 200 || $rcode >= 300) {
|
@@ -199,28 +116,28 @@ class Stripe_ApiRequestor
|
|
199 |
return $resp;
|
200 |
}
|
201 |
|
202 |
-
private function _curlRequest($
|
203 |
{
|
204 |
$curl = curl_init();
|
205 |
-
$
|
206 |
$opts = array();
|
207 |
-
if ($
|
208 |
$opts[CURLOPT_HTTPGET] = 1;
|
209 |
if (count($params) > 0) {
|
210 |
-
|
211 |
-
|
212 |
}
|
213 |
-
} else if ($
|
214 |
$opts[CURLOPT_POST] = 1;
|
215 |
$opts[CURLOPT_POSTFIELDS] = self::encode($params);
|
216 |
-
} else if ($
|
217 |
$opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
|
218 |
if (count($params) > 0) {
|
219 |
-
|
220 |
-
|
221 |
}
|
222 |
} else {
|
223 |
-
throw new Stripe_ApiError("Unrecognized method $
|
224 |
}
|
225 |
|
226 |
$absUrl = self::utf8($absUrl);
|
@@ -236,21 +153,15 @@ class Stripe_ApiRequestor
|
|
236 |
curl_setopt_array($curl, $opts);
|
237 |
$rbody = curl_exec($curl);
|
238 |
|
239 |
-
if (!defined('CURLE_SSL_CACERT_BADFILE')) {
|
240 |
-
define('CURLE_SSL_CACERT_BADFILE', 77); // constant not defined in PHP
|
241 |
-
}
|
242 |
-
|
243 |
$errno = curl_errno($curl);
|
244 |
if ($errno == CURLE_SSL_CACERT ||
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
'X-Stripe-Client-Info: {"ca":"using Stripe-supplied CA bundle"}'
|
250 |
-
);
|
251 |
-
$cert = dirname(__FILE__) . '/../data/ca-certificates.crt';
|
252 |
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
|
253 |
-
curl_setopt($curl, CURLOPT_CAINFO,
|
|
|
254 |
$rbody = curl_exec($curl);
|
255 |
}
|
256 |
|
@@ -266,11 +177,6 @@ class Stripe_ApiRequestor
|
|
266 |
return array($rbody, $rcode);
|
267 |
}
|
268 |
|
269 |
-
/**
|
270 |
-
* @param number $errno
|
271 |
-
* @param string $message
|
272 |
-
* @throws Stripe_ApiConnectionError
|
273 |
-
*/
|
274 |
public function handleCurlError($errno, $message)
|
275 |
{
|
276 |
$apiBase = Stripe::$apiBase;
|
@@ -278,23 +184,15 @@ class Stripe_ApiRequestor
|
|
278 |
case CURLE_COULDNT_CONNECT:
|
279 |
case CURLE_COULDNT_RESOLVE_HOST:
|
280 |
case CURLE_OPERATION_TIMEOUTED:
|
281 |
-
$msg = "Could not connect to Stripe ($apiBase). Please check your "
|
282 |
-
|
283 |
-
. "you should check Stripe's service status at "
|
284 |
-
. "https://twitter.com/stripestatus, or";
|
285 |
-
break;
|
286 |
case CURLE_SSL_CACERT:
|
287 |
case CURLE_SSL_PEER_CERTIFICATE:
|
288 |
-
$msg = "Could not verify Stripe's SSL certificate. Please make sure "
|
289 |
-
|
290 |
-
. "(Try going to $apiBase in your browser.) "
|
291 |
-
. "If this problem persists,";
|
292 |
-
break;
|
293 |
default:
|
294 |
-
$msg = "Unexpected error communicating with Stripe. "
|
295 |
-
. "If this problem persists,";
|
296 |
}
|
297 |
-
$msg .= " let us know at support@stripe.com.";
|
298 |
|
299 |
$msg .= "\n\n(Network error [errno $errno]: $message)";
|
300 |
throw new Stripe_ApiConnectionError($msg);
|
2 |
|
3 |
class Stripe_ApiRequestor
|
4 |
{
|
|
|
|
|
|
|
5 |
public $apiKey;
|
6 |
|
7 |
public function __construct($apiKey=null)
|
9 |
$this->_apiKey = $apiKey;
|
10 |
}
|
11 |
|
|
|
|
|
|
|
|
|
|
|
12 |
public static function apiUrl($url='')
|
13 |
{
|
14 |
$apiBase = Stripe::$apiBase;
|
15 |
return "$apiBase$url";
|
16 |
}
|
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
public static function utf8($value)
|
19 |
{
|
20 |
+
if (is_string($value))
|
|
|
21 |
return utf8_encode($value);
|
22 |
+
else
|
23 |
return $value;
|
|
|
24 |
}
|
25 |
|
26 |
private static function _encodeObjects($d)
|
27 |
{
|
28 |
if ($d instanceof Stripe_ApiResource) {
|
29 |
+
return $d->id;
|
30 |
} else if ($d === true) {
|
31 |
return 'true';
|
32 |
} else if ($d === false) {
|
34 |
} else if (is_array($d)) {
|
35 |
$res = array();
|
36 |
foreach ($d as $k => $v)
|
37 |
+
$res[$k] = self::_encodeObjects($v);
|
38 |
return $res;
|
39 |
} else {
|
40 |
+
return $d;
|
41 |
}
|
42 |
}
|
43 |
|
44 |
+
public static function encode($d)
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
{
|
46 |
+
return http_build_query($d, null, '&');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
}
|
48 |
|
49 |
+
public function request($meth, $url, $params=null)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
{
|
51 |
if (!$params)
|
52 |
$params = array();
|
53 |
+
list($rbody, $rcode, $myApiKey) = $this->_requestRaw($meth, $url, $params);
|
54 |
$resp = $this->_interpretResponse($rbody, $rcode);
|
55 |
return array($resp, $myApiKey);
|
56 |
}
|
57 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
public function handleApiError($rbody, $rcode, $resp)
|
59 |
{
|
60 |
+
if (!is_array($resp) || !isset($resp['error']))
|
61 |
+
throw new Stripe_ApiError("Invalid response object from API: $rbody (HTTP response code was $rcode)", $rcode, $rbody, $resp);
|
|
|
|
|
|
|
|
|
62 |
$error = $resp['error'];
|
|
|
|
|
|
|
|
|
63 |
switch ($rcode) {
|
64 |
case 400:
|
65 |
case 404:
|
66 |
+
throw new Stripe_InvalidRequestError(isset($error['message']) ? $error['message'] : null,
|
67 |
+
isset($error['param']) ? $error['param'] : null,
|
68 |
+
$rcode, $rbody, $resp);
|
69 |
case 401:
|
70 |
+
throw new Stripe_AuthenticationError(isset($error['message']) ? $error['message'] : null, $rcode, $rbody, $resp);
|
71 |
case 402:
|
72 |
+
throw new Stripe_CardError(isset($error['message']) ? $error['message'] : null,
|
73 |
+
isset($error['param']) ? $error['param'] : null,
|
74 |
+
isset($error['code']) ? $error['code'] : null,
|
75 |
+
$rcode, $rbody, $resp);
|
76 |
default:
|
77 |
+
throw new Stripe_ApiError(isset($error['message']) ? $error['message'] : null, $rcode, $rbody, $resp);
|
78 |
}
|
79 |
}
|
80 |
|
81 |
+
private function _requestRaw($meth, $url, $params)
|
82 |
{
|
83 |
$myApiKey = $this->_apiKey;
|
84 |
if (!$myApiKey)
|
85 |
$myApiKey = Stripe::$apiKey;
|
86 |
+
if (!$myApiKey)
|
87 |
+
throw new Stripe_AuthenticationError('No API key provided. (HINT: set your API key using "Stripe::setApiKey(<API-KEY>)". You can generate API keys from the Stripe web interface. See https://stripe.com/api for details, or email support@stripe.com if you have any questions.');
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
|
89 |
$absUrl = $this->apiUrl($url);
|
90 |
$params = self::_encodeObjects($params);
|
91 |
$langVersion = phpversion();
|
92 |
$uname = php_uname();
|
93 |
$ua = array('bindings_version' => Stripe::VERSION,
|
94 |
+
'lang' => 'php',
|
95 |
+
'lang_version' => $langVersion,
|
96 |
+
'publisher' => 'stripe',
|
97 |
+
'uname' => $uname);
|
98 |
$headers = array('X-Stripe-Client-User-Agent: ' . json_encode($ua),
|
99 |
+
'User-Agent: Stripe/v1 PhpBindings/' . Stripe::VERSION,
|
100 |
'Authorization: Bearer ' . $myApiKey);
|
101 |
+
list($rbody, $rcode) = $this->_curlRequest($meth, $absUrl, $headers, $params);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
return array($rbody, $rcode, $myApiKey);
|
103 |
}
|
104 |
|
107 |
try {
|
108 |
$resp = json_decode($rbody, true);
|
109 |
} catch (Exception $e) {
|
110 |
+
throw new Stripe_ApiError("Invalid response body from API: $rbody (HTTP response code was $rcode)", $rcode, $rbody);
|
|
|
|
|
111 |
}
|
112 |
|
113 |
if ($rcode < 200 || $rcode >= 300) {
|
116 |
return $resp;
|
117 |
}
|
118 |
|
119 |
+
private function _curlRequest($meth, $absUrl, $headers, $params)
|
120 |
{
|
121 |
$curl = curl_init();
|
122 |
+
$meth = strtolower($meth);
|
123 |
$opts = array();
|
124 |
+
if ($meth == 'get') {
|
125 |
$opts[CURLOPT_HTTPGET] = 1;
|
126 |
if (count($params) > 0) {
|
127 |
+
$encoded = self::encode($params);
|
128 |
+
$absUrl = "$absUrl?$encoded";
|
129 |
}
|
130 |
+
} else if ($meth == 'post') {
|
131 |
$opts[CURLOPT_POST] = 1;
|
132 |
$opts[CURLOPT_POSTFIELDS] = self::encode($params);
|
133 |
+
} else if ($meth == 'delete') {
|
134 |
$opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
|
135 |
if (count($params) > 0) {
|
136 |
+
$encoded = self::encode($params);
|
137 |
+
$absUrl = "$absUrl?$encoded";
|
138 |
}
|
139 |
} else {
|
140 |
+
throw new Stripe_ApiError("Unrecognized method $meth");
|
141 |
}
|
142 |
|
143 |
$absUrl = self::utf8($absUrl);
|
153 |
curl_setopt_array($curl, $opts);
|
154 |
$rbody = curl_exec($curl);
|
155 |
|
|
|
|
|
|
|
|
|
156 |
$errno = curl_errno($curl);
|
157 |
if ($errno == CURLE_SSL_CACERT ||
|
158 |
+
$errno == CURLE_SSL_PEER_CERTIFICATE ||
|
159 |
+
$errno == 77 // CURLE_SSL_CACERT_BADFILE (constant not defined in PHP though)
|
160 |
+
) {
|
161 |
+
array_push($headers, 'X-Stripe-Client-Info: {"ca":"using Stripe-supplied CA bundle"}');
|
|
|
|
|
|
|
162 |
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
|
163 |
+
curl_setopt($curl, CURLOPT_CAINFO,
|
164 |
+
dirname(__FILE__) . '/../data/ca-certificates.crt');
|
165 |
$rbody = curl_exec($curl);
|
166 |
}
|
167 |
|
177 |
return array($rbody, $rcode);
|
178 |
}
|
179 |
|
|
|
|
|
|
|
|
|
|
|
180 |
public function handleCurlError($errno, $message)
|
181 |
{
|
182 |
$apiBase = Stripe::$apiBase;
|
184 |
case CURLE_COULDNT_CONNECT:
|
185 |
case CURLE_COULDNT_RESOLVE_HOST:
|
186 |
case CURLE_OPERATION_TIMEOUTED:
|
187 |
+
$msg = "Could not connect to Stripe ($apiBase). Please check your internet connection and try again. If this problem persists, you should check Stripe's service status at https://twitter.com/stripestatus, or let us know at support@stripe.com.";
|
188 |
+
break;
|
|
|
|
|
|
|
189 |
case CURLE_SSL_CACERT:
|
190 |
case CURLE_SSL_PEER_CERTIFICATE:
|
191 |
+
$msg = "Could not verify Stripe's SSL certificate. Please make sure that your network is not intercepting certificates. (Try going to $apiBase in your browser.) If this problem persists, let us know at support@stripe.com.";
|
192 |
+
break;
|
|
|
|
|
|
|
193 |
default:
|
194 |
+
$msg = "Unexpected error communicating with Stripe. If this problem persists, let us know at support@stripe.com.";
|
|
|
195 |
}
|
|
|
196 |
|
197 |
$msg .= "\n\n(Network error [errno $errno]: $message)";
|
198 |
throw new Stripe_ApiConnectionError($msg);
|
includes/lib/Stripe/Stripe/ApiResource.php
CHANGED
@@ -9,29 +9,16 @@ abstract class Stripe_ApiResource extends Stripe_Object
|
|
9 |
return $instance;
|
10 |
}
|
11 |
|
12 |
-
/**
|
13 |
-
* @returns Stripe_ApiResource The refreshed resource.
|
14 |
-
*/
|
15 |
public function refresh()
|
16 |
{
|
17 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
18 |
$url = $this->instanceUrl();
|
19 |
|
20 |
-
list($response, $apiKey) = $requestor->request(
|
21 |
-
'get',
|
22 |
-
$url,
|
23 |
-
$this->_retrieveOptions
|
24 |
-
);
|
25 |
$this->refreshFrom($response, $apiKey);
|
26 |
return $this;
|
27 |
-
|
28 |
|
29 |
-
/**
|
30 |
-
* @param string $class
|
31 |
-
*
|
32 |
-
* @returns string The name of the class, with namespacing and underscores
|
33 |
-
* stripped.
|
34 |
-
*/
|
35 |
public static function className($class)
|
36 |
{
|
37 |
// Useful for namespaces: Foo\Stripe_Charge
|
@@ -45,60 +32,38 @@ abstract class Stripe_ApiResource extends Stripe_Object
|
|
45 |
return $name;
|
46 |
}
|
47 |
|
48 |
-
/**
|
49 |
-
* @param string $class
|
50 |
-
*
|
51 |
-
* @returns string The endpoint URL for the given class.
|
52 |
-
*/
|
53 |
public static function classUrl($class)
|
54 |
{
|
55 |
-
$base = self::
|
56 |
return "/v1/${base}s";
|
57 |
}
|
58 |
|
59 |
-
/**
|
60 |
-
* @returns string The full API URL for this API resource.
|
61 |
-
*/
|
62 |
public function instanceUrl()
|
63 |
{
|
64 |
$id = $this['id'];
|
65 |
$class = get_class($this);
|
66 |
if (!$id) {
|
67 |
-
|
68 |
-
. "$class instance has invalid ID: $id";
|
69 |
-
throw new Stripe_InvalidRequestError($message, null);
|
70 |
}
|
71 |
$id = Stripe_ApiRequestor::utf8($id);
|
72 |
-
$base =
|
73 |
$extn = urlencode($id);
|
74 |
return "$base/$extn";
|
75 |
}
|
76 |
|
77 |
private static function _validateCall($method, $params=null, $apiKey=null)
|
78 |
{
|
79 |
-
if ($params && !is_array($params))
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
. "'currency' => 'usd', 'card' => array('number' => "
|
84 |
-
. "4242424242424242, 'exp_month' => 5, 'exp_year' => 2015)))\")";
|
85 |
-
throw new Stripe_Error($message);
|
86 |
-
}
|
87 |
-
|
88 |
-
if ($apiKey && !is_string($apiKey)) {
|
89 |
-
$message = 'The second argument to Stripe API method calls is an '
|
90 |
-
. 'optional per-request apiKey, which must be a string. '
|
91 |
-
. '(HINT: you can set a global apiKey by '
|
92 |
-
. '"Stripe::setApiKey(<apiKey>)")';
|
93 |
-
throw new Stripe_Error($message);
|
94 |
-
}
|
95 |
}
|
96 |
|
97 |
protected static function _scopedAll($class, $params=null, $apiKey=null)
|
98 |
{
|
99 |
self::_validateCall('all', $params, $apiKey);
|
100 |
$requestor = new Stripe_ApiRequestor($apiKey);
|
101 |
-
$url = self::
|
102 |
list($response, $apiKey) = $requestor->request('get', $url, $params);
|
103 |
return Stripe_Util::convertToStripeObject($response, $apiKey);
|
104 |
}
|
@@ -107,18 +72,19 @@ abstract class Stripe_ApiResource extends Stripe_Object
|
|
107 |
{
|
108 |
self::_validateCall('create', $params, $apiKey);
|
109 |
$requestor = new Stripe_ApiRequestor($apiKey);
|
110 |
-
$url = self::
|
111 |
list($response, $apiKey) = $requestor->request('post', $url, $params);
|
112 |
return Stripe_Util::convertToStripeObject($response, $apiKey);
|
113 |
}
|
114 |
|
115 |
-
protected function _scopedSave($class
|
116 |
{
|
117 |
self::_validateCall('save');
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
|
|
122 |
$url = $this->instanceUrl();
|
123 |
list($response, $apiKey) = $requestor->request('post', $url, $params);
|
124 |
$this->refreshFrom($response, $apiKey);
|
9 |
return $instance;
|
10 |
}
|
11 |
|
|
|
|
|
|
|
12 |
public function refresh()
|
13 |
{
|
14 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
15 |
$url = $this->instanceUrl();
|
16 |
|
17 |
+
list($response, $apiKey) = $requestor->request('get', $url);
|
|
|
|
|
|
|
|
|
18 |
$this->refreshFrom($response, $apiKey);
|
19 |
return $this;
|
20 |
+
}
|
21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
public static function className($class)
|
23 |
{
|
24 |
// Useful for namespaces: Foo\Stripe_Charge
|
32 |
return $name;
|
33 |
}
|
34 |
|
|
|
|
|
|
|
|
|
|
|
35 |
public static function classUrl($class)
|
36 |
{
|
37 |
+
$base = self::className($class);
|
38 |
return "/v1/${base}s";
|
39 |
}
|
40 |
|
|
|
|
|
|
|
41 |
public function instanceUrl()
|
42 |
{
|
43 |
$id = $this['id'];
|
44 |
$class = get_class($this);
|
45 |
if (!$id) {
|
46 |
+
throw new Stripe_InvalidRequestError("Could not determine which URL to request: $class instance has invalid ID: $id", null);
|
|
|
|
|
47 |
}
|
48 |
$id = Stripe_ApiRequestor::utf8($id);
|
49 |
+
$base = self::classUrl($class);
|
50 |
$extn = urlencode($id);
|
51 |
return "$base/$extn";
|
52 |
}
|
53 |
|
54 |
private static function _validateCall($method, $params=null, $apiKey=null)
|
55 |
{
|
56 |
+
if ($params && !is_array($params))
|
57 |
+
throw new Stripe_Error("You must pass an array as the first argument to Stripe API method calls. (HINT: an example call to create a charge would be: \"StripeCharge::create(array('amount' => 100, 'currency' => 'usd', 'card' => array('number' => 4242424242424242, 'exp_month' => 5, 'exp_year' => 2015)))\")");
|
58 |
+
if ($apiKey && !is_string($apiKey))
|
59 |
+
throw new Stripe_Error('The second argument to Stripe API method calls is an optional per-request apiKey, which must be a string. (HINT: you can set a global apiKey by "Stripe::setApiKey(<apiKey>)")');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
}
|
61 |
|
62 |
protected static function _scopedAll($class, $params=null, $apiKey=null)
|
63 |
{
|
64 |
self::_validateCall('all', $params, $apiKey);
|
65 |
$requestor = new Stripe_ApiRequestor($apiKey);
|
66 |
+
$url = self::classUrl($class);
|
67 |
list($response, $apiKey) = $requestor->request('get', $url, $params);
|
68 |
return Stripe_Util::convertToStripeObject($response, $apiKey);
|
69 |
}
|
72 |
{
|
73 |
self::_validateCall('create', $params, $apiKey);
|
74 |
$requestor = new Stripe_ApiRequestor($apiKey);
|
75 |
+
$url = self::classUrl($class);
|
76 |
list($response, $apiKey) = $requestor->request('post', $url, $params);
|
77 |
return Stripe_Util::convertToStripeObject($response, $apiKey);
|
78 |
}
|
79 |
|
80 |
+
protected function _scopedSave($class)
|
81 |
{
|
82 |
self::_validateCall('save');
|
83 |
+
if ($this->_unsavedValues) {
|
84 |
+
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
85 |
+
$params = array();
|
86 |
+
foreach ($this->_unsavedValues->toArray() as $k)
|
87 |
+
$params[$k] = $this->$k;
|
88 |
$url = $this->instanceUrl();
|
89 |
list($response, $apiKey) = $requestor->request('post', $url, $params);
|
90 |
$this->refreshFrom($response, $apiKey);
|
includes/lib/Stripe/Stripe/ApplicationFee.php
DELETED
@@ -1,53 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Stripe_ApplicationFee extends Stripe_ApiResource
|
4 |
-
{
|
5 |
-
/**
|
6 |
-
* This is a special case because the application fee endpoint has an
|
7 |
-
* underscore in it. The parent `className` function strips underscores.
|
8 |
-
*
|
9 |
-
* @return string The name of the class.
|
10 |
-
*/
|
11 |
-
public static function className($class)
|
12 |
-
{
|
13 |
-
return 'application_fee';
|
14 |
-
}
|
15 |
-
|
16 |
-
/**
|
17 |
-
* @param string $id The ID of the application fee to retrieve.
|
18 |
-
* @param string|null $apiKey
|
19 |
-
*
|
20 |
-
* @return Stripe_ApplicationFee
|
21 |
-
*/
|
22 |
-
public static function retrieve($id, $apiKey=null)
|
23 |
-
{
|
24 |
-
$class = get_class();
|
25 |
-
return self::_scopedRetrieve($class, $id, $apiKey);
|
26 |
-
}
|
27 |
-
|
28 |
-
/**
|
29 |
-
* @param string|null $params
|
30 |
-
* @param string|null $apiKey
|
31 |
-
*
|
32 |
-
* @return array An array of application fees.
|
33 |
-
*/
|
34 |
-
public static function all($params=null, $apiKey=null)
|
35 |
-
{
|
36 |
-
$class = get_class();
|
37 |
-
return self::_scopedAll($class, $params, $apiKey);
|
38 |
-
}
|
39 |
-
|
40 |
-
/**
|
41 |
-
* @param string|null $params
|
42 |
-
*
|
43 |
-
* @return Stripe_ApplicationFee The refunded application fee.
|
44 |
-
*/
|
45 |
-
public function refund($params=null)
|
46 |
-
{
|
47 |
-
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
48 |
-
$url = $this->instanceUrl() . '/refund';
|
49 |
-
list($response, $apiKey) = $requestor->request('post', $url, $params);
|
50 |
-
$this->refreshFrom($response, $apiKey);
|
51 |
-
return $this;
|
52 |
-
}
|
53 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Stripe/Stripe/AttachedObject.php
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// e.g. metadata on Stripe objects.
|
4 |
-
class Stripe_AttachedObject extends Stripe_Object
|
5 |
-
{
|
6 |
-
/**
|
7 |
-
* Updates this object.
|
8 |
-
*
|
9 |
-
* @param array $properties A mapping of properties to update on this object.
|
10 |
-
*/
|
11 |
-
public function replaceWith($properties)
|
12 |
-
{
|
13 |
-
$removed = array_diff(array_keys($this->_values), array_keys($properties));
|
14 |
-
// Don't unset, but rather set to null so we send up '' for deletion.
|
15 |
-
foreach ($removed as $k) {
|
16 |
-
$this->$k = null;
|
17 |
-
}
|
18 |
-
|
19 |
-
foreach ($properties as $k => $v) {
|
20 |
-
$this->$k = $v;
|
21 |
-
}
|
22 |
-
}
|
23 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Stripe/Stripe/Balance.php
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Stripe_Balance extends Stripe_SingletonApiResource
|
4 |
-
{
|
5 |
-
/**
|
6 |
-
* @param string|null $apiKey
|
7 |
-
*
|
8 |
-
* @return Stripe_Balance
|
9 |
-
*/
|
10 |
-
public static function retrieve($apiKey=null)
|
11 |
-
{
|
12 |
-
$class = get_class();
|
13 |
-
return self::_scopedSingletonRetrieve($class, $apiKey);
|
14 |
-
}
|
15 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Stripe/Stripe/BalanceTransaction.php
DELETED
@@ -1,39 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Stripe_BalanceTransaction extends Stripe_ApiResource
|
4 |
-
{
|
5 |
-
/**
|
6 |
-
* @param string $class Ignored.
|
7 |
-
*
|
8 |
-
* @return string The class URL for this resource. It needs to be special
|
9 |
-
* cased because it doesn't fit into the standard resource pattern.
|
10 |
-
*/
|
11 |
-
public static function classUrl($class)
|
12 |
-
{
|
13 |
-
return "/v1/balance/history";
|
14 |
-
}
|
15 |
-
|
16 |
-
/**
|
17 |
-
* @param string $id The ID of the balance transaction to retrieve.
|
18 |
-
* @param string|null $apiKey
|
19 |
-
*
|
20 |
-
* @return Stripe_BalanceTransaction
|
21 |
-
*/
|
22 |
-
public static function retrieve($id, $apiKey=null)
|
23 |
-
{
|
24 |
-
$class = get_class();
|
25 |
-
return self::_scopedRetrieve($class, $id, $apiKey);
|
26 |
-
}
|
27 |
-
|
28 |
-
/**
|
29 |
-
* @param array|null $params
|
30 |
-
* @param string|null $apiKey
|
31 |
-
*
|
32 |
-
* @return array An array of Stripe_BalanceTransactions.
|
33 |
-
*/
|
34 |
-
public static function all($params=null, $apiKey=null)
|
35 |
-
{
|
36 |
-
$class = get_class();
|
37 |
-
return self::_scopedAll($class, $params, $apiKey);
|
38 |
-
}
|
39 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Stripe/Stripe/Card.php
DELETED
@@ -1,54 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Stripe_Card extends Stripe_ApiResource
|
4 |
-
{
|
5 |
-
public static function constructFrom($values, $apiKey=null)
|
6 |
-
{
|
7 |
-
$class = get_class();
|
8 |
-
return self::scopedConstructFrom($class, $values, $apiKey);
|
9 |
-
}
|
10 |
-
|
11 |
-
/**
|
12 |
-
* @return string The instance URL for this resource. It needs to be special
|
13 |
-
* cased because it doesn't fit into the standard resource pattern.
|
14 |
-
*/
|
15 |
-
public function instanceUrl()
|
16 |
-
{
|
17 |
-
$id = $this['id'];
|
18 |
-
$customer = $this['customer'];
|
19 |
-
$class = get_class($this);
|
20 |
-
if (!$id) {
|
21 |
-
$msg = "Could not determine which URL to request: $class instance "
|
22 |
-
. "has invalid ID: $id";
|
23 |
-
throw new Stripe_InvalidRequestError($msg, null);
|
24 |
-
}
|
25 |
-
$id = Stripe_ApiRequestor::utf8($id);
|
26 |
-
$customer = Stripe_ApiRequestor::utf8($customer);
|
27 |
-
|
28 |
-
$base = self::classUrl('Stripe_Customer');
|
29 |
-
$customerExtn = urlencode($customer);
|
30 |
-
$extn = urlencode($id);
|
31 |
-
return "$base/$customerExtn/cards/$extn";
|
32 |
-
}
|
33 |
-
|
34 |
-
/**
|
35 |
-
* @param array|null $params
|
36 |
-
*
|
37 |
-
* @return Stripe_Card The deleted card.
|
38 |
-
*/
|
39 |
-
public function delete($params=null)
|
40 |
-
{
|
41 |
-
$class = get_class();
|
42 |
-
return self::_scopedDelete($class, $params);
|
43 |
-
}
|
44 |
-
|
45 |
-
/**
|
46 |
-
* @return Stripe_Card The saved card.
|
47 |
-
*/
|
48 |
-
public function save()
|
49 |
-
{
|
50 |
-
$class = get_class();
|
51 |
-
return self::_scopedSave($class);
|
52 |
-
}
|
53 |
-
}
|
54 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Stripe/Stripe/CardError.php
CHANGED
@@ -2,11 +2,9 @@
|
|
2 |
|
3 |
class Stripe_CardError extends Stripe_Error
|
4 |
{
|
5 |
-
public function __construct($message, $param, $code, $
|
6 |
-
$httpBody, $jsonBody
|
7 |
-
)
|
8 |
{
|
9 |
-
parent::__construct($message, $
|
10 |
$this->param = $param;
|
11 |
$this->code = $code;
|
12 |
}
|
2 |
|
3 |
class Stripe_CardError extends Stripe_Error
|
4 |
{
|
5 |
+
public function __construct($message, $param, $code, $http_status=null, $http_body=null, $json_body=null)
|
|
|
|
|
6 |
{
|
7 |
+
parent::__construct($message, $http_status, $http_body, $json_body);
|
8 |
$this->param = $param;
|
9 |
$this->code = $code;
|
10 |
}
|
includes/lib/Stripe/Stripe/Charge.php
CHANGED
@@ -2,56 +2,30 @@
|
|
2 |
|
3 |
class Stripe_Charge extends Stripe_ApiResource
|
4 |
{
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
17 |
-
/**
|
18 |
-
* @param array|null $params
|
19 |
-
* @param string|null $apiKey
|
20 |
-
*
|
21 |
-
* @return array An array of Stripe_Charges.
|
22 |
-
*/
|
23 |
public static function all($params=null, $apiKey=null)
|
24 |
{
|
25 |
$class = get_class();
|
26 |
return self::_scopedAll($class, $params, $apiKey);
|
27 |
}
|
28 |
|
29 |
-
/**
|
30 |
-
* @param array|null $params
|
31 |
-
* @param string|null $apiKey
|
32 |
-
*
|
33 |
-
* @return Stripe_Charge The created charge.
|
34 |
-
*/
|
35 |
public static function create($params=null, $apiKey=null)
|
36 |
{
|
37 |
$class = get_class();
|
38 |
return self::_scopedCreate($class, $params, $apiKey);
|
39 |
}
|
40 |
|
41 |
-
/**
|
42 |
-
* @return Stripe_Charge The saved charge.
|
43 |
-
*/
|
44 |
-
public function save()
|
45 |
-
{
|
46 |
-
$class = get_class();
|
47 |
-
return self::_scopedSave($class);
|
48 |
-
}
|
49 |
-
|
50 |
-
/**
|
51 |
-
* @param array|null $params
|
52 |
-
*
|
53 |
-
* @return Stripe_Charge The refunded charge.
|
54 |
-
*/
|
55 |
public function refund($params=null)
|
56 |
{
|
57 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
@@ -61,11 +35,6 @@ class Stripe_Charge extends Stripe_ApiResource
|
|
61 |
return $this;
|
62 |
}
|
63 |
|
64 |
-
/**
|
65 |
-
* @param array|null $params
|
66 |
-
*
|
67 |
-
* @return Stripe_Charge The captured charge.
|
68 |
-
*/
|
69 |
public function capture($params=null)
|
70 |
{
|
71 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
@@ -75,11 +44,6 @@ class Stripe_Charge extends Stripe_ApiResource
|
|
75 |
return $this;
|
76 |
}
|
77 |
|
78 |
-
/**
|
79 |
-
* @param array|null $params
|
80 |
-
*
|
81 |
-
* @return array The updated dispute.
|
82 |
-
*/
|
83 |
public function updateDispute($params=null)
|
84 |
{
|
85 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
@@ -88,16 +52,4 @@ class Stripe_Charge extends Stripe_ApiResource
|
|
88 |
$this->refreshFrom(array('dispute' => $response), $apiKey, true);
|
89 |
return $this->dispute;
|
90 |
}
|
91 |
-
|
92 |
-
/**
|
93 |
-
* @return Stripe_Charge The updated charge.
|
94 |
-
*/
|
95 |
-
public function closeDispute()
|
96 |
-
{
|
97 |
-
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
98 |
-
$url = $this->instanceUrl() . '/dispute/close';
|
99 |
-
list($response, $apiKey) = $requestor->request('post', $url);
|
100 |
-
$this->refreshFrom($response, $apiKey);
|
101 |
-
return $this;
|
102 |
-
}
|
103 |
-
}
|
2 |
|
3 |
class Stripe_Charge extends Stripe_ApiResource
|
4 |
{
|
5 |
+
public static function constructFrom($values, $apiKey=null)
|
6 |
+
{
|
7 |
+
$class = get_class();
|
8 |
+
return self::scopedConstructFrom($class, $values, $apiKey);
|
9 |
+
}
|
10 |
+
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
public static function all($params=null, $apiKey=null)
|
18 |
{
|
19 |
$class = get_class();
|
20 |
return self::_scopedAll($class, $params, $apiKey);
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
public static function create($params=null, $apiKey=null)
|
24 |
{
|
25 |
$class = get_class();
|
26 |
return self::_scopedCreate($class, $params, $apiKey);
|
27 |
}
|
28 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
public function refund($params=null)
|
30 |
{
|
31 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
35 |
return $this;
|
36 |
}
|
37 |
|
|
|
|
|
|
|
|
|
|
|
38 |
public function capture($params=null)
|
39 |
{
|
40 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
44 |
return $this;
|
45 |
}
|
46 |
|
|
|
|
|
|
|
|
|
|
|
47 |
public function updateDispute($params=null)
|
48 |
{
|
49 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
52 |
$this->refreshFrom(array('dispute' => $response), $apiKey, true);
|
53 |
return $this->dispute;
|
54 |
}
|
55 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Stripe/Stripe/Coupon.php
CHANGED
@@ -2,47 +2,30 @@
|
|
2 |
|
3 |
class Stripe_Coupon extends Stripe_ApiResource
|
4 |
{
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
17 |
-
/**
|
18 |
-
* @param array|null $params
|
19 |
-
* @param string|null $apiKey
|
20 |
-
*
|
21 |
-
* @return Stripe_Coupon The created coupon.
|
22 |
-
*/
|
23 |
public static function create($params=null, $apiKey=null)
|
24 |
{
|
25 |
$class = get_class();
|
26 |
return self::_scopedCreate($class, $params, $apiKey);
|
27 |
}
|
28 |
|
29 |
-
/**
|
30 |
-
* @param array|null $params
|
31 |
-
*
|
32 |
-
* @return Stripe_Coupon The deleted coupon.
|
33 |
-
*/
|
34 |
public function delete($params=null)
|
35 |
{
|
36 |
$class = get_class();
|
37 |
return self::_scopedDelete($class, $params);
|
38 |
}
|
39 |
-
|
40 |
-
/**
|
41 |
-
* @param array|null $params
|
42 |
-
* @param string|null $apiKey
|
43 |
-
*
|
44 |
-
* @return array An array of Stripe_Coupons.
|
45 |
-
*/
|
46 |
public static function all($params=null, $apiKey=null)
|
47 |
{
|
48 |
$class = get_class();
|
2 |
|
3 |
class Stripe_Coupon extends Stripe_ApiResource
|
4 |
{
|
5 |
+
public static function constructFrom($values, $apiKey=null)
|
6 |
+
{
|
7 |
+
$class = get_class();
|
8 |
+
return self::scopedConstructFrom($class, $values, $apiKey);
|
9 |
+
}
|
10 |
+
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
public static function create($params=null, $apiKey=null)
|
18 |
{
|
19 |
$class = get_class();
|
20 |
return self::_scopedCreate($class, $params, $apiKey);
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
|
|
23 |
public function delete($params=null)
|
24 |
{
|
25 |
$class = get_class();
|
26 |
return self::_scopedDelete($class, $params);
|
27 |
}
|
28 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
public static function all($params=null, $apiKey=null)
|
30 |
{
|
31 |
$class = get_class();
|
includes/lib/Stripe/Stripe/Customer.php
CHANGED
@@ -2,67 +2,42 @@
|
|
2 |
|
3 |
class Stripe_Customer extends Stripe_ApiResource
|
4 |
{
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
17 |
-
/**
|
18 |
-
* @param array|null $params
|
19 |
-
* @param string|null $apiKey
|
20 |
-
*
|
21 |
-
* @return array An array of Stripe_Customers.
|
22 |
-
*/
|
23 |
public static function all($params=null, $apiKey=null)
|
24 |
{
|
25 |
$class = get_class();
|
26 |
return self::_scopedAll($class, $params, $apiKey);
|
27 |
}
|
28 |
|
29 |
-
/**
|
30 |
-
* @param array|null $params
|
31 |
-
* @param string|null $apiKey
|
32 |
-
*
|
33 |
-
* @return Stripe_Customer The created customer.
|
34 |
-
*/
|
35 |
public static function create($params=null, $apiKey=null)
|
36 |
{
|
37 |
$class = get_class();
|
38 |
return self::_scopedCreate($class, $params, $apiKey);
|
39 |
}
|
40 |
|
41 |
-
/**
|
42 |
-
* @returns Stripe_Customer The saved customer.
|
43 |
-
*/
|
44 |
public function save()
|
45 |
{
|
46 |
$class = get_class();
|
47 |
return self::_scopedSave($class);
|
48 |
}
|
49 |
|
50 |
-
/**
|
51 |
-
* @param array|null $params
|
52 |
-
*
|
53 |
-
* @returns Stripe_Customer The deleted customer.
|
54 |
-
*/
|
55 |
public function delete($params=null)
|
56 |
{
|
57 |
$class = get_class();
|
58 |
return self::_scopedDelete($class, $params);
|
59 |
}
|
60 |
|
61 |
-
/**
|
62 |
-
* @param array|null $params
|
63 |
-
*
|
64 |
-
* @returns Stripe_InvoiceItem The resulting invoice item.
|
65 |
-
*/
|
66 |
public function addInvoiceItem($params=null)
|
67 |
{
|
68 |
if (!$params)
|
@@ -72,11 +47,6 @@ class Stripe_Customer extends Stripe_ApiResource
|
|
72 |
return $ii;
|
73 |
}
|
74 |
|
75 |
-
/**
|
76 |
-
* @param array|null $params
|
77 |
-
*
|
78 |
-
* @returns array An array of the customer's Stripe_Invoices.
|
79 |
-
*/
|
80 |
public function invoices($params=null)
|
81 |
{
|
82 |
if (!$params)
|
@@ -86,11 +56,6 @@ class Stripe_Customer extends Stripe_ApiResource
|
|
86 |
return $invoices;
|
87 |
}
|
88 |
|
89 |
-
/**
|
90 |
-
* @param array|null $params
|
91 |
-
*
|
92 |
-
* @returns array An array of the customer's Stripe_InvoiceItems.
|
93 |
-
*/
|
94 |
public function invoiceItems($params=null)
|
95 |
{
|
96 |
if (!$params)
|
@@ -100,11 +65,6 @@ class Stripe_Customer extends Stripe_ApiResource
|
|
100 |
return $iis;
|
101 |
}
|
102 |
|
103 |
-
/**
|
104 |
-
* @param array|null $params
|
105 |
-
*
|
106 |
-
* @returns array An array of the customer's Stripe_Charges.
|
107 |
-
*/
|
108 |
public function charges($params=null)
|
109 |
{
|
110 |
if (!$params)
|
@@ -114,11 +74,6 @@ class Stripe_Customer extends Stripe_ApiResource
|
|
114 |
return $charges;
|
115 |
}
|
116 |
|
117 |
-
/**
|
118 |
-
* @param array|null $params
|
119 |
-
*
|
120 |
-
* @returns Stripe_Subscription The updated subscription.
|
121 |
-
*/
|
122 |
public function updateSubscription($params=null)
|
123 |
{
|
124 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
@@ -128,11 +83,6 @@ class Stripe_Customer extends Stripe_ApiResource
|
|
128 |
return $this->subscription;
|
129 |
}
|
130 |
|
131 |
-
/**
|
132 |
-
* @param array|null $params
|
133 |
-
*
|
134 |
-
* @returns Stripe_Subscription The cancelled subscription.
|
135 |
-
*/
|
136 |
public function cancelSubscription($params=null)
|
137 |
{
|
138 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
@@ -142,11 +92,6 @@ class Stripe_Customer extends Stripe_ApiResource
|
|
142 |
return $this->subscription;
|
143 |
}
|
144 |
|
145 |
-
/**
|
146 |
-
* @param array|null $params
|
147 |
-
*
|
148 |
-
* @returns Stripe_Customer The updated customer.
|
149 |
-
*/
|
150 |
public function deleteDiscount()
|
151 |
{
|
152 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
2 |
|
3 |
class Stripe_Customer extends Stripe_ApiResource
|
4 |
{
|
5 |
+
public static function constructFrom($values, $apiKey=null)
|
6 |
+
{
|
7 |
+
$class = get_class();
|
8 |
+
return self::scopedConstructFrom($class, $values, $apiKey);
|
9 |
+
}
|
10 |
+
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
public static function all($params=null, $apiKey=null)
|
18 |
{
|
19 |
$class = get_class();
|
20 |
return self::_scopedAll($class, $params, $apiKey);
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
public static function create($params=null, $apiKey=null)
|
24 |
{
|
25 |
$class = get_class();
|
26 |
return self::_scopedCreate($class, $params, $apiKey);
|
27 |
}
|
28 |
|
|
|
|
|
|
|
29 |
public function save()
|
30 |
{
|
31 |
$class = get_class();
|
32 |
return self::_scopedSave($class);
|
33 |
}
|
34 |
|
|
|
|
|
|
|
|
|
|
|
35 |
public function delete($params=null)
|
36 |
{
|
37 |
$class = get_class();
|
38 |
return self::_scopedDelete($class, $params);
|
39 |
}
|
40 |
|
|
|
|
|
|
|
|
|
|
|
41 |
public function addInvoiceItem($params=null)
|
42 |
{
|
43 |
if (!$params)
|
47 |
return $ii;
|
48 |
}
|
49 |
|
|
|
|
|
|
|
|
|
|
|
50 |
public function invoices($params=null)
|
51 |
{
|
52 |
if (!$params)
|
56 |
return $invoices;
|
57 |
}
|
58 |
|
|
|
|
|
|
|
|
|
|
|
59 |
public function invoiceItems($params=null)
|
60 |
{
|
61 |
if (!$params)
|
65 |
return $iis;
|
66 |
}
|
67 |
|
|
|
|
|
|
|
|
|
|
|
68 |
public function charges($params=null)
|
69 |
{
|
70 |
if (!$params)
|
74 |
return $charges;
|
75 |
}
|
76 |
|
|
|
|
|
|
|
|
|
|
|
77 |
public function updateSubscription($params=null)
|
78 |
{
|
79 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
83 |
return $this->subscription;
|
84 |
}
|
85 |
|
|
|
|
|
|
|
|
|
|
|
86 |
public function cancelSubscription($params=null)
|
87 |
{
|
88 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
92 |
return $this->subscription;
|
93 |
}
|
94 |
|
|
|
|
|
|
|
|
|
|
|
95 |
public function deleteDiscount()
|
96 |
{
|
97 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
includes/lib/Stripe/Stripe/Error.php
CHANGED
@@ -2,28 +2,26 @@
|
|
2 |
|
3 |
class Stripe_Error extends Exception
|
4 |
{
|
5 |
-
public function __construct($message, $
|
6 |
-
$httpBody=null, $jsonBody=null
|
7 |
-
)
|
8 |
{
|
9 |
parent::__construct($message);
|
10 |
-
$this->
|
11 |
-
$this->
|
12 |
-
$this->
|
13 |
}
|
14 |
|
15 |
public function getHttpStatus()
|
16 |
{
|
17 |
-
return $this->
|
18 |
}
|
19 |
|
20 |
public function getHttpBody()
|
21 |
{
|
22 |
-
return $this->
|
23 |
}
|
24 |
|
25 |
public function getJsonBody()
|
26 |
{
|
27 |
-
return $this->
|
28 |
}
|
29 |
}
|
2 |
|
3 |
class Stripe_Error extends Exception
|
4 |
{
|
5 |
+
public function __construct($message=null, $http_status=null, $http_body=null, $json_body=null)
|
|
|
|
|
6 |
{
|
7 |
parent::__construct($message);
|
8 |
+
$this->http_status = $http_status;
|
9 |
+
$this->http_body = $http_body;
|
10 |
+
$this->json_body = $json_body;
|
11 |
}
|
12 |
|
13 |
public function getHttpStatus()
|
14 |
{
|
15 |
+
return $this->http_status;
|
16 |
}
|
17 |
|
18 |
public function getHttpBody()
|
19 |
{
|
20 |
+
return $this->http_body;
|
21 |
}
|
22 |
|
23 |
public function getJsonBody()
|
24 |
{
|
25 |
+
return $this->json_body;
|
26 |
}
|
27 |
}
|
includes/lib/Stripe/Stripe/Event.php
CHANGED
@@ -2,24 +2,18 @@
|
|
2 |
|
3 |
class Stripe_Event extends Stripe_ApiResource
|
4 |
{
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
17 |
-
/**
|
18 |
-
* @param array|null $params
|
19 |
-
* @param string|null $apiKey
|
20 |
-
*
|
21 |
-
* @return array An array of Stripe_Events.
|
22 |
-
*/
|
23 |
public static function all($params=null, $apiKey=null)
|
24 |
{
|
25 |
$class = get_class();
|
2 |
|
3 |
class Stripe_Event extends Stripe_ApiResource
|
4 |
{
|
5 |
+
public static function constructFrom($values, $apiKey=null)
|
6 |
+
{
|
7 |
+
$class = get_class();
|
8 |
+
return self::scopedConstructFrom($class, $values, $apiKey);
|
9 |
+
}
|
10 |
+
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
public static function all($params=null, $apiKey=null)
|
18 |
{
|
19 |
$class = get_class();
|
includes/lib/Stripe/Stripe/InvalidRequestError.php
CHANGED
@@ -2,11 +2,9 @@
|
|
2 |
|
3 |
class Stripe_InvalidRequestError extends Stripe_Error
|
4 |
{
|
5 |
-
public function __construct($message, $param, $
|
6 |
-
$httpBody=null, $jsonBody=null
|
7 |
-
)
|
8 |
{
|
9 |
-
parent::__construct($message, $
|
10 |
$this->param = $param;
|
11 |
}
|
12 |
}
|
2 |
|
3 |
class Stripe_InvalidRequestError extends Stripe_Error
|
4 |
{
|
5 |
+
public function __construct($message, $param, $http_status=null, $http_body=null, $json_body=null)
|
|
|
|
|
6 |
{
|
7 |
+
parent::__construct($message, $http_status, $http_body, $json_body);
|
8 |
$this->param = $param;
|
9 |
}
|
10 |
}
|
includes/lib/Stripe/Stripe/Invoice.php
CHANGED
@@ -2,48 +2,30 @@
|
|
2 |
|
3 |
class Stripe_Invoice extends Stripe_ApiResource
|
4 |
{
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
public static function create($params=null, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedCreate($class, $params, $apiKey);
|
15 |
}
|
16 |
|
17 |
-
/**
|
18 |
-
* @param string $id The ID of the invoice to retrieve.
|
19 |
-
* @param string|null $apiKey
|
20 |
-
*
|
21 |
-
* @return Stripe_Invoice
|
22 |
-
*/
|
23 |
public static function retrieve($id, $apiKey=null)
|
24 |
{
|
25 |
$class = get_class();
|
26 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
27 |
}
|
28 |
|
29 |
-
/**
|
30 |
-
* @param array|null $params
|
31 |
-
* @param string|null $apiKey
|
32 |
-
*
|
33 |
-
* @return array An array of Stripe_Invoices.
|
34 |
-
*/
|
35 |
public static function all($params=null, $apiKey=null)
|
36 |
{
|
37 |
$class = get_class();
|
38 |
return self::_scopedAll($class, $params, $apiKey);
|
39 |
}
|
40 |
|
41 |
-
/**
|
42 |
-
* @param array|null $params
|
43 |
-
* @param string|null $apiKey
|
44 |
-
*
|
45 |
-
* @return Stripe_Invoice The upcoming invoice.
|
46 |
-
*/
|
47 |
public static function upcoming($params=null, $apiKey=null)
|
48 |
{
|
49 |
$requestor = new Stripe_ApiRequestor($apiKey);
|
@@ -52,18 +34,12 @@ class Stripe_Invoice extends Stripe_ApiResource
|
|
52 |
return Stripe_Util::convertToStripeObject($response, $apiKey);
|
53 |
}
|
54 |
|
55 |
-
/**
|
56 |
-
* @return Stripe_Invoice The saved invoice.
|
57 |
-
*/
|
58 |
public function save()
|
59 |
{
|
60 |
$class = get_class();
|
61 |
return self::_scopedSave($class);
|
62 |
}
|
63 |
|
64 |
-
/**
|
65 |
-
* @return Stripe_Invoice The paid invoice.
|
66 |
-
*/
|
67 |
public function pay()
|
68 |
{
|
69 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
2 |
|
3 |
class Stripe_Invoice extends Stripe_ApiResource
|
4 |
{
|
5 |
+
public static function constructFrom($values, $apiKey=null)
|
6 |
+
{
|
7 |
+
$class = get_class();
|
8 |
+
return self::scopedConstructFrom($class, $values, $apiKey);
|
9 |
+
}
|
10 |
+
|
11 |
public static function create($params=null, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedCreate($class, $params, $apiKey);
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
public static function retrieve($id, $apiKey=null)
|
18 |
{
|
19 |
$class = get_class();
|
20 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
public static function all($params=null, $apiKey=null)
|
24 |
{
|
25 |
$class = get_class();
|
26 |
return self::_scopedAll($class, $params, $apiKey);
|
27 |
}
|
28 |
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
public static function upcoming($params=null, $apiKey=null)
|
30 |
{
|
31 |
$requestor = new Stripe_ApiRequestor($apiKey);
|
34 |
return Stripe_Util::convertToStripeObject($response, $apiKey);
|
35 |
}
|
36 |
|
|
|
|
|
|
|
37 |
public function save()
|
38 |
{
|
39 |
$class = get_class();
|
40 |
return self::_scopedSave($class);
|
41 |
}
|
42 |
|
|
|
|
|
|
|
43 |
public function pay()
|
44 |
{
|
45 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
includes/lib/Stripe/Stripe/InvoiceItem.php
CHANGED
@@ -2,54 +2,36 @@
|
|
2 |
|
3 |
class Stripe_InvoiceItem extends Stripe_ApiResource
|
4 |
{
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
17 |
-
/**
|
18 |
-
* @param array|null $params
|
19 |
-
* @param string|null $apiKey
|
20 |
-
*
|
21 |
-
* @return array An array of Stripe_InvoiceItems.
|
22 |
-
*/
|
23 |
public static function all($params=null, $apiKey=null)
|
24 |
{
|
25 |
$class = get_class();
|
26 |
return self::_scopedAll($class, $params, $apiKey);
|
27 |
}
|
28 |
|
29 |
-
/**
|
30 |
-
* @param array|null $params
|
31 |
-
* @param string|null $apiKey
|
32 |
-
*
|
33 |
-
* @return Stripe_InvoiceItem The created invoice item.
|
34 |
-
*/
|
35 |
public static function create($params=null, $apiKey=null)
|
36 |
{
|
37 |
$class = get_class();
|
38 |
return self::_scopedCreate($class, $params, $apiKey);
|
39 |
}
|
40 |
|
41 |
-
/**
|
42 |
-
* @return Stripe_InvoiceItem The saved invoice item.
|
43 |
-
*/
|
44 |
public function save()
|
45 |
{
|
46 |
$class = get_class();
|
47 |
return self::_scopedSave($class);
|
48 |
}
|
49 |
|
50 |
-
/**
|
51 |
-
* @return Stripe_InvoiceItem The deleted invoice item.
|
52 |
-
*/
|
53 |
public function delete($params=null)
|
54 |
{
|
55 |
$class = get_class();
|
2 |
|
3 |
class Stripe_InvoiceItem extends Stripe_ApiResource
|
4 |
{
|
5 |
+
public static function constructFrom($values, $apiKey=null)
|
6 |
+
{
|
7 |
+
$class = get_class();
|
8 |
+
return self::scopedConstructFrom($class, $values, $apiKey);
|
9 |
+
}
|
10 |
+
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
public static function all($params=null, $apiKey=null)
|
18 |
{
|
19 |
$class = get_class();
|
20 |
return self::_scopedAll($class, $params, $apiKey);
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
public static function create($params=null, $apiKey=null)
|
24 |
{
|
25 |
$class = get_class();
|
26 |
return self::_scopedCreate($class, $params, $apiKey);
|
27 |
}
|
28 |
|
|
|
|
|
|
|
29 |
public function save()
|
30 |
{
|
31 |
$class = get_class();
|
32 |
return self::_scopedSave($class);
|
33 |
}
|
34 |
|
|
|
|
|
|
|
35 |
public function delete($params=null)
|
36 |
{
|
37 |
$class = get_class();
|
includes/lib/Stripe/Stripe/List.php
CHANGED
@@ -2,36 +2,16 @@
|
|
2 |
|
3 |
class Stripe_List extends Stripe_Object
|
4 |
{
|
5 |
-
public function
|
6 |
-
{
|
7 |
-
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
8 |
-
list($response, $apiKey) = $requestor->request(
|
9 |
-
'get',
|
10 |
-
$this['url'],
|
11 |
-
$params
|
12 |
-
);
|
13 |
-
return Stripe_Util::convertToStripeObject($response, $apiKey);
|
14 |
-
}
|
15 |
-
|
16 |
-
public function create($params=null)
|
17 |
{
|
18 |
-
$
|
19 |
-
|
20 |
-
'post', $this['url'], $params
|
21 |
-
);
|
22 |
-
return Stripe_Util::convertToStripeObject($response, $apiKey);
|
23 |
}
|
24 |
|
25 |
-
public function
|
26 |
{
|
27 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
28 |
-
$
|
29 |
-
$id = Stripe_ApiRequestor::utf8($id);
|
30 |
-
$extn = urlencode($id);
|
31 |
-
list($response, $apiKey) = $requestor->request(
|
32 |
-
'get', "$base/$extn", $params
|
33 |
-
);
|
34 |
return Stripe_Util::convertToStripeObject($response, $apiKey);
|
35 |
}
|
36 |
-
|
37 |
}
|
2 |
|
3 |
class Stripe_List extends Stripe_Object
|
4 |
{
|
5 |
+
public static function constructFrom($values, $apiKey=null)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
{
|
7 |
+
$class = get_class();
|
8 |
+
return self::scopedConstructFrom($class, $values, $apiKey);
|
|
|
|
|
|
|
9 |
}
|
10 |
|
11 |
+
public function all($params=null)
|
12 |
{
|
13 |
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
14 |
+
list($response, $apiKey) = $requestor->request('get', $this['url'], $params);
|
|
|
|
|
|
|
|
|
|
|
15 |
return Stripe_Util::convertToStripeObject($response, $apiKey);
|
16 |
}
|
|
|
17 |
}
|
includes/lib/Stripe/Stripe/Object.php
CHANGED
@@ -2,28 +2,17 @@
|
|
2 |
|
3 |
class Stripe_Object implements ArrayAccess
|
4 |
{
|
5 |
-
|
6 |
-
* @var array Attributes that should not be sent to the API because they're
|
7 |
-
* not updatable (e.g. API key, ID).
|
8 |
-
*/
|
9 |
-
public static $permanentAttributes;
|
10 |
-
/**
|
11 |
-
* @var array Attributes that are nested but still updatable from the parent
|
12 |
-
* class's URL (e.g. metadata).
|
13 |
-
*/
|
14 |
-
public static $nestedUpdatableAttributes;
|
15 |
|
16 |
public static function init()
|
17 |
{
|
18 |
-
self::$
|
19 |
-
self::$nestedUpdatableAttributes = new Stripe_Util_Set(array('metadata'));
|
20 |
}
|
21 |
|
22 |
protected $_apiKey;
|
23 |
protected $_values;
|
24 |
protected $_unsavedValues;
|
25 |
protected $_transientValues;
|
26 |
-
protected $_retrieveOptions;
|
27 |
|
28 |
public function __construct($id=null, $apiKey=null)
|
29 |
{
|
@@ -31,16 +20,6 @@ class Stripe_Object implements ArrayAccess
|
|
31 |
$this->_values = array();
|
32 |
$this->_unsavedValues = new Stripe_Util_Set();
|
33 |
$this->_transientValues = new Stripe_Util_Set();
|
34 |
-
|
35 |
-
$this->_retrieveOptions = array();
|
36 |
-
if (is_array($id)) {
|
37 |
-
foreach ($id as $key => $value) {
|
38 |
-
if ($key != 'id')
|
39 |
-
$this->_retrieveOptions[$key] = $value;
|
40 |
-
}
|
41 |
-
$id = $id['id'];
|
42 |
-
}
|
43 |
-
|
44 |
if ($id)
|
45 |
$this->id = $id;
|
46 |
}
|
@@ -48,21 +27,9 @@ class Stripe_Object implements ArrayAccess
|
|
48 |
// Standard accessor magic methods
|
49 |
public function __set($k, $v)
|
50 |
{
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
.'We interpret empty strings as NULL in requests. '
|
55 |
-
.'You may set obj->'.$k.' = NULL to delete the property'
|
56 |
-
);
|
57 |
-
}
|
58 |
-
|
59 |
-
if (self::$nestedUpdatableAttributes->includes($k) && isset($this->$k) && is_array($v)) {
|
60 |
-
$this->$k->replaceWith($v);
|
61 |
-
} else {
|
62 |
-
// TODO: may want to clear from $_transientValues. (Won't be user-visible.)
|
63 |
-
$this->_values[$k] = $v;
|
64 |
-
}
|
65 |
-
if (!self::$permanentAttributes->includes($k))
|
66 |
$this->_unsavedValues->add($k);
|
67 |
}
|
68 |
public function __isset($k)
|
@@ -82,13 +49,7 @@ class Stripe_Object implements ArrayAccess
|
|
82 |
} else if ($this->_transientValues->includes($k)) {
|
83 |
$class = get_class($this);
|
84 |
$attrs = join(', ', array_keys($this->_values));
|
85 |
-
|
86 |
-
. "HINT: The $k attribute was set in the past, however. "
|
87 |
-
. "It was then wiped when refreshing the object "
|
88 |
-
. "with the result returned by Stripe's API, "
|
89 |
-
. "probably as a result of a save(). The attributes currently "
|
90 |
-
. "available on this object are: $attrs";
|
91 |
-
error_log($message);
|
92 |
return null;
|
93 |
} else {
|
94 |
$class = get_class($this);
|
@@ -102,7 +63,7 @@ class Stripe_Object implements ArrayAccess
|
|
102 |
{
|
103 |
$this->$k = $v;
|
104 |
}
|
105 |
-
|
106 |
public function offsetExists($k)
|
107 |
{
|
108 |
return array_key_exists($k, $this->_values);
|
@@ -117,20 +78,7 @@ class Stripe_Object implements ArrayAccess
|
|
117 |
return array_key_exists($k, $this->_values) ? $this->_values[$k] : null;
|
118 |
}
|
119 |
|
120 |
-
public
|
121 |
-
{
|
122 |
-
return array_keys($this->_values);
|
123 |
-
}
|
124 |
-
|
125 |
-
/**
|
126 |
-
* This unfortunately needs to be public to be used in Util.php
|
127 |
-
*
|
128 |
-
* @param Stripe_Object $class
|
129 |
-
* @param array $values
|
130 |
-
* @param string|null $apiKey
|
131 |
-
*
|
132 |
-
* @return Stripe_Object The object constructed from the given values.
|
133 |
-
*/
|
134 |
public static function scopedConstructFrom($class, $values, $apiKey=null)
|
135 |
{
|
136 |
$obj = new $class(isset($values['id']) ? $values['id'] : null, $apiKey);
|
@@ -138,30 +86,15 @@ class Stripe_Object implements ArrayAccess
|
|
138 |
return $obj;
|
139 |
}
|
140 |
|
141 |
-
/**
|
142 |
-
* @param array $values
|
143 |
-
* @param string|null $apiKey
|
144 |
-
*
|
145 |
-
* @return Stripe_Object The object of the same class as $this constructed
|
146 |
-
* from the given values.
|
147 |
-
*/
|
148 |
public static function constructFrom($values, $apiKey=null)
|
149 |
{
|
150 |
-
$class = get_class(
|
151 |
return self::scopedConstructFrom($class, $values, $apiKey);
|
152 |
}
|
153 |
|
154 |
-
/**
|
155 |
-
* Refreshes this object using the provided values.
|
156 |
-
*
|
157 |
-
* @param array $values
|
158 |
-
* @param string $apiKey
|
159 |
-
* @param boolean $partial Defaults to false.
|
160 |
-
*/
|
161 |
public function refreshFrom($values, $apiKey, $partial=false)
|
162 |
{
|
163 |
$this->_apiKey = $apiKey;
|
164 |
-
|
165 |
// Wipe old state before setting new. This is useful for e.g. updating a
|
166 |
// customer, where there is no persistent card parameter. Mark those values
|
167 |
// which don't persist as transient
|
@@ -171,64 +104,20 @@ class Stripe_Object implements ArrayAccess
|
|
171 |
$removed = array_diff(array_keys($this->_values), array_keys($values));
|
172 |
|
173 |
foreach ($removed as $k) {
|
174 |
-
if (self::$
|
175 |
continue;
|
176 |
unset($this->$k);
|
177 |
}
|
178 |
|
179 |
foreach ($values as $k => $v) {
|
180 |
-
if (self::$
|
181 |
continue;
|
182 |
-
|
183 |
-
if (self::$nestedUpdatableAttributes->includes($k) && is_array($v))
|
184 |
-
$this->_values[$k] = Stripe_Object::scopedConstructFrom('Stripe_AttachedObject', $v, $apiKey);
|
185 |
-
else
|
186 |
-
$this->_values[$k] = Stripe_Util::convertToStripeObject($v, $apiKey);
|
187 |
-
|
188 |
$this->_transientValues->discard($k);
|
189 |
$this->_unsavedValues->discard($k);
|
190 |
}
|
191 |
}
|
192 |
|
193 |
-
/**
|
194 |
-
* @return array A recursive mapping of attributes to values for this object,
|
195 |
-
* including the proper value for deleted attributes.
|
196 |
-
*/
|
197 |
-
public function serializeParameters()
|
198 |
-
{
|
199 |
-
$params = array();
|
200 |
-
if ($this->_unsavedValues) {
|
201 |
-
foreach ($this->_unsavedValues->toArray() as $k) {
|
202 |
-
$v = $this->$k;
|
203 |
-
if ($v === NULL) {
|
204 |
-
$v = '';
|
205 |
-
}
|
206 |
-
$params[$k] = $v;
|
207 |
-
}
|
208 |
-
}
|
209 |
-
|
210 |
-
// Get nested updates.
|
211 |
-
foreach (self::$nestedUpdatableAttributes->toArray() as $property) {
|
212 |
-
if (isset($this->$property) && $this->$property instanceOf Stripe_Object) {
|
213 |
-
$params[$property] = $this->$property->serializeParameters();
|
214 |
-
}
|
215 |
-
}
|
216 |
-
return $params;
|
217 |
-
}
|
218 |
-
|
219 |
-
// Pretend to have late static bindings, even in PHP 5.2
|
220 |
-
protected function _lsb($method)
|
221 |
-
{
|
222 |
-
$class = get_class($this);
|
223 |
-
$args = array_slice(func_get_args(), 1);
|
224 |
-
return call_user_func_array(array($class, $method), $args);
|
225 |
-
}
|
226 |
-
protected static function _scopedLsb($class, $method)
|
227 |
-
{
|
228 |
-
$args = array_slice(func_get_args(), 2);
|
229 |
-
return call_user_func_array(array($class, $method), $args);
|
230 |
-
}
|
231 |
-
|
232 |
public function __toJSON()
|
233 |
{
|
234 |
if (defined('JSON_PRETTY_PRINT'))
|
2 |
|
3 |
class Stripe_Object implements ArrayAccess
|
4 |
{
|
5 |
+
public static $_permanentAttributes;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
public static function init()
|
8 |
{
|
9 |
+
self::$_permanentAttributes = new Stripe_Util_Set(array('_apiKey'));
|
|
|
10 |
}
|
11 |
|
12 |
protected $_apiKey;
|
13 |
protected $_values;
|
14 |
protected $_unsavedValues;
|
15 |
protected $_transientValues;
|
|
|
16 |
|
17 |
public function __construct($id=null, $apiKey=null)
|
18 |
{
|
20 |
$this->_values = array();
|
21 |
$this->_unsavedValues = new Stripe_Util_Set();
|
22 |
$this->_transientValues = new Stripe_Util_Set();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
if ($id)
|
24 |
$this->id = $id;
|
25 |
}
|
27 |
// Standard accessor magic methods
|
28 |
public function __set($k, $v)
|
29 |
{
|
30 |
+
// TODO: may want to clear from $_transientValues. (Won't be user-visible.)
|
31 |
+
$this->_values[$k] = $v;
|
32 |
+
if (!self::$_permanentAttributes->includes($k))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
$this->_unsavedValues->add($k);
|
34 |
}
|
35 |
public function __isset($k)
|
49 |
} else if ($this->_transientValues->includes($k)) {
|
50 |
$class = get_class($this);
|
51 |
$attrs = join(', ', array_keys($this->_values));
|
52 |
+
error_log("Stripe Notice: Undefined property of $class instance: $k. HINT: The $k attribute was set in the past, however. It was then wiped when refreshing the object with the result returned by Stripe's API, probably as a result of a save(). The attributes currently available on this object are: $attrs");
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
return null;
|
54 |
} else {
|
55 |
$class = get_class($this);
|
63 |
{
|
64 |
$this->$k = $v;
|
65 |
}
|
66 |
+
|
67 |
public function offsetExists($k)
|
68 |
{
|
69 |
return array_key_exists($k, $this->_values);
|
78 |
return array_key_exists($k, $this->_values) ? $this->_values[$k] : null;
|
79 |
}
|
80 |
|
81 |
+
// This unfortunately needs to be public to be used in Util.php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
public static function scopedConstructFrom($class, $values, $apiKey=null)
|
83 |
{
|
84 |
$obj = new $class(isset($values['id']) ? $values['id'] : null, $apiKey);
|
86 |
return $obj;
|
87 |
}
|
88 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
public static function constructFrom($values, $apiKey=null)
|
90 |
{
|
91 |
+
$class = get_class();
|
92 |
return self::scopedConstructFrom($class, $values, $apiKey);
|
93 |
}
|
94 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
public function refreshFrom($values, $apiKey, $partial=false)
|
96 |
{
|
97 |
$this->_apiKey = $apiKey;
|
|
|
98 |
// Wipe old state before setting new. This is useful for e.g. updating a
|
99 |
// customer, where there is no persistent card parameter. Mark those values
|
100 |
// which don't persist as transient
|
104 |
$removed = array_diff(array_keys($this->_values), array_keys($values));
|
105 |
|
106 |
foreach ($removed as $k) {
|
107 |
+
if (self::$_permanentAttributes->includes($k))
|
108 |
continue;
|
109 |
unset($this->$k);
|
110 |
}
|
111 |
|
112 |
foreach ($values as $k => $v) {
|
113 |
+
if (self::$_permanentAttributes->includes($k))
|
114 |
continue;
|
115 |
+
$this->_values[$k] = Stripe_Util::convertToStripeObject($v, $apiKey);
|
|
|
|
|
|
|
|
|
|
|
116 |
$this->_transientValues->discard($k);
|
117 |
$this->_unsavedValues->discard($k);
|
118 |
}
|
119 |
}
|
120 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
public function __toJSON()
|
122 |
{
|
123 |
if (defined('JSON_PRETTY_PRINT'))
|
includes/lib/Stripe/Stripe/Plan.php
CHANGED
@@ -2,56 +2,36 @@
|
|
2 |
|
3 |
class Stripe_Plan extends Stripe_ApiResource
|
4 |
{
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
17 |
-
/**
|
18 |
-
* @param array|null $params
|
19 |
-
* @param string|null $apiKey
|
20 |
-
*
|
21 |
-
* @return Stripe_Plan The created plan.
|
22 |
-
*/
|
23 |
public static function create($params=null, $apiKey=null)
|
24 |
{
|
25 |
$class = get_class();
|
26 |
return self::_scopedCreate($class, $params, $apiKey);
|
27 |
}
|
28 |
|
29 |
-
/**
|
30 |
-
* @param array|null $params
|
31 |
-
*
|
32 |
-
* @return Stripe_Plan The deleted plan.
|
33 |
-
*/
|
34 |
public function delete($params=null)
|
35 |
{
|
36 |
$class = get_class();
|
37 |
return self::_scopedDelete($class, $params);
|
38 |
}
|
39 |
|
40 |
-
/**
|
41 |
-
* @return Stripe_Plan The saved plan.
|
42 |
-
*/
|
43 |
public function save()
|
44 |
{
|
45 |
$class = get_class();
|
46 |
return self::_scopedSave($class);
|
47 |
}
|
48 |
|
49 |
-
/**
|
50 |
-
* @param array|null $params
|
51 |
-
* @param string|null $apiKey
|
52 |
-
*
|
53 |
-
* @return array An array of Stripe_Plans.
|
54 |
-
*/
|
55 |
public static function all($params=null, $apiKey=null)
|
56 |
{
|
57 |
$class = get_class();
|
2 |
|
3 |
class Stripe_Plan extends Stripe_ApiResource
|
4 |
{
|
5 |
+
public static function constructFrom($values, $apiKey=null)
|
6 |
+
{
|
7 |
+
$class = get_class();
|
8 |
+
return self::scopedConstructFrom($class, $values, $apiKey);
|
9 |
+
}
|
10 |
+
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
public static function create($params=null, $apiKey=null)
|
18 |
{
|
19 |
$class = get_class();
|
20 |
return self::_scopedCreate($class, $params, $apiKey);
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
|
|
23 |
public function delete($params=null)
|
24 |
{
|
25 |
$class = get_class();
|
26 |
return self::_scopedDelete($class, $params);
|
27 |
}
|
28 |
|
|
|
|
|
|
|
29 |
public function save()
|
30 |
{
|
31 |
$class = get_class();
|
32 |
return self::_scopedSave($class);
|
33 |
}
|
34 |
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
public static function all($params=null, $apiKey=null)
|
36 |
{
|
37 |
$class = get_class();
|
includes/lib/Stripe/Stripe/Recipient.php
DELETED
@@ -1,75 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Stripe_Recipient extends Stripe_ApiResource
|
4 |
-
{
|
5 |
-
/**
|
6 |
-
* @param string $id The ID of the recipient to retrieve.
|
7 |
-
* @param string|null $apiKey
|
8 |
-
*
|
9 |
-
* @return Stripe_Recipient
|
10 |
-
*/
|
11 |
-
public static function retrieve($id, $apiKey=null)
|
12 |
-
{
|
13 |
-
$class = get_class();
|
14 |
-
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
-
}
|
16 |
-
|
17 |
-
/**
|
18 |
-
* @param array|null $params
|
19 |
-
* @param string|null $apiKey
|
20 |
-
*
|
21 |
-
* @return array An array of Stripe_Recipients.
|
22 |
-
*/
|
23 |
-
public static function all($params=null, $apiKey=null)
|
24 |
-
{
|
25 |
-
$class = get_class();
|
26 |
-
return self::_scopedAll($class, $params, $apiKey);
|
27 |
-
}
|
28 |
-
|
29 |
-
/**
|
30 |
-
* @param array|null $params
|
31 |
-
* @param string|null $apiKey
|
32 |
-
*
|
33 |
-
* @return Stripe_Recipient The created recipient.
|
34 |
-
*/
|
35 |
-
public static function create($params=null, $apiKey=null)
|
36 |
-
{
|
37 |
-
$class = get_class();
|
38 |
-
return self::_scopedCreate($class, $params, $apiKey);
|
39 |
-
}
|
40 |
-
|
41 |
-
/**
|
42 |
-
* @return Stripe_Recipient The saved recipient.
|
43 |
-
*/
|
44 |
-
public function save()
|
45 |
-
{
|
46 |
-
$class = get_class();
|
47 |
-
return self::_scopedSave($class);
|
48 |
-
}
|
49 |
-
|
50 |
-
/**
|
51 |
-
* @param array|null $params
|
52 |
-
*
|
53 |
-
* @return Stripe_Recipient The deleted recipient.
|
54 |
-
*/
|
55 |
-
public function delete($params=null)
|
56 |
-
{
|
57 |
-
$class = get_class();
|
58 |
-
return self::_scopedDelete($class, $params);
|
59 |
-
}
|
60 |
-
|
61 |
-
|
62 |
-
/**
|
63 |
-
* @param array|null $params
|
64 |
-
*
|
65 |
-
* @return array An array of the recipient's Stripe_Transfers.
|
66 |
-
*/
|
67 |
-
public function transfers($params=null)
|
68 |
-
{
|
69 |
-
if (!$params)
|
70 |
-
$params = array();
|
71 |
-
$params['recipient'] = $this->id;
|
72 |
-
$transfers = Stripe_Transfer::all($params, $this->_apiKey);
|
73 |
-
return $transfers;
|
74 |
-
}
|
75 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Stripe/Stripe/SingletonApiResource.php
CHANGED
@@ -9,19 +9,12 @@ abstract class Stripe_SingletonApiResource extends Stripe_ApiResource
|
|
9 |
return $instance;
|
10 |
}
|
11 |
|
12 |
-
/**
|
13 |
-
* @param Stripe_SingletonApiResource $class
|
14 |
-
* @return string The endpoint associated with this singleton class.
|
15 |
-
*/
|
16 |
public static function classUrl($class)
|
17 |
{
|
18 |
$base = self::className($class);
|
19 |
return "/v1/${base}";
|
20 |
}
|
21 |
|
22 |
-
/**
|
23 |
-
* @return string The endpoint associated with this singleton API resource.
|
24 |
-
*/
|
25 |
public function instanceUrl()
|
26 |
{
|
27 |
$class = get_class($this);
|
9 |
return $instance;
|
10 |
}
|
11 |
|
|
|
|
|
|
|
|
|
12 |
public static function classUrl($class)
|
13 |
{
|
14 |
$base = self::className($class);
|
15 |
return "/v1/${base}";
|
16 |
}
|
17 |
|
|
|
|
|
|
|
18 |
public function instanceUrl()
|
19 |
{
|
20 |
$class = get_class($this);
|
includes/lib/Stripe/Stripe/Stripe.php
CHANGED
@@ -2,72 +2,26 @@
|
|
2 |
|
3 |
abstract class Stripe
|
4 |
{
|
5 |
-
/**
|
6 |
-
* @var string The Stripe API key to be used for requests.
|
7 |
-
*/
|
8 |
public static $apiKey;
|
9 |
-
/**
|
10 |
-
* @var string The base URL for the Stripe API.
|
11 |
-
*/
|
12 |
public static $apiBase = 'https://api.stripe.com';
|
13 |
-
/**
|
14 |
-
* @var string|null The version of the Stripe API to use for requests.
|
15 |
-
*/
|
16 |
-
public static $apiVersion = null;
|
17 |
-
/**
|
18 |
-
* @var boolean Defaults to true.
|
19 |
-
*/
|
20 |
public static $verifySslCerts = true;
|
21 |
-
const VERSION = '1.
|
22 |
|
23 |
-
/**
|
24 |
-
* @return string The API key used for requests.
|
25 |
-
*/
|
26 |
public static function getApiKey()
|
27 |
{
|
28 |
return self::$apiKey;
|
29 |
}
|
30 |
|
31 |
-
/**
|
32 |
-
* Sets the API key to be used for requests.
|
33 |
-
*
|
34 |
-
* @param string $apiKey
|
35 |
-
*/
|
36 |
public static function setApiKey($apiKey)
|
37 |
{
|
38 |
self::$apiKey = $apiKey;
|
39 |
}
|
40 |
|
41 |
-
|
42 |
-
* @return string The API version used for requests. null if we're using the
|
43 |
-
* latest version.
|
44 |
-
*/
|
45 |
-
public static function getApiVersion()
|
46 |
-
{
|
47 |
-
return self::$apiVersion;
|
48 |
-
}
|
49 |
-
|
50 |
-
/**
|
51 |
-
* @param string $apiVersion The API version to use for requests.
|
52 |
-
*/
|
53 |
-
public static function setApiVersion($apiVersion)
|
54 |
-
{
|
55 |
-
self::$apiVersion = $apiVersion;
|
56 |
-
}
|
57 |
-
|
58 |
-
/**
|
59 |
-
* @return boolean
|
60 |
-
*/
|
61 |
-
public static function getVerifySslCerts()
|
62 |
-
{
|
63 |
return self::$verifySslCerts;
|
64 |
}
|
65 |
|
66 |
-
|
67 |
-
* @param boolean $verify
|
68 |
-
*/
|
69 |
-
public static function setVerifySslCerts($verify)
|
70 |
-
{
|
71 |
self::$verifySslCerts = $verify;
|
72 |
}
|
73 |
}
|
2 |
|
3 |
abstract class Stripe
|
4 |
{
|
|
|
|
|
|
|
5 |
public static $apiKey;
|
|
|
|
|
|
|
6 |
public static $apiBase = 'https://api.stripe.com';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
public static $verifySslCerts = true;
|
8 |
+
const VERSION = '1.7.9';
|
9 |
|
|
|
|
|
|
|
10 |
public static function getApiKey()
|
11 |
{
|
12 |
return self::$apiKey;
|
13 |
}
|
14 |
|
|
|
|
|
|
|
|
|
|
|
15 |
public static function setApiKey($apiKey)
|
16 |
{
|
17 |
self::$apiKey = $apiKey;
|
18 |
}
|
19 |
|
20 |
+
public static function getVerifySslCerts() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
return self::$verifySslCerts;
|
22 |
}
|
23 |
|
24 |
+
public static function setVerifySslCerts($verify) {
|
|
|
|
|
|
|
|
|
25 |
self::$verifySslCerts = $verify;
|
26 |
}
|
27 |
}
|
includes/lib/Stripe/Stripe/Subscription.php
DELETED
@@ -1,58 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Stripe_Subscription extends Stripe_ApiResource
|
4 |
-
{
|
5 |
-
/**
|
6 |
-
* @return string The API URL for this Stripe subscription.
|
7 |
-
*/
|
8 |
-
public function instanceUrl()
|
9 |
-
{
|
10 |
-
$id = $this['id'];
|
11 |
-
$customer = $this['customer'];
|
12 |
-
$class = get_class($this);
|
13 |
-
if (!$id) {
|
14 |
-
throw new Stripe_InvalidRequestError(
|
15 |
-
"Could not determine which URL to request: " .
|
16 |
-
"class instance has invalid ID: $id",
|
17 |
-
null
|
18 |
-
);
|
19 |
-
}
|
20 |
-
$id = Stripe_ApiRequestor::utf8($id);
|
21 |
-
$customer = Stripe_ApiRequestor::utf8($customer);
|
22 |
-
|
23 |
-
$base = self::classUrl('Stripe_Customer');
|
24 |
-
$customerExtn = urlencode($customer);
|
25 |
-
$extn = urlencode($id);
|
26 |
-
return "$base/$customerExtn/subscriptions/$extn";
|
27 |
-
}
|
28 |
-
|
29 |
-
/**
|
30 |
-
* @param array|null $params
|
31 |
-
* @return Stripe_Subscription The deleted subscription.
|
32 |
-
*/
|
33 |
-
public function cancel($params=null)
|
34 |
-
{
|
35 |
-
$class = get_class();
|
36 |
-
return self::_scopedDelete($class, $params);
|
37 |
-
}
|
38 |
-
|
39 |
-
/**
|
40 |
-
* @return Stripe_Subscription The saved subscription.
|
41 |
-
*/
|
42 |
-
public function save()
|
43 |
-
{
|
44 |
-
$class = get_class();
|
45 |
-
return self::_scopedSave($class);
|
46 |
-
}
|
47 |
-
|
48 |
-
/**
|
49 |
-
* @return Stripe_Subscription The updated subscription.
|
50 |
-
*/
|
51 |
-
public function deleteDiscount()
|
52 |
-
{
|
53 |
-
$requestor = new Stripe_ApiRequestor($this->_apiKey);
|
54 |
-
$url = $this->instanceUrl() . '/discount';
|
55 |
-
list($response, $apiKey) = $requestor->request('delete', $url);
|
56 |
-
$this->refreshFrom(array('discount' => null), $apiKey, true);
|
57 |
-
}
|
58 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Stripe/Stripe/Token.php
CHANGED
@@ -2,24 +2,18 @@
|
|
2 |
|
3 |
class Stripe_Token extends Stripe_ApiResource
|
4 |
{
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
17 |
-
/**
|
18 |
-
* @param array|null $params
|
19 |
-
* @param string|null $apiKey
|
20 |
-
*
|
21 |
-
* @return Stripe_Coupon The created token.
|
22 |
-
*/
|
23 |
public static function create($params=null, $apiKey=null)
|
24 |
{
|
25 |
$class = get_class();
|
2 |
|
3 |
class Stripe_Token extends Stripe_ApiResource
|
4 |
{
|
5 |
+
public static function constructFrom($values, $apiKey=null)
|
6 |
+
{
|
7 |
+
$class = get_class();
|
8 |
+
return self::scopedConstructFrom($class, $values, $apiKey);
|
9 |
+
}
|
10 |
+
|
11 |
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
public static function create($params=null, $apiKey=null)
|
18 |
{
|
19 |
$class = get_class();
|
includes/lib/Stripe/Stripe/Transfer.php
CHANGED
@@ -2,49 +2,21 @@
|
|
2 |
|
3 |
class Stripe_Transfer extends Stripe_ApiResource
|
4 |
{
|
5 |
-
|
6 |
-
* @param string $id The ID of the transfer to retrieve.
|
7 |
-
* @param string|null $apiKey
|
8 |
-
*
|
9 |
-
* @return Stripe_Transfer
|
10 |
-
*/
|
11 |
-
public static function retrieve($id, $apiKey=null)
|
12 |
{
|
13 |
$class = get_class();
|
14 |
-
return self::
|
15 |
}
|
16 |
|
17 |
-
|
18 |
-
* @param array|null $params
|
19 |
-
* @param string|null $apiKey
|
20 |
-
*
|
21 |
-
* @return array An array of Stripe_Transfers.
|
22 |
-
*/
|
23 |
-
public static function all($params=null, $apiKey=null)
|
24 |
-
{
|
25 |
-
$class = get_class();
|
26 |
-
return self::_scopedAll($class, $params, $apiKey);
|
27 |
-
}
|
28 |
-
|
29 |
-
/**
|
30 |
-
* @param array|null $params
|
31 |
-
* @param string|null $apiKey
|
32 |
-
*
|
33 |
-
* @return Stripe_Transfer The created transfer.
|
34 |
-
*/
|
35 |
-
public static function create($params=null, $apiKey=null)
|
36 |
{
|
37 |
$class = get_class();
|
38 |
-
return self::
|
39 |
}
|
40 |
|
41 |
-
|
42 |
-
* @return Stripe_Transfer The saved transfer.
|
43 |
-
*/
|
44 |
-
public function save()
|
45 |
{
|
46 |
$class = get_class();
|
47 |
-
return self::
|
48 |
}
|
49 |
-
|
50 |
}
|
2 |
|
3 |
class Stripe_Transfer extends Stripe_ApiResource
|
4 |
{
|
5 |
+
public static function constructFrom($values, $apiKey=null)
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
{
|
7 |
$class = get_class();
|
8 |
+
return self::scopedConstructFrom($class, $values, $apiKey);
|
9 |
}
|
10 |
|
11 |
+
public static function retrieve($id, $apiKey=null)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
{
|
13 |
$class = get_class();
|
14 |
+
return self::_scopedRetrieve($class, $id, $apiKey);
|
15 |
}
|
16 |
|
17 |
+
public static function all($params=null, $apiKey=null)
|
|
|
|
|
|
|
18 |
{
|
19 |
$class = get_class();
|
20 |
+
return self::_scopedAll($class, $params, $apiKey);
|
21 |
}
|
|
|
22 |
}
|
includes/lib/Stripe/Stripe/Util.php
CHANGED
@@ -2,18 +2,11 @@
|
|
2 |
|
3 |
abstract class Stripe_Util
|
4 |
{
|
5 |
-
/**
|
6 |
-
* Whether the provided array (or other) is a list rather than a dictionary.
|
7 |
-
*
|
8 |
-
* @param array|mixed $array
|
9 |
-
* @return boolean True if the given object is a list.
|
10 |
-
*/
|
11 |
public static function isList($array)
|
12 |
{
|
13 |
if (!is_array($array))
|
14 |
return false;
|
15 |
-
|
16 |
-
// TODO: generally incorrect, but it's correct given Stripe's response
|
17 |
foreach (array_keys($array) as $k) {
|
18 |
if (!is_numeric($k))
|
19 |
return false;
|
@@ -21,66 +14,45 @@ abstract class Stripe_Util
|
|
21 |
return true;
|
22 |
}
|
23 |
|
24 |
-
/**
|
25 |
-
* Recursively converts the PHP Stripe object to an array.
|
26 |
-
*
|
27 |
-
* @param array $values The PHP Stripe object to convert.
|
28 |
-
* @return array
|
29 |
-
*/
|
30 |
public static function convertStripeObjectToArray($values)
|
31 |
{
|
32 |
$results = array();
|
33 |
foreach ($values as $k => $v) {
|
34 |
// FIXME: this is an encapsulation violation
|
35 |
-
if ($k
|
36 |
continue;
|
37 |
}
|
38 |
if ($v instanceof Stripe_Object) {
|
39 |
$results[$k] = $v->__toArray(true);
|
40 |
-
}
|
|
|
41 |
$results[$k] = self::convertStripeObjectToArray($v);
|
42 |
-
}
|
|
|
43 |
$results[$k] = $v;
|
44 |
}
|
45 |
}
|
46 |
return $results;
|
47 |
}
|
48 |
|
49 |
-
/**
|
50 |
-
* Converts a response from the Stripe API to the corresponding PHP object.
|
51 |
-
*
|
52 |
-
* @param array $resp The response from the Stripe API.
|
53 |
-
* @param string $apiKey
|
54 |
-
* @return Stripe_Object|array
|
55 |
-
*/
|
56 |
public static function convertToStripeObject($resp, $apiKey)
|
57 |
{
|
58 |
-
$types = array(
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
'invoiceitem' => 'Stripe_InvoiceItem',
|
65 |
-
'event' => 'Stripe_Event',
|
66 |
-
'transfer' => 'Stripe_Transfer',
|
67 |
-
'plan' => 'Stripe_Plan',
|
68 |
-
'recipient' => 'Stripe_Recipient',
|
69 |
-
'subscription' => 'Stripe_Subscription'
|
70 |
-
);
|
71 |
if (self::isList($resp)) {
|
72 |
$mapped = array();
|
73 |
foreach ($resp as $i)
|
74 |
array_push($mapped, self::convertToStripeObject($i, $apiKey));
|
75 |
return $mapped;
|
76 |
} else if (is_array($resp)) {
|
77 |
-
if (isset($resp['object'])
|
78 |
-
&& is_string($resp['object'])
|
79 |
-
&& isset($types[$resp['object']])) {
|
80 |
$class = $types[$resp['object']];
|
81 |
-
|
82 |
$class = 'Stripe_Object';
|
83 |
-
}
|
84 |
return Stripe_Object::scopedConstructFrom($class, $resp, $apiKey);
|
85 |
} else {
|
86 |
return $resp;
|
2 |
|
3 |
abstract class Stripe_Util
|
4 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
public static function isList($array)
|
6 |
{
|
7 |
if (!is_array($array))
|
8 |
return false;
|
9 |
+
// TODO: this isn't actually correct in general, but it's correct given Stripe's responses
|
|
|
10 |
foreach (array_keys($array) as $k) {
|
11 |
if (!is_numeric($k))
|
12 |
return false;
|
14 |
return true;
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
public static function convertStripeObjectToArray($values)
|
18 |
{
|
19 |
$results = array();
|
20 |
foreach ($values as $k => $v) {
|
21 |
// FIXME: this is an encapsulation violation
|
22 |
+
if (Stripe_Object::$_permanentAttributes->includes($k)) {
|
23 |
continue;
|
24 |
}
|
25 |
if ($v instanceof Stripe_Object) {
|
26 |
$results[$k] = $v->__toArray(true);
|
27 |
+
}
|
28 |
+
else if (is_array($v)) {
|
29 |
$results[$k] = self::convertStripeObjectToArray($v);
|
30 |
+
}
|
31 |
+
else {
|
32 |
$results[$k] = $v;
|
33 |
}
|
34 |
}
|
35 |
return $results;
|
36 |
}
|
37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
public static function convertToStripeObject($resp, $apiKey)
|
39 |
{
|
40 |
+
$types = array('charge' => 'Stripe_Charge',
|
41 |
+
'customer' => 'Stripe_Customer',
|
42 |
+
'list' => 'Stripe_List',
|
43 |
+
'invoice' => 'Stripe_Invoice',
|
44 |
+
'invoiceitem' => 'Stripe_InvoiceItem', 'event' => 'Stripe_Event',
|
45 |
+
'transfer' => 'Stripe_Transfer');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
if (self::isList($resp)) {
|
47 |
$mapped = array();
|
48 |
foreach ($resp as $i)
|
49 |
array_push($mapped, self::convertToStripeObject($i, $apiKey));
|
50 |
return $mapped;
|
51 |
} else if (is_array($resp)) {
|
52 |
+
if (isset($resp['object']) && is_string($resp['object']) && isset($types[$resp['object']]))
|
|
|
|
|
53 |
$class = $types[$resp['object']];
|
54 |
+
else
|
55 |
$class = 'Stripe_Object';
|
|
|
56 |
return Stripe_Object::scopedConstructFrom($class, $resp, $apiKey);
|
57 |
} else {
|
58 |
return $resp;
|
includes/lib/Twocheckout/Twocheckout.php
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
abstract class Twocheckout
|
4 |
-
{
|
5 |
-
public static $user;
|
6 |
-
public static $pass;
|
7 |
-
public static $format = "json";
|
8 |
-
public static $apiBaseUrl = "https://www.2checkout.com/api/";
|
9 |
-
public static $error;
|
10 |
-
const VERSION = '0.1.2';
|
11 |
-
|
12 |
-
static function setCredentials($user, $pass)
|
13 |
-
{
|
14 |
-
self::$user = $user;
|
15 |
-
self::$pass = $pass;
|
16 |
-
}
|
17 |
-
}
|
18 |
-
|
19 |
-
require(dirname(__FILE__) . '/Twocheckout/Api/TwocheckoutAccount.php');
|
20 |
-
require(dirname(__FILE__) . '/Twocheckout/Api/TwocheckoutPayment.php');
|
21 |
-
require(dirname(__FILE__) . '/Twocheckout/Api/TwocheckoutApi.php');
|
22 |
-
require(dirname(__FILE__) . '/Twocheckout/Api/TwocheckoutSale.php');
|
23 |
-
require(dirname(__FILE__) . '/Twocheckout/Api/TwocheckoutProduct.php');
|
24 |
-
require(dirname(__FILE__) . '/Twocheckout/Api/TwocheckoutCoupon.php');
|
25 |
-
require(dirname(__FILE__) . '/Twocheckout/Api/TwocheckoutOption.php');
|
26 |
-
require(dirname(__FILE__) . '/Twocheckout/Api/TwocheckoutUtil.php');
|
27 |
-
require(dirname(__FILE__) . '/Twocheckout/Api/TwocheckoutError.php');
|
28 |
-
require(dirname(__FILE__) . '/Twocheckout/TwocheckoutReturn.php');
|
29 |
-
require(dirname(__FILE__) . '/Twocheckout/TwocheckoutNotification.php');
|
30 |
-
require(dirname(__FILE__) . '/Twocheckout/TwocheckoutCharge.php');
|
31 |
-
require(dirname(__FILE__) . '/Twocheckout/TwocheckoutMessage.php');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutAccount.php
DELETED
@@ -1,25 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Twocheckout_Company extends Twocheckout
|
4 |
-
{
|
5 |
-
|
6 |
-
public static function retrieve($format='json')
|
7 |
-
{
|
8 |
-
$request = new Twocheckout_Api_Requester();
|
9 |
-
$urlSuffix = 'acct/detail_company_info';
|
10 |
-
$result = $request->do_call($urlSuffix);
|
11 |
-
return Twocheckout_Util::return_resp($result, $format);
|
12 |
-
}
|
13 |
-
}
|
14 |
-
|
15 |
-
class Twocheckout_Contact extends Twocheckout
|
16 |
-
{
|
17 |
-
|
18 |
-
public static function retrieve($format='json')
|
19 |
-
{
|
20 |
-
$request = new Twocheckout_Api_Requester();
|
21 |
-
$urlSuffix = 'acct/detail_contact_info';
|
22 |
-
$result = $request->do_call($urlSuffix);
|
23 |
-
return Twocheckout_Util::return_resp($result, $format);
|
24 |
-
}
|
25 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutApi.php
DELETED
@@ -1,33 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Twocheckout_Api_Requester
|
4 |
-
{
|
5 |
-
public $apiBaseUrl;
|
6 |
-
private $user;
|
7 |
-
private $pass;
|
8 |
-
|
9 |
-
function __construct() {
|
10 |
-
$this->user = Twocheckout::$user;
|
11 |
-
$this->pass = Twocheckout::$pass;
|
12 |
-
$this->apiBaseUrl = Twocheckout::$apiBaseUrl;
|
13 |
-
}
|
14 |
-
|
15 |
-
function do_call($urlSuffix, $data=array())
|
16 |
-
{
|
17 |
-
$url = $this->apiBaseUrl . $urlSuffix;
|
18 |
-
$ch = curl_init($url);
|
19 |
-
curl_setopt($ch, CURLOPT_HEADER, 0);
|
20 |
-
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json"));
|
21 |
-
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
22 |
-
curl_setopt($ch, CURLOPT_USERAGENT, "2Checkout PHP/0.1.0%s");
|
23 |
-
curl_setopt($ch, CURLOPT_POST, 0);
|
24 |
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
25 |
-
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
|
26 |
-
curl_setopt($ch, CURLOPT_USERPWD, "{$this->user}:{$this->pass}");
|
27 |
-
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
28 |
-
$resp = curl_exec($ch);
|
29 |
-
curl_close($ch);
|
30 |
-
return $resp;
|
31 |
-
}
|
32 |
-
|
33 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutCoupon.php
DELETED
@@ -1,42 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Twocheckout_Coupon extends Twocheckout
|
4 |
-
{
|
5 |
-
|
6 |
-
public static function create($params=array(), $format='json')
|
7 |
-
{
|
8 |
-
$request = new Twocheckout_Api_Requester();
|
9 |
-
$urlSuffix = 'products/create_coupon';
|
10 |
-
$result = $request->do_call($urlSuffix, $params);
|
11 |
-
return Twocheckout_Util::return_resp($result, $format);
|
12 |
-
}
|
13 |
-
|
14 |
-
public static function retrieve($params=array(), $format='json')
|
15 |
-
{
|
16 |
-
$request = new Twocheckout_Api_Requester();
|
17 |
-
if(array_key_exists("coupon_code",$params)) {
|
18 |
-
$urlSuffix = 'products/detail_coupon';
|
19 |
-
} else {
|
20 |
-
$urlSuffix = 'products/list_coupons';
|
21 |
-
}
|
22 |
-
$result = $request->do_call($urlSuffix, $params);
|
23 |
-
return Twocheckout_Util::return_resp($result, $format);
|
24 |
-
}
|
25 |
-
|
26 |
-
public static function update($params=array(), $format='json')
|
27 |
-
{
|
28 |
-
$request = new Twocheckout_Api_Requester();
|
29 |
-
$urlSuffix = 'products/update_coupon';
|
30 |
-
$result = $request->do_call($urlSuffix, $params);
|
31 |
-
return Twocheckout_Util::return_resp($result, $format);
|
32 |
-
}
|
33 |
-
|
34 |
-
public static function delete($params=array(), $format='json')
|
35 |
-
{
|
36 |
-
$request = new Twocheckout_Api_Requester();
|
37 |
-
$urlSuffix = 'products/delete_coupon';
|
38 |
-
$result = $request->do_call($urlSuffix, $params);
|
39 |
-
return Twocheckout_Util::return_resp($result, $format);
|
40 |
-
}
|
41 |
-
|
42 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutError.php
DELETED
@@ -1,14 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Twocheckout_Error extends Exception
|
4 |
-
{
|
5 |
-
public function __construct($message, $code = 0, Exception $previous = null)
|
6 |
-
{
|
7 |
-
parent::__construct($message, $code, $previous);
|
8 |
-
}
|
9 |
-
|
10 |
-
public function __toString()
|
11 |
-
{
|
12 |
-
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
|
13 |
-
}
|
14 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutOption.php
DELETED
@@ -1,42 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Twocheckout_Option extends Twocheckout
|
4 |
-
{
|
5 |
-
|
6 |
-
public static function create($params=array(), $format='json')
|
7 |
-
{
|
8 |
-
$request = new Twocheckout_Api_Requester();
|
9 |
-
$urlSuffix = 'products/create_option';
|
10 |
-
$result = $request->do_call($urlSuffix, $params);
|
11 |
-
return Twocheckout_Util::return_resp($result, $format);
|
12 |
-
}
|
13 |
-
|
14 |
-
public static function retrieve($params=array(), $format='json')
|
15 |
-
{
|
16 |
-
$request = new Twocheckout_Api_Requester();
|
17 |
-
if(array_key_exists("option_id",$params)) {
|
18 |
-
$urlSuffix = 'products/detail_option';
|
19 |
-
} else {
|
20 |
-
$urlSuffix = 'products/list_options';
|
21 |
-
}
|
22 |
-
$result = $request->do_call($urlSuffix, $params);
|
23 |
-
return Twocheckout_Util::return_resp($result, $format);
|
24 |
-
}
|
25 |
-
|
26 |
-
public static function update($params=array(), $format='json')
|
27 |
-
{
|
28 |
-
$request = new Twocheckout_Api_Requester();
|
29 |
-
$urlSuffix = 'products/update_option';
|
30 |
-
$result = $request->do_call($urlSuffix, $params);
|
31 |
-
return Twocheckout_Util::return_resp($result, $format);
|
32 |
-
}
|
33 |
-
|
34 |
-
public static function delete($params=array(), $format='json')
|
35 |
-
{
|
36 |
-
$request = new Twocheckout_Api_Requester();
|
37 |
-
$urlSuffix = 'products/delete_option';
|
38 |
-
$result = $request->do_call($urlSuffix, $params);
|
39 |
-
return Twocheckout_Util::return_resp($result, $format);
|
40 |
-
}
|
41 |
-
|
42 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutPayment.php
DELETED
@@ -1,24 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Twocheckout_Payment extends Twocheckout
|
4 |
-
{
|
5 |
-
|
6 |
-
public static function retrieve($format='json')
|
7 |
-
{
|
8 |
-
$request = new Twocheckout_Api_Requester();
|
9 |
-
$urlSuffix = 'acct/list_payments';
|
10 |
-
$result = $request->do_call($urlSuffix);
|
11 |
-
$response = Twocheckout_Util::return_resp($result, $format);
|
12 |
-
return $response;
|
13 |
-
}
|
14 |
-
|
15 |
-
public static function pending($format='json')
|
16 |
-
{
|
17 |
-
$request = new Twocheckout_Api_Requester();
|
18 |
-
$urlSuffix = 'acct/detail_pending_payment';
|
19 |
-
$result = $request->do_call($urlSuffix);
|
20 |
-
$response = Twocheckout_Util::return_resp($result, $format);
|
21 |
-
return $response;
|
22 |
-
}
|
23 |
-
|
24 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutProduct.php
DELETED
@@ -1,42 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Twocheckout_Product extends Twocheckout
|
4 |
-
{
|
5 |
-
|
6 |
-
public static function create($params=array(), $format='json')
|
7 |
-
{
|
8 |
-
$request = new Twocheckout_Api_Requester();
|
9 |
-
$urlSuffix = 'products/create_product';
|
10 |
-
$result = $request->do_call($urlSuffix, $params);
|
11 |
-
return Twocheckout_Util::return_resp($result, $format);
|
12 |
-
}
|
13 |
-
|
14 |
-
public static function retrieve($params=array(), $format='json')
|
15 |
-
{
|
16 |
-
$request = new Twocheckout_Api_Requester();
|
17 |
-
if(array_key_exists("product_id",$params)) {
|
18 |
-
$urlSuffix = 'products/detail_product';
|
19 |
-
} else {
|
20 |
-
$urlSuffix = 'products/list_products';
|
21 |
-
}
|
22 |
-
$result = $request->do_call($urlSuffix, $params);
|
23 |
-
return Twocheckout_Util::return_resp($result, $format);
|
24 |
-
}
|
25 |
-
|
26 |
-
public static function update($params=array(), $format='json')
|
27 |
-
{
|
28 |
-
$request = new Twocheckout_Api_Requester();
|
29 |
-
$urlSuffix = 'products/update_product';
|
30 |
-
$result = $request->do_call($urlSuffix, $params);
|
31 |
-
return Twocheckout_Util::return_resp($result, $format);
|
32 |
-
}
|
33 |
-
|
34 |
-
public static function delete($params=array(), $format='json')
|
35 |
-
{
|
36 |
-
$request = new Twocheckout_Api_Requester();
|
37 |
-
$urlSuffix = 'products/delete_product';
|
38 |
-
$result = $request->do_call($urlSuffix, $params);
|
39 |
-
return Twocheckout_Util::return_resp($result, $format);
|
40 |
-
}
|
41 |
-
|
42 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutSale.php
DELETED
@@ -1,104 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Twocheckout_Sale extends Twocheckout
|
4 |
-
{
|
5 |
-
|
6 |
-
public static function retrieve($params=array(), $format='json')
|
7 |
-
{
|
8 |
-
$request = new Twocheckout_Api_Requester();
|
9 |
-
if(array_key_exists("sale_id",$params) || array_key_exists("invoice_id",$params)) {
|
10 |
-
$urlSuffix = 'sales/detail_sale';
|
11 |
-
} else {
|
12 |
-
$urlSuffix = 'sales/list_sales';
|
13 |
-
}
|
14 |
-
$result = $request->do_call($urlSuffix, $params);
|
15 |
-
return Twocheckout_Util::return_resp($result, $format);
|
16 |
-
}
|
17 |
-
|
18 |
-
public static function refund($params=array(), $format='json') {
|
19 |
-
$request = new Twocheckout_Api_Requester();
|
20 |
-
if(array_key_exists("lineitem_id",$params)) {
|
21 |
-
$urlSuffix ='sales/refund_lineitem';
|
22 |
-
$result = $request->do_call($urlSuffix, $params);
|
23 |
-
} elseif(array_key_exists("invoice_id",$params) || array_key_exists("sale_id",$params)) {
|
24 |
-
$urlSuffix ='sales/refund_invoice';
|
25 |
-
$result = $request->do_call($urlSuffix, $params);
|
26 |
-
} else {
|
27 |
-
$result = Twocheckout_Message::message('Error', 'You must pass a sale_id, invoice_id or lineitem_id to use this method.');
|
28 |
-
}
|
29 |
-
return Twocheckout_Util::return_resp($result, $format);
|
30 |
-
}
|
31 |
-
|
32 |
-
public static function stop($params=array(), $format='json') {
|
33 |
-
$request = new Twocheckout_Api_Requester();
|
34 |
-
$urlSuffix ='sales/stop_lineitem_recurring';
|
35 |
-
if(array_key_exists("lineitem_id",$params)) {
|
36 |
-
$result = $request->do_call($urlSuffix, $params);
|
37 |
-
} elseif(array_key_exists("sale_id",$params)) {
|
38 |
-
$result = Twocheckout_Sale::retrieve($params, 'array');
|
39 |
-
$lineitemData = Twocheckout_Util::get_recurring_lineitems($result);
|
40 |
-
if (isset($lineitemData[0])) {
|
41 |
-
$i = 0;
|
42 |
-
$stoppedLineitems = array();
|
43 |
-
foreach( $lineitemData as $value )
|
44 |
-
{
|
45 |
-
$params = array('lineitem_id' => $value);
|
46 |
-
$result = $request->do_call($urlSuffix, $params);
|
47 |
-
$result = json_decode($result, true);
|
48 |
-
if ($result['response_code'] == "OK") {
|
49 |
-
$stoppedLineitems[$i] = $value;
|
50 |
-
}
|
51 |
-
$i++;
|
52 |
-
}
|
53 |
-
$result = Twocheckout_Message::message('OK', $stoppedLineitems);
|
54 |
-
} else {
|
55 |
-
throw new Twocheckout_Error("No recurring lineitems to stop.");
|
56 |
-
}
|
57 |
-
} else {
|
58 |
-
throw new Twocheckout_Error('You must pass a sale_id or lineitem_id to use this method.');
|
59 |
-
}
|
60 |
-
return Twocheckout_Util::return_resp($result, $format);
|
61 |
-
}
|
62 |
-
|
63 |
-
public static function active($params=array(), $format='json') {
|
64 |
-
if(array_key_exists("sale_id",$params)) {
|
65 |
-
$result = Twocheckout_Sale::retrieve($params);
|
66 |
-
$array = Twocheckout_Util::return_resp($result, 'array');
|
67 |
-
$lineitemData = Twocheckout_Util::get_recurring_lineitems($array);
|
68 |
-
if (isset($lineitemData[0])) {
|
69 |
-
$result = Twocheckout_Message::message('OK', $lineitemData);
|
70 |
-
if ($format == 'array') {
|
71 |
-
return Twocheckout_Util::return_resp($result, $format);
|
72 |
-
} else {
|
73 |
-
return Twocheckout_Util::return_resp($result, 'force_json');
|
74 |
-
}
|
75 |
-
} else {
|
76 |
-
throw new Twocheckout_Error("No active recurring lineitems.");
|
77 |
-
}
|
78 |
-
} else {
|
79 |
-
throw new Twocheckout_Error("You must pass a sale_id to use this method.");
|
80 |
-
}
|
81 |
-
}
|
82 |
-
|
83 |
-
public static function comment($params=array(), $format='json') {
|
84 |
-
$request = new Twocheckout_Api_Requester();
|
85 |
-
$urlSuffix ='sales/create_comment';
|
86 |
-
$result = $request->do_call($urlSuffix, $params);
|
87 |
-
return Twocheckout_Util::return_resp($result, $format);
|
88 |
-
}
|
89 |
-
|
90 |
-
public static function ship($params=array(), $format='json') {
|
91 |
-
$request = new Twocheckout_Api_Requester();
|
92 |
-
$urlSuffix ='sales/mark_shipped';
|
93 |
-
$result = $request->do_call($urlSuffix, $params);
|
94 |
-
return Twocheckout_Util::return_resp($result, $format);
|
95 |
-
}
|
96 |
-
|
97 |
-
public static function reauth($params=array(), $format='json') {
|
98 |
-
$request = new Twocheckout_Api_Requester();
|
99 |
-
$urlSuffix ='sales/reauth';
|
100 |
-
$result = $request->do_call($urlSuffix, $params);
|
101 |
-
return Twocheckout_Util::return_resp($result, $format);
|
102 |
-
}
|
103 |
-
|
104 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutUtil.php
DELETED
@@ -1,72 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Twocheckout_Util
|
4 |
-
{
|
5 |
-
|
6 |
-
static function return_resp($contents, $format) {
|
7 |
-
switch ($format) {
|
8 |
-
case "array":
|
9 |
-
$arrayObject = self::objectToArray($contents);
|
10 |
-
self::checkError($arrayObject);
|
11 |
-
return $arrayObject;
|
12 |
-
break;
|
13 |
-
case "force_json":
|
14 |
-
$arrayObject = self::objectToJson($contents);
|
15 |
-
return $arrayObject;
|
16 |
-
break;
|
17 |
-
default:
|
18 |
-
$arrayObject = self::objectToArray($contents);
|
19 |
-
self::checkError($arrayObject);
|
20 |
-
$jsonData = json_encode($contents);
|
21 |
-
return json_decode($jsonData);
|
22 |
-
}
|
23 |
-
}
|
24 |
-
|
25 |
-
public static function objectToArray($object)
|
26 |
-
{
|
27 |
-
$object = json_decode($object, true);
|
28 |
-
$array=array();
|
29 |
-
foreach($object as $member=>$data)
|
30 |
-
{
|
31 |
-
$array[$member]=$data;
|
32 |
-
}
|
33 |
-
return $array;
|
34 |
-
}
|
35 |
-
|
36 |
-
public static function objectToJson($object)
|
37 |
-
{
|
38 |
-
return json_encode($object);
|
39 |
-
}
|
40 |
-
|
41 |
-
public static function get_recurring_lineitems($saleDetail) {
|
42 |
-
$i = 0;
|
43 |
-
$invoiceData = array();
|
44 |
-
|
45 |
-
while (isset($saleDetail['sale']['invoices'][$i])) {
|
46 |
-
$invoiceData[$i] = $saleDetail['sale']['invoices'][$i];
|
47 |
-
$i++;
|
48 |
-
}
|
49 |
-
|
50 |
-
$invoice = max($invoiceData);
|
51 |
-
$i = 0;
|
52 |
-
$lineitemData = array();
|
53 |
-
|
54 |
-
while (isset($invoice['lineitems'][$i])) {
|
55 |
-
if ($invoice['lineitems'][$i]['billing']['recurring_status'] == "active") {
|
56 |
-
$lineitemData[$i] = $invoice['lineitems'][$i]['billing']['lineitem_id'];
|
57 |
-
}
|
58 |
-
$i++;
|
59 |
-
};
|
60 |
-
|
61 |
-
return $lineitemData;
|
62 |
-
|
63 |
-
}
|
64 |
-
|
65 |
-
public static function checkError($contents)
|
66 |
-
{
|
67 |
-
if (isset($contents['errors'])) {
|
68 |
-
throw new Twocheckout_Error($contents['errors'][0]['message']);
|
69 |
-
}
|
70 |
-
}
|
71 |
-
|
72 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Twocheckout/Twocheckout/TwocheckoutCharge.php
DELETED
@@ -1,61 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Twocheckout_Charge extends Twocheckout
|
4 |
-
{
|
5 |
-
|
6 |
-
public static function form($params, $type='Checkout')
|
7 |
-
{
|
8 |
-
echo '<form id="2checkout" action="https://www.2checkout.com/checkout/purchase" method="post">';
|
9 |
-
|
10 |
-
foreach ($params as $key => $value)
|
11 |
-
{
|
12 |
-
echo '<input type="hidden" name="'.$key.'" value="'.$value.'"/>';
|
13 |
-
}
|
14 |
-
if ($type == 'auto') {
|
15 |
-
echo '<input type="submit" value="Click here if you are not redirected automatically" /></form>';
|
16 |
-
echo '<script type="text/javascript">document.getElementById("2checkout").submit();</script>';
|
17 |
-
} else {
|
18 |
-
echo '<input type="submit" value="'.$type.'" />';
|
19 |
-
echo '</form>';
|
20 |
-
}
|
21 |
-
}
|
22 |
-
|
23 |
-
public static function direct($params, $type='Checkout')
|
24 |
-
{
|
25 |
-
echo '<form id="2checkout" action="https://www.2checkout.com/checkout/purchase" method="post">';
|
26 |
-
|
27 |
-
foreach ($params as $key => $value)
|
28 |
-
{
|
29 |
-
echo '<input type="hidden" name="'.$key.'" value="'.$value.'"/>';
|
30 |
-
}
|
31 |
-
|
32 |
-
if ($type == 'auto') {
|
33 |
-
echo '<input type="submit" value="Click here if the payment form does not open automatically." /></form>';
|
34 |
-
echo '<script type="text/javascript">
|
35 |
-
function submitForm() {
|
36 |
-
document.getElementById("tco_lightbox").style.display = "block";
|
37 |
-
document.getElementById("2checkout").submit();
|
38 |
-
}
|
39 |
-
setTimeout("submitForm()", 2000);
|
40 |
-
</script>';
|
41 |
-
} else {
|
42 |
-
echo '<input type="submit" value="'.$type.'" />';
|
43 |
-
echo '</form>';
|
44 |
-
}
|
45 |
-
|
46 |
-
echo '<script src="https://www.2checkout.com/static/checkout/javascript/direct.min.js"></script>';
|
47 |
-
}
|
48 |
-
|
49 |
-
public static function link($params)
|
50 |
-
{
|
51 |
-
$url = 'https://www.2checkout.com/checkout/purchase?'.http_build_query($params, '', '&');
|
52 |
-
return $url;
|
53 |
-
}
|
54 |
-
|
55 |
-
public static function redirect($params)
|
56 |
-
{
|
57 |
-
$url = 'https://www.2checkout.com/checkout/purchase?'.http_build_query($params, '', '&');
|
58 |
-
header("Location: $url");
|
59 |
-
}
|
60 |
-
|
61 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Twocheckout/Twocheckout/TwocheckoutMessage.php
DELETED
@@ -1,13 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Twocheckout_Message
|
4 |
-
{
|
5 |
-
public static function message($code, $message)
|
6 |
-
{
|
7 |
-
$response = array();
|
8 |
-
$response['response_code'] = $code;
|
9 |
-
$response['response_message'] = $message;
|
10 |
-
$response = json_encode($response);
|
11 |
-
return $response;
|
12 |
-
}
|
13 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Twocheckout/Twocheckout/TwocheckoutNotification.php
DELETED
@@ -1,20 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Twocheckout_Notification extends Twocheckout
|
4 |
-
{
|
5 |
-
|
6 |
-
public static function check($insMessage, $secretWord, $format='json')
|
7 |
-
{
|
8 |
-
$hashSid = $insMessage['vendor_id'];
|
9 |
-
$hashOrder = $insMessage['sale_id'];
|
10 |
-
$hashInvoice = $insMessage['invoice_id'];
|
11 |
-
$StringToHash = strtoupper(md5($hashOrder . $hashSid . $hashInvoice . $secretWord));
|
12 |
-
if ($StringToHash != $insMessage['md5_hash']) {
|
13 |
-
$result = Twocheckout_Message::message('Fail', 'Hash Mismatch');
|
14 |
-
} else {
|
15 |
-
$result = Twocheckout_Message::message('Success', 'Hash Matched');
|
16 |
-
}
|
17 |
-
return Twocheckout_Util::return_resp($result, $format);
|
18 |
-
}
|
19 |
-
|
20 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/lib/Twocheckout/Twocheckout/TwocheckoutReturn.php
DELETED
@@ -1,21 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Twocheckout_Return extends Twocheckout
|
4 |
-
{
|
5 |
-
|
6 |
-
public static function check($params=array(), $secretWord, $format='json')
|
7 |
-
{
|
8 |
-
$hashSecretWord = $secretWord;
|
9 |
-
$hashSid = $params['sid'];
|
10 |
-
$hashTotal = $params['total'];
|
11 |
-
$hashOrder = $params['order_number'];
|
12 |
-
$StringToHash = strtoupper(md5($hashSecretWord . $hashSid . $hashOrder . $hashTotal));
|
13 |
-
if ($StringToHash != $params['key']) {
|
14 |
-
$result = Twocheckout_Message::message('Fail', 'Hash Mismatch');
|
15 |
-
} else {
|
16 |
-
$result = Twocheckout_Message::message('Success', 'Hash Matched');
|
17 |
-
}
|
18 |
-
return Twocheckout_Util::return_resp($result, $format);
|
19 |
-
}
|
20 |
-
|
21 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/localization.php
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
function pmpro_load_textdomain()
|
3 |
-
{
|
4 |
-
//get the locale
|
5 |
-
$locale = apply_filters("plugin_locale", get_locale(), "pmpro");
|
6 |
-
$mofile = "pmpro-" . $locale . ".mo";
|
7 |
-
|
8 |
-
//paths to local (plugin) and global (WP) language files
|
9 |
-
$mofile_local = dirname(__FILE__)."/../languages/" . $mofile;
|
10 |
-
$mofile_global = WP_LANG_DIR . '/pmpro/' . $mofile;
|
11 |
-
|
12 |
-
//load global first
|
13 |
-
load_textdomain("pmpro", $mofile_global);
|
14 |
-
|
15 |
-
//load local second
|
16 |
-
load_textdomain("pmpro", $mofile_local);
|
17 |
-
}
|
18 |
-
add_action("init", "pmpro_load_textdomain", 1);
|
19 |
-
|
20 |
-
function pmpro_translate_billing_period($period, $number = 1)
|
21 |
-
{
|
22 |
-
if($period == "Day")
|
23 |
-
return _n("Day", "Days", $number, "pmpro");
|
24 |
-
elseif($period == "Week")
|
25 |
-
return _n("Week", "Weeks", $number, "pmpro");
|
26 |
-
elseif($period == "Month")
|
27 |
-
return _n("Month", "Months", $number, "pmpro");
|
28 |
-
elseif($period == "Year")
|
29 |
-
return _n("Year", "Years", $number, "pmpro");
|
30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/login.php
DELETED
@@ -1,158 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
//redirect control
|
3 |
-
function pmpro_login_redirect($redirect_to, $request, $user)
|
4 |
-
{
|
5 |
-
global $wpdb;
|
6 |
-
|
7 |
-
//is a user logging in?
|
8 |
-
if(!empty($user->ID))
|
9 |
-
{
|
10 |
-
//logging in, let's figure out where to send them
|
11 |
-
if(pmpro_isAdmin($user->ID))
|
12 |
-
{
|
13 |
-
//admins go to dashboard
|
14 |
-
$redirect_to = get_bloginfo("url") . "/wp-admin/";
|
15 |
-
}
|
16 |
-
elseif(strpos($redirect_to, "checkout") !== false)
|
17 |
-
{
|
18 |
-
//if the redirect url includes the word checkout, leave it alone
|
19 |
-
}
|
20 |
-
elseif($wpdb->get_var("SELECT membership_id FROM $wpdb->pmpro_memberships_users WHERE status = 'active' AND user_id = '" . $user->ID . "' LIMIT 1"))
|
21 |
-
{
|
22 |
-
//if logged in and a member, send to wherever they were going
|
23 |
-
}
|
24 |
-
else
|
25 |
-
{
|
26 |
-
//not a member, send to subscription page
|
27 |
-
$redirect_to = pmpro_url("levels");
|
28 |
-
}
|
29 |
-
}
|
30 |
-
else
|
31 |
-
{
|
32 |
-
//not logging in (login form) so return what was given
|
33 |
-
}
|
34 |
-
|
35 |
-
//let's strip the https if force_ssl_login is set, but force_ssl_admin is not
|
36 |
-
if(force_ssl_login() && !force_ssl_admin())
|
37 |
-
$redirect_to = str_replace("https:", "http:", $redirect_to);
|
38 |
-
|
39 |
-
return apply_filters("pmpro_login_redirect_url", $redirect_to, $request, $user);
|
40 |
-
}
|
41 |
-
add_filter('login_redirect','pmpro_login_redirect', 10, 3);
|
42 |
-
|
43 |
-
//Where is the sign page? Levels page or default multisite page.
|
44 |
-
function pmpro_wp_signup_location($location)
|
45 |
-
{
|
46 |
-
if(is_multisite() && pmpro_getOption("redirecttosubscription"))
|
47 |
-
{
|
48 |
-
return pmpro_url("levels");
|
49 |
-
}
|
50 |
-
else
|
51 |
-
return $location;
|
52 |
-
}
|
53 |
-
add_filter('wp_signup_location', 'pmpro_wp_signup_location');
|
54 |
-
|
55 |
-
//redirect from default login pages to PMPro
|
56 |
-
function pmpro_login_head()
|
57 |
-
{
|
58 |
-
$login_redirect = apply_filters("pmpro_login_redirect", true);
|
59 |
-
|
60 |
-
if((pmpro_is_login_page() || is_page("login") ||
|
61 |
-
class_exists("Theme_My_Login") && defined('Theme_My_Login::version') && version_compare(Theme_My_Login::version, "6.3") >= 0 && (Theme_My_Login::is_tml_page("register") || Theme_My_Login::is_tml_page("login"))
|
62 |
-
)
|
63 |
-
&& $login_redirect
|
64 |
-
)
|
65 |
-
{
|
66 |
-
//redirect registration page to levels page
|
67 |
-
if( isset($_REQUEST['action']) && $_REQUEST['action'] == "register" ||
|
68 |
-
isset($_REQUEST['registration']) && $_REQUEST['registration'] == "disabled" ||
|
69 |
-
!is_admin() && class_exists("Theme_My_Login") && defined('Theme_My_Login::version') && version_compare(Theme_My_Login::version, "6.3") >= 0 && Theme_My_Login::is_tml_page("register")
|
70 |
-
)
|
71 |
-
{
|
72 |
-
//redirect to levels page unless filter is set.
|
73 |
-
$link = apply_filters("pmpro_register_redirect", pmpro_url("levels"));
|
74 |
-
if(!empty($link))
|
75 |
-
{
|
76 |
-
wp_redirect($link);
|
77 |
-
exit;
|
78 |
-
}
|
79 |
-
else
|
80 |
-
return; //don't redirect if pmpro_register_redirect filter returns false or a blank URL
|
81 |
-
}
|
82 |
-
|
83 |
-
//if theme my login is installed, redirect all logins to the login page
|
84 |
-
if(pmpro_is_plugin_active("theme-my-login/theme-my-login.php"))
|
85 |
-
{
|
86 |
-
//check for the login page id and redirect there if we're not there already
|
87 |
-
global $post;
|
88 |
-
|
89 |
-
if(!empty($GLOBALS['theme_my_login']) && is_array($GLOBALS['theme_my_login']->options))
|
90 |
-
{
|
91 |
-
//an older version of TML stores it this way
|
92 |
-
if($GLOBALS['theme_my_login']->options['page_id'] !== $post->ID)
|
93 |
-
{
|
94 |
-
//redirect to the real login page
|
95 |
-
$link = get_permalink($GLOBALS['theme_my_login']->options['page_id']);
|
96 |
-
if($_SERVER['QUERY_STRING'])
|
97 |
-
$link .= "?" . $_SERVER['QUERY_STRING'];
|
98 |
-
wp_redirect($link);
|
99 |
-
exit;
|
100 |
-
}
|
101 |
-
}
|
102 |
-
elseif(!empty($GLOBALS['theme_my_login']->options))
|
103 |
-
{
|
104 |
-
//another older version of TML stores it this way
|
105 |
-
if($GLOBALS['theme_my_login']->options->options['page_id'] !== $post->ID)
|
106 |
-
{
|
107 |
-
//redirect to the real login page
|
108 |
-
$link = get_permalink($GLOBALS['theme_my_login']->options->options['page_id']);
|
109 |
-
if($_SERVER['QUERY_STRING'])
|
110 |
-
$link .= "?" . $_SERVER['QUERY_STRING'];
|
111 |
-
wp_redirect($link);
|
112 |
-
exit;
|
113 |
-
}
|
114 |
-
}
|
115 |
-
elseif(class_exists("Theme_My_Login") && defined('Theme_My_Login::version') && version_compare(Theme_My_Login::version, "6.3") >= 0)
|
116 |
-
{
|
117 |
-
//TML > 6.3
|
118 |
-
$link = Theme_My_Login::get_page_link("login");
|
119 |
-
if(!empty($link))
|
120 |
-
{
|
121 |
-
//redirect if !is_page(), i.e. we're on wp-login.php
|
122 |
-
if(!Theme_My_Login::is_tml_page())
|
123 |
-
{
|
124 |
-
wp_redirect($link);
|
125 |
-
exit;
|
126 |
-
}
|
127 |
-
}
|
128 |
-
}
|
129 |
-
|
130 |
-
//make sure users are only getting to the profile when logged in
|
131 |
-
global $current_user;
|
132 |
-
if(!empty($_REQUEST['action']) && $_REQUEST['action'] == "profile" && !$current_user->ID)
|
133 |
-
{
|
134 |
-
$link = get_permalink($GLOBALS['theme_my_login']->options->options['page_id']);
|
135 |
-
wp_redirect($link);
|
136 |
-
exit;
|
137 |
-
}
|
138 |
-
}
|
139 |
-
}
|
140 |
-
}
|
141 |
-
add_action('wp', 'pmpro_login_head');
|
142 |
-
add_action('login_init', 'pmpro_login_head');
|
143 |
-
|
144 |
-
/*
|
145 |
-
If a redirect_to value is passed into /login/ and you are logged in already, just redirect there
|
146 |
-
|
147 |
-
@since 1.7.14
|
148 |
-
*/
|
149 |
-
function pmpro_redirect_to_logged_in()
|
150 |
-
{
|
151 |
-
if((pmpro_is_login_page() || is_page("login")) && !empty($_REQUEST['redirect_to']) && is_user_logged_in())
|
152 |
-
{
|
153 |
-
wp_redirect($_REQUEST['redirect_to']);
|
154 |
-
exit;
|
155 |
-
}
|
156 |
-
}
|
157 |
-
add_action("template_redirect", "pmpro_redirect_to_logged_in", 5);
|
158 |
-
add_action("login_init", "pmpro_redirect_to_logged_in", 5);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/metaboxes.php
DELETED
@@ -1,108 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Require Membership Meta Box
|
4 |
-
*/
|
5 |
-
function pmpro_page_meta()
|
6 |
-
{
|
7 |
-
global $membership_levels, $post, $wpdb;
|
8 |
-
$page_levels = $wpdb->get_col("SELECT membership_id FROM {$wpdb->pmpro_memberships_pages} WHERE page_id = '{$post->ID}'");
|
9 |
-
?>
|
10 |
-
<ul id="membershipschecklist" class="list:category categorychecklist form-no-clear">
|
11 |
-
<input type="hidden" name="pmpro_noncename" id="pmpro_noncename" value="<?php echo wp_create_nonce( plugin_basename(__FILE__) )?>" />
|
12 |
-
<?php
|
13 |
-
$in_member_cat = false;
|
14 |
-
foreach($membership_levels as $level)
|
15 |
-
{
|
16 |
-
?>
|
17 |
-
<li id="membership-level-<?php echo $level->id?>">
|
18 |
-
<label class="selectit">
|
19 |
-
<input id="in-membership-level-<?php echo $level->id?>" type="checkbox" <?php if(in_array($level->id, $page_levels)) { ?>checked="checked"<?php } ?> name="page_levels[]" value="<?php echo $level->id?>" />
|
20 |
-
<?php
|
21 |
-
echo $level->name;
|
22 |
-
//Check which categories are protected for this level
|
23 |
-
$protectedcategories = $wpdb->get_col("SELECT category_id FROM $wpdb->pmpro_memberships_categories WHERE membership_id = $level->id");
|
24 |
-
//See if this post is in any of the level's protected categories
|
25 |
-
if(in_category($protectedcategories, $post->id))
|
26 |
-
{
|
27 |
-
$in_member_cat = true;
|
28 |
-
echo ' *';
|
29 |
-
}
|
30 |
-
?>
|
31 |
-
</label>
|
32 |
-
</li>
|
33 |
-
<?php
|
34 |
-
}
|
35 |
-
?>
|
36 |
-
</ul>
|
37 |
-
<?php if('post' == get_post_type($post) && $in_member_cat) { ?>
|
38 |
-
<p class="pmpro_meta_notice">* <?php _e("This post is already protected for this level because it is within a category that requires membership.", "pmpro");?></p>
|
39 |
-
<?php } ?>
|
40 |
-
<?php
|
41 |
-
}
|
42 |
-
|
43 |
-
//saves meta options
|
44 |
-
function pmpro_page_save($post_id)
|
45 |
-
{
|
46 |
-
global $wpdb;
|
47 |
-
|
48 |
-
if(empty($post_id))
|
49 |
-
return false;
|
50 |
-
|
51 |
-
if (!empty($_POST['pmpro_noncename']) && !wp_verify_nonce( $_POST['pmpro_noncename'], plugin_basename(__FILE__) )) {
|
52 |
-
return $post_id;
|
53 |
-
}
|
54 |
-
|
55 |
-
// verify if this is an auto save routine. If it is our form has not been submitted, so we dont want
|
56 |
-
// to do anything
|
57 |
-
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
|
58 |
-
return $post_id;
|
59 |
-
|
60 |
-
// Check permissions
|
61 |
-
if(!empty($_POST['post_type']) && 'page' == $_POST['post_type'] )
|
62 |
-
{
|
63 |
-
if ( !current_user_can( 'edit_page', $post_id ) )
|
64 |
-
return $post_id;
|
65 |
-
}
|
66 |
-
else
|
67 |
-
{
|
68 |
-
if ( !current_user_can( 'edit_post', $post_id ) )
|
69 |
-
return $post_id;
|
70 |
-
}
|
71 |
-
|
72 |
-
// OK, we're authenticated: we need to find and save the data
|
73 |
-
if(isset($_POST['pmpro_noncename']))
|
74 |
-
{
|
75 |
-
if(!empty($_POST['page_levels']))
|
76 |
-
$mydata = $_POST['page_levels'];
|
77 |
-
else
|
78 |
-
$mydata = NULL;
|
79 |
-
|
80 |
-
//remove all memberships for this page
|
81 |
-
$wpdb->query("DELETE FROM {$wpdb->pmpro_memberships_pages} WHERE page_id = '$post_id'");
|
82 |
-
|
83 |
-
//add new memberships for this page
|
84 |
-
if(is_array($mydata))
|
85 |
-
{
|
86 |
-
foreach($mydata as $level)
|
87 |
-
$wpdb->query("INSERT INTO {$wpdb->pmpro_memberships_pages} (membership_id, page_id) VALUES('" . intval($level) . "', '" . intval($post_id) . "')");
|
88 |
-
}
|
89 |
-
|
90 |
-
return $mydata;
|
91 |
-
}
|
92 |
-
else
|
93 |
-
return $post_id;
|
94 |
-
}
|
95 |
-
|
96 |
-
//wrapper to add meta boxes
|
97 |
-
function pmpro_page_meta_wrapper()
|
98 |
-
{
|
99 |
-
add_meta_box('pmpro_page_meta', __('Require Membership', 'pmpro'), 'pmpro_page_meta', 'page', 'side');
|
100 |
-
add_meta_box('pmpro_page_meta', __('Require Membership', 'pmpro'), 'pmpro_page_meta', 'post', 'side');
|
101 |
-
}
|
102 |
-
if (is_admin())
|
103 |
-
{
|
104 |
-
add_action('admin_menu', 'pmpro_page_meta_wrapper');
|
105 |
-
add_action('save_post', 'pmpro_page_save');
|
106 |
-
|
107 |
-
require_once(PMPRO_DIR . "/adminpages/dashboard.php");
|
108 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/notifications.php
DELETED
@@ -1,61 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
This code calls the server at www.paidmembershipspro.com to see if there are any notifications to display to the user. Notifications are shown on the PMPro settings pages in the dashboard.
|
4 |
-
*/
|
5 |
-
function pmpro_notifications()
|
6 |
-
{
|
7 |
-
if(current_user_can("manage_options"))
|
8 |
-
{
|
9 |
-
delete_transient("pmpro_notification_" . PMPRO_VERSION);
|
10 |
-
|
11 |
-
$pmpro_notification = get_transient("pmpro_notification_" . PMPRO_VERSION);
|
12 |
-
if(empty($pmpro_notification))
|
13 |
-
{
|
14 |
-
if(is_ssl())
|
15 |
-
{
|
16 |
-
$remote_notification = wp_remote_get("https://www.paidmembershipspro.com/notifications/?v=" . PMPRO_VERSION);
|
17 |
-
}
|
18 |
-
else
|
19 |
-
{
|
20 |
-
$remote_notification = wp_remote_get("http://www.paidmembershipspro.com/notifications/?v=" . PMPRO_VERSION);
|
21 |
-
}
|
22 |
-
|
23 |
-
$pmpro_notification = wp_remote_retrieve_body($remote_notification);
|
24 |
-
|
25 |
-
set_transient("pmpro_notification_" . PMPRO_VERSION, $pmpro_notification, 86400);
|
26 |
-
}
|
27 |
-
|
28 |
-
if($pmpro_notification && $pmpro_notification != "NULL")
|
29 |
-
{
|
30 |
-
?>
|
31 |
-
<div id="pmpro_notifications">
|
32 |
-
<?php echo $pmpro_notification; ?>
|
33 |
-
</div>
|
34 |
-
<?php
|
35 |
-
}
|
36 |
-
}
|
37 |
-
|
38 |
-
//exit so we just show this content
|
39 |
-
exit;
|
40 |
-
}
|
41 |
-
add_action('wp_ajax_pmpro_notifications', 'pmpro_notifications');
|
42 |
-
|
43 |
-
/*
|
44 |
-
Show Powered by Paid Memberships Pro comment (only visible in source) in the footer.
|
45 |
-
*/
|
46 |
-
function pmpro_link()
|
47 |
-
{
|
48 |
-
?>
|
49 |
-
Memberships powered by Paid Memberships Pro v<?php echo PMPRO_VERSION?>.
|
50 |
-
<?php
|
51 |
-
}
|
52 |
-
function pmpro_footer_link()
|
53 |
-
{
|
54 |
-
if(!pmpro_getOption("hide_footer_link"))
|
55 |
-
{
|
56 |
-
?>
|
57 |
-
<!-- <?php echo pmpro_link()?> -->
|
58 |
-
<?php
|
59 |
-
}
|
60 |
-
}
|
61 |
-
add_action("wp_footer", "pmpro_footer_link");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/profile.php
DELETED
@@ -1,224 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
These functions add the "membership level" field to the edit user/profile page
|
4 |
-
*/
|
5 |
-
//add the fields
|
6 |
-
function pmpro_membership_level_profile_fields($user)
|
7 |
-
{
|
8 |
-
global $current_user, $pmpro_currency_symbol;
|
9 |
-
|
10 |
-
$membership_level_capability = apply_filters("pmpro_edit_member_capability", "manage_options");
|
11 |
-
if(!current_user_can($membership_level_capability))
|
12 |
-
return false;
|
13 |
-
|
14 |
-
global $wpdb;
|
15 |
-
/*$user->membership_level = $wpdb->get_row("SELECT l.id AS ID, l.name AS name
|
16 |
-
FROM {$wpdb->pmpro_membership_levels} AS l
|
17 |
-
JOIN {$wpdb->pmpro_memberships_users} AS mu ON (l.id = mu.membership_id)
|
18 |
-
WHERE mu.user_id = " . $user->ID . "
|
19 |
-
LIMIT 1");*/
|
20 |
-
$user->membership_level = pmpro_getMembershipLevelForUser($user->ID);
|
21 |
-
|
22 |
-
$levels = $wpdb->get_results( "SELECT * FROM {$wpdb->pmpro_membership_levels}", OBJECT );
|
23 |
-
|
24 |
-
if(!$levels)
|
25 |
-
return "";
|
26 |
-
?>
|
27 |
-
<h3><?php _e("Membership Level", "pmpro"); ?></h3>
|
28 |
-
<table class="form-table">
|
29 |
-
<?php
|
30 |
-
$show_membership_level = true;
|
31 |
-
$show_membership_level = apply_filters("pmpro_profile_show_membership_level", $show_membership_level, $user);
|
32 |
-
if($show_membership_level)
|
33 |
-
{
|
34 |
-
?>
|
35 |
-
<tr>
|
36 |
-
<th><label for="membership_level"><?php _e("Current Level", "pmpro"); ?></label></th>
|
37 |
-
<td>
|
38 |
-
<select name="membership_level" onchange="pmpro_mchange_warning();">
|
39 |
-
<option value="" <?php if(empty($user->membership_level->ID)) { ?>selected="selected"<?php } ?>>-- <?php _e("None", "pmpro");?> --</option>
|
40 |
-
<?php
|
41 |
-
foreach($levels as $level)
|
42 |
-
{
|
43 |
-
$current_level = ($user->membership_level->ID == $level->id);
|
44 |
-
?>
|
45 |
-
<option value="<?php echo $level->id?>" <?php if($current_level) { ?>selected="selected"<?php } ?>><?php echo $level->name?></option>
|
46 |
-
<?php
|
47 |
-
}
|
48 |
-
?>
|
49 |
-
</select>
|
50 |
-
<script>
|
51 |
-
var pmpro_mchange_once = 0;
|
52 |
-
function pmpro_mchange_warning()
|
53 |
-
{
|
54 |
-
if(pmpro_mchange_once == 0)
|
55 |
-
{
|
56 |
-
alert('Warning: The existing membership will be cancelled, and the new membership will be free.');
|
57 |
-
pmpro_mchange_once = 1;
|
58 |
-
}
|
59 |
-
}
|
60 |
-
</script>
|
61 |
-
<?php
|
62 |
-
$membership_values = $wpdb->get_row("SELECT * FROM $wpdb->pmpro_memberships_users WHERE status = 'active' AND user_id = '" . $user->ID . "' LIMIT 1");
|
63 |
-
if(!empty($membership_values->billing_amount) || !empty($membership_values->trial_amount))
|
64 |
-
{
|
65 |
-
?>
|
66 |
-
<?php if($membership_values->billing_amount > 0) { ?>
|
67 |
-
at <?php echo $pmpro_currency_symbol;?><?php echo $membership_values->billing_amount?>
|
68 |
-
<?php if($membership_values->cycle_number > 1) { ?>
|
69 |
-
per <?php echo $membership_values->cycle_number?> <?php echo sornot($membership_values->cycle_period,$membership_values->cycle_number)?>
|
70 |
-
<?php } elseif($membership_values->cycle_number == 1) { ?>
|
71 |
-
per <?php echo $membership_values->cycle_period?>
|
72 |
-
<?php } ?>
|
73 |
-
<?php } ?>
|
74 |
-
|
75 |
-
<?php if($membership_values->billing_limit) { ?> for <?php echo $membership_values->billing_limit.' '.sornot($membership_values->cycle_period,$membership_values->billing_limit)?><?php } ?>.
|
76 |
-
|
77 |
-
<?php if($membership_values->trial_limit) { ?>
|
78 |
-
The first <?php echo $membership_values->trial_limit?> <?php echo sornot("payments",$membership_values->trial_limit)?> will cost <?php echo $pmpro_currency_symbol;?><?php echo $membership_values->trial_amount?>.
|
79 |
-
<?php } ?>
|
80 |
-
<?php
|
81 |
-
}
|
82 |
-
else
|
83 |
-
{
|
84 |
-
_e("User is not paying.", "pmpro");
|
85 |
-
}
|
86 |
-
?>
|
87 |
-
</td>
|
88 |
-
</tr>
|
89 |
-
<?php
|
90 |
-
}
|
91 |
-
|
92 |
-
$show_expiration = true;
|
93 |
-
$show_expiration = apply_filters("pmpro_profile_show_expiration", $show_expiration, $user);
|
94 |
-
if($show_expiration)
|
95 |
-
{
|
96 |
-
//is there an end date?
|
97 |
-
$user->membership_level = pmpro_getMembershipLevelForUser($user->ID);
|
98 |
-
$end_date = !empty($user->membership_level->enddate);
|
99 |
-
|
100 |
-
//some vars for the dates
|
101 |
-
$current_day = date("j");
|
102 |
-
if($end_date)
|
103 |
-
$selected_expires_day = date("j", $user->membership_level->enddate);
|
104 |
-
else
|
105 |
-
$selected_expires_day = $current_day;
|
106 |
-
|
107 |
-
$current_month = date("M");
|
108 |
-
if($end_date)
|
109 |
-
$selected_expires_month = date("m", $user->membership_level->enddate);
|
110 |
-
else
|
111 |
-
$selected_expires_month = date("m");
|
112 |
-
|
113 |
-
$current_year = date("Y");
|
114 |
-
if($end_date)
|
115 |
-
$selected_expires_year = date("Y", $user->membership_level->enddate);
|
116 |
-
else
|
117 |
-
$selected_expires_year = (int)$current_year + 1;
|
118 |
-
?>
|
119 |
-
<tr>
|
120 |
-
<th><label for="expiration"><?php _e("Expires", "pmpro"); ?></label></th>
|
121 |
-
<td>
|
122 |
-
<select id="expires" name="expires">
|
123 |
-
<option value="0" <?php if(!$end_date) { ?>selected="selected"<?php } ?>><?php _e("No", "pmpro");?></option>
|
124 |
-
<option value="1" <?php if($end_date) { ?>selected="selected"<?php } ?>><?php _e("Yes", "pmpro");?></option>
|
125 |
-
</select>
|
126 |
-
<span id="expires_date" <?php if(!$end_date) { ?>style="display: none;"<?php } ?>>
|
127 |
-
on
|
128 |
-
<select name="expires_month">
|
129 |
-
<?php
|
130 |
-
for($i = 1; $i < 13; $i++)
|
131 |
-
{
|
132 |
-
?>
|
133 |
-
<option value="<?php echo $i?>" <?php if($i == $selected_expires_month) { ?>selected="selected"<?php } ?>><?php echo date("M", strtotime($i . "/1/" . $current_year, current_time("timestamp")))?></option>
|
134 |
-
<?php
|
135 |
-
}
|
136 |
-
?>
|
137 |
-
</select>
|
138 |
-
<input name="expires_day" type="text" size="2" value="<?php echo $selected_expires_day?>" />
|
139 |
-
<input name="expires_year" type="text" size="4" value="<?php echo $selected_expires_year?>" />
|
140 |
-
</span>
|
141 |
-
<script>
|
142 |
-
jQuery('#expires').change(function() {
|
143 |
-
if(jQuery(this).val() == 1)
|
144 |
-
jQuery('#expires_date').show();
|
145 |
-
else
|
146 |
-
jQuery('#expires_date').hide();
|
147 |
-
});
|
148 |
-
</script>
|
149 |
-
</td>
|
150 |
-
</tr>
|
151 |
-
<?php
|
152 |
-
}
|
153 |
-
?>
|
154 |
-
</table>
|
155 |
-
<?php
|
156 |
-
}
|
157 |
-
|
158 |
-
//save the fields on update
|
159 |
-
function pmpro_membership_level_profile_fields_update()
|
160 |
-
{
|
161 |
-
//get the user id
|
162 |
-
global $wpdb, $current_user, $user_ID;
|
163 |
-
get_currentuserinfo();
|
164 |
-
|
165 |
-
if(!empty($_REQUEST['user_id']))
|
166 |
-
$user_ID = $_REQUEST['user_id'];
|
167 |
-
|
168 |
-
$membership_level_capability = apply_filters("pmpro_edit_member_capability", "manage_options");
|
169 |
-
if(!current_user_can($membership_level_capability))
|
170 |
-
return false;
|
171 |
-
|
172 |
-
//level change
|
173 |
-
if(isset($_REQUEST['membership_level']))
|
174 |
-
{
|
175 |
-
if(pmpro_changeMembershipLevel($_REQUEST['membership_level'], $user_ID))
|
176 |
-
{
|
177 |
-
//it changed. send email
|
178 |
-
$level_changed = true;
|
179 |
-
}
|
180 |
-
}
|
181 |
-
|
182 |
-
//expiration change
|
183 |
-
if(!empty($_REQUEST['expires']))
|
184 |
-
{
|
185 |
-
//update the expiration date
|
186 |
-
$expiration_date = intval($_REQUEST['expires_year']) . "-" . str_pad(intval($_REQUEST['expires_month']), 2, "0", STR_PAD_LEFT) . "-" . str_pad(intval($_REQUEST['expires_day']), 2, "0", STR_PAD_LEFT);
|
187 |
-
$sqlQuery = "UPDATE $wpdb->pmpro_memberships_users SET enddate = '" . $expiration_date . "' WHERE status = 'active' AND membership_id = '" . intval($_REQUEST['membership_level']) . "' AND user_id = '" . $user_ID . "' LIMIT 1";
|
188 |
-
if($wpdb->query($sqlQuery))
|
189 |
-
$expiration_changed = true;
|
190 |
-
}
|
191 |
-
elseif(isset($_REQUEST['expires']))
|
192 |
-
{
|
193 |
-
//already blank? have to check for null or '0000-00-00 00:00:00' or '' here.
|
194 |
-
$sqlQuery = "SELECT user_id FROM $wpdb->pmpro_memberships_users WHERE (enddate IS NULL OR enddate = '' OR enddate = '0000-00-00 00:00:00') AND status = 'active' AND user_id = '" . $user_ID . "' LIMIT 1";
|
195 |
-
$blank = $wpdb->get_var($sqlQuery);
|
196 |
-
|
197 |
-
if(empty($blank))
|
198 |
-
{
|
199 |
-
//null out the expiration
|
200 |
-
$sqlQuery = "UPDATE $wpdb->pmpro_memberships_users SET enddate = NULL WHERE status = 'active' AND membership_id = '" . intval($_REQUEST['membership_level']) . "' AND user_id = '" . $user_ID . "' LIMIT 1";
|
201 |
-
if($wpdb->query($sqlQuery))
|
202 |
-
$expiration_changed = true;
|
203 |
-
}
|
204 |
-
}
|
205 |
-
|
206 |
-
//send email
|
207 |
-
if(!empty($level_changed) || !empty($expiration_changed))
|
208 |
-
{
|
209 |
-
//email to member
|
210 |
-
$pmproemail = new PMProEmail();
|
211 |
-
if(!empty($expiration_changed))
|
212 |
-
$pmproemail->expiration_changed = true;
|
213 |
-
$pmproemail->sendAdminChangeEmail(get_userdata($user_ID));
|
214 |
-
|
215 |
-
//email to admin
|
216 |
-
$pmproemail = new PMProEmail();
|
217 |
-
if(!empty($expiration_changed))
|
218 |
-
$pmproemail->expiration_changed = true;
|
219 |
-
$pmproemail->sendAdminChangeAdminEmail(get_userdata($user_ID));
|
220 |
-
}
|
221 |
-
}
|
222 |
-
add_action( 'show_user_profile', 'pmpro_membership_level_profile_fields' );
|
223 |
-
add_action( 'edit_user_profile', 'pmpro_membership_level_profile_fields' );
|
224 |
-
add_action( 'profile_update', 'pmpro_membership_level_profile_fields_update' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/recaptcha.php
DELETED
@@ -1,22 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
function pmpro_init_recaptcha()
|
3 |
-
{
|
4 |
-
//don't load in admin
|
5 |
-
if(is_admin())
|
6 |
-
return;
|
7 |
-
|
8 |
-
//use recaptcha?
|
9 |
-
global $recaptcha;
|
10 |
-
$recaptcha = pmpro_getOption("recaptcha");
|
11 |
-
if($recaptcha)
|
12 |
-
{
|
13 |
-
global $recaptcha_publickey, $recaptcha_privatekey;
|
14 |
-
if(!function_exists("recaptcha_get_html"))
|
15 |
-
{
|
16 |
-
require_once(PMPRO_DIR . "/includes/lib/recaptchalib.php");
|
17 |
-
}
|
18 |
-
$recaptcha_publickey = pmpro_getOption("recaptcha_publickey");
|
19 |
-
$recaptcha_privatekey = pmpro_getOption("recaptcha_privatekey");
|
20 |
-
}
|
21 |
-
}
|
22 |
-
add_action("init", "pmpro_init_recaptcha", 20);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/reports.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Load All Reports
|
4 |
-
*/
|
5 |
-
$pmpro_reports_dir = dirname(__FILE__) . "/../adminpages/reports/";
|
6 |
-
$cwd = getcwd();
|
7 |
-
chdir($pmpro_reports_dir);
|
8 |
-
foreach (glob("*.php") as $filename)
|
9 |
-
{
|
10 |
-
require_once($filename);
|
11 |
-
}
|
12 |
-
chdir($cwd);
|
13 |
-
|
14 |
-
/*
|
15 |
-
Load Reports From Theme
|
16 |
-
*/
|
17 |
-
$pmpro_reports_theme_dir = get_stylesheet_directory() . "/paid-memberships-pro/reports/";
|
18 |
-
if(is_dir($pmpro_reports_theme_dir))
|
19 |
-
{
|
20 |
-
$cwd = getcwd();
|
21 |
-
chdir($pmpro_reports_theme_dir);
|
22 |
-
foreach (glob("*.php") as $filename)
|
23 |
-
{
|
24 |
-
require_once($filename);
|
25 |
-
}
|
26 |
-
chdir($cwd);
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/services.php
DELETED
@@ -1,70 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Loading a service?
|
4 |
-
*/
|
5 |
-
/*
|
6 |
-
Note: The applydiscountcode goes through the site_url() instead of admin-ajax to avoid HTTP/HTTPS issues.
|
7 |
-
*/
|
8 |
-
if(isset($_REQUEST['action']) && $_REQUEST['action'] == "applydiscountcode")
|
9 |
-
{
|
10 |
-
function pmpro_applydiscountcode_init()
|
11 |
-
{
|
12 |
-
require_once(dirname(__FILE__) . "/../services/applydiscountcode.php");
|
13 |
-
exit;
|
14 |
-
}
|
15 |
-
add_action("init", "pmpro_applydiscountcode_init", 11);
|
16 |
-
}
|
17 |
-
function pmpro_wp_ajax_authnet_silent_post()
|
18 |
-
{
|
19 |
-
require_once(dirname(__FILE__) . "/../services/authnet-silent-post.php");
|
20 |
-
exit;
|
21 |
-
}
|
22 |
-
add_action('wp_ajax_nopriv_authnet_silent_post', 'pmpro_wp_ajax_authnet_silent_post');
|
23 |
-
add_action('wp_ajax_authnet_silent_post', 'pmpro_wp_ajax_authnet_silent_post');
|
24 |
-
function pmpro_wp_ajax_getfile()
|
25 |
-
{
|
26 |
-
require_once(dirname(__FILE__) . "/../services/getfile.php");
|
27 |
-
exit;
|
28 |
-
}
|
29 |
-
add_action('wp_ajax_nopriv_getfile', 'pmpro_wp_ajax_getfile');
|
30 |
-
add_action('wp_ajax_getfile', 'pmpro_wp_ajax_getfile');
|
31 |
-
function pmpro_wp_ajax_ipnhandler()
|
32 |
-
{
|
33 |
-
require_once(dirname(__FILE__) . "/../services/ipnhandler.php");
|
34 |
-
exit;
|
35 |
-
}
|
36 |
-
add_action('wp_ajax_nopriv_ipnhandler', 'pmpro_wp_ajax_ipnhandler');
|
37 |
-
add_action('wp_ajax_ipnhandler', 'pmpro_wp_ajax_ipnhandler');
|
38 |
-
function pmpro_wp_ajax_stripe_webhook()
|
39 |
-
{
|
40 |
-
require_once(dirname(__FILE__) . "/../services/stripe-webhook.php");
|
41 |
-
exit;
|
42 |
-
}
|
43 |
-
add_action('wp_ajax_nopriv_stripe_webhook', 'pmpro_wp_ajax_stripe_webhook');
|
44 |
-
add_action('wp_ajax_stripe_webhook', 'pmpro_wp_ajax_stripe_webhook');
|
45 |
-
function pmpro_wp_ajax_braintree_webhook()
|
46 |
-
{
|
47 |
-
require_once(dirname(__FILE__) . "/../services/braintree-webhook.php");
|
48 |
-
exit;
|
49 |
-
}
|
50 |
-
add_action('wp_ajax_nopriv_braintree_webhook', 'pmpro_wp_ajax_braintree_webhook');
|
51 |
-
add_action('wp_ajax_braintree_webhook', 'pmpro_wp_ajax_braintree_webhook');
|
52 |
-
function pmpro_wp_ajax_twocheckout_ins()
|
53 |
-
{
|
54 |
-
require_once(dirname(__FILE__) . "/../services/twocheckout-ins.php");
|
55 |
-
exit;
|
56 |
-
}
|
57 |
-
add_action('wp_ajax_nopriv_twocheckout-ins', 'pmpro_wp_ajax_twocheckout_ins');
|
58 |
-
add_action('wp_ajax_twocheckout-ins', 'pmpro_wp_ajax_twocheckout_ins');
|
59 |
-
function pmpro_wp_ajax_memberlist_csv()
|
60 |
-
{
|
61 |
-
require_once(dirname(__FILE__) . "/../adminpages/memberslist-csv.php");
|
62 |
-
exit;
|
63 |
-
}
|
64 |
-
add_action('wp_ajax_memberslist_csv', 'pmpro_wp_ajax_memberlist_csv');
|
65 |
-
function pmpro_wp_ajax_orders_csv()
|
66 |
-
{
|
67 |
-
require_once(dirname(__FILE__) . "/../adminpages/orders-csv.php");
|
68 |
-
exit;
|
69 |
-
}
|
70 |
-
add_action('wp_ajax_orders_csv', 'pmpro_wp_ajax_orders_csv');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/setup.sql
CHANGED
@@ -26,7 +26,7 @@ CREATE TABLE `wp_pmpro_discount_codes` (
|
|
26 |
UNIQUE KEY `code` (`code`),
|
27 |
KEY `starts` (`starts`),
|
28 |
KEY `expires` (`expires`)
|
29 |
-
);
|
30 |
|
31 |
-- --------------------------------------------------------
|
32 |
|
@@ -48,7 +48,7 @@ CREATE TABLE `wp_pmpro_discount_codes_levels` (
|
|
48 |
`expiration_period` enum('Day','Week','Month','Year') NOT NULL,
|
49 |
PRIMARY KEY (`code_id`,`level_id`),
|
50 |
KEY `initial_payment` (`initial_payment`)
|
51 |
-
);
|
52 |
|
53 |
-- --------------------------------------------------------
|
54 |
|
@@ -65,7 +65,7 @@ CREATE TABLE `wp_pmpro_discount_codes_uses` (
|
|
65 |
PRIMARY KEY (`id`),
|
66 |
KEY `user_id` (`user_id`),
|
67 |
KEY `timestamp` (`timestamp`)
|
68 |
-
);
|
69 |
|
70 |
-- --------------------------------------------------------
|
71 |
|
@@ -92,7 +92,7 @@ CREATE TABLE `wp_pmpro_membership_levels` (
|
|
92 |
KEY `allow_signups` (`allow_signups`),
|
93 |
KEY `initial_payment` (`initial_payment`),
|
94 |
KEY `name` (`name`)
|
95 |
-
);
|
96 |
|
97 |
-- --------------------------------------------------------
|
98 |
|
@@ -125,7 +125,7 @@ CREATE TABLE `wp_pmpro_membership_orders` (
|
|
125 |
`accountnumber` varchar(32) NOT NULL DEFAULT '',
|
126 |
`expirationmonth` char(2) NOT NULL DEFAULT '',
|
127 |
`expirationyear` varchar(4) NOT NULL DEFAULT '',
|
128 |
-
`status` varchar(
|
129 |
`gateway` varchar(64) NOT NULL,
|
130 |
`gateway_environment` varchar(64) NOT NULL,
|
131 |
`payment_transaction_id` varchar(64) NOT NULL,
|
@@ -133,21 +133,15 @@ CREATE TABLE `wp_pmpro_membership_orders` (
|
|
133 |
`timestamp` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
134 |
`affiliate_id` varchar(32) NOT NULL,
|
135 |
`affiliate_subid` varchar(32) NOT NULL,
|
136 |
-
`notes` TEXT NOT NULL,
|
137 |
PRIMARY KEY (`id`),
|
138 |
UNIQUE KEY `code` (`code`),
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
KEY `payment_transaction_id` (`payment_transaction_id`),
|
147 |
-
KEY `subscription_transaction_id` (`subscription_transaction_id`),
|
148 |
-
KEY `affiliate_id` (`affiliate_id`),
|
149 |
-
KEY `affiliate_subid` (`affiliate_subid`)
|
150 |
-
);
|
151 |
|
152 |
-- --------------------------------------------------------
|
153 |
|
@@ -161,7 +155,7 @@ CREATE TABLE `wp_pmpro_memberships_categories` (
|
|
161 |
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
162 |
UNIQUE KEY `membership_category` (`membership_id`,`category_id`),
|
163 |
UNIQUE KEY `category_membership` (`category_id`,`membership_id`)
|
164 |
-
);
|
165 |
|
166 |
-- --------------------------------------------------------
|
167 |
|
@@ -175,7 +169,7 @@ CREATE TABLE `wp_pmpro_memberships_pages` (
|
|
175 |
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
176 |
UNIQUE KEY `category_membership` (`page_id`,`membership_id`),
|
177 |
UNIQUE KEY `membership_page` (`membership_id`,`page_id`)
|
178 |
-
);
|
179 |
|
180 |
-- --------------------------------------------------------
|
181 |
|
@@ -184,26 +178,22 @@ CREATE TABLE `wp_pmpro_memberships_pages` (
|
|
184 |
--
|
185 |
|
186 |
CREATE TABLE `wp_pmpro_memberships_users` (
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
KEY `enddate` (`enddate`),
|
207 |
-
KEY `user_id` (`user_id`),
|
208 |
-
KEY `user_id` (`status`)
|
209 |
-
);
|
26 |
UNIQUE KEY `code` (`code`),
|
27 |
KEY `starts` (`starts`),
|
28 |
KEY `expires` (`expires`)
|
29 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
30 |
|
31 |
-- --------------------------------------------------------
|
32 |
|
48 |
`expiration_period` enum('Day','Week','Month','Year') NOT NULL,
|
49 |
PRIMARY KEY (`code_id`,`level_id`),
|
50 |
KEY `initial_payment` (`initial_payment`)
|
51 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
52 |
|
53 |
-- --------------------------------------------------------
|
54 |
|
65 |
PRIMARY KEY (`id`),
|
66 |
KEY `user_id` (`user_id`),
|
67 |
KEY `timestamp` (`timestamp`)
|
68 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
69 |
|
70 |
-- --------------------------------------------------------
|
71 |
|
92 |
KEY `allow_signups` (`allow_signups`),
|
93 |
KEY `initial_payment` (`initial_payment`),
|
94 |
KEY `name` (`name`)
|
95 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
96 |
|
97 |
-- --------------------------------------------------------
|
98 |
|
125 |
`accountnumber` varchar(32) NOT NULL DEFAULT '',
|
126 |
`expirationmonth` char(2) NOT NULL DEFAULT '',
|
127 |
`expirationyear` varchar(4) NOT NULL DEFAULT '',
|
128 |
+
`status` varchar(32) NOT NULL DEFAULT '',
|
129 |
`gateway` varchar(64) NOT NULL,
|
130 |
`gateway_environment` varchar(64) NOT NULL,
|
131 |
`payment_transaction_id` varchar(64) NOT NULL,
|
133 |
`timestamp` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
134 |
`affiliate_id` varchar(32) NOT NULL,
|
135 |
`affiliate_subid` varchar(32) NOT NULL,
|
|
|
136 |
PRIMARY KEY (`id`),
|
137 |
UNIQUE KEY `code` (`code`),
|
138 |
+
KEY `session_id` (`session_id`),
|
139 |
+
KEY `user_id` (`user_id`),
|
140 |
+
KEY `membership_id` (`membership_id`),
|
141 |
+
KEY `timestamp` (`timestamp`),
|
142 |
+
KEY `gateway` (`gateway`),
|
143 |
+
KEY `gateway_environment` (`gateway_environment`)
|
144 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
|
|
|
|
|
|
|
|
|
|
145 |
|
146 |
-- --------------------------------------------------------
|
147 |
|
155 |
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
156 |
UNIQUE KEY `membership_category` (`membership_id`,`category_id`),
|
157 |
UNIQUE KEY `category_membership` (`category_id`,`membership_id`)
|
158 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
159 |
|
160 |
-- --------------------------------------------------------
|
161 |
|
169 |
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
170 |
UNIQUE KEY `category_membership` (`page_id`,`membership_id`),
|
171 |
UNIQUE KEY `membership_page` (`membership_id`,`page_id`)
|
172 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
173 |
|
174 |
-- --------------------------------------------------------
|
175 |
|
178 |
--
|
179 |
|
180 |
CREATE TABLE `wp_pmpro_memberships_users` (
|
181 |
+
`user_id` int(11) unsigned NOT NULL,
|
182 |
+
`membership_id` int(11) unsigned NOT NULL,
|
183 |
+
`code_id` int(11) unsigned NOT NULL,
|
184 |
+
`initial_payment` decimal(10,2) NOT NULL,
|
185 |
+
`billing_amount` decimal(10,2) NOT NULL,
|
186 |
+
`cycle_number` int(11) NOT NULL,
|
187 |
+
`cycle_period` enum('Day','Week','Month','Year') NOT NULL DEFAULT 'Month',
|
188 |
+
`billing_limit` int(11) NOT NULL,
|
189 |
+
`trial_amount` decimal(10,2) NOT NULL,
|
190 |
+
`trial_limit` int(11) NOT NULL,
|
191 |
+
`startdate` datetime NOT NULL,
|
192 |
+
`enddate` datetime DEFAULT NULL,
|
193 |
+
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
194 |
+
PRIMARY KEY (`user_id`),
|
195 |
+
KEY `membership_id` (`membership_id`),
|
196 |
+
KEY `modified` (`modified`),
|
197 |
+
KEY `code_id` (`code_id`),
|
198 |
+
KEY `enddate` (`enddate`)
|
199 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
|
|
|
|
|
|
|
includes/upgradecheck.php
CHANGED
@@ -34,86 +34,16 @@ function pmpro_checkForUpgrades()
|
|
34 |
|
35 |
if($pmpro_db_version < 1.48)
|
36 |
$pmpro_db_version = pmpro_upgrade_1_4_8();
|
37 |
-
|
38 |
-
if($pmpro_db_version < 1.5)
|
39 |
$pmpro_db_version = pmpro_upgrade_1_5();
|
40 |
|
41 |
if($pmpro_db_version < 1.59)
|
42 |
$pmpro_db_version = pmpro_upgrade_1_5_9();
|
43 |
|
44 |
if($pmpro_db_version < 1.6)
|
45 |
-
$pmpro_db_version = pmpro_upgrade_1_6();
|
46 |
-
|
47 |
-
//fix for fresh 1.7 installs
|
48 |
-
if($pmpro_db_version == 1.7)
|
49 |
-
{
|
50 |
-
//check if we have an id column in the memberships_users table
|
51 |
-
$wpdb->pmpro_memberships_users = $table_prefix . 'pmpro_memberships_users';
|
52 |
-
$col = $wpdb->get_var("SELECT id FROM $wpdb->pmpro_memberships_users LIMIT 1");
|
53 |
-
if($wpdb->last_error == "Unknown column 'id' in 'field list'")
|
54 |
-
{
|
55 |
-
//redo 1.5 fix
|
56 |
-
pmpro_upgrade_1_5();
|
57 |
-
}
|
58 |
-
|
59 |
-
pmpro_db_delta();
|
60 |
-
|
61 |
-
pmpro_setOption("db_version", "1.703");
|
62 |
-
$pmpro_db_version = 1.703;
|
63 |
-
}
|
64 |
-
|
65 |
-
//updates from this point on should be like this if DB only
|
66 |
-
if($pmpro_db_version < 1.71)
|
67 |
-
{
|
68 |
-
pmpro_db_delta();
|
69 |
-
pmpro_setOption("db_version", "1.71");
|
70 |
-
$pmpro_db_version = 1.71;
|
71 |
-
}
|
72 |
-
|
73 |
-
if($pmpro_db_version < 1.72)
|
74 |
-
{
|
75 |
-
//schedule the credit card expiring cron
|
76 |
-
wp_schedule_event(current_time('timestamp'), 'monthly', 'pmpro_cron_credit_card_expiring_warnings');
|
77 |
-
|
78 |
-
pmpro_setOption("db_version", "1.72");
|
79 |
-
$pmpro_db_version = 1.72;
|
80 |
-
}
|
81 |
-
|
82 |
-
/*
|
83 |
-
1.7.3
|
84 |
-
- default Stripe Billing Fields to true
|
85 |
-
- unless Stripe Lite is activated, then deactivate Stripe Lite and set Stripe Billing Fields to false
|
86 |
-
*/
|
87 |
-
|
88 |
-
if($pmpro_db_version < 1.79)
|
89 |
-
{
|
90 |
-
//need to register caps for menu
|
91 |
-
pmpro_activation();
|
92 |
-
|
93 |
-
pmpro_setOption("db_version", "1.79");
|
94 |
-
$pmpro_db_version = 1.79;
|
95 |
-
}
|
96 |
-
|
97 |
-
//set default filter_queries setting
|
98 |
-
if($pmpro_db_version < 1.791)
|
99 |
-
{
|
100 |
-
if(!pmpro_getOption("showexcerpts"))
|
101 |
-
pmpro_setOption("filterqueries", 1);
|
102 |
-
else
|
103 |
-
pmpro_SetOption("filterqueries", 0);
|
104 |
-
|
105 |
-
pmpro_setOption("db_version", "1.791");
|
106 |
-
$pmpro_db_version = 1.791;
|
107 |
-
}
|
108 |
-
}
|
109 |
-
|
110 |
-
function pmpro_upgrade_1_7()
|
111 |
-
{
|
112 |
-
pmpro_db_delta(); //just a db delta
|
113 |
-
|
114 |
-
pmpro_setOption("db_version", "1.7");
|
115 |
-
return 1.7;
|
116 |
-
}
|
117 |
|
118 |
function pmpro_upgrade_1_6()
|
119 |
{
|
@@ -142,31 +72,31 @@ function pmpro_upgrade_1_5_9()
|
|
142 |
pmpro_setOption("db_version", "1.59");
|
143 |
return 1.59;
|
144 |
}
|
145 |
-
|
146 |
-
function pmpro_upgrade_1_5()
|
147 |
-
{
|
148 |
-
/*
|
149 |
-
Add the id and status fields to pmpro_memberships_users, change primary key to id instead of user_id
|
150 |
-
*/
|
151 |
-
|
152 |
-
global $wpdb;
|
153 |
-
$wpdb->hide_errors();
|
154 |
-
$wpdb->pmpro_memberships_users = $wpdb->prefix . 'pmpro_memberships_users';
|
155 |
-
|
156 |
-
//remove primary key
|
157 |
-
$sqlQuery = "ALTER TABLE `" . $wpdb->pmpro_memberships_users . "` DROP PRIMARY KEY";
|
158 |
-
$wpdb->query($sqlQuery);
|
159 |
-
|
160 |
-
//id
|
161 |
-
$sqlQuery = "ALTER TABLE `" . $wpdb->pmpro_memberships_users . "` ADD `id` BIGINT( 20 ) UNSIGNED AUTO_INCREMENT FIRST, ADD PRIMARY KEY(id)";
|
162 |
-
$wpdb->query($sqlQuery);
|
163 |
-
|
164 |
-
//status
|
165 |
-
$sqlQuery = "ALTER TABLE `" . $wpdb->pmpro_memberships_users . "` ADD `status` varchar( 20 ) NOT NULL DEFAULT 'active' AFTER `trial_limit`";
|
166 |
-
$wpdb->query($sqlQuery);
|
167 |
-
|
168 |
-
pmpro_setOption("db_version", "1.5");
|
169 |
-
return 1.5;
|
170 |
}
|
171 |
|
172 |
function pmpro_upgrade_1_4_8()
|
@@ -268,7 +198,7 @@ ADD `expiration_period` ENUM( 'Day', 'Week', 'Month', 'Year' ) NOT NULL
|
|
268 |
$wpdb->query($sqlQuery);
|
269 |
|
270 |
$sqlQuery = "
|
271 |
-
ALTER TABLE `" . $wpdb->
|
272 |
";
|
273 |
$wpdb->query($sqlQuery);
|
274 |
|
@@ -419,14 +349,13 @@ function pmpro_upgrade_1()
|
|
419 |
/*
|
420 |
default options
|
421 |
*/
|
422 |
-
$nonmembertext =
|
423 |
pmpro_setOption("nonmembertext", $nonmembertext);
|
424 |
|
425 |
-
$notloggedintext =
|
426 |
-
'?action=register">Register</a>';
|
427 |
pmpro_setOption("notloggedintext", $notloggedintext);
|
428 |
|
429 |
-
$rsstext =
|
430 |
pmpro_setOption("rsstext", $rsstext);
|
431 |
|
432 |
$gateway_environment = "sandbox";
|
@@ -439,7 +368,7 @@ function pmpro_upgrade_1()
|
|
439 |
pmpro_setOption("accepted_credit_cards", $pmpro_accepted_credit_cards);
|
440 |
|
441 |
$parsed = parse_url(home_url());
|
442 |
-
$hostname = $parsed[
|
443 |
$hostparts = split("\.", $hostname);
|
444 |
$email_domain = $hostparts[count($hostparts) - 2] . "." . $hostparts[count($hostparts) - 1];
|
445 |
$from_email = "wordpress@" . $email_domain;
|
@@ -448,26 +377,11 @@ function pmpro_upgrade_1()
|
|
448 |
$from_name = "WordPress";
|
449 |
pmpro_setOption("from_name", $from_name);
|
450 |
|
451 |
-
//setting new email settings defaults
|
452 |
-
pmpro_setOption("email_admin_checkout", "1");
|
453 |
-
pmpro_setOption("email_admin_changes", "1");
|
454 |
-
pmpro_setOption("email_admin_cancels", "1");
|
455 |
-
pmpro_setOption("email_admin_billing", "1");
|
456 |
-
|
457 |
pmpro_setOption("tospage", "");
|
458 |
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
//update version and return
|
463 |
-
pmpro_setOption("db_version", "1.702"); //no need to run other updates
|
464 |
-
return 1.702;
|
465 |
-
}
|
466 |
-
|
467 |
-
function pmpro_db_delta()
|
468 |
-
{
|
469 |
-
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
470 |
-
|
471 |
global $wpdb;
|
472 |
$wpdb->hide_errors();
|
473 |
$wpdb->pmpro_membership_levels = $wpdb->prefix . 'pmpro_membership_levels';
|
@@ -482,133 +396,117 @@ function pmpro_db_delta()
|
|
482 |
//wp_pmpro_membership_levels
|
483 |
$sqlQuery = "
|
484 |
CREATE TABLE `" . $wpdb->pmpro_membership_levels . "` (
|
485 |
-
`id` int(11)
|
486 |
`name` varchar(255) NOT NULL,
|
487 |
`description` longtext NOT NULL,
|
488 |
-
`
|
489 |
-
`
|
490 |
-
`
|
491 |
-
`
|
492 |
-
`cycle_period` enum('Day','Week','Month','Year') DEFAULT 'Month',
|
493 |
`billing_limit` int(11) NOT NULL COMMENT 'After how many cycles should billing stop?',
|
494 |
-
`trial_amount` decimal(10,2) NOT NULL
|
495 |
-
`trial_limit` int(11) NOT NULL
|
496 |
-
`allow_signups` tinyint(4) NOT NULL
|
497 |
-
`
|
498 |
-
`expiration_period` enum('Day','Week','Month','Year') NOT NULL,
|
499 |
-
PRIMARY KEY (`id`),
|
500 |
KEY `allow_signups` (`allow_signups`),
|
501 |
KEY `initial_payment` (`initial_payment`),
|
502 |
KEY `name` (`name`)
|
503 |
-
)
|
504 |
";
|
505 |
-
|
506 |
|
507 |
//wp_pmpro_membership_orders
|
508 |
$sqlQuery = "
|
509 |
CREATE TABLE `" . $wpdb->pmpro_membership_orders . "` (
|
510 |
-
`id` int(11)
|
511 |
`code` varchar(10) NOT NULL,
|
512 |
-
`session_id` varchar(64) NOT NULL
|
513 |
-
`user_id` int(11)
|
514 |
-
`membership_id` int(11)
|
515 |
-
`paypal_token` varchar(64) NOT NULL
|
516 |
-
`billing_name` varchar(128) NOT NULL
|
517 |
-
`billing_street` varchar(128) NOT NULL
|
518 |
-
`billing_city` varchar(128) NOT NULL
|
519 |
-
`billing_state` varchar(32) NOT NULL
|
520 |
-
`billing_zip` varchar(16) NOT NULL
|
521 |
-
`billing_country` varchar(128) NOT NULL,
|
522 |
`billing_phone` varchar(32) NOT NULL,
|
523 |
-
`subtotal` varchar(16) NOT NULL
|
524 |
-
`tax` varchar(16) NOT NULL
|
525 |
-
`couponamount` varchar(16) NOT NULL
|
526 |
-
`certificate_id` int(11) NOT NULL
|
527 |
-
`certificateamount` varchar(16) NOT NULL
|
528 |
-
`total` varchar(16) NOT NULL
|
529 |
-
`payment_type` varchar(64) NOT NULL
|
530 |
-
`cardtype` varchar(32) NOT NULL
|
531 |
-
`accountnumber` varchar(32) NOT NULL
|
532 |
-
`expirationmonth` char(2) NOT NULL
|
533 |
-
`expirationyear` varchar(4) NOT NULL
|
534 |
-
`status` varchar(32) NOT NULL
|
535 |
`gateway` varchar(64) NOT NULL,
|
536 |
`gateway_environment` varchar(64) NOT NULL,
|
537 |
`payment_transaction_id` varchar(64) NOT NULL,
|
538 |
`subscription_transaction_id` varchar(32) NOT NULL,
|
539 |
-
`timestamp` datetime NOT NULL
|
540 |
`affiliate_id` varchar(32) NOT NULL,
|
541 |
`affiliate_subid` varchar(32) NOT NULL,
|
542 |
-
`
|
543 |
-
PRIMARY KEY (`id`),
|
544 |
UNIQUE KEY `code` (`code`),
|
545 |
KEY `session_id` (`session_id`),
|
546 |
KEY `user_id` (`user_id`),
|
547 |
KEY `membership_id` (`membership_id`),
|
548 |
-
KEY `status` (`status`),
|
549 |
KEY `timestamp` (`timestamp`),
|
550 |
KEY `gateway` (`gateway`),
|
551 |
-
KEY `gateway_environment` (`gateway_environment`)
|
552 |
-
|
553 |
-
KEY `subscription_transaction_id` (`subscription_transaction_id`),
|
554 |
-
KEY `affiliate_id` (`affiliate_id`),
|
555 |
-
KEY `affiliate_subid` (`affiliate_subid`)
|
556 |
-
);
|
557 |
";
|
558 |
-
|
559 |
|
560 |
//wp_pmpro_memberships_categories
|
561 |
$sqlQuery = "
|
562 |
CREATE TABLE `" . $wpdb->pmpro_memberships_categories . "` (
|
563 |
-
`membership_id` int(11)
|
564 |
-
`category_id` int(11)
|
565 |
-
`modified` timestamp NOT NULL
|
566 |
UNIQUE KEY `membership_category` (`membership_id`,`category_id`),
|
567 |
UNIQUE KEY `category_membership` (`category_id`,`membership_id`)
|
568 |
-
);
|
569 |
";
|
570 |
-
|
571 |
|
572 |
//wp_pmpro_memberships_pages
|
573 |
$sqlQuery = "
|
574 |
CREATE TABLE `" . $wpdb->pmpro_memberships_pages . "` (
|
575 |
-
`membership_id` int(11)
|
576 |
-
`page_id` int(11)
|
577 |
-
`modified` timestamp NOT NULL
|
578 |
UNIQUE KEY `category_membership` (`page_id`,`membership_id`),
|
579 |
UNIQUE KEY `membership_page` (`membership_id`,`page_id`)
|
580 |
-
);
|
581 |
";
|
582 |
-
|
583 |
|
584 |
//wp_pmpro_memberships_users
|
585 |
$sqlQuery = "
|
586 |
CREATE TABLE `" . $wpdb->pmpro_memberships_users . "` (
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
KEY `modified` (`modified`),
|
605 |
-
KEY `code_id` (`code_id`),
|
606 |
-
KEY `enddate` (`enddate`),
|
607 |
-
KEY `user_id` (`user_id`),
|
608 |
-
KEY `status` (`status`)
|
609 |
-
);
|
610 |
";
|
611 |
-
|
612 |
|
613 |
//wp_pmpro_discount_codes
|
614 |
$sqlQuery = "
|
@@ -622,15 +520,15 @@ function pmpro_db_delta()
|
|
622 |
UNIQUE KEY `code` (`code`),
|
623 |
KEY `starts` (`starts`),
|
624 |
KEY `expires` (`expires`)
|
625 |
-
);
|
626 |
";
|
627 |
-
|
628 |
|
629 |
//wp_pmpro_discount_codes_levels
|
630 |
$sqlQuery = "
|
631 |
CREATE TABLE `" . $wpdb->pmpro_discount_codes_levels . "` (
|
632 |
`code_id` int(11) unsigned NOT NULL,
|
633 |
-
`level_id` int(11) unsigned
|
634 |
`initial_payment` decimal(10,2) NOT NULL DEFAULT '0.00',
|
635 |
`billing_amount` decimal(10,2) NOT NULL DEFAULT '0.00',
|
636 |
`cycle_number` int(11) NOT NULL DEFAULT '0',
|
@@ -638,13 +536,11 @@ function pmpro_db_delta()
|
|
638 |
`billing_limit` int(11) NOT NULL COMMENT 'After how many cycles should billing stop?',
|
639 |
`trial_amount` decimal(10,2) NOT NULL DEFAULT '0.00',
|
640 |
`trial_limit` int(11) NOT NULL DEFAULT '0',
|
641 |
-
`expiration_number` int(10) unsigned NOT NULL,
|
642 |
-
`expiration_period` enum('Day','Week','Month','Year') NOT NULL,
|
643 |
PRIMARY KEY (`code_id`,`level_id`),
|
644 |
KEY `initial_payment` (`initial_payment`)
|
645 |
-
);
|
646 |
";
|
647 |
-
|
648 |
|
649 |
//wp_pmpro_discount_codes_uses
|
650 |
$sqlQuery = "
|
@@ -657,7 +553,10 @@ function pmpro_db_delta()
|
|
657 |
PRIMARY KEY (`id`),
|
658 |
KEY `user_id` (`user_id`),
|
659 |
KEY `timestamp` (`timestamp`)
|
660 |
-
);
|
661 |
";
|
662 |
-
|
|
|
|
|
|
|
663 |
}
|
34 |
|
35 |
if($pmpro_db_version < 1.48)
|
36 |
$pmpro_db_version = pmpro_upgrade_1_4_8();
|
37 |
+
|
38 |
+
if($pmpro_db_version < 1.5)
|
39 |
$pmpro_db_version = pmpro_upgrade_1_5();
|
40 |
|
41 |
if($pmpro_db_version < 1.59)
|
42 |
$pmpro_db_version = pmpro_upgrade_1_5_9();
|
43 |
|
44 |
if($pmpro_db_version < 1.6)
|
45 |
+
$pmpro_db_version = pmpro_upgrade_1_6();
|
46 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
|
48 |
function pmpro_upgrade_1_6()
|
49 |
{
|
72 |
pmpro_setOption("db_version", "1.59");
|
73 |
return 1.59;
|
74 |
}
|
75 |
+
|
76 |
+
function pmpro_upgrade_1_5()
|
77 |
+
{
|
78 |
+
/*
|
79 |
+
Add the id and status fields to pmpro_memberships_users, change primary key to id instead of user_id
|
80 |
+
*/
|
81 |
+
|
82 |
+
global $wpdb;
|
83 |
+
$wpdb->hide_errors();
|
84 |
+
$wpdb->pmpro_memberships_users = $wpdb->prefix . 'pmpro_memberships_users';
|
85 |
+
|
86 |
+
//remove primary key
|
87 |
+
$sqlQuery = "ALTER TABLE `" . $wpdb->pmpro_memberships_users . "` DROP PRIMARY KEY";
|
88 |
+
$wpdb->query($sqlQuery);
|
89 |
+
|
90 |
+
//id
|
91 |
+
$sqlQuery = "ALTER TABLE `" . $wpdb->pmpro_memberships_users . "` ADD `id` BIGINT( 20 ) UNSIGNED AUTO_INCREMENT FIRST, ADD PRIMARY KEY(id)";
|
92 |
+
$wpdb->query($sqlQuery);
|
93 |
+
|
94 |
+
//status
|
95 |
+
$sqlQuery = "ALTER TABLE `" . $wpdb->pmpro_memberships_users . "` ADD `status` varchar( 20 ) NOT NULL DEFAULT 'active' AFTER `trial_limit`";
|
96 |
+
$wpdb->query($sqlQuery);
|
97 |
+
|
98 |
+
pmpro_setOption("db_version", "1.5");
|
99 |
+
return 1.5;
|
100 |
}
|
101 |
|
102 |
function pmpro_upgrade_1_4_8()
|
198 |
$wpdb->query($sqlQuery);
|
199 |
|
200 |
$sqlQuery = "
|
201 |
+
ALTER TABLE `" . $wpdb->pmpro_membership_levels . "` ADD INDEX ( `enddate` )
|
202 |
";
|
203 |
$wpdb->query($sqlQuery);
|
204 |
|
349 |
/*
|
350 |
default options
|
351 |
*/
|
352 |
+
$nonmembertext = "This content is for !!levels!! members only. <a href=\"" . wp_login_url() . "?action=register\">Register here</a>.";
|
353 |
pmpro_setOption("nonmembertext", $nonmembertext);
|
354 |
|
355 |
+
$notloggedintext = "This content is for !!levels!! members only. Please <a href=\"" . wp_login_url( get_permalink() ) . "\">login</a> to view this content. (<a href=\"" . wp_login_url() . "?action=register\">Register here</a>.)";
|
|
|
356 |
pmpro_setOption("notloggedintext", $notloggedintext);
|
357 |
|
358 |
+
$rsstext = "This content is for !!levels!! members only. Visit the site and log in/register to read.";
|
359 |
pmpro_setOption("rsstext", $rsstext);
|
360 |
|
361 |
$gateway_environment = "sandbox";
|
368 |
pmpro_setOption("accepted_credit_cards", $pmpro_accepted_credit_cards);
|
369 |
|
370 |
$parsed = parse_url(home_url());
|
371 |
+
$hostname = $parsed[host];
|
372 |
$hostparts = split("\.", $hostname);
|
373 |
$email_domain = $hostparts[count($hostparts) - 2] . "." . $hostparts[count($hostparts) - 1];
|
374 |
$from_email = "wordpress@" . $email_domain;
|
377 |
$from_name = "WordPress";
|
378 |
pmpro_setOption("from_name", $from_name);
|
379 |
|
|
|
|
|
|
|
|
|
|
|
|
|
380 |
pmpro_setOption("tospage", "");
|
381 |
|
382 |
+
/*
|
383 |
+
DB table setup
|
384 |
+
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
385 |
global $wpdb;
|
386 |
$wpdb->hide_errors();
|
387 |
$wpdb->pmpro_membership_levels = $wpdb->prefix . 'pmpro_membership_levels';
|
396 |
//wp_pmpro_membership_levels
|
397 |
$sqlQuery = "
|
398 |
CREATE TABLE `" . $wpdb->pmpro_membership_levels . "` (
|
399 |
+
`id` int(11) UNSIGNED NOT NULL auto_increment,
|
400 |
`name` varchar(255) NOT NULL,
|
401 |
`description` longtext NOT NULL,
|
402 |
+
`initial_payment` decimal(10,2) NOT NULL default '0.00',
|
403 |
+
`billing_amount` decimal(10,2) NOT NULL default '0.00',
|
404 |
+
`cycle_number` int(11) NOT NULL default '0',
|
405 |
+
`cycle_period` enum('Day','Week','Month','Year') default 'Month',
|
|
|
406 |
`billing_limit` int(11) NOT NULL COMMENT 'After how many cycles should billing stop?',
|
407 |
+
`trial_amount` decimal(10,2) NOT NULL default '0.00',
|
408 |
+
`trial_limit` int(11) NOT NULL default '0',
|
409 |
+
`allow_signups` tinyint(4) NOT NULL default '1',
|
410 |
+
PRIMARY KEY (`id`),
|
|
|
|
|
411 |
KEY `allow_signups` (`allow_signups`),
|
412 |
KEY `initial_payment` (`initial_payment`),
|
413 |
KEY `name` (`name`)
|
414 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
415 |
";
|
416 |
+
$wpdb->query($sqlQuery);
|
417 |
|
418 |
//wp_pmpro_membership_orders
|
419 |
$sqlQuery = "
|
420 |
CREATE TABLE `" . $wpdb->pmpro_membership_orders . "` (
|
421 |
+
`id` int(11) UNSIGNED NOT NULL auto_increment,
|
422 |
`code` varchar(10) NOT NULL,
|
423 |
+
`session_id` varchar(64) NOT NULL default '',
|
424 |
+
`user_id` int(11) UNSIGNED NOT NULL default '0',
|
425 |
+
`membership_id` int(11) UNSIGNED NOT NULL default '0',
|
426 |
+
`paypal_token` varchar(64) NOT NULL default '',
|
427 |
+
`billing_name` varchar(128) NOT NULL default '',
|
428 |
+
`billing_street` varchar(128) NOT NULL default '',
|
429 |
+
`billing_city` varchar(128) NOT NULL default '',
|
430 |
+
`billing_state` varchar(32) NOT NULL default '',
|
431 |
+
`billing_zip` varchar(16) NOT NULL default '',
|
|
|
432 |
`billing_phone` varchar(32) NOT NULL,
|
433 |
+
`subtotal` varchar(16) NOT NULL default '',
|
434 |
+
`tax` varchar(16) NOT NULL default '',
|
435 |
+
`couponamount` varchar(16) NOT NULL default '',
|
436 |
+
`certificate_id` int(11) NOT NULL default '0',
|
437 |
+
`certificateamount` varchar(16) NOT NULL default '',
|
438 |
+
`total` varchar(16) NOT NULL default '',
|
439 |
+
`payment_type` varchar(64) NOT NULL default '',
|
440 |
+
`cardtype` varchar(32) NOT NULL default '',
|
441 |
+
`accountnumber` varchar(32) NOT NULL default '',
|
442 |
+
`expirationmonth` char(2) NOT NULL default '',
|
443 |
+
`expirationyear` varchar(4) NOT NULL default '',
|
444 |
+
`status` varchar(32) NOT NULL default '',
|
445 |
`gateway` varchar(64) NOT NULL,
|
446 |
`gateway_environment` varchar(64) NOT NULL,
|
447 |
`payment_transaction_id` varchar(64) NOT NULL,
|
448 |
`subscription_transaction_id` varchar(32) NOT NULL,
|
449 |
+
`timestamp` datetime NOT NULL default '0000-00-00 00:00:00',
|
450 |
`affiliate_id` varchar(32) NOT NULL,
|
451 |
`affiliate_subid` varchar(32) NOT NULL,
|
452 |
+
PRIMARY KEY (`id`),
|
|
|
453 |
UNIQUE KEY `code` (`code`),
|
454 |
KEY `session_id` (`session_id`),
|
455 |
KEY `user_id` (`user_id`),
|
456 |
KEY `membership_id` (`membership_id`),
|
|
|
457 |
KEY `timestamp` (`timestamp`),
|
458 |
KEY `gateway` (`gateway`),
|
459 |
+
KEY `gateway_environment` (`gateway_environment`)
|
460 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
|
|
|
|
|
|
|
|
461 |
";
|
462 |
+
$wpdb->query($sqlQuery);
|
463 |
|
464 |
//wp_pmpro_memberships_categories
|
465 |
$sqlQuery = "
|
466 |
CREATE TABLE `" . $wpdb->pmpro_memberships_categories . "` (
|
467 |
+
`membership_id` int(11) UNSIGNED NOT NULL,
|
468 |
+
`category_id` int(11) UNSIGNED NOT NULL,
|
469 |
+
`modified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
470 |
UNIQUE KEY `membership_category` (`membership_id`,`category_id`),
|
471 |
UNIQUE KEY `category_membership` (`category_id`,`membership_id`)
|
472 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
473 |
";
|
474 |
+
$wpdb->query($sqlQuery);
|
475 |
|
476 |
//wp_pmpro_memberships_pages
|
477 |
$sqlQuery = "
|
478 |
CREATE TABLE `" . $wpdb->pmpro_memberships_pages . "` (
|
479 |
+
`membership_id` int(11) UNSIGNED NOT NULL,
|
480 |
+
`page_id` int(11) UNSIGNED NOT NULL,
|
481 |
+
`modified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
482 |
UNIQUE KEY `category_membership` (`page_id`,`membership_id`),
|
483 |
UNIQUE KEY `membership_page` (`membership_id`,`page_id`)
|
484 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
485 |
";
|
486 |
+
$wpdb->query($sqlQuery);
|
487 |
|
488 |
//wp_pmpro_memberships_users
|
489 |
$sqlQuery = "
|
490 |
CREATE TABLE `" . $wpdb->pmpro_memberships_users . "` (
|
491 |
+
`user_id` int(11) UNSIGNED NOT NULL,
|
492 |
+
`membership_id` int(11) UNSIGNED NOT NULL,
|
493 |
+
`code_id` int(11) UNSIGNED NOT NULL,
|
494 |
+
`initial_payment` decimal(10,2) NOT NULL,
|
495 |
+
`billing_amount` decimal(10,2) NOT NULL,
|
496 |
+
`cycle_number` int(11) NOT NULL,
|
497 |
+
`cycle_period` enum('Day','Week','Month','Year') NOT NULL default 'Month',
|
498 |
+
`billing_limit` int(11) NOT NULL,
|
499 |
+
`trial_amount` decimal(10,2) NOT NULL,
|
500 |
+
`trial_limit` int(11) NOT NULL,
|
501 |
+
`startdate` datetime NOT NULL,
|
502 |
+
`modified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
503 |
+
PRIMARY KEY (`user_id`),
|
504 |
+
KEY `membership_id` (`membership_id`),
|
505 |
+
KEY `modified` (`modified`),
|
506 |
+
KEY `code_id` (`code_id`)
|
507 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
|
|
|
|
|
|
|
|
|
|
|
|
508 |
";
|
509 |
+
$wpdb->query($sqlQuery);
|
510 |
|
511 |
//wp_pmpro_discount_codes
|
512 |
$sqlQuery = "
|
520 |
UNIQUE KEY `code` (`code`),
|
521 |
KEY `starts` (`starts`),
|
522 |
KEY `expires` (`expires`)
|
523 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
524 |
";
|
525 |
+
$wpdb->query($sqlQuery);
|
526 |
|
527 |
//wp_pmpro_discount_codes_levels
|
528 |
$sqlQuery = "
|
529 |
CREATE TABLE `" . $wpdb->pmpro_discount_codes_levels . "` (
|
530 |
`code_id` int(11) unsigned NOT NULL,
|
531 |
+
`level_id` int(11) unsigned NOT NULL,
|
532 |
`initial_payment` decimal(10,2) NOT NULL DEFAULT '0.00',
|
533 |
`billing_amount` decimal(10,2) NOT NULL DEFAULT '0.00',
|
534 |
`cycle_number` int(11) NOT NULL DEFAULT '0',
|
536 |
`billing_limit` int(11) NOT NULL COMMENT 'After how many cycles should billing stop?',
|
537 |
`trial_amount` decimal(10,2) NOT NULL DEFAULT '0.00',
|
538 |
`trial_limit` int(11) NOT NULL DEFAULT '0',
|
|
|
|
|
539 |
PRIMARY KEY (`code_id`,`level_id`),
|
540 |
KEY `initial_payment` (`initial_payment`)
|
541 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
542 |
";
|
543 |
+
$wpdb->query($sqlQuery);
|
544 |
|
545 |
//wp_pmpro_discount_codes_uses
|
546 |
$sqlQuery = "
|
553 |
PRIMARY KEY (`id`),
|
554 |
KEY `user_id` (`user_id`),
|
555 |
KEY `timestamp` (`timestamp`)
|
556 |
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
|
557 |
";
|
558 |
+
$wpdb->query($sqlQuery);
|
559 |
+
|
560 |
+
pmpro_setOption("db_version", "1.115");
|
561 |
+
return 1.115;
|
562 |
}
|
includes/xmlrpc.php
DELETED
@@ -1,80 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Define the XMLRPC Methods We Add
|
4 |
-
* Since v2.0
|
5 |
-
*/
|
6 |
-
add_filter('xmlrpc_methods', 'pmpro_xmlrpc_methods');
|
7 |
-
function pmpro_xmlrpc_methods($methods)
|
8 |
-
{
|
9 |
-
$methods['pmpro.getMembershipLevelForUser'] = 'pmpro_xmlrpc_getMembershipLevelForUser';
|
10 |
-
$methods['pmpro.hasMembershipAccess'] = 'pmpro_xmlrpc_hasMembershipAccess';
|
11 |
-
return $methods;
|
12 |
-
}
|
13 |
-
|
14 |
-
/**
|
15 |
-
* API method to get the membership level info for a user.
|
16 |
-
* Since v2.0
|
17 |
-
*/
|
18 |
-
function pmpro_xmlrpc_getMembershipLevelForUser($args)
|
19 |
-
{
|
20 |
-
// Parse the arguments, assuming they're in the correct order
|
21 |
-
$username = $args[0];
|
22 |
-
$password = $args[1];
|
23 |
-
$user_id = $args[2]; //optional user id passed in
|
24 |
-
|
25 |
-
global $wp_xmlrpc_server;
|
26 |
-
|
27 |
-
// Let's run a check to see if credentials are okay
|
28 |
-
if ( !$user = $wp_xmlrpc_server->login($username, $password) ) {
|
29 |
-
return $wp_xmlrpc_server->error;
|
30 |
-
}
|
31 |
-
|
32 |
-
// The user passed should be an admin or have the pmpro_xmlprc capability
|
33 |
-
if(!user_can($user->ID, "manage_options") && !user_can($user->ID, "pmpro_xmlrpc"))
|
34 |
-
return "ERROR: User does not have access to the PMPro XMLRPC methods.";
|
35 |
-
|
36 |
-
// Default to logged in user if no user_id is given.
|
37 |
-
if(empty($user_id))
|
38 |
-
{
|
39 |
-
$user_id = $user->ID;
|
40 |
-
}
|
41 |
-
|
42 |
-
$membership_level = pmpro_getMembershipLevelForUser($user_id);
|
43 |
-
|
44 |
-
return $membership_level;
|
45 |
-
}
|
46 |
-
|
47 |
-
/**
|
48 |
-
* API method to check if a user has access to a certain post.
|
49 |
-
* Since v2.0
|
50 |
-
*/
|
51 |
-
function pmpro_xmlrpc_hasMembershipAccess($args)
|
52 |
-
{
|
53 |
-
// Parse the arguments, assuming they're in the correct order
|
54 |
-
$username = $args[0];
|
55 |
-
$password = $args[1];
|
56 |
-
$post_id = $args[2]; //post id to check
|
57 |
-
$user_id = $args[3]; //optional user id passed in
|
58 |
-
$return_membership_levels = $args[4]; //option to also include an array of membership levels with access to the post
|
59 |
-
|
60 |
-
global $wp_xmlrpc_server;
|
61 |
-
|
62 |
-
// Let's run a check to see if credentials are okay
|
63 |
-
if ( !$user = $wp_xmlrpc_server->login($username, $password) ) {
|
64 |
-
return $wp_xmlrpc_server->error;
|
65 |
-
}
|
66 |
-
|
67 |
-
// The user passed should be an admin or have the pmpro_xmlprc capability
|
68 |
-
if(!user_can($user->ID, "manage_options") && !user_can($user->ID, "pmpro_xmlrpc"))
|
69 |
-
return "ERROR: User does not have access to the PMPro XMLRPC methods.";
|
70 |
-
|
71 |
-
// Default to logged in user if no user_id is given.
|
72 |
-
if(empty($user_id))
|
73 |
-
{
|
74 |
-
$user_id = $user->ID;
|
75 |
-
}
|
76 |
-
|
77 |
-
$has_access = pmpro_has_membership_access($post_id, $user_id, $return_membership_levels);
|
78 |
-
|
79 |
-
return $has_access;
|
80 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/admin_change.html
DELETED
@@ -1,7 +0,0 @@
|
|
1 |
-
<p>En Administrator hos !!sitename!! har ændret dit medlemsskab niveau.</p>
|
2 |
-
|
3 |
-
<p>!!membership_change!!.</p>
|
4 |
-
|
5 |
-
<p>Hvis du ikke har bedt om, at få dit medlemsskab ændret, og gerne ville vide mere omkring det, kontakt os venligst på denne mail !!siteemail!!</p>
|
6 |
-
|
7 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/admin_change_admin.html
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
<p>En Administrator hos !!sitename!! har ændret medlemsskab niveau.</p>
|
2 |
-
|
3 |
-
<p>!!membership_change!!.</p>
|
4 |
-
|
5 |
-
<p>Log ind på din Wordpress admin her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/billing.html
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
<p>Din betaings informationer hos !!sitename!! er bleven ændret.</p>
|
2 |
-
|
3 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
4 |
-
<p>
|
5 |
-
Betalings Informationer:<br />
|
6 |
-
!!billing_address!!
|
7 |
-
</p>
|
8 |
-
|
9 |
-
<p>
|
10 |
-
!!cardtype!!: !!accountnumber!!<br />
|
11 |
-
Udløber: !!expirationmonth!!/!!expirationyear!!
|
12 |
-
</p>
|
13 |
-
|
14 |
-
<p>Hvis du ikke har bedt om, at ændre betalings informationer, så kontakt os via !!siteemail!!</p>
|
15 |
-
|
16 |
-
<p>Log ind til din medlems konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/billing_admin.html
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
<p>Betalings informationer for !!display_name!! hos !!sitename!! er bleven ændret.</p>
|
2 |
-
|
3 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
4 |
-
<p>
|
5 |
-
Betalings informationer:<br />
|
6 |
-
!!billing_name!!<br />
|
7 |
-
!!billing_street!!<br />
|
8 |
-
!!billing_city!!, !!billing_state!! !!billing_zip!! !!billing_country!!
|
9 |
-
!!billing_phone!!
|
10 |
-
</p>
|
11 |
-
|
12 |
-
<p>
|
13 |
-
!!cardtype!!: !!accountnumber!!<br />
|
14 |
-
Udløber: !!expirationmonth!!/!!expirationyear!!
|
15 |
-
</p>
|
16 |
-
|
17 |
-
<p>Log ind på din Wordpress kontrolpanel her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/billing_failure.html
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<p>Den nuværende abonnements betaling for dit !!sitename!! medlemsskab har fejlet. <strong>Klik på følgende link for at logge ind og opdatere dine betalings informationer for at undgå at din konto blive deaktiveret. !!login_link!!</strong></p>
|
2 |
-
|
3 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
4 |
-
<p>De seneste konto informationer vi på arkiv er:</p>
|
5 |
-
|
6 |
-
<p>!!billing_address!!</p>
|
7 |
-
|
8 |
-
<p>
|
9 |
-
!!cardtype!!: !!accountnumber!!<br />
|
10 |
-
Udløber: !!expirationmonth!!/!!expirationyear!!
|
11 |
-
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/billing_failure_admin.html
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<p>Betaling Fejlet</p>
|
2 |
-
|
3 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
4 |
-
<p>De seneste konto informationer vi på arkiv er:</p>
|
5 |
-
|
6 |
-
<p>!!billing_address!!</p>
|
7 |
-
|
8 |
-
<p>
|
9 |
-
!!cardtype!!: !!accountnumber!!<br />
|
10 |
-
Udløber: !!expirationmonth!!/!!expirationyear!!
|
11 |
-
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/cancel.html
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
<p>Dit medlemsskab hos !!sitename!! er bleven annulleret.</p>
|
2 |
-
|
3 |
-
<p>Hvis du ikke har anmodet om at denne annullering, og ville vide mere omkring det. Kontakt os via !!siteemail!!</p>
|
|
|
|
|
|
languages/email/da_DK/cancel_admin.html
DELETED
@@ -1,8 +0,0 @@
|
|
1 |
-
<p>Medlemsskabet for !!user_login!! hos !!sitename!! er bleven annulleret.</p>
|
2 |
-
|
3 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
4 |
-
<p>Medlemsskab Niveau: !!membership_level_name!!</p>
|
5 |
-
<p>Start Dato: !!startdate!!</p>
|
6 |
-
<p>Annullering Dato: !!enddate!!</p>
|
7 |
-
|
8 |
-
<p>Log ind på din Wordpress admin her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/checkout_check.html
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
<p>Tak for din bestilling til !!sitename!!. Dit medlemsskab er nu aktiveret.</p>
|
2 |
-
|
3 |
-
!!instructions!!
|
4 |
-
|
5 |
-
<p>Nedenfor er detaljerne omkring dit nye medlemsskab og en faktura.</p>
|
6 |
-
|
7 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
8 |
-
<p>Medlemsskabs Niveau: !!membership_level_name!!</p>
|
9 |
-
<p>Medlemsskabs Gebyr: !!membership_cost!!</p>
|
10 |
-
!!membership_expiration!! !!discount_code!!
|
11 |
-
|
12 |
-
<p>
|
13 |
-
Faktura #!!invoice_id!! on !!invoice_date!!<br />
|
14 |
-
Regning Total: !!invoice_total!!
|
15 |
-
</p>
|
16 |
-
|
17 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/checkout_check_admin.html
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
<p>Der er kommet et nyt medlem hos !!sitename!!.</p>
|
2 |
-
|
3 |
-
<p><strong>De har valgt at betale med check.</strong></p>
|
4 |
-
|
5 |
-
<p>Nedenfor er detaljer omkring det nye medlems konto og en forklaring på medlemmets faktura.</p>
|
6 |
-
|
7 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
8 |
-
<p>Meldlemsskab Niveau: !!membership_level_name!!</p>
|
9 |
-
<p>Medlemsskab Gebyr: !!membership_cost!!</p>
|
10 |
-
!!membership_expiration!! !!discount_code!!
|
11 |
-
|
12 |
-
<p>
|
13 |
-
Faktura #!!invoice_id!! on !!invoice_date!!<br />
|
14 |
-
Regning Total: $!!invoice_total!!
|
15 |
-
</p>
|
16 |
-
|
17 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/checkout_express.html
DELETED
@@ -1,14 +0,0 @@
|
|
1 |
-
<p>Tak for din bestilling til !!sitename!!. Dit medlemsskab er nu aktiveret.</p>
|
2 |
-
<p>Nedenfor er detaljerne omkring dit nye medlemsskab og en faktura.</p>
|
3 |
-
|
4 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
5 |
-
<p>Medlemsskabs Niveau: !!membership_level_name!!</p>
|
6 |
-
<p>Medlemsskabs Gebyr: !!membership_cost!!</p>
|
7 |
-
!!membership_expiration!! !!discount_code!!
|
8 |
-
|
9 |
-
<p>
|
10 |
-
Faktura #!!invoice_id!! on !!invoice_date!!<br />
|
11 |
-
Regning Total: !!invoice_total!!
|
12 |
-
</p>
|
13 |
-
|
14 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/checkout_express_admin.html
DELETED
@@ -1,14 +0,0 @@
|
|
1 |
-
<p>Der er kommet et nyt medlem hos !!sitename!!.</p>
|
2 |
-
<p>Nedenfor er detaljer omkring det nye medlems konto og en forklaring på medlemmets faktura.</p>
|
3 |
-
|
4 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
5 |
-
<p>Medlemsskab Nivea: !!membership_level_name!!</p>
|
6 |
-
<p>Medlemsskab Gebyr: !!membership_cost!!</p>
|
7 |
-
!!membership_expiration!! !!discount_code!!
|
8 |
-
|
9 |
-
<p>
|
10 |
-
Faktura #!!invoice_id!! on !!invoice_date!!<br />
|
11 |
-
Regning Total: !!invoice_total!!
|
12 |
-
</p>
|
13 |
-
|
14 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/checkout_free.html
DELETED
@@ -1,8 +0,0 @@
|
|
1 |
-
<p>Tak for din bestilling til !!sitename!!. Dit medlemsskab er nu aktiveret.</p>
|
2 |
-
<p>Nedenfor er detaljerne omkring dit nye medlemsskab.</p>
|
3 |
-
|
4 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
5 |
-
<p>Medlemsskabs Niveau: !!membership_level_name!!</p>
|
6 |
-
!!membership_expiration!! !!discount_code!!
|
7 |
-
|
8 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/checkout_free_admin.html
DELETED
@@ -1,8 +0,0 @@
|
|
1 |
-
<p>Der er kommet et nyt medlem hos !!sitename!!.</p>
|
2 |
-
<p>Nedenfor er detaljerne omkring det nye medlemsskabs konto.</p>
|
3 |
-
|
4 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
5 |
-
<p>Medlemsskabs Niveau: !!membership_level_name!!</p>
|
6 |
-
!!membership_expiration!! !!discount_code!!
|
7 |
-
|
8 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/checkout_freetrial.html
DELETED
@@ -1,19 +0,0 @@
|
|
1 |
-
<p>Tak for din bestilling til !!sitename!!. Dit medlemsskab er nu aktiveret</p>
|
2 |
-
<p>Nedenfor er detaljerne omkring dit nye medlemsskab.</p>
|
3 |
-
|
4 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
5 |
-
<p>Medlemsskabs Niveau: !!membership_level_name!!</p>
|
6 |
-
<p>Medlemsskabs Gebyr: !!membership_cost!!</p>
|
7 |
-
!!membership_expiration!! !!discount_code!!
|
8 |
-
|
9 |
-
<p>
|
10 |
-
Betalings informationer i Arkivet:<br />
|
11 |
-
!!billing_address!!
|
12 |
-
</p>
|
13 |
-
|
14 |
-
<p>
|
15 |
-
!!cardtype!!: !!accountnumber!!<br />
|
16 |
-
Udløber: !!expirationmonth!!/!!expirationyear!!
|
17 |
-
</p>
|
18 |
-
|
19 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/checkout_freetrial_admin.html
DELETED
@@ -1,19 +0,0 @@
|
|
1 |
-
<p>Der er kommet et nyt medlem hos !!sitename!!.</p>
|
2 |
-
<p>Nedenfor er detaljer omkring det nye medlems konto og en forklaring på medlemmets faktura.</p>
|
3 |
-
|
4 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
5 |
-
<p>Medlemsskabs Niveau: !!membership_level_name!!</p>
|
6 |
-
<p>Medlemsskabs Gebyr: !!membership_cost!!</p>
|
7 |
-
!!membership_expiration!! !!discount_code!!
|
8 |
-
|
9 |
-
<p>
|
10 |
-
Betalings informationer i Arkivet:<br />
|
11 |
-
!!billing_address!!
|
12 |
-
</p>
|
13 |
-
|
14 |
-
<p>
|
15 |
-
!!cardtype!!: !!accountnumber!!<br />
|
16 |
-
Udløber: !!expirationmonth!!/!!expirationyear!!
|
17 |
-
</p>
|
18 |
-
|
19 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/checkout_paid.html
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
<p>Tak for din bestilling til !!sitename!!. Dit medlemsskab er nu aktiveret.</p>
|
2 |
-
<p>Nedenfor er detaljerne omkring dit nye medlemsskab og en faktura.</p>
|
3 |
-
|
4 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
5 |
-
<p>Medlemsskabs Niveau: !!membership_level_name!!</p>
|
6 |
-
<p>Medlemsskabs Gebyr: !!membership_cost!!</p>
|
7 |
-
!!membership_expiration!! !!discount_code!!
|
8 |
-
|
9 |
-
<p>
|
10 |
-
Faktura #!!invoice_id!! on !!invoice_date!!<br />
|
11 |
-
Regning Total: !!invoice_total!!
|
12 |
-
</p>
|
13 |
-
<p>
|
14 |
-
Betalings Informationer:<br />
|
15 |
-
!!billing_address!!
|
16 |
-
</p>
|
17 |
-
|
18 |
-
<p>
|
19 |
-
!!cardtype!!: !!accountnumber!!<br />
|
20 |
-
Udløber: !!expirationmonth!!/!!expirationyear!!
|
21 |
-
</p>
|
22 |
-
|
23 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/checkout_paid_admin.html
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
<p>Der er kommet et nyt medlem hos !!sitename!!.</p>
|
2 |
-
<p>Nedenfor er detaljer omkring det nye medlems konto og en forklaring på medlemmets faktura.</p>
|
3 |
-
|
4 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
5 |
-
<p>Medlemsskabs Niveau: !!membership_level_name!!</p>
|
6 |
-
<p>Medlemsskabs Gebyr: !!membership_cost!!</p>
|
7 |
-
!!membership_expiration!! !!discount_code!!
|
8 |
-
|
9 |
-
<p>
|
10 |
-
Faktura #!!invoice_id!! on !!invoice_date!!<br />
|
11 |
-
Regning Total: !!invoice_total!!
|
12 |
-
</p>
|
13 |
-
<p>
|
14 |
-
Betalings Informationer:<br />
|
15 |
-
!!billing_address!!
|
16 |
-
</p>
|
17 |
-
|
18 |
-
<p>
|
19 |
-
!!cardtype!!: !!accountnumber!!<br />
|
20 |
-
Udløber: !!expirationmonth!!/!!expirationyear!!
|
21 |
-
</p>
|
22 |
-
|
23 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/checkout_trial.html
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
<p>Tak for din bestilling til !!sitename!!. Dit medlemsskab er nu aktiveret.</p>
|
2 |
-
<p>Nedenfor er detaljerne omkring dit nye medlemsskab og en faktura.</p>
|
3 |
-
|
4 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
5 |
-
<p>Medlemsskabs Niveau: !!membership_level_name!!</p>
|
6 |
-
<p>Medlemsskabs Gebyr: !!membership_cost!!</p>
|
7 |
-
!!membership_expiration!! !!discount_code!!
|
8 |
-
|
9 |
-
<p>
|
10 |
-
Faktura #!!invoice_id!! on !!invoice_date!!<br />
|
11 |
-
Regning Total: !!invoice_total!!
|
12 |
-
</p>
|
13 |
-
<p>
|
14 |
-
Betalings Informationer:<br />
|
15 |
-
!!billing_address!!
|
16 |
-
</p>
|
17 |
-
|
18 |
-
<p>
|
19 |
-
!!cardtype!!: !!accountnumber!!<br />
|
20 |
-
Udløber: !!expirationmonth!!/!!expirationyear!!
|
21 |
-
</p>
|
22 |
-
|
23 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/checkout_trial_admin.html
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
<p>Der er kommet et nyt medlem hos !!sitename!!.</p>
|
2 |
-
<p>Nedenfor er detaljer omkring det nye medlems konto og en forklaring på medlemmets faktura.</p>
|
3 |
-
|
4 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
5 |
-
<p>Medlemsskabs Niveau: !!membership_level_name!!</p>
|
6 |
-
<p>Medlemsskabs Gebyr: !!membership_cost!!</p>
|
7 |
-
!!membership_expiration!! !!discount_code!!
|
8 |
-
|
9 |
-
<p>
|
10 |
-
Faktura #!!invoice_id!! on !!invoice_date!!<br />
|
11 |
-
Regning Total: !!invoice_total!!
|
12 |
-
</p>
|
13 |
-
<p>
|
14 |
-
Betalings Informationer:<br />
|
15 |
-
!!billing_address!!
|
16 |
-
</p>
|
17 |
-
|
18 |
-
<p>
|
19 |
-
!!cardtype!!: !!accountnumber!!<br />
|
20 |
-
Udløber: !!expirationmonth!!/!!expirationyear!!
|
21 |
-
</p>
|
22 |
-
|
23 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/credit_card_expiring.html
DELETED
@@ -1,13 +0,0 @@
|
|
1 |
-
<p>Den nuværende abonnements betaling for dit !!sitename!! medlemsskab har fejlet. <strong>Klik på følgende link for at logge ind og opdatere dine betalings informationer for at undgå at din konto blive deaktiveret. !!login_link!!</strong></p>
|
2 |
-
|
3 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
4 |
-
<p>De seneste konto informationer vi på arkiv er:</p>
|
5 |
-
|
6 |
-
<p>!!billing_name!!</br />
|
7 |
-
!!billing_address!!
|
8 |
-
</p>
|
9 |
-
|
10 |
-
<p>
|
11 |
-
!!cardtype!!: !!accountnumber!!<br />
|
12 |
-
Udløber: !!expirationmonth!!/!!expirationyear!!
|
13 |
-
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/default.html
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
!!body!!
|
|
languages/email/da_DK/footer.html
DELETED
@@ -1,4 +0,0 @@
|
|
1 |
-
<p>
|
2 |
-
Respectfully,<br />
|
3 |
-
!!sitename!!
|
4 |
-
</p>
|
|
|
|
|
|
|
|
languages/email/da_DK/header.html
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<p>Kære !!name!!,</p>
|
|
languages/email/da_DK/invoice.html
DELETED
@@ -1,19 +0,0 @@
|
|
1 |
-
<p>Thank you for your membership to !!sitename!!. Below is a receipt for your most recent membership invoice.</p>
|
2 |
-
|
3 |
-
<p>Account: !!display_name!! (!!user_email!!)</p>
|
4 |
-
<p>
|
5 |
-
Invoice #!!invoice_id!! on !!invoice_date!!<br />
|
6 |
-
Total Billed: !!invoice_total!!
|
7 |
-
</p>
|
8 |
-
<p>
|
9 |
-
Billing Information:<br />
|
10 |
-
!!billing_address!!
|
11 |
-
</p>
|
12 |
-
|
13 |
-
<p>
|
14 |
-
!!cardtype!!: !!accountnumber!!<br />
|
15 |
-
Expires: !!expirationmonth!!/!!expirationyear!!
|
16 |
-
</p>
|
17 |
-
|
18 |
-
<p>Log in to your membership account here: !!login_link!!</p>
|
19 |
-
<p>To view an online version of this invoice, click here: !!invoice_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/membership_expired.html
DELETED
@@ -1,7 +0,0 @@
|
|
1 |
-
<p>Dit medlemsskab hos !!sitename!! er ophørt.</p>
|
2 |
-
|
3 |
-
<p>Vi takker for din support.</p>
|
4 |
-
|
5 |
-
<p>Se vores nuværende medlems tilbud: !!levels_link!!</p>
|
6 |
-
|
7 |
-
<p>Log in, for at håndtere din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/membership_expiring.html
DELETED
@@ -1,6 +0,0 @@
|
|
1 |
-
<p>Vi er glade for dit medlemsskab hos !!sitename!!. Dette er bare en påmindelse om, at dit medlemsskab ender den !!enddate!!.</p>
|
2 |
-
|
3 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
4 |
-
<p>Medlemsskabs Niveau: !!membership_level_name!!</p>
|
5 |
-
|
6 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
languages/email/da_DK/trial_ending.html
DELETED
@@ -1,8 +0,0 @@
|
|
1 |
-
<p>Vi er glade for dit medlemsskab hos !!sitename!!. Din prøveperiode ender den !!trial_end!!.</p>
|
2 |
-
|
3 |
-
<p>Konto: !!display_name!! (!!user_email!!)</p>
|
4 |
-
<p>Medlemsskabs Niveau: !!membership_level_name!!</p>
|
5 |
-
|
6 |
-
<p>Dit gebyr ville ændre sig fra !!trial_amount!! til !!billing_amount!! hver !!cycle_number!! !!cycle_period!!(s).</p>
|
7 |
-
|
8 |
-
<p>Log ind på din konto her: !!login_link!!</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/gettext.sh
DELETED
@@ -1,23 +0,0 @@
|
|
1 |
-
#---------------------------
|
2 |
-
# This script generates a new pmpro.pot file for use in translations.
|
3 |
-
# To generate a new pmpro.pot, cd to the main /paid-memberships-pro/ directory,
|
4 |
-
# then execute `languages/gettext.sh` from the command line.
|
5 |
-
# then fix the header info (helps to have the old pmpro.pot open before running script above)
|
6 |
-
# then execute `cp languages/pmpro.pot languages/pmpro.po` to copy the .pot to .po
|
7 |
-
# then execute `msgfmt languages/pmpro.po --output-file languages/pmpro.mo` to generate the .mo
|
8 |
-
#---------------------------
|
9 |
-
echo "Updating pmpro.pot... "
|
10 |
-
xgettext -j -o languages/pmpro.pot \
|
11 |
-
--default-domain=pmpro \
|
12 |
-
--language=PHP \
|
13 |
-
--keyword=_ \
|
14 |
-
--keyword=__ \
|
15 |
-
--keyword=_e \
|
16 |
-
--keyword=_ex \
|
17 |
-
--keyword=_n \
|
18 |
-
--keyword=_x \
|
19 |
-
--sort-by-file \
|
20 |
-
--package-version=1.0 \
|
21 |
-
--msgid-bugs-address="jason@strangerstudios.com" \
|
22 |
-
$(find . -name "*.php")
|
23 |
-
echo "Done!"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/pmpro-cs_CZ.mo
DELETED
Binary file
|
languages/pmpro-cs_CZ.po
DELETED
@@ -1,2889 +0,0 @@
|
|
1 |
-
#
|
2 |
-
# Hi there! Details on how to help out translating Paid Memberships Pro can be found at:
|
3 |
-
# http://www.paidmembershipspro.com/documentation/languages/
|
4 |
-
#
|
5 |
-
msgid ""
|
6 |
-
msgstr ""
|
7 |
-
"Project-Id-Version: pmpro\n"
|
8 |
-
"POT-Creation-Date: 2013-12-10 12:14-0500\n"
|
9 |
-
"PO-Revision-Date: 2013-12-20 13:36+0100\n"
|
10 |
-
"Last-Translator: Milan Hrnčál <hrncal.junior@seznam.cz>\n"
|
11 |
-
"Language-Team: Stranger Studios <jason@strangerstudios.com>\n"
|
12 |
-
"MIME-Version: 1.0\n"
|
13 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
-
"Content-Transfer-Encoding: 8bit\n"
|
15 |
-
"Language: cs_CZ\n"
|
16 |
-
"X-Generator: Poedit 1.6.3\n"
|
17 |
-
|
18 |
-
#: adminpages/addons.php:5 adminpages/advancedsettings.php:5
|
19 |
-
#: adminpages/discountcodes.php:5 adminpages/emailsettings.php:5
|
20 |
-
#: adminpages/membershiplevels.php:5 adminpages/memberslist-csv.php:5
|
21 |
-
#: adminpages/memberslist.php:5 adminpages/orders-csv.php:5
|
22 |
-
#: adminpages/orders.php:5 adminpages/pagesettings.php:5
|
23 |
-
#: adminpages/paymentsettings.php:5
|
24 |
-
msgid "You do not have permissions to perform this action."
|
25 |
-
msgstr "K provedení této akce nemáte dostatečná opravnění."
|
26 |
-
|
27 |
-
#: adminpages/addons.php:79
|
28 |
-
msgid "Disabled"
|
29 |
-
msgstr "Nepovoleno"
|
30 |
-
|
31 |
-
#: adminpages/addons.php:79
|
32 |
-
msgid "Enabled"
|
33 |
-
msgstr "Povoleno"
|
34 |
-
|
35 |
-
#: adminpages/admin_header.php:25
|
36 |
-
msgid "Add a membership level to get started."
|
37 |
-
msgstr "Ke spuštění zadejte úroveň ćlenství"
|
38 |
-
|
39 |
-
#: adminpages/admin_header.php:27
|
40 |
-
msgid "Setup the membership pages"
|
41 |
-
msgstr "Nastavit stránky členů"
|
42 |
-
|
43 |
-
#: adminpages/admin_header.php:29
|
44 |
-
msgid "Setup your SSL certificate and payment gateway"
|
45 |
-
msgstr "Nastavení vašeho SSL certifikátu a platební brány"
|
46 |
-
|
47 |
-
#: adminpages/admin_header.php:38
|
48 |
-
msgid ""
|
49 |
-
"The billing details for some of your membership levels is not supported by "
|
50 |
-
"Stripe."
|
51 |
-
msgstr ""
|
52 |
-
"Pro některé uživatelské úrovně není možné zobrazit fakturační podrobnosti "
|
53 |
-
"(nepodporováno STRIPEM)."
|
54 |
-
|
55 |
-
#: adminpages/admin_header.php:46
|
56 |
-
msgid ""
|
57 |
-
"The billing details for this level are not supported by Stripe. Please "
|
58 |
-
"review the notes in the Billing Details section below."
|
59 |
-
msgstr ""
|
60 |
-
"Pro tuto úroveň nejsou podporovány fakturační údaje (nepodporuje STRIPE). "
|
61 |
-
"Níže, v části fakturační údaje, si přečtěte pokyny."
|
62 |
-
|
63 |
-
#: adminpages/admin_header.php:50 adminpages/admin_header.php:70
|
64 |
-
#: adminpages/admin_header.php:90 adminpages/admin_header.php:111
|
65 |
-
msgid "The levels with issues are highlighted below."
|
66 |
-
msgstr "Úrovně s otázkami jsou označeny níže."
|
67 |
-
|
68 |
-
#: adminpages/admin_header.php:52 adminpages/admin_header.php:72
|
69 |
-
#: adminpages/admin_header.php:92 adminpages/admin_header.php:113
|
70 |
-
msgid "Please edit your levels"
|
71 |
-
msgstr "Prosím upravte vaše úrovně"
|
72 |
-
|
73 |
-
#: adminpages/admin_header.php:58
|
74 |
-
msgid ""
|
75 |
-
"The billing details for some of your membership levels is not supported by "
|
76 |
-
"Payflow."
|
77 |
-
msgstr ""
|
78 |
-
"Fakturační údaje pro některé z vašich členských úrovní nejsou podporovány "
|
79 |
-
"Payflow."
|
80 |
-
|
81 |
-
#: adminpages/admin_header.php:66
|
82 |
-
msgid ""
|
83 |
-
"The billing details for this level are not supported by Payflow. Please "
|
84 |
-
"review the notes in the Billing Details section below."
|
85 |
-
msgstr ""
|
86 |
-
"Payflow nepodporuje fakturační detaily pro tuto úroveň. Níže, v části "
|
87 |
-
"fakturační údaje, si přečtěte pokyny."
|
88 |
-
|
89 |
-
#: adminpages/admin_header.php:78
|
90 |
-
msgid ""
|
91 |
-
"The billing details for some of your membership levels is not supported by "
|
92 |
-
"Braintree."
|
93 |
-
msgstr ""
|
94 |
-
"Braintree nepodporuje fakturační detaily pro některé vaše členské úrovně."
|
95 |
-
|
96 |
-
#: adminpages/admin_header.php:86
|
97 |
-
msgid ""
|
98 |
-
"The billing details for this level are not supported by Braintree. Please "
|
99 |
-
"review the notes in the Billing Details section below."
|
100 |
-
msgstr ""
|
101 |
-
"Braintree nepodporuje fakturační detaily pro tuto členskou úroveň. Prosím "
|
102 |
-
"prostudujte poznámky v sekci fakturační údaje. Tyto poznámky naleznete níže."
|
103 |
-
|
104 |
-
#: adminpages/admin_header.php:98
|
105 |
-
msgid ""
|
106 |
-
"The billing details for some of your membership levels is not supported by "
|
107 |
-
"TwoCheckout."
|
108 |
-
msgstr ""
|
109 |
-
"TwoCheckout nepodporuje fakturační detaily pro některé vaše členské úrovně."
|
110 |
-
|
111 |
-
#: adminpages/admin_header.php:107
|
112 |
-
msgid ""
|
113 |
-
"The billing details for this level are not supported by 2Checkout. Please "
|
114 |
-
"review the notes in the Billing Details section below."
|
115 |
-
msgstr ""
|
116 |
-
"TwoCheckout nepodporuje fakturační detaily pro tuto úroveň. Prosím "
|
117 |
-
"prostudujte poznámky v sekci fakturační údaje. Tyto poznámky naleznete níže."
|
118 |
-
|
119 |
-
#: adminpages/admin_header.php:127 adminpages/admin_header.php:106
|
120 |
-
msgid "Plugin Support"
|
121 |
-
msgstr "Podpora pluginu"
|
122 |
-
|
123 |
-
#: adminpages/admin_header.php:127 adminpages/admin_header.php:106
|
124 |
-
msgid "User Forum"
|
125 |
-
msgstr "Uživatelské fórum"
|
126 |
-
|
127 |
-
#: adminpages/admin_header.php:149 adminpages/membershiplevels.php:496
|
128 |
-
#: includes/adminpages.php:44 adminpages/admin_header.php:128
|
129 |
-
#: adminpages/membershiplevels.php:490
|
130 |
-
msgid "Membership Levels"
|
131 |
-
msgstr "Úroveň členství"
|
132 |
-
|
133 |
-
#: adminpages/admin_header.php:150 adminpages/pagesettings.php:92
|
134 |
-
#: adminpages/admin_header.php:129
|
135 |
-
msgid "Pages"
|
136 |
-
msgstr "Stránky"
|
137 |
-
|
138 |
-
#: adminpages/admin_header.php:151 adminpages/admin_header.php:130
|
139 |
-
msgid "Payment Gateway & SSL"
|
140 |
-
msgstr "Platební brány & SSL"
|
141 |
-
|
142 |
-
#: adminpages/admin_header.php:152 adminpages/memberslist.php:115
|
143 |
-
#: pages/account.php:52 adminpages/admin_header.php:131
|
144 |
-
msgid "Email"
|
145 |
-
msgstr "Email"
|
146 |
-
|
147 |
-
#: adminpages/admin_header.php:153 adminpages/admin_header.php:132
|
148 |
-
msgid "Advanced"
|
149 |
-
msgstr "Pokročilé"
|
150 |
-
|
151 |
-
#: adminpages/admin_header.php:154 includes/adminpages.php:14
|
152 |
-
#: includes/adminpages.php:69 adminpages/admin_header.php:133
|
153 |
-
msgid "Add Ons"
|
154 |
-
msgstr "Doplňky"
|
155 |
-
|
156 |
-
#: adminpages/advancedsettings.php:35
|
157 |
-
msgid "Your advanced settings have been updated."
|
158 |
-
msgstr "Vaše pokročilá nastavení budou aktualizována."
|
159 |
-
|
160 |
-
#: adminpages/advancedsettings.php:79 includes/adminpages.php:13
|
161 |
-
#: includes/adminpages.php:64
|
162 |
-
msgid "Advanced Settings"
|
163 |
-
msgstr "Pokročilá nastavení"
|
164 |
-
|
165 |
-
#: adminpages/advancedsettings.php:85
|
166 |
-
msgid "Message for Logged-in Non-members"
|
167 |
-
msgstr "Zpráva pro přihlášené v nečlenech"
|
168 |
-
|
169 |
-
#: adminpages/advancedsettings.php:89
|
170 |
-
msgid ""
|
171 |
-
"This message replaces the post content for non-members. Available variables"
|
172 |
-
msgstr "Tato zpráva nahrazuje obsah příspěvku pro nečleny. Dostupné proměné"
|
173 |
-
|
174 |
-
#: adminpages/advancedsettings.php:94
|
175 |
-
msgid "Message for Logged-out Users"
|
176 |
-
msgstr "Zpráva pro odhlášené uživatele"
|
177 |
-
|
178 |
-
#: adminpages/advancedsettings.php:98
|
179 |
-
msgid "This message replaces the post content for logged-out visitors."
|
180 |
-
msgstr "Tato zpráva nahrazuje obsah příspěvku pro odhlášené uživatele."
|
181 |
-
|
182 |
-
#: adminpages/advancedsettings.php:103
|
183 |
-
msgid "Message for RSS Feed"
|
184 |
-
msgstr "Zpráva pro RSS Feed"
|
185 |
-
|
186 |
-
#: adminpages/advancedsettings.php:107
|
187 |
-
msgid "This message replaces the post content in RSS feeds."
|
188 |
-
msgstr "Tato zpráva nahrazuje obsah příspěvku v RSSfeedu."
|
189 |
-
|
190 |
-
#: adminpages/advancedsettings.php:113
|
191 |
-
msgid "Show Excerpts to Non-Members?"
|
192 |
-
msgstr "Zobrazit ukázky pro nečleny?"
|
193 |
-
|
194 |
-
#: adminpages/advancedsettings.php:117
|
195 |
-
msgid "No - Hide excerpts."
|
196 |
-
msgstr "Ne - Skrýt ukázky"
|
197 |
-
|
198 |
-
#: adminpages/advancedsettings.php:118
|
199 |
-
msgid "Yes - Show excerpts."
|
200 |
-
msgstr "Ano - Ukázat ukázky"
|
201 |
-
|
202 |
-
#: adminpages/advancedsettings.php:128 adminpages/advancedsettings.php:187
|
203 |
-
#: adminpages/advancedsettings.php:199 adminpages/membershiplevels.php:569
|
204 |
-
#: adminpages/paymentsettings.php:429 adminpages/paymentsettings.php:454
|
205 |
-
#: includes/profile.php:123 adminpages/membershiplevels.php:563
|
206 |
-
#: adminpages/paymentsettings.php:414 includes/profile.php:121
|
207 |
-
msgid "No"
|
208 |
-
msgstr "Ne"
|
209 |
-
|
210 |
-
#: adminpages/advancedsettings.php:129
|
211 |
-
msgid "Hide Ads From All Members"
|
212 |
-
msgstr "Skrýt reklamy pro všechny členy"
|
213 |
-
|
214 |
-
#: adminpages/advancedsettings.php:130
|
215 |
-
msgid "Hide Ads From Certain Members"
|
216 |
-
msgstr "Skrýt reklamy pro některé členy"
|
217 |
-
|
218 |
-
#: adminpages/advancedsettings.php:137
|
219 |
-
msgid "Ads from the following plugins will be automatically turned off"
|
220 |
-
msgstr "Reklama z následujících pluginů se automaticky vypne"
|
221 |
-
|
222 |
-
#: adminpages/advancedsettings.php:138
|
223 |
-
msgid "To hide ads in your template code, use code like the following"
|
224 |
-
msgstr ""
|
225 |
-
"Chcete-li skrýt reklamy ve vašem kódu šablony, použijté kód jako je tento"
|
226 |
-
|
227 |
-
#: adminpages/advancedsettings.php:149
|
228 |
-
msgid "Choose Levels to Hide Ads From"
|
229 |
-
msgstr "Zvolte úrovně pro skrité reklam"
|
230 |
-
|
231 |
-
#: adminpages/advancedsettings.php:183
|
232 |
-
msgid "Redirect all traffic from registration page to /susbcription/?"
|
233 |
-
msgstr "Přesměrovat veškerý provoz z registrační stránky na / susbcription /?"
|
234 |
-
|
235 |
-
#: adminpages/advancedsettings.php:183
|
236 |
-
msgid "multisite only"
|
237 |
-
msgstr "Pouze pro multisite"
|
238 |
-
|
239 |
-
#: adminpages/advancedsettings.php:188 adminpages/membershiplevels.php:569
|
240 |
-
#: adminpages/paymentsettings.php:430 adminpages/paymentsettings.php:455
|
241 |
-
#: includes/profile.php:124 adminpages/membershiplevels.php:563
|
242 |
-
#: adminpages/paymentsettings.php:415 adminpages/paymentsettings.php:424
|
243 |
-
#: includes/profile.php:122
|
244 |
-
msgid "Yes"
|
245 |
-
msgstr "Ano"
|
246 |
-
|
247 |
-
#: adminpages/advancedsettings.php:195
|
248 |
-
msgid "Use reCAPTCHA?"
|
249 |
-
msgstr "Použít reCAPTCHU?"
|
250 |
-
|
251 |
-
#: adminpages/advancedsettings.php:200
|
252 |
-
msgid "Yes - Free memberships only."
|
253 |
-
msgstr "Ano - Pouze členové zdarma "
|
254 |
-
|
255 |
-
#: adminpages/advancedsettings.php:201
|
256 |
-
msgid "Yes - All memberships."
|
257 |
-
msgstr "Ano - všichni členové"
|
258 |
-
|
259 |
-
#: adminpages/advancedsettings.php:203
|
260 |
-
msgid "A free reCAPTCHA key is required."
|
261 |
-
msgstr "Je vyžadován volný reCAPTCHA klíč."
|
262 |
-
|
263 |
-
#: adminpages/advancedsettings.php:203
|
264 |
-
msgid "Click here to signup for reCAPTCHA"
|
265 |
-
msgstr "Klikněte zde pro registraci re CAPTCHA"
|
266 |
-
|
267 |
-
#: adminpages/advancedsettings.php:209
|
268 |
-
msgid "reCAPTCHA Public Key"
|
269 |
-
msgstr "reCAPTCHA veřejný klíč"
|
270 |
-
|
271 |
-
#: adminpages/advancedsettings.php:212
|
272 |
-
msgid "reCAPTCHA Private Key"
|
273 |
-
msgstr "reCAPTCHA osobní klíč"
|
274 |
-
|
275 |
-
#: adminpages/advancedsettings.php:218
|
276 |
-
msgid "Require Terms of Service on signups?"
|
277 |
-
msgstr "Vyžadovat souhlas s podmínkami služeb o registraci?"
|
278 |
-
|
279 |
-
#: adminpages/advancedsettings.php:225
|
280 |
-
msgid ""
|
281 |
-
"If yes, create a WordPress page containing your TOS agreement and assign it "
|
282 |
-
"using the dropdown above."
|
283 |
-
msgstr ""
|
284 |
-
"Pokud ano, WordPress vytvoří stránky obsahující váš souhlas s podmínkami "
|
285 |
-
"služeb a přiřadít jej pomocí rozevíracího seznamu výše."
|
286 |
-
|
287 |
-
#: adminpages/advancedsettings.php:284 adminpages/pagesettings.php:223
|
288 |
-
#: adminpages/paymentsettings.php:526 adminpages/pagesettings.php:209
|
289 |
-
#: adminpages/paymentsettings.php:485
|
290 |
-
msgid "Save Settings"
|
291 |
-
msgstr "Uložit nastavení"
|
292 |
-
|
293 |
-
#: adminpages/discountcodes.php:48
|
294 |
-
msgid "Discount code updated successfully."
|
295 |
-
msgstr "Slevový kód byl úspěšně upraven."
|
296 |
-
|
297 |
-
#: adminpages/discountcodes.php:55
|
298 |
-
msgid "Error updating discount code. That code may already be in use."
|
299 |
-
msgstr ""
|
300 |
-
"Chyba při aktualizaci slevového kupónu. Tento kupón může být již v provozu."
|
301 |
-
|
302 |
-
#: adminpages/discountcodes.php:64
|
303 |
-
msgid "Discount code added successfully."
|
304 |
-
msgstr "Slevový kód byl úspěšně přidán"
|
305 |
-
|
306 |
-
#: adminpages/discountcodes.php:71
|
307 |
-
msgid "Error adding discount code. That code may already be in use."
|
308 |
-
msgstr ""
|
309 |
-
"Chyba při přidání slevového kupónu. Tento kupón může být již v provozu."
|
310 |
-
|
311 |
-
#: adminpages/discountcodes.php:196
|
312 |
-
#, php-format
|
313 |
-
msgid "Error saving values for the %s level."
|
314 |
-
msgstr "Chyba při hodnotě pro %s úroveň."
|
315 |
-
|
316 |
-
#: adminpages/discountcodes.php:204
|
317 |
-
msgid "There were errors updating the level values: "
|
318 |
-
msgstr "Došlo k chybám při aktualizací hodnot úrovní:"
|
319 |
-
|
320 |
-
#: adminpages/discountcodes.php:234
|
321 |
-
#, php-format
|
322 |
-
msgid "Code %s deleted successfully."
|
323 |
-
msgstr "Kúpón %s byl úspěšně smazán."
|
324 |
-
|
325 |
-
#: adminpages/discountcodes.php:239
|
326 |
-
msgid ""
|
327 |
-
"Error deleting discount code. The code was only partially deleted. Please "
|
328 |
-
"try again."
|
329 |
-
msgstr ""
|
330 |
-
"Chyba při mazání slevového kupónu. Kód byl jen částečně odstraněn. Zkuste to "
|
331 |
-
"prosím znovu."
|
332 |
-
|
333 |
-
#: adminpages/discountcodes.php:245
|
334 |
-
msgid "Error deleting code. Please try again."
|
335 |
-
msgstr "Chyba při mazání kupónu. Zkuste to znovu."
|
336 |
-
|
337 |
-
#: adminpages/discountcodes.php:251
|
338 |
-
msgid "Code not found."
|
339 |
-
msgstr "Kupón nenalezen."
|
340 |
-
|
341 |
-
#: adminpages/discountcodes.php:264
|
342 |
-
msgid "Edit Discount Code"
|
343 |
-
msgstr "Upravit slevový kupón"
|
344 |
-
|
345 |
-
#: adminpages/discountcodes.php:266 adminpages/discountcodes.php:526
|
346 |
-
msgid "Add New Discount Code"
|
347 |
-
msgstr "Vložit nový slevový kupón"
|
348 |
-
|
349 |
-
#: adminpages/discountcodes.php:306 adminpages/discountcodes.php:547
|
350 |
-
#: adminpages/membershiplevels.php:284 adminpages/membershiplevels.php:511
|
351 |
-
#: adminpages/memberslist.php:111 adminpages/orders.php:597
|
352 |
-
#: adminpages/reports/login.php:140 adminpages/membershiplevels.php:505
|
353 |
-
msgid "ID"
|
354 |
-
msgstr "ID"
|
355 |
-
|
356 |
-
#: adminpages/discountcodes.php:307 adminpages/orders.php:211
|
357 |
-
msgid "This will be generated when you save."
|
358 |
-
msgstr "Toto bude generováno, když práci uložíte."
|
359 |
-
|
360 |
-
#: adminpages/discountcodes.php:311 adminpages/discountcodes.php:548
|
361 |
-
#: adminpages/orders.php:215 adminpages/orders.php:598
|
362 |
-
msgid "Code"
|
363 |
-
msgstr "Kód"
|
364 |
-
|
365 |
-
#: adminpages/discountcodes.php:349
|
366 |
-
msgid "Start Date"
|
367 |
-
msgstr "Počáteční datum"
|
368 |
-
|
369 |
-
#: adminpages/discountcodes.php:367 pages/billing.php:249
|
370 |
-
#: pages/checkout.php:532 pages/checkout.php:525
|
371 |
-
msgid "Expiration Date"
|
372 |
-
msgstr "Datum vypršení"
|
373 |
-
|
374 |
-
#: adminpages/discountcodes.php:385 adminpages/discountcodes.php:551
|
375 |
-
msgid "Uses"
|
376 |
-
msgstr "Uživatelé"
|
377 |
-
|
378 |
-
#: adminpages/discountcodes.php:388
|
379 |
-
msgid "Leave blank for unlimited uses."
|
380 |
-
msgstr "Pro neomezené použití zanechte prázdné."
|
381 |
-
|
382 |
-
#: adminpages/discountcodes.php:427 adminpages/membershiplevels.php:337
|
383 |
-
#: adminpages/membershiplevels.php:513 pages/levels.php:14
|
384 |
-
#: adminpages/membershiplevels.php:507
|
385 |
-
msgid "Initial Payment"
|
386 |
-
msgstr "Počáteční platba"
|
387 |
-
|
388 |
-
#: adminpages/discountcodes.php:428 adminpages/membershiplevels.php:338
|
389 |
-
msgid "The initial amount collected at registration."
|
390 |
-
msgstr "Počáteční částka získaná při registraci."
|
391 |
-
|
392 |
-
#: adminpages/discountcodes.php:432 adminpages/membershiplevels.php:342
|
393 |
-
msgid "Recurring Subscription"
|
394 |
-
msgstr "Opakované předplatné"
|
395 |
-
|
396 |
-
#: adminpages/discountcodes.php:433 adminpages/membershiplevels.php:343
|
397 |
-
msgid "Check if this level has a recurring subscription payment."
|
398 |
-
msgstr "Zkontrolujte, zda má tato úroveň opakující se platby předplatného."
|
399 |
-
|
400 |
-
#: adminpages/discountcodes.php:437
|
401 |
-
msgid "Billing Ammount"
|
402 |
-
msgstr "Fakturační množství"
|
403 |
-
|
404 |
-
#: adminpages/discountcodes.php:451 adminpages/membershiplevels.php:362
|
405 |
-
msgid "The amount to be billed one cycle after the initial payment."
|
406 |
-
msgstr "Částka, která má být účtována za jeden cyklus, po první platbě."
|
407 |
-
|
408 |
-
#: adminpages/discountcodes.php:456 adminpages/membershiplevels.php:380
|
409 |
-
msgid "Billing Cycle Limit"
|
410 |
-
msgstr "Limit fakturačního cyklu"
|
411 |
-
|
412 |
-
#: adminpages/discountcodes.php:459 adminpages/membershiplevels.php:384
|
413 |
-
msgid ""
|
414 |
-
"The <strong>total</strong> number of recurring billing cycles for this "
|
415 |
-
"level, including the trial period (if applicable) but not including the "
|
416 |
-
"initial payment. Set to zero if membership is indefinite."
|
417 |
-
msgstr ""
|
418 |
-
"<strong> Všech </ strong> počet opakujících se fakturačních cyklů na této "
|
419 |
-
"úrovni, včetně zkušební doby (pokud existuje), ale ne včetně počáteční "
|
420 |
-
"platby. Nastavit na nulu, pokud je členství na dobu neurčitou."
|
421 |
-
|
422 |
-
#: adminpages/discountcodes.php:464 adminpages/membershiplevels.php:393
|
423 |
-
msgid "Custom Trial"
|
424 |
-
msgstr "Vlastní zkušební verze"
|
425 |
-
|
426 |
-
#: adminpages/discountcodes.php:465 adminpages/membershiplevels.php:395
|
427 |
-
#: adminpages/membershiplevels.php:394
|
428 |
-
msgid "Check to add a custom trial period."
|
429 |
-
msgstr "Zkontrolujte, zda jste přidal vlastní zkušební dobu."
|
430 |
-
|
431 |
-
#: adminpages/discountcodes.php:469 adminpages/membershiplevels.php:404
|
432 |
-
#: adminpages/membershiplevels.php:398
|
433 |
-
msgid "Trial Billing Amount"
|
434 |
-
msgstr "Množství zkušebních fakturací"
|
435 |
-
|
436 |
-
#: adminpages/discountcodes.php:472 adminpages/membershiplevels.php:407
|
437 |
-
#: adminpages/membershiplevels.php:401
|
438 |
-
msgid "for the first"
|
439 |
-
msgstr "zaprvé"
|
440 |
-
|
441 |
-
#: adminpages/discountcodes.php:474 adminpages/membershiplevels.php:409
|
442 |
-
#: adminpages/membershiplevels.php:403
|
443 |
-
msgid "subscription payments"
|
444 |
-
msgstr "Předplatné"
|
445 |
-
|
446 |
-
#: adminpages/discountcodes.php:479 adminpages/membershiplevels.php:437
|
447 |
-
#: adminpages/membershiplevels.php:431
|
448 |
-
msgid "Membership Expiration"
|
449 |
-
msgstr "Vypršení členství"
|
450 |
-
|
451 |
-
#: adminpages/discountcodes.php:480
|
452 |
-
msgid "Check this to set an expiration date for new sign ups."
|
453 |
-
msgstr "Zkontorlujte datum vypršení platnosti nového zápisu."
|
454 |
-
|
455 |
-
#: adminpages/discountcodes.php:484 adminpages/membershiplevels.php:442
|
456 |
-
#: adminpages/membershiplevels.php:436
|
457 |
-
msgid "Expires In"
|
458 |
-
msgstr "Vyprší v"
|
459 |
-
|
460 |
-
#: adminpages/discountcodes.php:497
|
461 |
-
msgid ""
|
462 |
-
"How long before the expiration expires. Note that any future payments will "
|
463 |
-
"be cancelled when the membership expires."
|
464 |
-
msgstr ""
|
465 |
-
"Jak dlouho před vypršením platnosti. Všimněte si, že všechny budoucí platby "
|
466 |
-
"budou zrušeny po vypršení členství."
|
467 |
-
|
468 |
-
#: adminpages/discountcodes.php:525
|
469 |
-
msgid "Memberships Discount Codes"
|
470 |
-
msgstr "Slevové kupóny pro členy"
|
471 |
-
|
472 |
-
#: adminpages/discountcodes.php:535
|
473 |
-
msgid "Search Discount Codes"
|
474 |
-
msgstr "Najít slevové kupóny"
|
475 |
-
|
476 |
-
#: adminpages/discountcodes.php:538 adminpages/reports/login.php:81
|
477 |
-
msgid "Search"
|
478 |
-
msgstr "Hledat"
|
479 |
-
|
480 |
-
#: adminpages/discountcodes.php:549
|
481 |
-
msgid "Starts"
|
482 |
-
msgstr "Statistiky"
|
483 |
-
|
484 |
-
#: adminpages/discountcodes.php:550 adminpages/memberslist.php:121
|
485 |
-
#: adminpages/reports/login.php:145 includes/profile.php:120
|
486 |
-
#: includes/profile.php:118
|
487 |
-
msgid "Expires"
|
488 |
-
msgstr "Vyprší"
|
489 |
-
|
490 |
-
#: adminpages/discountcodes.php:552
|
491 |
-
msgid "Levels"
|
492 |
-
msgstr "Úrovně"
|
493 |
-
|
494 |
-
#: adminpages/discountcodes.php:570
|
495 |
-
msgid "Create your first discount code now"
|
496 |
-
msgstr "Nyní vytvořte Váš první slevový kupón"
|
497 |
-
|
498 |
-
#: adminpages/discountcodes.php:570
|
499 |
-
msgid ""
|
500 |
-
"Discount codes allow you to offer your memberships at discounted prices to "
|
501 |
-
"select customers."
|
502 |
-
msgstr ""
|
503 |
-
"Slevové kupóny vám umožňují nabízet své členství, pro vybrané zákazníky, za "
|
504 |
-
"zvýhodněné ceny"
|
505 |
-
|
506 |
-
#: adminpages/discountcodes.php:614 adminpages/membershiplevels.php:570
|
507 |
-
#: adminpages/orders.php:658 adminpages/membershiplevels.php:564
|
508 |
-
msgid "edit"
|
509 |
-
msgstr "upravit"
|
510 |
-
|
511 |
-
#: adminpages/discountcodes.php:617
|
512 |
-
#, php-format
|
513 |
-
msgid ""
|
514 |
-
"Are you sure you want to delete the %s discount code? The subscriptions for "
|
515 |
-
"existing users will not change, but new users will not be able to use this "
|
516 |
-
"code anymore."
|
517 |
-
msgstr ""
|
518 |
-
"Jste si jisti, že chcete smazat % s slevový kupón? Odběry pro stávající "
|
519 |
-
"uživatele se nezmění, ale noví uživatelé nebudou moci použít tyto kupóny."
|
520 |
-
|
521 |
-
#: adminpages/discountcodes.php:617 adminpages/membershiplevels.php:572
|
522 |
-
#: adminpages/orders.php:664 adminpages/membershiplevels.php:566
|
523 |
-
msgid "delete"
|
524 |
-
msgstr "smazat"
|
525 |
-
|
526 |
-
#: adminpages/emailsettings.php:60 includes/adminpages.php:12
|
527 |
-
#: includes/adminpages.php:59
|
528 |
-
msgid "Email Settings"
|
529 |
-
msgstr "Nastavení e-mailu"
|
530 |
-
|
531 |
-
#: adminpages/emailsettings.php:61
|
532 |
-
msgid ""
|
533 |
-
"By default, system generated emails are sent from "
|
534 |
-
"<em><strong>wordpress@yourdomain.com</strong></em>. You can update this from "
|
535 |
-
"address using the fields below."
|
536 |
-
msgstr ""
|
537 |
-
"Ve výchozím nastavení jsou generovány e-maily, které jsou odesílány z "
|
538 |
-
"<em><strong>wordpress@yourdomain.com</strong></em>. Můžete aktualizovat z "
|
539 |
-
"adresy, pomocí níže uvedených polí."
|
540 |
-
|
541 |
-
#: adminpages/emailsettings.php:63
|
542 |
-
msgid ""
|
543 |
-
"To modify the appearance of system generated emails, add the files "
|
544 |
-
"<em>email_header.html</em> and <em>email_footer.html</em> to your theme's "
|
545 |
-
"directory. This will modify both the WordPress default messages as well as "
|
546 |
-
"messages generated by Paid Memberships Pro. <a title=\"Paid Memberships Pro "
|
547 |
-
"- Member Communications\" target=\"_blank\" href=\"http://www."
|
548 |
-
"paidmembershipspro.com/documentation/member-communications/\">Click here to "
|
549 |
-
"learn more about Paid Memberships Pro emails</a>."
|
550 |
-
msgstr ""
|
551 |
-
"Chcete-li změnit vzhled systémem generovaných e-mailů, přidejte soubory "
|
552 |
-
"<em>email_header.html < em> a <em>email_footer.html </em> do adresáře vašeho "
|
553 |
-
"motivu. To bude upravovat jak výchozí zprávy WordPress, tak i zprávy "
|
554 |
-
"generované pomocí Paid Memberships Pro. <a title=\"Paid Memberships Pro - "
|
555 |
-
"Member Communications\" target=\"_blank\" href=\"http://www."
|
556 |
-
"paidmembershipspro.com/documentation/member-communications/\"> Klikněte zde "
|
557 |
-
"a dozvíte se více o Paid Memberships Pro emails</a>."
|
558 |
-
|
559 |
-
#: adminpages/emailsettings.php:69
|
560 |
-
msgid "From Email"
|
561 |
-
msgstr "Z e-mailu"
|
562 |
-
|
563 |
-
#: adminpages/emailsettings.php:77
|
564 |
-
msgid "From Name"
|
565 |
-
msgstr "Z názvu"
|
566 |
-
|
567 |
-
#: adminpages/emailsettings.php:86
|
568 |
-
msgid "Send the site admin emails"
|
569 |
-
msgstr "Odešlete emaly správci webu"
|
570 |
-
|
571 |
-
#: adminpages/emailsettings.php:92
|
572 |
-
msgid "Checkout"
|
573 |
-
msgstr "Pokladna"
|
574 |
-
|
575 |
-
#: adminpages/emailsettings.php:96
|
576 |
-
msgid "when a member checks out."
|
577 |
-
msgstr "když členové zaplatí"
|
578 |
-
|
579 |
-
#: adminpages/emailsettings.php:101
|
580 |
-
msgid "Admin Changes"
|
581 |
-
msgstr "Změny správce"
|
582 |
-
|
583 |
-
#: adminpages/emailsettings.php:105
|
584 |
-
msgid "when an admin changes a user's membership level through the dashboard."
|
585 |
-
msgstr "když správce změní úrověň členství uživatelů přes nástěnku."
|
586 |
-
|
587 |
-
#: adminpages/emailsettings.php:110
|
588 |
-
msgid "Cancellation"
|
589 |
-
msgstr "Zrušení."
|
590 |
-
|
591 |
-
#: adminpages/emailsettings.php:114
|
592 |
-
msgid "when a user cancels his or her account."
|
593 |
-
msgstr "když uživatel zruší svůj účet."
|
594 |
-
|
595 |
-
#: adminpages/emailsettings.php:119
|
596 |
-
msgid "Bill Updates"
|
597 |
-
msgstr "Aktualizace účtenky"
|
598 |
-
|
599 |
-
#: adminpages/emailsettings.php:123
|
600 |
-
msgid "when a user updates his or her billing information."
|
601 |
-
msgstr "pokud uživatel aktualizuje svoje fakturační údaje."
|
602 |
-
|
603 |
-
#: adminpages/emailsettings.php:129
|
604 |
-
msgid "Send members emails"
|
605 |
-
msgstr "Poslat uživatelské e-maily"
|
606 |
-
|
607 |
-
#: adminpages/emailsettings.php:135
|
608 |
-
msgid "New Users"
|
609 |
-
msgstr "Noví uživatelé"
|
610 |
-
|
611 |
-
#: adminpages/emailsettings.php:139
|
612 |
-
msgid ""
|
613 |
-
"Default WP notification email. (Recommended: Leave unchecked. Members will "
|
614 |
-
"still get an email confirmation from PMPro after checkout.)"
|
615 |
-
msgstr ""
|
616 |
-
"Výchozí WP e-mailové upozornění. (Doporučeno: Nechte zaškrtnuté. Členové "
|
617 |
-
"budou ještě dostat e-mailem potvrzení od PMPro po vyzkoušení.)."
|
618 |
-
|
619 |
-
#: adminpages/membershiplevels.php:118
|
620 |
-
msgid "Membership level updated successfully."
|
621 |
-
msgstr "Úroveň členství byla úspěšne uprave."
|
622 |
-
|
623 |
-
#: adminpages/membershiplevels.php:124
|
624 |
-
msgid "Error updating membership level."
|
625 |
-
msgstr "Chyba při aktualizaci členské úrovně."
|
626 |
-
|
627 |
-
#: adminpages/membershiplevels.php:141
|
628 |
-
msgid "Membership level added successfully."
|
629 |
-
msgstr "Členská úroveň úspěšně přidána."
|
630 |
-
|
631 |
-
#: adminpages/membershiplevels.php:146
|
632 |
-
msgid "Error adding membership level."
|
633 |
-
msgstr "Chyba při přidávání členské úrovně."
|
634 |
-
|
635 |
-
#: adminpages/membershiplevels.php:179
|
636 |
-
#, php-format
|
637 |
-
msgid ""
|
638 |
-
"There was an error canceling the subscription for user with ID=%d. You will "
|
639 |
-
"want to check your payment gateway to see if their subscription is still "
|
640 |
-
"active."
|
641 |
-
msgstr ""
|
642 |
-
"Došlo k chybě při zrušení odběru pro uživatele s ID =%d. Budete chtít "
|
643 |
-
"zkontrolovat platební bránu, zda je jejich předplatné je stále aktivní."
|
644 |
-
|
645 |
-
#: adminpages/membershiplevels.php:182
|
646 |
-
msgid "Last Invoice"
|
647 |
-
msgstr "Poslední faktury"
|
648 |
-
|
649 |
-
#: adminpages/membershiplevels.php:196
|
650 |
-
msgid "Membership level deleted successfully."
|
651 |
-
msgstr "Úroveň členství byla úspěšně smazána."
|
652 |
-
|
653 |
-
#: adminpages/membershiplevels.php:201 adminpages/membershiplevels.php:207
|
654 |
-
msgid "Error deleting membership level."
|
655 |
-
msgstr "Chyb a při mazání členské úrovně."
|
656 |
-
|
657 |
-
#: adminpages/membershiplevels.php:222
|
658 |
-
msgid "Edit Membership Level"
|
659 |
-
msgstr "Změna uživatelské úrovně"
|
660 |
-
|
661 |
-
#: adminpages/membershiplevels.php:224
|
662 |
-
msgid "Add New Membership Level"
|
663 |
-
msgstr "Vložit novou úroveň členství"
|
664 |
-
|
665 |
-
#: adminpages/membershiplevels.php:291 adminpages/membershiplevels.php:512
|
666 |
-
#: adminpages/reports/login.php:142 adminpages/membershiplevels.php:506
|
667 |
-
msgid "Name"
|
668 |
-
msgstr "Jméno"
|
669 |
-
|
670 |
-
#: adminpages/membershiplevels.php:296
|
671 |
-
msgid "Description"
|
672 |
-
msgstr "Popis"
|
673 |
-
|
674 |
-
#: adminpages/membershiplevels.php:314
|
675 |
-
msgid "Confirmation Message"
|
676 |
-
msgstr "Potvrzovací zpráva"
|
677 |
-
|
678 |
-
#: adminpages/membershiplevels.php:333
|
679 |
-
msgid "Billing Details"
|
680 |
-
msgstr "Fakturační detaily"
|
681 |
-
|
682 |
-
#: adminpages/membershiplevels.php:347
|
683 |
-
msgid "Billing Amount"
|
684 |
-
msgstr "Množství faktur"
|
685 |
-
|
686 |
-
#: adminpages/membershiplevels.php:349
|
687 |
-
msgid "per"
|
688 |
-
msgstr "na"
|
689 |
-
|
690 |
-
#: adminpages/membershiplevels.php:353
|
691 |
-
msgid "Day(s)"
|
692 |
-
msgstr "Den(y)"
|
693 |
-
|
694 |
-
#: adminpages/membershiplevels.php:353
|
695 |
-
msgid "Month(s)"
|
696 |
-
msgstr "Měsíc(e)"
|
697 |
-
|
698 |
-
#: adminpages/membershiplevels.php:353
|
699 |
-
msgid "Week(s)"
|
700 |
-
msgstr "Týden(y)"
|
701 |
-
|
702 |
-
#: adminpages/membershiplevels.php:353
|
703 |
-
msgid "Year(s)"
|
704 |
-
msgstr "Rok(y)"
|
705 |
-
|
706 |
-
#: adminpages/membershiplevels.php:364
|
707 |
-
msgid ""
|
708 |
-
"Stripe integration currently only supports billing periods of \"Month\" or "
|
709 |
-
"\"Year\"."
|
710 |
-
msgstr ""
|
711 |
-
"Integrace Stripe v současné době podporuje pouze fakturace období \"Month\" "
|
712 |
-
"or \"Year\"."
|
713 |
-
|
714 |
-
#: adminpages/membershiplevels.php:366
|
715 |
-
msgid ""
|
716 |
-
"Braintree integration currently only supports billing periods of \"Month\" "
|
717 |
-
"or \"Year\"."
|
718 |
-
msgstr ""
|
719 |
-
"Integrace Braintree v současné době podporuje pouze fakturace období \"Month"
|
720 |
-
"\" or \"Year\"."
|
721 |
-
|
722 |
-
#: adminpages/membershiplevels.php:368
|
723 |
-
msgid ""
|
724 |
-
"Payflow integration currently only supports billing frequencies of 1 and "
|
725 |
-
"billing periods of \"Week\", \"Month\" or \"Year\"."
|
726 |
-
msgstr ""
|
727 |
-
"Integrace Payflow v současné době podporuje pouze fakturace frekvence 1 a "
|
728 |
-
"fakturace období \"Week\", \"Month\" nebo \"Year\"."
|
729 |
-
|
730 |
-
#: adminpages/membershiplevels.php:372
|
731 |
-
msgid ""
|
732 |
-
"After saving this level, make note of the ID and create a \"Plan\" in your "
|
733 |
-
"Braintree dashboard with the same settings and the \"Plan ID\" set to "
|
734 |
-
"<em>pmpro_#</em>, where # is the level ID."
|
735 |
-
msgstr ""
|
736 |
-
"Po uložení této úrovně si poznamenejte ID a vytvořte \"Plan\" ve vašem "
|
737 |
-
"Braintree nástěnce se stejným nastavením a \"Plan ID\" nastavte na "
|
738 |
-
"<em>pmpro_#</em>, kde # je úroveň ID."
|
739 |
-
|
740 |
-
#: adminpages/membershiplevels.php:372 adminpages/membershiplevels.php:374
|
741 |
-
#: adminpages/paymentsettings.php:174 adminpages/paymentsettings.php:170
|
742 |
-
msgid "Note"
|
743 |
-
msgstr "Poznámka"
|
744 |
-
|
745 |
-
#: adminpages/membershiplevels.php:374
|
746 |
-
msgid ""
|
747 |
-
"You will need to create a \"Plan\" in your Braintree dashboard with the same "
|
748 |
-
"settings and the \"Plan ID\" set to"
|
749 |
-
msgstr ""
|
750 |
-
"Budete muset vytvořit \"Plan\" v Braintree nástěnce se stejným nastavením a "
|
751 |
-
"\"Plan ID\" nastavit na"
|
752 |
-
|
753 |
-
#: adminpages/membershiplevels.php:386
|
754 |
-
msgid ""
|
755 |
-
"Stripe integration currently does not support billing limits. You can still "
|
756 |
-
"set an expiration date below."
|
757 |
-
msgstr ""
|
758 |
-
"Integrace Stripe v současné době nepodporuje fakturační limity. Níže můžete "
|
759 |
-
"nastavit datum vypršení platnosti."
|
760 |
-
|
761 |
-
#: adminpages/membershiplevels.php:398
|
762 |
-
msgid ""
|
763 |
-
"2Checkout integration does not support custom trials. You can do one period "
|
764 |
-
"trials by setting an initial payment different from the billing amount."
|
765 |
-
msgstr ""
|
766 |
-
"2Checkout integrace nepodporuje zkušební dobu. Můžete to udělat v jedné "
|
767 |
-
"zkušební době nastavením počáteční platbu, která se liší od fakturační "
|
768 |
-
"částky."
|
769 |
-
|
770 |
-
#: adminpages/membershiplevels.php:412 adminpages/membershiplevels.php:406
|
771 |
-
msgid ""
|
772 |
-
"Stripe integration currently does not support trial amounts greater than $0."
|
773 |
-
msgstr ""
|
774 |
-
"Integrace Stripe v současné době nepodporuje zkušební částky vyšší než 0 Kč."
|
775 |
-
|
776 |
-
#: adminpages/membershiplevels.php:416 adminpages/membershiplevels.php:410
|
777 |
-
msgid ""
|
778 |
-
"Braintree integration currently does not support trial amounts greater than "
|
779 |
-
"$0."
|
780 |
-
msgstr ""
|
781 |
-
"Integrace Braintree v současné době nepodporuje zkušební částky vyšší než 0 "
|
782 |
-
"Kč."
|
783 |
-
|
784 |
-
#: adminpages/membershiplevels.php:420 adminpages/membershiplevels.php:414
|
785 |
-
msgid ""
|
786 |
-
"Payflow integration currently does not support trial amounts greater than $0."
|
787 |
-
msgstr ""
|
788 |
-
"Integrace Payflow v současné době nepodporuje zkušební částky vyšší než 0 Kč."
|
789 |
-
|
790 |
-
#: adminpages/membershiplevels.php:428 adminpages/membershiplevels.php:422
|
791 |
-
msgid "Other Settings"
|
792 |
-
msgstr "Další nastavení"
|
793 |
-
|
794 |
-
#: adminpages/membershiplevels.php:432 adminpages/membershiplevels.php:426
|
795 |
-
msgid "Disable New Signups"
|
796 |
-
msgstr "Zastavení novích registrací"
|
797 |
-
|
798 |
-
#: adminpages/membershiplevels.php:433 adminpages/membershiplevels.php:427
|
799 |
-
msgid ""
|
800 |
-
"Check to hide this level from the membership levels page and disable "
|
801 |
-
"registration."
|
802 |
-
msgstr ""
|
803 |
-
"Podívejte se na skrytí této úrovně na stránce úrovní a zakažte registraci."
|
804 |
-
|
805 |
-
#: adminpages/membershiplevels.php:438 adminpages/membershiplevels.php:432
|
806 |
-
msgid "Check this to set when membership access expires."
|
807 |
-
msgstr "Zkontrolujte, zda je toto nastaveno, když vyprší přístup k členství."
|
808 |
-
|
809 |
-
#: adminpages/membershiplevels.php:455 adminpages/membershiplevels.php:449
|
810 |
-
msgid ""
|
811 |
-
"Set the duration of membership access. Note that the any future payments "
|
812 |
-
"(recurring subscription, if any) will be cancelled when the membership "
|
813 |
-
"expires."
|
814 |
-
msgstr ""
|
815 |
-
"Nastavte dobu trvání přístupu členství. Všimněte si, že všechny budoucí "
|
816 |
-
"platby (opakující předplatné, pokud existuje) budou zrušeny, pokud vyprší "
|
817 |
-
"členství."
|
818 |
-
|
819 |
-
#: adminpages/membershiplevels.php:463 adminpages/membershiplevels.php:457
|
820 |
-
msgid "Content Settings"
|
821 |
-
msgstr "Nastavení obsahu"
|
822 |
-
|
823 |
-
#: adminpages/membershiplevels.php:467 adminpages/membershiplevels.php:461
|
824 |
-
msgid "Categories"
|
825 |
-
msgstr "Kategorie"
|
826 |
-
|
827 |
-
#: adminpages/membershiplevels.php:496 adminpages/membershiplevels.php:490
|
828 |
-
msgid "Add New Level"
|
829 |
-
msgstr "Vložit novou úroveň"
|
830 |
-
|
831 |
-
#: adminpages/membershiplevels.php:499 adminpages/membershiplevels.php:502
|
832 |
-
#: adminpages/membershiplevels.php:493 adminpages/membershiplevels.php:496
|
833 |
-
msgid "Search Levels"
|
834 |
-
msgstr "Najít úrovně"
|
835 |
-
|
836 |
-
#: adminpages/membershiplevels.php:514 adminpages/membershiplevels.php:508
|
837 |
-
msgid "Billing Cycle"
|
838 |
-
msgstr "Cyklus fakturací"
|
839 |
-
|
840 |
-
#: adminpages/membershiplevels.php:515 adminpages/membershiplevels.php:509
|
841 |
-
msgid "Trial Cycle"
|
842 |
-
msgstr "Zkušební cyklus"
|
843 |
-
|
844 |
-
#: adminpages/membershiplevels.php:516 pages/confirmation.php:83
|
845 |
-
#: pages/invoice.php:70 adminpages/membershiplevels.php:510
|
846 |
-
#: pages/confirmation.php:81 pages/invoice.php:68
|
847 |
-
msgid "Expiration"
|
848 |
-
msgstr "Vypršení"
|
849 |
-
|
850 |
-
#: adminpages/membershiplevels.php:517 adminpages/membershiplevels.php:511
|
851 |
-
msgid "Allow Signups"
|
852 |
-
msgstr "Povolit registraci"
|
853 |
-
|
854 |
-
#: adminpages/membershiplevels.php:540 adminpages/membershiplevels.php:534
|
855 |
-
msgid "FREE"
|
856 |
-
msgstr "ZDARMA"
|
857 |
-
|
858 |
-
#: adminpages/membershiplevels.php:549 adminpages/membershiplevels.php:543
|
859 |
-
msgid "every"
|
860 |
-
msgstr "každý"
|
861 |
-
|
862 |
-
#: adminpages/membershiplevels.php:551 adminpages/membershiplevels.php:559
|
863 |
-
#: adminpages/reports/memberships.php:304
|
864 |
-
#: adminpages/reports/memberships.php:315 adminpages/reports/sales.php:204
|
865 |
-
#: adminpages/reports/sales.php:215 adminpages/membershiplevels.php:545
|
866 |
-
#: adminpages/membershiplevels.php:553 adminpages/reports/sales.php:195
|
867 |
-
#: adminpages/reports/sales.php:206
|
868 |
-
msgid "for"
|
869 |
-
msgstr "pro"
|
870 |
-
|
871 |
-
#: adminpages/membershiplevels.php:566 adminpages/membershiplevels.php:560
|
872 |
-
msgid "After"
|
873 |
-
msgstr "Po"
|
874 |
-
|
875 |
-
#: adminpages/membershiplevels.php:571 adminpages/orders.php:661
|
876 |
-
#: adminpages/membershiplevels.php:565
|
877 |
-
msgid "copy"
|
878 |
-
msgstr "kopie"
|
879 |
-
|
880 |
-
#: adminpages/membershiplevels.php:572 adminpages/membershiplevels.php:566
|
881 |
-
#, php-format
|
882 |
-
msgid ""
|
883 |
-
"Are you sure you want to delete membership level %s? All subscriptions will "
|
884 |
-
"be cancelled."
|
885 |
-
msgstr ""
|
886 |
-
"Jste si jisti, že chcete smazat úrovně členství % s? Všechny odběry budou "
|
887 |
-
"zrušeny."
|
888 |
-
|
889 |
-
#: adminpages/memberslist.php:25 includes/adminpages.php:15
|
890 |
-
#: includes/adminpages.php:74
|
891 |
-
msgid "Members List"
|
892 |
-
msgstr "Seznam členů"
|
893 |
-
|
894 |
-
#: adminpages/memberslist.php:26 adminpages/orders.php:522
|
895 |
-
msgid "Export to CSV"
|
896 |
-
msgstr "Export do CSV"
|
897 |
-
|
898 |
-
#: adminpages/memberslist.php:30 adminpages/reports/login.php:65
|
899 |
-
#: adminpages/reports/memberships.php:292 adminpages/reports/sales.php:194
|
900 |
-
#: adminpages/reports/sales.php:185
|
901 |
-
msgid "Show"
|
902 |
-
msgstr "Ukaž"
|
903 |
-
|
904 |
-
#: adminpages/memberslist.php:32 adminpages/reports/login.php:67
|
905 |
-
#: adminpages/reports/memberships.php:317 adminpages/reports/sales.php:217
|
906 |
-
#: adminpages/reports/sales.php:208
|
907 |
-
msgid "All Levels"
|
908 |
-
msgstr "Všechny úrovně"
|
909 |
-
|
910 |
-
#: adminpages/memberslist.php:46 adminpages/memberslist.php:49
|
911 |
-
msgid "Search Members"
|
912 |
-
msgstr "Prohledat členy"
|
913 |
-
|
914 |
-
#: adminpages/memberslist.php:103
|
915 |
-
#, php-format
|
916 |
-
msgid "%d members found."
|
917 |
-
msgstr "%d členů nalezeno"
|
918 |
-
|
919 |
-
#: adminpages/memberslist.php:112 pages/account.php:51 pages/checkout.php:171
|
920 |
-
#: pages/checkout.php:168
|
921 |
-
msgid "Username"
|
922 |
-
msgstr "Uživatelské jméno"
|
923 |
-
|
924 |
-
#: adminpages/memberslist.php:113
|
925 |
-
msgid "First Name"
|
926 |
-
msgstr "Jméno"
|
927 |
-
|
928 |
-
#: adminpages/memberslist.php:114
|
929 |
-
msgid "Last Name"
|
930 |
-
msgstr "Příjmení"
|
931 |
-
|
932 |
-
#: adminpages/memberslist.php:117 pages/account.php:90 pages/billing.php:58
|
933 |
-
#: pages/checkout.php:321 pages/confirmation.php:61 pages/invoice.php:48
|
934 |
-
#: pages/checkout.php:314 pages/confirmation.php:59 pages/invoice.php:46
|
935 |
-
msgid "Billing Address"
|
936 |
-
msgstr "Fakturační adresa"
|
937 |
-
|
938 |
-
#: adminpages/memberslist.php:118 adminpages/pagesettings.php:51
|
939 |
-
#: adminpages/reports/login.php:143
|
940 |
-
#: classes/gateways/class.pmprogateway_authorizenet.php:187
|
941 |
-
msgid "Membership"
|
942 |
-
msgstr "Členství"
|
943 |
-
|
944 |
-
#: adminpages/memberslist.php:119
|
945 |
-
msgid "Fee"
|
946 |
-
msgstr "Odměna"
|
947 |
-
|
948 |
-
#: adminpages/memberslist.php:120 adminpages/reports/login.php:144
|
949 |
-
msgid "Joined"
|
950 |
-
msgstr "Připojil"
|
951 |
-
|
952 |
-
#: adminpages/memberslist.php:184
|
953 |
-
msgid "Never"
|
954 |
-
msgstr "Nikdy"
|
955 |
-
|
956 |
-
#: adminpages/memberslist.php:195 adminpages/reports/login.php:210
|
957 |
-
msgid "No members found."
|
958 |
-
msgstr "Žádní členové nebyly nalezeni"
|
959 |
-
|
960 |
-
#: adminpages/memberslist.php:195 adminpages/reports/login.php:210
|
961 |
-
msgid "Search all levels"
|
962 |
-
msgstr "Prohledat všechny úrovně"
|
963 |
-
|
964 |
-
#: adminpages/orders.php:26
|
965 |
-
msgid "Order deleted successfully."
|
966 |
-
msgstr "Objednávka byla úspěšně smazána."
|
967 |
-
|
968 |
-
#: adminpages/orders.php:31
|
969 |
-
msgid "Error deleting order."
|
970 |
-
msgstr "Chyba při mazání objednávky"
|
971 |
-
|
972 |
-
#: adminpages/orders.php:119
|
973 |
-
msgid "Order saved successfully."
|
974 |
-
msgstr "Objednávka byla úspěšne uložena."
|
975 |
-
|
976 |
-
#: adminpages/orders.php:124
|
977 |
-
msgid "Error updating order timestamp."
|
978 |
-
msgstr "Chyba při aktualizaci časového razítka"
|
979 |
-
|
980 |
-
#: adminpages/orders.php:130
|
981 |
-
msgid "Error saving order."
|
982 |
-
msgstr "Chyba při ukládání zboží"
|
983 |
-
|
984 |
-
#: adminpages/orders.php:195
|
985 |
-
msgid "Order"
|
986 |
-
msgstr "Objednávka"
|
987 |
-
|
988 |
-
#: adminpages/orders.php:197
|
989 |
-
msgid "New Order"
|
990 |
-
msgstr "Nová objednávka"
|
991 |
-
|
992 |
-
#: adminpages/orders.php:220
|
993 |
-
msgid "Randomly generated for you."
|
994 |
-
msgstr "Náhodně generované pro Vás."
|
995 |
-
|
996 |
-
#: adminpages/orders.php:225
|
997 |
-
msgid "User ID"
|
998 |
-
msgstr "Uživatelské ID"
|
999 |
-
|
1000 |
-
#: adminpages/orders.php:234
|
1001 |
-
msgid "Membership Level ID"
|
1002 |
-
msgstr "ID členské úrovně"
|
1003 |
-
|
1004 |
-
#: adminpages/orders.php:243
|
1005 |
-
msgid "Billing Name"
|
1006 |
-
msgstr "Fakturační adresa"
|
1007 |
-
|
1008 |
-
#: adminpages/orders.php:251
|
1009 |
-
msgid "Billing Street"
|
1010 |
-
msgstr "Fakturační ulice"
|
1011 |
-
|
1012 |
-
#: adminpages/orders.php:258
|
1013 |
-
msgid "Billing City"
|
1014 |
-
msgstr "Fakturační město"
|
1015 |
-
|
1016 |
-
#: adminpages/orders.php:265
|
1017 |
-
msgid "Billing State"
|
1018 |
-
msgstr "Fakturační stát"
|
1019 |
-
|
1020 |
-
#: adminpages/orders.php:272
|
1021 |
-
msgid "Billing Postal Code"
|
1022 |
-
msgstr "Fakturační PSČ"
|
1023 |
-
|
1024 |
-
#: adminpages/orders.php:279
|
1025 |
-
msgid "Billing Country"
|
1026 |
-
msgstr "Fakturační země"
|
1027 |
-
|
1028 |
-
#: adminpages/orders.php:287
|
1029 |
-
msgid "Billing Phone"
|
1030 |
-
msgstr "Fakturační telefon"
|
1031 |
-
|
1032 |
-
#: adminpages/orders.php:296
|
1033 |
-
msgid "Sub Total"
|
1034 |
-
msgstr "Mezisoučet"
|
1035 |
-
|
1036 |
-
#: adminpages/orders.php:304 pages/invoice.php:80 pages/invoice.php:78
|
1037 |
-
msgid "Tax"
|
1038 |
-
msgstr "Daň"
|
1039 |
-
|
1040 |
-
#: adminpages/orders.php:312
|
1041 |
-
msgid "Coupon Amount"
|
1042 |
-
msgstr "Množství kupónu"
|
1043 |
-
|
1044 |
-
#: adminpages/orders.php:320 adminpages/orders.php:602 pages/invoice.php:84
|
1045 |
-
#: pages/invoice.php:82
|
1046 |
-
msgid "Total"
|
1047 |
-
msgstr "Celkem"
|
1048 |
-
|
1049 |
-
#: adminpages/orders.php:325
|
1050 |
-
msgid "Should be subtotal + tax - couponamount."
|
1051 |
-
msgstr "Měl by obsahovat součet + daň - množství kupónu"
|
1052 |
-
|
1053 |
-
#: adminpages/orders.php:330
|
1054 |
-
msgid "Payment Type"
|
1055 |
-
msgstr "Typ platby"
|
1056 |
-
|
1057 |
-
#: adminpages/orders.php:335
|
1058 |
-
msgid "e.g. PayPal Express, PayPal Standard, Credit Card."
|
1059 |
-
msgstr "Například PayPal Express, PayPal Standard, Kreditní karta."
|
1060 |
-
|
1061 |
-
#: adminpages/orders.php:339 pages/billing.php:234 pages/checkout.php:517
|
1062 |
-
#: pages/checkout.php:510
|
1063 |
-
msgid "Card Type"
|
1064 |
-
msgstr "Typ karty"
|
1065 |
-
|
1066 |
-
#: adminpages/orders.php:344
|
1067 |
-
msgid "e.g. Visa, MasterCard, AMEX, etc"
|
1068 |
-
msgstr "Například Visa, MasterCard, AMEX, atd."
|
1069 |
-
|
1070 |
-
#: adminpages/orders.php:348 adminpages/paymentsettings.php:347
|
1071 |
-
msgid "Account Number"
|
1072 |
-
msgstr "Číslo účtu"
|
1073 |
-
|
1074 |
-
#: adminpages/orders.php:353
|
1075 |
-
msgid "Obscure all but last 4 digits."
|
1076 |
-
msgstr "Vše nejasné, ale poslední 4 čísla"
|
1077 |
-
|
1078 |
-
#: adminpages/orders.php:358
|
1079 |
-
msgid "Expiration Month"
|
1080 |
-
msgstr "Datum expirace"
|
1081 |
-
|
1082 |
-
#: adminpages/orders.php:365
|
1083 |
-
msgid "Expiration Year"
|
1084 |
-
msgstr "Rok expirace"
|
1085 |
-
|
1086 |
-
#: adminpages/orders.php:373 adminpages/orders.php:606
|
1087 |
-
msgid "Status"
|
1088 |
-
msgstr "Postavení"
|
1089 |
-
|
1090 |
-
#: adminpages/orders.php:394 adminpages/orders.php:604
|
1091 |
-
msgid "Gateway"
|
1092 |
-
msgstr "Brána"
|
1093 |
-
|
1094 |
-
#: adminpages/orders.php:398
|
1095 |
-
msgid "Testing Only"
|
1096 |
-
msgstr "Pouze testování"
|
1097 |
-
|
1098 |
-
#: adminpages/orders.php:399 adminpages/paymentsettings.php:159
|
1099 |
-
#: adminpages/paymentsettings.php:157
|
1100 |
-
msgid "Pay by Check"
|
1101 |
-
msgstr "Platit kupónem"
|
1102 |
-
|
1103 |
-
#: adminpages/orders.php:411 adminpages/paymentsettings.php:179
|
1104 |
-
#: adminpages/paymentsettings.php:175
|
1105 |
-
msgid "Gateway Environment"
|
1106 |
-
msgstr "Brána životního prostředí"
|
1107 |
-
|
1108 |
-
#: adminpages/orders.php:415 adminpages/paymentsettings.php:183
|
1109 |
-
#: adminpages/paymentsettings.php:179
|
1110 |
-
msgid "Sandbox/Testing"
|
1111 |
-
msgstr "Bezpečnostní mechanismus / testování"
|
1112 |
-
|
1113 |
-
#: adminpages/orders.php:416 adminpages/paymentsettings.php:184
|
1114 |
-
#: adminpages/paymentsettings.php:180
|
1115 |
-
msgid "Live/Production"
|
1116 |
-
msgstr "Naživo / produkce"
|
1117 |
-
|
1118 |
-
#: adminpages/orders.php:423
|
1119 |
-
msgid "Payment Transaction ID"
|
1120 |
-
msgstr "Číslo platební transakce"
|
1121 |
-
|
1122 |
-
#: adminpages/orders.php:428
|
1123 |
-
msgid "Generated by the gateway. Useful to cross reference orders."
|
1124 |
-
msgstr "Generováno bránou. Užitečný pro spárování referenčních zakázek."
|
1125 |
-
|
1126 |
-
#: adminpages/orders.php:432
|
1127 |
-
msgid "Subscription Transaction ID"
|
1128 |
-
msgstr "Číslo předplatného"
|
1129 |
-
|
1130 |
-
#: adminpages/orders.php:437
|
1131 |
-
msgid "Generated by the gateway. Useful to cross reference subscriptions."
|
1132 |
-
msgstr "Generováno bránou. Užitečný pro spárování referenčního předplatného."
|
1133 |
-
|
1134 |
-
#: adminpages/orders.php:442 adminpages/orders.php:607 pages/invoice.php:107
|
1135 |
-
#: pages/invoice.php:105
|
1136 |
-
msgid "Date"
|
1137 |
-
msgstr "Datum"
|
1138 |
-
|
1139 |
-
#: adminpages/orders.php:477
|
1140 |
-
msgid "Affiliate ID"
|
1141 |
-
msgstr "Partnerské ID"
|
1142 |
-
|
1143 |
-
#: adminpages/orders.php:485
|
1144 |
-
msgid "Affiliate SubID"
|
1145 |
-
msgstr "Partnerské subID"
|
1146 |
-
|
1147 |
-
#: adminpages/orders.php:495
|
1148 |
-
msgid "Notes"
|
1149 |
-
msgstr "Poznámky"
|
1150 |
-
|
1151 |
-
#: adminpages/orders.php:510
|
1152 |
-
msgid "Save Order"
|
1153 |
-
msgstr "Uložit"
|
1154 |
-
|
1155 |
-
#: adminpages/orders.php:511 pages/billing.php:295
|
1156 |
-
msgid "Cancel"
|
1157 |
-
msgstr "Zrušit"
|
1158 |
-
|
1159 |
-
#: adminpages/orders.php:520 includes/adminpages.php:17
|
1160 |
-
#: includes/adminpages.php:84
|
1161 |
-
msgid "Orders"
|
1162 |
-
msgstr "Objednávky"
|
1163 |
-
|
1164 |
-
#: adminpages/orders.php:521
|
1165 |
-
msgid "Add New Order"
|
1166 |
-
msgstr "Vložit novou objednávku"
|
1167 |
-
|
1168 |
-
#: adminpages/orders.php:535 adminpages/orders.php:538
|
1169 |
-
msgid "Search Orders"
|
1170 |
-
msgstr "Najít objednávku"
|
1171 |
-
|
1172 |
-
#: adminpages/orders.php:590
|
1173 |
-
#, php-format
|
1174 |
-
msgid "%d orders found."
|
1175 |
-
msgstr "%d objednávek nalezeno."
|
1176 |
-
|
1177 |
-
#: adminpages/orders.php:599 adminpages/paymentsettings.php:215
|
1178 |
-
#: adminpages/reports/login.php:141 adminpages/paymentsettings.php:211
|
1179 |
-
msgid "User"
|
1180 |
-
msgstr "Uživatel"
|
1181 |
-
|
1182 |
-
#: adminpages/orders.php:601 includes/profile.php:27 pages/checkout.php:33
|
1183 |
-
#: pages/confirmation.php:47 pages/confirmation.php:64
|
1184 |
-
#: pages/confirmation.php:105 pages/invoice.php:28 pages/invoice.php:51
|
1185 |
-
#: includes/profile.php:25 pages/checkout.php:34 pages/confirmation.php:46
|
1186 |
-
#: pages/confirmation.php:62 pages/confirmation.php:103 pages/invoice.php:27
|
1187 |
-
#: pages/invoice.php:49
|
1188 |
-
msgid "Membership Level"
|
1189 |
-
msgstr "Úroveň členství"
|
1190 |
-
|
1191 |
-
#: adminpages/orders.php:603 adminpages/orders.php:651
|
1192 |
-
msgid "Payment"
|
1193 |
-
msgstr "Platba"
|
1194 |
-
|
1195 |
-
#: adminpages/orders.php:605
|
1196 |
-
msgid "Transaction IDs"
|
1197 |
-
msgstr "Číslo transakce"
|
1198 |
-
|
1199 |
-
#: adminpages/orders.php:630
|
1200 |
-
msgid "deleted"
|
1201 |
-
msgstr "smazáno"
|
1202 |
-
|
1203 |
-
#: adminpages/orders.php:653
|
1204 |
-
msgid "Subscription"
|
1205 |
-
msgstr "Předplatné"
|
1206 |
-
|
1207 |
-
#: adminpages/orders.php:664
|
1208 |
-
#, php-format
|
1209 |
-
msgid ""
|
1210 |
-
"Deleting orders is permanent and can affect active users. Are you sure you "
|
1211 |
-
"want to delete order %s?"
|
1212 |
-
msgstr ""
|
1213 |
-
"Vymazání objednávek je trvalé a může to mít vliv na aktivní uživatele. Jste "
|
1214 |
-
"si jisti, že chcete smazat objednávky % s?"
|
1215 |
-
|
1216 |
-
#: adminpages/orders.php:674
|
1217 |
-
msgid "No orders found."
|
1218 |
-
msgstr "žádné nalezené objednávky"
|
1219 |
-
|
1220 |
-
#: adminpages/pagesettings.php:83
|
1221 |
-
msgid "The following pages have been created for you"
|
1222 |
-
msgstr "Následující stránky budou vytvořeny pro Vás"
|
1223 |
-
|
1224 |
-
#: adminpages/pagesettings.php:98
|
1225 |
-
msgid ""
|
1226 |
-
"Manage the WordPress pages assigned to each required Paid Memberships Pro "
|
1227 |
-
"page."
|
1228 |
-
msgstr ""
|
1229 |
-
"Správa WordPress stránky přiřazené ke každé požadované, placené Memberships "
|
1230 |
-
"Pro page."
|
1231 |
-
|
1232 |
-
#: adminpages/pagesettings.php:104
|
1233 |
-
msgid ""
|
1234 |
-
"Assign the WordPress pages for each required Paid Memberships Pro page or"
|
1235 |
-
msgstr "Přiřaďte Wordpress stránku pro každé požadované placené členství nebo,"
|
1236 |
-
|
1237 |
-
#: adminpages/pagesettings.php:104
|
1238 |
-
msgid "click here to let us generate them for you"
|
1239 |
-
msgstr "klikněte zde a my vám ho vytvoříme"
|
1240 |
-
|
1241 |
-
#: adminpages/pagesettings.php:112
|
1242 |
-
msgid "Account Page"
|
1243 |
-
msgstr "Stránka účtu"
|
1244 |
-
|
1245 |
-
#: adminpages/pagesettings.php:119 adminpages/pagesettings.php:134
|
1246 |
-
#: adminpages/pagesettings.php:149 adminpages/pagesettings.php:165
|
1247 |
-
#: adminpages/pagesettings.php:181 adminpages/pagesettings.php:197
|
1248 |
-
#: adminpages/pagesettings.php:213 adminpages/pagesettings.php:132
|
1249 |
-
#: adminpages/pagesettings.php:145 adminpages/pagesettings.php:159
|
1250 |
-
#: adminpages/pagesettings.php:173 adminpages/pagesettings.php:187
|
1251 |
-
#: adminpages/pagesettings.php:201
|
1252 |
-
msgid "edit page"
|
1253 |
-
msgstr "upravit stránku"
|
1254 |
-
|
1255 |
-
#: adminpages/pagesettings.php:121 adminpages/pagesettings.php:136
|
1256 |
-
#: adminpages/pagesettings.php:151 adminpages/pagesettings.php:167
|
1257 |
-
#: adminpages/pagesettings.php:183 adminpages/pagesettings.php:199
|
1258 |
-
#: adminpages/pagesettings.php:215
|
1259 |
-
msgid "view page"
|
1260 |
-
msgstr "zobrazit stránku"
|
1261 |
-
|
1262 |
-
#: adminpages/pagesettings.php:123 adminpages/pagesettings.php:138
|
1263 |
-
#: adminpages/pagesettings.php:153 adminpages/pagesettings.php:169
|
1264 |
-
#: adminpages/pagesettings.php:185 adminpages/pagesettings.php:201
|
1265 |
-
#: adminpages/pagesettings.php:217 adminpages/pagesettings.php:121
|
1266 |
-
#: adminpages/pagesettings.php:134 adminpages/pagesettings.php:147
|
1267 |
-
#: adminpages/pagesettings.php:161 adminpages/pagesettings.php:175
|
1268 |
-
#: adminpages/pagesettings.php:189 adminpages/pagesettings.php:203
|
1269 |
-
msgid "Include the shortcode"
|
1270 |
-
msgstr "Vložit shortcode"
|
1271 |
-
|
1272 |
-
#: adminpages/pagesettings.php:127 adminpages/pagesettings.php:125
|
1273 |
-
msgid "Billing Information Page"
|
1274 |
-
msgstr "Stránka fakturačních údajů"
|
1275 |
-
|
1276 |
-
#: adminpages/pagesettings.php:142 adminpages/pagesettings.php:138
|
1277 |
-
msgid "Cancel Page"
|
1278 |
-
msgstr "Zrušit stránku"
|
1279 |
-
|
1280 |
-
#: adminpages/pagesettings.php:158 adminpages/pagesettings.php:152
|
1281 |
-
msgid "Checkout Page"
|
1282 |
-
msgstr "Pokladna"
|
1283 |
-
|
1284 |
-
#: adminpages/pagesettings.php:174 adminpages/pagesettings.php:166
|
1285 |
-
msgid "Confirmation Page"
|
1286 |
-
msgstr "Potvrzovací stránka"
|
1287 |
-
|
1288 |
-
#: adminpages/pagesettings.php:190 adminpages/pagesettings.php:180
|
1289 |
-
msgid "Invoice Page"
|
1290 |
-
msgstr "Stránka fakturací"
|
1291 |
-
|
1292 |
-
#: adminpages/pagesettings.php:206 adminpages/pagesettings.php:194
|
1293 |
-
msgid "Levels Page"
|
1294 |
-
msgstr "Stránka úrovní"
|
1295 |
-
|
1296 |
-
#: adminpages/paymentsettings.php:77 adminpages/paymentsettings.php:82
|
1297 |
-
msgid "Your payment settings have been updated."
|
1298 |
-
msgstr "Vaše nastavení plateb bylo úspěšně aktualizováno"
|
1299 |
-
|
1300 |
-
#: adminpages/paymentsettings.php:146 adminpages/paymentsettings.php:154
|
1301 |
-
#: adminpages/paymentsettings.php:144 adminpages/paymentsettings.php:152
|
1302 |
-
msgid "Payment Gateway"
|
1303 |
-
msgstr "Platební brána"
|
1304 |
-
|
1305 |
-
#: adminpages/paymentsettings.php:146 adminpages/paymentsettings.php:144
|
1306 |
-
msgid "SSL Settings"
|
1307 |
-
msgstr "Nastavení SSL"
|
1308 |
-
|
1309 |
-
#: adminpages/paymentsettings.php:174
|
1310 |
-
msgid ""
|
1311 |
-
"This gateway option is in beta. Some functionality may not be available. "
|
1312 |
-
"Please contact Paid Memberships Pro with any issues you run into. "
|
1313 |
-
"<strong>Please be sure to upgrade Paid Memberships Pro to the latest "
|
1314 |
-
"versions when available.</strong>"
|
1315 |
-
msgstr ""
|
1316 |
-
"Tato platební brána je v beta verzi. Nekteré funkce nemusí být k dispozici. "
|
1317 |
-
"Obraťte se prosím na Memberships Pro s případnými otázkami, které poté "
|
1318 |
-
"můžete konzultovat. <strong> Prosím ujistěte se, že jste upgradovali "
|
1319 |
-
"Memberships Pro na nejnovější verzi, která je k dispozici. </ strong>"
|
1320 |
-
|
1321 |
-
#: adminpages/paymentsettings.php:199 adminpages/paymentsettings.php:195
|
1322 |
-
msgid "Partner"
|
1323 |
-
msgstr "Partner"
|
1324 |
-
|
1325 |
-
#: adminpages/paymentsettings.php:207 adminpages/paymentsettings.php:203
|
1326 |
-
msgid "Vendor"
|
1327 |
-
msgstr "Prodejce"
|
1328 |
-
|
1329 |
-
#: adminpages/paymentsettings.php:223 pages/checkout.php:180
|
1330 |
-
#: adminpages/paymentsettings.php:219 pages/checkout.php:177
|
1331 |
-
msgid "Password"
|
1332 |
-
msgstr "Heslo"
|
1333 |
-
|
1334 |
-
#: adminpages/paymentsettings.php:231 adminpages/paymentsettings.php:227
|
1335 |
-
msgid "Gateway Account Email"
|
1336 |
-
msgstr "E-mail k bráně účtu"
|
1337 |
-
|
1338 |
-
#: adminpages/paymentsettings.php:239 adminpages/paymentsettings.php:331
|
1339 |
-
#: adminpages/paymentsettings.php:235
|
1340 |
-
msgid "API Username"
|
1341 |
-
msgstr "API uživatelské jméno"
|
1342 |
-
|
1343 |
-
#: adminpages/paymentsettings.php:247 adminpages/paymentsettings.php:339
|
1344 |
-
#: adminpages/paymentsettings.php:243
|
1345 |
-
msgid "API Password"
|
1346 |
-
msgstr "API heslo"
|
1347 |
-
|
1348 |
-
#: adminpages/paymentsettings.php:255 adminpages/paymentsettings.php:251
|
1349 |
-
msgid "API Signature"
|
1350 |
-
msgstr "API podpis"
|
1351 |
-
|
1352 |
-
#: adminpages/paymentsettings.php:264 adminpages/paymentsettings.php:260
|
1353 |
-
msgid "Login Name"
|
1354 |
-
msgstr "Přihlašovací jméno"
|
1355 |
-
|
1356 |
-
#: adminpages/paymentsettings.php:272 adminpages/paymentsettings.php:268
|
1357 |
-
msgid "Transaction Key"
|
1358 |
-
msgstr "Transakční klíč"
|
1359 |
-
|
1360 |
-
#: adminpages/paymentsettings.php:281 adminpages/paymentsettings.php:277
|
1361 |
-
msgid "Secret Key"
|
1362 |
-
msgstr "Tajný klíč"
|
1363 |
-
|
1364 |
-
#: adminpages/paymentsettings.php:289 adminpages/paymentsettings.php:285
|
1365 |
-
msgid "Publishable Key"
|
1366 |
-
msgstr "Nezávadný klíč"
|
1367 |
-
|
1368 |
-
#: adminpages/paymentsettings.php:298 adminpages/paymentsettings.php:364
|
1369 |
-
#: adminpages/paymentsettings.php:294
|
1370 |
-
msgid "Merchant ID"
|
1371 |
-
msgstr "ID obchodníka"
|
1372 |
-
|
1373 |
-
#: adminpages/paymentsettings.php:306 adminpages/paymentsettings.php:302
|
1374 |
-
msgid "Public Key"
|
1375 |
-
msgstr "Veřejný klíč"
|
1376 |
-
|
1377 |
-
#: adminpages/paymentsettings.php:314 adminpages/paymentsettings.php:310
|
1378 |
-
msgid "Private Key"
|
1379 |
-
msgstr "Osobní klíč"
|
1380 |
-
|
1381 |
-
#: adminpages/paymentsettings.php:322 adminpages/paymentsettings.php:318
|
1382 |
-
msgid "Client-Side Encryption Key"
|
1383 |
-
msgstr "Klientův dešifrovací klíč"
|
1384 |
-
|
1385 |
-
#: adminpages/paymentsettings.php:355
|
1386 |
-
msgid "Secret Word"
|
1387 |
-
msgstr "Tajné slovo"
|
1388 |
-
|
1389 |
-
#: adminpages/paymentsettings.php:372
|
1390 |
-
msgid "Transaction Security Key"
|
1391 |
-
msgstr "Bezpečnostní klíč transakce"
|
1392 |
-
|
1393 |
-
#: adminpages/paymentsettings.php:381 adminpages/paymentsettings.php:327
|
1394 |
-
#: adminpages/paymentsettings.php:337 adminpages/paymentsettings.php:356
|
1395 |
-
msgid "Currency"
|
1396 |
-
msgstr "Měna"
|
1397 |
-
|
1398 |
-
#: adminpages/paymentsettings.php:401 adminpages/paymentsettings.php:375
|
1399 |
-
msgid "Accepted Credit Card Types"
|
1400 |
-
msgstr "Akceptujeme tyto platební karty"
|
1401 |
-
|
1402 |
-
#: adminpages/paymentsettings.php:415 adminpages/paymentsettings.php:389
|
1403 |
-
msgid "Instructions"
|
1404 |
-
msgstr "Instrukce"
|
1405 |
-
|
1406 |
-
#: adminpages/paymentsettings.php:419 adminpages/paymentsettings.php:393
|
1407 |
-
msgid ""
|
1408 |
-
"Who to write the check out to. Where to mail it. Shown on checkout, "
|
1409 |
-
"confirmation, and invoice pages."
|
1410 |
-
msgstr ""
|
1411 |
-
"Kdo napsal šek. Kde je e-mail. Zobrazení pokladny, potvrzení a fakturační "
|
1412 |
-
"stránky."
|
1413 |
-
|
1414 |
-
#: adminpages/paymentsettings.php:425
|
1415 |
-
msgid "Show Billing Address Fields"
|
1416 |
-
msgstr "Ukázat pole - Fakturační údaje"
|
1417 |
-
|
1418 |
-
#: adminpages/paymentsettings.php:432
|
1419 |
-
msgid ""
|
1420 |
-
"Stripe doesn't require billing address fields. Choose 'No' to hide them on "
|
1421 |
-
"the checkout page."
|
1422 |
-
msgstr ""
|
1423 |
-
"Stripe nevyžaduje pole fakturační adresa. Zvolte \"Ne\" pro skování na "
|
1424 |
-
"platební stránce."
|
1425 |
-
|
1426 |
-
#: adminpages/paymentsettings.php:438 adminpages/paymentsettings.php:398
|
1427 |
-
msgid "Sales Tax"
|
1428 |
-
msgstr "Daň z prodeje"
|
1429 |
-
|
1430 |
-
#: adminpages/paymentsettings.php:438 pages/billing.php:78
|
1431 |
-
#: adminpages/paymentsettings.php:398
|
1432 |
-
msgid "optional"
|
1433 |
-
msgstr "volitelné"
|
1434 |
-
|
1435 |
-
#: adminpages/paymentsettings.php:441 adminpages/paymentsettings.php:401
|
1436 |
-
msgid "Tax State"
|
1437 |
-
msgstr "DPH"
|
1438 |
-
|
1439 |
-
#: adminpages/paymentsettings.php:442 adminpages/paymentsettings.php:402
|
1440 |
-
msgid "abbreviation, e.g. \"PA\""
|
1441 |
-
msgstr "zkratka, např. \"PA\""
|
1442 |
-
|
1443 |
-
#: adminpages/paymentsettings.php:444 adminpages/paymentsettings.php:404
|
1444 |
-
msgid "decimal, e.g. \"0.06\""
|
1445 |
-
msgstr "desetinný, např. \"0.06\""
|
1446 |
-
|
1447 |
-
#: adminpages/paymentsettings.php:445 adminpages/paymentsettings.php:405
|
1448 |
-
msgid ""
|
1449 |
-
"If values are given, tax will be applied for any members ordering from the "
|
1450 |
-
"selected state. For more complex tax rules, use the \"pmpro_tax\" filter."
|
1451 |
-
msgstr ""
|
1452 |
-
"Jestliže máte nastaveny hodnoty, daň bude použita pro všechny členy z "
|
1453 |
-
"určitého státu, kteří si objednají službu. U složitějších daňových pravidel, "
|
1454 |
-
"použijte \"pmpro_tax \" filtr."
|
1455 |
-
|
1456 |
-
#: adminpages/paymentsettings.php:450
|
1457 |
-
msgid "Force SSL"
|
1458 |
-
msgstr "Silný SSL"
|
1459 |
-
|
1460 |
-
#: adminpages/paymentsettings.php:456
|
1461 |
-
msgid "Yes (with JavaScript redirects)"
|
1462 |
-
msgstr "Ano (s JavaScript přesměrováním)"
|
1463 |
-
|
1464 |
-
#: adminpages/paymentsettings.php:463 adminpages/paymentsettings.php:430
|
1465 |
-
msgid "SSL Seal Code"
|
1466 |
-
msgstr "SSL Seal Code"
|
1467 |
-
|
1468 |
-
#: adminpages/paymentsettings.php:471 adminpages/paymentsettings.php:438
|
1469 |
-
msgid "HTTPS Nuclear Option"
|
1470 |
-
msgstr "nastavení HTTPS"
|
1471 |
-
|
1472 |
-
#: adminpages/paymentsettings.php:474 adminpages/paymentsettings.php:441
|
1473 |
-
msgid ""
|
1474 |
-
"Use the \"Nuclear Option\" to use secure (HTTPS) URLs on your secure pages. "
|
1475 |
-
"Check this if you are using SSL and have warnings on your checkout pages."
|
1476 |
-
msgstr ""
|
1477 |
-
"Použijte \"Nuclear Option\" k použití zabezpečené (HTTPS) URL na vaše "
|
1478 |
-
"zabezpečené stránky. Podívejte se na to, zda používáte SSL a máte upozornění "
|
1479 |
-
"na vašich platebních stránkách."
|
1480 |
-
|
1481 |
-
#: adminpages/paymentsettings.php:479 adminpages/paymentsettings.php:446
|
1482 |
-
msgid "IPN Handler URL"
|
1483 |
-
msgstr "IPN Handler URL"
|
1484 |
-
|
1485 |
-
#: adminpages/paymentsettings.php:482 adminpages/paymentsettings.php:449
|
1486 |
-
msgid "To fully integrate with PayPal, be sure to set your IPN Handler URL to "
|
1487 |
-
msgstr ""
|
1488 |
-
"Chcete-li plně integrovat PayPal, ujistěte se že jste nastavily IPN Handler "
|
1489 |
-
"URL"
|
1490 |
-
|
1491 |
-
#: adminpages/paymentsettings.php:487
|
1492 |
-
msgid "TwoCheckout INS URL"
|
1493 |
-
msgstr "TwoCheckout INS URL"
|
1494 |
-
|
1495 |
-
#: adminpages/paymentsettings.php:490
|
1496 |
-
msgid ""
|
1497 |
-
"To fully integrate with 2Checkout, be sure to set your 2Checkout INS URL "
|
1498 |
-
msgstr ""
|
1499 |
-
"Chcete-li plně integrovat 2Checkout, ujistěte se že jste nastavily "
|
1500 |
-
"2Checkout IPN Handler URL"
|
1501 |
-
|
1502 |
-
#: adminpages/paymentsettings.php:495 adminpages/paymentsettings.php:454
|
1503 |
-
msgid "Silent Post URL"
|
1504 |
-
msgstr "Tichý příspěvek URL"
|
1505 |
-
|
1506 |
-
#: adminpages/paymentsettings.php:498 adminpages/paymentsettings.php:457
|
1507 |
-
msgid ""
|
1508 |
-
"To fully integrate with Authorize.net, be sure to set your Silent Post URL to"
|
1509 |
-
msgstr ""
|
1510 |
-
"Chcete-li plně integrovat s Authorize.net, ujistěte se, že máte správně "
|
1511 |
-
"nastaven Silent Post URL na"
|
1512 |
-
|
1513 |
-
#: adminpages/paymentsettings.php:503 adminpages/paymentsettings.php:511
|
1514 |
-
#: adminpages/paymentsettings.php:462 adminpages/paymentsettings.php:470
|
1515 |
-
msgid "Web Hook URL"
|
1516 |
-
msgstr "Web Hook URL"
|
1517 |
-
|
1518 |
-
#: adminpages/paymentsettings.php:506 adminpages/paymentsettings.php:465
|
1519 |
-
msgid "To fully integrate with Stripe, be sure to set your Web Hook URL to"
|
1520 |
-
msgstr ""
|
1521 |
-
"Chcete-li plně integrovat s Stripe, ujistěte se, že máte správně nastaven "
|
1522 |
-
"Web Hook URL na"
|
1523 |
-
|
1524 |
-
#: adminpages/paymentsettings.php:515 adminpages/paymentsettings.php:474
|
1525 |
-
msgid "To fully integrate with Braintree, be sure to set your Web Hook URL to"
|
1526 |
-
msgstr ""
|
1527 |
-
"Chcete-li plně integrovat s Braintree, ujistěte se, že máte správně nastaven "
|
1528 |
-
"Web Hook URL na"
|
1529 |
-
|
1530 |
-
#: adminpages/reports.php:37 adminpages/reports.php:26
|
1531 |
-
msgid "Details"
|
1532 |
-
msgstr "Detaily"
|
1533 |
-
|
1534 |
-
#: adminpages/reports/login.php:16
|
1535 |
-
msgid "Visits, Views, and Logins"
|
1536 |
-
msgstr "Návštěvy, zobrazení a přihlášení"
|
1537 |
-
|
1538 |
-
#: adminpages/reports/login.php:26
|
1539 |
-
msgid "Visits Today"
|
1540 |
-
msgstr "Dnešní návštěvy"
|
1541 |
-
|
1542 |
-
#: adminpages/reports/login.php:27 adminpages/reports/login.php:147
|
1543 |
-
msgid "Visits This Month"
|
1544 |
-
msgstr "Návštěvy tento měsíc"
|
1545 |
-
|
1546 |
-
#: adminpages/reports/login.php:28
|
1547 |
-
msgid "Visits All Time"
|
1548 |
-
msgstr "Celková návštěvnost"
|
1549 |
-
|
1550 |
-
#: adminpages/reports/login.php:31
|
1551 |
-
msgid "Views Today"
|
1552 |
-
msgstr "Dnešní zobrazení"
|
1553 |
-
|
1554 |
-
#: adminpages/reports/login.php:32 adminpages/reports/login.php:149
|
1555 |
-
msgid "Views This Month"
|
1556 |
-
msgstr "Zobrazeno tento měsíc"
|
1557 |
-
|
1558 |
-
#: adminpages/reports/login.php:33
|
1559 |
-
msgid "Views All Time"
|
1560 |
-
msgstr "Zobrazeno celkem"
|
1561 |
-
|
1562 |
-
#: adminpages/reports/login.php:36
|
1563 |
-
msgid "Logins Today"
|
1564 |
-
msgstr "Přihlášeno dnes"
|
1565 |
-
|
1566 |
-
#: adminpages/reports/login.php:37 adminpages/reports/login.php:152
|
1567 |
-
msgid "Logins This Month"
|
1568 |
-
msgstr "Přihlášeno tento měsíc"
|
1569 |
-
|
1570 |
-
#: adminpages/reports/login.php:38
|
1571 |
-
msgid "Logins All Time"
|
1572 |
-
msgstr "Přihlášeno celkem"
|
1573 |
-
|
1574 |
-
#: adminpages/reports/login.php:61
|
1575 |
-
msgid "Visits, Views, and Logins Report"
|
1576 |
-
msgstr "Zprávy z návštěv, zobrazení a přihlášení"
|
1577 |
-
|
1578 |
-
#: adminpages/reports/login.php:66
|
1579 |
-
msgid "All Users"
|
1580 |
-
msgstr "Všichni uživatelé"
|
1581 |
-
|
1582 |
-
#: adminpages/reports/login.php:146
|
1583 |
-
msgid "Last Visit"
|
1584 |
-
msgstr "Poslední návštěva"
|
1585 |
-
|
1586 |
-
#: adminpages/reports/login.php:148
|
1587 |
-
msgid "Total Visits"
|
1588 |
-
msgstr "Návštěv celkem"
|
1589 |
-
|
1590 |
-
#: adminpages/reports/login.php:150
|
1591 |
-
msgid "Total Views"
|
1592 |
-
msgstr "Zobrazeno celkem"
|
1593 |
-
|
1594 |
-
#: adminpages/reports/login.php:151
|
1595 |
-
msgid "Last Login"
|
1596 |
-
msgstr "Poslední přihlášení"
|
1597 |
-
|
1598 |
-
#: adminpages/reports/login.php:153
|
1599 |
-
msgid "Total Logins"
|
1600 |
-
msgstr "Přihlášení celkem"
|
1601 |
-
|
1602 |
-
#: adminpages/reports/memberships.php:18
|
1603 |
-
#: adminpages/reports/memberships.php:288
|
1604 |
-
msgid "Membership Stats"
|
1605 |
-
msgstr "Členská statistika"
|
1606 |
-
|
1607 |
-
#: adminpages/reports/memberships.php:294 adminpages/reports/sales.php:196
|
1608 |
-
#: adminpages/reports/sales.php:187
|
1609 |
-
msgid "Daily"
|
1610 |
-
msgstr "Denně"
|
1611 |
-
|
1612 |
-
#: adminpages/reports/memberships.php:295 adminpages/reports/sales.php:197
|
1613 |
-
#: adminpages/reports/sales.php:188
|
1614 |
-
msgid "Monthly"
|
1615 |
-
msgstr "Měsíčně"
|
1616 |
-
|
1617 |
-
#: adminpages/reports/memberships.php:296 adminpages/reports/sales.php:198
|
1618 |
-
#: adminpages/reports/sales.php:189
|
1619 |
-
msgid "Annual"
|
1620 |
-
msgstr "Ročně"
|
1621 |
-
|
1622 |
-
#: adminpages/reports/memberships.php:299
|
1623 |
-
msgid "Signups vs. Cancellations"
|
1624 |
-
msgstr "Registrace vs. storna"
|
1625 |
-
|
1626 |
-
#: adminpages/reports/memberships.php:331 adminpages/reports/sales.php:231
|
1627 |
-
#: adminpages/reports/sales.php:222
|
1628 |
-
msgid "Generate Report"
|
1629 |
-
msgstr "Vytvořit zprávu"
|
1630 |
-
|
1631 |
-
#: adminpages/reports/sales.php:18
|
1632 |
-
msgid "Sales and Revenue (Testing/Sandbox)"
|
1633 |
-
msgstr "Prodeje a výnosy (testování / bezpečnostní mechanismus)"
|
1634 |
-
|
1635 |
-
#: adminpages/reports/sales.php:20 adminpages/reports/sales.php:189
|
1636 |
-
#: adminpages/reports/sales.php:180
|
1637 |
-
msgid "Sales and Revenue"
|
1638 |
-
msgstr "Prodeje a příjmy"
|
1639 |
-
|
1640 |
-
#: adminpages/reports/sales.php:201 adminpages/reports/sales.php:192
|
1641 |
-
msgid "Revenue"
|
1642 |
-
msgstr "Příjmy"
|
1643 |
-
|
1644 |
-
#: adminpages/reports/sales.php:202 adminpages/reports/sales.php:193
|
1645 |
-
msgid "Sales"
|
1646 |
-
msgstr "Prodeje"
|
1647 |
-
|
1648 |
-
#: classes/class.pmproemail.php:37
|
1649 |
-
#, php-format
|
1650 |
-
msgid "An Email From %s"
|
1651 |
-
msgstr "E-mail od %s"
|
1652 |
-
|
1653 |
-
#: classes/class.pmproemail.php:120
|
1654 |
-
#, php-format
|
1655 |
-
msgid "Your membership at %s has been CANCELLED"
|
1656 |
-
msgstr "Vaše členství na %s bylo ZRUŠENO"
|
1657 |
-
|
1658 |
-
#: classes/class.pmproemail.php:142
|
1659 |
-
#, php-format
|
1660 |
-
msgid "Membership for %s at %s has been CANCELLED"
|
1661 |
-
msgstr "Členství pro %s na %s bylo ZRUŠENO"
|
1662 |
-
|
1663 |
-
#: classes/class.pmproemail.php:173 classes/class.pmproemail.php:172
|
1664 |
-
#, php-format
|
1665 |
-
msgid "Your membership confirmation for %s"
|
1666 |
-
msgstr "Vaše členství potvzeno do %s"
|
1667 |
-
|
1668 |
-
#: classes/class.pmproemail.php:218 classes/class.pmproemail.php:227
|
1669 |
-
#: classes/class.pmproemail.php:236 classes/class.pmproemail.php:307
|
1670 |
-
#: classes/class.pmproemail.php:316 classes/class.pmproemail.php:580
|
1671 |
-
#: pages/checkout.php:66 pages/checkout.php:76 pages/checkout.php:573
|
1672 |
-
#: pages/confirmation.php:52 pages/invoice.php:33
|
1673 |
-
#: classes/class.pmproemail.php:216 classes/class.pmproemail.php:225
|
1674 |
-
#: classes/class.pmproemail.php:234 classes/class.pmproemail.php:304
|
1675 |
-
#: classes/class.pmproemail.php:313 classes/class.pmproemail.php:532
|
1676 |
-
#: pages/checkout.php:67 pages/checkout.php:77 pages/checkout.php:566
|
1677 |
-
#: pages/confirmation.php:51 pages/invoice.php:32
|
1678 |
-
msgid "Discount Code"
|
1679 |
-
msgstr "Slevový kód"
|
1680 |
-
|
1681 |
-
#: classes/class.pmproemail.php:243 classes/class.pmproemail.php:328
|
1682 |
-
#: classes/class.pmproemail.php:586 classes/class.pmproemail.php:241
|
1683 |
-
#: classes/class.pmproemail.php:325 classes/class.pmproemail.php:538
|
1684 |
-
#, php-format
|
1685 |
-
msgid "This membership will expire on %s."
|
1686 |
-
msgstr "Toto členství vyprší %s."
|
1687 |
-
|
1688 |
-
#: classes/class.pmproemail.php:265 classes/class.pmproemail.php:263
|
1689 |
-
#, php-format
|
1690 |
-
msgid "Member Checkout for %s at %s"
|
1691 |
-
msgstr "Členská platba pro% s na% s"
|
1692 |
-
|
1693 |
-
#: classes/class.pmproemail.php:345 classes/class.pmproemail.php:342
|
1694 |
-
#, php-format
|
1695 |
-
msgid "Your billing information has been udpated at %s"
|
1696 |
-
msgstr "Vaše fakturační údaje byly aktualizovány na %s"
|
1697 |
-
|
1698 |
-
#: classes/class.pmproemail.php:390 classes/class.pmproemail.php:386
|
1699 |
-
#, php-format
|
1700 |
-
msgid "Billing information has been udpated for %s at %s"
|
1701 |
-
msgstr "Fakturační údaje byly aktualizovány z %s na %s"
|
1702 |
-
|
1703 |
-
#: classes/class.pmproemail.php:430 classes/class.pmproemail.php:425
|
1704 |
-
#, php-format
|
1705 |
-
msgid "Membership Payment Failed at %s"
|
1706 |
-
msgstr "Platba za členství se nezdařila na %s"
|
1707 |
-
|
1708 |
-
#: classes/class.pmproemail.php:468 classes/class.pmproemail.php:462
|
1709 |
-
#, php-format
|
1710 |
-
msgid "Membership Payment Failed For %s at %s"
|
1711 |
-
msgstr "Členská platba se nezdařila pro %s na %s"
|
1712 |
-
|
1713 |
-
#: classes/class.pmproemail.php:508
|
1714 |
-
#, php-format
|
1715 |
-
msgid "Credit Card on File Expiring Soon at %s"
|
1716 |
-
msgstr "Kreditní karta brzy skončí na %s"
|
1717 |
-
|
1718 |
-
#: classes/class.pmproemail.php:548 classes/class.pmproemail.php:501
|
1719 |
-
#, php-format
|
1720 |
-
msgid "INVOICE for %s membership"
|
1721 |
-
msgstr "Faktura za %s členství"
|
1722 |
-
|
1723 |
-
#: classes/class.pmproemail.php:611 classes/class.pmproemail.php:563
|
1724 |
-
#, php-format
|
1725 |
-
msgid "Your trial at %s is ending soon"
|
1726 |
-
msgstr "Vaše zkušební verze na %s brzy končí"
|
1727 |
-
|
1728 |
-
#: classes/class.pmproemail.php:645 classes/class.pmproemail.php:596
|
1729 |
-
#, php-format
|
1730 |
-
msgid "Your membership at %s has ended"
|
1731 |
-
msgstr "Vaše členství na %s bylo ukončeno"
|
1732 |
-
|
1733 |
-
#: classes/class.pmproemail.php:670 classes/class.pmproemail.php:621
|
1734 |
-
#, php-format
|
1735 |
-
msgid "Your membership at %s will end soon"
|
1736 |
-
msgstr "Vaše členství na %s brzy zkončí"
|
1737 |
-
|
1738 |
-
#: classes/class.pmproemail.php:690 classes/class.pmproemail.php:641
|
1739 |
-
#, php-format
|
1740 |
-
msgid "Your membership at %s has been changed"
|
1741 |
-
msgstr "Vaše členství na %s bude změněno"
|
1742 |
-
|
1743 |
-
#: classes/class.pmproemail.php:694 classes/class.pmproemail.php:732
|
1744 |
-
#: classes/class.pmproemail.php:645 classes/class.pmproemail.php:683
|
1745 |
-
#, php-format
|
1746 |
-
msgid "The new level is %s. This membership is free"
|
1747 |
-
msgstr "Nová úroveň je% s. Toto členství je zdarma"
|
1748 |
-
|
1749 |
-
#: classes/class.pmproemail.php:696 classes/class.pmproemail.php:647
|
1750 |
-
msgid "Your membership has been cancelled"
|
1751 |
-
msgstr "Vaše členství bylo ukončeno"
|
1752 |
-
|
1753 |
-
#: classes/class.pmproemail.php:700 classes/class.pmproemail.php:738
|
1754 |
-
#: classes/class.pmproemail.php:651 classes/class.pmproemail.php:689
|
1755 |
-
#, php-format
|
1756 |
-
msgid "This membership will expire on %s"
|
1757 |
-
msgstr "Toto členství vyprší %s"
|
1758 |
-
|
1759 |
-
#: classes/class.pmproemail.php:704 classes/class.pmproemail.php:742
|
1760 |
-
#: classes/class.pmproemail.php:655 classes/class.pmproemail.php:693
|
1761 |
-
msgid "This membership does not expire"
|
1762 |
-
msgstr "Toto členství nevyprší"
|
1763 |
-
|
1764 |
-
#: classes/class.pmproemail.php:728 classes/class.pmproemail.php:679
|
1765 |
-
#, php-format
|
1766 |
-
msgid "Membership for %s at %s has been changed"
|
1767 |
-
msgstr "členství pro %s na %s bylo změněno"
|
1768 |
-
|
1769 |
-
#: classes/class.pmproemail.php:734 classes/class.pmproemail.php:685
|
1770 |
-
msgid "membership has been cancelled"
|
1771 |
-
msgstr "členství ukončeno"
|
1772 |
-
|
1773 |
-
#: classes/gateways/class.pmprogateway.php:55
|
1774 |
-
#: classes/gateways/class.pmprogateway_authorizenet.php:55
|
1775 |
-
#: classes/gateways/class.pmprogateway_check.php:60
|
1776 |
-
#: classes/gateways/class.pmprogateway_cybersource.php:57
|
1777 |
-
#: classes/gateways/class.pmprogateway_payflowpro.php:27
|
1778 |
-
#: classes/gateways/class.pmprogateway_paypal.php:27
|
1779 |
-
msgid "Unknown error: Authorization failed."
|
1780 |
-
msgstr "Neznámá chyba: Autorizace selhala"
|
1781 |
-
|
1782 |
-
#: classes/gateways/class.pmprogateway.php:106
|
1783 |
-
#: classes/gateways/class.pmprogateway.php:111
|
1784 |
-
#: classes/gateways/class.pmprogateway.php:129
|
1785 |
-
#: classes/gateways/class.pmprogateway_authorizenet.php:106
|
1786 |
-
#: classes/gateways/class.pmprogateway_authorizenet.php:111
|
1787 |
-
#: classes/gateways/class.pmprogateway_authorizenet.php:128
|
1788 |
-
#: classes/gateways/class.pmprogateway_check.php:111
|
1789 |
-
#: classes/gateways/class.pmprogateway_check.php:116
|
1790 |
-
#: classes/gateways/class.pmprogateway_check.php:134
|
1791 |
-
#: classes/gateways/class.pmprogateway_cybersource.php:108
|
1792 |
-
#: classes/gateways/class.pmprogateway_cybersource.php:113
|
1793 |
-
#: classes/gateways/class.pmprogateway_cybersource.php:131
|
1794 |
-
#: classes/gateways/class.pmprogateway_payflowpro.php:50
|
1795 |
-
#: classes/gateways/class.pmprogateway_payflowpro.php:55
|
1796 |
-
#: classes/gateways/class.pmprogateway_paypal.php:50
|
1797 |
-
msgid "Unknown error: Payment failed."
|
1798 |
-
msgstr "Neznámá chyba: Platba selhala"
|
1799 |
-
|
1800 |
-
#: classes/gateways/class.pmprogateway.php:113
|
1801 |
-
#: classes/gateways/class.pmprogateway_authorizenet.php:112
|
1802 |
-
#: classes/gateways/class.pmprogateway_check.php:118
|
1803 |
-
#: classes/gateways/class.pmprogateway_cybersource.php:115
|
1804 |
-
msgid ""
|
1805 |
-
"A partial payment was made that we could not void. Please contact the site "
|
1806 |
-
"owner immediately to correct this."
|
1807 |
-
msgstr ""
|
1808 |
-
"Částečně provedená platba. Prosím, obraťte se na vlastníka stránky, který "
|
1809 |
-
"problém okamžitě napraví."
|
1810 |
-
|
1811 |
-
#: classes/gateways/class.pmprogateway_authorizenet.php:787
|
1812 |
-
#: classes/gateways/class.pmprogateway_authorizenet.php:788
|
1813 |
-
#: classes/gateways/class.pmprogateway_authorizenet.php:789
|
1814 |
-
msgid "Could not connect to Authorize.net"
|
1815 |
-
msgstr "Nelze se připojit k Authorize.net"
|
1816 |
-
|
1817 |
-
#: classes/gateways/class.pmprogateway_braintree.php:61
|
1818 |
-
#: classes/gateways/class.pmprogateway_stripe.php:53
|
1819 |
-
msgid "Unknown error: Initial payment failed."
|
1820 |
-
msgstr "Neznámá platba: První platba se nezdařila."
|
1821 |
-
|
1822 |
-
#: classes/gateways/class.pmprogateway_braintree.php:120
|
1823 |
-
msgid "Error during settlement:"
|
1824 |
-
msgstr "Chyba při zúčtování:"
|
1825 |
-
|
1826 |
-
#: classes/gateways/class.pmprogateway_braintree.php:129
|
1827 |
-
msgid "Error during charge:"
|
1828 |
-
msgstr "Chyba během placení:"
|
1829 |
-
|
1830 |
-
#: classes/gateways/class.pmprogateway_braintree.php:198
|
1831 |
-
msgid "Failed to update customer."
|
1832 |
-
msgstr "Nepodařilo se aktualizovat zákazníka."
|
1833 |
-
|
1834 |
-
#: classes/gateways/class.pmprogateway_braintree.php:246
|
1835 |
-
msgid "Failed to create customer."
|
1836 |
-
msgstr "Nepodařilo se vytvořit zákazníka."
|
1837 |
-
|
1838 |
-
#: classes/gateways/class.pmprogateway_braintree.php:253
|
1839 |
-
msgid "Error creating customer record with Braintree:"
|
1840 |
-
msgstr "Chyba při vytváření zákazníka nahrána do Braintree:"
|
1841 |
-
|
1842 |
-
#: classes/gateways/class.pmprogateway_braintree.php:344
|
1843 |
-
#: classes/gateways/class.pmprogateway_braintree.php:345
|
1844 |
-
msgid "Error subscribing customer to plan with Braintree:"
|
1845 |
-
msgstr "Chyba při objednání zákazníka nahrána do Braintree:"
|
1846 |
-
|
1847 |
-
#: classes/gateways/class.pmprogateway_braintree.php:359
|
1848 |
-
#: classes/gateways/class.pmprogateway_braintree.php:360
|
1849 |
-
msgid "Failed to subscribe with Braintree:"
|
1850 |
-
msgstr "Přihlášení s Braintree se nezdařilo:"
|
1851 |
-
|
1852 |
-
#: classes/gateways/class.pmprogateway_braintree.php:397
|
1853 |
-
#: classes/gateways/class.pmprogateway_braintree.php:410
|
1854 |
-
#: classes/gateways/class.pmprogateway_braintree.php:417
|
1855 |
-
#: classes/gateways/class.pmprogateway_stripe.php:344
|
1856 |
-
#: classes/gateways/class.pmprogateway_stripe.php:354
|
1857 |
-
#: classes/gateways/class.pmprogateway_braintree.php:398
|
1858 |
-
#: classes/gateways/class.pmprogateway_braintree.php:411
|
1859 |
-
#: classes/gateways/class.pmprogateway_braintree.php:418
|
1860 |
-
#: classes/gateways/class.pmprogateway_stripe.php:343
|
1861 |
-
#: classes/gateways/class.pmprogateway_stripe.php:353
|
1862 |
-
msgid "Could not find the subscription."
|
1863 |
-
msgstr "Nelze najít předplatné."
|
1864 |
-
|
1865 |
-
#: classes/gateways/class.pmprogateway_payflowpro.php:57
|
1866 |
-
#: classes/gateways/class.pmprogateway_paypal.php:57
|
1867 |
-
msgid ""
|
1868 |
-
"A partial payment was made that we could not refund. Please contact the site "
|
1869 |
-
"owner immediately to correct this."
|
1870 |
-
msgstr ""
|
1871 |
-
"Částečná platba byla provedena, ale nemůžeme ji vrátit. Obraťte se na "
|
1872 |
-
"vlastníka webu, který problém okamžitě vyřeší."
|
1873 |
-
|
1874 |
-
#: classes/gateways/class.pmprogateway_stripe.php:192
|
1875 |
-
#: classes/gateways/class.pmprogateway_stripe.php:190
|
1876 |
-
msgid "Error creating customer record with Stripe:"
|
1877 |
-
msgstr "Chyba při vytváření zákazníka nahrána do Stripe:"
|
1878 |
-
|
1879 |
-
#: classes/gateways/class.pmprogateway_stripe.php:279
|
1880 |
-
#: classes/gateways/class.pmprogateway_stripe.php:278
|
1881 |
-
msgid "Error creating plan with Stripe:"
|
1882 |
-
msgstr "Chyba vytvoření plánu pomocí Stripe:"
|
1883 |
-
|
1884 |
-
#: classes/gateways/class.pmprogateway_stripe.php:295
|
1885 |
-
#: classes/gateways/class.pmprogateway_stripe.php:294
|
1886 |
-
msgid "Error subscribing customer to plan with Stripe:"
|
1887 |
-
msgstr "Chyba při objednání zákazníka nahrána do Stripe:"
|
1888 |
-
|
1889 |
-
#: includes/adminpages.php:9 includes/adminpages.php:39
|
1890 |
-
msgid "Memberships"
|
1891 |
-
msgstr "Členství"
|
1892 |
-
|
1893 |
-
#: includes/adminpages.php:10 includes/adminpages.php:49
|
1894 |
-
msgid "Page Settings"
|
1895 |
-
msgstr "Nastavení stránek"
|
1896 |
-
|
1897 |
-
#: includes/adminpages.php:11 includes/adminpages.php:54
|
1898 |
-
msgid "Payment Settings"
|
1899 |
-
msgstr "Nastavení plateb"
|
1900 |
-
|
1901 |
-
#: includes/adminpages.php:16 includes/adminpages.php:79
|
1902 |
-
msgid "Reports"
|
1903 |
-
msgstr "Statistiky"
|
1904 |
-
|
1905 |
-
#: includes/adminpages.php:18 includes/adminpages.php:89
|
1906 |
-
msgid "Discount Codes"
|
1907 |
-
msgstr "Slevové kupóny"
|
1908 |
-
|
1909 |
-
#: includes/cleanup.php:24
|
1910 |
-
#, php-format
|
1911 |
-
msgid ""
|
1912 |
-
"There was an error canceling the subscription for user with ID=%s. You will "
|
1913 |
-
"want to check your payment gateway to see if their subscription is still "
|
1914 |
-
"active."
|
1915 |
-
msgstr ""
|
1916 |
-
"Došlo k chybě při zrušení předplatného pro uživatele s ID=%s. Budete chtít "
|
1917 |
-
"zkontrolovat platební bránu, zda je jejich předplatné stále aktivní?"
|
1918 |
-
|
1919 |
-
#: includes/currencies.php:7 includes/currencies.php:44
|
1920 |
-
#: includes/currencies.php:37
|
1921 |
-
msgid "US Dollars ($)"
|
1922 |
-
msgstr "Americký dolar ($)"
|
1923 |
-
|
1924 |
-
#: includes/currencies.php:8 includes/currencies.php:47
|
1925 |
-
#: includes/currencies.php:40
|
1926 |
-
msgid "Euros (€)"
|
1927 |
-
msgstr "Euro (€)"
|
1928 |
-
|
1929 |
-
#: includes/currencies.php:9 includes/currencies.php:46
|
1930 |
-
#: includes/currencies.php:39
|
1931 |
-
msgid "Pounds Sterling (£)"
|
1932 |
-
msgstr "Libra (£)"
|
1933 |
-
|
1934 |
-
#: includes/currencies.php:10
|
1935 |
-
msgid "Australian Dollars ($)"
|
1936 |
-
msgstr "Australský dolar ($)"
|
1937 |
-
|
1938 |
-
#: includes/currencies.php:11
|
1939 |
-
msgid "Brazilian Real ($)"
|
1940 |
-
msgstr "Brazilský real ($)"
|
1941 |
-
|
1942 |
-
#: includes/currencies.php:12 includes/currencies.php:45
|
1943 |
-
#: includes/currencies.php:38
|
1944 |
-
msgid "Canadian Dollars ($)"
|
1945 |
-
msgstr "Kanadský dolar ($)"
|
1946 |
-
|
1947 |
-
#: includes/currencies.php:13
|
1948 |
-
msgid "Chinese Yuan"
|
1949 |
-
msgstr "Čínský Jen"
|
1950 |
-
|
1951 |
-
#: includes/currencies.php:14 includes/currencies.php:13
|
1952 |
-
msgid "Czech Koruna"
|
1953 |
-
msgstr "Český koruna"
|
1954 |
-
|
1955 |
-
#: includes/currencies.php:15 includes/currencies.php:14
|
1956 |
-
msgid "Danish Krone"
|
1957 |
-
msgstr "Dánská koruna"
|
1958 |
-
|
1959 |
-
#: includes/currencies.php:16 includes/currencies.php:15
|
1960 |
-
msgid "Hong Kong Dollar ($)"
|
1961 |
-
msgstr "Hong Kongský dolar ($)"
|
1962 |
-
|
1963 |
-
#: includes/currencies.php:17 includes/currencies.php:16
|
1964 |
-
msgid "Hungarian Forint"
|
1965 |
-
msgstr "Maďarský forint"
|
1966 |
-
|
1967 |
-
#: includes/currencies.php:18
|
1968 |
-
msgid "Indian Rupee"
|
1969 |
-
msgstr "Indická rupie"
|
1970 |
-
|
1971 |
-
#: includes/currencies.php:19
|
1972 |
-
msgid "Indonesia Rupiah"
|
1973 |
-
msgstr "Indonézská rupie"
|
1974 |
-
|
1975 |
-
#: includes/currencies.php:20 includes/currencies.php:17
|
1976 |
-
msgid "Israeli Shekel"
|
1977 |
-
msgstr "Izraelský Shekel"
|
1978 |
-
|
1979 |
-
#: includes/currencies.php:21 includes/currencies.php:18
|
1980 |
-
msgid "Japanese Yen (¥)"
|
1981 |
-
msgstr "Japonský Jen (¥)"
|
1982 |
-
|
1983 |
-
#: includes/currencies.php:22 includes/currencies.php:19
|
1984 |
-
msgid "Malaysian Ringgits"
|
1985 |
-
msgstr "Malajský ringgits"
|
1986 |
-
|
1987 |
-
#: includes/currencies.php:23 includes/currencies.php:20
|
1988 |
-
msgid "Mexican Peso ($)"
|
1989 |
-
msgstr "Mexické peso ($)"
|
1990 |
-
|
1991 |
-
#: includes/currencies.php:24 includes/currencies.php:21
|
1992 |
-
msgid "New Zealand Dollar ($)"
|
1993 |
-
msgstr "Novozélanský dolar ($)"
|
1994 |
-
|
1995 |
-
#: includes/currencies.php:25 includes/currencies.php:22
|
1996 |
-
msgid "Norwegian Krone"
|
1997 |
-
msgstr "Norská koruna"
|
1998 |
-
|
1999 |
-
#: includes/currencies.php:26 includes/currencies.php:23
|
2000 |
-
msgid "Philippine Pesos"
|
2001 |
-
msgstr "Filipínské pesos"
|
2002 |
-
|
2003 |
-
#: includes/currencies.php:27 includes/currencies.php:24
|
2004 |
-
msgid "Polish Zloty"
|
2005 |
-
msgstr "Polský zlotý"
|
2006 |
-
|
2007 |
-
#: includes/currencies.php:28 includes/currencies.php:25
|
2008 |
-
msgid "Singapore Dollar ($)"
|
2009 |
-
msgstr "Singapurský dolar ($)"
|
2010 |
-
|
2011 |
-
#: includes/currencies.php:29
|
2012 |
-
msgid "South African Rand"
|
2013 |
-
msgstr "Jihoafrický Rand"
|
2014 |
-
|
2015 |
-
#: includes/currencies.php:30
|
2016 |
-
msgid "South Korean Won"
|
2017 |
-
msgstr "Jihokorejský Won"
|
2018 |
-
|
2019 |
-
#: includes/currencies.php:31 includes/currencies.php:26
|
2020 |
-
msgid "Swedish Krona"
|
2021 |
-
msgstr "švédská koruna"
|
2022 |
-
|
2023 |
-
#: includes/currencies.php:32 includes/currencies.php:27
|
2024 |
-
msgid "Swiss Franc"
|
2025 |
-
msgstr "Švýcarský Frank"
|
2026 |
-
|
2027 |
-
#: includes/currencies.php:33 includes/currencies.php:28
|
2028 |
-
msgid "Taiwan New Dollars"
|
2029 |
-
msgstr "Taiwanský noví dolar"
|
2030 |
-
|
2031 |
-
#: includes/currencies.php:34 includes/currencies.php:29
|
2032 |
-
msgid "Thai Baht"
|
2033 |
-
msgstr "Thaiský Baht"
|
2034 |
-
|
2035 |
-
#: includes/currencies.php:35
|
2036 |
-
msgid "Turkish Lira"
|
2037 |
-
msgstr "Turecká lira"
|
2038 |
-
|
2039 |
-
#: includes/currencies.php:36
|
2040 |
-
msgid "Vietnamese Dong"
|
2041 |
-
msgstr "Vietnamský Dong"
|
2042 |
-
|
2043 |
-
#: includes/functions.php:196 includes/functions.php:160
|
2044 |
-
#, php-format
|
2045 |
-
msgid "The price for membership is <strong>%s</strong> now"
|
2046 |
-
msgstr "Cena za členství je nyní <strong>%s</strong>"
|
2047 |
-
|
2048 |
-
#: includes/functions.php:205 includes/functions.php:169
|
2049 |
-
#, php-format
|
2050 |
-
msgid " and then <strong>%s per %s for %d more %s</strong>."
|
2051 |
-
msgstr "a pak <strong>%s na %s pro %d další %s</strong>."
|
2052 |
-
|
2053 |
-
#: includes/functions.php:209 includes/functions.php:173
|
2054 |
-
#, php-format
|
2055 |
-
msgid " and then <strong>%s every %d %s for %d more %s</strong>."
|
2056 |
-
msgstr "a pak <strong>%s každý %d %s pro %d více %s</strong>."
|
2057 |
-
|
2058 |
-
#: includes/functions.php:214 includes/functions.php:178
|
2059 |
-
#, php-format
|
2060 |
-
msgid " and then <strong>%s after %d %s</strong>."
|
2061 |
-
msgstr "a pak <strong>%s po %d %s</strong>."
|
2062 |
-
|
2063 |
-
#: includes/functions.php:220 includes/functions.php:184
|
2064 |
-
#, php-format
|
2065 |
-
msgid " and then <strong>%s per %s</strong>."
|
2066 |
-
msgstr "a pak <strong>%s na %s</strong>."
|
2067 |
-
|
2068 |
-
#: includes/functions.php:224 includes/functions.php:188
|
2069 |
-
#, php-format
|
2070 |
-
msgid " and then <strong>%s every %d %s</strong>."
|
2071 |
-
msgstr "a pak <strong>%s každý %d %s</strong>."
|
2072 |
-
|
2073 |
-
#: includes/functions.php:238 pages/levels.php:82 includes/functions.php:202
|
2074 |
-
msgid "After your initial payment, your first payment is Free."
|
2075 |
-
msgstr "Pro vaši výchozí platbu je první platba zdarma."
|
2076 |
-
|
2077 |
-
#: includes/functions.php:242 pages/levels.php:86 includes/functions.php:206
|
2078 |
-
#, php-format
|
2079 |
-
msgid "After your initial payment, your first %d payments are Free."
|
2080 |
-
msgstr "Pro vaši výchozí platbu jsou vaše %d platby zdarma"
|
2081 |
-
|
2082 |
-
#: includes/functions.php:249 pages/levels.php:93 includes/functions.php:213
|
2083 |
-
#, php-format
|
2084 |
-
msgid "After your initial payment, your first payment will cost %s."
|
2085 |
-
msgstr "Pro vaši výchozí platbu bude vaše první platba stát %s."
|
2086 |
-
|
2087 |
-
#: includes/functions.php:253 pages/levels.php:97 includes/functions.php:217
|
2088 |
-
#, php-format
|
2089 |
-
msgid "After your initial payment, your first %d payments will cost %s."
|
2090 |
-
msgstr "Pro vaši výchozí platbu bude vaše první %d platby stát %s."
|
2091 |
-
|
2092 |
-
#: includes/functions.php:264 includes/functions.php:228
|
2093 |
-
#, php-format
|
2094 |
-
msgid "Customers in %s will be charged %s%% tax."
|
2095 |
-
msgstr "Zákazníkovi %s bude účtována %s%% daň."
|
2096 |
-
|
2097 |
-
#: includes/functions.php:278 includes/functions.php:242
|
2098 |
-
#, php-format
|
2099 |
-
msgid "Membership expires after %d %s."
|
2100 |
-
msgstr "Členství vyprší %d %s."
|
2101 |
-
|
2102 |
-
#: includes/functions.php:514 includes/functions.php:491
|
2103 |
-
msgid "User ID not found."
|
2104 |
-
msgstr "Uživatelské ID nenalezeno."
|
2105 |
-
|
2106 |
-
#: includes/functions.php:531 includes/functions.php:508
|
2107 |
-
msgid "Invalid level."
|
2108 |
-
msgstr "špatná úroveň."
|
2109 |
-
|
2110 |
-
#: includes/functions.php:542 includes/functions.php:520
|
2111 |
-
msgid "not changing?"
|
2112 |
-
msgstr "bez změn?"
|
2113 |
-
|
2114 |
-
#: includes/functions.php:559 includes/functions.php:605
|
2115 |
-
#: includes/functions.php:614 includes/functions.php:537
|
2116 |
-
#: includes/functions.php:583 includes/functions.php:592
|
2117 |
-
msgid "Error interacting with database"
|
2118 |
-
msgstr "Chyba interakce s databází"
|
2119 |
-
|
2120 |
-
#: includes/functions.php:651 includes/functions.php:690
|
2121 |
-
#: includes/functions.php:629 includes/functions.php:668
|
2122 |
-
msgid "Membership level not found."
|
2123 |
-
msgstr "Uživatelská úroveň nenalezena."
|
2124 |
-
|
2125 |
-
#: includes/functions.php:1072 includes/functions.php:1050
|
2126 |
-
msgid "The discount code could not be found."
|
2127 |
-
msgstr "Slevový kupón nenalezen."
|
2128 |
-
|
2129 |
-
#: includes/functions.php:1088 includes/functions.php:1066
|
2130 |
-
#, php-format
|
2131 |
-
msgid "This discount code goes into effect on %s."
|
2132 |
-
msgstr "Slevový kupón bude platný od %s."
|
2133 |
-
|
2134 |
-
#: includes/functions.php:1097 includes/functions.php:1075
|
2135 |
-
#, php-format
|
2136 |
-
msgid "This discount code expired on %s."
|
2137 |
-
msgstr "Tento slevový kupón vyprší %s."
|
2138 |
-
|
2139 |
-
#: includes/functions.php:1109 includes/functions.php:1087
|
2140 |
-
msgid "This discount code is no longer valid."
|
2141 |
-
msgstr "Tento slevový kupó již není platný."
|
2142 |
-
|
2143 |
-
#: includes/functions.php:1124 includes/functions.php:1102
|
2144 |
-
msgid "This discount code does not apply to this membership level."
|
2145 |
-
msgstr "Tento slevový kupón nelze použit pro tuto členskou úroveň."
|
2146 |
-
|
2147 |
-
#: includes/functions.php:1132 includes/functions.php:1110
|
2148 |
-
msgid "This discount code is okay."
|
2149 |
-
msgstr "Slevový kupón je vpořádku."
|
2150 |
-
|
2151 |
-
#: includes/functions.php:1156 includes/functions.php:1134
|
2152 |
-
msgid "and"
|
2153 |
-
msgstr "a"
|
2154 |
-
|
2155 |
-
#: includes/functions.php:1341 includes/functions.php:1319
|
2156 |
-
msgid "Sign Up for !!name!! Now"
|
2157 |
-
msgstr "Přihlašte se !!name!! nyní"
|
2158 |
-
|
2159 |
-
#: includes/functions.php:1347 includes/functions.php:1325
|
2160 |
-
msgid "Please specify a level id."
|
2161 |
-
msgstr "Zadejte číslo úrovně."
|
2162 |
-
|
2163 |
-
#: includes/localization.php:23
|
2164 |
-
msgid "Day"
|
2165 |
-
msgstr "Den"
|
2166 |
-
|
2167 |
-
#: includes/localization.php:25
|
2168 |
-
msgid "Week"
|
2169 |
-
msgstr "Týden"
|
2170 |
-
|
2171 |
-
#: includes/localization.php:27
|
2172 |
-
msgid "Month"
|
2173 |
-
msgstr "Měsíc"
|
2174 |
-
|
2175 |
-
#: includes/localization.php:29
|
2176 |
-
msgid "Year"
|
2177 |
-
msgstr "Rok"
|
2178 |
-
|
2179 |
-
#: includes/metaboxes.php:38
|
2180 |
-
msgid ""
|
2181 |
-
"This post is already protected for this level because it is within a "
|
2182 |
-
"category that requires membership."
|
2183 |
-
msgstr ""
|
2184 |
-
"Tento příspěvek je již chráněna pro tuto úrověň, protože je v kategorii, "
|
2185 |
-
"která vyžaduje členství."
|
2186 |
-
|
2187 |
-
#: includes/metaboxes.php:99 includes/metaboxes.php:100
|
2188 |
-
msgid "Require Membership"
|
2189 |
-
msgstr "Vyžadovat členství"
|
2190 |
-
|
2191 |
-
#: includes/profile.php:36 includes/profile.php:34
|
2192 |
-
msgid "Current Level"
|
2193 |
-
msgstr "Aktuální úrověň"
|
2194 |
-
|
2195 |
-
#: includes/profile.php:39 includes/profile.php:37
|
2196 |
-
msgid "None"
|
2197 |
-
msgstr "Nic"
|
2198 |
-
|
2199 |
-
#: includes/profile.php:84 includes/profile.php:82
|
2200 |
-
msgid "User is not paying."
|
2201 |
-
msgstr "Uživatel nezaplatil."
|
2202 |
-
|
2203 |
-
#: pages/account.php:10
|
2204 |
-
msgid "Your membership is <strong>active</strong>."
|
2205 |
-
msgstr "Vaše členství je <strong>aktivní</strong>."
|
2206 |
-
|
2207 |
-
#: pages/account.php:12 pages/billing.php:16 pages/levels.php:13
|
2208 |
-
msgid "Level"
|
2209 |
-
msgstr "Úroveň"
|
2210 |
-
|
2211 |
-
#: pages/account.php:14 pages/billing.php:18
|
2212 |
-
msgid "Membership Fee"
|
2213 |
-
msgstr "členský poplatek"
|
2214 |
-
|
2215 |
-
#: pages/account.php:25 pages/billing.php:29
|
2216 |
-
msgid "Duration"
|
2217 |
-
msgstr "Trvání"
|
2218 |
-
|
2219 |
-
#: pages/account.php:29 pages/confirmation.php:49 pages/invoice.php:30
|
2220 |
-
#: pages/confirmation.php:48 pages/invoice.php:29
|
2221 |
-
msgid "Membership Expires"
|
2222 |
-
msgstr "členství vyprší"
|
2223 |
-
|
2224 |
-
#: pages/account.php:34
|
2225 |
-
#, php-format
|
2226 |
-
msgid "Your first payment will cost %s."
|
2227 |
-
msgstr "Vaše první platba bude stát %s."
|
2228 |
-
|
2229 |
-
#: pages/account.php:38
|
2230 |
-
#, php-format
|
2231 |
-
msgid "Your first %d payments will cost %s."
|
2232 |
-
msgstr "Vaše první %d budou stát %s."
|
2233 |
-
|
2234 |
-
#: pages/account.php:46
|
2235 |
-
msgid "My Account"
|
2236 |
-
msgstr "Muj účet"
|
2237 |
-
|
2238 |
-
#: pages/account.php:55
|
2239 |
-
msgid "Edit Profile"
|
2240 |
-
msgstr "Upravit profil"
|
2241 |
-
|
2242 |
-
#: pages/account.php:56
|
2243 |
-
msgid "Change Password"
|
2244 |
-
msgstr "Změnit heslo"
|
2245 |
-
|
2246 |
-
#: pages/account.php:87
|
2247 |
-
msgid "Billing Information"
|
2248 |
-
msgstr "Fakturační údaje"
|
2249 |
-
|
2250 |
-
#: pages/account.php:105 pages/confirmation.php:63 pages/invoice.php:50
|
2251 |
-
#: pages/confirmation.php:61 pages/invoice.php:48
|
2252 |
-
msgid "Payment Method"
|
2253 |
-
msgstr "Platební metody"
|
2254 |
-
|
2255 |
-
#: pages/account.php:114
|
2256 |
-
msgid "Edit Billing Information"
|
2257 |
-
msgstr "Upravit fakturační údaje"
|
2258 |
-
|
2259 |
-
#: pages/account.php:125
|
2260 |
-
msgid "Past Invoices"
|
2261 |
-
msgstr "Minulé faktury"
|
2262 |
-
|
2263 |
-
#: pages/account.php:140
|
2264 |
-
msgid "View All Invoices"
|
2265 |
-
msgstr "Zobrazit všechny faktury"
|
2266 |
-
|
2267 |
-
#: pages/account.php:146
|
2268 |
-
msgid "Member Links"
|
2269 |
-
msgstr "Odkazy členů"
|
2270 |
-
|
2271 |
-
#: pages/account.php:152
|
2272 |
-
msgid "Update Billing Information"
|
2273 |
-
msgstr "Upravit fakturační údaje"
|
2274 |
-
|
2275 |
-
#: pages/account.php:155
|
2276 |
-
msgid "Change Membership Level"
|
2277 |
-
msgstr "Změnit úroveň členství"
|
2278 |
-
|
2279 |
-
#: pages/account.php:157
|
2280 |
-
msgid "Cancel Membership"
|
2281 |
-
msgstr "Zrušení členství"
|
2282 |
-
|
2283 |
-
#: pages/billing.php:14
|
2284 |
-
#, php-format
|
2285 |
-
msgid "Logged in as <strong>%s</strong>."
|
2286 |
-
msgstr "Přihlášen jako <strong>%s</strong>."
|
2287 |
-
|
2288 |
-
#: pages/billing.php:14
|
2289 |
-
msgid "logout"
|
2290 |
-
msgstr "odhlásit"
|
2291 |
-
|
2292 |
-
#: pages/billing.php:39
|
2293 |
-
msgid ""
|
2294 |
-
"Your payment subscription is managed by PayPal. Please <a href=\"http://www."
|
2295 |
-
"paypal.com\">login to PayPal here</a> to update your billing information."
|
2296 |
-
msgstr ""
|
2297 |
-
"Váš odběr plateb řídí PayPal. <a href=\"http://www.paypal.com\">Přihlašte se "
|
2298 |
-
"do PayPal</a> a aktualizujte své fakturační údaje."
|
2299 |
-
|
2300 |
-
#: pages/billing.php:65 pages/checkout.php:328 pages/checkout.php:321
|
2301 |
-
msgid "First Name"
|
2302 |
-
msgstr "Jméno"
|
2303 |
-
|
2304 |
-
#: pages/billing.php:69 pages/checkout.php:332 pages/checkout.php:325
|
2305 |
-
msgid "Last Name"
|
2306 |
-
msgstr "Příjmení"
|
2307 |
-
|
2308 |
-
#: pages/billing.php:73 pages/checkout.php:336 pages/checkout.php:329
|
2309 |
-
msgid "Address 1"
|
2310 |
-
msgstr "Adresa 1"
|
2311 |
-
|
2312 |
-
#: pages/billing.php:77 pages/checkout.php:340 pages/checkout.php:333
|
2313 |
-
msgid "Address 2"
|
2314 |
-
msgstr "Adresa 2"
|
2315 |
-
|
2316 |
-
#: pages/billing.php:87 pages/checkout.php:350 pages/checkout.php:343
|
2317 |
-
msgid "City"
|
2318 |
-
msgstr "Město"
|
2319 |
-
|
2320 |
-
#: pages/billing.php:91 pages/checkout.php:354 pages/checkout.php:347
|
2321 |
-
msgid "State"
|
2322 |
-
msgstr "Stát"
|
2323 |
-
|
2324 |
-
#: pages/billing.php:95 pages/checkout.php:358 pages/checkout.php:351
|
2325 |
-
msgid "Postal Code"
|
2326 |
-
msgstr "PSČ"
|
2327 |
-
|
2328 |
-
#: pages/billing.php:104 pages/checkout.php:367 pages/checkout.php:360
|
2329 |
-
msgid "City, State Zip"
|
2330 |
-
msgstr "Město, PSČ státu"
|
2331 |
-
|
2332 |
-
#: pages/billing.php:157 pages/checkout.php:420 pages/checkout.php:413
|
2333 |
-
msgid "Country"
|
2334 |
-
msgstr "Země"
|
2335 |
-
|
2336 |
-
#: pages/billing.php:182 pages/checkout.php:445 pages/checkout.php:438
|
2337 |
-
msgid "Phone"
|
2338 |
-
msgstr "Telefon"
|
2339 |
-
|
2340 |
-
#: pages/billing.php:193 pages/checkout.php:207 pages/checkout.php:460
|
2341 |
-
#: pages/checkout.php:204 pages/checkout.php:453
|
2342 |
-
msgid "E-mail Address"
|
2343 |
-
msgstr "E-mail"
|
2344 |
-
|
2345 |
-
#: pages/billing.php:197 pages/checkout.php:469 pages/checkout.php:462
|
2346 |
-
msgid "Confirm E-mail"
|
2347 |
-
msgstr "Potvrdit e-mail"
|
2348 |
-
|
2349 |
-
#: pages/billing.php:217
|
2350 |
-
msgid "Credit Card Information"
|
2351 |
-
msgstr "Informace o platební kartě"
|
2352 |
-
|
2353 |
-
#: pages/billing.php:217
|
2354 |
-
#, php-format
|
2355 |
-
msgid "We accept %s"
|
2356 |
-
msgstr "Přijímáme %s"
|
2357 |
-
|
2358 |
-
#: pages/billing.php:244 pages/checkout.php:527 pages/checkout.php:520
|
2359 |
-
msgid "Card Number"
|
2360 |
-
msgstr "Číslo karty"
|
2361 |
-
|
2362 |
-
#: pages/billing.php:281 pages/checkout.php:564 pages/checkout.php:557
|
2363 |
-
msgid "CVV"
|
2364 |
-
msgstr "CVV"
|
2365 |
-
|
2366 |
-
#: pages/billing.php:282 pages/checkout.php:565 pages/checkout.php:558
|
2367 |
-
msgid "what's this?"
|
2368 |
-
msgstr "Co je toto?"
|
2369 |
-
|
2370 |
-
#: pages/billing.php:294
|
2371 |
-
msgid "Update"
|
2372 |
-
msgstr "Upraveno"
|
2373 |
-
|
2374 |
-
#: pages/billing.php:309
|
2375 |
-
msgid ""
|
2376 |
-
"This subscription is not recurring. So you don't need to update your billing "
|
2377 |
-
"information."
|
2378 |
-
msgstr ""
|
2379 |
-
"Tento odběr se neopakuje, takže nemusíte aktualizovat své fakturační údaje."
|
2380 |
-
|
2381 |
-
#: pages/cancel.php:14
|
2382 |
-
msgid "Are you sure you want to cancel your membership?"
|
2383 |
-
msgstr "Jste si jisti, že chcete zrušit Vaše členství?"
|
2384 |
-
|
2385 |
-
#: pages/cancel.php:17
|
2386 |
-
msgid "Yes, cancel my account"
|
2387 |
-
msgstr "Ano, chci zrušit účet"
|
2388 |
-
|
2389 |
-
#: pages/cancel.php:19
|
2390 |
-
msgid "No, keep my account"
|
2391 |
-
msgstr "Ne, chci si ponechat účet"
|
2392 |
-
|
2393 |
-
#: pages/cancel.php:22
|
2394 |
-
msgid "Click here to go to the home page."
|
2395 |
-
msgstr "Pro návrat na hlavní stranu klikněte zde."
|
2396 |
-
|
2397 |
-
#: pages/checkout.php:26 pages/checkout.php:27
|
2398 |
-
msgid ""
|
2399 |
-
"Almost done. Review the membership information and pricing below then "
|
2400 |
-
"<strong>click the \"Complete Payment\" button</strong> to finish your order."
|
2401 |
-
msgstr ""
|
2402 |
-
"Téměř hotovo. Zkontrolujte informace o členství a ceny níže, pak "
|
2403 |
-
"<strong>klikněte na tlačítko \"Complete Payment\" </ strong> a objednávka "
|
2404 |
-
"se dokončí."
|
2405 |
-
|
2406 |
-
#: pages/checkout.php:33 pages/checkout.php:34
|
2407 |
-
msgid "change"
|
2408 |
-
msgstr "změna"
|
2409 |
-
|
2410 |
-
#: pages/checkout.php:41 pages/checkout.php:42
|
2411 |
-
#, php-format
|
2412 |
-
msgid "You have selected the <strong>%s</strong> membership level."
|
2413 |
-
msgstr "Vybrali jste si <strong>%s</strong> úřověň členství."
|
2414 |
-
|
2415 |
-
#: pages/checkout.php:51 pages/checkout.php:52
|
2416 |
-
#, php-format
|
2417 |
-
msgid "<p>The <strong>%s</strong> code has been applied to your order.</p>"
|
2418 |
-
msgstr "<p><strong>%s</strong> kupón byl použit k Vaši objednávce.</p>"
|
2419 |
-
|
2420 |
-
#: pages/checkout.php:62 services/applydiscountcode.php:74
|
2421 |
-
#: pages/checkout.php:63
|
2422 |
-
msgid "Click here to change your discount code"
|
2423 |
-
msgstr "Pro úpravu slevového kupónu klikněte zde"
|
2424 |
-
|
2425 |
-
#: pages/checkout.php:64 pages/checkout.php:65
|
2426 |
-
msgid "Click here to enter your discount code"
|
2427 |
-
msgstr "Pro vložení slevového kupónu klikněte zde"
|
2428 |
-
|
2429 |
-
#: pages/checkout.php:64 pages/checkout.php:65
|
2430 |
-
msgid "Do you have a discount code?"
|
2431 |
-
msgstr "Chcete použít slevový kupón?"
|
2432 |
-
|
2433 |
-
#: pages/checkout.php:78 pages/checkout.php:575 pages/checkout.php:79
|
2434 |
-
#: pages/checkout.php:568
|
2435 |
-
msgid "Apply"
|
2436 |
-
msgstr "použít"
|
2437 |
-
|
2438 |
-
#: pages/checkout.php:163 pages/checkout.php:160
|
2439 |
-
msgid "Account Information"
|
2440 |
-
msgstr "Informace o účtu"
|
2441 |
-
|
2442 |
-
#: pages/checkout.php:163 pages/checkout.php:160
|
2443 |
-
msgid "Already have an account?"
|
2444 |
-
msgstr "Máte již svůj účet?"
|
2445 |
-
|
2446 |
-
#: pages/checkout.php:163 pages/checkout.php:160
|
2447 |
-
msgid "Log in here"
|
2448 |
-
msgstr "Přihlašte se zde"
|
2449 |
-
|
2450 |
-
#: pages/checkout.php:189 pages/checkout.php:186
|
2451 |
-
msgid "Confirm Password"
|
2452 |
-
msgstr "Potvrzení hesla"
|
2453 |
-
|
2454 |
-
#: pages/checkout.php:216 pages/checkout.php:213
|
2455 |
-
msgid "Confirm E-mail Address"
|
2456 |
-
msgstr "Potvrzení e-mailové adresy"
|
2457 |
-
|
2458 |
-
#: pages/checkout.php:235 pages/checkout.php:232
|
2459 |
-
msgid "Full Name"
|
2460 |
-
msgstr "Celé jméno"
|
2461 |
-
|
2462 |
-
#: pages/checkout.php:236 pages/checkout.php:233
|
2463 |
-
msgid "LEAVE THIS BLANK"
|
2464 |
-
msgstr "VZÍT ZPĚT"
|
2465 |
-
|
2466 |
-
#: pages/checkout.php:260 pages/checkout.php:257
|
2467 |
-
#, php-format
|
2468 |
-
msgid ""
|
2469 |
-
"You are logged in as <strong>%s</strong>. If you would like to use a "
|
2470 |
-
"different account for this membership, <a href=\"%s\">log out now</a>."
|
2471 |
-
msgstr ""
|
2472 |
-
"Jste přihlášen jako <strong>%s</strong>. Pokud jste chtěl použít jiný účet, "
|
2473 |
-
"<a href=\"%s\">odhlašte se</a>."
|
2474 |
-
|
2475 |
-
#: pages/checkout.php:284 pages/checkout.php:277
|
2476 |
-
#, php-format
|
2477 |
-
msgid "I agree to the %s"
|
2478 |
-
msgstr "Souhlasím s %s"
|
2479 |
-
|
2480 |
-
#: pages/checkout.php:299 pages/checkout.php:292
|
2481 |
-
msgid "Choose your Payment Method"
|
2482 |
-
msgstr "Zvolte vaši platební metodu"
|
2483 |
-
|
2484 |
-
#: pages/checkout.php:307 pages/checkout.php:300
|
2485 |
-
msgid "Check Out with a Credit Card Here"
|
2486 |
-
msgstr "Zde ověřte Vaši kreditní kartu"
|
2487 |
-
|
2488 |
-
#: pages/checkout.php:309 pages/checkout.php:682 pages/checkout.php:302
|
2489 |
-
#: pages/checkout.php:675
|
2490 |
-
msgid "Check Out with PayPal"
|
2491 |
-
msgstr "Zde ověřte PayPal"
|
2492 |
-
|
2493 |
-
#: pages/checkout.php:500 pages/checkout.php:493
|
2494 |
-
msgid "Payment Information"
|
2495 |
-
msgstr "Platební informace"
|
2496 |
-
|
2497 |
-
#: pages/checkout.php:500 pages/checkout.php:493
|
2498 |
-
#, php-format
|
2499 |
-
msgid "We Accept %s"
|
2500 |
-
msgstr "Přijímáme %s"
|
2501 |
-
|
2502 |
-
#: pages/checkout.php:674 pages/checkout.php:667
|
2503 |
-
msgid "Complete Payment"
|
2504 |
-
msgstr "Kompletní platby"
|
2505 |
-
|
2506 |
-
#: pages/checkout.php:688 pages/checkout.php:681
|
2507 |
-
msgid "Submit and Check Out"
|
2508 |
-
msgstr "Ověřit a odeslat"
|
2509 |
-
|
2510 |
-
#: pages/checkout.php:688 pages/checkout.php:681
|
2511 |
-
msgid "Submit and Confirm"
|
2512 |
-
msgstr "Potvrdit a odeslat"
|
2513 |
-
|
2514 |
-
#: pages/checkout.php:688
|
2515 |
-
msgid "Submit and Pay with 2CheckOut"
|
2516 |
-
msgstr "Zaplatit a odeslat pomocí 2CheckOut"
|
2517 |
-
|
2518 |
-
#: pages/checkout.php:694 pages/checkout.php:687
|
2519 |
-
msgid "Processing..."
|
2520 |
-
msgstr "Zpracování..."
|
2521 |
-
|
2522 |
-
#: pages/confirmation.php:12
|
2523 |
-
msgid ""
|
2524 |
-
"Your payment has been submitted. Your membership will be activated shortly."
|
2525 |
-
msgstr "Platba přijata. Vaše členství bude zakrátko aktivní."
|
2526 |
-
|
2527 |
-
#: pages/confirmation.php:14
|
2528 |
-
#, php-format
|
2529 |
-
msgid "Thank you for your membership to %s. Your %s membership is now active."
|
2530 |
-
msgstr "Děkujeme Vám za vaše členství na %s Váše %s členství je nyní aktivní."
|
2531 |
-
|
2532 |
-
#: pages/confirmation.php:28
|
2533 |
-
#, php-format
|
2534 |
-
msgid ""
|
2535 |
-
"Below are details about your membership account and a receipt for your "
|
2536 |
-
"initial membership invoice. A welcome email with a copy of your initial "
|
2537 |
-
"membership invoice has been sent to %s."
|
2538 |
-
msgstr ""
|
2539 |
-
"Níže jsou uvedeny informace o vašem členském účtu. Uvítací e-mail s kopií "
|
2540 |
-
"vašeho členství byl odeslán na % s."
|
2541 |
-
|
2542 |
-
#: pages/confirmation.php:41 pages/invoice.php:22
|
2543 |
-
#, php-format
|
2544 |
-
msgid "Invoice #%s on %s"
|
2545 |
-
msgstr "Faktura #%s na %s"
|
2546 |
-
|
2547 |
-
#: pages/confirmation.php:43
|
2548 |
-
msgid "Print"
|
2549 |
-
msgstr "Tisk"
|
2550 |
-
|
2551 |
-
#: pages/confirmation.php:46 pages/confirmation.php:104 pages/invoice.php:27
|
2552 |
-
#: pages/confirmation.php:45 pages/confirmation.php:102 pages/invoice.php:26
|
2553 |
-
msgid "Account"
|
2554 |
-
msgstr "Účet"
|
2555 |
-
|
2556 |
-
#: pages/confirmation.php:65 pages/invoice.php:52 pages/invoice.php:109
|
2557 |
-
#: pages/confirmation.php:63 pages/invoice.php:50 pages/invoice.php:107
|
2558 |
-
msgid "Total Billed"
|
2559 |
-
msgstr "Celkový účet"
|
2560 |
-
|
2561 |
-
#: pages/confirmation.php:82 pages/invoice.php:69 pages/confirmation.php:80
|
2562 |
-
#: pages/invoice.php:67
|
2563 |
-
msgid "ending in"
|
2564 |
-
msgstr "Končí"
|
2565 |
-
|
2566 |
-
#: pages/confirmation.php:97 pages/confirmation.php:95
|
2567 |
-
#, php-format
|
2568 |
-
msgid ""
|
2569 |
-
"Below are details about your membership account. A welcome email with has "
|
2570 |
-
"been sent to %s."
|
2571 |
-
msgstr ""
|
2572 |
-
"Níže jsou uvedeny informace o vašem účtu. Uvítací e-mail byl odeslán na %s."
|
2573 |
-
|
2574 |
-
#: pages/confirmation.php:105 pages/confirmation.php:103
|
2575 |
-
msgid "Pending"
|
2576 |
-
msgstr "Až do"
|
2577 |
-
|
2578 |
-
#: pages/confirmation.php:113 pages/invoice.php:141 pages/confirmation.php:111
|
2579 |
-
#: pages/invoice.php:139
|
2580 |
-
msgid "View Your Membership Account →"
|
2581 |
-
msgstr "Zobrazit Vás členský účet →"
|
2582 |
-
|
2583 |
-
#: pages/confirmation.php:115 pages/confirmation.php:113
|
2584 |
-
msgid ""
|
2585 |
-
"If your account is not activated within a few minutes, please contact the "
|
2586 |
-
"site owner."
|
2587 |
-
msgstr ""
|
2588 |
-
"Pokud není váš účet aktivován během několika minut, kontaktujte vlastníka "
|
2589 |
-
"webu."
|
2590 |
-
|
2591 |
-
#: pages/invoice.php:79 pages/invoice.php:77
|
2592 |
-
msgid "Subtotal"
|
2593 |
-
msgstr "Mezisoučet"
|
2594 |
-
|
2595 |
-
#: pages/invoice.php:82 pages/invoice.php:80
|
2596 |
-
msgid "Coupon"
|
2597 |
-
msgstr "Kupón"
|
2598 |
-
|
2599 |
-
#: pages/invoice.php:108 pages/invoice.php:106
|
2600 |
-
msgid "Invoice #"
|
2601 |
-
msgstr "Faktura #"
|
2602 |
-
|
2603 |
-
#: pages/invoice.php:122 pages/invoice.php:120
|
2604 |
-
msgid "View Invoice"
|
2605 |
-
msgstr "Zobrazit fakturu"
|
2606 |
-
|
2607 |
-
#: pages/invoice.php:134 pages/invoice.php:132
|
2608 |
-
msgid "No invoices found."
|
2609 |
-
msgstr "Faktruy nenalezeny"
|
2610 |
-
|
2611 |
-
#: pages/invoice.php:145 pages/invoice.php:143
|
2612 |
-
msgid "← View All Invoices"
|
2613 |
-
msgstr "← Zobrazení všech faktur"
|
2614 |
-
|
2615 |
-
#: pages/levels.php:15
|
2616 |
-
msgid "Subscription Information"
|
2617 |
-
msgstr "Přihlašovací informace"
|
2618 |
-
|
2619 |
-
#: pages/levels.php:33
|
2620 |
-
msgid "--"
|
2621 |
-
msgstr "--"
|
2622 |
-
|
2623 |
-
#: pages/levels.php:43
|
2624 |
-
msgid "Free"
|
2625 |
-
msgstr "Zdarma"
|
2626 |
-
|
2627 |
-
#: pages/levels.php:51
|
2628 |
-
#, php-format
|
2629 |
-
msgid "%s per %s for %d more %s."
|
2630 |
-
msgstr "%s na %s pro %d více %s."
|
2631 |
-
|
2632 |
-
#: pages/levels.php:55
|
2633 |
-
#, php-format
|
2634 |
-
msgid "%s every %d %s for %d more %s."
|
2635 |
-
msgstr "%s každý %d %s pro %d více %s."
|
2636 |
-
|
2637 |
-
#: pages/levels.php:60
|
2638 |
-
#, php-format
|
2639 |
-
msgid "%s after %d %s."
|
2640 |
-
msgstr "%s po %d %s."
|
2641 |
-
|
2642 |
-
#: pages/levels.php:66
|
2643 |
-
#, php-format
|
2644 |
-
msgid "%s per %s."
|
2645 |
-
msgstr "%s na %s."
|
2646 |
-
|
2647 |
-
#: pages/levels.php:70
|
2648 |
-
#, php-format
|
2649 |
-
msgid "%s every %d %s."
|
2650 |
-
msgstr "%s každý %d %s."
|
2651 |
-
|
2652 |
-
#: pages/levels.php:113 pages/levels.php:115
|
2653 |
-
msgid "Select"
|
2654 |
-
msgstr "Označit"
|
2655 |
-
|
2656 |
-
#: pages/levels.php:123
|
2657 |
-
msgid "Renew"
|
2658 |
-
msgstr "Obnovit"
|
2659 |
-
|
2660 |
-
#: pages/levels.php:129 pages/levels.php:117
|
2661 |
-
msgid "Your Level"
|
2662 |
-
msgstr "Vaše úrověň"
|
2663 |
-
|
2664 |
-
#: pages/levels.php:145 pages/levels.php:129
|
2665 |
-
msgid "← Return to Your Account"
|
2666 |
-
msgstr "← Návrat k účtu"
|
2667 |
-
|
2668 |
-
#: pages/levels.php:147 pages/levels.php:131
|
2669 |
-
msgid "← Return to Home"
|
2670 |
-
msgstr "← Návrat domů"
|
2671 |
-
|
2672 |
-
#: preheaders/account.php:7 preheaders/levels.php:19
|
2673 |
-
msgid "Your membership status has been updated - Thank you!"
|
2674 |
-
msgstr "Váš členský satus byl upraven - Děkujeme!"
|
2675 |
-
|
2676 |
-
#: preheaders/account.php:11 preheaders/levels.php:23
|
2677 |
-
msgid ""
|
2678 |
-
"Sorry, your request could not be completed - please try again in a few "
|
2679 |
-
"moments."
|
2680 |
-
msgstr "Váš požadavek nemůže bát dokončen - zkuste to prosím později."
|
2681 |
-
|
2682 |
-
#: preheaders/billing.php:258 preheaders/checkout.php:481
|
2683 |
-
#: preheaders/checkout.php:464
|
2684 |
-
msgid "Please complete all required fields."
|
2685 |
-
msgstr "Vyplňte všechna poviná pole."
|
2686 |
-
|
2687 |
-
#: preheaders/billing.php:263 preheaders/checkout.php:491
|
2688 |
-
#: preheaders/checkout.php:474
|
2689 |
-
msgid "Your email addresses do not match. Please try again."
|
2690 |
-
msgstr "Vaše e-mailová adresa nesouhlasí. Zadejte ji znovu"
|
2691 |
-
|
2692 |
-
#: preheaders/billing.php:268 preheaders/checkout.php:497
|
2693 |
-
#: preheaders/checkout.php:480
|
2694 |
-
msgid "The email address entered is in an invalid format. Please try again."
|
2695 |
-
msgstr ""
|
2696 |
-
"Vaše e-mailová adresa nebyla vložena ve správném formátu. Zkuste to znovu."
|
2697 |
-
|
2698 |
-
#: preheaders/billing.php:274
|
2699 |
-
msgid "All good!"
|
2700 |
-
msgstr "Vše v pořádku!"
|
2701 |
-
|
2702 |
-
#: preheaders/billing.php:340
|
2703 |
-
#, php-format
|
2704 |
-
msgid "Information updated. <a href=\"%s\">« back to my account</a>"
|
2705 |
-
msgstr "Informace upraveny. <a href=\"%s\">« zpět k Vašemu účtu</a>"
|
2706 |
-
|
2707 |
-
#: preheaders/billing.php:347
|
2708 |
-
msgid "Error updating billing information."
|
2709 |
-
msgstr "Chyba při aktualizaci faktruačních údajů."
|
2710 |
-
|
2711 |
-
#: preheaders/cancel.php:24
|
2712 |
-
msgid "Your membership has been cancelled."
|
2713 |
-
msgstr "Vaše členství bylo ukončeno."
|
2714 |
-
|
2715 |
-
#: preheaders/checkout.php:28 preheaders/checkout.php:508
|
2716 |
-
#: preheaders/checkout.php:491
|
2717 |
-
msgid "Invalid gateway."
|
2718 |
-
msgstr "Neplatná brána."
|
2719 |
-
|
2720 |
-
#: preheaders/checkout.php:96
|
2721 |
-
msgid "Checkout: Payment Information"
|
2722 |
-
msgstr "Pokladna: Informace o platbě"
|
2723 |
-
|
2724 |
-
#: preheaders/checkout.php:109
|
2725 |
-
msgid "Setup Your Account"
|
2726 |
-
msgstr "Nastavit S´áš účet"
|
2727 |
-
|
2728 |
-
#: preheaders/checkout.php:485 preheaders/checkout.php:468
|
2729 |
-
msgid "Your passwords do not match. Please try again."
|
2730 |
-
msgstr "Vaše heslo se neshoduje. Zkuste to prosím znovu."
|
2731 |
-
|
2732 |
-
#: preheaders/checkout.php:503 preheaders/checkout.php:486
|
2733 |
-
#, php-format
|
2734 |
-
msgid "Please check the box to agree to the %s."
|
2735 |
-
msgstr "Prosím, proveďte kontrolu políčka k odsouhlasení %s."
|
2736 |
-
|
2737 |
-
#: preheaders/checkout.php:512 preheaders/checkout.php:495
|
2738 |
-
msgid "Are you a spammer?"
|
2739 |
-
msgstr "Jste spamer?"
|
2740 |
-
|
2741 |
-
#: preheaders/checkout.php:535 preheaders/checkout.php:518
|
2742 |
-
msgid "That username is already taken. Please try another."
|
2743 |
-
msgstr "Toto uživatelské heslo je již použito. Prosím zkuste to znovu."
|
2744 |
-
|
2745 |
-
#: preheaders/checkout.php:541 preheaders/checkout.php:524
|
2746 |
-
msgid "That email address is already taken. Please try another."
|
2747 |
-
msgstr "Tato e-mailová adresa je již použita. Zkuste prosím jinou."
|
2748 |
-
|
2749 |
-
#: preheaders/checkout.php:561 preheaders/checkout.php:544
|
2750 |
-
#, php-format
|
2751 |
-
msgid "reCAPTCHA failed. (%s) Please try again."
|
2752 |
-
msgstr "reCAPTCHA neúspěšna. (%s) Zkuste to prosím znovu."
|
2753 |
-
|
2754 |
-
#: preheaders/checkout.php:701 preheaders/checkout.php:683
|
2755 |
-
msgid "Payment accepted."
|
2756 |
-
msgstr "Platba potvrzena."
|
2757 |
-
|
2758 |
-
#: preheaders/checkout.php:709 preheaders/checkout.php:691
|
2759 |
-
msgid ""
|
2760 |
-
"Unknown error generating account. Please contact us to setup your membership."
|
2761 |
-
msgstr ""
|
2762 |
-
"Neznámá chyba generování uživatelského účtu. Kontaktujte vlastníka webu."
|
2763 |
-
|
2764 |
-
#: preheaders/checkout.php:753 preheaders/checkout.php:822
|
2765 |
-
#: preheaders/checkout.php:735 preheaders/checkout.php:803
|
2766 |
-
msgid "The PayPal Token was lost."
|
2767 |
-
msgstr "Paypal Token byl ztracen."
|
2768 |
-
|
2769 |
-
#: preheaders/checkout.php:859 preheaders/checkout.php:825
|
2770 |
-
#: preheaders/checkout.php:844
|
2771 |
-
msgid ""
|
2772 |
-
"Your payment was accepted, but there was an error setting up your account. "
|
2773 |
-
"Please contact us."
|
2774 |
-
msgstr ""
|
2775 |
-
"Vaše platba byla přijata, ale ve vašem účtu byla objevena chyba. Prosím, "
|
2776 |
-
"kontaktujte nás."
|
2777 |
-
|
2778 |
-
#: preheaders/checkout.php:1045 preheaders/checkout.php:983
|
2779 |
-
#: preheaders/checkout.php:1030
|
2780 |
-
msgid ""
|
2781 |
-
"IMPORTANT: Something went wrong during membership creation. Your credit card "
|
2782 |
-
"authorized, but we cancelled the order immediately. You should not try to "
|
2783 |
-
"submit this form again. Please contact the site owner to fix this issue."
|
2784 |
-
msgstr ""
|
2785 |
-
"DŮLEŽITÉ: Při vytváření členství se něco pokazilo. Vaše kreditní karta je "
|
2786 |
-
"autorizována, ale objednávka byla okamžitě zrušena. Obraťte se na vlastníka "
|
2787 |
-
"stránky, který tento problém vyřeší."
|
2788 |
-
|
2789 |
-
#: preheaders/checkout.php:1050 preheaders/checkout.php:988
|
2790 |
-
#: preheaders/checkout.php:1035
|
2791 |
-
msgid ""
|
2792 |
-
"IMPORTANT: Something went wrong during membership creation. Your credit card "
|
2793 |
-
"was charged, but we couldn't assign your membership. You should not submit "
|
2794 |
-
"this form again. Please contact the site owner to fix this issue."
|
2795 |
-
msgstr ""
|
2796 |
-
"DŮLEŽITÉ: Při vytváření členství se něco pokazilo. Vaše kreditní karta byla "
|
2797 |
-
"nabitá, ale jsme se nemohli aktivovat vaše členství. Obraťte se na vlastníka "
|
2798 |
-
"stránky, který tento problém vyřeší."
|
2799 |
-
|
2800 |
-
#: preheaders/checkout.php:1063 preheaders/checkout.php:1001
|
2801 |
-
#: preheaders/checkout.php:1048
|
2802 |
-
#, php-format
|
2803 |
-
msgid ""
|
2804 |
-
"You must <a href=\"%s\">setup a Payment Gateway</a> before any payments will "
|
2805 |
-
"be processed."
|
2806 |
-
msgstr ""
|
2807 |
-
"Před započetím plateb musíte <a href=\"%s\">nastavit platební bránu</a>."
|
2808 |
-
|
2809 |
-
#: preheaders/checkout.php:1065 preheaders/checkout.php:1003
|
2810 |
-
#: preheaders/checkout.php:1050
|
2811 |
-
msgid "A Payment Gateway must be setup before any payments will be processed."
|
2812 |
-
msgstr ""
|
2813 |
-
"Platební brána musí být nastavena předtím, než budou zpracovány veškeré "
|
2814 |
-
"platby."
|
2815 |
-
|
2816 |
-
#: scheduled/crons.php:31 scheduled/crons.php:61
|
2817 |
-
#, php-format
|
2818 |
-
msgid "Membership expired email sent to %s. "
|
2819 |
-
msgstr "Členství skončílo pomocí e-mailu zaslaného na% s."
|
2820 |
-
|
2821 |
-
#: scheduled/crons.php:74 scheduled/crons.php:27
|
2822 |
-
#, php-format
|
2823 |
-
msgid "Membership expiring email sent to %s. "
|
2824 |
-
msgstr "Členství skončí pomocí e-mailu zaslaného na% s."
|
2825 |
-
|
2826 |
-
#: scheduled/crons.php:143
|
2827 |
-
#, php-format
|
2828 |
-
msgid "Credit card expiring email sent to %s. "
|
2829 |
-
msgstr "Kreditní karta skončí pomocí e-mailu zaslaného na% s."
|
2830 |
-
|
2831 |
-
#: scheduled/crons.php:196 scheduled/crons.php:104
|
2832 |
-
#, php-format
|
2833 |
-
msgid "Trial ending email sent to %s. "
|
2834 |
-
msgstr "Zkušební doba zkončí po zaslání emailu %s."
|
2835 |
-
|
2836 |
-
#: services/applydiscountcode.php:82
|
2837 |
-
#, php-format
|
2838 |
-
msgid "The <strong>%s</strong> code has been applied to your order."
|
2839 |
-
msgstr "<strong>%s</strong> kupón byl použit k Vaší objednávce."
|
2840 |
-
|
2841 |
-
#: services/authnet-silent-post.php:133
|
2842 |
-
msgid ""
|
2843 |
-
"<p>A payment is being held for review within Authorize.net.</p><p>Payment "
|
2844 |
-
"Information From Authorize.net"
|
2845 |
-
msgstr ""
|
2846 |
-
"<p>Platba se uskuteční v rámci Authorize.net. </p><p> Informace o platbě od "
|
2847 |
-
"Authorize.net"
|
2848 |
-
|
2849 |
-
#: services/stripe-webhook.php:176
|
2850 |
-
#, php-format
|
2851 |
-
msgid ""
|
2852 |
-
"%s has had their payment subscription cancelled by Stripe. Please check that "
|
2853 |
-
"this user's membership is cancelled on your site if it should be."
|
2854 |
-
msgstr ""
|
2855 |
-
"% s má své předplatné zrušeno Stripem. Zkontrolujte prosím, zda se "
|
2856 |
-
"uživatelovo členství zruší na vašich stránkách, pokud by to tak mělo být."
|
2857 |
-
|
2858 |
-
#: adminpages/membershiplevels.php:398
|
2859 |
-
msgid ""
|
2860 |
-
"2Checkout integration does not currently support custom trials. You can do "
|
2861 |
-
"one period trials by setting an initial payment different from the billing "
|
2862 |
-
"amount."
|
2863 |
-
msgstr ""
|
2864 |
-
"Integrace 2Checkout v současné době nepodporuje vlastní zkušební dobu. "
|
2865 |
-
"Můžete to udělat v jednom období zkušební doby, nastavením počáteční platby "
|
2866 |
-
"lišící se od fakturační částky."
|
2867 |
-
|
2868 |
-
#: adminpages/paymentsettings.php:170
|
2869 |
-
msgid ""
|
2870 |
-
"Payflow Pro currently only supports one-time payments. Users will not be "
|
2871 |
-
"able to checkout for levels with recurring payments."
|
2872 |
-
msgstr ""
|
2873 |
-
"Payflow Pro v současné době podporuje pouze jednorázové platby. Uživatelé "
|
2874 |
-
"nebudou moci zaplatit pro úrovně opakujících se plateb."
|
2875 |
-
|
2876 |
-
#: adminpages/paymentsettings.php:410 adminpages/paymentsettings.php:421
|
2877 |
-
msgid "Use SSL"
|
2878 |
-
msgstr "Použít SSL"
|
2879 |
-
|
2880 |
-
#: adminpages/paymentsettings.php:425
|
2881 |
-
msgid "Required by this Gateway Option"
|
2882 |
-
msgstr "Vyžadované nastavením brány"
|
2883 |
-
|
2884 |
-
#: pages/confirmation.php:12
|
2885 |
-
msgid ""
|
2886 |
-
"Your payment has been submitted to PayPal. Your membership will be activated "
|
2887 |
-
"shortly."
|
2888 |
-
msgstr ""
|
2889 |
-
"Vaše platba byla odeslána na PayPal. Vaše členství bude zakrátko aktivní."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/pmpro-da_DK.mo
DELETED
Binary file
|
languages/pmpro-da_DK.po
DELETED
@@ -1,3502 +0,0 @@
|
|
1 |
-
#
|
2 |
-
# Hi there! Details on how to help out translating Paid Memberships Pro can be found at:
|
3 |
-
# http://www.paidmembershipspro.com/documentation/languages/
|
4 |
-
#
|
5 |
-
msgid ""
|
6 |
-
msgstr ""
|
7 |
-
"Project-Id-Version: pmpro-dk_DA\n"
|
8 |
-
"POT-Creation-Date: 2014-05-05 13:29-0400\n"
|
9 |
-
"PO-Revision-Date: 2014-07-26 16:43+0100\n"
|
10 |
-
"Last-Translator: Miscni <miscni@hotmail.com>\n"
|
11 |
-
"Language-Team: Stranger Studios DK section <miscni@hotmail.com>\n"
|
12 |
-
"MIME-Version: 1.0\n"
|
13 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
-
"Content-Transfer-Encoding: 8bit\n"
|
15 |
-
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
16 |
-
"Language: da_DK\n"
|
17 |
-
"X-Generator: Poedit 1.6.7\n"
|
18 |
-
"X-Poedit-Bookmarks: -1,-1,215,-1,-1,-1,-1,-1,-1,-1\n"
|
19 |
-
|
20 |
-
#: adminpages/addons.php:5 adminpages/advancedsettings.php:5
|
21 |
-
#: adminpages/discountcodes.php:5 adminpages/emailsettings.php:5
|
22 |
-
#: adminpages/membershiplevels.php:5 adminpages/memberslist-csv.php:5
|
23 |
-
#: adminpages/memberslist.php:5 adminpages/orders-csv.php:5
|
24 |
-
#: adminpages/orders.php:5 adminpages/pagesettings.php:5
|
25 |
-
#: adminpages/paymentsettings.php:5
|
26 |
-
msgid "You do not have permissions to perform this action."
|
27 |
-
msgstr "Du har ikke tilladelse, til at udfører denne handling."
|
28 |
-
|
29 |
-
#: adminpages/addons.php:79
|
30 |
-
msgid "Disabled"
|
31 |
-
msgstr "Deaktiveret."
|
32 |
-
|
33 |
-
#: adminpages/addons.php:79
|
34 |
-
msgid "Enabled"
|
35 |
-
msgstr "Aktiver"
|
36 |
-
|
37 |
-
#: adminpages/admin_header.php:25
|
38 |
-
msgid "Add a membership level to get started."
|
39 |
-
msgstr "Tilføj et medlems niveau for at komme igang."
|
40 |
-
|
41 |
-
#: adminpages/admin_header.php:27
|
42 |
-
msgid "Setup the membership pages"
|
43 |
-
msgstr "Sæt en medleys side op"
|
44 |
-
|
45 |
-
#: adminpages/admin_header.php:29
|
46 |
-
msgid "Setup your SSL certificate and payment gateway"
|
47 |
-
msgstr "Sæt op din SSL certifikater og betalings gateway"
|
48 |
-
|
49 |
-
#: adminpages/admin_header.php:38
|
50 |
-
msgid ""
|
51 |
-
"The billing details for some of your membership levels is not supported by "
|
52 |
-
"Stripe."
|
53 |
-
msgstr ""
|
54 |
-
"Betalings detaljer, for nogle af dine medlems niveaur, understøttes ikke af "
|
55 |
-
"Stripe."
|
56 |
-
|
57 |
-
#: adminpages/admin_header.php:46
|
58 |
-
msgid ""
|
59 |
-
"The billing details for this level are not supported by Stripe. Please "
|
60 |
-
"review the notes in the Billing Details section below."
|
61 |
-
msgstr ""
|
62 |
-
"Betalings detaljer, for dette niveau understøttes ikke af Stripe. Gennemgå "
|
63 |
-
"venligst notater under Betalings Detaljer sektionen."
|
64 |
-
|
65 |
-
#: adminpages/admin_header.php:50 adminpages/admin_header.php:70
|
66 |
-
#: adminpages/admin_header.php:90 adminpages/admin_header.php:111
|
67 |
-
msgid "The levels with issues are highlighted below."
|
68 |
-
msgstr "De niveaur med problemer er fremhævet nedenfor."
|
69 |
-
|
70 |
-
#: adminpages/admin_header.php:52 adminpages/admin_header.php:72
|
71 |
-
#: adminpages/admin_header.php:92 adminpages/admin_header.php:113
|
72 |
-
msgid "Please edit your levels"
|
73 |
-
msgstr "Venlig redigere dine niveaur"
|
74 |
-
|
75 |
-
#: adminpages/admin_header.php:58
|
76 |
-
msgid ""
|
77 |
-
"The billing details for some of your membership levels is not supported by "
|
78 |
-
"Payflow."
|
79 |
-
msgstr ""
|
80 |
-
"Betalings detaljer for nogle af dine medlems niveauer, understøttes ikke af "
|
81 |
-
"Payflow."
|
82 |
-
|
83 |
-
#: adminpages/admin_header.php:66
|
84 |
-
msgid ""
|
85 |
-
"The billing details for this level are not supported by Payflow. Please "
|
86 |
-
"review the notes in the Billing Details section below."
|
87 |
-
msgstr ""
|
88 |
-
"Betalings detaljer for dette niveau understøttes ikke af Payflow. Gennemgå "
|
89 |
-
"venligst notater under Betalings Detajler sektionen."
|
90 |
-
|
91 |
-
#: adminpages/admin_header.php:78
|
92 |
-
msgid ""
|
93 |
-
"The billing details for some of your membership levels is not supported by "
|
94 |
-
"Braintree."
|
95 |
-
msgstr ""
|
96 |
-
"Betalings detaljer for nogen af dine medlems niveaur, undersøttes ikke af "
|
97 |
-
"Braintree."
|
98 |
-
|
99 |
-
#: adminpages/admin_header.php:86
|
100 |
-
msgid ""
|
101 |
-
"The billing details for this level are not supported by Braintree. Please "
|
102 |
-
"review the notes in the Billing Details section below."
|
103 |
-
msgstr ""
|
104 |
-
"Betalings detaljer for dette niveau understøttes ikke af Braintree. Gennemgå "
|
105 |
-
"venligst noter I Betalings Detaljer sektion nedenfor."
|
106 |
-
|
107 |
-
#: adminpages/admin_header.php:98
|
108 |
-
msgid ""
|
109 |
-
"The billing details for some of your membership levels is not supported by "
|
110 |
-
"TwoCheckout."
|
111 |
-
msgstr ""
|
112 |
-
"Betalings detaljer for nogle af dine medlemsskab niveaur, understøttes ikke "
|
113 |
-
"af TwoCheckout. "
|
114 |
-
|
115 |
-
#: adminpages/admin_header.php:107
|
116 |
-
msgid ""
|
117 |
-
"The billing details for this level are not supported by 2Checkout. Please "
|
118 |
-
"review the notes in the Billing Details section below."
|
119 |
-
msgstr ""
|
120 |
-
"Betalings detaljer for dette niveau understøttes ikke af 2Checkout. Gennemgå "
|
121 |
-
"venligst noter I Betalings Detaljer sektionen nedenfor."
|
122 |
-
|
123 |
-
#: adminpages/admin_header.php:127 adminpages/admin_header.php:106
|
124 |
-
msgid "Plugin Support"
|
125 |
-
msgstr "Plugin Support"
|
126 |
-
|
127 |
-
#: adminpages/admin_header.php:127 adminpages/admin_header.php:106
|
128 |
-
msgid "User Forum"
|
129 |
-
msgstr "Bruger Forum"
|
130 |
-
|
131 |
-
#: adminpages/admin_header.php:149 adminpages/membershiplevels.php:498
|
132 |
-
#: adminpages/pagesettings.php:69 includes/adminpages.php:107
|
133 |
-
#: adminpages/admin_header.php:128 adminpages/membershiplevels.php:490
|
134 |
-
#: adminpages/membershiplevels.php:496 includes/adminpages.php:44
|
135 |
-
#: includes/adminpages.php:100
|
136 |
-
msgid "Membership Levels"
|
137 |
-
msgstr "Medlemsskab Niveaur"
|
138 |
-
|
139 |
-
#: adminpages/admin_header.php:150 adminpages/pagesettings.php:120
|
140 |
-
#: adminpages/admin_header.php:129 adminpages/pagesettings.php:92
|
141 |
-
msgid "Pages"
|
142 |
-
msgstr "Sider"
|
143 |
-
|
144 |
-
#: adminpages/admin_header.php:151 adminpages/admin_header.php:130
|
145 |
-
msgid "Payment Gateway & SSL"
|
146 |
-
msgstr "Betalings Gateway & SSL"
|
147 |
-
|
148 |
-
#: adminpages/admin_header.php:152 adminpages/memberslist.php:148
|
149 |
-
#: pages/account.php:56 adminpages/admin_header.php:131
|
150 |
-
#: adminpages/memberslist.php:115 pages/account.php:52
|
151 |
-
msgid "Email"
|
152 |
-
msgstr "Email"
|
153 |
-
|
154 |
-
#: adminpages/admin_header.php:153 adminpages/admin_header.php:132
|
155 |
-
msgid "Advanced"
|
156 |
-
msgstr "Avanceret"
|
157 |
-
|
158 |
-
#: adminpages/admin_header.php:154 includes/adminpages.php:52
|
159 |
-
#: includes/adminpages.php:142 adminpages/admin_header.php:133
|
160 |
-
#: includes/adminpages.php:14 includes/adminpages.php:69
|
161 |
-
#: includes/adminpages.php:135
|
162 |
-
msgid "Add Ons"
|
163 |
-
msgstr "Add Ons"
|
164 |
-
|
165 |
-
#: adminpages/advancedsettings.php:42 adminpages/advancedsettings.php:35
|
166 |
-
msgid "Your advanced settings have been updated."
|
167 |
-
msgstr "Dine advanceret indstillinger er bleven opdateret."
|
168 |
-
|
169 |
-
#: adminpages/advancedsettings.php:66
|
170 |
-
#, php-format
|
171 |
-
msgid ""
|
172 |
-
"This content is for !!levels!! members only. <a href=\"%s\">Register here</"
|
173 |
-
"a>."
|
174 |
-
msgstr ""
|
175 |
-
"Dette indhold er kun for !!levels!! medlemmer. <a href=\"%s\">Registrerer "
|
176 |
-
"her</a>."
|
177 |
-
|
178 |
-
#: adminpages/advancedsettings.php:71
|
179 |
-
#, php-format
|
180 |
-
msgid ""
|
181 |
-
"Please <a href=\"%s\">login</a> to view this content. (<a href=\"%s"
|
182 |
-
"\">Register here</a>.)"
|
183 |
-
msgstr ""
|
184 |
-
"Vær venlig at <a href=\"%s\">Log Ind</a> for at læse dette indhold. (<a href="
|
185 |
-
"\"%s\">Registerer her</a>.)"
|
186 |
-
|
187 |
-
#: adminpages/advancedsettings.php:76
|
188 |
-
msgid ""
|
189 |
-
"This content is for members only. Visit the site and log in/register to read."
|
190 |
-
msgstr ""
|
191 |
-
"Dette indhold er kun for medllemmer. Besøg siden og log ind/registrerer for "
|
192 |
-
"at læse."
|
193 |
-
|
194 |
-
#: adminpages/advancedsettings.php:86 includes/adminpages.php:51
|
195 |
-
#: includes/adminpages.php:135 adminpages/advancedsettings.php:79
|
196 |
-
#: includes/adminpages.php:13 includes/adminpages.php:64
|
197 |
-
#: includes/adminpages.php:128
|
198 |
-
msgid "Advanced Settings"
|
199 |
-
msgstr "Avanceret Indstillinger"
|
200 |
-
|
201 |
-
#: adminpages/advancedsettings.php:92 adminpages/advancedsettings.php:85
|
202 |
-
msgid "Message for Logged-in Non-members"
|
203 |
-
msgstr "Beskeder til logget ind ikke-medlemmer"
|
204 |
-
|
205 |
-
#: adminpages/advancedsettings.php:96 adminpages/advancedsettings.php:89
|
206 |
-
msgid ""
|
207 |
-
"This message replaces the post content for non-members. Available variables"
|
208 |
-
msgstr ""
|
209 |
-
"Denne besked erstatter dette indhold for ikke-medlemmer. Forskellige "
|
210 |
-
"muligheder er tilgængelig"
|
211 |
-
|
212 |
-
#: adminpages/advancedsettings.php:101 adminpages/advancedsettings.php:94
|
213 |
-
msgid "Message for Logged-out Users"
|
214 |
-
msgstr "Besked til brugere der er logget ud"
|
215 |
-
|
216 |
-
#: adminpages/advancedsettings.php:105 adminpages/advancedsettings.php:98
|
217 |
-
msgid "This message replaces the post content for logged-out visitors."
|
218 |
-
msgstr "Denne besked erstatter det postet indhold for lbesøgende."
|
219 |
-
|
220 |
-
#: adminpages/advancedsettings.php:110 adminpages/advancedsettings.php:103
|
221 |
-
msgid "Message for RSS Feed"
|
222 |
-
msgstr "Besked til RSS Feed"
|
223 |
-
|
224 |
-
#: adminpages/advancedsettings.php:114 adminpages/advancedsettings.php:107
|
225 |
-
msgid "This message replaces the post content in RSS feeds."
|
226 |
-
msgstr "Denne besked erstatter postet indhold I RSS feeds."
|
227 |
-
|
228 |
-
#: adminpages/advancedsettings.php:120 adminpages/advancedsettings.php:113
|
229 |
-
msgid "Show Excerpts to Non-Members?"
|
230 |
-
msgstr "Vis Uddrag til ikke-medlemmer?"
|
231 |
-
|
232 |
-
#: adminpages/advancedsettings.php:124 adminpages/advancedsettings.php:117
|
233 |
-
msgid "No - Hide excerpts."
|
234 |
-
msgstr "Nej - Skjul uddrag"
|
235 |
-
|
236 |
-
#: adminpages/advancedsettings.php:125 adminpages/advancedsettings.php:118
|
237 |
-
msgid "Yes - Show excerpts."
|
238 |
-
msgstr "Ja - Vis uddrag"
|
239 |
-
|
240 |
-
#: adminpages/advancedsettings.php:135 adminpages/advancedsettings.php:194
|
241 |
-
#: adminpages/advancedsettings.php:206 adminpages/membershiplevels.php:571
|
242 |
-
#: adminpages/paymentsettings.php:434 adminpages/paymentsettings.php:459
|
243 |
-
#: includes/profile.php:123 adminpages/advancedsettings.php:128
|
244 |
-
#: adminpages/advancedsettings.php:187 adminpages/advancedsettings.php:199
|
245 |
-
#: adminpages/membershiplevels.php:563 adminpages/membershiplevels.php:569
|
246 |
-
#: adminpages/paymentsettings.php:414 adminpages/paymentsettings.php:429
|
247 |
-
#: adminpages/paymentsettings.php:454 includes/profile.php:121
|
248 |
-
msgid "No"
|
249 |
-
msgstr "Nej"
|
250 |
-
|
251 |
-
#: adminpages/advancedsettings.php:136 adminpages/advancedsettings.php:129
|
252 |
-
msgid "Hide Ads From All Members"
|
253 |
-
msgstr "Skjul Reklamer For Alle Medlemmer"
|
254 |
-
|
255 |
-
#: adminpages/advancedsettings.php:137 adminpages/advancedsettings.php:130
|
256 |
-
msgid "Hide Ads From Certain Members"
|
257 |
-
msgstr "Skjul Reklamer For Specifikke Medlemmer"
|
258 |
-
|
259 |
-
#: adminpages/advancedsettings.php:144 adminpages/advancedsettings.php:137
|
260 |
-
msgid "Ads from the following plugins will be automatically turned off"
|
261 |
-
msgstr "Reklamer fra følgende plugins ville automatisk blive slået fra"
|
262 |
-
|
263 |
-
#: adminpages/advancedsettings.php:145 adminpages/advancedsettings.php:138
|
264 |
-
msgid "To hide ads in your template code, use code like the following"
|
265 |
-
msgstr "For at skjule reklamer i din template kode, brug følgende"
|
266 |
-
|
267 |
-
#: adminpages/advancedsettings.php:156 adminpages/advancedsettings.php:149
|
268 |
-
msgid "Choose Levels to Hide Ads From"
|
269 |
-
msgstr "Vælg nivauer for at Skjule Reklamer Fra"
|
270 |
-
|
271 |
-
#: adminpages/advancedsettings.php:190 adminpages/advancedsettings.php:183
|
272 |
-
msgid "Redirect all traffic from registration page to /susbcription/?"
|
273 |
-
msgstr "Omdigerer alt trafik fra Registrerings siden til /registrering/?"
|
274 |
-
|
275 |
-
#: adminpages/advancedsettings.php:190 adminpages/advancedsettings.php:183
|
276 |
-
msgid "multisite only"
|
277 |
-
msgstr "kun for flere sites"
|
278 |
-
|
279 |
-
#: adminpages/advancedsettings.php:195 adminpages/membershiplevels.php:571
|
280 |
-
#: adminpages/paymentsettings.php:435 adminpages/paymentsettings.php:460
|
281 |
-
#: includes/profile.php:124 adminpages/advancedsettings.php:188
|
282 |
-
#: adminpages/membershiplevels.php:563 adminpages/membershiplevels.php:569
|
283 |
-
#: adminpages/paymentsettings.php:415 adminpages/paymentsettings.php:424
|
284 |
-
#: adminpages/paymentsettings.php:430 adminpages/paymentsettings.php:455
|
285 |
-
#: includes/profile.php:122
|
286 |
-
msgid "Yes"
|
287 |
-
msgstr "Ja"
|
288 |
-
|
289 |
-
#: adminpages/advancedsettings.php:202 adminpages/advancedsettings.php:195
|
290 |
-
msgid "Use reCAPTCHA?"
|
291 |
-
msgstr "Brug reCAPTCHA?"
|
292 |
-
|
293 |
-
#: adminpages/advancedsettings.php:207 adminpages/advancedsettings.php:200
|
294 |
-
msgid "Yes - Free memberships only."
|
295 |
-
msgstr "Ja - Kun for gratis medlemsskab."
|
296 |
-
|
297 |
-
#: adminpages/advancedsettings.php:208 adminpages/advancedsettings.php:201
|
298 |
-
msgid "Yes - All memberships."
|
299 |
-
msgstr "Ja - Alle medlemsskaber."
|
300 |
-
|
301 |
-
#: adminpages/advancedsettings.php:210 adminpages/advancedsettings.php:203
|
302 |
-
msgid "A free reCAPTCHA key is required."
|
303 |
-
msgstr "En gratis reCAPTCHA nøgle er påkrævet."
|
304 |
-
|
305 |
-
#: adminpages/advancedsettings.php:210 adminpages/advancedsettings.php:203
|
306 |
-
msgid "Click here to signup for reCAPTCHA"
|
307 |
-
msgstr "Klik her, for at registerer med reCAPTCHA"
|
308 |
-
|
309 |
-
#: adminpages/advancedsettings.php:216 adminpages/advancedsettings.php:209
|
310 |
-
msgid "reCAPTCHA Public Key"
|
311 |
-
msgstr "reCAPTCHA Offentlig Nøgle"
|
312 |
-
|
313 |
-
#: adminpages/advancedsettings.php:219 adminpages/advancedsettings.php:212
|
314 |
-
msgid "reCAPTCHA Private Key"
|
315 |
-
msgstr "reCAPTCHA Privat Nøgle"
|
316 |
-
|
317 |
-
#: adminpages/advancedsettings.php:225 adminpages/advancedsettings.php:218
|
318 |
-
msgid "Require Terms of Service on signups?"
|
319 |
-
msgstr "Ønskes Vilkår og Betingelser med registrering? "
|
320 |
-
|
321 |
-
#: adminpages/advancedsettings.php:232 adminpages/advancedsettings.php:225
|
322 |
-
msgid ""
|
323 |
-
"If yes, create a WordPress page containing your TOS agreement and assign it "
|
324 |
-
"using the dropdown above."
|
325 |
-
msgstr ""
|
326 |
-
"Hvis ja er valgt, opret en Wordpress side, med indhold af din VOB aftale, og "
|
327 |
-
"tilføje den, med dropdown ovenfor.t"
|
328 |
-
|
329 |
-
#: adminpages/advancedsettings.php:272
|
330 |
-
msgid "selected"
|
331 |
-
msgstr "valgte"
|
332 |
-
|
333 |
-
#: adminpages/advancedsettings.php:355 adminpages/pagesettings.php:251
|
334 |
-
#: adminpages/paymentsettings.php:532 adminpages/advancedsettings.php:284
|
335 |
-
#: adminpages/pagesettings.php:209 adminpages/pagesettings.php:223
|
336 |
-
#: adminpages/paymentsettings.php:485 adminpages/paymentsettings.php:526
|
337 |
-
msgid "Save Settings"
|
338 |
-
msgstr "Gem Indstillinger"
|
339 |
-
|
340 |
-
#: adminpages/discountcodes.php:48
|
341 |
-
msgid "Discount code updated successfully."
|
342 |
-
msgstr "Rabat kode er opdateret succesfuldt"
|
343 |
-
|
344 |
-
#: adminpages/discountcodes.php:55
|
345 |
-
msgid "Error updating discount code. That code may already be in use."
|
346 |
-
msgstr "Fejl I at opdatere rabat kode. Denne kode er nok allerede i brug."
|
347 |
-
|
348 |
-
#: adminpages/discountcodes.php:64
|
349 |
-
msgid "Discount code added successfully."
|
350 |
-
msgstr "Rabat kode er tilføjet succesfuldt."
|
351 |
-
|
352 |
-
#: adminpages/discountcodes.php:71
|
353 |
-
msgid "Error adding discount code. That code may already be in use."
|
354 |
-
msgstr "Fejl i at tilføje rabat kode. Denne kode må allerede være i brug,"
|
355 |
-
|
356 |
-
#: adminpages/discountcodes.php:196
|
357 |
-
#, php-format
|
358 |
-
msgid "Error saving values for the %s level."
|
359 |
-
msgstr "Fejl i at gemme værdier til denne %s niveau."
|
360 |
-
|
361 |
-
#: adminpages/discountcodes.php:204
|
362 |
-
msgid "There were errors updating the level values: "
|
363 |
-
msgstr "Der opstod fejl I at opdatere niveau værdier: "
|
364 |
-
|
365 |
-
#: adminpages/discountcodes.php:237 adminpages/discountcodes.php:234
|
366 |
-
#, php-format
|
367 |
-
msgid "Code %s deleted successfully."
|
368 |
-
msgstr "Kode %s slettet succesfuldt."
|
369 |
-
|
370 |
-
#: adminpages/discountcodes.php:242 adminpages/discountcodes.php:239
|
371 |
-
msgid ""
|
372 |
-
"Error deleting discount code. The code was only partially deleted. Please "
|
373 |
-
"try again."
|
374 |
-
msgstr ""
|
375 |
-
"Fejl opstod, med at slette rabat kode. Koden blev delvist slettet. Prøv igen."
|
376 |
-
|
377 |
-
#: adminpages/discountcodes.php:248 adminpages/discountcodes.php:245
|
378 |
-
msgid "Error deleting code. Please try again."
|
379 |
-
msgstr "Fejl opstod I at slette koden. Prøv igen"
|
380 |
-
|
381 |
-
#: adminpages/discountcodes.php:254 adminpages/discountcodes.php:251
|
382 |
-
msgid "Code not found."
|
383 |
-
msgstr "Kode ikke fundet."
|
384 |
-
|
385 |
-
#: adminpages/discountcodes.php:267 adminpages/discountcodes.php:264
|
386 |
-
msgid "Edit Discount Code"
|
387 |
-
msgstr "Redigere Rabat Kode"
|
388 |
-
|
389 |
-
#: adminpages/discountcodes.php:269 adminpages/discountcodes.php:529
|
390 |
-
#: adminpages/discountcodes.php:266 adminpages/discountcodes.php:526
|
391 |
-
msgid "Add New Discount Code"
|
392 |
-
msgstr "Tilføj Ny Rabat Kode"
|
393 |
-
|
394 |
-
#: adminpages/discountcodes.php:309 adminpages/discountcodes.php:557
|
395 |
-
#: adminpages/membershiplevels.php:286 adminpages/membershiplevels.php:513
|
396 |
-
#: adminpages/memberslist.php:144 adminpages/orders.php:900
|
397 |
-
#: adminpages/reports/login.php:140 adminpages/discountcodes.php:306
|
398 |
-
#: adminpages/discountcodes.php:547 adminpages/membershiplevels.php:284
|
399 |
-
#: adminpages/membershiplevels.php:505 adminpages/membershiplevels.php:511
|
400 |
-
#: adminpages/memberslist.php:111 adminpages/orders.php:597
|
401 |
-
msgid "ID"
|
402 |
-
msgstr "ID"
|
403 |
-
|
404 |
-
#: adminpages/discountcodes.php:310 adminpages/orders.php:261
|
405 |
-
#: adminpages/discountcodes.php:307 adminpages/orders.php:211
|
406 |
-
msgid "This will be generated when you save."
|
407 |
-
msgstr "Dette ville blive generet, når du gemmer."
|
408 |
-
|
409 |
-
#: adminpages/discountcodes.php:314 adminpages/discountcodes.php:558
|
410 |
-
#: adminpages/orders.php:265 adminpages/orders.php:901
|
411 |
-
#: adminpages/discountcodes.php:311 adminpages/discountcodes.php:548
|
412 |
-
#: adminpages/orders.php:215 adminpages/orders.php:598
|
413 |
-
msgid "Code"
|
414 |
-
msgstr "Kode"
|
415 |
-
|
416 |
-
#: adminpages/discountcodes.php:352 adminpages/discountcodes.php:349
|
417 |
-
msgid "Start Date"
|
418 |
-
msgstr "Start Dato"
|
419 |
-
|
420 |
-
#: adminpages/discountcodes.php:370 pages/billing.php:253
|
421 |
-
#: pages/checkout.php:508 adminpages/discountcodes.php:367
|
422 |
-
#: pages/billing.php:249 pages/checkout.php:525 pages/checkout.php:532
|
423 |
-
msgid "Expiration Date"
|
424 |
-
msgstr "Udløbs Dato"
|
425 |
-
|
426 |
-
#: adminpages/discountcodes.php:388 adminpages/discountcodes.php:561
|
427 |
-
#: adminpages/discountcodes.php:385 adminpages/discountcodes.php:551
|
428 |
-
msgid "Uses"
|
429 |
-
msgstr "Forbrug"
|
430 |
-
|
431 |
-
#: adminpages/discountcodes.php:391 adminpages/discountcodes.php:388
|
432 |
-
msgid "Leave blank for unlimited uses."
|
433 |
-
msgstr "Lad dette stå blank, for uendelig brug."
|
434 |
-
|
435 |
-
#: adminpages/discountcodes.php:430 adminpages/membershiplevels.php:339
|
436 |
-
#: adminpages/membershiplevels.php:515 adminpages/discountcodes.php:427
|
437 |
-
#: adminpages/membershiplevels.php:337 adminpages/membershiplevels.php:507
|
438 |
-
#: adminpages/membershiplevels.php:513 pages/levels.php:14
|
439 |
-
msgid "Initial Payment"
|
440 |
-
msgstr "Begynd Betaling"
|
441 |
-
|
442 |
-
#: adminpages/discountcodes.php:431 adminpages/membershiplevels.php:340
|
443 |
-
#: adminpages/discountcodes.php:428 adminpages/membershiplevels.php:338
|
444 |
-
msgid "The initial amount collected at registration."
|
445 |
-
msgstr "Det påbegyndte beløb, er indsamlet ved registrering."
|
446 |
-
|
447 |
-
#: adminpages/discountcodes.php:435 adminpages/membershiplevels.php:344
|
448 |
-
#: adminpages/discountcodes.php:432 adminpages/membershiplevels.php:342
|
449 |
-
msgid "Recurring Subscription"
|
450 |
-
msgstr "Gentag Abonnoment"
|
451 |
-
|
452 |
-
#: adminpages/discountcodes.php:436 adminpages/membershiplevels.php:345
|
453 |
-
#: adminpages/discountcodes.php:433 adminpages/membershiplevels.php:343
|
454 |
-
msgid "Check if this level has a recurring subscription payment."
|
455 |
-
msgstr "Klik her, hvis dette niveau har en gentagene betaling."
|
456 |
-
|
457 |
-
#: adminpages/discountcodes.php:440 adminpages/membershiplevels.php:349
|
458 |
-
#: adminpages/membershiplevels.php:347
|
459 |
-
msgid "Billing Amount"
|
460 |
-
msgstr "Fakture Beløb"
|
461 |
-
|
462 |
-
#: adminpages/discountcodes.php:446 adminpages/discountcodes.php:492
|
463 |
-
#: adminpages/membershiplevels.php:355 adminpages/membershiplevels.php:449
|
464 |
-
#: adminpages/membershiplevels.php:353
|
465 |
-
msgid "Day(s)"
|
466 |
-
msgstr "Dag(e)"
|
467 |
-
|
468 |
-
#: adminpages/discountcodes.php:446 adminpages/discountcodes.php:492
|
469 |
-
#: adminpages/membershiplevels.php:355 adminpages/membershiplevels.php:449
|
470 |
-
#: adminpages/membershiplevels.php:353
|
471 |
-
msgid "Month(s)"
|
472 |
-
msgstr "Måned(er)"
|
473 |
-
|
474 |
-
#: adminpages/discountcodes.php:446 adminpages/discountcodes.php:492
|
475 |
-
#: adminpages/membershiplevels.php:355 adminpages/membershiplevels.php:449
|
476 |
-
#: adminpages/membershiplevels.php:353
|
477 |
-
msgid "Week(s)"
|
478 |
-
msgstr "Uge(r)"
|
479 |
-
|
480 |
-
#: adminpages/discountcodes.php:446 adminpages/discountcodes.php:492
|
481 |
-
#: adminpages/membershiplevels.php:355 adminpages/membershiplevels.php:449
|
482 |
-
#: adminpages/membershiplevels.php:353
|
483 |
-
msgid "Year(s)"
|
484 |
-
msgstr "År()"
|
485 |
-
|
486 |
-
#: adminpages/discountcodes.php:454 adminpages/membershiplevels.php:364
|
487 |
-
#: adminpages/discountcodes.php:451 adminpages/membershiplevels.php:362
|
488 |
-
msgid "The amount to be billed one cycle after the initial payment."
|
489 |
-
msgstr ""
|
490 |
-
"Det beløb, der faktureres den ene cyklus efter den oprindelige betaling."
|
491 |
-
|
492 |
-
#: adminpages/discountcodes.php:459 adminpages/membershiplevels.php:382
|
493 |
-
#: adminpages/discountcodes.php:456 adminpages/membershiplevels.php:380
|
494 |
-
msgid "Billing Cycle Limit"
|
495 |
-
msgstr "Betalings Cyklus Grænse "
|
496 |
-
|
497 |
-
#: adminpages/discountcodes.php:462 adminpages/membershiplevels.php:386
|
498 |
-
#: adminpages/discountcodes.php:459 adminpages/membershiplevels.php:384
|
499 |
-
msgid ""
|
500 |
-
"The <strong>total</strong> number of recurring billing cycles for this "
|
501 |
-
"level, including the trial period (if applicable) but not including the "
|
502 |
-
"initial payment. Set to zero if membership is indefinite."
|
503 |
-
msgstr ""
|
504 |
-
"Det <strong>totale</strong> antal af gentagende fakture cykluser for dette "
|
505 |
-
"niveau, herunder prøveperioden (hvis relevant), men ikke inkluderet I den "
|
506 |
-
"oprindelige betaling. Sæt til nul, hvis medlemskab er ubegrænset."
|
507 |
-
|
508 |
-
#: adminpages/discountcodes.php:467 adminpages/membershiplevels.php:395
|
509 |
-
#: adminpages/discountcodes.php:464 adminpages/membershiplevels.php:393
|
510 |
-
msgid "Custom Trial"
|
511 |
-
msgstr "Brugerdefineret Prøveperiode"
|
512 |
-
|
513 |
-
#: adminpages/discountcodes.php:468 adminpages/membershiplevels.php:397
|
514 |
-
#: adminpages/discountcodes.php:465 adminpages/membershiplevels.php:394
|
515 |
-
#: adminpages/membershiplevels.php:395
|
516 |
-
msgid "Check to add a custom trial period."
|
517 |
-
msgstr "Klik her, for at tilføje en brugerdefineret prøve periode"
|
518 |
-
|
519 |
-
#: adminpages/discountcodes.php:472 adminpages/membershiplevels.php:406
|
520 |
-
#: adminpages/discountcodes.php:469 adminpages/membershiplevels.php:398
|
521 |
-
#: adminpages/membershiplevels.php:404
|
522 |
-
msgid "Trial Billing Amount"
|
523 |
-
msgstr "Prøveperiode Fakture konto"
|
524 |
-
|
525 |
-
#: adminpages/discountcodes.php:475 adminpages/membershiplevels.php:409
|
526 |
-
#: adminpages/discountcodes.php:472 adminpages/membershiplevels.php:401
|
527 |
-
#: adminpages/membershiplevels.php:407
|
528 |
-
msgid "for the first"
|
529 |
-
msgstr "for det første"
|
530 |
-
|
531 |
-
#: adminpages/discountcodes.php:477 adminpages/membershiplevels.php:411
|
532 |
-
#: adminpages/discountcodes.php:474 adminpages/membershiplevels.php:403
|
533 |
-
#: adminpages/membershiplevels.php:409
|
534 |
-
msgid "subscription payments"
|
535 |
-
msgstr "abonnoments betalings"
|
536 |
-
|
537 |
-
#: adminpages/discountcodes.php:482 adminpages/membershiplevels.php:439
|
538 |
-
#: adminpages/discountcodes.php:479 adminpages/membershiplevels.php:431
|
539 |
-
#: adminpages/membershiplevels.php:437
|
540 |
-
msgid "Membership Expiration"
|
541 |
-
msgstr "Medlemskab Udløber"
|
542 |
-
|
543 |
-
#: adminpages/discountcodes.php:483 adminpages/membershiplevels.php:440
|
544 |
-
#: adminpages/membershiplevels.php:432 adminpages/membershiplevels.php:438
|
545 |
-
msgid "Check this to set when membership access expires."
|
546 |
-
msgstr "Klik her, for at sætte, hvornår medlemsskab udløber"
|
547 |
-
|
548 |
-
#: adminpages/discountcodes.php:487 adminpages/membershiplevels.php:444
|
549 |
-
#: adminpages/discountcodes.php:484 adminpages/membershiplevels.php:436
|
550 |
-
#: adminpages/membershiplevels.php:442
|
551 |
-
msgid "Expires In"
|
552 |
-
msgstr "Udløber om"
|
553 |
-
|
554 |
-
#: adminpages/discountcodes.php:500 adminpages/membershiplevels.php:457
|
555 |
-
#: adminpages/membershiplevels.php:449 adminpages/membershiplevels.php:455
|
556 |
-
msgid ""
|
557 |
-
"Set the duration of membership access. Note that the any future payments "
|
558 |
-
"(recurring subscription, if any) will be cancelled when the membership "
|
559 |
-
"expires."
|
560 |
-
msgstr ""
|
561 |
-
"Indstil varigheden af medlemskab. Bemærk, at de eventuelle fremtidige "
|
562 |
-
"betalinger (tilbagevendende abonnementer, hvis nogen) vil blive annulleret, "
|
563 |
-
"når medlemskabet udløber."
|
564 |
-
|
565 |
-
#: adminpages/discountcodes.php:528 adminpages/discountcodes.php:525
|
566 |
-
msgid "Memberships Discount Codes"
|
567 |
-
msgstr "Medlemsskab Rabat Kode"
|
568 |
-
|
569 |
-
#: adminpages/discountcodes.php:538 adminpages/discountcodes.php:535
|
570 |
-
msgid "Search Discount Codes"
|
571 |
-
msgstr "Søg efter Rabat Koder"
|
572 |
-
|
573 |
-
#: adminpages/discountcodes.php:541 adminpages/reports/login.php:81
|
574 |
-
#: adminpages/discountcodes.php:538
|
575 |
-
msgid "Search"
|
576 |
-
msgstr "Søg"
|
577 |
-
|
578 |
-
#: adminpages/discountcodes.php:559 adminpages/discountcodes.php:549
|
579 |
-
msgid "Starts"
|
580 |
-
msgstr "Starter"
|
581 |
-
|
582 |
-
#: adminpages/discountcodes.php:560 adminpages/memberslist.php:159
|
583 |
-
#: adminpages/reports/login.php:145 includes/profile.php:120
|
584 |
-
#: adminpages/discountcodes.php:550 adminpages/memberslist.php:121
|
585 |
-
#: includes/profile.php:118
|
586 |
-
msgid "Expires"
|
587 |
-
msgstr "Udløber"
|
588 |
-
|
589 |
-
#: adminpages/discountcodes.php:562 adminpages/discountcodes.php:552
|
590 |
-
msgid "Levels"
|
591 |
-
msgstr "Niveauer"
|
592 |
-
|
593 |
-
#: adminpages/discountcodes.php:574 adminpages/discountcodes.php:570
|
594 |
-
msgid "Create your first discount code now"
|
595 |
-
msgstr "Opret din første Rabat kode nu"
|
596 |
-
|
597 |
-
#: adminpages/discountcodes.php:574 adminpages/discountcodes.php:570
|
598 |
-
msgid ""
|
599 |
-
"Discount codes allow you to offer your memberships at discounted prices to "
|
600 |
-
"select customers."
|
601 |
-
msgstr ""
|
602 |
-
"Rabat koder, giver dig mulighed for, at tilbyde medlemmer Rabat priser til "
|
603 |
-
"udvalgte kunder."
|
604 |
-
|
605 |
-
#: adminpages/discountcodes.php:619 adminpages/membershiplevels.php:572
|
606 |
-
#: adminpages/orders.php:961 adminpages/discountcodes.php:614
|
607 |
-
#: adminpages/membershiplevels.php:564 adminpages/membershiplevels.php:570
|
608 |
-
#: adminpages/orders.php:658
|
609 |
-
msgid "edit"
|
610 |
-
msgstr "Redigere"
|
611 |
-
|
612 |
-
#: adminpages/discountcodes.php:622 adminpages/discountcodes.php:617
|
613 |
-
#, php-format
|
614 |
-
msgid ""
|
615 |
-
"Are you sure you want to delete the %s discount code? The subscriptions for "
|
616 |
-
"existing users will not change, but new users will not be able to use this "
|
617 |
-
"code anymore."
|
618 |
-
msgstr ""
|
619 |
-
"Er du sikker på, at du ville slette %s rabat kode?. Abonnement for den "
|
620 |
-
"eksisterende bruger ville ikke ændre sig, men nye brugere har ikke mulighed "
|
621 |
-
"for, at bruge koden."
|
622 |
-
|
623 |
-
#: adminpages/discountcodes.php:622 adminpages/membershiplevels.php:574
|
624 |
-
#: adminpages/orders.php:967 adminpages/discountcodes.php:617
|
625 |
-
#: adminpages/membershiplevels.php:566 adminpages/membershiplevels.php:572
|
626 |
-
#: adminpages/orders.php:664
|
627 |
-
msgid "delete"
|
628 |
-
msgstr "Slet"
|
629 |
-
|
630 |
-
#: adminpages/emailsettings.php:69 includes/adminpages.php:50
|
631 |
-
#: includes/adminpages.php:128 adminpages/emailsettings.php:60
|
632 |
-
#: includes/adminpages.php:12 includes/adminpages.php:59
|
633 |
-
#: includes/adminpages.php:121
|
634 |
-
msgid "Email Settings"
|
635 |
-
msgstr "Email Indstillinger"
|
636 |
-
|
637 |
-
#: adminpages/emailsettings.php:70 adminpages/emailsettings.php:61
|
638 |
-
msgid ""
|
639 |
-
"By default, system generated emails are sent from "
|
640 |
-
"<em><strong>wordpress@yourdomain.com</strong></em>. You can update this from "
|
641 |
-
"address using the fields below."
|
642 |
-
msgstr ""
|
643 |
-
"Som standard, vil systemet generere email sendt fra "
|
644 |
-
"<em><strong>wordpress@ditdomæne.com</strong></em>. Du har mulighed for, at "
|
645 |
-
"opdatere adresse, ved at bruge felterne nedenfor. "
|
646 |
-
|
647 |
-
#: adminpages/emailsettings.php:72 adminpages/emailsettings.php:63
|
648 |
-
msgid ""
|
649 |
-
"To modify the appearance of system generated emails, add the files "
|
650 |
-
"<em>email_header.html</em> and <em>email_footer.html</em> to your theme's "
|
651 |
-
"directory. This will modify both the WordPress default messages as well as "
|
652 |
-
"messages generated by Paid Memberships Pro. <a title=\"Paid Memberships Pro "
|
653 |
-
"- Member Communications\" target=\"_blank\" href=\"http://www."
|
654 |
-
"paidmembershipspro.com/documentation/member-communications/\">Click here to "
|
655 |
-
"learn more about Paid Memberships Pro emails</a>."
|
656 |
-
msgstr ""
|
657 |
-
"Hvis du vil ændre udseendet af systemet genererede e-mails, tilføje filerne "
|
658 |
-
"<em>email_header.html</em> og <em>email_footer.html</em> til din tema mappe. "
|
659 |
-
"Dette vil ændre både WordPress standard beskeder samt meddelelser genereres "
|
660 |
-
"af Paid Memberships Pro.<a title=\"Paid medlemskaber Pro - Medlber "
|
661 |
-
"Communications\" target=\"_blank\" href=\"http://www.paidmembershipspro.com/"
|
662 |
-
"documentation/member-communications/\">Klik her for at lære mere om Paid "
|
663 |
-
"Memberships Pro emails</a>."
|
664 |
-
|
665 |
-
#: adminpages/emailsettings.php:78 adminpages/emailsettings.php:69
|
666 |
-
msgid "From Email"
|
667 |
-
msgstr "Fra Email"
|
668 |
-
|
669 |
-
#: adminpages/emailsettings.php:86 adminpages/emailsettings.php:77
|
670 |
-
msgid "From Name"
|
671 |
-
msgstr "Fra Navn"
|
672 |
-
|
673 |
-
#: adminpages/emailsettings.php:94
|
674 |
-
msgid "Only Filter PMPro Emails?"
|
675 |
-
msgstr "Filtere Kun PMPro Emails?"
|
676 |
-
|
677 |
-
#: adminpages/emailsettings.php:98
|
678 |
-
msgid "If unchecked, all emails from \"WordPress <"
|
679 |
-
msgstr "Hvis ikke aktiveret, alle emails fra \"WordPress <"
|
680 |
-
|
681 |
-
#: adminpages/emailsettings.php:115 adminpages/emailsettings.php:86
|
682 |
-
#: adminpages/emailsettings.php:104
|
683 |
-
msgid "Send the site admin emails"
|
684 |
-
msgstr "Send site admin emails"
|
685 |
-
|
686 |
-
#: adminpages/emailsettings.php:121 adminpages/emailsettings.php:92
|
687 |
-
#: adminpages/emailsettings.php:110
|
688 |
-
msgid "Checkout"
|
689 |
-
msgstr "Gå til Kassen"
|
690 |
-
|
691 |
-
#: adminpages/emailsettings.php:125 adminpages/emailsettings.php:96
|
692 |
-
#: adminpages/emailsettings.php:114
|
693 |
-
msgid "when a member checks out."
|
694 |
-
msgstr "Når et medlem går til Kassen"
|
695 |
-
|
696 |
-
#: adminpages/emailsettings.php:130 adminpages/emailsettings.php:101
|
697 |
-
#: adminpages/emailsettings.php:119
|
698 |
-
msgid "Admin Changes"
|
699 |
-
msgstr "Admin Ændringer"
|
700 |
-
|
701 |
-
#: adminpages/emailsettings.php:134 adminpages/emailsettings.php:105
|
702 |
-
#: adminpages/emailsettings.php:123
|
703 |
-
msgid "when an admin changes a user's membership level through the dashboard."
|
704 |
-
msgstr "Når en admin ændre en bruger's medlemsskab niveau gennem kontrolpanel."
|
705 |
-
|
706 |
-
#: adminpages/emailsettings.php:139 adminpages/emailsettings.php:110
|
707 |
-
#: adminpages/emailsettings.php:128
|
708 |
-
msgid "Cancellation"
|
709 |
-
msgstr "Annullering"
|
710 |
-
|
711 |
-
#: adminpages/emailsettings.php:143 adminpages/emailsettings.php:114
|
712 |
-
#: adminpages/emailsettings.php:132
|
713 |
-
msgid "when a user cancels his or her account."
|
714 |
-
msgstr "når en bruger annullere hans eller hendes konto."
|
715 |
-
|
716 |
-
#: adminpages/emailsettings.php:148 adminpages/emailsettings.php:119
|
717 |
-
#: adminpages/emailsettings.php:137
|
718 |
-
msgid "Bill Updates"
|
719 |
-
msgstr "Fakture Opdates"
|
720 |
-
|
721 |
-
#: adminpages/emailsettings.php:152 adminpages/emailsettings.php:123
|
722 |
-
#: adminpages/emailsettings.php:141
|
723 |
-
msgid "when a user updates his or her billing information."
|
724 |
-
msgstr "når en bruger opdatere hans eller hendes betalings informationer."
|
725 |
-
|
726 |
-
#: adminpages/emailsettings.php:158 adminpages/emailsettings.php:129
|
727 |
-
#: adminpages/emailsettings.php:147
|
728 |
-
msgid "Send members emails"
|
729 |
-
msgstr "Send medlemmers email"
|
730 |
-
|
731 |
-
#: adminpages/emailsettings.php:164 adminpages/emailsettings.php:135
|
732 |
-
#: adminpages/emailsettings.php:153
|
733 |
-
msgid "New Users"
|
734 |
-
msgstr "Nye Brugere"
|
735 |
-
|
736 |
-
#: adminpages/emailsettings.php:168 adminpages/emailsettings.php:139
|
737 |
-
#: adminpages/emailsettings.php:157
|
738 |
-
msgid ""
|
739 |
-
"Default WP notification email. (Recommended: Leave unchecked. Members will "
|
740 |
-
"still get an email confirmation from PMPro after checkout.)"
|
741 |
-
msgstr ""
|
742 |
-
"Standard WP notifikations email. (Anbefales: Ikke Aktiveret. Medlemmer vil "
|
743 |
-
"stadig få email bekræftigelse fra PMPRO efter de har været kassen.)"
|
744 |
-
|
745 |
-
#: adminpages/membershiplevels.php:118
|
746 |
-
msgid "Membership level updated successfully."
|
747 |
-
msgstr "Medlemsskab Niveau opdateret succesfuldt."
|
748 |
-
|
749 |
-
#: adminpages/membershiplevels.php:124
|
750 |
-
msgid "Error updating membership level."
|
751 |
-
msgstr "Fejl I opdatering af medlemsskab niveau."
|
752 |
-
|
753 |
-
#: adminpages/membershiplevels.php:141
|
754 |
-
msgid "Membership level added successfully."
|
755 |
-
msgstr "Medlemsskab niveau tilføjet succesfuldt."
|
756 |
-
|
757 |
-
#: adminpages/membershiplevels.php:146
|
758 |
-
msgid "Error adding membership level."
|
759 |
-
msgstr "Fejl I at tilføje medlemskabs niveau."
|
760 |
-
|
761 |
-
#: adminpages/membershiplevels.php:181 adminpages/membershiplevels.php:179
|
762 |
-
#, php-format
|
763 |
-
msgid ""
|
764 |
-
"There was an error canceling the subscription for user with ID=%d. You will "
|
765 |
-
"want to check your payment gateway to see if their subscription is still "
|
766 |
-
"active."
|
767 |
-
msgstr ""
|
768 |
-
"Der opstod en fejl, med annullering af abonnement for bruger med ID=%d. Du "
|
769 |
-
"bliver nødtil at kontrollere din betalings gateway, for at se, om deres "
|
770 |
-
"betaling stadig er aktiv. "
|
771 |
-
|
772 |
-
#: adminpages/membershiplevels.php:184 adminpages/membershiplevels.php:182
|
773 |
-
msgid "Last Invoice"
|
774 |
-
msgstr "Sidste Faktura"
|
775 |
-
|
776 |
-
#: adminpages/membershiplevels.php:198 adminpages/membershiplevels.php:196
|
777 |
-
msgid "Membership level deleted successfully."
|
778 |
-
msgstr "Medlemskabs niveau slettet succesfuldt."
|
779 |
-
|
780 |
-
#: adminpages/membershiplevels.php:203 adminpages/membershiplevels.php:209
|
781 |
-
#: adminpages/membershiplevels.php:201 adminpages/membershiplevels.php:207
|
782 |
-
msgid "Error deleting membership level."
|
783 |
-
msgstr "Fejl I at slette medlemsskab niveau."
|
784 |
-
|
785 |
-
#: adminpages/membershiplevels.php:224 adminpages/membershiplevels.php:222
|
786 |
-
msgid "Edit Membership Level"
|
787 |
-
msgstr "Redigere medlemsskab niveau"
|
788 |
-
|
789 |
-
#: adminpages/membershiplevels.php:226 adminpages/membershiplevels.php:224
|
790 |
-
msgid "Add New Membership Level"
|
791 |
-
msgstr "Tilføj Ny Medlemsskab Niveau"
|
792 |
-
|
793 |
-
#: adminpages/membershiplevels.php:293 adminpages/membershiplevels.php:514
|
794 |
-
#: adminpages/reports/login.php:142 adminpages/membershiplevels.php:291
|
795 |
-
#: adminpages/membershiplevels.php:506 adminpages/membershiplevels.php:512
|
796 |
-
msgid "Name"
|
797 |
-
msgstr "Navn"
|
798 |
-
|
799 |
-
#: adminpages/membershiplevels.php:298 adminpages/membershiplevels.php:296
|
800 |
-
msgid "Description"
|
801 |
-
msgstr "Beskrivelse"
|
802 |
-
|
803 |
-
#: adminpages/membershiplevels.php:316 adminpages/membershiplevels.php:314
|
804 |
-
msgid "Confirmation Message"
|
805 |
-
msgstr "Bekræftigelses Besked"
|
806 |
-
|
807 |
-
#: adminpages/membershiplevels.php:335 adminpages/membershiplevels.php:333
|
808 |
-
msgid "Billing Details"
|
809 |
-
msgstr "Faktura Detaljer"
|
810 |
-
|
811 |
-
#: adminpages/membershiplevels.php:351 adminpages/membershiplevels.php:349
|
812 |
-
msgid "per"
|
813 |
-
msgstr "pr"
|
814 |
-
|
815 |
-
#: adminpages/membershiplevels.php:366
|
816 |
-
msgid ""
|
817 |
-
"Stripe integration currently only supports billing periods of \"Week\", "
|
818 |
-
"\"Month\" or \"Year\"."
|
819 |
-
msgstr ""
|
820 |
-
"Stripe integration understøtter kun Faktura af \"Uge\", \"Måned\" eller \"År"
|
821 |
-
"\"."
|
822 |
-
|
823 |
-
#: adminpages/membershiplevels.php:368 adminpages/membershiplevels.php:366
|
824 |
-
msgid ""
|
825 |
-
"Braintree integration currently only supports billing periods of \"Month\" "
|
826 |
-
"or \"Year\"."
|
827 |
-
msgstr ""
|
828 |
-
"Braintree integration understøtter kun Faktura af \"Uge\", \"Måned\" eller "
|
829 |
-
"\"År\"."
|
830 |
-
|
831 |
-
#: adminpages/membershiplevels.php:370 adminpages/membershiplevels.php:368
|
832 |
-
msgid ""
|
833 |
-
"Payflow integration currently only supports billing frequencies of 1 and "
|
834 |
-
"billing periods of \"Week\", \"Month\" or \"Year\"."
|
835 |
-
msgstr ""
|
836 |
-
"Payflow integration understøtter kun Faktura frekvens af og faktura periode "
|
837 |
-
"af \"Uge\", \"Måned\" eller \"År\"."
|
838 |
-
|
839 |
-
#: adminpages/membershiplevels.php:374 adminpages/membershiplevels.php:372
|
840 |
-
msgid ""
|
841 |
-
"After saving this level, make note of the ID and create a \"Plan\" in your "
|
842 |
-
"Braintree dashboard with the same settings and the \"Plan ID\" set to "
|
843 |
-
"<em>pmpro_#</em>, where # is the level ID."
|
844 |
-
msgstr ""
|
845 |
-
"Efter at gemme dette niveau, lav en note af ID og opret en \"Plan\" i dit "
|
846 |
-
"Braintree kontrolpanel, med det samme indstillinger, og at \"Plan ID\" er "
|
847 |
-
"sat til <em>pmpro_#</em>, hvor # er niveau ID."
|
848 |
-
|
849 |
-
#: adminpages/membershiplevels.php:374 adminpages/membershiplevels.php:376
|
850 |
-
#: adminpages/paymentsettings.php:174 adminpages/paymentsettings.php:179
|
851 |
-
#: adminpages/membershiplevels.php:372 adminpages/paymentsettings.php:170
|
852 |
-
msgid "Note"
|
853 |
-
msgstr "Note"
|
854 |
-
|
855 |
-
#: adminpages/membershiplevels.php:376 adminpages/membershiplevels.php:374
|
856 |
-
msgid ""
|
857 |
-
"You will need to create a \"Plan\" in your Braintree dashboard with the same "
|
858 |
-
"settings and the \"Plan ID\" set to"
|
859 |
-
msgstr ""
|
860 |
-
"Du er nødtil at oprette en \"Plan\" i dit Braintree kontrolpanel med de "
|
861 |
-
"samme indstillinger og hvor \"Plan ID\" er sat til"
|
862 |
-
|
863 |
-
#: adminpages/membershiplevels.php:388 adminpages/membershiplevels.php:386
|
864 |
-
msgid ""
|
865 |
-
"Stripe integration currently does not support billing limits. You can still "
|
866 |
-
"set an expiration date below."
|
867 |
-
msgstr ""
|
868 |
-
"Stripe integration understøtter ikke faktura begræsninger. Du kan stadig "
|
869 |
-
"sætte en udløbsdato på nedenfor."
|
870 |
-
|
871 |
-
#: adminpages/membershiplevels.php:400 adminpages/membershiplevels.php:398
|
872 |
-
msgid ""
|
873 |
-
"2Checkout integration does not support custom trials. You can do one period "
|
874 |
-
"trials by setting an initial payment different from the billing amount."
|
875 |
-
msgstr ""
|
876 |
-
"2Checkout integration understøtter ikke brugerdefineret prøveperiode. Du kan "
|
877 |
-
"lave en prøveperiode via indstillinger, og sætte betalings mulighed til en "
|
878 |
-
"anden fakture."
|
879 |
-
|
880 |
-
#: adminpages/membershiplevels.php:414 adminpages/membershiplevels.php:406
|
881 |
-
#: adminpages/membershiplevels.php:412
|
882 |
-
msgid ""
|
883 |
-
"Stripe integration currently does not support trial amounts greater than $0."
|
884 |
-
msgstr ""
|
885 |
-
"Stripe integration understøtter ikke prøveperioder der er større en $0."
|
886 |
-
|
887 |
-
#: adminpages/membershiplevels.php:418 adminpages/membershiplevels.php:410
|
888 |
-
#: adminpages/membershiplevels.php:416
|
889 |
-
msgid ""
|
890 |
-
"Braintree integration currently does not support trial amounts greater than "
|
891 |
-
"$0."
|
892 |
-
msgstr "Braintree integration understøtter prøveperioder der er større end $0."
|
893 |
-
|
894 |
-
#: adminpages/membershiplevels.php:422 adminpages/membershiplevels.php:414
|
895 |
-
#: adminpages/membershiplevels.php:420
|
896 |
-
msgid ""
|
897 |
-
"Payflow integration currently does not support trial amounts greater than $0."
|
898 |
-
msgstr ""
|
899 |
-
"Payflow integration understøtter ikke prøveåerioder der er større end $0."
|
900 |
-
|
901 |
-
#: adminpages/membershiplevels.php:430 adminpages/membershiplevels.php:422
|
902 |
-
#: adminpages/membershiplevels.php:428
|
903 |
-
msgid "Other Settings"
|
904 |
-
msgstr "Andre Indstillinger"
|
905 |
-
|
906 |
-
#: adminpages/membershiplevels.php:434 adminpages/membershiplevels.php:426
|
907 |
-
#: adminpages/membershiplevels.php:432
|
908 |
-
msgid "Disable New Signups"
|
909 |
-
msgstr "Deaktivere Nye Tilmeldinger"
|
910 |
-
|
911 |
-
#: adminpages/membershiplevels.php:435 adminpages/membershiplevels.php:427
|
912 |
-
#: adminpages/membershiplevels.php:433
|
913 |
-
msgid ""
|
914 |
-
"Check to hide this level from the membership levels page and disable "
|
915 |
-
"registration."
|
916 |
-
msgstr ""
|
917 |
-
"Klik her, for at skjule dette Niveau fra medlemsskabs Niveau side, og "
|
918 |
-
"deaktivere registrering."
|
919 |
-
|
920 |
-
#: adminpages/membershiplevels.php:465 adminpages/membershiplevels.php:457
|
921 |
-
#: adminpages/membershiplevels.php:463
|
922 |
-
msgid "Content Settings"
|
923 |
-
msgstr "Indhols Indstillinger"
|
924 |
-
|
925 |
-
#: adminpages/membershiplevels.php:469 adminpages/membershiplevels.php:461
|
926 |
-
#: adminpages/membershiplevels.php:467
|
927 |
-
msgid "Categories"
|
928 |
-
msgstr "Kategorier"
|
929 |
-
|
930 |
-
#: adminpages/membershiplevels.php:498 adminpages/membershiplevels.php:490
|
931 |
-
#: adminpages/membershiplevels.php:496
|
932 |
-
msgid "Add New Level"
|
933 |
-
msgstr "Tilføj Ny Niveau"
|
934 |
-
|
935 |
-
#: adminpages/membershiplevels.php:501 adminpages/membershiplevels.php:504
|
936 |
-
#: adminpages/membershiplevels.php:493 adminpages/membershiplevels.php:496
|
937 |
-
#: adminpages/membershiplevels.php:499 adminpages/membershiplevels.php:502
|
938 |
-
msgid "Search Levels"
|
939 |
-
msgstr "Søg Niveauer"
|
940 |
-
|
941 |
-
#: adminpages/membershiplevels.php:516 adminpages/membershiplevels.php:508
|
942 |
-
#: adminpages/membershiplevels.php:514
|
943 |
-
msgid "Billing Cycle"
|
944 |
-
msgstr "Faktura Cyklus"
|
945 |
-
|
946 |
-
#: adminpages/membershiplevels.php:517 adminpages/membershiplevels.php:509
|
947 |
-
#: adminpages/membershiplevels.php:515
|
948 |
-
msgid "Trial Cycle"
|
949 |
-
msgstr "Prøveperiode Cyklus"
|
950 |
-
|
951 |
-
#: adminpages/membershiplevels.php:518 pages/confirmation.php:83
|
952 |
-
#: pages/invoice.php:70 adminpages/membershiplevels.php:510
|
953 |
-
#: adminpages/membershiplevels.php:516 pages/confirmation.php:81
|
954 |
-
#: pages/invoice.php:68
|
955 |
-
msgid "Expiration"
|
956 |
-
msgstr "Udløbs"
|
957 |
-
|
958 |
-
#: adminpages/membershiplevels.php:519 adminpages/membershiplevels.php:511
|
959 |
-
#: adminpages/membershiplevels.php:517
|
960 |
-
msgid "Allow Signups"
|
961 |
-
msgstr "Tillad Registrering"
|
962 |
-
|
963 |
-
#: adminpages/membershiplevels.php:542 adminpages/membershiplevels.php:534
|
964 |
-
#: adminpages/membershiplevels.php:540
|
965 |
-
msgid "FREE"
|
966 |
-
msgstr "GRATIS"
|
967 |
-
|
968 |
-
#: adminpages/membershiplevels.php:551 adminpages/membershiplevels.php:543
|
969 |
-
#: adminpages/membershiplevels.php:549
|
970 |
-
msgid "every"
|
971 |
-
msgstr "alle"
|
972 |
-
|
973 |
-
#: adminpages/membershiplevels.php:553 adminpages/membershiplevels.php:561
|
974 |
-
#: adminpages/reports/memberships.php:304
|
975 |
-
#: adminpages/reports/memberships.php:315 adminpages/reports/sales.php:203
|
976 |
-
#: adminpages/reports/sales.php:214 adminpages/membershiplevels.php:545
|
977 |
-
#: adminpages/membershiplevels.php:551 adminpages/membershiplevels.php:559
|
978 |
-
#: adminpages/reports/sales.php:195 adminpages/reports/sales.php:204
|
979 |
-
#: adminpages/reports/sales.php:206 adminpages/reports/sales.php:215
|
980 |
-
msgid "for"
|
981 |
-
msgstr "for"
|
982 |
-
|
983 |
-
#: adminpages/membershiplevels.php:568 adminpages/membershiplevels.php:560
|
984 |
-
#: adminpages/membershiplevels.php:566
|
985 |
-
msgid "After"
|
986 |
-
msgstr "Efter"
|
987 |
-
|
988 |
-
#: adminpages/membershiplevels.php:573 adminpages/orders.php:964
|
989 |
-
#: adminpages/membershiplevels.php:565 adminpages/membershiplevels.php:571
|
990 |
-
#: adminpages/orders.php:661
|
991 |
-
msgid "copy"
|
992 |
-
msgstr "Kopiere"
|
993 |
-
|
994 |
-
#: adminpages/membershiplevels.php:574 adminpages/membershiplevels.php:566
|
995 |
-
#: adminpages/membershiplevels.php:572
|
996 |
-
#, php-format
|
997 |
-
msgid ""
|
998 |
-
"Are you sure you want to delete membership level %s? All subscriptions will "
|
999 |
-
"be cancelled."
|
1000 |
-
msgstr ""
|
1001 |
-
"Er du sikker på, at du ville slette medlemsskab niveau %s? Alle abonnenter "
|
1002 |
-
"ville blive annulleret."
|
1003 |
-
|
1004 |
-
#: adminpages/memberslist.php:25 includes/adminpages.php:53
|
1005 |
-
#: includes/adminpages.php:149 includes/adminpages.php:15
|
1006 |
-
#: includes/adminpages.php:74 includes/adminpages.php:142
|
1007 |
-
msgid "Members List"
|
1008 |
-
msgstr "Medlems Liste"
|
1009 |
-
|
1010 |
-
#: adminpages/memberslist.php:26 adminpages/orders.php:591
|
1011 |
-
#: adminpages/orders.php:522
|
1012 |
-
msgid "Export to CSV"
|
1013 |
-
msgstr "Eksportere til CSV"
|
1014 |
-
|
1015 |
-
#: adminpages/memberslist.php:30 adminpages/orders.php:603
|
1016 |
-
#: adminpages/reports/login.php:65 adminpages/reports/memberships.php:292
|
1017 |
-
#: adminpages/reports/sales.php:193 adminpages/reports/sales.php:185
|
1018 |
-
#: adminpages/reports/sales.php:194
|
1019 |
-
msgid "Show"
|
1020 |
-
msgstr "Vis"
|
1021 |
-
|
1022 |
-
#: adminpages/memberslist.php:32 adminpages/reports/login.php:67
|
1023 |
-
#: adminpages/reports/memberships.php:317 adminpages/reports/sales.php:216
|
1024 |
-
#: adminpages/reports/sales.php:208 adminpages/reports/sales.php:217
|
1025 |
-
msgid "All Levels"
|
1026 |
-
msgstr "All Niveauer"
|
1027 |
-
|
1028 |
-
#: adminpages/memberslist.php:42
|
1029 |
-
msgid "Old Members"
|
1030 |
-
msgstr "Gamle Medlemmer"
|
1031 |
-
|
1032 |
-
#: adminpages/memberslist.php:47 adminpages/memberslist.php:50
|
1033 |
-
#: adminpages/memberslist.php:46 adminpages/memberslist.php:49
|
1034 |
-
msgid "Search Members"
|
1035 |
-
msgstr "Søg Medlemmer"
|
1036 |
-
|
1037 |
-
#: adminpages/memberslist.php:136 adminpages/memberslist.php:103
|
1038 |
-
#, php-format
|
1039 |
-
msgid "%d members found."
|
1040 |
-
msgstr "%d medlemmer fundet."
|
1041 |
-
|
1042 |
-
#: adminpages/memberslist.php:145 pages/account.php:55 pages/checkout.php:171
|
1043 |
-
#: adminpages/memberslist.php:112 pages/account.php:51 pages/checkout.php:168
|
1044 |
-
msgid "Username"
|
1045 |
-
msgstr "Brugernavn"
|
1046 |
-
|
1047 |
-
#: adminpages/memberslist.php:146 adminpages/memberslist.php:113
|
1048 |
-
msgid "First Name"
|
1049 |
-
msgstr "For Navn"
|
1050 |
-
|
1051 |
-
#: adminpages/memberslist.php:147 adminpages/memberslist.php:114
|
1052 |
-
msgid "Last Name"
|
1053 |
-
msgstr "Efter Navn"
|
1054 |
-
|
1055 |
-
#: adminpages/memberslist.php:150 pages/account.php:94 pages/billing.php:62
|
1056 |
-
#: pages/checkout.php:298 pages/confirmation.php:61 pages/invoice.php:48
|
1057 |
-
#: adminpages/memberslist.php:117 pages/account.php:90 pages/billing.php:58
|
1058 |
-
#: pages/checkout.php:314 pages/checkout.php:321 pages/confirmation.php:59
|
1059 |
-
#: pages/invoice.php:46
|
1060 |
-
msgid "Billing Address"
|
1061 |
-
msgstr "Fakture Addresse"
|
1062 |
-
|
1063 |
-
#: adminpages/memberslist.php:151 adminpages/reports/login.php:143
|
1064 |
-
#: classes/gateways/class.pmprogateway_authorizenet.php:187
|
1065 |
-
#: adminpages/memberslist.php:118 adminpages/pagesettings.php:51
|
1066 |
-
msgid "Membership"
|
1067 |
-
msgstr "Medlemsskab"
|
1068 |
-
|
1069 |
-
#: adminpages/memberslist.php:152 adminpages/memberslist.php:119
|
1070 |
-
msgid "Fee"
|
1071 |
-
msgstr "Gebyr"
|
1072 |
-
|
1073 |
-
#: adminpages/memberslist.php:153 adminpages/reports/login.php:144
|
1074 |
-
#: adminpages/memberslist.php:120
|
1075 |
-
msgid "Joined"
|
1076 |
-
msgstr "Forbundet"
|
1077 |
-
|
1078 |
-
#: adminpages/memberslist.php:157
|
1079 |
-
msgid "Ended"
|
1080 |
-
msgstr "Sluttet"
|
1081 |
-
|
1082 |
-
#: adminpages/memberslist.php:223 adminpages/reports/login.php:210
|
1083 |
-
#: adminpages/memberslist.php:195
|
1084 |
-
msgid "No members found."
|
1085 |
-
msgstr "Ingen Medlemmer fundet."
|
1086 |
-
|
1087 |
-
#: adminpages/memberslist.php:223 adminpages/reports/login.php:210
|
1088 |
-
#: adminpages/memberslist.php:195
|
1089 |
-
msgid "Search all levels"
|
1090 |
-
msgstr "Søg efter Niveauer"
|
1091 |
-
|
1092 |
-
#: adminpages/orders.php:67 adminpages/orders.php:26
|
1093 |
-
msgid "Order deleted successfully."
|
1094 |
-
msgstr "Ordre blev slettet succesfuldt."
|
1095 |
-
|
1096 |
-
#: adminpages/orders.php:72 adminpages/orders.php:31
|
1097 |
-
msgid "Error deleting order."
|
1098 |
-
msgstr "Fejl i at slette ordre."
|
1099 |
-
|
1100 |
-
#: adminpages/orders.php:169 adminpages/orders.php:119
|
1101 |
-
msgid "Order saved successfully."
|
1102 |
-
msgstr "Ordre gent succesfuldt."
|
1103 |
-
|
1104 |
-
#: adminpages/orders.php:174 adminpages/orders.php:124
|
1105 |
-
msgid "Error updating order timestamp."
|
1106 |
-
msgstr "Fejl i at opdatere tidsstempel ordre."
|
1107 |
-
|
1108 |
-
#: adminpages/orders.php:180 adminpages/orders.php:130
|
1109 |
-
msgid "Error saving order."
|
1110 |
-
msgstr "Fejl i at gemme ordre."
|
1111 |
-
|
1112 |
-
#: adminpages/orders.php:245 adminpages/orders.php:195
|
1113 |
-
msgid "Order"
|
1114 |
-
msgstr "Ordre"
|
1115 |
-
|
1116 |
-
#: adminpages/orders.php:247 adminpages/orders.php:197
|
1117 |
-
msgid "New Order"
|
1118 |
-
msgstr "Ny Ordre"
|
1119 |
-
|
1120 |
-
#: adminpages/orders.php:270 adminpages/orders.php:220
|
1121 |
-
msgid "Randomly generated for you."
|
1122 |
-
msgstr "Tilfældig genereret kun for dig"
|
1123 |
-
|
1124 |
-
#: adminpages/orders.php:275 adminpages/orders.php:225
|
1125 |
-
msgid "User ID"
|
1126 |
-
msgstr "Bruger ID"
|
1127 |
-
|
1128 |
-
#: adminpages/orders.php:284 adminpages/orders.php:234
|
1129 |
-
msgid "Membership Level ID"
|
1130 |
-
msgstr "Medlems Niveau ID"
|
1131 |
-
|
1132 |
-
#: adminpages/orders.php:293 adminpages/orders.php:243
|
1133 |
-
msgid "Billing Name"
|
1134 |
-
msgstr "Faktura Navn"
|
1135 |
-
|
1136 |
-
#: adminpages/orders.php:301 adminpages/orders.php:251
|
1137 |
-
msgid "Billing Street"
|
1138 |
-
msgstr "Faktura Vej"
|
1139 |
-
|
1140 |
-
#: adminpages/orders.php:308 adminpages/orders.php:258
|
1141 |
-
msgid "Billing City"
|
1142 |
-
msgstr "Faktura By"
|
1143 |
-
|
1144 |
-
#: adminpages/orders.php:315 adminpages/orders.php:265
|
1145 |
-
msgid "Billing State"
|
1146 |
-
msgstr "Faktura Region"
|
1147 |
-
|
1148 |
-
#: adminpages/orders.php:322 adminpages/orders.php:272
|
1149 |
-
msgid "Billing Postal Code"
|
1150 |
-
msgstr "Faktura Post Nummer"
|
1151 |
-
|
1152 |
-
#: adminpages/orders.php:329 adminpages/orders.php:279
|
1153 |
-
msgid "Billing Country"
|
1154 |
-
msgstr "Faktura Land"
|
1155 |
-
|
1156 |
-
#: adminpages/orders.php:337 adminpages/orders.php:287
|
1157 |
-
msgid "Billing Phone"
|
1158 |
-
msgstr "Faktura Telefon"
|
1159 |
-
|
1160 |
-
#: adminpages/orders.php:346 adminpages/orders.php:296
|
1161 |
-
msgid "Sub Total"
|
1162 |
-
msgstr "Subtotal"
|
1163 |
-
|
1164 |
-
#: adminpages/orders.php:354 pages/invoice.php:80 adminpages/orders.php:304
|
1165 |
-
#: pages/invoice.php:78
|
1166 |
-
msgid "Tax"
|
1167 |
-
msgstr "Skat"
|
1168 |
-
|
1169 |
-
#: adminpages/orders.php:362 adminpages/orders.php:312
|
1170 |
-
msgid "Coupon Amount"
|
1171 |
-
msgstr "Rabat Beløb"
|
1172 |
-
|
1173 |
-
#: adminpages/orders.php:370 adminpages/orders.php:905 pages/invoice.php:84
|
1174 |
-
#: adminpages/orders.php:320 adminpages/orders.php:602 pages/invoice.php:82
|
1175 |
-
msgid "Total"
|
1176 |
-
msgstr "Total"
|
1177 |
-
|
1178 |
-
#: adminpages/orders.php:375 adminpages/orders.php:325
|
1179 |
-
msgid "Should be subtotal + tax - couponamount."
|
1180 |
-
msgstr "Skulle være subtotal + skat - rabat beløb"
|
1181 |
-
|
1182 |
-
#: adminpages/orders.php:380 adminpages/orders.php:330
|
1183 |
-
msgid "Payment Type"
|
1184 |
-
msgstr "Betalings Type"
|
1185 |
-
|
1186 |
-
#: adminpages/orders.php:385 adminpages/orders.php:335
|
1187 |
-
msgid "e.g. PayPal Express, PayPal Standard, Credit Card."
|
1188 |
-
msgstr "e.g. PayPal Express, PayPal Standard. Kreditkort."
|
1189 |
-
|
1190 |
-
#: adminpages/orders.php:389 pages/billing.php:238 pages/checkout.php:493
|
1191 |
-
#: adminpages/orders.php:339 pages/billing.php:234 pages/checkout.php:510
|
1192 |
-
#: pages/checkout.php:517
|
1193 |
-
msgid "Card Type"
|
1194 |
-
msgstr "Kort Type"
|
1195 |
-
|
1196 |
-
#: adminpages/orders.php:394 adminpages/orders.php:344
|
1197 |
-
msgid "e.g. Visa, MasterCard, AMEX, etc"
|
1198 |
-
msgstr "e.g Visa, MasterCard. AMEX, etc"
|
1199 |
-
|
1200 |
-
#: adminpages/orders.php:398 adminpages/paymentsettings.php:352
|
1201 |
-
#: adminpages/orders.php:348 adminpages/paymentsettings.php:347
|
1202 |
-
msgid "Account Number"
|
1203 |
-
msgstr "Konto Nummer"
|
1204 |
-
|
1205 |
-
#: adminpages/orders.php:403 adminpages/orders.php:353
|
1206 |
-
msgid "Obscure all but last 4 digits."
|
1207 |
-
msgstr "Skjul alle personlige oplysninger, undtagen de sidste 4 cifre"
|
1208 |
-
|
1209 |
-
#: adminpages/orders.php:408 adminpages/orders.php:358
|
1210 |
-
msgid "Expiration Month"
|
1211 |
-
msgstr "Udløbs Måned"
|
1212 |
-
|
1213 |
-
#: adminpages/orders.php:415 adminpages/orders.php:365
|
1214 |
-
msgid "Expiration Year"
|
1215 |
-
msgstr "Udløbs År"
|
1216 |
-
|
1217 |
-
#: adminpages/orders.php:423 adminpages/orders.php:909
|
1218 |
-
#: adminpages/orders.php:373 adminpages/orders.php:606
|
1219 |
-
msgid "Status"
|
1220 |
-
msgstr "Status"
|
1221 |
-
|
1222 |
-
#: adminpages/orders.php:444 adminpages/orders.php:907
|
1223 |
-
#: adminpages/orders.php:394 adminpages/orders.php:604
|
1224 |
-
msgid "Gateway"
|
1225 |
-
msgstr "Gateway"
|
1226 |
-
|
1227 |
-
#: adminpages/orders.php:448 adminpages/orders.php:398
|
1228 |
-
msgid "Testing Only"
|
1229 |
-
msgstr "Kun for Test"
|
1230 |
-
|
1231 |
-
#: adminpages/orders.php:449 adminpages/paymentsettings.php:159
|
1232 |
-
#: adminpages/orders.php:399 adminpages/paymentsettings.php:157
|
1233 |
-
msgid "Pay by Check"
|
1234 |
-
msgstr "Betal med Check"
|
1235 |
-
|
1236 |
-
#: adminpages/orders.php:461 adminpages/paymentsettings.php:184
|
1237 |
-
#: adminpages/orders.php:411 adminpages/paymentsettings.php:175
|
1238 |
-
#: adminpages/paymentsettings.php:179
|
1239 |
-
msgid "Gateway Environment"
|
1240 |
-
msgstr "Gateway Miljø"
|
1241 |
-
|
1242 |
-
#: adminpages/orders.php:465 adminpages/paymentsettings.php:188
|
1243 |
-
#: adminpages/orders.php:415 adminpages/paymentsettings.php:179
|
1244 |
-
#: adminpages/paymentsettings.php:183
|
1245 |
-
msgid "Sandbox/Testing"
|
1246 |
-
msgstr "Sandkasse/Test"
|
1247 |
-
|
1248 |
-
#: adminpages/orders.php:466 adminpages/paymentsettings.php:189
|
1249 |
-
#: adminpages/orders.php:416 adminpages/paymentsettings.php:180
|
1250 |
-
#: adminpages/paymentsettings.php:184
|
1251 |
-
msgid "Live/Production"
|
1252 |
-
msgstr "Live/Produktion"
|
1253 |
-
|
1254 |
-
#: adminpages/orders.php:473 adminpages/orders.php:423
|
1255 |
-
msgid "Payment Transaction ID"
|
1256 |
-
msgstr "Betalings Transaktions ID"
|
1257 |
-
|
1258 |
-
#: adminpages/orders.php:478 adminpages/orders.php:428
|
1259 |
-
msgid "Generated by the gateway. Useful to cross reference orders."
|
1260 |
-
msgstr "Genereret af Gateway. Nyttigt til at krydse referencer med ordre."
|
1261 |
-
|
1262 |
-
#: adminpages/orders.php:482 adminpages/orders.php:432
|
1263 |
-
msgid "Subscription Transaction ID"
|
1264 |
-
msgstr "Abonnoments Transaktion ID"
|
1265 |
-
|
1266 |
-
#: adminpages/orders.php:487 adminpages/orders.php:437
|
1267 |
-
msgid "Generated by the gateway. Useful to cross reference subscriptions."
|
1268 |
-
msgstr ""
|
1269 |
-
"Genereret af Gateway. Nyttigt til at krydse referencer med abonnomenter. "
|
1270 |
-
|
1271 |
-
#: adminpages/orders.php:492 adminpages/orders.php:910 pages/invoice.php:107
|
1272 |
-
#: adminpages/orders.php:442 adminpages/orders.php:607 pages/invoice.php:105
|
1273 |
-
msgid "Date"
|
1274 |
-
msgstr "Dato"
|
1275 |
-
|
1276 |
-
#: adminpages/orders.php:527 adminpages/orders.php:477
|
1277 |
-
msgid "Affiliate ID"
|
1278 |
-
msgstr "Assosieret ID"
|
1279 |
-
|
1280 |
-
#: adminpages/orders.php:535 adminpages/orders.php:485
|
1281 |
-
msgid "Affiliate SubID"
|
1282 |
-
msgstr "Assosieret SubID"
|
1283 |
-
|
1284 |
-
#: adminpages/orders.php:545 adminpages/orders.php:495
|
1285 |
-
msgid "Notes"
|
1286 |
-
msgstr "Noter"
|
1287 |
-
|
1288 |
-
#: adminpages/orders.php:560 adminpages/orders.php:510
|
1289 |
-
msgid "Save Order"
|
1290 |
-
msgstr "Gem Ordre"
|
1291 |
-
|
1292 |
-
#: adminpages/orders.php:561 pages/billing.php:330 adminpages/orders.php:511
|
1293 |
-
#: pages/billing.php:295 pages/billing.php:299
|
1294 |
-
msgid "Cancel"
|
1295 |
-
msgstr "Annullere"
|
1296 |
-
|
1297 |
-
#: adminpages/orders.php:570 includes/adminpages.php:55
|
1298 |
-
#: includes/adminpages.php:163 adminpages/orders.php:520
|
1299 |
-
#: includes/adminpages.php:17 includes/adminpages.php:84
|
1300 |
-
#: includes/adminpages.php:156
|
1301 |
-
msgid "Orders"
|
1302 |
-
msgstr "Ordrer"
|
1303 |
-
|
1304 |
-
#: adminpages/orders.php:571 adminpages/orders.php:521
|
1305 |
-
msgid "Add New Order"
|
1306 |
-
msgstr "Tilføj Ny Ordrer"
|
1307 |
-
|
1308 |
-
#: adminpages/orders.php:605
|
1309 |
-
msgid "All"
|
1310 |
-
msgstr "Alle"
|
1311 |
-
|
1312 |
-
#: adminpages/orders.php:606
|
1313 |
-
msgid "Within a Date Range"
|
1314 |
-
msgstr "Inden for et datointerval"
|
1315 |
-
|
1316 |
-
#: adminpages/orders.php:607
|
1317 |
-
msgid "Predefined Date Range"
|
1318 |
-
msgstr "Foruddefineret datointerval"
|
1319 |
-
|
1320 |
-
#: adminpages/orders.php:608
|
1321 |
-
msgid "Within a Level"
|
1322 |
-
msgstr "Indenfor et Niveau"
|
1323 |
-
|
1324 |
-
#: adminpages/orders.php:609
|
1325 |
-
msgid "Within a Status"
|
1326 |
-
msgstr "Indenfor en Status"
|
1327 |
-
|
1328 |
-
#: adminpages/orders.php:612
|
1329 |
-
msgid "From"
|
1330 |
-
msgstr "Fra"
|
1331 |
-
|
1332 |
-
#: adminpages/orders.php:624
|
1333 |
-
msgid "To"
|
1334 |
-
msgstr "Til"
|
1335 |
-
|
1336 |
-
#: adminpages/orders.php:636
|
1337 |
-
msgid "filter by "
|
1338 |
-
msgstr "Filtreret af"
|
1339 |
-
|
1340 |
-
#: adminpages/orders.php:674
|
1341 |
-
msgid "Filter"
|
1342 |
-
msgstr "Filtreret"
|
1343 |
-
|
1344 |
-
#: adminpages/orders.php:777 adminpages/orders.php:780
|
1345 |
-
#: adminpages/orders.php:535 adminpages/orders.php:538
|
1346 |
-
msgid "Search Orders"
|
1347 |
-
msgstr "Søg Ordrer"
|
1348 |
-
|
1349 |
-
#: adminpages/orders.php:893 adminpages/orders.php:590
|
1350 |
-
#, php-format
|
1351 |
-
msgid "%d orders found."
|
1352 |
-
msgstr "%d ordre fundet."
|
1353 |
-
|
1354 |
-
#: adminpages/orders.php:902 adminpages/paymentsettings.php:220
|
1355 |
-
#: adminpages/reports/login.php:141 adminpages/orders.php:599
|
1356 |
-
#: adminpages/paymentsettings.php:211 adminpages/paymentsettings.php:215
|
1357 |
-
msgid "User"
|
1358 |
-
msgstr "Bruger"
|
1359 |
-
|
1360 |
-
#: adminpages/orders.php:904 includes/profile.php:27 pages/checkout.php:33
|
1361 |
-
#: pages/confirmation.php:47 pages/confirmation.php:64
|
1362 |
-
#: pages/confirmation.php:105 pages/invoice.php:28 pages/invoice.php:51
|
1363 |
-
#: adminpages/orders.php:601 includes/profile.php:25 pages/checkout.php:34
|
1364 |
-
#: pages/confirmation.php:46 pages/confirmation.php:62
|
1365 |
-
#: pages/confirmation.php:103 pages/invoice.php:27 pages/invoice.php:49
|
1366 |
-
msgid "Membership Level"
|
1367 |
-
msgstr "Medlems Niveau"
|
1368 |
-
|
1369 |
-
#: adminpages/orders.php:906 adminpages/orders.php:954
|
1370 |
-
#: adminpages/orders.php:603 adminpages/orders.php:651
|
1371 |
-
msgid "Payment"
|
1372 |
-
msgstr "Betaling"
|
1373 |
-
|
1374 |
-
#: adminpages/orders.php:908 adminpages/orders.php:605
|
1375 |
-
msgid "Transaction IDs"
|
1376 |
-
msgstr "Transaktion ID'er"
|
1377 |
-
|
1378 |
-
#: adminpages/orders.php:933 adminpages/orders.php:630
|
1379 |
-
msgid "deleted"
|
1380 |
-
msgstr "slettet"
|
1381 |
-
|
1382 |
-
#: adminpages/orders.php:956 adminpages/orders.php:653
|
1383 |
-
msgid "Subscription"
|
1384 |
-
msgstr "Abonnoment"
|
1385 |
-
|
1386 |
-
#: adminpages/orders.php:967 adminpages/orders.php:664
|
1387 |
-
#, php-format
|
1388 |
-
msgid ""
|
1389 |
-
"Deleting orders is permanent and can affect active users. Are you sure you "
|
1390 |
-
"want to delete order %s?"
|
1391 |
-
msgstr ""
|
1392 |
-
"Slette ordrer er permanent og kan ikke påvirke aktive brugere. Er du sikker "
|
1393 |
-
"på, at du ville slette ordrer %s?"
|
1394 |
-
|
1395 |
-
#: adminpages/orders.php:977 adminpages/orders.php:674
|
1396 |
-
msgid "No orders found."
|
1397 |
-
msgstr "Ingen ordrer fundet."
|
1398 |
-
|
1399 |
-
#: adminpages/pagesettings.php:51
|
1400 |
-
msgid "Membership Account"
|
1401 |
-
msgstr "Medlems Konto"
|
1402 |
-
|
1403 |
-
#: adminpages/pagesettings.php:54
|
1404 |
-
msgid "Membership Billing"
|
1405 |
-
msgstr "Medlems Regning"
|
1406 |
-
|
1407 |
-
#: adminpages/pagesettings.php:57
|
1408 |
-
msgid "Membership Cancel"
|
1409 |
-
msgstr "Medlems Annullering"
|
1410 |
-
|
1411 |
-
#: adminpages/pagesettings.php:60
|
1412 |
-
msgid "Membership Checkout"
|
1413 |
-
msgstr "Medlems Gå til Kassen"
|
1414 |
-
|
1415 |
-
#: adminpages/pagesettings.php:63
|
1416 |
-
msgid "Membership Confirmation"
|
1417 |
-
msgstr "Medlems Bekræftigelse"
|
1418 |
-
|
1419 |
-
#: adminpages/pagesettings.php:66
|
1420 |
-
msgid "Membership Invoice"
|
1421 |
-
msgstr "Medlems Faktura"
|
1422 |
-
|
1423 |
-
#: adminpages/pagesettings.php:73
|
1424 |
-
#, php-format
|
1425 |
-
msgid "Membership %s"
|
1426 |
-
msgstr "Medlems %s"
|
1427 |
-
|
1428 |
-
#: adminpages/pagesettings.php:111 adminpages/pagesettings.php:83
|
1429 |
-
msgid "The following pages have been created for you"
|
1430 |
-
msgstr "De følgende sider, er bleven oprettet for dig"
|
1431 |
-
|
1432 |
-
#: adminpages/pagesettings.php:126 adminpages/pagesettings.php:98
|
1433 |
-
msgid ""
|
1434 |
-
"Manage the WordPress pages assigned to each required Paid Memberships Pro "
|
1435 |
-
"page."
|
1436 |
-
msgstr ""
|
1437 |
-
"Håndtere Wordpress sider, som er tildelt og påkrævet til hver Paid "
|
1438 |
-
"Memberships Pro sider eller."
|
1439 |
-
|
1440 |
-
#: adminpages/pagesettings.php:132 adminpages/pagesettings.php:104
|
1441 |
-
msgid ""
|
1442 |
-
"Assign the WordPress pages for each required Paid Memberships Pro page or"
|
1443 |
-
msgstr ""
|
1444 |
-
"Tildel Wordpress sider, til hver påkrævet Paid Memberships Pro sider eller"
|
1445 |
-
|
1446 |
-
#: adminpages/pagesettings.php:132 adminpages/pagesettings.php:104
|
1447 |
-
msgid "click here to let us generate them for you"
|
1448 |
-
msgstr "Klik her, for at lade dem generere dem for dig"
|
1449 |
-
|
1450 |
-
#: adminpages/pagesettings.php:140 adminpages/pagesettings.php:112
|
1451 |
-
msgid "Account Page"
|
1452 |
-
msgstr "Konto Side"
|
1453 |
-
|
1454 |
-
#: adminpages/pagesettings.php:147 adminpages/pagesettings.php:162
|
1455 |
-
#: adminpages/pagesettings.php:177 adminpages/pagesettings.php:193
|
1456 |
-
#: adminpages/pagesettings.php:209 adminpages/pagesettings.php:225
|
1457 |
-
#: adminpages/pagesettings.php:241 adminpages/pagesettings.php:119
|
1458 |
-
#: adminpages/pagesettings.php:132 adminpages/pagesettings.php:134
|
1459 |
-
#: adminpages/pagesettings.php:145 adminpages/pagesettings.php:149
|
1460 |
-
#: adminpages/pagesettings.php:159 adminpages/pagesettings.php:165
|
1461 |
-
#: adminpages/pagesettings.php:173 adminpages/pagesettings.php:181
|
1462 |
-
#: adminpages/pagesettings.php:187 adminpages/pagesettings.php:197
|
1463 |
-
#: adminpages/pagesettings.php:201 adminpages/pagesettings.php:213
|
1464 |
-
msgid "edit page"
|
1465 |
-
msgstr "redigere side"
|
1466 |
-
|
1467 |
-
#: adminpages/pagesettings.php:149 adminpages/pagesettings.php:164
|
1468 |
-
#: adminpages/pagesettings.php:179 adminpages/pagesettings.php:195
|
1469 |
-
#: adminpages/pagesettings.php:211 adminpages/pagesettings.php:227
|
1470 |
-
#: adminpages/pagesettings.php:243 adminpages/pagesettings.php:121
|
1471 |
-
#: adminpages/pagesettings.php:136 adminpages/pagesettings.php:151
|
1472 |
-
#: adminpages/pagesettings.php:167 adminpages/pagesettings.php:183
|
1473 |
-
#: adminpages/pagesettings.php:199 adminpages/pagesettings.php:215
|
1474 |
-
msgid "view page"
|
1475 |
-
msgstr "se side"
|
1476 |
-
|
1477 |
-
#: adminpages/pagesettings.php:151 adminpages/pagesettings.php:166
|
1478 |
-
#: adminpages/pagesettings.php:181 adminpages/pagesettings.php:197
|
1479 |
-
#: adminpages/pagesettings.php:213 adminpages/pagesettings.php:229
|
1480 |
-
#: adminpages/pagesettings.php:245 adminpages/pagesettings.php:121
|
1481 |
-
#: adminpages/pagesettings.php:123 adminpages/pagesettings.php:134
|
1482 |
-
#: adminpages/pagesettings.php:138 adminpages/pagesettings.php:147
|
1483 |
-
#: adminpages/pagesettings.php:153 adminpages/pagesettings.php:161
|
1484 |
-
#: adminpages/pagesettings.php:169 adminpages/pagesettings.php:175
|
1485 |
-
#: adminpages/pagesettings.php:185 adminpages/pagesettings.php:189
|
1486 |
-
#: adminpages/pagesettings.php:201 adminpages/pagesettings.php:203
|
1487 |
-
#: adminpages/pagesettings.php:217
|
1488 |
-
msgid "Include the shortcode"
|
1489 |
-
msgstr "Include kort kode"
|
1490 |
-
|
1491 |
-
#: adminpages/pagesettings.php:155 adminpages/pagesettings.php:125
|
1492 |
-
#: adminpages/pagesettings.php:127
|
1493 |
-
msgid "Billing Information Page"
|
1494 |
-
msgstr "Regnings Informations Side"
|
1495 |
-
|
1496 |
-
#: adminpages/pagesettings.php:170 adminpages/pagesettings.php:138
|
1497 |
-
#: adminpages/pagesettings.php:142
|
1498 |
-
msgid "Cancel Page"
|
1499 |
-
msgstr "Annullere Side"
|
1500 |
-
|
1501 |
-
#: adminpages/pagesettings.php:186 adminpages/pagesettings.php:152
|
1502 |
-
#: adminpages/pagesettings.php:158
|
1503 |
-
msgid "Checkout Page"
|
1504 |
-
msgstr "Gå til Kassen Side"
|
1505 |
-
|
1506 |
-
#: adminpages/pagesettings.php:202 adminpages/pagesettings.php:166
|
1507 |
-
#: adminpages/pagesettings.php:174
|
1508 |
-
msgid "Confirmation Page"
|
1509 |
-
msgstr "Bekræftigelses Side"
|
1510 |
-
|
1511 |
-
#: adminpages/pagesettings.php:218 adminpages/pagesettings.php:180
|
1512 |
-
#: adminpages/pagesettings.php:190
|
1513 |
-
msgid "Invoice Page"
|
1514 |
-
msgstr "Fakturer Side"
|
1515 |
-
|
1516 |
-
#: adminpages/pagesettings.php:234 adminpages/pagesettings.php:194
|
1517 |
-
#: adminpages/pagesettings.php:206
|
1518 |
-
msgid "Levels Page"
|
1519 |
-
msgstr "Nivauers Side"
|
1520 |
-
|
1521 |
-
#: adminpages/paymentsettings.php:77 adminpages/paymentsettings.php:82
|
1522 |
-
msgid "Your payment settings have been updated."
|
1523 |
-
msgstr "Din betalings indstillinger er bleven opdatert."
|
1524 |
-
|
1525 |
-
#: adminpages/paymentsettings.php:146 adminpages/paymentsettings.php:154
|
1526 |
-
#: adminpages/paymentsettings.php:144 adminpages/paymentsettings.php:152
|
1527 |
-
msgid "Payment Gateway"
|
1528 |
-
msgstr "Betalings Gateway"
|
1529 |
-
|
1530 |
-
#: adminpages/paymentsettings.php:146 adminpages/paymentsettings.php:144
|
1531 |
-
msgid "SSL Settings"
|
1532 |
-
msgstr "SSL Indstillinger"
|
1533 |
-
|
1534 |
-
#: adminpages/paymentsettings.php:148
|
1535 |
-
msgid ""
|
1536 |
-
"Learn more about <a title=\"Paid Memberships Pro - SSL Settings\" target="
|
1537 |
-
"\"_blank\" href=\"http://www.paidmembershipspro.com/support/initial-plugin-"
|
1538 |
-
"setup/ssl/\">SSL</a> or <a title=\"Paid Memberships Pro - Payment Gateway "
|
1539 |
-
"Settings\" target=\"_blank\" href=\"http://www.paidmembershipspro.com/"
|
1540 |
-
"support/initial-plugin-setup/payment-gateway/\">Payment Gateway Settings</a>."
|
1541 |
-
msgstr ""
|
1542 |
-
"Lær mere omkring <a title=\"Paid Memberships Pro - SSL Indstillinger\" "
|
1543 |
-
"target=\"_blank\" href=\"http://www.paidmembershipspro.com/support/initial-"
|
1544 |
-
"plugin-setup/ssl/\">SSL</a> eller <a title=\"Paid Memberships Pro - Betaling "
|
1545 |
-
"Gateway Indstillinger\" target=\"_blank\" href=\"http://www."
|
1546 |
-
"paidmembershipspro.com/support/initial-plugin-setup/payment-gateway/"
|
1547 |
-
"\">Betalings Gateway Indstillinger</a>."
|
1548 |
-
|
1549 |
-
#: adminpages/paymentsettings.php:174
|
1550 |
-
msgid ""
|
1551 |
-
"This gateway option is in beta. Some functionality may not be available. "
|
1552 |
-
"Please contact Paid Memberships Pro with any issues you run into. "
|
1553 |
-
"<strong>Please be sure to upgrade Paid Memberships Pro to the latest "
|
1554 |
-
"versions when available.</strong>"
|
1555 |
-
msgstr ""
|
1556 |
-
"Denne gateway funktion er I beta. Nogle funktioner er nok ikke tilgængelig. "
|
1557 |
-
"Venlig kontakt Paid Memberships Pro med de problemer, du oplever. "
|
1558 |
-
"<strong>Husk at opgradere Paid Memberships Pro til den seneste version, når "
|
1559 |
-
"det er tilgængeligt.</strong>"
|
1560 |
-
|
1561 |
-
#: adminpages/paymentsettings.php:179
|
1562 |
-
msgid ""
|
1563 |
-
"We do not recommend using PayPal Standard. We suggest using PayPal Express, "
|
1564 |
-
"Website Payments Pro (Legacy), or PayPal Pro (Payflow Pro). <a target="
|
1565 |
-
"\"_blank\" href=\"http://www.paidmembershipspro.com/2013/09/read-using-"
|
1566 |
-
"paypal-standard-paid-memberships-pro/\">More information on why can be found "
|
1567 |
-
"here.</a>"
|
1568 |
-
msgstr ""
|
1569 |
-
"Vi anbefaler ikke, at bruge Paypal Standard. Vi forslår at brute PayPal "
|
1570 |
-
"Express, Website Payments Pro (Legacy), eller PayPal Pro (Payflow Pro). <a "
|
1571 |
-
"target=\"_blank\" href=\"http://www.paidmembershipspro.com/2013/09/read-"
|
1572 |
-
"using-paypal-standard-paid-memberships-pro/\">Mere information om hvorfor, "
|
1573 |
-
"kan findes her.</a>"
|
1574 |
-
|
1575 |
-
#: adminpages/paymentsettings.php:204 adminpages/paymentsettings.php:195
|
1576 |
-
#: adminpages/paymentsettings.php:199
|
1577 |
-
msgid "Partner"
|
1578 |
-
msgstr "Partner"
|
1579 |
-
|
1580 |
-
#: adminpages/paymentsettings.php:212 adminpages/paymentsettings.php:203
|
1581 |
-
#: adminpages/paymentsettings.php:207
|
1582 |
-
msgid "Vendor"
|
1583 |
-
msgstr "Sælger"
|
1584 |
-
|
1585 |
-
#: adminpages/paymentsettings.php:228 pages/checkout.php:180
|
1586 |
-
#: adminpages/paymentsettings.php:219 adminpages/paymentsettings.php:223
|
1587 |
-
#: pages/checkout.php:177
|
1588 |
-
msgid "Password"
|
1589 |
-
msgstr "Adgangskode"
|
1590 |
-
|
1591 |
-
#: adminpages/paymentsettings.php:236 adminpages/paymentsettings.php:227
|
1592 |
-
#: adminpages/paymentsettings.php:231
|
1593 |
-
msgid "Gateway Account Email"
|
1594 |
-
msgstr "Gateway Konto Email"
|
1595 |
-
|
1596 |
-
#: adminpages/paymentsettings.php:244 adminpages/paymentsettings.php:336
|
1597 |
-
#: adminpages/paymentsettings.php:235 adminpages/paymentsettings.php:239
|
1598 |
-
#: adminpages/paymentsettings.php:331
|
1599 |
-
msgid "API Username"
|
1600 |
-
msgstr "API Brugernavn"
|
1601 |
-
|
1602 |
-
#: adminpages/paymentsettings.php:252 adminpages/paymentsettings.php:344
|
1603 |
-
#: adminpages/paymentsettings.php:243 adminpages/paymentsettings.php:247
|
1604 |
-
#: adminpages/paymentsettings.php:339
|
1605 |
-
msgid "API Password"
|
1606 |
-
msgstr "API Adgangskode"
|
1607 |
-
|
1608 |
-
#: adminpages/paymentsettings.php:260 adminpages/paymentsettings.php:251
|
1609 |
-
#: adminpages/paymentsettings.php:255
|
1610 |
-
msgid "API Signature"
|
1611 |
-
msgstr "API Signatur"
|
1612 |
-
|
1613 |
-
#: adminpages/paymentsettings.php:269 adminpages/paymentsettings.php:260
|
1614 |
-
#: adminpages/paymentsettings.php:264
|
1615 |
-
msgid "Login Name"
|
1616 |
-
msgstr "Login Navn"
|
1617 |
-
|
1618 |
-
#: adminpages/paymentsettings.php:277 adminpages/paymentsettings.php:268
|
1619 |
-
#: adminpages/paymentsettings.php:272
|
1620 |
-
msgid "Transaction Key"
|
1621 |
-
msgstr "Transaktions Nøgle"
|
1622 |
-
|
1623 |
-
#: adminpages/paymentsettings.php:286 adminpages/paymentsettings.php:277
|
1624 |
-
#: adminpages/paymentsettings.php:281
|
1625 |
-
msgid "Secret Key"
|
1626 |
-
msgstr "Hemmelig Nøgle"
|
1627 |
-
|
1628 |
-
#: adminpages/paymentsettings.php:294 adminpages/paymentsettings.php:285
|
1629 |
-
#: adminpages/paymentsettings.php:289
|
1630 |
-
msgid "Publishable Key"
|
1631 |
-
msgstr "Publicerbar Nøgle"
|
1632 |
-
|
1633 |
-
#: adminpages/paymentsettings.php:303 adminpages/paymentsettings.php:369
|
1634 |
-
#: adminpages/paymentsettings.php:294 adminpages/paymentsettings.php:298
|
1635 |
-
#: adminpages/paymentsettings.php:364
|
1636 |
-
msgid "Merchant ID"
|
1637 |
-
msgstr "Købmands ID"
|
1638 |
-
|
1639 |
-
#: adminpages/paymentsettings.php:311 adminpages/paymentsettings.php:302
|
1640 |
-
#: adminpages/paymentsettings.php:306
|
1641 |
-
msgid "Public Key"
|
1642 |
-
msgstr "Offentlig Nøgle"
|
1643 |
-
|
1644 |
-
#: adminpages/paymentsettings.php:319 adminpages/paymentsettings.php:310
|
1645 |
-
#: adminpages/paymentsettings.php:314
|
1646 |
-
msgid "Private Key"
|
1647 |
-
msgstr "Privat Nøgle"
|
1648 |
-
|
1649 |
-
#: adminpages/paymentsettings.php:327 adminpages/paymentsettings.php:318
|
1650 |
-
#: adminpages/paymentsettings.php:322
|
1651 |
-
msgid "Client-Side Encryption Key"
|
1652 |
-
msgstr "Klient-Side Krypteret Nøgle"
|
1653 |
-
|
1654 |
-
#: adminpages/paymentsettings.php:360 adminpages/paymentsettings.php:355
|
1655 |
-
msgid "Secret Word"
|
1656 |
-
msgstr "Hemmlig Ord"
|
1657 |
-
|
1658 |
-
#: adminpages/paymentsettings.php:377 adminpages/paymentsettings.php:372
|
1659 |
-
msgid "Transaction Security Key"
|
1660 |
-
msgstr "Transaktion Sikkerheds Nøgle"
|
1661 |
-
|
1662 |
-
#: adminpages/paymentsettings.php:386 adminpages/paymentsettings.php:327
|
1663 |
-
#: adminpages/paymentsettings.php:337 adminpages/paymentsettings.php:356
|
1664 |
-
#: adminpages/paymentsettings.php:381
|
1665 |
-
msgid "Currency"
|
1666 |
-
msgstr "Valuta"
|
1667 |
-
|
1668 |
-
#: adminpages/paymentsettings.php:400
|
1669 |
-
msgid ""
|
1670 |
-
"Not all currencies will be supported by every gateway. Please check with "
|
1671 |
-
"your gateway."
|
1672 |
-
msgstr ""
|
1673 |
-
"Ikke alt Valuta understøtter alle gateways. Kontrollere venligst din Gateway."
|
1674 |
-
|
1675 |
-
#: adminpages/paymentsettings.php:406 adminpages/paymentsettings.php:375
|
1676 |
-
#: adminpages/paymentsettings.php:401
|
1677 |
-
msgid "Accepted Credit Card Types"
|
1678 |
-
msgstr "Accepteret Kreditkort Typer"
|
1679 |
-
|
1680 |
-
#: adminpages/paymentsettings.php:420 adminpages/paymentsettings.php:389
|
1681 |
-
#: adminpages/paymentsettings.php:415
|
1682 |
-
msgid "Instructions"
|
1683 |
-
msgstr "Instruktioner"
|
1684 |
-
|
1685 |
-
#: adminpages/paymentsettings.php:424 adminpages/paymentsettings.php:393
|
1686 |
-
#: adminpages/paymentsettings.php:419
|
1687 |
-
msgid ""
|
1688 |
-
"Who to write the check out to. Where to mail it. Shown on checkout, "
|
1689 |
-
"confirmation, and invoice pages."
|
1690 |
-
msgstr ""
|
1691 |
-
"Hvem skal checken udskrives til. Hvor skal den mails til. Vis ved gå til "
|
1692 |
-
"kassen, bekræftigelse, og faktura sider."
|
1693 |
-
|
1694 |
-
#: adminpages/paymentsettings.php:430 adminpages/paymentsettings.php:425
|
1695 |
-
msgid "Show Billing Address Fields"
|
1696 |
-
msgstr "Vis Regnings Adresse Felter."
|
1697 |
-
|
1698 |
-
#: adminpages/paymentsettings.php:437
|
1699 |
-
msgid ""
|
1700 |
-
"Stripe doesn't require billing address fields. Choose 'No' to hide them on "
|
1701 |
-
"the checkout page.<br /><strong>If No, make sure you disable address "
|
1702 |
-
"verification in the Stripe dashboard settings.</strong>"
|
1703 |
-
msgstr ""
|
1704 |
-
"Stripe behøver ikke regnings adresse felter. Vælg 'Nej' for at skjule dem "
|
1705 |
-
"ved gå til kassen side.<br/><strong>Hvis Nej, så vær sikker på, at du har "
|
1706 |
-
"deaktiveret bekræftigelse I Strip Kontrolpanel Indstillinger.</strong>"
|
1707 |
-
|
1708 |
-
#: adminpages/paymentsettings.php:443 adminpages/paymentsettings.php:398
|
1709 |
-
#: adminpages/paymentsettings.php:438
|
1710 |
-
msgid "Sales Tax"
|
1711 |
-
msgstr "Moms"
|
1712 |
-
|
1713 |
-
#: adminpages/paymentsettings.php:443 pages/billing.php:82
|
1714 |
-
#: adminpages/paymentsettings.php:398 adminpages/paymentsettings.php:438
|
1715 |
-
#: pages/billing.php:78
|
1716 |
-
msgid "optional"
|
1717 |
-
msgstr "valgfri"
|
1718 |
-
|
1719 |
-
#: adminpages/paymentsettings.php:446 adminpages/paymentsettings.php:401
|
1720 |
-
#: adminpages/paymentsettings.php:441
|
1721 |
-
msgid "Tax State"
|
1722 |
-
msgstr "Moms ialt"
|
1723 |
-
|
1724 |
-
#: adminpages/paymentsettings.php:447 adminpages/paymentsettings.php:402
|
1725 |
-
#: adminpages/paymentsettings.php:442
|
1726 |
-
msgid "abbreviation, e.g. \"PA\""
|
1727 |
-
msgstr "forkortelse, e.g. \"PA\""
|
1728 |
-
|
1729 |
-
#: adminpages/paymentsettings.php:449 adminpages/paymentsettings.php:404
|
1730 |
-
#: adminpages/paymentsettings.php:444
|
1731 |
-
msgid "decimal, e.g. \"0.06\""
|
1732 |
-
msgstr "decimal, e.g \"0.06\""
|
1733 |
-
|
1734 |
-
#: adminpages/paymentsettings.php:450
|
1735 |
-
msgid ""
|
1736 |
-
"US only. If values are given, tax will be applied for any members ordering "
|
1737 |
-
"from the selected state.<br />For non-US or more complex tax rules, use the "
|
1738 |
-
"<a target=\"_blank\" href=\"http://www.paidmembershipspro.com/2013/10/non-us-"
|
1739 |
-
"taxes-paid-memberships-pro/\">pmpro_tax filter</a>."
|
1740 |
-
msgstr ""
|
1741 |
-
"Kun for US. Hvis værdien er sat korret op, så ville skat blive tilføjet til "
|
1742 |
-
"hvilken som helst medlems ordre fra den valgte stat.<br> For ikke-US eller "
|
1743 |
-
"mere komplekse skatte regler, brug dette <a target=\"_blank\" href=\"http://"
|
1744 |
-
"www.paidmembershipspro.com/2013/10/non-us-taxes-paid-memberships-pro/"
|
1745 |
-
"\">pmpro_tax filter</a>."
|
1746 |
-
|
1747 |
-
#: adminpages/paymentsettings.php:455 adminpages/paymentsettings.php:450
|
1748 |
-
msgid "Force SSL"
|
1749 |
-
msgstr "Tving SSL"
|
1750 |
-
|
1751 |
-
#: adminpages/paymentsettings.php:461 adminpages/paymentsettings.php:456
|
1752 |
-
msgid "Yes (with JavaScript redirects)"
|
1753 |
-
msgstr "Ja (med JavaScript omdirigering)"
|
1754 |
-
|
1755 |
-
#: adminpages/paymentsettings.php:468 adminpages/paymentsettings.php:430
|
1756 |
-
#: adminpages/paymentsettings.php:463
|
1757 |
-
msgid "SSL Seal Code"
|
1758 |
-
msgstr "SSL Seal Kode"
|
1759 |
-
|
1760 |
-
#: adminpages/paymentsettings.php:477 adminpages/paymentsettings.php:438
|
1761 |
-
#: adminpages/paymentsettings.php:471
|
1762 |
-
msgid "HTTPS Nuclear Option"
|
1763 |
-
msgstr "HTTPS Nuclear Funktioner"
|
1764 |
-
|
1765 |
-
#: adminpages/paymentsettings.php:480 adminpages/paymentsettings.php:441
|
1766 |
-
#: adminpages/paymentsettings.php:474
|
1767 |
-
msgid ""
|
1768 |
-
"Use the \"Nuclear Option\" to use secure (HTTPS) URLs on your secure pages. "
|
1769 |
-
"Check this if you are using SSL and have warnings on your checkout pages."
|
1770 |
-
msgstr ""
|
1771 |
-
"Brug \"Nuclear Funktion\" for at sikre (HTTPS) URLs på dine sikre sider. "
|
1772 |
-
"Tjek hvis du bruger SSL og har advarsler på din gå til kassen sider."
|
1773 |
-
|
1774 |
-
#: adminpages/paymentsettings.php:485 adminpages/paymentsettings.php:446
|
1775 |
-
#: adminpages/paymentsettings.php:479
|
1776 |
-
msgid "IPN Handler URL"
|
1777 |
-
msgstr "IPN Handler URL"
|
1778 |
-
|
1779 |
-
#: adminpages/paymentsettings.php:488 adminpages/paymentsettings.php:449
|
1780 |
-
#: adminpages/paymentsettings.php:482
|
1781 |
-
msgid "To fully integrate with PayPal, be sure to set your IPN Handler URL to "
|
1782 |
-
msgstr ""
|
1783 |
-
"For at integrerer fuldt ud med PayPal, vær sikker på, sæt din IPN Handler "
|
1784 |
-
"URL til "
|
1785 |
-
|
1786 |
-
#: adminpages/paymentsettings.php:493 adminpages/paymentsettings.php:487
|
1787 |
-
msgid "TwoCheckout INS URL"
|
1788 |
-
msgstr "TwoCheckout INS URL"
|
1789 |
-
|
1790 |
-
#: adminpages/paymentsettings.php:496 adminpages/paymentsettings.php:490
|
1791 |
-
msgid ""
|
1792 |
-
"To fully integrate with 2Checkout, be sure to set your 2Checkout INS URL "
|
1793 |
-
msgstr ""
|
1794 |
-
"For at kunne integrerer fuldtud med 2Checkout, vær sikker på, at sætte din "
|
1795 |
-
"2Checkout INS URL"
|
1796 |
-
|
1797 |
-
#: adminpages/paymentsettings.php:501 adminpages/paymentsettings.php:454
|
1798 |
-
#: adminpages/paymentsettings.php:495
|
1799 |
-
msgid "Silent Post URL"
|
1800 |
-
msgstr "Skjul Post URL"
|
1801 |
-
|
1802 |
-
#: adminpages/paymentsettings.php:504 adminpages/paymentsettings.php:457
|
1803 |
-
#: adminpages/paymentsettings.php:498
|
1804 |
-
msgid ""
|
1805 |
-
"To fully integrate with Authorize.net, be sure to set your Silent Post URL to"
|
1806 |
-
msgstr ""
|
1807 |
-
"For at kunne integrerer fuldtud med Authorize.net, vær sikker på, at sætte "
|
1808 |
-
"din Silent Post URL til"
|
1809 |
-
|
1810 |
-
#: adminpages/paymentsettings.php:509 adminpages/paymentsettings.php:517
|
1811 |
-
#: adminpages/paymentsettings.php:462 adminpages/paymentsettings.php:470
|
1812 |
-
#: adminpages/paymentsettings.php:503 adminpages/paymentsettings.php:511
|
1813 |
-
msgid "Web Hook URL"
|
1814 |
-
msgstr "Web Hook URL"
|
1815 |
-
|
1816 |
-
#: adminpages/paymentsettings.php:512 adminpages/paymentsettings.php:465
|
1817 |
-
#: adminpages/paymentsettings.php:506
|
1818 |
-
msgid "To fully integrate with Stripe, be sure to set your Web Hook URL to"
|
1819 |
-
msgstr ""
|
1820 |
-
"For at kunne integrerer fuldtud med Stripe, vær sikker på, at sætte din web "
|
1821 |
-
"Hook URL til"
|
1822 |
-
|
1823 |
-
#: adminpages/paymentsettings.php:521 adminpages/paymentsettings.php:474
|
1824 |
-
#: adminpages/paymentsettings.php:515
|
1825 |
-
msgid "To fully integrate with Braintree, be sure to set your Web Hook URL to"
|
1826 |
-
msgstr ""
|
1827 |
-
"For at kunne integrerer fuldtud med Braintree, vær sikker på, at sætte din "
|
1828 |
-
"Silent Post URL til"
|
1829 |
-
|
1830 |
-
#: adminpages/reports.php:40 adminpages/reports.php:26
|
1831 |
-
#: adminpages/reports.php:37
|
1832 |
-
msgid "Details"
|
1833 |
-
msgstr "Detaljer"
|
1834 |
-
|
1835 |
-
#: adminpages/reports/login.php:16
|
1836 |
-
msgid "Visits, Views, and Logins"
|
1837 |
-
msgstr "Besøgende, Set, og Logget Ind"
|
1838 |
-
|
1839 |
-
#: adminpages/reports/login.php:26
|
1840 |
-
msgid "Visits Today"
|
1841 |
-
msgstr "Besøgende Idag"
|
1842 |
-
|
1843 |
-
#: adminpages/reports/login.php:27 adminpages/reports/login.php:147
|
1844 |
-
msgid "Visits This Month"
|
1845 |
-
msgstr "Besøgende I denne Måned"
|
1846 |
-
|
1847 |
-
#: adminpages/reports/login.php:28
|
1848 |
-
msgid "Visits All Time"
|
1849 |
-
msgstr "Besøgende Hele Tiden"
|
1850 |
-
|
1851 |
-
#: adminpages/reports/login.php:31
|
1852 |
-
msgid "Views Today"
|
1853 |
-
msgstr "Set Idag"
|
1854 |
-
|
1855 |
-
#: adminpages/reports/login.php:32 adminpages/reports/login.php:149
|
1856 |
-
msgid "Views This Month"
|
1857 |
-
msgstr "Set I Denne Måned"
|
1858 |
-
|
1859 |
-
#: adminpages/reports/login.php:33
|
1860 |
-
msgid "Views All Time"
|
1861 |
-
msgstr "Set Hele Tiden"
|
1862 |
-
|
1863 |
-
#: adminpages/reports/login.php:36
|
1864 |
-
msgid "Logins Today"
|
1865 |
-
msgstr "Logget ind Idag"
|
1866 |
-
|
1867 |
-
#: adminpages/reports/login.php:37 adminpages/reports/login.php:152
|
1868 |
-
msgid "Logins This Month"
|
1869 |
-
msgstr "Logget ind I denne måned"
|
1870 |
-
|
1871 |
-
#: adminpages/reports/login.php:38
|
1872 |
-
msgid "Logins All Time"
|
1873 |
-
msgstr "Logget ind hele Tiden"
|
1874 |
-
|
1875 |
-
#: adminpages/reports/login.php:61
|
1876 |
-
msgid "Visits, Views, and Logins Report"
|
1877 |
-
msgstr "Besøgende, Set. og Logget Ind Report"
|
1878 |
-
|
1879 |
-
#: adminpages/reports/login.php:66
|
1880 |
-
msgid "All Users"
|
1881 |
-
msgstr "Alle Brugere"
|
1882 |
-
|
1883 |
-
#: adminpages/reports/login.php:146
|
1884 |
-
msgid "Last Visit"
|
1885 |
-
msgstr "Sidst Besøgt"
|
1886 |
-
|
1887 |
-
#: adminpages/reports/login.php:148
|
1888 |
-
msgid "Total Visits"
|
1889 |
-
msgstr "Total Besøgende"
|
1890 |
-
|
1891 |
-
#: adminpages/reports/login.php:150
|
1892 |
-
msgid "Total Views"
|
1893 |
-
msgstr "Total Set"
|
1894 |
-
|
1895 |
-
#: adminpages/reports/login.php:151
|
1896 |
-
msgid "Last Login"
|
1897 |
-
msgstr "Sidst Logget Ind"
|
1898 |
-
|
1899 |
-
#: adminpages/reports/login.php:153
|
1900 |
-
msgid "Total Logins"
|
1901 |
-
msgstr "Logget ind Total"
|
1902 |
-
|
1903 |
-
#: adminpages/reports/memberships.php:18
|
1904 |
-
#: adminpages/reports/memberships.php:288
|
1905 |
-
msgid "Membership Stats"
|
1906 |
-
msgstr "Medlems Statestikker"
|
1907 |
-
|
1908 |
-
#: adminpages/reports/memberships.php:48
|
1909 |
-
msgid "Signups"
|
1910 |
-
msgstr "Regestreringer"
|
1911 |
-
|
1912 |
-
#: adminpages/reports/memberships.php:50 adminpages/reports/memberships.php:69
|
1913 |
-
msgid "All Time"
|
1914 |
-
msgstr "Hele Tiden"
|
1915 |
-
|
1916 |
-
#: adminpages/reports/memberships.php:54 adminpages/reports/memberships.php:73
|
1917 |
-
msgid "This Year"
|
1918 |
-
msgstr "Dette År"
|
1919 |
-
|
1920 |
-
#: adminpages/reports/memberships.php:58 adminpages/reports/memberships.php:77
|
1921 |
-
msgid "This Month"
|
1922 |
-
msgstr "Denne Måned"
|
1923 |
-
|
1924 |
-
#: adminpages/reports/memberships.php:62 adminpages/reports/memberships.php:81
|
1925 |
-
msgid "Today"
|
1926 |
-
msgstr "Idag"
|
1927 |
-
|
1928 |
-
#: adminpages/reports/memberships.php:67
|
1929 |
-
msgid "Cancellations"
|
1930 |
-
msgstr "Annulleringer"
|
1931 |
-
|
1932 |
-
#: adminpages/reports/memberships.php:86
|
1933 |
-
msgid "Other Stats"
|
1934 |
-
msgstr "Andre Statestikker"
|
1935 |
-
|
1936 |
-
#: adminpages/reports/memberships.php:88
|
1937 |
-
msgid "Monthly Recurring Revenue (MRR)"
|
1938 |
-
msgstr "Månedligt Tilbagevendende Indtægter (MTI)"
|
1939 |
-
|
1940 |
-
#: adminpages/reports/memberships.php:92
|
1941 |
-
msgid "Cancellation Rate"
|
1942 |
-
msgstr "Annullerings Rate"
|
1943 |
-
|
1944 |
-
#: adminpages/reports/memberships.php:96
|
1945 |
-
msgid "Lifetime Value (LTV)"
|
1946 |
-
msgstr "Livstids Værdi (LTV)"
|
1947 |
-
|
1948 |
-
#: adminpages/reports/memberships.php:294 adminpages/reports/sales.php:195
|
1949 |
-
#: adminpages/reports/sales.php:187 adminpages/reports/sales.php:196
|
1950 |
-
msgid "Daily"
|
1951 |
-
msgstr "Daglig"
|
1952 |
-
|
1953 |
-
#: adminpages/reports/memberships.php:295 adminpages/reports/sales.php:196
|
1954 |
-
#: adminpages/reports/sales.php:188 adminpages/reports/sales.php:197
|
1955 |
-
msgid "Monthly"
|
1956 |
-
msgstr "Månedelig"
|
1957 |
-
|
1958 |
-
#: adminpages/reports/memberships.php:296 adminpages/reports/sales.php:197
|
1959 |
-
#: adminpages/reports/sales.php:189 adminpages/reports/sales.php:198
|
1960 |
-
msgid "Annual"
|
1961 |
-
msgstr "Årlig"
|
1962 |
-
|
1963 |
-
#: adminpages/reports/memberships.php:299
|
1964 |
-
msgid "Signups vs. Cancellations"
|
1965 |
-
msgstr "Regestreringer vs Annulleringer"
|
1966 |
-
|
1967 |
-
#: adminpages/reports/memberships.php:331 adminpages/reports/sales.php:230
|
1968 |
-
#: adminpages/reports/sales.php:222 adminpages/reports/sales.php:231
|
1969 |
-
msgid "Generate Report"
|
1970 |
-
msgstr "Genereret Report"
|
1971 |
-
|
1972 |
-
#: adminpages/reports/sales.php:18
|
1973 |
-
msgid "Sales and Revenue (Testing/Sandbox)"
|
1974 |
-
msgstr "Salg og Indtægter (Test/Sandkasse)"
|
1975 |
-
|
1976 |
-
#: adminpages/reports/sales.php:20 adminpages/reports/sales.php:189
|
1977 |
-
#: adminpages/reports/sales.php:180
|
1978 |
-
msgid "Sales and Revenue"
|
1979 |
-
msgstr "Salg og Indtægter"
|
1980 |
-
|
1981 |
-
#: adminpages/reports/sales.php:200 adminpages/reports/sales.php:192
|
1982 |
-
#: adminpages/reports/sales.php:201
|
1983 |
-
msgid "Revenue"
|
1984 |
-
msgstr "Indtægter"
|
1985 |
-
|
1986 |
-
#: adminpages/reports/sales.php:201 adminpages/reports/sales.php:193
|
1987 |
-
#: adminpages/reports/sales.php:202
|
1988 |
-
msgid "Sales"
|
1989 |
-
msgstr "Salg"
|
1990 |
-
|
1991 |
-
#: classes/class.memberorder.php:564 classes/class.memberorder.php:553
|
1992 |
-
#: classes/class.memberorder.php:561 includes/cleanup.php:24
|
1993 |
-
#, php-format
|
1994 |
-
msgid ""
|
1995 |
-
"There was an error canceling the subscription for user with ID=%s. You will "
|
1996 |
-
"want to check your payment gateway to see if their subscription is still "
|
1997 |
-
"active."
|
1998 |
-
msgstr ""
|
1999 |
-
"Der var en fejl, med annullering af abonnement for bruger med ID=%s. Du "
|
2000 |
-
"ville nok kontrollere din betalings gateway, for at kunne se om deres "
|
2001 |
-
"abonnement stadig er aktiv"
|
2002 |
-
|
2003 |
-
#: classes/class.pmproemail.php:37
|
2004 |
-
#, php-format
|
2005 |
-
msgid "An Email From %s"
|
2006 |
-
msgstr "En Email Fra %s"
|
2007 |
-
|
2008 |
-
#: classes/class.pmproemail.php:122 classes/class.pmproemail.php:120
|
2009 |
-
#, php-format
|
2010 |
-
msgid "Your membership at %s has been CANCELLED"
|
2011 |
-
msgstr "Dit medlemskab hos %s er blevet ANNULLERET"
|
2012 |
-
|
2013 |
-
#: classes/class.pmproemail.php:144 classes/class.pmproemail.php:142
|
2014 |
-
#, php-format
|
2015 |
-
msgid "Membership for %s at %s has been CANCELLED"
|
2016 |
-
msgstr "Medlemskab for %s hos %s er blevet ANNULLERET"
|
2017 |
-
|
2018 |
-
#: classes/class.pmproemail.php:175 classes/class.pmproemail.php:172
|
2019 |
-
#: classes/class.pmproemail.php:173
|
2020 |
-
#, php-format
|
2021 |
-
msgid "Your membership confirmation for %s"
|
2022 |
-
msgstr "Dit medlemskab bekræftigelse for %s"
|
2023 |
-
|
2024 |
-
#: classes/class.pmproemail.php:228 classes/class.pmproemail.php:237
|
2025 |
-
#: classes/class.pmproemail.php:246 classes/class.pmproemail.php:325
|
2026 |
-
#: classes/class.pmproemail.php:334 classes/class.pmproemail.php:645
|
2027 |
-
#: pages/checkout.php:66 pages/checkout.php:76 pages/checkout.php:549
|
2028 |
-
#: pages/confirmation.php:52 pages/invoice.php:33
|
2029 |
-
#: classes/class.pmproemail.php:216 classes/class.pmproemail.php:218
|
2030 |
-
#: classes/class.pmproemail.php:225 classes/class.pmproemail.php:227
|
2031 |
-
#: classes/class.pmproemail.php:234 classes/class.pmproemail.php:236
|
2032 |
-
#: classes/class.pmproemail.php:304 classes/class.pmproemail.php:307
|
2033 |
-
#: classes/class.pmproemail.php:313 classes/class.pmproemail.php:316
|
2034 |
-
#: classes/class.pmproemail.php:532 classes/class.pmproemail.php:580
|
2035 |
-
#: pages/checkout.php:67 pages/checkout.php:77 pages/checkout.php:566
|
2036 |
-
#: pages/checkout.php:573 pages/confirmation.php:51 pages/invoice.php:32
|
2037 |
-
msgid "Discount Code"
|
2038 |
-
msgstr "Rabat Kode"
|
2039 |
-
|
2040 |
-
#: classes/class.pmproemail.php:253 classes/class.pmproemail.php:346
|
2041 |
-
#: classes/class.pmproemail.php:651 classes/class.pmproemail.php:241
|
2042 |
-
#: classes/class.pmproemail.php:243 classes/class.pmproemail.php:325
|
2043 |
-
#: classes/class.pmproemail.php:328 classes/class.pmproemail.php:538
|
2044 |
-
#: classes/class.pmproemail.php:586
|
2045 |
-
#, php-format
|
2046 |
-
msgid "This membership will expire on %s."
|
2047 |
-
msgstr "Dette medlemskab udløber den %s."
|
2048 |
-
|
2049 |
-
#: classes/class.pmproemail.php:275 classes/class.pmproemail.php:263
|
2050 |
-
#: classes/class.pmproemail.php:265
|
2051 |
-
#, php-format
|
2052 |
-
msgid "Member Checkout for %s at %s"
|
2053 |
-
msgstr "Medlem gå til kassen ved %s hos %s"
|
2054 |
-
|
2055 |
-
#: classes/class.pmproemail.php:363 classes/class.pmproemail.php:342
|
2056 |
-
#: classes/class.pmproemail.php:345
|
2057 |
-
#, php-format
|
2058 |
-
msgid "Your billing information has been udpated at %s"
|
2059 |
-
msgstr "Dine betalings informationer er blevet o
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|