/**
 * 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 
}
Example #2
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;
}
 /**
  * Process incoming webhooks
  *
  * @since 4.0.0
  */
 public function process_webhooks()
 {
     if (!isset($_GET['listener']) || strtolower($_GET['listener']) != 'stripe') {
         return;
     }
     $body = @file_get_contents('php://input');
     $stripe_event = json_decode($body);
     $settings = get_leaky_paywall_settings();
     if ($stripe_event->livemode == false) {
         $mode == 'test';
     } else {
         $mode == 'live';
     }
     if (isset($stripe_event->type)) {
         $stripe_object = $stripe_event->data->object;
         if (!empty($stripe_object->customer)) {
             $user = get_leaky_paywall_subscriber_by_subscriber_id($stripe_object->customer, $mode);
         }
         if (!empty($user)) {
             if (is_multisite_premium()) {
                 if ($site_id = get_leaky_paywall_subscribers_site_id_by_subscriber_id($stripe_object->customer)) {
                     $site = '_' . $site_id;
                 }
             }
             //https://stripe.com/docs/api#event_types
             switch ($stripe_event->type) {
                 case 'charge.succeeded':
                     update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'active');
                     break;
                 case 'charge.failed':
                     update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'deactivated');
                     break;
                 case 'charge.refunded':
                     if ($stripe_object->refunded) {
                         update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'deactivated');
                     } else {
                         update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'deactivated');
                     }
                     break;
                 case 'charge.dispute.created':
                 case 'charge.dispute.updated':
                 case 'charge.dispute.closed':
                     break;
                 case 'customer.deleted':
                     update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'canceled');
                     break;
                 case 'invoice.payment_succeeded':
                     update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'active');
                     break;
                 case 'invoice.payment_failed':
                     update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'deactivated');
                     break;
                 case 'customer.subscription.updated':
                     $expires = date_i18n('Y-m-d 23:59:59', $stripe_object->current_period_end);
                     update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_expires' . $site, $expires);
                     break;
                 case 'customer.subscription.created':
                     update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'active');
                     break;
                 case 'customer.subscription.deleted':
                     update_user_meta($user->ID, '_issuem_leaky_paywall_' . $mode . '_payment_status' . $site, 'canceled');
                     break;
             }
         }
     }
 }
Example #4
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 #7
0
 function leaky_paywall_subscription_options()
 {
     global $blog_id;
     $settings = get_leaky_paywall_settings();
     $current_level_ids = leaky_paywall_subscriber_current_level_ids();
     $results = apply_filters('leaky_paywall_subscription_options', '');
     //If someone wants to completely override this, they can with the above filter
     if (empty($results)) {
         $has_allowed_value = false;
         $results .= '<h2>' . __('Subscription Options', 'issuem-leaky-paywall') . '</h2>';
         $results .= apply_filters('leaky_paywall_subscription_options_header', '');
         if (!empty($settings['levels'])) {
             $results .= apply_filters('leaky_paywall_before_subscription_options', '');
             $results .= '<div class="leaky_paywall_subscription_options">';
             foreach (apply_filters('leaky_paywall_subscription_levels', $settings['levels']) as $level_id => $level) {
                 if (!empty($level['deleted'])) {
                     continue;
                 }
                 if (is_multisite_premium() && !empty($level['site']) && 'all' != $level['site'] && $blog_id != $level['site']) {
                     continue;
                 }
                 $level = apply_filters('leaky_paywall_subscription_options_level', $level, $level_id);
                 $payment_options = '';
                 $allowed_content = '';
                 if (in_array($level_id, $current_level_ids)) {
                     $current_level = 'current-level';
                 } else {
                     $current_level = '';
                 }
                 $results .= '<div id="option-' . $level_id . '" class="leaky_paywall_subscription_option ' . $current_level . '">';
                 $results .= '<h3>' . stripslashes($level['label']) . '</h3>';
                 $results .= '<div class="leaky_paywall_subscription_allowed_content">';
                 foreach ($level['post_types'] as $post_type) {
                     /* @todo: We may need to change the site ID during this process, some sites may have different post types enabled */
                     $post_type_obj = get_post_type_object($post_type['post_type']);
                     if (!empty($post_type_obj)) {
                         if (0 <= $post_type['allowed_value']) {
                             $has_allowed_value = true;
                             $allowed_content .= '<p>' . sprintf(__('Access %s %s*', 'issuem-leaky-paywall'), $post_type['allowed_value'], $post_type_obj->labels->name) . '</p>';
                         } else {
                             $allowed_content .= '<p>' . sprintf(__('Unlimited %s', 'issuem-leaky-paywall'), $post_type_obj->labels->name) . '</p>';
                         }
                     }
                 }
                 $results .= apply_filters('leaky_paywall_subscription_options_allowed_content', $allowed_content, $level_id, $level);
                 $results .= '</div>';
                 $currency = $settings['leaky_paywall_currency'];
                 $currencies = leaky_paywall_supported_currencies();
                 $results .= '<div class="leaky_paywall_subscription_price">';
                 $results .= '<p>';
                 if (!empty($level['price'])) {
                     if (!empty($level['recurring']) && 'on' === $level['recurring'] && apply_filters('leaky_paywall_subscription_options_price_recurring_on', true, $current_level)) {
                         $results .= '<strong>' . sprintf(__('%s%s %s (recurring)', 'issuem-leaky-paywall'), $currencies[$currency]['symbol'], number_format($level['price'], 2), leaky_paywall_human_readable_interval($level['interval_count'], $level['interval'])) . '</strong>';
                         $results .= apply_filters('leaky_paywall_before_subscription_options_recurring_price', '');
                     } else {
                         $results .= '<strong>' . sprintf(__('%s%s %s', 'issuem-leaky-paywall'), $currencies[$currency]['symbol'], number_format($level['price'], 2), leaky_paywall_human_readable_interval($level['interval_count'], $level['interval'])) . '</strong>';
                         $results .= apply_filters('leaky_paywall_before_subscription_options_non_recurring_price', '');
                     }
                     if (!empty($level['trial_period'])) {
                         $results .= '<span class="leaky-paywall-trial-period">' . sprintf(__('Free for the first %s day(s)', 'issuem-leaky-paywall'), $level['trial_period']) . '</span>';
                     }
                 } else {
                     $results .= '<strong>' . __('Free', 'issuem-leaky-paywall') . '</strong>';
                 }
                 $results .= '</p>';
                 $results .= '</div>';
                 //Don't show payment options if the users is currently subscribed to this level
                 if (!in_array($level_id, $current_level_ids)) {
                     $results .= '<div class="leaky_paywall_subscription_payment_options">';
                     $results .= apply_filters('leaky_paywall_subscription_options_payment_options', $payment_options, $level, $level_id);
                     $results .= '</div>';
                 } else {
                     $results .= '<div class="leaky_paywall_subscription_current_level">';
                     $results .= __('Current Subscription', 'issuem-leaky-paywall');
                     $results .= '</div>';
                 }
                 $results .= '</div>';
             }
             $results .= '</div>';
             $results .= apply_filters('leaky_paywall_subscription_options_after_subscription_options', '');
             if ($has_allowed_value) {
                 $results .= '<div class="leaky_paywall_subscription_limit_details">';
                 $results .= '*' . ucfirst(leaky_paywall_human_readable_interval($settings['cookie_expiration'], $settings['cookie_expiration_interval']));
                 $results .= '</div>';
             }
         }
         $results .= apply_filters('leaky_paywall_subscription_options_footer', '');
     }
     return $results;
 }
/**
 * 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
    }
}