Paid Memberships Pro - Version 1.8.6.8

Version Description

  • BUG/ENHANCEMENT: Adding <!-- comment markup --> to inline JavaScript to avoid issues where themes/plugins were adding formatting into the JavaScript code. (Thanks, Isabelle Couillard)
  • BUG: Removed calls to force_ssl_login(), which has been deprecated in WP 4.4+. We are using force_ssl_admin() instead.
  • BUG: Fixed issue in pmpro_isLevelExpiringSoon() which controls when "renew" links are shown to users. (Thanks, Thomas Sjolshagen)
  • ENHANCEMENT: Updated PayPal gateway classes to use the WP HTTP API instead of CURL directly.
Download this release

Release Info

Developer strangerstudios
Plugin Icon 128x128 Paid Memberships Pro
Version 1.8.6.8
Comparing to
See all releases

Code changes from version 1.8.6.7 to 1.8.6.8

adminpages/reports.php CHANGED
@@ -33,7 +33,7 @@
33
}
34
?>
35
<div id="pmpro_report_<?php echo $report; ?>" class="postbox pmpro_clickable" onclick="location.href='<?php echo admin_url("admin.php?page=pmpro-reports&report=" . $report);?>';">
36
- <h3 class="hndle"><span><?php echo $title; ?></span></h3>
37
<div class="inside">
38
<?php call_user_func("pmpro_report_" . $report . "_widget"); ?>
39
<p style="text-align:center;">
33
}
34
?>
35
<div id="pmpro_report_<?php echo $report; ?>" class="postbox pmpro_clickable" onclick="location.href='<?php echo admin_url("admin.php?page=pmpro-reports&report=" . $report);?>';">
36
+ <h2 class="hndle"><span><?php echo $title; ?></span></h2>
37
<div class="inside">
38
<?php call_user_func("pmpro_report_" . $report . "_widget"); ?>
39
<p style="text-align:center;">
adminpages/reports/login.php CHANGED
@@ -75,9 +75,9 @@ function pmpro_report_login_page()
75
$l = "";
76
?>
77
<form id="posts-filter" method="get" action="">
78
- <h2>
79
<?php _e('Visits, Views, and Logins Report', 'pmpro');?>
80
- </h2>
81
<ul class="subsubsub">
82
<li>
83
<?php _ex('Show', 'Dropdown label, e.g. Show All Users', 'pmpro')?> <select name="l" onchange="jQuery('#posts-filter').submit();">
75
$l = "";
76
?>
77
<form id="posts-filter" method="get" action="">
78
+ <h1>
79
<?php _e('Visits, Views, and Logins Report', 'pmpro');?>
80
+ </h1>
81
<ul class="subsubsub">
82
<li>
83
<?php _ex('Show', 'Dropdown label, e.g. Show All Users', 'pmpro')?> <select name="l" onchange="jQuery('#posts-filter').submit();">
adminpages/reports/memberships.php CHANGED
@@ -35,7 +35,7 @@ function pmpro_report_memberships_widget() {
35
<tr>
36
<th scope="col">&nbsp;</th>
37
<th scope="col"><?php _e('Signups','pmpro'); ?></th>
38
- <th scope="col"><?php _e('Cancellations','pmpro'); ?></th>
39
</tr>
40
</thead>
41
<tbody>
@@ -73,7 +73,7 @@ function pmpro_report_memberships_page()
73
if(isset($_REQUEST['type']))
74
$type = sanitize_text_field($_REQUEST['type']);
75
else
76
- $type = "signup_v_cancel";
77
78
if(isset($_REQUEST['period']))
79
$period = sanitize_text_field($_REQUEST['period']);
@@ -112,6 +112,7 @@ function pmpro_report_memberships_page()
112
elseif($period == "annual")
113
{
114
$startdate = '1960-01-01'; //all time
115
$date_function = 'YEAR';
116
}
117
@@ -119,7 +120,7 @@ function pmpro_report_memberships_page()
119
$gateway_environment = pmpro_getOption("gateway_environment");
120
121
//get data
122
- if ( $type === "signup_v_cancel" ) {
123
$sqlQuery = "SELECT $date_function(startdate) as date, COUNT(DISTINCT user_id) as signups
124
FROM $wpdb->pmpro_memberships_users WHERE startdate >= '" . $startdate . "' ";
125
@@ -157,8 +158,8 @@ function pmpro_report_memberships_page()
157
158
for($i = 1; $i <= $lastday; $i++)
159
{
160
- // Signups vs. Cancellations
161
- if ( $type === "signup_v_cancel" ) {
162
$cols[$i] = new stdClass();
163
$cols[$i]->signups = 0;
164
foreach($dates as $date)
@@ -174,8 +175,8 @@ function pmpro_report_memberships_page()
174
{
175
for($i = 1; $i < 13; $i++)
176
{
177
- // Signups vs. Cancellations
178
- if ( $type === "signup_v_cancel" ) {
179
$cols[$i] = new stdClass();
180
$cols[$i]->date = $i;
181
$cols[$i]->signups = 0;
@@ -208,16 +209,22 @@ function pmpro_report_memberships_page()
208
209
$dates = ( ! empty( $cols ) ) ? $cols : $dates;
210
211
- // Signups vs. cancellations
212
- if ( $type === "signup_v_cancel" )
213
{
214
$sqlQuery = "SELECT $date_function(mu1.modified) as date, COUNT(DISTINCT mu1.user_id) as cancellations
215
FROM $wpdb->pmpro_memberships_users mu1
216
LEFT JOIN $wpdb->pmpro_memberships_users mu2 ON mu1.user_id = mu2.user_id AND
217
mu2.modified > mu1.enddate AND
218
- DATE_ADD(mu1.modified, INTERVAL 1 DAY) > mu2.startdate
219
- WHERE mu1.status = 'inactive'
220
- AND mu2.id IS NULL
221
AND mu1.startdate >= '" . $startdate . "'
222
AND mu1.startdate < '" . $enddate . "' ";
223
@@ -248,9 +255,9 @@ function pmpro_report_memberships_page()
248
}
249
?>
250
<form id="posts-filter" method="get" action="">
251
- <h2>
252
<?php _e('Membership Stats', 'pmpro');?>
253
- </h2>
254
<ul class="subsubsub">
255
<li>
256
<?php _ex('Show', 'Dropdown label, e.g. Show Daily Revenue for January', 'pmpro')?>
@@ -260,7 +267,9 @@ function pmpro_report_memberships_page()
260
<option value="annual" <?php selected($period, "annual");?>><?php _e('Annual', 'pmpro');?></option>
261
</select>
262
<select id="type" name="type">
263
<option value="signup_v_cancel" <?php selected($type, "signup_v_cancel");?>><?php _e('Signups vs. Cancellations', 'pmpro');?></option>
264
<?php /*
265
<option value="mrr_ltv" <?php selected($type, "mrr_ltv");?>><?php _e('MRR & LTV', 'pmpro');?></option>
266
*/ ?>
@@ -292,7 +301,7 @@ function pmpro_report_memberships_page()
292
293
<input type="hidden" name="page" value="pmpro-reports" />
294
<input type="hidden" name="report" value="memberships" />
295
- <input type="submit" value="<?php _ex('Generate Report', 'Submit button value.', 'pmpro');?>" />
296
</li>
297
</ul>
298
@@ -337,14 +346,28 @@ function pmpro_report_memberships_page()
337
function drawChart() {
338
339
var data = google.visualization.arrayToDataTable([
340
<?php if ( $type === "signup_v_cancel" ) : // Signups vs. cancellations ?>
341
['<?php echo $date_function;?>', 'Signups', 'Cancellations'],
342
<?php foreach($dates as $key => $value) { ?>
343
['<?php if($period == "monthly") echo date("M", mktime(0,0,0,$value->date,2)); else if($period == "daily") echo $key; else echo $value->date;?>', <?php echo $value->signups; ?>, <?php echo $value->cancellations; ?>],
344
<?php } ?>
345
<?php endif; ?>
346
347
- <?php if ( $type === "mrr_ltv" ) : // Signups vs. cancellations ?>
348
['<?php echo $date_function;?>', 'MRR', 'LTV'],
349
<?php foreach($dates as $key => $value) { ?>
350
['<?php if($period == "monthly") echo date("M", mktime(0,0,0,$value->date,2)); else if($period == "daily") echo $key; else echo $value->date;?>', <?php echo (($mrr = $value->total / $value->months) && $mrr != 0) ? $mrr : 0; ?>, <?php echo pmpro_getLTV($period, NULL, $mrr ); ?>],
@@ -358,8 +381,9 @@ function pmpro_report_memberships_page()
358
vAxis: {color: 'green', titleTextStyle: {color: '#51a351'}},
359
};
360
361
- <?php if ( $type === "signup_v_cancel" ) : // Signups vs. cancellations ?>
362
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
363
<?php elseif ( $type === "mrr_ltv" ) : // MRR & LTV ?>
364
365
<?php
@@ -434,56 +458,75 @@ function pmpro_getSignups($period = false, $levels = 'all')
434
return $signups;
435
}
436
437
- //get cancellations
438
- function pmpro_getCancellations($period = false, $levels = 'all')
439
{
440
//check for a transient
441
$cache = get_transient( 'pmpro_report_memberships_cancellations' );
442
- if( ! empty( $cache ) && ! empty( $cache[$period] ) && ! empty( $cache[$period][$levels] ) )
443
- return $cache[$period][$levels];
444
-
445
//figure out start date
446
if( $period == 'today' )
447
- $startdate = date(' Y-m-d' );
448
elseif( $period == 'this month')
449
- $startdate = date( 'Y-m' ) . '-01';
450
elseif( $period == 'this year')
451
- $startdate = date( 'Y' ) . '-01-01';
452
else
453
- $startdate = '';
454
-
455
- $startdate_plus_one = strtotime( $startdate . + ' + 1 day', current_time("timestamp") );
456
-
457
/*
458
- build query.
459
- cancellations are marked in the memberships users table with status = 'inactive'
460
we try to ignore cancellations when the user gets a new level with 24 hours (probably an upgrade or downgrade)
461
*/
462
global $wpdb;
463
464
- //$sqlQuery = "SELECT mu1.user_id, mu2.user_id FROM $wpdb->pmpro_memberships_users mu1 LEFT JOIN $wpdb->pmpro_memberships_users mu2 ON mu1.user_id = mu2.user_id AND mu2.status = 'inactive' AND mu2.startdate > mu1.startdate";
465
$sqlQuery = "SELECT COUNT(mu1.id)
466
- FROM $wpdb->pmpro_memberships_users mu1
467
- LEFT JOIN $wpdb->pmpro_memberships_users mu2 ON mu1.user_id = mu2.user_id AND
468
- mu2.modified > mu1.enddate AND
469
- DATE_ADD(mu1.modified, INTERVAL 1 DAY) > mu2.startdate
470
- WHERE mu1.status = 'inactive'
471
- AND mu2.id IS NULL
472
- AND mu1.startdate >= '" . $startdate . "' ";
473
474
//restrict by level
475
if(!empty($levels) && $levels != 'all')
476
$sqlQuery .= "AND membership_id IN(" . $levels . ") ";
477
478
$cancellations = $wpdb->get_var($sqlQuery);
479
-
480
//save in cache
481
- if(!empty($cache) && !empty($cache[$period]) && is_array($cache[$period]))
482
- $cache[$period][$levels] = $cancellations;
483
elseif(!empty($cache))
484
- $cache[$period] = array($levels => $cancellations);
485
else
486
- $cache = array($period => array($levels => $cancellations));
487
488
set_transient("pmpro_report_memberships_cancellations", $cache, 3600*24);
489
@@ -557,15 +600,20 @@ function pmpro_getMRR($period, $levels = 'all')
557
}
558
559
//get Cancellation Rate
560
- function pmpro_getCancellationRate($period, $levels = 'all')
561
{
562
//check for a transient
563
$cache = get_transient("pmpro_report_cancellation_rate");
564
- if(!empty($cache) && !empty($cache[$period]) && !empty($cache[$period][$levels]))
565
- return $cache[$period][$levels];
566
567
$signups = pmpro_getSignups($period, $levels);
568
- $cancellations = pmpro_getCancellations($period, $levels);
569
570
if(empty($signups))
571
return false;
35
<tr>
36
<th scope="col">&nbsp;</th>
37
<th scope="col"><?php _e('Signups','pmpro'); ?></th>
38
+ <th scope="col"><?php _e('All Cancellations','pmpro'); ?></th>
39
</tr>
40
</thead>
41
<tbody>
73
if(isset($_REQUEST['type']))
74
$type = sanitize_text_field($_REQUEST['type']);
75
else
76
+ $type = "signup_v_all";
77
78
if(isset($_REQUEST['period']))
79
$period = sanitize_text_field($_REQUEST['period']);
112
elseif($period == "annual")
113
{
114
$startdate = '1960-01-01'; //all time
115
+ $enddate = strval(intval($year)+1) . '-01-01';
116
$date_function = 'YEAR';
117
}
118
120
$gateway_environment = pmpro_getOption("gateway_environment");
121
122
//get data
123
+ if ( $type === "signup_v_cancel" || $type === "signup_v_expiration" || $type === "signup_v_all") {
124
$sqlQuery = "SELECT $date_function(startdate) as date, COUNT(DISTINCT user_id) as signups
125
FROM $wpdb->pmpro_memberships_users WHERE startdate >= '" . $startdate . "' ";
126
158
159
for($i = 1; $i <= $lastday; $i++)
160
{
161
+ // Signups vs. Cancellations, Expirations, or All
162
+ if ( $type === "signup_v_cancel" || $type === "signup_v_expiration" || $type === "signup_v_all" ) {
163
$cols[$i] = new stdClass();
164
$cols[$i]->signups = 0;
165
foreach($dates as $date)
175
{
176
for($i = 1; $i < 13; $i++)
177
{
178
+ // Signups vs. Cancellations, Expirations, or All
179
+ if ( $type === "signup_v_cancel" || $type === "signup_v_expiration" || $type === "signup_v_all" ) {
180
$cols[$i] = new stdClass();
181
$cols[$i]->date = $i;
182
$cols[$i]->signups = 0;
209
210
$dates = ( ! empty( $cols ) ) ? $cols : $dates;
211
212
+ // Signups vs. all
213
+ if ( $type === "signup_v_cancel" || $type === "signup_v_expiration" || $type === "signup_v_all" )
214
{
215
$sqlQuery = "SELECT $date_function(mu1.modified) as date, COUNT(DISTINCT mu1.user_id) as cancellations
216
FROM $wpdb->pmpro_memberships_users mu1
217
LEFT JOIN $wpdb->pmpro_memberships_users mu2 ON mu1.user_id = mu2.user_id AND
218
mu2.modified > mu1.enddate AND
219
+ DATE_ADD(mu1.modified, INTERVAL 1 DAY) > mu2.startdate ";
220
+ if ( $type === "signup_v_cancel")
221
+ $sqlQuery .= "WHERE mu1.status IN('inactive','cancelled','cancelled_admin') ";
222
+ elseif($type === "signup_v_expiration")
223
+ $sqlQuery .= "WHERE mu1.status IN('expired') ";
224
+ else
225
+ $sqlQuery .= "WHERE mu1.status IN('inactive','expired','cancelled','cancelled_admin') ";
226
+
227
+ $sqlQuery .= "AND mu2.id IS NULL
228
AND mu1.startdate >= '" . $startdate . "'
229
AND mu1.startdate < '" . $enddate . "' ";
230
255
}
256
?>
257
<form id="posts-filter" method="get" action="">
258
+ <h1>
259
<?php _e('Membership Stats', 'pmpro');?>
260
+ </h1>
261
<ul class="subsubsub">
262
<li>
263
<?php _ex('Show', 'Dropdown label, e.g. Show Daily Revenue for January', 'pmpro')?>
267
<option value="annual" <?php selected($period, "annual");?>><?php _e('Annual', 'pmpro');?></option>
268
</select>
269
<select id="type" name="type">
270
+ <option value="signup_v_all" <?php selected($type, "signup_v_all");?>><?php _e('Signups vs. All Cancellations', 'pmpro');?></option>
271
<option value="signup_v_cancel" <?php selected($type, "signup_v_cancel");?>><?php _e('Signups vs. Cancellations', 'pmpro');?></option>
272
+ <option value="signup_v_expiration" <?php selected($type, "signup_v_expiration");?>><?php _e('Signups vs. Expirations', 'pmpro');?></option>
273
<?php /*
274
<option value="mrr_ltv" <?php selected($type, "mrr_ltv");?>><?php _e('MRR & LTV', 'pmpro');?></option>
275
*/ ?>
301
302
<input type="hidden" name="page" value="pmpro-reports" />
303
<input type="hidden" name="report" value="memberships" />
304
+ <input type="submit" class="button" value="<?php _ex('Generate Report', 'Submit button value.', 'pmpro');?>" />
305
</li>
306
</ul>
307
346
function drawChart() {
347
348
var data = google.visualization.arrayToDataTable([
349
+ <?php if ( $type === "signup_v_all" ) : // Signups vs. all cancellations ?>
350
+ ['<?php echo $date_function;?>', 'Signups', 'All Cancellations'],
351
+ <?php foreach($dates as $key => $value) { ?>
352
+ ['<?php if($period == "monthly") echo date("M", mktime(0,0,0,$value->date,2)); else if($period == "daily") echo $key; else echo $value->date;?>', <?php echo $value->signups; ?>, <?php echo $value->cancellations; ?>],
353
+ <?php } ?>
354
+ <?php endif; ?>
355
+
356
<?php if ( $type === "signup_v_cancel" ) : // Signups vs. cancellations ?>
357
['<?php echo $date_function;?>', 'Signups', 'Cancellations'],
358
<?php foreach($dates as $key => $value) { ?>
359
['<?php if($period == "monthly") echo date("M", mktime(0,0,0,$value->date,2)); else if($period == "daily") echo $key; else echo $value->date;?>', <?php echo $value->signups; ?>, <?php echo $value->cancellations; ?>],
360
<?php } ?>
361
<?php endif; ?>
362
+
363
+ <?php if ( $type === "signup_v_expiration" ) : // Signups vs. expirations ?>
364
+ ['<?php echo $date_function;?>', 'Signups', 'Expirations'],
365
+ <?php foreach($dates as $key => $value) { ?>
366
+ ['<?php if($period == "monthly") echo date("M", mktime(0,0,0,$value->date,2)); else if($period == "daily") echo $key; else echo $value->date;?>', <?php echo $value->signups; ?>, <?php echo $value->cancellations; ?>],
367
+ <?php } ?>
368
+ <?php endif; ?>
369
370
+ <?php if ( $type === "mrr_ltv" ) : ?>
371
['<?php echo $date_function;?>', 'MRR', 'LTV'],
372
<?php foreach($dates as $key => $value) { ?>
373
['<?php if($period == "monthly") echo date("M", mktime(0,0,0,$value->date,2)); else if($period == "daily") echo $key; else echo $value->date;?>', <?php echo (($mrr = $value->total / $value->months) && $mrr != 0) ? $mrr : 0; ?>, <?php echo pmpro_getLTV($period, NULL, $mrr ); ?>],
381
vAxis: {color: 'green', titleTextStyle: {color: '#51a351'}},
382
};
383
384
+ <?php if ( $type === "signup_v_cancel" || $type === "signup_v_expiration" || $type === "signup_v_all" ) : // Signups vs. cancellations ?>
385
var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
386
+
387
<?php elseif ( $type === "mrr_ltv" ) : // MRR & LTV ?>
388
389
<?php
458
return $signups;
459
}
460
461
+ //get cancellations by status
462
+ function pmpro_getCancellations($period = false, $levels = 'all', $status = array('inactive','expired','cancelled','cancelled_admin') )
463
{
464
+ //make sure status is an array
465
+ if(!is_array($status))
466
+ $status = array($status);
467
+
468
//check for a transient
469
$cache = get_transient( 'pmpro_report_memberships_cancellations' );
470
+ $hash = md5($period . $levels . implode(',', $status));
471
+ if( ! empty( $cache ) && ! empty( $cache[$hash] ) )
472
+ return $cache[$hash];
473
+
474
//figure out start date
475
+ $now = current_time('timestamp');
476
+ $year = date("Y", $now);
477
if( $period == 'today' )
478
+ {
479
+ $startdate = date('Y-m-d', $now) . " 00:00:00";
480
+ $enddate = date('Y-m-d', $now) . " 23:59:59";
481
+ }
482
elseif( $period == 'this month')
483
+ {
484
+ $startdate = date( 'Y-m', $now ) . '-01 00:00:00';
485
+ $enddate = date( 'Y-m', $now ) . '-32 00:00:00';
486
+ }
487
elseif( $period == 'this year')
488
+ {
489
+ $startdate = date( 'Y', $now ) . '-01-01 00:00:00';
490
+ $enddate = date( 'Y', $now ) . '-12-32 00:00:00';
491
+ }
492
else
493
+ {
494
+ //all time
495
+ $startdate = '1960-01-01'; //all time
496
+ $enddate = strval(intval($year)+1) . '-01-01';
497
+ }
498
+
499
/*
500
+ build query.
501
+ cancellations are marked in the memberships users table with status 'inactive', 'expired', 'cancelled', 'cancelled_admin'
502
we try to ignore cancellations when the user gets a new level with 24 hours (probably an upgrade or downgrade)
503
*/
504
global $wpdb;
505
506
$sqlQuery = "SELECT COUNT(mu1.id)
507
+ FROM $wpdb->pmpro_memberships_users mu1
508
+ LEFT JOIN $wpdb->pmpro_memberships_users mu2 ON mu1.user_id = mu2.user_id AND
509
+ mu2.modified > mu1.enddate AND
510
+ DATE_ADD(mu1.modified, INTERVAL 1 DAY) > mu2.startdate
511
+ WHERE mu1.status IN('" . implode("','", $status) . "')
512
+ AND mu2.id IS NULL
513
+ AND mu1.enddate >= '" . $startdate . "'
514
+ AND mu1.enddate <= '" . $enddate . "'
515
+ ";
516
517
//restrict by level
518
if(!empty($levels) && $levels != 'all')
519
$sqlQuery .= "AND membership_id IN(" . $levels . ") ";
520
521
$cancellations = $wpdb->get_var($sqlQuery);
522
+
523
//save in cache
524
+ if(!empty($cache) && !empty($cache[$hash]))
525
+ $cache[$hash] = $cancellations;
526
elseif(!empty($cache))
527
+ $cache[$hash] = $cancellations;
528
else
529
+ $cache = array($hash => $cancellations);
530
531
set_transient("pmpro_report_memberships_cancellations", $cache, 3600*24);
532
600
}
601
602
//get Cancellation Rate
603
+ function pmpro_getCancellationRate($period, $levels = 'all', $status = NULL)
604
{
605
+ //make sure status is an array
606
+ if(!is_array($status))
607
+ $status = array($status);
608
+
609
//check for a transient
610
$cache = get_transient("pmpro_report_cancellation_rate");
611
+ $hash = md5($period . $levels . implode('',$status));
612
+ if(!empty($cache) && !empty($cache[$hash]))
613
+ return $cache[$hash];
614
615
$signups = pmpro_getSignups($period, $levels);
616
+ $cancellations = pmpro_getCancellations($period, $levels, $status);
617
618
if(empty($signups))
619
return false;
adminpages/reports/sales.php CHANGED
@@ -194,9 +194,9 @@ function pmpro_report_sales_page()
194
}
195
?>
196
<form id="posts-filter" method="get" action="">
197
- <h2>
198
<?php _e('Sales and Revenue', 'pmpro');?>
199
- </h2>
200
201
<div class="tablenav top">
202
<?php _ex('Show', 'Dropdown label, e.g. Show Daily Revenue for January', 'pmpro')?>
194
}
195
?>
196
<form id="posts-filter" method="get" action="">
197
+ <h1>
198
<?php _e('Sales and Revenue', 'pmpro');?>
199
+ </h1>
200
201
<div class="tablenav top">
202
<?php _ex('Show', 'Dropdown label, e.g. Show Daily Revenue for January', 'pmpro')?>
classes/gateways/class.pmprogateway_braintree.php CHANGED
@@ -234,6 +234,7 @@
234
<input type='hidden' name='AccountNumber' id='BraintreeAccountNumber' />
235
<script type="text/javascript" src="https://js.braintreegateway.com/v1/braintree.js"></script>
236
<script type="text/javascript">
237
//set up braintree encryption
238
var braintree = Braintree.create('<?php echo pmpro_getOption("braintree_encryptionkey"); ?>');
239
braintree.onSubmitEncryptForm('pmpro_form');
@@ -257,6 +258,7 @@
257
pmpro_updateBraintreeAccountNumber();
258
});
259
pmpro_updateBraintreeAccountNumber();
260
</script>
261
<?php
262
}
234
<input type='hidden' name='AccountNumber' id='BraintreeAccountNumber' />
235
<script type="text/javascript" src="https://js.braintreegateway.com/v1/braintree.js"></script>
236
<script type="text/javascript">
237
+ <!--
238
//set up braintree encryption
239
var braintree = Braintree.create('<?php echo pmpro_getOption("braintree_encryptionkey"); ?>');
240
braintree.onSubmitEncryptForm('pmpro_form');
258
pmpro_updateBraintreeAccountNumber();
259
});
260
pmpro_updateBraintreeAccountNumber();
261
+ -->
262
</script>
263
<?php
264
}
classes/gateways/class.pmprogateway_payflowpro.php CHANGED
@@ -581,51 +581,31 @@
581
}
582
583
$version = urlencode('4');
584
-
585
- // setting the curl parameters.
586
- $ch = curl_init();
587
- curl_setopt($ch, CURLOPT_URL, $API_Endpoint);
588
- curl_setopt($ch, CURLOPT_VERBOSE, 1);
589
-
590
- // turning off the server and peer verification(TrustManager Concept).
591
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
592
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
593
-
594
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
595
- curl_setopt($ch, CURLOPT_POST, 1);
596
-
597
- curl_setopt($ch, CURLOPT_USERAGENT, PMPRO_USER_AGENT); //set user agent
598
599
// NVPRequest for submitting to server
600
$nvpreq = "TRXTYPE=" . $methodName_ . "&TENDER=C&PARTNER=" . $PARTNER . "&VENDOR=" . $VENDOR . "&USER=" . $USER . "&PWD=" . $PWD . "&VERBOSITY=medium" . "&BUTTONSOURCE=" . urlencode(PAYPAL_BN_CODE) . $nvpStr_;
601
602
- //$nvpreq = "TRXTYPE=" . urlencode($methodName_) . "&TENDER=C&PARTNER=" . urlencode($PARTNER) . "&VENDOR=" . urlencode($VENDOR) . "&USER=" . urlencode($USER) . "&PWD=" . urlencode($PWD) . "&VERBOSITY=medium" . $nvpStr_;
603
-
604
- // setting the nvpreq as POST FIELD to curl
605
- curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
606
-
607
- // getting response from server
608
- $httpResponse = curl_exec($ch);
609
-
610
- if(empty($httpResponse)) {
611
- exit("$methodName_ failed: ".curl_error($ch).'('.curl_errno($ch).')');
612
- }
613
-
614
- // Extract the RefundTransaction response details
615
- $httpResponseAr = explode("&", $httpResponse);
616
617
- $httpParsedResponseAr = array();
618
- foreach ($httpResponseAr as $i => $value) {
619
- $tmpAr = explode("=", $value);
620
- if(sizeof($tmpAr) > 1) {
621
- $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];
622
}
623
}
624
625
- if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('RESULT', $httpParsedResponseAr)) {
626
- exit("Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.");
627
- }
628
-
629
return $httpParsedResponseAr;
630
}
631
}
581
}
582
583
$version = urlencode('4');
584
585
// NVPRequest for submitting to server
586
$nvpreq = "TRXTYPE=" . $methodName_ . "&TENDER=C&PARTNER=" . $PARTNER . "&VENDOR=" . $VENDOR . "&USER=" . $USER . "&PWD=" . $PWD . "&VERBOSITY=medium" . "&BUTTONSOURCE=" . urlencode(PAYPAL_BN_CODE) . $nvpStr_;
587
588
+ //post to PayPal
589
+ $response = wp_remote_post( $API_Endpoint, array(
590
+ 'sslverify' => FALSE,
591
+ 'body' => $nvpreq
592
+ )
593
+ );
594
595
+ if ( is_wp_error( $response ) ) {
596
+ $error_message = $response->get_error_message();
597
+ die( "methodName_ failed: $error_message" );
598
+ } else {
599
+ //extract the response details
600
+ $httpParsedResponseAr = array();
601
+ parse_str(wp_remote_retrieve_body($response), $httpParsedResponseAr);
602
+
603
+ //check for valid response
604
+ if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('RESULT', $httpParsedResponseAr)) {
605
+ exit("Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.");
606
}
607
}
608
609
return $httpParsedResponseAr;
610
}
611
}
classes/gateways/class.pmprogateway_paypal.php CHANGED
@@ -198,6 +198,7 @@
198
{
199
?>
200
<script>
201
//choosing payment method
202
jQuery('input[name=gateway]').click(function() {
203
if(jQuery(this).val() == 'paypal')
@@ -220,6 +221,7 @@
220
jQuery('a.pmpro_radio').click(function() {
221
jQuery(this).prev().click();
222
});
223
</script>
224
<?php
225
}
@@ -630,49 +632,31 @@
630
}
631
632
$version = urlencode('72.0');
633
-
634
- // setting the curl parameters.
635
- $ch = curl_init();
636
- curl_setopt($ch, CURLOPT_URL, $API_Endpoint);
637
- curl_setopt($ch, CURLOPT_VERBOSE, 1);
638
-
639
- // turning off the server and peer verification(TrustManager Concept).
640
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
641
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
642
-
643
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
644
- curl_setopt($ch, CURLOPT_POST, 1);
645
-
646
- curl_setopt($ch, CURLOPT_USERAGENT, PMPRO_USER_AGENT); //set user agent
647
648
// NVPRequest for submitting to server
649
$nvpreq = "METHOD=" . urlencode($methodName_) . "&VERSION=" . urlencode($version) . "&PWD=" . urlencode($API_Password) . "&USER=" . urlencode($API_UserName) . "&SIGNATURE=" . urlencode($API_Signature) . "&BUTTONSOURCE=" . urlencode(PAYPAL_BN_CODE) . $nvpStr_;
650
651
- // setting the nvpreq as POST FIELD to curl
652
- curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
653
-
654
- // getting response from server
655
- $httpResponse = curl_exec($ch);
656
-
657
- if(empty($httpResponse)) {
658
- exit("$methodName_ failed: ".curl_error($ch).'('.curl_errno($ch).')');
659
- }
660
-
661
- // Extract the RefundTransaction response details
662
- $httpResponseAr = explode("&", $httpResponse);
663
664
- $httpParsedResponseAr = array();
665
- foreach ($httpResponseAr as $i => $value) {
666
- $tmpAr = explode("=", $value);
667
- if(sizeof($tmpAr) > 1) {
668
- $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];
669
}
670
}
671
672
- if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
673
- exit("Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.");
674
- }
675
-
676
return $httpParsedResponseAr;
677
}
678
}
198
{
199
?>
200
<script>
201
+ <!--
202
//choosing payment method
203
jQuery('input[name=gateway]').click(function() {
204
if(jQuery(this).val() == 'paypal')
221
jQuery('a.pmpro_radio').click(function() {
222
jQuery(this).prev().click();
223
});
224
+ -->
225
</script>
226
<?php
227
}
632
}
633
634
$version = urlencode('72.0');
635
636
// NVPRequest for submitting to server
637
$nvpreq = "METHOD=" . urlencode($methodName_) . "&VERSION=" . urlencode($version) . "&PWD=" . urlencode($API_Password) . "&USER=" . urlencode($API_UserName) . "&SIGNATURE=" . urlencode($API_Signature) . "&BUTTONSOURCE=" . urlencode(PAYPAL_BN_CODE) . $nvpStr_;
638
639
+ //post to PayPal
640
+ $response = wp_remote_post( $API_Endpoint, array(
641
+ 'sslverify' => FALSE,
642
+ 'body' => $nvpreq
643
+ )
644
+ );
645
646
+ if ( is_wp_error( $response ) ) {
647
+ $error_message = $response->get_error_message();
648
+ die( "methodName_ failed: $error_message" );
649
+ } else {
650
+ //extract the response details
651
+ $httpParsedResponseAr = array();
652
+ parse_str(wp_remote_retrieve_body($response), $httpParsedResponseAr);
653
+
654
+ //check for valid response
655
+ if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
656
+ exit("Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.");
657
}
658
}
659
660
return $httpParsedResponseAr;
661
}
662
}
classes/gateways/class.pmprogateway_paypalexpress.php CHANGED
@@ -432,6 +432,7 @@
432
{
433
?>
434
<script>
435
//choosing payment method
436
jQuery('input[name=gateway]').click(function() {
437
if(jQuery(this).val() == 'paypal')
@@ -454,6 +455,7 @@
454
jQuery('a.pmpro_radio').click(function() {
455
jQuery(this).prev().click();
456
});
457
</script>
458
<?php
459
}
@@ -842,48 +844,30 @@
842
843
$version = urlencode('72.0');
844
845
- // setting the curl parameters.
846
- $ch = curl_init();
847
- curl_setopt($ch, CURLOPT_URL, $API_Endpoint);
848
- curl_setopt($ch, CURLOPT_VERBOSE, 1);
849
-
850
- // turning off the server and peer verification(TrustManager Concept).
851
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
852
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
853
-
854
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
855
- curl_setopt($ch, CURLOPT_POST, 1);
856
-
857
- curl_setopt($ch, CURLOPT_USERAGENT, PMPRO_USER_AGENT); //set user agent
858
-
859
- // NVPRequest for submitting to server
860
$nvpreq = "METHOD=" . urlencode($methodName_) . "&VERSION=" . urlencode($version) . "&PWD=" . urlencode($API_Password) . "&USER=" . urlencode($API_UserName) . "&SIGNATURE=" . urlencode($API_Signature) . "&BUTTONSOURCE=" . urlencode(PAYPAL_BN_CODE) . $nvpStr_;
861
862
- // setting the nvpreq as POST FIELD to curl
863
- curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
864
-
865
- // getting response from server
866
- $httpResponse = curl_exec($ch);
867
-
868
- if(!$httpResponse) {
869
- exit("$methodName_ failed: ".curl_error($ch).'('.curl_errno($ch).')');
870
- }
871
-
872
- // Extract the RefundTransaction response details
873
- $httpResponseAr = explode("&", $httpResponse);
874
875
- $httpParsedResponseAr = array();
876
- foreach ($httpResponseAr as $i => $value) {
877
- $tmpAr = explode("=", $value);
878
- if(sizeof($tmpAr) > 1) {
879
- $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];
880
}
881
}
882
883
- if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
884
- exit("Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.");
885
- }
886
-
887
return $httpParsedResponseAr;
888
}
889
}
432
{
433
?>
434
<script>
435
+ <!--
436
//choosing payment method
437
jQuery('input[name=gateway]').click(function() {
438
if(jQuery(this).val() == 'paypal')
455
jQuery('a.pmpro_radio').click(function() {
456
jQuery(this).prev().click();
457
});
458
+ -->
459
</script>
460
<?php
461
}
844
845
$version = urlencode('72.0');
846
847
+ //NVPRequest for submitting to server
848
$nvpreq = "METHOD=" . urlencode($methodName_) . "&VERSION=" . urlencode($version) . "&PWD=" . urlencode($API_Password) . "&USER=" . urlencode($API_UserName) . "&SIGNATURE=" . urlencode($API_Signature) . "&BUTTONSOURCE=" . urlencode(PAYPAL_BN_CODE) . $nvpStr_;
849
850
+ //post to PayPal
851
+ $response = wp_remote_post( $API_Endpoint, array(
852
+ 'sslverify' => FALSE,
853
+ 'body' => $nvpreq
854
+ )
855
+ );
856
857
+ if ( is_wp_error( $response ) ) {
858
+ $error_message = $response->get_error_message();
859
+ die( "methodName_ failed: $error_message" );
860
+ } else {
861
+ //extract the response details
862
+ $httpParsedResponseAr = array();
863
+ parse_str(wp_remote_retrieve_body($response), $httpParsedResponseAr);
864
+
865
+ //check for valid response
866
+ if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
867
+ exit("Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.");
868
}
869
}
870
871
return $httpParsedResponseAr;
872
}
873
}
classes/gateways/class.pmprogateway_paypalstandard.php CHANGED
@@ -492,48 +492,30 @@
492
493
$version = urlencode('72.0');
494
495
- // setting the curl parameters.
496
- $ch = curl_init();
497
- curl_setopt($ch, CURLOPT_URL, $API_Endpoint);
498
- curl_setopt($ch, CURLOPT_VERBOSE, 1);
499
-
500
- // turning off the server and peer verification(TrustManager Concept).
501
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
502
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
503
-
504
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
505
- curl_setopt($ch, CURLOPT_POST, 1);
506
-
507
- curl_setopt($ch, CURLOPT_USERAGENT, PMPRO_USER_AGENT); //set user agent
508
-
509
// NVPRequest for submitting to server
510
$nvpreq = "METHOD=" . urlencode($methodName_) . "&VERSION=" . urlencode($version) . "&PWD=" . urlencode($API_Password) . "&USER=" . urlencode($API_UserName) . "&SIGNATURE=" . urlencode($API_Signature) . "&bn=" . urlencode(PAYPAL_BN_CODE) . $nvpStr_;
511
512
- // setting the nvpreq as POST FIELD to curl
513
- curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
514
-
515
- // getting response from server
516
- $httpResponse = curl_exec($ch);
517
-
518
- if(!$httpResponse) {
519
- exit("$methodName_ failed: ".curl_error($ch).'('.curl_errno($ch).')');
520
- }
521
-
522
- // Extract the RefundTransaction response details
523
- $httpResponseAr = explode("&", $httpResponse);
524
-
525
- $httpParsedResponseAr = array();
526
- foreach ($httpResponseAr as $i => $value) {
527
- $tmpAr = explode("=", $value);
528
- if(sizeof($tmpAr) > 1) {
529
- $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];
530
}
531
}
532
533
- if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
534
- exit("Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.");
535
- }
536
-
537
return $httpParsedResponseAr;
538
}
539
}
492
493
$version = urlencode('72.0');
494
495
// NVPRequest for submitting to server
496
$nvpreq = "METHOD=" . urlencode($methodName_) . "&VERSION=" . urlencode($version) . "&PWD=" . urlencode($API_Password) . "&USER=" . urlencode($API_UserName) . "&SIGNATURE=" . urlencode($API_Signature) . "&bn=" . urlencode(PAYPAL_BN_CODE) . $nvpStr_;
497
498
+ //post to PayPal
499
+ $response = wp_remote_post( $API_Endpoint, array(
500
+ 'sslverify' => FALSE,
501
+ 'body' => $nvpreq
502
+ )
503
+ );
504
+
505
+ if ( is_wp_error( $response ) ) {
506
+ $error_message = $response->get_error_message();
507
+ die( "methodName_ failed: $error_message" );
508
+ } else {
509
+ //extract the response details
510
+ $httpParsedResponseAr = array();
511
+ parse_str(wp_remote_retrieve_body($response), $httpParsedResponseAr);
512
+
513
+ //check for valid response
514
+ if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
515
+ exit("Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.");
516
}
517
}
518
519
return $httpParsedResponseAr;
520
}
521
}
classes/gateways/class.pmprogateway_stripe.php CHANGED
@@ -218,6 +218,7 @@
218
global $pmpro_gateway, $pmpro_level, $pmpro_stripe_lite;
219
?>
220
<script type="text/javascript">
221
// this identifies your website in the createToken call below
222
Stripe.setPublishableKey('<?php echo pmpro_getOption("stripe_publishablekey"); ?>');
223
@@ -302,6 +303,7 @@
302
form$.get(0).submit();
303
}
304
}
305
</script>
306
<?php
307
}
@@ -434,6 +436,7 @@
434
?>
435
<input type="hidden" id="CardType" name="CardType" value="<?php echo esc_attr($CardType);?>" />
436
<script>
437
jQuery(document).ready(function() {
438
jQuery('#AccountNumber').validateCreditCard(function(result) {
439
var cardtypenames = {
@@ -455,6 +458,7 @@
455
jQuery('#CardType').val('Unknown Card Type');
456
});
457
});
458
</script>
459
<?php
460
}
@@ -655,6 +659,7 @@
655
</tr>
656
</table>
657
<script>
658
jQuery(document).ready(function() {
659
//function to update dropdowns/etc based on when field
660
function updateSubscriptionUpdateFields(when)
@@ -707,6 +712,7 @@
707
}
708
addUpdateEvents();
709
});
710
</script>
711
<?php
712
}
218
global $pmpro_gateway, $pmpro_level, $pmpro_stripe_lite;
219
?>
220
<script type="text/javascript">
221
+ <!--
222
// this identifies your website in the createToken call below
223
Stripe.setPublishableKey('<?php echo pmpro_getOption("stripe_publishablekey"); ?>');
224
303
form$.get(0).submit();
304
}
305
}
306
+ -->
307
</script>
308
<?php
309
}
436
?>
437
<input type="hidden" id="CardType" name="CardType" value="<?php echo esc_attr($CardType);?>" />
438
<script>
439
+ <!--
440
jQuery(document).ready(function() {
441
jQuery('#AccountNumber').validateCreditCard(function(result) {
442
var cardtypenames = {
458
jQuery('#CardType').val('Unknown Card Type');
459
});
460
});
461
+ -->
462
</script>
463
<?php
464
}
659
</tr>
660
</table>
661
<script>
662
+ <!--
663
jQuery(document).ready(function() {
664
//function to update dropdowns/etc based on when field
665
function updateSubscriptionUpdateFields(when)
712
}
713
addUpdateEvents();
714
});
715
+ -->
716
</script>
717
<?php
718
}
includes/functions.php CHANGED
@@ -178,7 +178,7 @@ function pmpro_isLevelRecurring(&$level)
178
179
function pmpro_isLevelTrial(&$level)
180
{
181
- if($level->trial_limit > 0)
182
{
183
return true;
184
}
@@ -188,7 +188,7 @@ function pmpro_isLevelTrial(&$level)
188
189
function pmpro_isLevelExpiring(&$level)
190
{
191
- if($level->expiration_number > 0)
192
return true;
193
else
194
return false;
@@ -224,7 +224,7 @@ function pmpro_isLevelExpiringSoon( &$level ) {
224
//are we within the days til expiration?
225
$now = current_time('timestamp');
226
227
- if( $now + ($days*3600*24) < $level->enddate )
228
$r = true;
229
else
230
$r = false;
178
179
function pmpro_isLevelTrial(&$level)
180
{
181
+ if(!empty($level) && !empty($level->trial_limit) && $level->trial_limit > 0)
182
{
183
return true;
184
}
188
189
function pmpro_isLevelExpiring(&$level)
190
{
191
+ if(!empty($level) && !empty($level->expiration_number) && $level->expiration_number > 0)
192
return true;
193
else
194
return false;
224
//are we within the days til expiration?
225
$now = current_time('timestamp');
226
227
+ if( $now + ($days*3600*24) >= $level->enddate )
228
$r = true;
229
else
230
$r = false;
includes/https.php CHANGED
@@ -38,7 +38,7 @@ add_filter('home_url', 'pmpro_https_filter');
38
function pmpro_besecure_set()
39
{
40
global $besecure;
41
- if(force_ssl_admin() || force_ssl_login() || is_ssl())
42
$besecure = true;
43
44
$besecure = apply_filters("pmpro_besecure", $besecure);
@@ -59,10 +59,6 @@ function pmpro_besecure()
59
if(!$besecure && force_ssl_admin() && (is_admin() || pmpro_is_login_page()))
60
$besecure = true;
61
62
- //if forcing ssl on login, be secure on the login page
63
- if(!$besecure && force_ssl_login() && pmpro_is_login_page())
64
- $besecure = true;
65
-
66
$besecure = apply_filters("pmpro_besecure", $besecure);
67
68
$use_ssl = pmpro_getOption("use_ssl");
38
function pmpro_besecure_set()
39
{
40
global $besecure;
41
+ if(force_ssl_admin() || is_ssl())
42
$besecure = true;
43
44
$besecure = apply_filters("pmpro_besecure", $besecure);
59
if(!$besecure && force_ssl_admin() && (is_admin() || pmpro_is_login_page()))
60
$besecure = true;
61
62
$besecure = apply_filters("pmpro_besecure", $besecure);
63
64
$use_ssl = pmpro_getOption("use_ssl");
includes/login.php CHANGED
@@ -32,10 +32,6 @@ function pmpro_login_redirect($redirect_to, $request, $user)
32
//not logging in (login form) so return what was given
33
}
34
35
- //let's strip the https if force_ssl_login is set, but force_ssl_admin is not
36
- if(force_ssl_login() && !force_ssl_admin())
37
- $redirect_to = str_replace("https:", "http:", $redirect_to);
38
-
39
return apply_filters("pmpro_login_redirect_url", $redirect_to, $request, $user);
40
}
41
add_filter('login_redirect','pmpro_login_redirect', 10, 3);
32
//not logging in (login form) so return what was given
33
}
34
35
return apply_filters("pmpro_login_redirect_url", $redirect_to, $request, $user);
36
}
37
add_filter('login_redirect','pmpro_login_redirect', 10, 3);
pages/billing.php CHANGED
@@ -310,6 +310,7 @@
310
<input type='hidden' name='AccountNumber' id='BraintreeAccountNumber' />
311
<script type="text/javascript" src="https://js.braintreegateway.com/v1/braintree.js"></script>
312
<script type="text/javascript">
313
//setup braintree encryption
314
var braintree = Braintree.create('<?php echo pmpro_getOption("braintree_encryptionkey"); ?>');
315
braintree.onSubmitEncryptForm('pmpro_form');
@@ -333,6 +334,7 @@
333
pmpro_updateBraintreeAccountNumber();
334
});
335
pmpro_updateBraintreeAccountNumber();
336
</script>
337
<?php } ?>
338
@@ -344,12 +346,14 @@
344
345
</form>
346
<script>
347
// Find ALL <form> tags on your page
348
jQuery('form').submit(function(){
349
// On submit disable its submit button
350
jQuery('input[type=submit]', this).attr('disabled', 'disabled');
351
jQuery('input[type=image]', this).attr('disabled', 'disabled');
352
});
353
</script>
354
<?php } ?>
355
<?php } else { ?>
310
<input type='hidden' name='AccountNumber' id='BraintreeAccountNumber' />
311
<script type="text/javascript" src="https://js.braintreegateway.com/v1/braintree.js"></script>
312
<script type="text/javascript">
313
+ <!--
314
//setup braintree encryption
315
var braintree = Braintree.create('<?php echo pmpro_getOption("braintree_encryptionkey"); ?>');
316
braintree.onSubmitEncryptForm('pmpro_form');
334
pmpro_updateBraintreeAccountNumber();
335
});
336
pmpro_updateBraintreeAccountNumber();
337
+ -->
338
</script>
339
<?php } ?>
340
346
347
</form>
348
<script>
349
+ <!--
350
// Find ALL <form> tags on your page
351
jQuery('form').submit(function(){
352
// On submit disable its submit button
353
jQuery('input[type=submit]', this).attr('disabled', 'disabled');
354
jQuery('input[type=image]', this).attr('disabled', 'disabled');
355
});
356
+ -->
357
</script>
358
<?php } ?>
359
<?php } else { ?>
pages/checkout.php CHANGED
@@ -95,6 +95,7 @@
95
96
<?php if($pmpro_show_discount_code) { ?>
97
<script>
98
//update discount code link to show field at top of form
99
jQuery('#other_discount_code_a').attr('href', 'javascript:void(0);');
100
jQuery('#other_discount_code_a').click(function() {
@@ -158,6 +159,7 @@
158
});
159
}
160
});
161
</script>
162
<?php } ?>
163
@@ -536,6 +538,7 @@
536
?>
537
<input type="hidden" id="CardType" name="CardType" value="<?php echo esc_attr($CardType);?>" />
538
<script>
539
jQuery(document).ready(function() {
540
jQuery('#AccountNumber').validateCreditCard(function(result) {
541
var cardtypenames = {
@@ -557,6 +560,7 @@
557
jQuery('#CardType').val('Unknown Card Type');
558
});
559
});
560
</script>
561
<?php
562
}
@@ -622,6 +626,7 @@
622
</table>
623
<?php } ?>
624
<script>
625
//checking a discount code
626
jQuery('#discount_code_button').click(function() {
627
var code = jQuery('#discount_code').val();
@@ -661,6 +666,7 @@
661
});
662
}
663
});
664
</script>
665
666
<?php
@@ -799,6 +805,8 @@
799
-->
800
</script>
801
<script>
802
- //add javascriptok hidden field to checkout
803
- jQuery("input[name=submit-checkout]").after('<input type="hidden" name="javascriptok" value="1" />');
804
</script>
95
96
<?php if($pmpro_show_discount_code) { ?>
97
<script>
98
+ <!--
99
//update discount code link to show field at top of form
100
jQuery('#other_discount_code_a').attr('href', 'javascript:void(0);');
101
jQuery('#other_discount_code_a').click(function() {
159
});
160
}
161
});
162
+ -->
163
</script>
164
<?php } ?>
165
538
?>
539
<input type="hidden" id="CardType" name="CardType" value="<?php echo esc_attr($CardType);?>" />
540
<script>
541
+ <!--
542
jQuery(document).ready(function() {
543
jQuery('#AccountNumber').validateCreditCard(function(result) {
544
var cardtypenames = {
560
jQuery('#CardType').val('Unknown Card Type');
561
});
562
});
563
+ -->
564
</script>
565
<?php
566
}
626
</table>
627
<?php } ?>
628
<script>
629
+ <!--
630
//checking a discount code
631
jQuery('#discount_code_button').click(function() {
632
var code = jQuery('#discount_code').val();
666
});
667
}
668
});
669
+ -->
670
</script>
671
672
<?php
805
-->
806
</script>
807
<script>
808
+ <!--
809
+ //add javascriptok hidden field to checkout
810
+ jQuery("input[name=submit-checkout]").after('<input type="hidden" name="javascriptok" value="1" />');
811
+ -->
812
</script>
paid-memberships-pro.php CHANGED
@@ -3,7 +3,7 @@
3
Plugin Name: Paid Memberships Pro
4
Plugin URI: http://www.paidmembershipspro.com
5
Description: Plugin to Handle Memberships
6
- Version: 1.8.6.7
7
Author: Stranger Studios
8
Author URI: http://www.strangerstudios.com
9
*/
@@ -13,7 +13,7 @@ Author URI: http://www.strangerstudios.com
13
*/
14
15
//version constant
16
- define("PMPRO_VERSION", "1.8.6.7");
17
define("PMPRO_USER_AGENT", "Paid Memberships Pro v" . PMPRO_VERSION . "; " . site_url());
18
19
//if the session has been started yet, start it (ignore if running from command line)
3
Plugin Name: Paid Memberships Pro
4
Plugin URI: http://www.paidmembershipspro.com
5
Description: Plugin to Handle Memberships
6
+ Version: 1.8.6.8
7
Author: Stranger Studios
8
Author URI: http://www.strangerstudios.com
9
*/
13
*/
14
15
//version constant
16
+ define("PMPRO_VERSION", "1.8.6.8");
17
define("PMPRO_USER_AGENT", "Paid Memberships Pro v" . PMPRO_VERSION . "; " . site_url());
18
19
//if the session has been started yet, start it (ignore if running from command line)
preheaders/checkout.php CHANGED
@@ -598,7 +598,7 @@
598
599
//setting some cookies
600
wp_set_current_user($user_id, $username);
601
- wp_set_auth_cookie($user_id, true, apply_filters('pmpro_checkout_signon_secure', (force_ssl_login() || force_ssl_admin())));
602
}
603
}
604
else
598
599
//setting some cookies
600
wp_set_current_user($user_id, $username);
601
+ wp_set_auth_cookie($user_id, true, apply_filters('pmpro_checkout_signon_secure', force_ssl_admin()));
602
}
603
}
604
else
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
Contributors: strangerstudios
3
Tags: memberships, membership, authorize.net, ecommerce, paypal, stripe, braintree, restrict access, restrict content, directory site, payflow
4
Requires at least: 3.5
5
- Tested up to: 4.3.1
6
- Stable tag: 1.8.6.7
7
8
A revenue-generating machine for membership sites. Unlimited levels with recurring payment, protected content and member management.
9
@@ -115,6 +115,12 @@ Not sure? You can find out by doing a bit a research.
115
[View All Screenshots](http://www.paidmembershipspro.com/features/screenshots/)
116
117
== Changelog ==
118
= 1.8.6.7 =
119
* BUG: Fixed issue with prices over $1000 when using TwoCheckout. (Thanks, BigBradBrown and others.)
120
* ENHANCEMENT: Removed the API Private Key option from 2Checkout setup since we don't actually use that in the API.
2
Contributors: strangerstudios
3
Tags: memberships, membership, authorize.net, ecommerce, paypal, stripe, braintree, restrict access, restrict content, directory site, payflow
4
Requires at least: 3.5
5
+ Tested up to: 4.4
6
+ Stable tag: 1.8.6.8
7
8
A revenue-generating machine for membership sites. Unlimited levels with recurring payment, protected content and member management.
9
115
[View All Screenshots](http://www.paidmembershipspro.com/features/screenshots/)
116
117
== Changelog ==
118
+ = 1.8.6.8 =
119
+ * BUG/ENHANCEMENT: Adding <!-- comment markup --> to inline JavaScript to avoid issues where themes/plugins were adding formatting into the JavaScript code. (Thanks, Isabelle Couillard)
120
+ * BUG: Removed calls to force_ssl_login(), which has been deprecated in WP 4.4+. We are using force_ssl_admin() instead.
121
+ * BUG: Fixed issue in pmpro_isLevelExpiringSoon() which controls when "renew" links are shown to users. (Thanks, Thomas Sjolshagen)
122
+ * ENHANCEMENT: Updated PayPal gateway classes to use the WP HTTP API instead of CURL directly.
123
+
124
= 1.8.6.7 =
125
* BUG: Fixed issue with prices over $1000 when using TwoCheckout. (Thanks, BigBradBrown and others.)
126
* ENHANCEMENT: Removed the API Private Key option from 2Checkout setup since we don't actually use that in the API.