Version Description
- pmpro_longform_address and pmpro_international_addresses now default to true. See this gist to go back to US-specific address format: https://gist.github.com/strangerstudios/6478242
- Added "Show Billing Address Fields" option for the Stripe payment gateway. Set to 'No' to hide billing address fields. Replaces the functionality of the "Stripe Lite" plugin.
- Added language files for es_ES, es_CL, and es_PE. Thanks, Javier Monorov (zillionsk8 on GitHub).
- Added language files for fr_FR. Thanks, Jrmy De la casa.
- NOTE: Language files may not be complete. The get involved, join us on GitHub.
- Added Cybersource and 2Checkout gateways in beta.
- Added pmpro_paypal_button_image filter so you can override the URL of the PayPal button image.
- Added a new report showing signups vs. cancellations, monthly recurring revenue, and lifetime value.
- Fixed issue where the checkout_paid template was always being used for emails. It now checks if the level at checkout is free and sends either the checkout_free, checkout_paid, or checkout_trial templates accordingly. (Thanks, inator on GitHub)
- Fixed sales report to not show $ when hovering over bars for "sales" vs. "revenue".
- Fixed issue where PayPal Standard levels using a billing frequency > 1 (e.g. every 3 months) would have an extra payment charged after one period.
- Fixed SQL error in discount code admin page that could result in cycle_periods of code levels saving incorrectly. (Thanks, Sam D'Amico)
- Removed note that Payflow gateway doesn't support recurring payments. It does.
- Now passing the membership level id in the $data var for checkout and cancellation emails. The key is "membership_id" so use $data['membership_id'] to check/access it.
- No longer setting the subtotal property of orders when the "subscribe" method of the gateways is called. This will fix cases where an initial order or a subscription with a free trial showed a charge amount > $0.
- Clicking enter in discount code box at checkout will no longer submit form and will click the "apply" button.
- Hiding the "Apply" button on the checkout page if a discount code was passed in. Showing it if the text field is changed.
- Authorize.net now supports CAD, GBP, and EUR currencies (for US merchants only) http://community.developer.authorize.net/t5/The-Authorize-Net-Developer-Blog/Authorize-Net-Expansion-into-Canada-the-United-Kingdom-and/ba-p/33690
- Fixed notice in getfile.php
- Fixed notices and expiration dates in login report.
- Fixed notices in includes/notifications.php (Thanks, Nilesh)
- Allowing dashes (-) in discount codes now.
Download this release
Release Info
Developer | strangerstudios |
Plugin | ![]() |
Version | 1.7.3 |
Comparing to | |
See all releases |
Version 1.7.3
- adminpages/addons.php +142 -0
- adminpages/addons/hide-admin-bar-from-non-admins.php +32 -0
- adminpages/addons/images/pmpro-aweber.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-wp-affiliate-platform.jpg +0 -0
- adminpages/addons/images/wp-bouncer.gif +0 -0
- adminpages/addons/pmpro-addon-packages.php +30 -0
- adminpages/addons/pmpro-affiliates.php +30 -0
- adminpages/addons/pmpro-aweber.php +31 -0
- adminpages/addons/pmpro-bbpress.php +28 -0
- adminpages/addons/pmpro-disable-emails.php +28 -0
- adminpages/addons/pmpro-expiration.php +28 -0
- adminpages/addons/pmpro-freeaddress.php +28 -0
- adminpages/addons/pmpro-infusionsoft.php +31 -0
- adminpages/addons/pmpro-international-addresses.php +31 -0
- adminpages/addons/pmpro-level-cost-text.php +30 -0
- adminpages/addons/pmpro-mailchimp.php +31 -0
- adminpages/addons/pmpro-network.php +31 -0
- adminpages/addons/pmpro-post-affiliate-pro.php +31 -0
- adminpages/addons/pmpro-register-helper.php +31 -0
- adminpages/addons/pmpro-require-code-to-register.php +28 -0
- adminpages/addons/pmpro-series.php +31 -0
- adminpages/addons/pmpro-shipping.php +31 -0
- adminpages/addons/pmpro-stripe-lite.php +30 -0
- adminpages/addons/pmpro-user-pages.php +30 -0
- adminpages/addons/pmpro-wp-affiliate.php +29 -0
- adminpages/addons/tml.php +32 -0
- adminpages/addons/wp-bouncer.php +31 -0
- adminpages/admin_footer.php +2 -0
- adminpages/admin_header.php +135 -0
- adminpages/advancedsettings.php +290 -0
- adminpages/dashboard.php +127 -0
- adminpages/discountcodes.php +631 -0
- adminpages/emailsettings.php +152 -0
- adminpages/functions.php +157 -0
- adminpages/membershiplevels.php +580 -0
- adminpages/memberslist-csv.php +180 -0
- adminpages/memberslist.php +210 -0
- adminpages/orders-csv.php +189 -0
- adminpages/orders.php +691 -0
- adminpages/pagesettings.php +215 -0
- adminpages/paymentsettings.php +579 -0
- adminpages/reports.php +59 -0
- adminpages/reports/login.php +412 -0
- adminpages/reports/memberships.php +637 -0
- adminpages/reports/sales.php +399 -0
- classes/class.memberorder.php +558 -0
- classes/class.mimetype.php +239 -0
- classes/class.pmproemail.php +747 -0
- classes/gateways/class.pmprogateway.php +204 -0
- classes/gateways/class.pmprogateway_authorizenet.php +872 -0
- classes/gateways/class.pmprogateway_braintree.php +422 -0
- classes/gateways/class.pmprogateway_check.php +208 -0
- classes/gateways/class.pmprogateway_cybersource.php +765 -0
- classes/gateways/class.pmprogateway_payflowpro.php +445 -0
- classes/gateways/class.pmprogateway_paypal.php +454 -0
- classes/gateways/class.pmprogateway_paypalexpress.php +358 -0
- classes/gateways/class.pmprogateway_paypalstandard.php +285 -0
- classes/gateways/class.pmprogateway_stripe.php +357 -0
- classes/gateways/class.pmprogateway_twocheckout.php +123 -0
- css/admin.css +97 -0
- css/frontend.css +211 -0
- css/print.css +5 -0
- email/admin_change.html +7 -0
- email/admin_change_admin.html +5 -0
- email/billing.html +19 -0
- email/billing_admin.html +17 -0
- email/billing_failure.html +15 -0
- email/billing_failure_admin.html +15 -0
- email/cancel.html +3 -0
- email/cancel_admin.html +8 -0
- email/checkout_check.html +17 -0
- email/checkout_check_admin.html +17 -0
- email/checkout_express.html +14 -0
- email/checkout_express_admin.html +14 -0
- email/checkout_free.html +8 -0
- email/checkout_free_admin.html +8 -0
- email/checkout_freetrial.html +22 -0
- email/checkout_freetrial_admin.html +22 -0
- email/checkout_paid.html +26 -0
- email/checkout_paid_admin.html +26 -0
- email/checkout_trial.html +26 -0
- email/checkout_trial_admin.html +26 -0
- email/credit_card_expiring.html +15 -0
- email/default.html +1 -0
- email/footer.html +4 -0
- email/header.html +1 -0
- email/invoice.html +23 -0
- email/membership_expired.html +7 -0
- email/membership_expiring.html +6 -0
- email/trial_ending.html +8 -0
- images/CCV-back.jpg +0 -0
- images/CCV-front.jpg +0 -0
- images/Paid-Memberships-Pro.png +0 -0
- images/Paid-Memberships-Pro_watermark.png +0 -0
- images/PaidMembershipsPro-grey.gif +0 -0
- images/PaidMembershipsPro.gif +0 -0
- images/bg_grad-chrome.gif +0 -0
- images/bg_grad-grey.gif +0 -0
- images/creditcards.gif +0 -0
- images/delete.gif +0 -0
- images/enlarge.gif +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
- images/icon_alert.gif +0 -0
- images/icon_comment.gif +0 -0
- images/icon_comments.gif +0 -0
- images/icon_continue.gif +0 -0
- images/icon_delete.gif +0 -0
- images/icon_email.gif +0 -0
- images/icon_error.gif +0 -0
- images/icon_information.gif +0 -0
- images/icon_phone.gif +0 -0
- images/icon_search.gif +0 -0
- images/icon_success.gif +0 -0
- images/menu_users.png +0 -0
- images/printer.gif +0 -0
- images/spacer.gif +0 -0
- images/tag_sale.png +0 -0
- includes/adminpages.php +145 -0
- includes/cleanup.php +51 -0
- includes/content.php +370 -0
- includes/countries.php +259 -0
- includes/currencies.php +42 -0
- includes/email.php +79 -0
- includes/filters.php +150 -0
- includes/functions.php +1622 -0
- includes/https.php +150 -0
- includes/init.php +195 -0
- includes/lib/Braintree/Braintree.php +172 -0
- includes/lib/Braintree/Braintree/AddOn.php +15 -0
- includes/lib/Braintree/Braintree/Address.php +352 -0
- includes/lib/Braintree/Braintree/Collection.php +159 -0
- includes/lib/Braintree/Braintree/Configuration.php +346 -0
- includes/lib/Braintree/Braintree/CreditCard.php +591 -0
- includes/lib/Braintree/Braintree/CreditCardVerification.php +41 -0
- includes/lib/Braintree/Braintree/CreditCardVerificationSearch.php +34 -0
- includes/lib/Braintree/Braintree/Customer.php +562 -0
- includes/lib/Braintree/Braintree/CustomerSearch.php +31 -0
- includes/lib/Braintree/Braintree/Descriptor.php +4 -0
- includes/lib/Braintree/Braintree/Digest.php +59 -0
- includes/lib/Braintree/Braintree/Discount.php +15 -0
- includes/lib/Braintree/Braintree/EqualityNode.php +10 -0
- includes/lib/Braintree/Braintree/Error/Codes.php +206 -0
- includes/lib/Braintree/Braintree/Error/ErrorCollection.php +118 -0
- includes/lib/Braintree/Braintree/Error/Validation.php +64 -0
- includes/lib/Braintree/Braintree/Error/ValidationErrorCollection.php +135 -0
- includes/lib/Braintree/Braintree/Exception.php +20 -0
- includes/lib/Braintree/Braintree/Exception/Authentication.php +21 -0
- includes/lib/Braintree/Braintree/Exception/Authorization.php +23 -0
- includes/lib/Braintree/Braintree/Exception/Configuration.php +20 -0
- includes/lib/Braintree/Braintree/Exception/DownForMaintenance.php +20 -0
- includes/lib/Braintree/Braintree/Exception/ForgedQueryString.php +23 -0
- includes/lib/Braintree/Braintree/Exception/InvalidSignature.php +5 -0
- includes/lib/Braintree/Braintree/Exception/NotFound.php +20 -0
- includes/lib/Braintree/Braintree/Exception/SSLCaFileNotFound.php +20 -0
- includes/lib/Braintree/Braintree/Exception/SSLCertificate.php +20 -0
- includes/lib/Braintree/Braintree/Exception/ServerError.php +20 -0
- includes/lib/Braintree/Braintree/Exception/Unexpected.php +21 -0
- includes/lib/Braintree/Braintree/Exception/UpgradeRequired.php +12 -0
- includes/lib/Braintree/Braintree/Exception/ValidationsFailed.php +21 -0
- includes/lib/Braintree/Braintree/Http.php +99 -0
- includes/lib/Braintree/Braintree/Instance.php +70 -0
- includes/lib/Braintree/Braintree/IsNode.php +22 -0
- includes/lib/Braintree/Braintree/KeyValueNode.php +22 -0
- includes/lib/Braintree/Braintree/Modification.php +23 -0
- includes/lib/Braintree/Braintree/MultipleValueNode.php +37 -0
- includes/lib/Braintree/Braintree/MultipleValueOrTextNode.php +46 -0
- includes/lib/Braintree/Braintree/PartialMatchNode.php +16 -0
- includes/lib/Braintree/Braintree/Plan.php +55 -0
- includes/lib/Braintree/Braintree/RangeNode.php +38 -0
- includes/lib/Braintree/Braintree/ResourceCollection.php +148 -0
- includes/lib/Braintree/Braintree/Result/CreditCardVerification.php +86 -0
- includes/lib/Braintree/Braintree/Result/Error.php +107 -0
- includes/lib/Braintree/Braintree/Result/Successful.php +78 -0
- includes/lib/Braintree/Braintree/SettlementBatchSummary.php +74 -0
- includes/lib/Braintree/Braintree/Subscription.php +256 -0
- includes/lib/Braintree/Braintree/SubscriptionSearch.php +64 -0
- includes/lib/Braintree/Braintree/SubscriptionStatus.php +0 -0
- includes/lib/Braintree/Braintree/Test/CreditCardNumbers.php +76 -0
- includes/lib/Braintree/Braintree/Test/TransactionAmounts.php +24 -0
- includes/lib/Braintree/Braintree/TextNode.php +10 -0
- includes/lib/Braintree/Braintree/Transaction.php +664 -0
- includes/lib/Braintree/Braintree/Transaction/AddressDetails.php +32 -0
- includes/lib/Braintree/Braintree/Transaction/CreditCardDetails.php +43 -0
- includes/lib/Braintree/Braintree/Transaction/CustomerDetails.php +29 -0
- includes/lib/Braintree/Braintree/Transaction/StatusDetails.php +25 -0
- includes/lib/Braintree/Braintree/Transaction/SubscriptionDetails.php +22 -0
- includes/lib/Braintree/Braintree/TransactionSearch.php +124 -0
- includes/lib/Braintree/Braintree/TransparentRedirect.php +327 -0
- includes/lib/Braintree/Braintree/Util.php +290 -0
- includes/lib/Braintree/Braintree/Version.php +39 -0
- includes/lib/Braintree/Braintree/WebhookNotification.php +66 -0
- includes/lib/Braintree/Braintree/WebhookTesting.php +52 -0
- includes/lib/Braintree/Braintree/Xml.php +43 -0
- includes/lib/Braintree/Braintree/Xml/Generator.php +144 -0
- includes/lib/Braintree/Braintree/Xml/Parser.php +179 -0
- includes/lib/Braintree/ssl/sandbox_braintreegateway_com.ca.crt +19 -0
- includes/lib/Braintree/ssl/www_braintreegateway_com.ca.crt +202 -0
- includes/lib/CyberSource/cyber_source_soap_client.php +87 -0
- includes/lib/Stripe/Stripe.php +45 -0
- includes/lib/Stripe/Stripe/Account.php +16 -0
- includes/lib/Stripe/Stripe/ApiConnectionError.php +5 -0
- includes/lib/Stripe/Stripe/ApiError.php +5 -0
- includes/lib/Stripe/Stripe/ApiRequestor.php +200 -0
- includes/lib/Stripe/Stripe/ApiResource.php +104 -0
- includes/lib/Stripe/Stripe/AuthenticationError.php +5 -0
- includes/lib/Stripe/Stripe/CardError.php +11 -0
- includes/lib/Stripe/Stripe/Charge.php +55 -0
- includes/lib/Stripe/Stripe/Coupon.php +34 -0
- includes/lib/Stripe/Stripe/Customer.php +102 -0
- includes/lib/Stripe/Stripe/Error.php +27 -0
- includes/lib/Stripe/Stripe/Event.php +22 -0
- includes/lib/Stripe/Stripe/InvalidRequestError.php +10 -0
- includes/lib/Stripe/Stripe/Invoice.php +51 -0
- includes/lib/Stripe/Stripe/InvoiceItem.php +40 -0
- includes/lib/Stripe/Stripe/List.php +17 -0
- includes/lib/Stripe/Stripe/Object.php +144 -0
- includes/lib/Stripe/Stripe/Plan.php +40 -0
- includes/lib/Stripe/Stripe/SingletonApiResource.php +24 -0
- includes/lib/Stripe/Stripe/Stripe.php +27 -0
- includes/lib/Stripe/Stripe/Token.php +22 -0
- includes/lib/Stripe/Stripe/Transfer.php +22 -0
- includes/lib/Stripe/Stripe/Util.php +61 -0
- includes/lib/Stripe/Stripe/Util/Set.php +34 -0
- includes/lib/Stripe/data/ca-certificates.crt +3918 -0
- includes/lib/Twocheckout/Twocheckout.php +31 -0
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutAccount.php +25 -0
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutApi.php +33 -0
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutCoupon.php +42 -0
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutError.php +14 -0
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutOption.php +42 -0
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutPayment.php +24 -0
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutProduct.php +42 -0
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutSale.php +104 -0
- includes/lib/Twocheckout/Twocheckout/Api/TwocheckoutUtil.php +72 -0
- includes/lib/Twocheckout/Twocheckout/TwocheckoutCharge.php +61 -0
- includes/lib/Twocheckout/Twocheckout/TwocheckoutMessage.php +13 -0
- includes/lib/Twocheckout/Twocheckout/TwocheckoutNotification.php +20 -0
- includes/lib/Twocheckout/Twocheckout/TwocheckoutReturn.php +21 -0
- includes/lib/name-parser.php +165 -0
- includes/lib/recaptchalib.php +277 -0
- includes/localization.php +30 -0
- includes/login.php +134 -0
- includes/metaboxes.php +108 -0
- includes/notifications.php +61 -0
- includes/profile.php +224 -0
- includes/recaptcha.php +22 -0
- includes/reports.php +27 -0
- includes/services.php +70 -0
- includes/setup.sql +209 -0
- includes/states.php +62 -0
- includes/upgradecheck.php +642 -0
- js/paid-memberships-pro.js +16 -0
- languages/pmpro-es_CL.mo +0 -0
- languages/pmpro-es_CL.po +2662 -0
- languages/pmpro-es_CL.pot +2662 -0
- languages/pmpro-es_ES.mo +0 -0
- languages/pmpro-es_ES.po +2662 -0
- languages/pmpro-es_ES.pot +2662 -0
- languages/pmpro-es_PE.mo +0 -0
- languages/pmpro-es_PE.po +2662 -0
- languages/pmpro-es_PE.pot +2662 -0
- languages/pmpro-fr_FR.mo +0 -0
- languages/pmpro-fr_FR.po +2556 -0
- languages/pmpro.mo +0 -0
- languages/pmpro.po +2510 -0
- languages/pmpro.pot +2510 -0
- license.txt +11 -0
- logs/ipn.txt +2084 -0
- pages/account.php +166 -0
- pages/billing.php +310 -0
- pages/cancel.php +23 -0
- pages/checkout.php +761 -0
- pages/confirmation.php +118 -0
- pages/invoice.php +148 -0
- pages/levels.php +134 -0
- pages/popup-cvv.html +47 -0
- paid-memberships-pro.php +111 -0
- preheaders/account.php +43 -0
- preheaders/billing.php +370 -0
- preheaders/cancel.php +41 -0
- preheaders/checkout.php +1051 -0
- preheaders/confirmation.php +13 -0
- preheaders/invoice.php +33 -0
- preheaders/levels.php +34 -0
- readme.txt +771 -0
- scheduled/creditcardexpiringwarnings.php +10 -0
- scheduled/crons.php +197 -0
- scheduled/expirationwarnings.php +10 -0
- scheduled/expirememberships.php +10 -0
- scheduled/trialendingwarnings.php +10 -0
- screenshot-1.jpg +0 -0
- screenshot-2.jpg +0 -0
- screenshot-3.jpg +0 -0
- screenshot-4.jpg +0 -0
- services/applydiscountcode.php +134 -0
- services/authnet-silent-post.php +138 -0
- services/braintree-webhook.php +304 -0
- services/getfile.php +68 -0
- services/ipnhandler.php +521 -0
- services/stripe-webhook.php +247 -0
- services/twocheckout-ins.php +424 -0
- shortcodes/checkout.php +14 -0
- shortcodes/checkout_button.php +20 -0
- shortcodes/membership.php +83 -0
- uninstall.php +60 -0
adminpages/addons.php
ADDED
@@ -0,0 +1,142 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.", "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
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
ADDED
Binary file
|
adminpages/addons/images/pmpro-infusionsoft.jpg
ADDED
Binary file
|
adminpages/addons/images/pmpro-mailchimp.jpg
ADDED
Binary file
|
adminpages/addons/images/pmpro-network.gif
ADDED
Binary file
|
adminpages/addons/images/pmpro-post-affiliate-pro.jpg
ADDED
Binary file
|
adminpages/addons/images/pmpro-register-helper.gif
ADDED
Binary file
|
adminpages/addons/images/pmpro-series.gif
ADDED
Binary file
|
adminpages/addons/images/pmpro-wp-affiliate-platform.jpg
ADDED
Binary file
|
adminpages/addons/images/wp-bouncer.gif
ADDED
Binary file
|
adminpages/addons/pmpro-addon-packages.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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' => '.1.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://github.com/strangerstudios/pmpro-addon-packages/archive/master.zip" class="button button-primary">Download</a>
|
26 |
+
<?php } ?>
|
27 |
+
</div>
|
28 |
+
</div> <!-- end info -->
|
29 |
+
<?php
|
30 |
+
}
|
adminpages/addons/pmpro-affiliates.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.2',
|
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="https://github.com/strangerstudios/pmpro-affiliates/archive/master.zip" class="button button-primary">Download</a>
|
26 |
+
<?php } ?>
|
27 |
+
</div>
|
28 |
+
</div> <!-- end info -->
|
29 |
+
<?php
|
30 |
+
}
|
adminpages/addons/pmpro-aweber.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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' => '.2',
|
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="https://github.com/strangerstudios/pmpro-aweber/" 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
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Addon: PMPro bbPress
|
4 |
+
Slug: pmpro-bbpress
|
5 |
+
*/
|
6 |
+
pmpro_add_addon('gists', array(
|
7 |
+
'title' => 'PMPro bbPress',
|
8 |
+
'version' => '.1',
|
9 |
+
'widget' => 'pmpro_addon_pmpro_bbpress_widget',
|
10 |
+
'enabled' => function_exists('pmpro_check_forum')
|
11 |
+
)
|
12 |
+
);
|
13 |
+
|
14 |
+
function pmpro_addon_pmpro_bbpress_widget($addon)
|
15 |
+
{
|
16 |
+
?>
|
17 |
+
<div class="info">
|
18 |
+
<p>Locking down bbPress Forums by Membership Level and Forum ID.</p>
|
19 |
+
<div class="actions">
|
20 |
+
<?php if($addon['enabled']) { ?>
|
21 |
+
<a target="_blank" href="https://gist.github.com/strangerstudios/1633637" class="button">Enabled</a>
|
22 |
+
<?php } else { ?>
|
23 |
+
<a target="_blank" href="https://gist.github.com/strangerstudios/1633637" class="button button-primary">View Gist</a>
|
24 |
+
<?php } ?>
|
25 |
+
</div>
|
26 |
+
</div> <!-- end info -->
|
27 |
+
<?php
|
28 |
+
}
|
adminpages/addons/pmpro-disable-emails.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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-expiration.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Addon: PMPro Expiration Date
|
4 |
+
Slug: pmpro-expiration
|
5 |
+
*/
|
6 |
+
pmpro_add_addon('gists', array(
|
7 |
+
'title' => 'PMPro Expiration Date',
|
8 |
+
'version' => '.1',
|
9 |
+
'widget' => 'pmpro_addon_pmpro_expiration_widget',
|
10 |
+
'enabled' => function_exists('my_pmpro_checkout_level_specific_expiration')
|
11 |
+
)
|
12 |
+
);
|
13 |
+
|
14 |
+
function pmpro_addon_pmpro_expiration_widget($addon)
|
15 |
+
{
|
16 |
+
?>
|
17 |
+
<div class="info">
|
18 |
+
<p>Set a specific expiration date for a Membership Level.</p>
|
19 |
+
<div class="actions">
|
20 |
+
<?php if($addon['enabled']) { ?>
|
21 |
+
<a target="_blank" href="https://gist.github.com/strangerstudios/5709300" class="button">Enabled</a>
|
22 |
+
<?php } else { ?>
|
23 |
+
<a target="_blank" href="https://gist.github.com/strangerstudios/5709300" class="button button-primary">View Gist</a>
|
24 |
+
<?php } ?>
|
25 |
+
</div>
|
26 |
+
</div> <!-- end info -->
|
27 |
+
<?php
|
28 |
+
}
|
adminpages/addons/pmpro-freeaddress.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Addon: PMPro Require Name and Address for Free Level
|
4 |
+
Slug: pmpro-freerequire
|
5 |
+
*/
|
6 |
+
pmpro_add_addon('gists', array(
|
7 |
+
'title' => 'PMPro Require Name/Address for Free Level',
|
8 |
+
'version' => '.1',
|
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 target="_blank" href="https://gist.github.com/strangerstudios/5716249" class="button">Enabled</a>
|
22 |
+
<?php } else { ?>
|
23 |
+
<a target="_blank" href="https://gist.github.com/strangerstudios/5716249" class="button button-primary">View Gist</a>
|
24 |
+
<?php } ?>
|
25 |
+
</div>
|
26 |
+
</div> <!-- end info -->
|
27 |
+
<?php
|
28 |
+
}
|
adminpages/addons/pmpro-infusionsoft.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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' => '.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="https://github.com/strangerstudios/pmpro-infusionsoft/" 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="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-infusionsoft.zip" class="button button-primary">Download</a>
|
27 |
+
<?php } ?>
|
28 |
+
</div>
|
29 |
+
</div> <!-- end info -->
|
30 |
+
<?php
|
31 |
+
}
|
adminpages/addons/pmpro-international-addresses.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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' => '.3.2',
|
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="https://github.com/strangerstudios/pmpro-mailchimp/" 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.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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' => '.3',
|
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
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.2',
|
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
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Addon: PMPro Series
|
4 |
+
Slug: pmpro-series
|
5 |
+
*/
|
6 |
+
pmpro_add_addon('github', array(
|
7 |
+
'title' => 'PMPro Series',
|
8 |
+
'version' => '.2',
|
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
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.2.1',
|
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-stripe-lite.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Addon: PMPro Stripe Lite
|
4 |
+
Slug: pmpro-stripe-lite
|
5 |
+
*/
|
6 |
+
pmpro_add_addon('github', array(
|
7 |
+
'title' => 'PMPro Stripe Lite',
|
8 |
+
'version' => '.1.1',
|
9 |
+
'widget' => 'pmpro_addon_pmpro_stripe_lite_widget',
|
10 |
+
'enabled' => function_exists('pmprosl_pmpro_pages_shortcode_checkout')
|
11 |
+
)
|
12 |
+
);
|
13 |
+
|
14 |
+
function pmpro_addon_pmpro_stripe_lite_widget($addon)
|
15 |
+
{
|
16 |
+
?>
|
17 |
+
<div class="info">
|
18 |
+
<p>Remove billing fields (not required by Stripe) from the checkout page when using the Stripe payment gateway with PMPro.</p>
|
19 |
+
<div class="actions">
|
20 |
+
<?php if($addon['enabled']) { ?>
|
21 |
+
<a href="https://github.com/strangerstudios/pmpro-stripe-lite/blob/master/readme.txt" class="button">Enabled</a>
|
22 |
+
<?php } elseif(file_exists(dirname(__FILE__) . "/../../../pmpro-stripe-lite/pmpro-stripe-lite.php")) { ?>
|
23 |
+
<a href="<?php echo wp_nonce_url(self_admin_url('plugins.php?action=activate&plugin=pmpro-stripe-lite/pmpro-stripe-lite.php'), 'activate-plugin_pmpro-stripe-lite/pmpro-stripe-lite.php')?>" class="button button-primary">Activate</a>
|
24 |
+
<?php } else { ?>
|
25 |
+
<a href="http://www.paidmembershipspro.com/wp-content/uploads/plugins/pmpro-stripe-lite.zip" class="button button-primary">Download</a>
|
26 |
+
<?php } ?>
|
27 |
+
</div>
|
28 |
+
</div> <!-- end info -->
|
29 |
+
<?php
|
30 |
+
}
|
adminpages/addons/pmpro-user-pages.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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-wp-affiliate.php
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 target="_blank" href="https://gist.github.com/strangerstudios/3137539" class="button">Enabled</a>
|
23 |
+
<?php } else { ?>
|
24 |
+
<a target="_blank" href="https://gist.github.com/strangerstudios/3137539" class="button button-primary">View Gist</a>
|
25 |
+
<?php } ?>
|
26 |
+
</div>
|
27 |
+
</div> <!-- end info -->
|
28 |
+
<?php
|
29 |
+
}
|
adminpages/addons/tml.php
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.8'
|
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
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.0.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="https://github.com/strangerstudios/wp-bouncer/blob/master/readme.txt" 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
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
<div class="clear"></div>
|
2 |
+
</div>
|
adminpages/admin_header.php
ADDED
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require_once(dirname(__FILE__) . "/functions.php");
|
3 |
+
|
4 |
+
if(isset($_REQUEST['page']))
|
5 |
+
$view = $_REQUEST['page'];
|
6 |
+
else
|
7 |
+
$view = "";
|
8 |
+
|
9 |
+
global $pmpro_ready, $msg, $msgt;
|
10 |
+
$pmpro_ready = pmpro_is_ready();
|
11 |
+
if(!$pmpro_ready)
|
12 |
+
{
|
13 |
+
global $pmpro_level_ready, $pmpro_gateway_ready, $pmpro_pages_ready;
|
14 |
+
if(!isset($edit))
|
15 |
+
{
|
16 |
+
if(isset($_REQUEST['edit']))
|
17 |
+
$edit = $_REQUEST['edit'];
|
18 |
+
else
|
19 |
+
$edit = false;
|
20 |
+
}
|
21 |
+
|
22 |
+
if(empty($msg))
|
23 |
+
$msg = -1;
|
24 |
+
if(empty($pmpro_level_ready) && empty($edit))
|
25 |
+
$msgt .= " <a href=\"?page=pmpro-membershiplevels&edit=-1\">" . __("Add a membership level to get started.", "pmpro") . "</a>";
|
26 |
+
elseif($pmpro_level_ready && !$pmpro_pages_ready && $view != "pmpro-pagesettings")
|
27 |
+
$msgt .= " <a href=\"?page=pmpro-pagesettings\">" . __("Setup the membership pages", "pmpro") . "</a>.";
|
28 |
+
elseif($pmpro_level_ready && $pmpro_pages_ready && !$pmpro_gateway_ready && $view != "pmpro-paymentsettings")
|
29 |
+
$msgt .= " <a href=\"?page=pmpro-paymentsettings\">" . __("Setup your SSL certificate and payment gateway", "pmpro") . "</a>.";
|
30 |
+
|
31 |
+
if(empty($msgt))
|
32 |
+
$msg = false;
|
33 |
+
}
|
34 |
+
|
35 |
+
if(!pmpro_checkLevelForStripeCompatibility())
|
36 |
+
{
|
37 |
+
$msg = -1;
|
38 |
+
$msgt = __("The billing details for some of your membership levels is not supported by Stripe.", "pmpro");
|
39 |
+
if($view == "pmpro-membershiplevels" && !empty($_REQUEST['edit']) && $_REQUEST['edit'] > 0)
|
40 |
+
{
|
41 |
+
if(!pmpro_checkLevelForStripeCompatibility($_REQUEST['edit']))
|
42 |
+
{
|
43 |
+
global $pmpro_stripe_error;
|
44 |
+
$pmpro_stripe_error = true;
|
45 |
+
$msg = -1;
|
46 |
+
$msgt = __("The billing details for this level are not supported by Stripe. Please review the notes in the Billing Details section below.", "pmpro");
|
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 .= " " . __("The levels with issues are highlighted below.", "pmpro");
|
71 |
+
else
|
72 |
+
$msgt .= " <a href=\"?page=pmpro-membershiplevels\">" . __("Please edit your levels", "pmpro") . "</a>.";
|
73 |
+
}
|
74 |
+
|
75 |
+
if(!pmpro_checkLevelForBraintreeCompatibility())
|
76 |
+
{
|
77 |
+
$msg = -1;
|
78 |
+
$msgt = __("The billing details for some of your membership levels is not supported by Braintree.", "pmpro");
|
79 |
+
if($view == "pmpro-membershiplevels" && !empty($_REQUEST['edit']) && $_REQUEST['edit'] > 0)
|
80 |
+
{
|
81 |
+
if(!pmpro_checkLevelForBraintreeCompatibility($_REQUEST['edit']))
|
82 |
+
{
|
83 |
+
global $pmpro_braintree_error;
|
84 |
+
$pmpro_braintree_error = true;
|
85 |
+
$msg = -1;
|
86 |
+
$msgt = __("The billing details for this level are not supported by Braintree. Please review the notes in the Billing Details section below.", "pmpro");
|
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(!empty($msg))
|
96 |
+
{
|
97 |
+
?>
|
98 |
+
<div id="message" class="<?php if($msg > 0) echo "updated fade"; else echo "error"; ?>"><p><?php echo $msgt?></p></div>
|
99 |
+
<?php
|
100 |
+
}
|
101 |
+
|
102 |
+
?>
|
103 |
+
<div class="wrap pmpro_admin">
|
104 |
+
<div class="pmpro_banner">
|
105 |
+
<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/Paid-Memberships-Pro.png" width="350" height="75" border="0" alt="Paid Memberships Pro(c) - All Rights Reserved" /></a>
|
106 |
+
<div class="pmpro_meta"><span class="pmpro_tag-grey">v<?php echo PMPRO_VERSION?></span><a class="pmpro_tag-blue" href="<?php echo pmpro_https_filter("http://www.paidmembershipspro.com")?>"><?php _e('Plugin Support', 'pmpro');?></a><a class="pmpro_tag-blue" href="http://www.paidmembershipspro.com/forums/"><?php _e('User Forum', 'pmpro');?></a></div>
|
107 |
+
|
108 |
+
<br style="clear:both;" />
|
109 |
+
</div>
|
110 |
+
|
111 |
+
<div id="pmpro_notifications">
|
112 |
+
</div>
|
113 |
+
<script>
|
114 |
+
jQuery(document).ready(function() {
|
115 |
+
jQuery.get('<?php echo get_admin_url(NULL, "/admin-ajax.php?action=pmpro_notifications"); ?>', function(data) {
|
116 |
+
if(data && data != 'NULL')
|
117 |
+
jQuery('#pmpro_notifications').html(data);
|
118 |
+
});
|
119 |
+
});
|
120 |
+
</script>
|
121 |
+
|
122 |
+
<?php
|
123 |
+
$settings_tabs = array("pmpro-membershiplevels", "pmpro-pagesettings", "pmpro-paymentsettings", "pmpro-emailsettings", "pmpro-advancedsettings", "pmpro-addons");
|
124 |
+
if(in_array($view, $settings_tabs))
|
125 |
+
{
|
126 |
+
?>
|
127 |
+
<h3 class="nav-tab-wrapper">
|
128 |
+
<a href="admin.php?page=pmpro-membershiplevels" class="nav-tab<?php if($view == 'pmpro-membershiplevels') { ?> nav-tab-active<?php } ?>"><?php _e('Membership Levels', 'pmpro');?></a>
|
129 |
+
<a href="admin.php?page=pmpro-pagesettings" class="nav-tab<?php if($view == 'pmpro-pagesettings') { ?> nav-tab-active<?php } ?>"><?php _e('Pages', 'pmpro');?></a>
|
130 |
+
<a href="admin.php?page=pmpro-paymentsettings" class="nav-tab<?php if($view == 'pmpro-paymentsettings') { ?> nav-tab-active<?php } ?>"><?php _e('Payment Gateway & SSL', 'pmpro');?></a>
|
131 |
+
<a href="admin.php?page=pmpro-emailsettings" class="nav-tab<?php if($view == 'pmpro-emailsettings') { ?> nav-tab-active<?php } ?>"><?php _e('Email', 'pmpro');?></a>
|
132 |
+
<a href="admin.php?page=pmpro-advancedsettings" class="nav-tab<?php if($view == 'pmpro-advancedsettings') { ?> nav-tab-active<?php } ?>"><?php _e('Advanced', 'pmpro');?></a>
|
133 |
+
<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>
|
134 |
+
</h3>
|
135 |
+
<?php } ?>
|
adminpages/advancedsettings.php
ADDED
@@ -0,0 +1,290 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.", "pmpro"));
|
6 |
+
}
|
7 |
+
|
8 |
+
global $wpdb, $msg, $msgt;
|
9 |
+
|
10 |
+
//get/set settings
|
11 |
+
if(!empty($_REQUEST['savesettings']))
|
12 |
+
{
|
13 |
+
//other settings
|
14 |
+
pmpro_setOption("nonmembertext");
|
15 |
+
pmpro_setOption("notloggedintext");
|
16 |
+
pmpro_setOption("rsstext");
|
17 |
+
pmpro_setOption("showexcerpts");
|
18 |
+
pmpro_setOption("hideads");
|
19 |
+
pmpro_setOption("hideadslevels");
|
20 |
+
pmpro_setOption("redirecttosubscription");
|
21 |
+
|
22 |
+
//captcha
|
23 |
+
pmpro_setOption("recaptcha");
|
24 |
+
pmpro_setOption("recaptcha_publickey");
|
25 |
+
pmpro_setOption("recaptcha_privatekey");
|
26 |
+
|
27 |
+
//tos
|
28 |
+
pmpro_setOption("tospage");
|
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.", "pmpro");
|
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 |
+
|
45 |
+
if(is_multisite())
|
46 |
+
$redirecttosubscription = pmpro_getOption("redirecttosubscription");
|
47 |
+
|
48 |
+
$recaptcha = pmpro_getOption("recaptcha");
|
49 |
+
$recaptcha_publickey = pmpro_getOption("recaptcha_publickey");
|
50 |
+
$recaptcha_privatekey = pmpro_getOption("recaptcha_privatekey");
|
51 |
+
|
52 |
+
$tospage = pmpro_getOption("tospage");
|
53 |
+
|
54 |
+
$hide_footer_link = pmpro_getOption("hide_footer_link");
|
55 |
+
|
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 |
+
|
73 |
+
$levels = $wpdb->get_results( "SELECT * FROM {$wpdb->pmpro_membership_levels}", OBJECT );
|
74 |
+
|
75 |
+
require_once(dirname(__FILE__) . "/admin_header.php");
|
76 |
+
?>
|
77 |
+
|
78 |
+
<form action="" method="post" enctype="multipart/form-data">
|
79 |
+
<h2><?php _e('Advanced Settings', 'pmpro');?></h2>
|
80 |
+
|
81 |
+
<table class="form-table">
|
82 |
+
<tbody>
|
83 |
+
<tr>
|
84 |
+
<th scope="row" valign="top">
|
85 |
+
<label for="nonmembertext"><?php _e('Message for Logged-in Non-members', 'pmpro');?>:</label>
|
86 |
+
</th>
|
87 |
+
<td>
|
88 |
+
<textarea name="nonmembertext" rows="3" cols="80"><?php echo stripslashes($nonmembertext)?></textarea><br />
|
89 |
+
<small class="litegray"><?php _e('This message replaces the post content for non-members. Available variables', 'pmpro');?>: !!levels!!, !!referrer!!</small>
|
90 |
+
</td>
|
91 |
+
</tr>
|
92 |
+
<tr>
|
93 |
+
<th scope="row" valign="top">
|
94 |
+
<label for="notloggedintext"><?php _e('Message for Logged-out Users', 'pmpro');?>:</label>
|
95 |
+
</th>
|
96 |
+
<td>
|
97 |
+
<textarea name="notloggedintext" rows="3" cols="80"><?php echo stripslashes($notloggedintext)?></textarea><br />
|
98 |
+
<small class="litegray"><?php _e('This message replaces the post content for logged-out visitors.', 'pmpro');?></small>
|
99 |
+
</td>
|
100 |
+
</tr>
|
101 |
+
<tr>
|
102 |
+
<th scope="row" valign="top">
|
103 |
+
<label for="rsstext"><?php _e('Message for RSS Feed', 'pmpro');?>:</label>
|
104 |
+
</th>
|
105 |
+
<td>
|
106 |
+
<textarea name="rsstext" rows="3" cols="80"><?php echo stripslashes($rsstext)?></textarea><br />
|
107 |
+
<small class="litegray"><?php _e('This message replaces the post content in RSS feeds.', 'pmpro');?></small>
|
108 |
+
</td>
|
109 |
+
</tr>
|
110 |
+
|
111 |
+
<tr>
|
112 |
+
<th scope="row" valign="top">
|
113 |
+
<label for="showexcerpts"><?php _e('Show Excerpts to Non-Members?', 'pmpro');?></label>
|
114 |
+
</th>
|
115 |
+
<td>
|
116 |
+
<select id="showexcerpts" name="showexcerpts">
|
117 |
+
<option value="0" <?php if(!$showexcerpts) { ?>selected="selected"<?php } ?>><?php _e('No - Hide excerpts.', 'pmpro');?></option>
|
118 |
+
<option value="1" <?php if($showexcerpts == 1) { ?>selected="selected"<?php } ?>><?php _e('Yes - Show excerpts.', 'pmpro');?></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 } ?>><?php _e('No', 'pmpro');?></option>
|
129 |
+
<option value="1" <?php if($hideads == 1) { ?>selected="selected"<?php } ?>><?php _e('Hide Ads From All Members', 'pmpro');?></option>
|
130 |
+
<option value="2" <?php if($hideads == 2) { ?>selected="selected"<?php } ?>><?php _e('Hide Ads From Certain Members', 'pmpro');?></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"><?php _e('Ads from the following plugins will be automatically turned off', 'pmpro');?>: <em>Easy Adsense</em>, ...</p>
|
138 |
+
<p><?php _e('To hide ads in your template code, use code like the following', 'pmpro');?>:</p>
|
139 |
+
<pre lang="PHP">
|
140 |
+
if(pmpro_displayAds())
|
141 |
+
{
|
142 |
+
//insert ad code here
|
143 |
+
}
|
144 |
+
</pre>
|
145 |
+
</td>
|
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"><?php _e('Choose Levels to Hide Ads From', 'pmpro');?>:</label>
|
150 |
+
</th>
|
151 |
+
<td>
|
152 |
+
<div class="checkbox_box" <?php if(count($levels) > 5) { ?>style="height: 100px; overflow: auto;"<?php } ?>>
|
153 |
+
<?php
|
154 |
+
$hideadslevels = pmpro_getOption("hideadslevels");
|
155 |
+
if(!is_array($hideadslevels))
|
156 |
+
$hideadslevels = explode(",", $hideadslevels);
|
157 |
+
|
158 |
+
$sqlQuery = "SELECT * FROM $wpdb->pmpro_membership_levels ";
|
159 |
+
$levels = $wpdb->get_results($sqlQuery, OBJECT);
|
160 |
+
foreach($levels as $level)
|
161 |
+
{
|
162 |
+
?>
|
163 |
+
<div class="clickable"><input type="checkbox" id="hideadslevels_<?php echo $level->id?>" name="hideadslevels[]" value="<?php echo $level->id?>" <?php if(in_array($level->id, $hideadslevels)) { ?>checked="checked"<?php } ?>> <?php echo $level->name?></div>
|
164 |
+
<?php
|
165 |
+
}
|
166 |
+
?>
|
167 |
+
</div>
|
168 |
+
<script>
|
169 |
+
jQuery('.checkbox_box input').click(function(event) {
|
170 |
+
event.stopPropagation()
|
171 |
+
});
|
172 |
+
|
173 |
+
jQuery('.checkbox_box div.clickable').click(function() {
|
174 |
+
var checkbox = jQuery(this).find(':checkbox');
|
175 |
+
checkbox.attr('checked', !checkbox.attr('checked'));
|
176 |
+
});
|
177 |
+
</script>
|
178 |
+
</td>
|
179 |
+
</tr>
|
180 |
+
<?php if(is_multisite()) { ?>
|
181 |
+
<tr>
|
182 |
+
<th scope="row" valign="top">
|
183 |
+
<label for="redirecttosubscription"><?php _e('Redirect all traffic from registration page to /susbcription/?', 'pmpro');?>: <em>(<?php _e('multisite only', 'pmpro');?>)</em></label>
|
184 |
+
</th>
|
185 |
+
<td>
|
186 |
+
<select id="redirecttosubscription" name="redirecttosubscription">
|
187 |
+
<option value="0" <?php if(!$redirecttosubscription) { ?>selected="selected"<?php } ?>><?php _e('No', 'pmpro');?></option>
|
188 |
+
<option value="1" <?php if($redirecttosubscription == 1) { ?>selected="selected"<?php } ?>><?php _e('Yes', 'pmpro');?></option>
|
189 |
+
</select>
|
190 |
+
</td>
|
191 |
+
</tr>
|
192 |
+
<?php } ?>
|
193 |
+
<tr>
|
194 |
+
<th scope="row" valign="top">
|
195 |
+
<label for="recaptcha"><?php _e('Use reCAPTCHA?', 'pmpro');?>:</label>
|
196 |
+
</th>
|
197 |
+
<td>
|
198 |
+
<select id="recaptcha" name="recaptcha" onchange="pmpro_updateRecaptchaTRs();">
|
199 |
+
<option value="0" <?php if(!$recaptcha) { ?>selected="selected"<?php } ?>><?php _e('No', 'pmpro');?></option>
|
200 |
+
<option value="1" <?php if($recaptcha == 1) { ?>selected="selected"<?php } ?>><?php _e('Yes - Free memberships only.', 'pmpro');?></option>
|
201 |
+
<option value="2" <?php if($recaptcha == 2) { ?>selected="selected"<?php } ?>><?php _e('Yes - All memberships.', 'pmpro');?></option>
|
202 |
+
</select><br />
|
203 |
+
<small><?php _e('A free reCAPTCHA key is required.', 'pmpro');?> <a href="https://www.google.com/recaptcha/admin/create"><?php _e('Click here to signup for reCAPTCHA', 'pmpro');?></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"><?php _e('reCAPTCHA Public Key', 'pmpro');?>:</label>
|
210 |
+
<input type="text" name="recaptcha_publickey" size="60" value="<?php echo $recaptcha_publickey?>" />
|
211 |
+
<br /><br />
|
212 |
+
<label for="recaptcha_privatekey"><?php _e('reCAPTCHA Private Key', 'pmpro');?>:</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"><?php _e('Require Terms of Service on signups?', 'pmpro');?></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><?php _e('If yes, create a WordPress page containing your TOS agreement and assign it using the dropdown above.', 'pmpro');?></small>
|
226 |
+
</td>
|
227 |
+
</tr>
|
228 |
+
|
229 |
+
<?php /*
|
230 |
+
<tr>
|
231 |
+
<th scope="row" valign="top">
|
232 |
+
<label for="hide_footer_link">Hide the PMPro Link in the Footer?</label>
|
233 |
+
</th>
|
234 |
+
<td>
|
235 |
+
<select id="hide_footer_link" name="hide_footer_link">
|
236 |
+
<option value="0" <?php if(!$hide_footer_link) { ?>selected="selected"<?php } ?>>No - Leave the link. (Thanks!)</option>
|
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()
|
246 |
+
{
|
247 |
+
var hideads = jQuery('#hideads').val();
|
248 |
+
if(hideads == 2)
|
249 |
+
{
|
250 |
+
jQuery('#hideadslevels_tr').show();
|
251 |
+
}
|
252 |
+
else
|
253 |
+
{
|
254 |
+
jQuery('#hideadslevels_tr').hide();
|
255 |
+
}
|
256 |
+
|
257 |
+
if(hideads > 0)
|
258 |
+
{
|
259 |
+
jQuery('#hideads_explanation').show();
|
260 |
+
}
|
261 |
+
else
|
262 |
+
{
|
263 |
+
jQuery('#hideads_explanation').hide();
|
264 |
+
}
|
265 |
+
}
|
266 |
+
pmpro_updateHideAdsTRs();
|
267 |
+
|
268 |
+
function pmpro_updateRecaptchaTRs()
|
269 |
+
{
|
270 |
+
var recaptcha = jQuery('#recaptcha').val();
|
271 |
+
if(recaptcha > 0)
|
272 |
+
{
|
273 |
+
jQuery('#recaptcha_tr').show();
|
274 |
+
}
|
275 |
+
else
|
276 |
+
{
|
277 |
+
jQuery('#recaptcha_tr').hide();
|
278 |
+
}
|
279 |
+
}
|
280 |
+
pmpro_updateRecaptchaTRs();
|
281 |
+
</script>
|
282 |
+
|
283 |
+
<p class="submit">
|
284 |
+
<input name="savesettings" type="submit" class="button-primary" value="<?php _e('Save Settings', 'pmpro');?>" />
|
285 |
+
</p>
|
286 |
+
</form>
|
287 |
+
|
288 |
+
<?php
|
289 |
+
require_once(dirname(__FILE__) . "/admin_footer.php");
|
290 |
+
?>
|
adminpages/dashboard.php
ADDED
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Much of this code is borroed from yst_plugin_tools.php in the Yoast WordPress SEO plugin. Thanks, Yoast!
|
4 |
+
*/
|
5 |
+
|
6 |
+
global $pmpro_feed;
|
7 |
+
$pmpro_feed = "http://feeds.feedburner.com/PaidMembershipsPro";
|
8 |
+
|
9 |
+
function pmpro_postbox($id, $title, $content)
|
10 |
+
{
|
11 |
+
?>
|
12 |
+
<div id="<?php echo $id; ?>" class="postbox">
|
13 |
+
<div class="handlediv" title="Click to toggle"><br /></div>
|
14 |
+
<h3 class="hndle"><span><?php echo $title; ?></span></h3>
|
15 |
+
<div class="inside">
|
16 |
+
<?php echo $content; ?>
|
17 |
+
</div>
|
18 |
+
</div>
|
19 |
+
<?php
|
20 |
+
}
|
21 |
+
|
22 |
+
function pmpro_fetch_rss_items( $num )
|
23 |
+
{
|
24 |
+
global $pmpro_feed;
|
25 |
+
|
26 |
+
include_once(ABSPATH . WPINC . '/feed.php');
|
27 |
+
$rss = fetch_feed( $pmpro_feed );
|
28 |
+
|
29 |
+
// Bail if feed doesn't work
|
30 |
+
if ( is_wp_error($rss) )
|
31 |
+
return false;
|
32 |
+
|
33 |
+
$rss_items = $rss->get_items( 0, $rss->get_item_quantity( $num ) );
|
34 |
+
|
35 |
+
// If the feed was erroneously
|
36 |
+
if ( !$rss_items ) {
|
37 |
+
$md5 = md5( $pmpro_feed );
|
38 |
+
delete_transient( 'feed_' . $md5 );
|
39 |
+
delete_transient( 'feed_mod_' . $md5 );
|
40 |
+
$rss = fetch_feed( $pmpro_feed );
|
41 |
+
$rss_items = $rss->get_items( 0, $rss->get_item_quantity( $num ) );
|
42 |
+
}
|
43 |
+
|
44 |
+
return $rss_items;
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Box with latest news from PaidMembershipsPro.com for sidebar
|
49 |
+
*/
|
50 |
+
function pmpro_news()
|
51 |
+
{
|
52 |
+
$rss_items = pmpro_fetch_rss_items( 5 );
|
53 |
+
|
54 |
+
$content = '<ul>';
|
55 |
+
if ( !$rss_items ) {
|
56 |
+
$content .= '<li class="pmpro_news">no news items, feed might be broken...</li>';
|
57 |
+
} else {
|
58 |
+
foreach ( $rss_items as $item ) {
|
59 |
+
$content .= '<li class="pmpro_news">';
|
60 |
+
$content .= '<a class="rsswidget" href="'.esc_url( $item->get_permalink(), $protocolls=null, 'display' ).'">'. esc_html( $item->get_title() ) .'</a> ';
|
61 |
+
$content .= '</li>';
|
62 |
+
}
|
63 |
+
}
|
64 |
+
$content .= '</ul>';
|
65 |
+
$pmpro_postbox('pmprolatest', 'Recent Updates from PaidMembershipsPro.com', $content);
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Widget with latest news from PaidMembershipsPro.com for dashbaord
|
70 |
+
*/
|
71 |
+
function pmpro_db_widget()
|
72 |
+
{
|
73 |
+
global $pmpro_feed;
|
74 |
+
|
75 |
+
$options = get_option('pmpro_pmprodbwidget');
|
76 |
+
|
77 |
+
$network = '';
|
78 |
+
if ( function_exists('is_network_admin') && is_network_admin() )
|
79 |
+
$network = '_network';
|
80 |
+
|
81 |
+
if (isset($_POST['pmpro_removedbwidget'])) {
|
82 |
+
$options['removedbwidget'.$network] = true;
|
83 |
+
update_option('pmpro_pmprodbwidget',$options);
|
84 |
+
}
|
85 |
+
if ( isset($options['removedbwidget'.$network]) && $options['removedbwidget'.$network] ) {
|
86 |
+
echo "If you reload, this widget will be gone and never appear again, unless you decide to delete the database option 'pmpro_pmprodbwidget'.";
|
87 |
+
return;
|
88 |
+
}
|
89 |
+
|
90 |
+
$rss_items = pmpro_fetch_rss_items( 3 );
|
91 |
+
|
92 |
+
echo "<ul>";
|
93 |
+
|
94 |
+
if ( !$rss_items ) {
|
95 |
+
echo '<li class="pmpro_news">no news items, feed might be broken...</li>';
|
96 |
+
} else {
|
97 |
+
foreach ( $rss_items as $item ) {
|
98 |
+
echo '<li class="pmpro_news">';
|
99 |
+
echo '<a class="rsswidget" href="'.esc_url( $item->get_permalink(), $protocolls=null, 'display' ).'">'. esc_html( $item->get_title() ) .'</a>';
|
100 |
+
echo ' <span class="rss-date">'. $item->get_date(get_option('date_format')) .'</span>';
|
101 |
+
echo '<div class="rssSummary">'. esc_html( pmpro_text_limit( strip_tags( $item->get_description() ), 150 ) ).'</div>';
|
102 |
+
echo '</li>';
|
103 |
+
}
|
104 |
+
}
|
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 |
+
}
|
114 |
+
|
115 |
+
function pmpro_widget_setup()
|
116 |
+
{
|
117 |
+
$network = '';
|
118 |
+
if ( function_exists('is_network_admin') && is_network_admin() )
|
119 |
+
$network = '_network';
|
120 |
+
|
121 |
+
$options = get_option('pmpro_pmprodbwidget');
|
122 |
+
if ( !isset($options['removedbwidget'.$network]) || !$options['removedbwidget'.$network] )
|
123 |
+
wp_add_dashboard_widget( 'pmpro_db_widget' , 'The Latest From PaidMembershipsPro.com' , 'pmpro_db_widget');
|
124 |
+
}
|
125 |
+
|
126 |
+
add_action( 'wp_dashboard_setup', 'pmpro_widget_setup');
|
127 |
+
?>
|
adminpages/discountcodes.php
ADDED
@@ -0,0 +1,631 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|