Example #1
0
/**
 * 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>';
}
Example #2
0
 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();
 }
Example #6
0
/**
 * 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();
    }
Example #8
0
        /**
         * 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', '&nbsp;', $column_name, $user->ID) . '</td>';
                            break;
                    }
                }
            }
            ?>
			</tr>
			<?php 
        }
    }
Example #11
0
 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>';
 }
Example #12
0
 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
    }
}
Example #14
0
/**
 * 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;
}