/** * Add the Paypal subscribe or buy now button to the subscribe cards. * * @since 4.0.0 */ function leaky_paywall_paypal_button($level, $level_id) { $results = ''; $settings = get_leaky_paywall_settings(); $mode = 'off' === $settings['test_mode'] ? 'live' : 'test'; $paypal_sandbox = 'off' === $settings['test_mode'] ? '' : 'sandbox'; $paypal_account = 'on' === $settings['test_mode'] ? $settings['paypal_sand_email'] : $settings['paypal_live_email']; $currency = $settings['leaky_paywall_currency']; $current_user = wp_get_current_user(); if (0 !== $current_user->ID) { $user_email = $current_user->user_email; } else { $user_email = 'no_lp_email_set'; } if (!empty($level['recurring']) && 'on' === $level['recurring']) { $results .= '<script src="' . LEAKY_PAYWALL_URL . '/js/paypal-button.min.js?merchant=' . esc_js($paypal_account) . '" data-env="' . esc_js($paypal_sandbox) . '" data-callback="' . esc_js(add_query_arg('listener', 'IPN', get_site_url() . '/')) . '" data-return="' . esc_js(add_query_arg('leaky-paywall-confirm', 'paypal_standard', get_page_link($settings['page_for_after_subscribe']))) . '" data-cancel_return="' . esc_js(add_query_arg('leaky-paywall-paypal-standard-cancel-return', '1', get_page_link($settings['page_for_profile']))) . '" data-src="1" data-period="' . esc_js(strtoupper(substr($level['interval'], 0, 1))) . '" data-recurrence="' . esc_js($level['interval_count']) . '" data-currency="' . esc_js(apply_filters('leaky_paywall_paypal_currency', $currency)) . '" data-amount="' . esc_js($level['price']) . '" data-name="' . esc_js($level['label']) . '" data-number="' . esc_js($level_id) . '" data-button="subscribe" data-no_note="1" data-no_shipping="1" data-custom="' . esc_js($user_email) . '-' . esc_js($level_id) . '" ></script>'; } else { $results .= '<script src="' . LEAKY_PAYWALL_URL . '/js/paypal-button.min.js?merchant=' . esc_js($paypal_account) . '" data-env="' . esc_js($paypal_sandbox) . '" data-callback="' . esc_js(add_query_arg('listener', 'IPN', get_site_url() . '/')) . '" data-return="' . esc_js(add_query_arg('leaky-paywall-confirm', 'paypal_standard', get_page_link($settings['page_for_after_subscribe']))) . '" data-cancel_return="' . esc_js(add_query_arg('leaky-paywall-paypal-standard-cancel-return', '1', get_page_link($settings['page_for_profile']))) . '" data-tax="0" data-shipping="0" data-currency="' . esc_js(apply_filters('leaky_paywall_paypal_currency', $currency)) . '" data-amount="' . esc_js($level['price']) . '" data-quantity="1" data-name="' . esc_js($level['label']) . '" data-number="' . esc_js($level_id) . '" data-button="buynow" data-no_note="1" data-no_shipping="1" data-shipping="0" data-custom="' . esc_js($user_email) . '-' . esc_js($level_id) . '" ></script>'; } if (empty($paypal_account)) { $results = 'Please enter your Paypal credentials in the Leaky Paywall settings.'; } return '<div class="leaky-paywall-paypal-standard-button leaky-paywall-payment-button">' . $results . '</div>'; }
function leaky_paywall_content_visibility($post) { $settings = get_leaky_paywall_settings(); $visibility = get_post_meta($post->ID, '_issuem_leaky_paywall_visibility', true); $defaults = array('visibility_type' => 'default', 'only_visible' => array(), 'only_always_visible' => array(), 'always_visible' => array()); $visibility = wp_parse_args($visibility, $defaults); echo '<label for="leaky-paywall-visibility">' . sprintf(__('This %s should...', 'issuem-leaky-paywall'), $post->post_type) . '</label> '; echo '<select id="issuem-leaky-paywall-visibility-type" name="leaky_paywall_visibility_type">'; echo ' <option value="default" ' . selected($visibility['visibility_type'], 'default', true) . '>' . __("obey Leaky Paywall's defaults.", 'issuem-leaky-paywall') . '</option>'; echo ' <option value="only" ' . selected($visibility['visibility_type'], 'only', true) . '>' . __('only be visible to...', 'issuem-leaky-paywall') . '</option>'; echo ' <option value="always" ' . selected($visibility['visibility_type'], 'always', true) . '>' . __('always be visible to...', 'issuem-leaky-paywall') . '</option>'; echo ' <option value="onlyalways" ' . selected($visibility['visibility_type'], 'onlyalways', true) . '>' . __('only and always be visible to...', 'issuem-leaky-paywall') . '</option>'; echo '</select>'; if ('only' !== $visibility['visibility_type']) { $only_visible = 'style="display: none;"'; } else { $only_visible = ''; } if (!empty($settings['levels'])) { echo '<select id="issuem-leaky-paywall-only-visible" name="leaky_paywall_only_visible[]" ' . $only_visible . ' multiple="multiple">'; foreach ($settings['levels'] as $key => $level) { echo ' <option value="' . $key . '" ' . selected(in_array($key, $visibility['only_visible']), true, false) . '>' . $level['label'] . '</option>'; } echo '</select>'; } if ('always' !== $visibility['visibility_type']) { $always_visible = 'style="display: none;"'; } else { $always_visible = ''; } if (!empty($settings['levels'])) { echo '<select id="issuem-leaky-paywall-always-visible" name="leaky_paywall_always_visible[]" ' . $always_visible . ' multiple="multiple">'; echo ' <option value="-1" ' . selected(in_array('-1', $visibility['always_visible']), true, false) . '>' . __('Everyone', 'issuem-leaky-paywall') . '</option>'; foreach ($settings['levels'] as $key => $level) { echo ' <option value="' . $key . '" ' . selected(in_array($key, $visibility['always_visible']), true, false) . '>' . $level['label'] . '</option>'; } echo '</select>'; } if ('onlyalways' !== $visibility['visibility_type']) { $only_always_visible = 'style="display: none;"'; } else { $only_always_visible = ''; } if (!empty($settings['levels'])) { echo '<select id="issuem-leaky-paywall-only-always-visible" name="leaky_paywall_only_always_visible[]" ' . $only_always_visible . ' multiple="multiple">'; foreach ($settings['levels'] as $key => $level) { echo ' <option value="' . $key . '" ' . selected(in_array($key, $visibility['only_always_visible']), true, false) . '>' . $level['label'] . '</option>'; } echo '</select>'; } echo '<p class="description">' . __('Hint:', 'issuem-leaky-paywall') . '</p>'; echo '<p class="description">' . sprintf(__('"Only" means that only the selected subscription levels can see this %s, if they have not reached their %s limit.', 'issuem-leaky-paywall'), $post->post_type, $post->post_type) . '</p>'; echo '<p class="description">' . sprintf(__('"Always" means that the selected subscription levels can see this %s, even if they have reached their %s limit.', 'issuem-leaky-paywall'), $post->post_type, $post->post_type) . '</p>'; echo '<p class="description">' . sprintf(__('"Only and Always" means that only the selected subscription levels can see this %s, even if they have reached their %s limit.', 'issuem-leaky-paywall'), $post->post_type, $post->post_type) . '</p>'; wp_nonce_field('leaky_paywall_content_visibility_meta_box', 'leaky_paywall_content_visibility_meta_box_nonce'); }
/** * Retrieve all enabled gateways * * @since 4.0.0 * @return array */ private function get_enabled_gateways() { $settings = get_leaky_paywall_settings(); $enabled = array(); $saved = isset($settings['payment_gateway']) ? array_map('trim', $settings['payment_gateway']) : array(); if (!empty($saved)) { foreach ($this->available_gateways as $key => $gateway) { if (in_array($key, $saved)) { $enabled[$key] = $gateway; } } } if (empty($enabled)) { $enabled['paypal_standard'] = __('PayPal Standard', 'issuem-leaky-paywall'); } return apply_filters('leaky_paywall_enabled_payment_gateways', $enabled, $this->available_gateways); }
/** * Output the contents of the recent subscribers dashboard widget * @since 3.8.0 */ function leaky_paywall_load_recent_subscribers_dashboard_widget($post, $callback_args) { $settings = get_leaky_paywall_settings(); $mode = 'off' === $settings['test_mode'] ? 'live' : 'test'; global $blog_id; if (is_multisite_premium()) { $site = '_' . $blog_id; } else { $site = ''; } ?> <h3>Recent Subscribers</h3> <?php $args = array('order' => 'DESC', 'orderby' => 'ID', 'number' => 10, 'meta_query' => array(array('key' => '_issuem_leaky_paywall_' . $mode . '_subscriber_id' . $site, 'comare' => 'EXISTS'))); $users = get_users($args); if ($users) { ?> <table class="leaky-paywall-dashboard-table"> <tr> <th>Date</th><th>Name</th><th>Level</th> </tr> <?php foreach ($users as $user) { $date = $user->user_registered; $name = $user->first_name . ' ' . $user->last_name; if (!trim($name)) { $name = $user->user_email; } $level_id = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_level_id', true); $level_name = stripcslashes($settings['levels'][$level_id]['label']); echo '<tr><td>' . date('M d, Y', strtotime($date)) . '</td><td> <a href="' . admin_url() . '/user-edit.php?user_id=' . $user->ID . '">' . $name . '</a></td><td>' . $level_name . '</td>'; } echo '</table>'; } else { echo '<p>No subscribers found for <strong>' . $mode . '</strong> mode.</p>'; } echo '<p><a href="' . admin_url() . '/admin.php?page=leaky-paywall-subscribers">See all Leaky Paywall Subscribers ยป</a></p>'; ?> <?php }
/** * Process registration * * @since 4.0.0 */ public function process_confirmation() { if (empty($_GET['leaky-paywall-confirm']) && $_GET['leaky-paywall-confirm'] != 'stripe_checkout') { return false; } $settings = get_leaky_paywall_settings(); $this->email = $_POST['stripeEmail']; $this->level_id = $_POST['custom']; $level = get_leaky_paywall_subscription_level($this->level_id); $this->level_name = $level['label']; $this->recurring = !empty($level['recurring']) ? $level['recurring'] : false; $this->plan_id = !empty($level['plan_id']) ? $level['plan_id'] : false; $this->level_price = $level['price']; // @todo: Fix: this will ignore coupons $this->amount = $level['price']; $this->currency = $settings['leaky_paywall_currency']; $this->length_unit = $level['interval']; $this->length = $level['interval_count']; if (!class_exists('Stripe')) { require_once LEAKY_PAYWALL_PATH . 'include/stripe/lib/Stripe.php'; } parent::process_signup(); }
/** * Outputs the default Leaky Paywall register form * * @since 3.7.0 */ function do_leaky_paywall_register_form() { $settings = get_leaky_paywall_settings(); $level_id = isset($_GET['level_id']) ? $_GET['level_id'] : null; if (is_null($level_id)) { $content .= '<p>Please <a href="' . get_page_link($settings['page_for_subscription']) . '">go to the subscribe page</a> to choose a subscription level.</p>'; return $content; } $level = get_leaky_paywall_subscription_level($level_id); global $blog_id; if (is_multisite_premium()) { $site = '_' . $blog_id; } else { $site = ''; } $currency = $settings['leaky_paywall_currency']; $publishable_key = 'on' === $settings['test_mode'] ? $settings['test_publishable_key'] : $settings['live_publishable_key']; $userdata = get_userdata(get_current_user_id()); if (!empty($userdata)) { $email = $userdata->user_email; $username = $userdata->user_login; } else { $email = ''; $username = ''; } ob_start(); // show any error messages after form submission leaky_paywall_show_error_messages('register'); ?> <h3><?php printf(__('Your Subscription', 'leaky-paywall')); ?> </h3> <ul> <li><strong><?php printf(__('Subscription Name:', 'leaky-paywall')); ?> </strong> <?php echo $level['label']; ?> </li> <li><strong><?php printf(__('Subscription Length:', 'leaky-paywall')); ?> </strong> <?php echo $level['subscription_length_type'] == 'unlimited' ? 'Forever' : $level['interval_count'] . ' ' . $level['interval'] . 's'; ?> <li><strong><?php printf(__('Recurring:', 'leaky-paywall')); ?> </strong> <?php echo !empty($level['recurring']) && $level['recurring'] == 'on' ? 'Yes' : 'No'; ?> </li> <li><strong><?php printf(__('Content Access:', 'leaky-paywall')); ?> </strong> <ul> <?php foreach ($level['post_types'] as $type) { if ($type['allowed'] == 'unlimited') { echo '<li>' . ucfirst($type['allowed']) . ' ' . $type['post_type'] . 's</li>'; } else { echo '<li>' . $type['allowed_value'] . ' ' . $type['post_type'] . 's</li>'; } } ?> </ul> </li> <li><strong><?php printf(__('Total:', 'leaky-paywall')); ?> </strong> $<?php echo number_format($level['price'], 2); ?> </li> </ul> <form action="" method="POST" name="payment-form" id="leaky-paywall-payment-form" class="leaky-paywall-payment-form"> <span class="payment-errors"></span> <div class="leaky-paywall-user-fields"> <h3><?php printf(__('Your Details', 'leaky-paywall')); ?> </h3> <p class="form-row"> <label for="first_name"><?php printf(__('First Name', 'leaky-paywall')); ?> <i class="required">*</i></label> <input type="text" size="20" name="first_name"/> </p> <p class="form-row"> <label for="last_name"><?php printf(__('Last Name', 'leaky-paywall')); ?> <i class="required">*</i></label> <input type="text" size="20" name="last_name"/> </p> <p class="form-row"> <label for="email_address"><?php printf(__('Email Address', 'leaky-paywall')); ?> <i class="required">*</i></label> <input type="text" size="20" name="email_address" value="<?php echo $email; ?> " <?php echo !empty($email) ? 'disabled="disabled"' : ''; ?> /> </p> </div> <div class="leaky-paywall-account-fields"> <h3><?php printf(__('Account Details', 'leaky-paywall')); ?> </h3> <p class="form-row"> <label for="username"><?php printf(__('Username', 'leaky-paywall')); ?> <i class="required">*</i></label> <input type="text" size="20" name="username" value="<?php echo $username; ?> " <?php echo !empty($username) ? 'disabled="disabled"' : ''; ?> /> </p> <p class="form-row"> <label for="password"><?php printf(__('Password', 'leaky-paywall')); ?> <i class="required">*</i></label> <input type="password" size="20" name="password"/> </p> <p class="form-row"> <label for="confirm_password"><?php printf(__('Confirm Password', 'leaky-paywall')); ?> <i class="required">*</i></label> <input type="password" size="20" name="confirm_password"/> </p> </div> <?php do_action('leaky_paywall_after_password_registration_field'); ?> <?php $gateways = leaky_paywall_get_enabled_payment_gateways(); if ($gateways && $level['price'] != 0) { foreach ($gateways as $key => $gateway) { echo '<input type="hidden" name="gateway" value="' . esc_attr($key) . '" />'; } } else { echo '<input type="hidden" name="gateway" value="free_registration" />'; } ?> <input type="hidden" name="level_price" value="<?php echo number_format($level['price'], 2); ?> "/> <input type="hidden" name="currency" value="<?php echo $currency; ?> "/> <input type="hidden" name="description" value="<?php echo $level['label']; ?> "/> <input type="hidden" name="level_id" value="<?php echo $level_id; ?> "/> <input type="hidden" name="interval" value="<?php echo $level['interval']; ?> "/> <input type="hidden" name="interval_count" value="<?php echo $level['interval_count']; ?> "/> <input type="hidden" name="recurring" value="<?php echo empty($level['recurring']) ? '' : $level['recurring']; ?> "/> <input type="hidden" name="site" value="<?php echo $site; ?> "/> <input type="hidden" name="leaky_paywall_register_nonce" value="<?php echo wp_create_nonce('leaky-paywall-register-nonce'); ?> "/> <?php do_action('leaky_paywall_before_registration_submit_field', $gateways); ?> <button id="leaky-paywall-submit" type="submit"><?php printf(__('Subscribe', 'leaky-paywall')); ?> </button> </form> <?php $content = ob_get_contents(); ob_end_clean(); return $content; }
/** * Add credit card fields * * @since 4.0.0 */ public function fields() { $level_id = esc_html($_GET['level_id']); $level = get_leaky_paywall_subscription_level($level_id); if ($level['price'] == 0) { return; } $settings = get_leaky_paywall_settings(); $plan_args = array('stripe_price' => number_format($level['price'], 2, '', ''), 'currency' => $settings['leaky_paywall_currency'], 'secret_key' => $this->secret_key); if ($level['subscription_length_type'] == 'limited') { $stripe_plan = leaky_paywall_get_stripe_plan($level, $level_id, $plan_args); } ob_start(); ?> <input type="hidden" name="plan_id" value="<?php echo $stripe_plan->id; ?> "/> <script type="text/javascript"> var leaky_paywall_script_options; var leaky_paywall_processing; var leaky_paywall_stripe_processing = false; // This identifies your website in the createToken call below Stripe.setPublishableKey('<?php echo $this->publishable_key; ?> '); function stripeResponseHandler(status, response) { if (response.error) { // re-enable th submit button jQuery('#leaky-paywall-payment-form #leaky-paywall-submit').attr("disabled", false ); // jQuery('#leaky-paywall-registration-form').unblock(); jQuery('#leaky-paywall-submit').before('<div class="leaky-paywall-message error"><p class="leaky-paywall-error"><span>' + response.error.message + '</span></p></div>' ); leaky_paywall_stripe_processing = false; leaky_paywall_processing = false; } else { var form$ = jQuery('#leaky-paywall-payment-form'); var token = response['id']; form$.append('<input type="hidden" name="stripeToken" value="' + token + '" />'); form$.get(0).submit(); } } jQuery(document).ready(function($) { $('#leaky-paywall-payment-form').on('submit', function(e) { if ( ! leaky_paywall_stripe_processing ) { leaky_paywall_stripe_processing = true; // get the price $('input[name="stripe_price"]').val(); // disabl the submit button to prevent repeated clicks $('#leaky-paywall-payment-form #leaky-paywall-submit').attr('disabled', 'disabled' ); // create Stripe token Stripe.createToken({ number: $('.card-num').val(), name: $('.card-name').val(), cvc: $('.cvc').val(), exp_month: $('.exp-month').val(), exp_year: $('.exp-year').val(), address_zip: $('.card-zip').val(), }, stripeResponseHandler); return false; } }); }); </script> <?php leaky_paywall_card_form(); return ob_get_clean(); }
/** * Create and Display Leaky Paywall Subscribers page * * @since 1.0.0 */ function subscribers_page() { global $blog_id; $settings = get_leaky_paywall_settings(); if (is_multisite_premium() && !is_main_site($blog_id)) { $site = '_' . $blog_id; } else { $site = ''; } $date_format = get_option('date_format'); $jquery_date_format = leaky_paywall_jquery_datepicker_format($date_format); $headings = apply_filters('leaky_paywall_bulk_add_headings', array('username', 'email', 'price', 'expires', 'status', 'level-id', 'subscriber-id')); $mode = 'off' === $settings['test_mode'] ? 'live' : 'test'; $this->display_zeen101_dot_com_leaky_rss_item(); ?> <div class="wrap"> <div id="icon-users" class="icon32"><br/></div> <h2><?php _e('Leaky Paywall Subscribers', 'issuem-leaky-paywall'); ?> </h2> <?php if (!empty($_POST['leaky_paywall_add_subscriber'])) { if (!wp_verify_nonce($_POST['leaky_paywall_add_subscriber'], 'add_new_subscriber')) { echo '<div class="error settings-error" id="setting-error-invalid_nonce"><p><strong>' . __('Unable to verify security token. Subscriber not added. Please try again.', 'issuem-leaky-paywall') . '</strong></p></div>'; } else { // process form data if (!empty($_POST['leaky-paywall-subscriber-email']) && is_email(trim(rawurldecode($_POST['leaky-paywall-subscriber-email']))) && !empty($_POST['leaky-paywall-subscriber-login'])) { $login = trim(rawurldecode($_POST['leaky-paywall-subscriber-login'])); $email = trim(rawurldecode($_POST['leaky-paywall-subscriber-email'])); $payment_gateway = trim(rawurldecode($_POST['leaky-paywall-subscriber-payment-gateway'])); $subscriber_id = trim(rawurldecode($_POST['leaky-paywall-subscriber-id'])); if (empty($_POST['leaky-paywall-subscriber-expires'])) { $expires = 0; } else { $expires = date('Y-m-d 23:59:59', strtotime(trim(urldecode($_POST['leaky-paywall-subscriber-expires'])))); } $meta = array('level_id' => $_POST['leaky-paywall-subscriber-level-id'], 'subscriber_id' => $subscriber_id, 'price' => trim($_POST['leaky-paywall-subscriber-price']), 'description' => __('Manual Addition', 'issuem-leaky-paywall'), 'expires' => $expires, 'payment_gateway' => $payment_gateway, 'payment_status' => $_POST['leaky-paywall-subscriber-status'], 'interval' => 0, 'plan' => '', 'site' => $site); $user_id = leaky_paywall_new_subscriber(NULL, $email, $subscriber_id, $meta, $login); do_action('add_leaky_paywall_subscriber', $user_id); } else { echo '<div class="error settings-error" id="setting-error-missing_email"><p><strong>' . __('You must include a valid email address.', 'issuem-leaky-paywall') . '</strong></p></div>'; } } } else { if (!empty($_POST['leaky_paywall_edit_subscriber'])) { if (!wp_verify_nonce($_POST['leaky_paywall_edit_subscriber'], 'edit_subscriber')) { echo '<div class="error settings-error" id="setting-error-invalid_nonce"><p><strong>' . __('Unable to verify security token. Subscriber not added. Please try again.', 'issuem-leaky-paywall') . '</strong></p></div>'; } else { // process form data if (!empty($_POST['leaky-paywall-subscriber-email']) && is_email(trim(rawurldecode($_POST['leaky-paywall-subscriber-email']))) && !empty($_POST['leaky-paywall-subscriber-original-email']) && is_email(trim(rawurldecode($_POST['leaky-paywall-subscriber-original-email']))) && !empty($_POST['leaky-paywall-subscriber-login']) && !empty($_POST['leaky-paywall-subscriber-original-login'])) { $orig_login = trim(rawurldecode($_POST['leaky-paywall-subscriber-original-login'])); $orig_email = trim(rawurldecode($_POST['leaky-paywall-subscriber-original-email'])); $user = get_user_by('email', $orig_email); if (!empty($user)) { $new_login = trim(rawurldecode($_POST['leaky-paywall-subscriber-login'])); $new_email = trim(rawurldecode($_POST['leaky-paywall-subscriber-email'])); $price = trim($_POST['leaky-paywall-subscriber-price']); $status = $_POST['leaky-paywall-subscriber-status']; $payment_gateway = trim(rawurldecode($_POST['leaky-paywall-subscriber-payment-gateway'])); $subscriber_id = trim(rawurldecode($_POST['leaky-paywall-subscriber-id'])); if (empty($_POST['leaky-paywall-subscriber-expires'])) { $expires = 0; } else { $expires = date('Y-m-d 23:59:59', strtotime(trim(urldecode($_POST['leaky-paywall-subscriber-expires'])))); } if ($price !== get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_price' . $site, true)) { update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_price' . $site, $price); } if ($expires !== get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_expires' . $site, true)) { update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_expires' . $site, $expires); } if ($status !== get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, true)) { update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, $status); } if ($payment_gateway !== get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_gateway' . $site, true)) { update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_gateway' . $site, $payment_gateway); } if ($subscriber_id !== get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_subscriber_id' . $site, true)) { update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_subscriber_id' . $site, $subscriber_id); } if ($orig_email !== $new_email) { $args = array('ID' => $user->ID); $args['user_email'] = $orig_email === $new_email ? $orig_email : $new_email; $user_id = wp_update_user($args); } if ($orig_login !== $new_login) { global $wpdb; $wpdb->update($wpdb->users, array('user_login' => $new_login), array('ID' => $user->ID), array('%s'), array('%d')); clean_user_cache($user->ID); } update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_level_id' . $site, $_POST['leaky-paywall-subscriber-level-id']); do_action('update_leaky_paywall_subscriber', $user->ID); } } else { echo '<div class="error settings-error" id="setting-error-missing_email"><p><strong>' . __('You must include a valid email address.', 'issuem-leaky-paywall') . '</strong></p></div>'; } } } } //Create an instance of our package class... $subscriber_table = new Leaky_Paywall_Subscriber_List_Table(); $pagenum = $subscriber_table->get_pagenum(); //Fetch, prepare, sort, and filter our data... $subscriber_table->prepare_items(); $total_pages = $subscriber_table->get_pagination_arg('total_pages'); if ($pagenum > $total_pages && $total_pages > 0) { wp_redirect(esc_url_raw(add_query_arg('paged', $total_pages))); exit; } ?> <div id="leaky-paywall-subscriber-add-edit"> <?php $email = !empty($_GET['edit']) ? trim(rawurldecode($_GET['edit'])) : ''; $user = get_user_by('email', $email); if (!empty($email) && !empty($user)) { $login = $user->user_login; $subscriber_id = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_subscriber_id' . $site, true); $subscriber_level_id = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_level_id' . $site, true); $payment_status = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, true); $payment_gateway = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_gateway' . $site, true); $price = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_price' . $site, true); $expires = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_expires' . $site, true); if ('0000-00-00 00:00:00' === $expires) { $expires = ''; } else { $expires = mysql2date($date_format, $expires); } ?> <form id="leaky-paywall-susbcriber-edit" name="leaky-paywall-subscriber-edit" method="post"> <div style="display: table"> <p><label for="leaky-paywall-subscriber-login" style="display:table-cell"><?php _e('Username (required)', 'issuem-leaky-paywall'); ?> </label><input id="leaky-paywall-subscriber-login" class="regular-text" type="text" value="<?php echo $login; ?> " name="leaky-paywall-subscriber-login" /></p><input id="leaky-paywall-subscriber-original-login" type="hidden" value="<?php echo $login; ?> " name="leaky-paywall-subscriber-original-login" /></p> <p><label for="leaky-paywall-subscriber-email" style="display:table-cell"><?php _e('Email Address (required)', 'issuem-leaky-paywall'); ?> </label><input id="leaky-paywall-subscriber-email" class="regular-text" type="text" value="<?php echo $email; ?> " placeholder="*****@*****.**" name="leaky-paywall-subscriber-email" /></p><input id="leaky-paywall-subscriber-original-email" type="hidden" value="<?php echo $email; ?> " name="leaky-paywall-subscriber-original-email" /></p> <p><label for="leaky-paywall-subscriber-price" style="display:table-cell"><?php _e('Price Paid', 'issuem-leaky-paywall'); ?> </label><input id="leaky-paywall-subscriber-price" class="regular-text" type="text" value="<?php echo $price; ?> " placeholder="0.00" name="leaky-paywall-subscriber-price" /></p> <p> <label for="leaky-paywall-subscriber-expires" style="display:table-cell"><?php _e('Expires', 'issuem-leaky-paywall'); ?> </label><input id="leaky-paywall-subscriber-expires" class="regular-text datepicker" type="text" value="<?php echo $expires; ?> " placeholder="<?php echo date_i18n($date_format, time()); ?> "name="leaky-paywall-subscriber-expires" /> <input type="hidden" name="date_format" value="<?php echo $jquery_date_format; ?> " /> </p> <p> <label for="leaky-paywall-subscriber-level-id" style="display:table-cell"><?php _e('Subscription Level', 'issuem-leaky-paywall'); ?> </label> <select name="leaky-paywall-subscriber-level-id"> <?php foreach ($settings['levels'] as $key => $level) { echo '<option value="' . $key . '" ' . selected($key, $subscriber_level_id, true) . '>' . stripslashes($level['label']) . '</option>'; } ?> </select> </p> <p> <label for="leaky-paywall-subscriber-status" style="display:table-cell"><?php _e('Status', 'issuem-leaky-paywall'); ?> </label> <select name="leaky-paywall-subscriber-status"> <option value="active" <?php selected('active', $payment_status); ?> ><?php _e('Active', 'issuem-leaky-paywall'); ?> </option> <option value="canceled" <?php selected('canceled', $payment_status); ?> ><?php _e('Canceled', 'issuem-leaky-paywall'); ?> </option> <option value="deactivated" <?php selected('deactivated', $payment_status); ?> ><?php _e('Deactivated', 'issuem-leaky-paywall'); ?> </option> </select> </p> <p> <label for="leaky-paywall-subscriber-payment-gateway" style="display:table-cell"><?php _e('Payment Method', 'issuem-leaky-paywall'); ?> </label> <?php $payment_gateways = leaky_paywall_payment_gateways(); ?> <select name="leaky-paywall-subscriber-payment-gateway"> <?php foreach ($payment_gateways as $key => $gateway) { echo '<option value="' . $key . '" ' . selected($key, $payment_gateway, false) . '>' . $gateway . '</option>'; } echo apply_filters('leaky_paywall_subscriber_payment_gateway_select_option', ''); ?> </select> </p> <p> <label for="leaky-paywall-subscriber-id" style="display:table-cell"><?php _e('Subscriber ID', 'issuem-leaky-paywall'); ?> </label><input id="leaky-paywall-subscriber-id" class="regular-text" type="text" value="<?php echo $subscriber_id; ?> " name="leaky-paywall-subscriber-id" /> </p> <?php do_action('update_leaky_paywall_subscriber_form', $user->ID); ?> </div> <?php submit_button('Update Subscriber'); ?> <p> <a href="<?php echo esc_url(remove_query_arg('edit')); ?> "><?php _e('Cancel', 'issuem-leaky-paywall'); ?> </a> </p> <?php wp_nonce_field('edit_subscriber', 'leaky_paywall_edit_subscriber'); ?> </form> <?php } else { ?> <form id="leaky-paywall-susbcriber-add" name="leaky-paywall-subscriber-add" method="post"> <div style="display: table"> <p><label for="leaky-paywall-subscriber-login" style="display:table-cell"><?php _e('Username (required)', 'issuem-leaky-paywall'); ?> </label><input id="leaky-paywall-subscriber-login" class="regular-text" type="text" value="" name="leaky-paywall-subscriber-login" /></p> <p><label for="leaky-paywall-subscriber-email" style="display:table-cell"><?php _e('Email Address (required)', 'issuem-leaky-paywall'); ?> </label><input id="leaky-paywall-subscriber-email" class="regular-text" type="text" value="" placeholder="*****@*****.**" name="leaky-paywall-subscriber-email" /></p> <p><label for="leaky-paywall-subscriber-price" style="display:table-cell"><?php _e('Price Paid', 'issuem-leaky-paywall'); ?> </label><input id="leaky-paywall-subscriber-price" class="regular-text" type="text" value="" placeholder="0.00" name="leaky-paywall-subscriber-price" /></p> <p> <label for="leaky-paywall-subscriber-expires" style="display:table-cell"><?php _e('Expires', 'issuem-leaky-paywall'); ?> </label><input id="leaky-paywall-subscriber-expires" class="regular-text datepicker" type="text" value="" placeholder="<?php echo date_i18n($date_format, time()); ?> "name="leaky-paywall-subscriber-expires" /> <input type="hidden" name="date_format" value="<?php echo $jquery_date_format; ?> " /> </p> <p> <label for="leaky-paywall-subscriber-level-id" style="display:table-cell"><?php _e('Subscription Level', 'issuem-leaky-paywall'); ?> </label> <select name="leaky-paywall-subscriber-level-id"> <?php foreach ($settings['levels'] as $key => $level) { echo '<option value="' . $key . '">' . stripslashes($level['label']) . '</option>'; } ?> </select> </p> <p> <label for="leaky-paywall-subscriber-status" style="display:table-cell"><?php _e('Status', 'issuem-leaky-paywall'); ?> </label> <select name="leaky-paywall-subscriber-status"> <option value="active"><?php _e('Active', 'issuem-leaky-paywall'); ?> </option> <option value="canceled"><?php _e('Canceled', 'issuem-leaky-paywall'); ?> </option> <option value="deactivated"><?php _e('Deactivated', 'issuem-leaky-paywall'); ?> </option> </select> </p> <p> <label for="leaky-paywall-subscriber-payment-gateway" style="display:table-cell"><?php _e('Payment Method', 'issuem-leaky-paywall'); ?> </label> <select name="leaky-paywall-subscriber-payment-gateway"> <option value="manual"><?php _e('Manual', 'issuem-leaky-paywall'); ?> </option> <option value="stripe"><?php _e('Stripe', 'issuem-leaky-paywall'); ?> </option> <option value="paypal_standard"><?php _e('PayPal', 'issuem-leaky-paywall'); ?> </option> </select> </p> <p> <label for="leaky-paywall-subscriber-id" style="display:table-cell"><?php _e('Subscriber ID', 'issuem-leaky-paywall'); ?> </label><input id="leaky-paywall-subscriber-id" class="regular-text" type="text" value="" name="leaky-paywall-subscriber-id" /> </p> <?php do_action('add_leaky_paywall_subscriber_form'); ?> </div> <?php submit_button('Add New Subscriber'); ?> <?php wp_nonce_field('add_new_subscriber', 'leaky_paywall_add_subscriber'); ?> </form> <?php do_action('leaky_paywall_after_new_subscriber_form'); ?> <?php } ?> <br class="clear"> </div> <!-- Forms are NOT created automatically, so you need to wrap the table in one to use features like bulk actions --> <form id="leaky-paywall-subscribers" method="get"> <!-- For plugins, we also need to ensure that the form posts back to our current page --> <input type="hidden" name="page" value="<?php echo $_REQUEST['page']; ?> " /> <!-- Now we can render the completed list table --> <div class="tablenav top"> <?php $subscriber_table->user_views(); ?> <?php $subscriber_table->search_box(__('Search Subscribers'), 'issuem-leaky-paywall'); ?> </div> <?php $subscriber_table->display(); ?> </form> </div> <?php }
/** * Process PayPal IPN. This is also where Paypal Subscribe buttons are processed. * * @since 4.0.0 */ public function process_webhooks() { if (!isset($_GET['listener']) || strtoupper($_GET['listener']) != 'IPN') { return; } $site = ''; $mode = 'off' === $settings['test_mode'] ? 'live' : 'test'; $settings = get_leaky_paywall_settings(); $payload['cmd'] = '_notify-validate'; foreach ($_POST as $key => $value) { $payload[$key] = stripslashes($value); } $paypal_api_url = !empty($_REQUEST['test_ipn']) ? PAYPAL_PAYMENT_SANDBOX_URL : PAYPAL_PAYMENT_LIVE_URL; $response = wp_remote_post($paypal_api_url, array('body' => $payload, 'httpversion' => '1.1')); $body = wp_remote_retrieve_body($response); if ('VERIFIED' === $body) { if (!empty($_REQUEST['txn_type'])) { $args = array('level_id' => isset($_REQUEST['item_number']) ? $_REQUEST['item_number'] : $_REQUEST['custom'], 'description' => $_REQUEST['item_name'], 'payment_gateway' => 'paypal_standard'); $level = get_leaky_paywall_subscription_level($args['level_id']); $args['interval'] = $level['interval']; $args['interval_count'] = $level['interval_count']; if (is_multisite_premium() && !empty($level['site']) && !is_main_site($level['site'])) { $site = '_' . $level['site']; } else { $site = ''; } switch ($_REQUEST['txn_type']) { case 'web_accept': if (isset($_REQUEST['mc_gross'])) { //subscr_payment $args['price'] = $_REQUEST['mc_gross']; } else { if (isset($_REQUEST['payment_gross'])) { //subscr_payment $args['price'] = $_REQUEST['payment_gross']; } } if (isset($_REQUEST['txn_id'])) { //subscr_payment $args['subscr_id'] = $_REQUEST['txn_id']; } $args['plan'] = ''; if ('completed' === strtolower($_REQUEST['payment_status'])) { $args['payment_status'] = 'active'; } else { $args['payment_status'] = 'deactivated'; } break; case 'subscr_signup': if (isset($_REQUEST['mc_amount3'])) { //subscr_payment $args['price'] = $_REQUEST['mc_amount3']; } else { if (isset($_REQUEST['amount3'])) { //subscr_payment $args['price'] = $_REQUEST['amount3']; } } if (isset($_REQUEST['subscr_id'])) { //subscr_payment $args['subscr_id'] = $_REQUEST['subscr_id']; } if (isset($_REQUEST['period3'])) { $args['plan'] = $_REQUEST['period3']; $new_expiration = date_i18n('Y-m-d 23:59:59', strtotime('+' . str_replace(array('D', 'W', 'M', 'Y'), array('Days', 'Weeks', 'Months', 'Years'), $args['plan']), strtotime($_REQUEST['subscr_date']))); $args['expires'] = $new_expiration; } $args['payment_status'] = 'active'; //It's a signup, of course it's active! break; case 'subscr_payment': if (isset($_REQUEST['mc_gross'])) { //subscr_payment $args['price'] = $_REQUEST['mc_gross']; } else { if (isset($_REQUEST['payment_gross'])) { //subscr_payment $args['price'] = $_REQUEST['payment_gross']; } } if (!empty($_REQUEST['subscr_id'])) { //subscr_payment $args['subscr_id'] = $_REQUEST['subscr_id']; } if ('completed' === strtolower($_REQUEST['payment_status'])) { $args['payment_status'] = 'active'; } else { $args['payment_status'] = 'deactivated'; } $user = get_leaky_paywall_subscriber_by_subscriber_id($args['subscr_id'], $mode); if (is_multisite_premium()) { if ($site_id = get_leaky_paywall_subscribers_site_id_by_subscriber_id($_REQUEST['subscr_id'])) { $site = '_' . $site_id; } } if (!empty($user) && 0 !== $user->ID && ($plan = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_plan' . $site, true)) && 'completed' === strtolower($_REQUEST['payment_status'])) { $args['plan'] = $plan; $new_expiration = date_i18n('Y-m-d 23:59:59', strtotime('+' . str_replace(array('D', 'W', 'M', 'Y'), array('Days', 'Weeks', 'Months', 'Years'), $plan), strtotime($_REQUEST['payment_date']))); $args['expires'] = $new_expiration; } else { $args['plan'] = $level['interval_count'] . ' ' . strtoupper(substr($level['interval'], 0, 1)); $new_expiration = date_i18n('Y-m-d 23:59:59', strtotime('+' . str_replace(array('D', 'W', 'M', 'Y'), array('Days', 'Weeks', 'Months', 'Years'), $args['plan']), strtotime($_REQUEST['payment_date']))); $args['expires'] = $new_expiration; } break; case 'subscr_cancel': if (isset($_REQUEST['subscr_id'])) { //subscr_payment $user = get_leaky_paywall_subscriber_by_subscriber_id($_REQUEST['subscr_id'], $mode); if (is_multisite_premium()) { if ($site_id = get_leaky_paywall_subscribers_site_id_by_subscriber_id($_REQUEST['subscr_id'])) { $site = '_' . $site_id; } } if (!empty($user) && 0 !== $user->ID) { update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'canceled'); } } return true; //We don't need to process anymore //We don't need to process anymore case 'subscr_eot': if (isset($_REQUEST['subscr_id'])) { //subscr_payment $user = get_leaky_paywall_subscriber_by_subscriber_id($_REQUEST['subscr_id'], $mode); if (is_multisite_premium()) { if ($site_id = get_leaky_paywall_subscribers_site_id_by_subscriber_id($_REQUEST['subscr_id'])) { $site = '_' . $site_id; } } if (!empty($user) && 0 !== $user->ID) { update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'expired'); } } return true; //We don't need to process anymore //We don't need to process anymore case 'recurring_payment_suspended_due_to_max_failed_payment': if (isset($_REQUEST['recurring_payment_id'])) { //subscr_payment $user = get_leaky_paywall_subscriber_by_subscriber_id($args['recurring_payment_id'], $mode); if (is_multisite_premium()) { if ($site_id = get_leaky_paywall_subscribers_site_id_by_subscriber_id($_REQUEST['recurring_payment_id'])) { $site = '_' . $site_id; } } if (!empty($user) && 0 !== $user->ID) { update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'deactivated'); } } return true; //We don't need to process anymore //We don't need to process anymore case 'recurring_payment_suspended': if (isset($_REQUEST['subscr_id'])) { //subscr_payment $user = get_leaky_paywall_subscriber_by_subscriber_id($_REQUEST['subscr_id'], $mode); if (is_multisite_premium()) { if ($site_id = get_leaky_paywall_subscribers_site_id_by_subscriber_id($_REQUEST['subscr_id'])) { $site = '_' . $site_id; } } if (!empty($user) && 0 !== $user->ID) { update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'suspended'); } } else { if (isset($_REQUEST['recurring_payment_id'])) { //subscr_payment $user = get_leaky_paywall_subscriber_by_subscriber_id($args['recurring_payment_id'], $mode); if (is_multisite_premium()) { if ($site_id = get_leaky_paywall_subscribers_site_id_by_subscriber_id($_REQUEST['recurring_payment_id'])) { $site = '_' . $site_id; } } if (!empty($user) && 0 !== $user->ID) { update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'suspended'); } } } return true; //We don't need to process anymore } if (!empty($_REQUEST['custom']) && is_email($_REQUEST['custom'])) { $user = get_user_by('email', $_REQUEST['custom']); if (empty($user)) { $user = get_leaky_paywall_subscriber_by_subscriber_email($_REQUEST['custom'], $mode); if (is_multisite_premium()) { if ($site_id = get_leaky_paywall_subscribers_site_id_by_subscriber_email($_REQUEST['custom'])) { $args['site'] = $site_id; } } } } if (empty($user) && !empty($_REQUEST['payer_email']) && is_email($_REQUEST['payer_email'])) { $user = get_user_by('email', $_REQUEST['payer_email']); if (empty($user)) { $user = get_leaky_paywall_subscriber_by_subscriber_email($_REQUEST['payer_email'], $mode); if (is_multisite_premium()) { if ($site_id = get_leaky_paywall_subscribers_site_id_by_subscriber_email($_REQUEST['payer_email'])) { $args['site'] = $site_id; } } } } if (empty($user) && !empty($_REQUEST['txn_id'])) { $user = get_leaky_paywall_subscriber_by_subscriber_id($_REQUEST['txn_id'], $mode); if (is_multisite_premium()) { if ($site_id = get_leaky_paywall_subscribers_site_id_by_subscriber_id($_REQUEST['txn_id'])) { $args['site'] = $site_id; } } } if (empty($user) && !empty($_REQUEST['subscr_id'])) { $user = get_leaky_paywall_subscriber_by_subscriber_id($_REQUEST['subscr_id'], $mode); if (is_multisite_premium()) { if ($site_id = get_leaky_paywall_subscribers_site_id_by_subscriber_id($_REQUEST['subscr_id'])) { $args['site'] = $site_id; } } } if (!empty($user)) { //WordPress user exists $args['subscriber_email'] = $user->user_email; leaky_paywall_update_subscriber(NULL, $args['subscriber_email'], $args['subscr_id'], $args); } else { //Need to create a new user $args['subscriber_email'] = is_email($_REQUEST['custom']) ? $_REQUEST['custom'] : $_REQUEST['payer_email']; leaky_paywall_new_subscriber(NULL, $args['subscriber_email'], $args['subscr_id'], $args); } } } else { error_log(sprintf(__('Invalid IPN sent from PayPal: %s', 'issuem-leaky-paywall'), maybe_serialize($payload))); } return true; }
function display_rows() { global $current_site, $blog_id; $settings = get_leaky_paywall_settings(); if (is_multisite_premium()) { global $blog_id; if (!is_main_site($blog_id)) { $sites = array('_all', '_' . $blog_id); } else { $sites = array('_all', '_' . $blog_id, ''); } } else { // create a generic array so that single site installs will iterate through the sites loop below $sites = array('_all'); } $alt = ''; foreach ($this->items as $user) { $user = get_user_by('email', $user->user_email); $mode = 'off' === $settings['test_mode'] ? 'live' : 'test'; foreach ($sites as $site) { $alt = 'alternate' == $alt ? '' : 'alternate'; if (is_multisite_premium()) { $payment_gateway = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_gateway' . $site, true); } else { $payment_gateway = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_gateway', true); } if (empty($payment_gateway)) { continue; } ?> <tr class="<?php echo $alt; ?> "> <?php list($columns, $hidden) = $this->get_column_info(); foreach ($columns as $column_name => $column_display_name) { $class = "class='{$column_name} column-{$column_name}'"; $style = ''; if (in_array($column_name, $hidden)) { $style = ' style="display:none;"'; } $attributes = "{$class}{$style}"; switch ($column_name) { case 'wp_user_login': echo "<td {$attributes}>"; ?> <strong><?php echo $user->user_login; ?> </strong> </td> <?php break; case 'email': $avatar = get_avatar($user->user_email, 32); $edit_link = esc_url(add_query_arg('edit', urlencode($user->user_email))); echo "<td {$attributes}>"; ?> <?php echo $avatar; ?> <strong><a href="<?php echo $edit_link; ?> " class="edit"><?php echo $user->user_email; ?> </a></strong> </td> <?php break; case 'level_id': if (is_multisite_premium()) { $level_id = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_level_id' . $site, true); } else { $level_id = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_level_id', true); } $level_id = apply_filters('get_leaky_paywall_users_level_id', $level_id, $user, $mode, $site); $level_id = apply_filters('get_leaky_paywall_subscription_level_level_id', $level_id); if (false === $level_id || empty($settings['levels'][$level_id]['label'])) { $level_name = __('Undefined', 'issuem-leaky-paywall'); } else { $level_name = stripcslashes($settings['levels'][$level_id]['label']); } echo "<td {$attributes}>" . $level_name . '</td>'; break; case 'susbcriber_id': if (is_multisite_premium()) { echo "<td {$attributes}>" . get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_subscriber_id' . $site, true) . '</td>'; } else { echo "<td {$attributes}>" . get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_subscriber_id', true) . '</td>'; } break; case 'price': if (is_multisite_premium()) { echo "<td {$attributes}>" . number_format((double) get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_price' . $site, true), '2') . '</td>'; } else { echo "<td {$attributes}>" . number_format((double) get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_price', true), '2') . '</td>'; } break; case 'plan': if (is_multisite_premium()) { $plan = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_plan' . $site, true); } else { $plan = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_plan', true); } if (empty($plan)) { $plan = __('Non-Recurring', 'issuem-leaky-paywall'); } else { if ('paypal_standard' === $payment_gateway || 'paypal-standard' === $payment_gateway) { $plan = sprintf(__('Recurring every %s', 'issuem-leaky-paywall'), str_replace(array('D', 'W', 'M', 'Y'), array('Days', 'Weeks', 'Months', 'Years'), $plan)); } } echo "<td {$attributes}>" . $plan . '</td>'; break; case 'created': if (is_multisite_premium()) { $created = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_created' . $site, true); } else { $created = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_created', true); } $created = apply_filters('do_leaky_paywall_profile_shortcode_created_column', $created, $user, $mode, $site, $level_id); $date_format = get_option('date_format'); $created = mysql2date($date_format, $created); echo "<td {$attributes}>" . $created . '</td>'; break; case 'expires': if (is_multisite_premium()) { $expires = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_expires' . $site, true); } else { $expires = get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_expires', true); } $expires = apply_filters('do_leaky_paywall_profile_shortcode_expiration_column', $expires, $user, $mode, $site, $level_id); if (empty($expires) || '0000-00-00 00:00:00' === $expires || 'Never' === $expires) { $expires = __('Never', 'issuem-leaky-paywall'); } else { $date_format = get_option('date_format'); $expires = mysql2date($date_format, $expires); } echo "<td {$attributes}>" . $expires . '</td>'; break; case 'gateway': echo "<td {$attributes}>" . leaky_paywall_translate_payment_gateway_slug_to_name($payment_gateway) . '</td>'; break; case 'status': if (is_multisite_premium()) { echo "<td {$attributes}>" . get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, true) . '</td>'; } else { echo "<td {$attributes}>" . get_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status', true) . '</td>'; } break; default: echo "<td {$attributes}>" . apply_filters('manage_leaky_paywall_subscribers_custom_column', ' ', $column_name, $user->ID) . '</td>'; break; } } } ?> </tr> <?php } }
function leaky_paywall_pay_with_email($level, $level_id) { $settings = get_leaky_paywall_settings(); $results = '<a href="' . get_page_link($settings['page_for_register']) . '?level_id=' . $level_id . '">Subscribe</a>'; return '<div class="leaky-paywall-payment-button">' . $results . '</div>'; }
function leaky_paywall_filter_email_tags($message, $user_id, $display_name, $password) { $settings = get_leaky_paywall_settings(); $user = get_userdata($user_id); $site_name = stripslashes_deep(html_entity_decode(get_bloginfo('name'), ENT_COMPAT, 'UTF-8')); $message = str_replace('%blogname%', $site_name, $message); $message = str_replace('%sitename%', $site_name, $message); $message = str_replace('%username%', $user->user_login, $message); $message = str_replace('%firstname%', $user->user_firstname, $message); $message = str_replace('%lastname%', $user->user_lastname, $message); $message = str_replace('%displayname%', $display_name, $message); $message = str_replace('%password%', $password, $message); return $message; }
/** * Regsiter a new user * * @since 4.0.0 */ function leaky_paywall_process_registration() { if (!isset($_POST['leaky_paywall_register_nonce'])) { return; } if (!wp_verify_nonce($_POST['leaky_paywall_register_nonce'], 'leaky-paywall-register-nonce')) { return; } $settings = get_leaky_paywall_settings(); global $user_ID; $level_id = isset($_POST['level_id']) ? absint($_POST['level_id']) : false; // get the selected payment method if (!isset($_POST['gateway'])) { $gateway = 'paypal'; } else { $gateway = sanitize_text_field($_POST['gateway']); } /** * Validate the Form */ // validate user data $user_data = leaky_paywall_validate_user_data(); // Validate extra fields in gateways do_action('leaky_paywall_form_errors', $_POST); // retrieve all error messages, if any $errors = leaky_paywall_errors()->get_error_messages(); // only create the user if there are no errors if (!empty($errors)) { return; } // create a new user if ($user_data['need_new']) { $user_data['id'] = wp_insert_user(array('user_login' => $user_data['login'], 'user_pass' => $user_data['password'], 'user_email' => $user_data['email'], 'first_name' => $user_data['first_name'], 'last_name' => $user_data['last_name'], 'display_name' => $user_data['first_name'] . ' ' . $user_data['last_name'], 'user_registered' => date('Y-m-d H:i:s'))); } if (empty($user_data['id'])) { return; } // add details about the subscription to newly created subscriber if ($user_data['id']) { $meta = array('level_id' => $level_id, 'price' => sanitize_text_field($_POST['level_price']), 'description' => sanitize_text_field($_POST['description']), 'plan' => sanitize_text_field($_POST['plan_id']), 'created' => date('Y-m-d H:i:s'), 'subscriber_id' => '', 'payment_gateway' => $gateway); $level = get_leaky_paywall_subscription_level($level_id); $mode = 'off' === $settings['test_mode'] ? 'live' : 'test'; if (is_multisite_premium() && !empty($level['site']) && !is_main_site($level['site'])) { $site = '_' . $level['site']; } else { $site = ''; } // set free level subscribers to active if ($meta['price'] == '0') { $meta['payment_status'] = 'active'; } foreach ($meta as $key => $value) { update_user_meta($user_data['id'], '_issuem_leaky_paywall_' . $mode . '_' . $key . $site, $value); } do_action('leaky_paywall_form_processing', $_POST, $user_data['id'], $meta['price'], $mode, $site); if ($meta['price'] > '0') { if (!empty($discount)) { // record usage of discount code } $subscription_data = array('amount' => sanitize_text_field($_POST['level_price']), 'description' => sanitize_text_field($_POST['description']), 'user_id' => $user_data['id'], 'user_name' => $user_data['login'], 'user_email' => $user_data['email'], 'first_name' => $user_data['first_name'], 'last_name' => $user_data['last_name'], 'level_id' => $meta['level_id'], 'level_price' => sanitize_text_field($_POST['level_price']), 'plan_id' => sanitize_text_field($_POST['plan_id']), 'currency' => $settings['leaky_paywall_currency'], 'length' => sanitize_text_field($_POST['interval_count']), 'length_unit' => sanitize_text_field($_POST['interval']), 'recurring' => sanitize_text_field($_POST['recurring']), 'site' => sanitize_text_field($_POST['site']), 'new_user' => $user_data['need_new'], 'post_data' => $_POST); // send all data to the gateway for processing leaky_paywall_send_to_gateway($gateway, apply_filters('leaky_paywall_subscription_data', $subscription_data)); } else { // process a free subscription $subscription_data = array('length' => sanitize_text_field($_POST['interval_count']), 'length_unit' => sanitize_text_field($_POST['interval']), 'site' => $site, 'mode' => $mode); leaky_paywall_set_expiration_date($user_data['id'], $subscription_data); // send email notification // @todo add a free version of the email notification, not just new leaky_paywall_email_subscription_status($user_data['id'], 'new', $user_data); do_action('leaky_paywall_after_free_user_created', $user_data['id'], $_POST); // log the new user in wp_setcookie($user_data['login'], $user_data['password'], true); wp_set_current_user($user_data['id'], $user_data['login']); do_action('wp_login', $user_data['login']); // send the newly created user to the appropriate page after logging them in if (!empty($settings['page_for_after_subscribe'])) { wp_safe_redirect(get_page_link($settings['page_for_after_subscribe'])); } else { if (!empty($settings['page_for_profile'])) { wp_safe_redirect(get_page_link($settings['page_for_profile'])); } else { if (!empty($settings['page_for_subscription'])) { wp_safe_redirect(get_page_link($settings['page_for_subscription'])); } } } exit; } // @todo: move login and redirect code here so that it doesn't have to be included in each payment gateway } }
/** * Gets the stripe plan associated with the level, and creates one if it doesn't exist * * @since 4.0.0 */ function leaky_paywall_get_stripe_plan($level, $level_id, $plan_args) { $settings = get_leaky_paywall_settings(); $stripe_plan = false; $time = time(); Stripe::setApiKey($plan_args['secret_key']); if (!empty($level['plan_id'])) { //We need to verify that the plan_id matches the level details, otherwise we need to update it try { $stripe_plan = Stripe_Plan::retrieve($level['plan_id']); } catch (Exception $e) { $stripe_plan = false; } } if (!is_object($stripe_plan) || ($plan_args['stripe_price'] != $stripe_plan->amount || $level['interval'] != $stripe_plan->interval || $level['interval_count'] != $stripe_plan->interval_count)) { $args = array('amount' => esc_js($plan_args['stripe_price']), 'interval' => esc_js($level['interval']), 'interval_count' => esc_js($level['interval_count']), 'name' => esc_js($level['label']) . ' ' . $time, 'currency' => esc_js($plan_args['currency']), 'id' => sanitize_title_with_dashes($level['label']) . '-' . $time); $stripe_plan = Stripe_Plan::create($args); $settings['levels'][$level_id]['plan_id'] = $stripe_plan->id; update_leaky_paywall_settings($settings); } return $stripe_plan; }
/** * Add subscribe button to free level subcription cards * * @since 4.0.0 * @return string payment option output for subscription card */ function leaky_paywall_free_subscription_cards($payment_options, $level, $level_id) { if ($level['price'] != 0) { return $payment_options; } $settings = get_leaky_paywall_settings(); $output = '<div class="leaky-paywall-payment-button"><a href="' . get_page_link($settings['page_for_register']) . '?level_id=' . $level_id . '">Subscribe</a></div>'; return $payment_options . $output; }