Quick Page/Post Redirect Plugin - Version 5.2.3

Version Description

  • **Security fixes
Download this release

Release Info

Developer anadnet
Plugin Icon 128x128 Quick Page/Post Redirect Plugin
Version 5.2.3
Comparing to
See all releases

Code changes from version 5.2.2 to 5.2.3

Files changed (2) hide show
  1. page_post_redirect_plugin.php +72 -63
  2. readme.txt +6 -3
page_post_redirect_plugin.php CHANGED
@@ -6,7 +6,7 @@ Description: Redirect Pages, Posts or Custom Post Types to another location quic
6
  Author: anadnet
7
  Author URI: http://www.anadnet.com/
8
  Donate link:
9
- Version: 5.2.2
10
  Text Domain: quick-pagepost-redirect-plugin
11
  Domain Path: /lang
12
  License: GPLv2 or later
@@ -71,7 +71,7 @@ class quick_page_post_reds {
71
  public $pprptypes_ok;
72
 
73
  function __construct() {
74
- $this->ppr_curr_version = '5.2.2';
75
  $this->ppr_nofollow = array();
76
  $this->ppr_newindow = array();
77
  $this->ppr_url = array();
@@ -336,7 +336,7 @@ class quick_page_post_reds {
336
  if ( !current_user_can( 'manage_options' ) ) exit('error');
337
 
338
  check_ajax_referer( 'qppr_ajax_verify', 'security', true );
339
- $request = isset($_POST['request']) && esc_url($_POST['request']) != '' ? esc_url($_POST['request']) : '';
340
  $curRedirects = get_option( 'quickppr_redirects', array() );
341
  $curMeta = get_option( 'quickppr_redirects_meta', array() );
342
  if( isset( $curRedirects[ $request ] ) && isset( $curMeta[ $request ] ) ){
@@ -357,12 +357,12 @@ class quick_page_post_reds {
357
  check_ajax_referer( 'qppr_ajax_verify', 'security', true );
358
 
359
  $protocols = apply_filters('qppr_allowed_protocols',array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp'));
360
- $request = isset($_POST['request']) && trim($_POST['request']) != '' ? esc_url(str_replace(' ','%20',trim($_POST['request'])), null, 'appip') : '';
361
- $requestOrig = isset($_POST['original']) && trim($_POST['original']) != '' ? esc_url(str_replace(' ','%20',trim($_POST['original'])), null, 'appip') : '';
362
- $destination = isset($_POST['destination']) && trim($_POST['destination']) != '' ? esc_url(str_replace(' ','%20',trim($_POST['destination'])), null, 'appip') : '';
363
  $newWin = isset($_POST['newwin']) && (int) trim($_POST['newwin']) == 1 ? 1 : 0;
364
  $noFollow = isset($_POST['nofollow']) && (int) trim($_POST['nofollow']) == 1 ? 1 : 0;
365
- $updateRow = isset($_POST['row']) && $_POST['row'] != '' ? (int) str_replace('rowpprdel-','',$_POST['row']) : -1;
366
  $curRedirects = get_option('quickppr_redirects', array());
367
  $curMeta = get_option('quickppr_redirects_meta', array());
368
  $rkeys = array_keys($curRedirects);
@@ -458,8 +458,8 @@ class quick_page_post_reds {
458
  $protocols = apply_filters( 'qppr_allowed_protocols', array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp'));
459
 
460
  for($i = 0; $i < sizeof($data['request']); ++$i) {
461
- $request = esc_url(str_replace(' ','%20',trim($data['request'][$i])), null, 'appip');
462
- $destination = esc_url(str_replace(' ','%20',trim($data['destination'][$i])), null, 'appip');
463
  $newwin = isset($data['newwindow'][$i]) && (int)(trim($data['newwindow'][$i])) == 1 ? 1 : 0;
464
  $nofoll = isset($data['nofollow'][$i]) && (int)(trim($data['nofollow'][$i])) == 1 ? 1 : 0;
465
  if( strpos($request,'/',0) !== 0 && !$this->qppr_strposa($request,$protocols)){
@@ -561,9 +561,9 @@ class quick_page_post_reds {
561
  $qppr_nofoll = get_post_meta( $post_id , '_pprredirect_relnofollow', true );
562
  $rediricon = $qppr_newwin != '' ? '<span class="dashicons dashicons-external" title="New Window"></span>' : '<span class="dashicons dashicons-arrow-right-alt" title="Redirects to"></span>';
563
  if($qppr_active == '1'){
564
- echo '<div class="qpprfont-on" title="on">('.$qppr_type.') ' . $rediricon . ' <code>'.$qppr_url.'</code></div>';
565
  }else{
566
- echo '<div class="qpprfont-not" title="off">('.$qppr_type.') ' . $rediricon . ' <code>'.$qppr_url.'</code></div>';
567
  }
568
  }
569
  break;
@@ -771,17 +771,17 @@ class quick_page_post_reds {
771
  $linkcontent[] = '<li class="faq-item"><a name="faq-'.$aqr.'"></a><h3 class="qa"><span class="qa">Q. </span>'.esc_html( $item->get_title() ).'</h3><div class="qa-content"><span class="qa answer">A. </span>'.$item->get_content().'</div><div class="toplink"><a href="#faq-top">top &uarr;</a></li>';
772
  endforeach;
773
  }
774
- echo '<a name="faq-top"></a><h2>'.__('Table of Contents','quick-pagepost-redirect-plugin').'</h2>';
775
- echo '<ol class="qppr-faq-links">';
776
- echo implode( "\n", $linkfaq );
777
- echo '</ol>';
778
- echo '<h2>' . __( 'Questions/Answers', 'quick-pagepost-redirect-plugin' ) . '</h2>';
779
- echo '<ul class="qppr-faq-answers">';
780
- echo implode( "\n", $linkcontent );
781
- echo '</ul>';
782
- echo '
783
- </div>
784
- </div>';
785
  }
786
 
787
  function ppr_summary_page() {
@@ -792,7 +792,7 @@ class quick_page_post_reds {
792
  <br/>
793
  <?php if($this->updatemsg!=''){?>
794
  <div class="updated settings-error" id="setting-error-settings_updated">
795
- <p><strong><?php echo $this->updatemsg;?></strong></p>
796
  </div>
797
  <?php } ?>
798
  <?php $this->updatemsg ='';?>
@@ -850,7 +850,7 @@ class quick_page_post_reds {
850
  $tempQTReportArray = array('url'=>$key,'destinaition'=>$redir);
851
  $qr_nofollow = isset($this->quickppr_redirectsmeta[$key]['nofollow']) && $this->quickppr_redirectsmeta[$key]['nofollow'] != '' ? $this->quickppr_redirectsmeta[$key]['nofollow'] : '0';
852
  $qr_newwindow = isset($this->quickppr_redirectsmeta[$key]['newwindow']) && $this->quickppr_redirectsmeta[$key]['newwindow'] != '' ? $this->quickppr_redirectsmeta[$key]['newwindow'] : '0';
853
- $qrtredURL = (int) $this->pproverride_rewrite == 1 && $this->pproverride_URL != '' ? '<span class="ppr-rrlor">'.$this->pproverride_URL.'</span>' : $redir;
854
  $qrtactive = (int) $this->pproverride_active == 1 ? '<span class="ppr-acor">0</span>' : 1;
855
  $qr_nofollow = (int) $this->pproverride_nofollow == 1 ? '<span class="ppr-nfor">1</span>' : $qr_nofollow;
856
  $qr_newwindow = (int) $this->pproverride_newwin == 1 ? '<span class="ppr-nwor">1</span>' : $qr_newwindow;
@@ -905,7 +905,7 @@ class quick_page_post_reds {
905
  $tnofoll = (int) $this->pproverride_nofollow == 1 ? '<span class="ppr-nfor">1</span>' : $tnofoll;
906
  $tnewwin = (int) $this->pproverride_newwin == 1 ? '<span class="ppr-nwor">1</span>' : $tnewwin;
907
  $trewrit = (int) $this->pproverride_rewrite == 1 ? '<span class="ppr-rrlor">1</span>' : $trewrit;
908
- $tredURL = (int) $this->pproverride_rewrite == 1 && $this->pproverride_URL != '' ? '<span class="ppr-rrlor">' . $this->pproverride_URL . '</span>' : $tredURL;
909
  $toriurl = isset($reportItem['origurl']) ? $reportItem['origurl'] : get_permalink($tpostid);
910
  $pclass = $pclass == 'offrow' ? 'onrow' : 'offrow';
911
  if($tredURL == 'http://www.example.com' || $tredURL == '<span class="ppr-rrlor">http://www.example.com</span>'){$tredURL='<strong>N/A - redirection will not occur</strong>';}
@@ -937,8 +937,8 @@ class quick_page_post_reds {
937
 
938
  function ppr_import_export_page(){
939
  if(isset($_GET['update'])){
940
- if($_GET['update']=='4'){$this->updatemsg ='' . __( 'Quick Redirects Imported & Replaced.', 'quick-pagepost-redirect-plugin' ) . '';}
941
- if($_GET['update']=='5'){$this->updatemsg ='' . __( 'Quick Redirects Imported & Added to Existing Redirects.', 'quick-pagepost-redirect-plugin' ) . '';}
942
  }
943
  echo '<div class="wrap">';
944
  echo ' <h2>' . __( 'Import/Export Redirects', 'quick-pagepost-redirect-plugin' ) . '</h2>';
@@ -1028,20 +1028,20 @@ class quick_page_post_reds {
1028
  }
1029
 
1030
  function ppr_settings_page() {
1031
- if( isset( $_GET['update'] ) && $_GET['update'] != '' ){
1032
- if( $_GET['update'] == '3' ){ $this->updatemsg = __( 'All Quick Redirects deleted from database.', 'quick-pagepost-redirect-plugin' );}
1033
- if( $_GET['update'] == '2' ){ $this->updatemsg = __( 'All Individual Redirects deleted from database.', 'quick-pagepost-redirect-plugin' );}
1034
- if( $_GET['update'] == '4' ){ $this->updatemsg = __( 'Quick Redirects Imported & Replaced.', 'quick-pagepost-redirect-plugin' );}
1035
- if( $_GET['update'] == '5' ){ $this->updatemsg = __( 'Quick Redirects Imported & Added to Existing Redirects.', 'quick-pagepost-redirect-plugin' );}
1036
- if( $_GET['update'] == '6' ){ $this->updatemsg = __( 'All Redirects and Settings deleted from database', 'quick-pagepost-redirect-plugin' );}
1037
- if( $_GET['update'] == '0' ){ $this->updatemsg = __( 'There was an problem with your last request. Please reload the page and try again.', 'quick-pagepost-redirect-plugin' );}
1038
  }
1039
  ?>
1040
  <div class="wrap" style="position:relative;">
1041
  <h2><?php echo __( 'Quick Page Post Redirect Options', 'quick-pagepost-redirect-plugin' );?></h2>
1042
  <?php if($this->updatemsg != ''){?>
1043
  <div class="updated" id="setting-error-settings_updated">
1044
- <p><strong><?php echo $this->updatemsg;?></strong></p>
1045
  </div>
1046
  <?php } ?>
1047
  <?php $this->updatemsg = '';//reset message;?>
@@ -1088,7 +1088,7 @@ class quick_page_post_reds {
1088
  }else{
1089
  $ptypecheck = '';
1090
  }
1091
- $ptypeHTML .= '<div class="qppr-ptype"><input class="qppr-ptypecb" type="checkbox" name="ppr_qpprptypeok[]" value="'.$ptype.'"'.$ptypecheck.' /> <div class="ppr-type-name">'.$ptype.'</div></div>';
1092
  }
1093
  }
1094
  $ptypeHTML .= '</div>';
@@ -1192,7 +1192,7 @@ class quick_page_post_reds {
1192
  <tr>
1193
  <td><code>/about.htm</code></td>
1194
  <td>&nbsp;&raquo;&nbsp;</td>
1195
- <td><code>'.$this->homelink.'/about/</code></td>
1196
  </tr>
1197
  <tr>
1198
  <td><code>/directory/landing/</code></td>
@@ -1202,7 +1202,7 @@ class quick_page_post_reds {
1202
  <tr>
1203
  <td><code>'. str_replace("http://", "https://",$this->homelink).'/contact-us/</code></td>
1204
  <td>&nbsp;&raquo;&nbsp;</td>
1205
- <td><code>'.$this->homelink.'/contact-us-new/</code></td>
1206
  </tr>
1207
  </table>
1208
 
@@ -1290,7 +1290,7 @@ class quick_page_post_reds {
1290
  <div class="wrap">
1291
  <h2><?php echo __( 'Quick Redirects (301 Redirects)', 'quick-pagepost-redirect-plugin' );?></h2>
1292
  <?php if($this->updatemsg != ''){?>
1293
- <div class="updated settings-error" id="setting-error-settings_updated"><p><strong><?php echo $this->updatemsg;?></strong></p></div>
1294
  <?php } ?>
1295
  <?php $this->updatemsg ='';//reset message;?>
1296
  <?php
@@ -1546,7 +1546,7 @@ class quick_page_post_reds {
1546
  $this->ppr_all_redir_array = $this->get_main_array();
1547
  $this->pprptypes_ok = get_option( 'ppr_qpprptypeok', array() );
1548
  if( current_user_can( 'manage_options' ) ){
1549
- if ( isset( $_GET['action'] ) && $_GET['action'] == 'export-quick-redirects-file' ) {
1550
  $newQPPR_Array = array();
1551
  check_admin_referer( 'export-redirects-qppr' );
1552
  $type = isset( $_GET['qppr-file-type'] ) && sanitize_text_field( $_GET['qppr-file-type'] ) == 'encoded' ? 'encoded' : 'pipe' ; // can be 'encoded' or 'pipe';
@@ -1588,7 +1588,7 @@ class quick_page_post_reds {
1588
  wp_die( __( 'An error occured during the file upload. Please fix your server configuration and retry.', 'quick-pagepost-redirect-plugin' ) , __( 'SERVER ERROR - Could Not Load', 'quick-pagepost-redirect-plugin' ), array( 'response' => '200', 'back_link' => '1' ) );
1589
  exit;
1590
  } else {
1591
- $config_file = file_get_contents( $_FILES['qppr_file']['tmp_name'] );
1592
  if ( substr($config_file, 0, strlen('QUICKPAGEPOSTREDIRECT')) !== 'QUICKPAGEPOSTREDIRECT' ) {
1593
  if(strpos($config_file,'|') !== false){
1594
  $delim = '|';
@@ -1800,7 +1800,7 @@ class quick_page_post_reds {
1800
  echo '<label for="pprredirect_rewritelink" style="padding:2px 0;"><input type="checkbox" name="pprredirect_rewritelink" id="pprredirect_rewritelink" value="1" '. checked('1',get_post_meta($post->ID,'_pprredirect_rewritelink',true),0).'>&nbsp;' . __( '<strong>Show</strong> Redirect URL in link.', 'quick-pagepost-redirect-plugin' ) . ' <span class="qppr_meta_help_wrap"><span class="qppr_meta_help_icon dashicons dashicons-editor-help"></span><span class="qppr_meta_help">' . __( 'To increase effectivness, select "Use jQuery" in the options. This will only change the URL in the link <strong>NOT</strong> the URL in the Address bar.', 'quick-pagepost-redirect-plugin' ) . '</span></span></label><br /><br />';
1801
  //echo '<label for="pprredirect_casesensitive" style="padding:2px 0;"><input type="checkbox" name="pprredirect_casesensitive" id="pprredirect_casesensitive" value="1" '. checked('1',get_post_meta($post->ID,'_pprredirect_casesensitive',true),0).'>&nbsp;Make the Redirect Case Insensitive.</label><br /><br />';
1802
  echo '<label for="pprredirect_url"><b>' . __( 'Redirect / Destination URL:', 'quick-pagepost-redirect-plugin' ) . '</b></label><br />';
1803
- echo '<input type="text" style="width:75%;margin-top:2px;margin-bottom:2px;" name="pprredirect_url" value="'.$pprredirecturl.'" /><span class="qppr_meta_help_wrap"><span class="qppr_meta_help_icon dashicons dashicons-editor-help"></span><span class="qppr_meta_help"><br />' . __( '(i.e., <strong>http://example.com</strong> or <strong>/somepage/</strong> or <strong>p=15</strong> or <strong>155</strong>. Use <b>FULL URL</b> <i>including</i> <strong>http://</strong> for all external <i>and</i> meta redirects.)', 'quick-pagepost-redirect-plugin' ) . '</span></span><br /><br />';
1804
  echo '<label for="pprredirect_type"><b>' . __( 'Type of Redirect:', 'quick-pagepost-redirect-plugin' ) . '</b></label><br />';
1805
 
1806
  switch($pprredirecttype):
@@ -1867,13 +1867,22 @@ class quick_page_post_reds {
1867
  if( isset( $_POST['pprredirect_active'] ) || isset( $_POST['pprredirect_url'] ) || isset( $_POST['pprredirect_type'] ) || isset( $_POST['pprredirect_newwindow'] ) || isset($_POST['pprredirect_relnofollow']) || isset($_POST['pprredirect_meta_secs'])):
1868
  $protocols = apply_filters( 'qppr_allowed_protocols', array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp'));
1869
  // find & save the form data & put it into an array
1870
- $my_meta_data['_pprredirect_active'] = isset($_REQUEST['pprredirect_active']) ? sanitize_meta( '_pprredirect_active', $this->isOne_none(intval( $_REQUEST['pprredirect_active'])), 'post' ) : '';
1871
- $my_meta_data['_pprredirect_newwindow'] = isset($_REQUEST['pprredirect_newwindow']) ? sanitize_meta( '_pprredirect_newwindow', $this->isOne_none( $_REQUEST['pprredirect_newwindow']), 'post' ) : '';
1872
- $my_meta_data['_pprredirect_relnofollow'] = isset($_REQUEST['pprredirect_relnofollow']) ? sanitize_meta( '_pprredirect_relnofollow', $this->isOne_none(intval( $_REQUEST['pprredirect_relnofollow'])), 'post' ) : '';
1873
- $my_meta_data['_pprredirect_type'] = isset($_REQUEST['pprredirect_type']) ? sanitize_meta( '_pprredirect_type', sanitize_text_field( $_REQUEST['pprredirect_type'] ), 'post' ) : '';
1874
- $my_meta_data['_pprredirect_rewritelink'] = isset($_REQUEST['pprredirect_rewritelink']) ? sanitize_meta( '_pprredirect_rewritelink', $this->isOne_none(intval( $_REQUEST['pprredirect_rewritelink'])), 'post' ) : '';
1875
- $my_meta_data['_pprredirect_url'] = isset($_REQUEST['pprredirect_url']) ? esc_url_raw( $_REQUEST['pprredirect_url'], $protocols ) : '';
1876
- $my_meta_data['_pprredirect_meta_secs'] = isset($_REQUEST['pprredirect_meta_secs']) && $_REQUEST['pprredirect_meta_secs'] != '' ? (int) $_REQUEST['pprredirect_meta_secs'] : '';
 
 
 
 
 
 
 
 
 
1877
 
1878
  $info = $this->appip_parseURI($my_meta_data['_pprredirect_url']);
1879
  //$my_meta_data['_pprredirect_url'] = esc_url_raw($info['url']);
@@ -2085,7 +2094,7 @@ class quick_page_post_reds {
2085
 
2086
  function redirect(){
2087
  //bypass for testing.
2088
- if(isset($_GET['action']) && $_GET['action'] == 'no-redirect' )
2089
  return;
2090
  // Quick Redirects Redirect.
2091
  // Read the list of redirects and if the current page is found in the list, send the visitor on her way
@@ -2113,7 +2122,7 @@ class quick_page_post_reds {
2113
  $getQAddrNeedle = $this->pproverride_casesensitive ? str_replace( $getQAddress, '', $getAddrNeedle ) : strtolower(str_replace( $getQAddress, '', $getAddrNeedle ));
2114
  $finalQS = str_replace( '&amp;','&', $finalQS);
2115
  $finalQS = $this->pproverride_casesensitive ? $finalQS : strtolower( $finalQS ); //added 5.1.4 to fix URL needle being converted to lower, but not Query (as it never matches unless user enters lower)
2116
- $finalQS = apply_filters( 'appip_filter_testing_finalQS', $finalQS, $needle, $haystack); // added 5.1.4 to allow filtering of QS data prior to matching.
2117
  $index = false;
2118
 
2119
  /* These are the URL matching checks to see if the request should be redirected.
@@ -2125,35 +2134,35 @@ class quick_page_post_reds {
2125
  //check if QS data might be part of the redirect URL and not supposed to be added back.
2126
  $index = $needle . $finalQS;
2127
  $finalQS = ''; //remove it
2128
- }elseif( array_key_exists( urldecode($needle . $finalQS), $haystack ) ){
2129
  //check if QS data might be part of the encoded redirect URL and not supposed to be added back.
2130
  $index = $needle . $finalQS;
2131
  $finalQS = ''; //remove it
2132
  }elseif(array_key_exists( $needle, $haystack)){
2133
  //standard straight forward check for needle (request URL)
2134
  $index = $needle;
2135
- }elseif(array_key_exists(urldecode($needle), $haystack)){
2136
  //standard straight forward check for URL encoded needle (request URL)
2137
- $index = urldecode($needle);
2138
  }elseif(array_key_exists( $getAddrNeedle, $haystack)){
2139
  //Checks of the needle (request URL) might be using a different protocol than site home URL
2140
  $index = $getAddrNeedle;
2141
- }elseif(array_key_exists( urldecode( $getAddrNeedle ), $haystack)){
2142
  //Checks of an encoded needle (request URL) might be using a different protocol than site home URL
2143
- $index = urldecode( $getAddrNeedle );
2144
  }elseif( strpos( $needle, 'https' ) !== false ){
2145
  //Checks of the encoded needle (request URL) might be http but the redirect is set up as http
2146
  if(array_key_exists(str_replace('https','http',$needle), $haystack))
2147
  $index = str_replace('https','http',$needle); //unencoded version
2148
- elseif(array_key_exists(str_replace('https','http',urldecode($needle)), $haystack))
2149
- $index = str_replace('https','http',urldecode($needle)); //encoded version
2150
  }elseif(strpos($needle,'/') === false) {
2151
  //Checks of the needle (request URL) might not have beginning and ending / but the redirect is set up with them
2152
  if( array_key_exists( '/' . $needle . '/', $haystack ) )
2153
  $index = '/'.$needle.'/';
2154
- }elseif( array_key_exists( urldecode($getQAddrNeedle), $haystack ) ){
2155
  //Checks if encoded needle (request URL) doesn't contain a sub directory in the URL, but the site Root is set to include it.
2156
- $index = urldecode( $getQAddrNeedle );
2157
  }elseif( array_key_exists( $getQAddrNeedle, $haystack ) ){
2158
  //Checks if needle (request URL) doesn't contain a sub directory in the URL, but the site Root is set to include it.
2159
  $index = $getQAddrNeedle;
@@ -2201,7 +2210,7 @@ class quick_page_post_reds {
2201
 
2202
  function ppr_do_redirect( $var1='var1', $var2 = 'var2'){
2203
  //bypass for testing.
2204
- if(isset($_GET['action']) && $_GET['action'] == 'no-redirect' )
2205
  return;
2206
  // Individual Redirects Redirect.
2207
  // Read the list of redirects and if the current page is found in the list, send the visitor on her way
@@ -2338,7 +2347,7 @@ class quick_page_post_reds {
2338
  ?>
2339
  <div class="wrap" style="position:relative;">
2340
  <h2><?php echo __( 'Meta Redirect Settings', 'quick-pagepost-redirect-plugin' );?></h2>
2341
- <?php if ( ! empty( $_GET['settings-updated'] ) ) : ?><div id="message" class="updated notice is-dismissible"><p><?php echo __( 'Settings Updated', 'quick-pagepost-redirect-plugin' );?></p></div><?php endif; ?>
2342
  <p><?php echo __( 'This section is for updating options for redirects that use the "meta refresh" funcitonality for redirecting.', 'quick-pagepost-redirect-plugin' );?></p>
2343
  <p><?php echo __( 'Using the setting below, you can add elements or a message to the page that is loaded before tht redirect, or just allow the page to load as normal until the redirect reaches the number of seconds you have set below.', 'quick-pagepost-redirect-plugin' );?></p>
2344
  <form method="post" action="options.php" class="qpprform">
@@ -2681,4 +2690,4 @@ function qppr_sanitize_pprredirect_type_meta( $meta_value ) {
2681
 
2682
  return sanitize_text_field( $meta_value );
2683
  }
2684
- add_filter( 'sanitize_post_meta__pprredirect_type', 'qppr_sanitize_pprredirect_type_meta', 10, 1 );
6
  Author: anadnet
7
  Author URI: http://www.anadnet.com/
8
  Donate link:
9
+ Version: 5.2.3
10
  Text Domain: quick-pagepost-redirect-plugin
11
  Domain Path: /lang
12
  License: GPLv2 or later
71
  public $pprptypes_ok;
72
 
73
  function __construct() {
74
+ $this->ppr_curr_version = '5.2.3';
75
  $this->ppr_nofollow = array();
76
  $this->ppr_newindow = array();
77
  $this->ppr_url = array();
336
  if ( !current_user_can( 'manage_options' ) ) exit('error');
337
 
338
  check_ajax_referer( 'qppr_ajax_verify', 'security', true );
339
+ $request = isset($_POST['request']) && sanitize_url($_POST['request']) != '' ? sanitize_url($_POST['request']) : '';
340
  $curRedirects = get_option( 'quickppr_redirects', array() );
341
  $curMeta = get_option( 'quickppr_redirects_meta', array() );
342
  if( isset( $curRedirects[ $request ] ) && isset( $curMeta[ $request ] ) ){
357
  check_ajax_referer( 'qppr_ajax_verify', 'security', true );
358
 
359
  $protocols = apply_filters('qppr_allowed_protocols',array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp'));
360
+ $request = isset($_POST['request']) && sanitize_url($_POST['request']) != '' ? esc_url_raw(str_replace(' ','%20', sanitize_url($_POST['request'])), null, 'appip') : '';
361
+ $requestOrig = isset($_POST['original']) && sanitize_text_field($_POST['original']) != '' ? esc_url_raw(str_replace(' ','%20', sanitize_text_field($_POST['original'])), null, 'appip') : '';
362
+ $destination = isset($_POST['destination']) && sanitize_text_field($_POST['destination']) != '' ? esc_url_raw(str_replace(' ','%20',sanitize_text_field($_POST['destination'])), null, 'appip') : '';
363
  $newWin = isset($_POST['newwin']) && (int) trim($_POST['newwin']) == 1 ? 1 : 0;
364
  $noFollow = isset($_POST['nofollow']) && (int) trim($_POST['nofollow']) == 1 ? 1 : 0;
365
+ $updateRow = isset($_POST['row']) && sanitize_text_field($_POST['row']) != '' ? (int) str_replace('rowpprdel-','',sanitize_text_field($_POST['row'])) : -1;
366
  $curRedirects = get_option('quickppr_redirects', array());
367
  $curMeta = get_option('quickppr_redirects_meta', array());
368
  $rkeys = array_keys($curRedirects);
458
  $protocols = apply_filters( 'qppr_allowed_protocols', array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp'));
459
 
460
  for($i = 0; $i < sizeof($data['request']); ++$i) {
461
+ $request = esc_url($data['request'][$i], null, 'appip');
462
+ $destination = esc_url($data['destination'][$i], null, 'appip');
463
  $newwin = isset($data['newwindow'][$i]) && (int)(trim($data['newwindow'][$i])) == 1 ? 1 : 0;
464
  $nofoll = isset($data['nofollow'][$i]) && (int)(trim($data['nofollow'][$i])) == 1 ? 1 : 0;
465
  if( strpos($request,'/',0) !== 0 && !$this->qppr_strposa($request,$protocols)){
561
  $qppr_nofoll = get_post_meta( $post_id , '_pprredirect_relnofollow', true );
562
  $rediricon = $qppr_newwin != '' ? '<span class="dashicons dashicons-external" title="New Window"></span>' : '<span class="dashicons dashicons-arrow-right-alt" title="Redirects to"></span>';
563
  if($qppr_active == '1'){
564
+ echo esc_html('<div class="qpprfont-on" title="on">('.$qppr_type.') ' . $rediricon . ' <code>'.$qppr_url.'</code></div>');
565
  }else{
566
+ echo esc_html('<div class="qpprfont-not" title="off">('.$qppr_type.') ' . $rediricon . ' <code>'.$qppr_url.'</code></div>');
567
  }
568
  }
569
  break;
771
  $linkcontent[] = '<li class="faq-item"><a name="faq-'.$aqr.'"></a><h3 class="qa"><span class="qa">Q. </span>'.esc_html( $item->get_title() ).'</h3><div class="qa-content"><span class="qa answer">A. </span>'.$item->get_content().'</div><div class="toplink"><a href="#faq-top">top &uarr;</a></li>';
772
  endforeach;
773
  }
774
+ $output = '<a name="faq-top"></a><h2>'.__('Table of Contents','quick-pagepost-redirect-plugin').'</h2>';
775
+ $output .= '<ol class="qppr-faq-links">';
776
+ $output .= implode( "\n", $linkfaq );
777
+ $output .= '</ol>';
778
+ $output .= '<h2>' . __( 'Questions/Answers', 'quick-pagepost-redirect-plugin' ) . '</h2>';
779
+ $output .= '<ul class="qppr-faq-answers">';
780
+ $output .= implode( "\n", $linkcontent );
781
+ $output .= '</ul>';
782
+ $output .= '</div></div>';
783
+
784
+ echo $output;
785
  }
786
 
787
  function ppr_summary_page() {
792
  <br/>
793
  <?php if($this->updatemsg!=''){?>
794
  <div class="updated settings-error" id="setting-error-settings_updated">
795
+ <p><strong><?php echo esc_html($this->updatemsg); ?></strong></p>
796
  </div>
797
  <?php } ?>
798
  <?php $this->updatemsg ='';?>
850
  $tempQTReportArray = array('url'=>$key,'destinaition'=>$redir);
851
  $qr_nofollow = isset($this->quickppr_redirectsmeta[$key]['nofollow']) && $this->quickppr_redirectsmeta[$key]['nofollow'] != '' ? $this->quickppr_redirectsmeta[$key]['nofollow'] : '0';
852
  $qr_newwindow = isset($this->quickppr_redirectsmeta[$key]['newwindow']) && $this->quickppr_redirectsmeta[$key]['newwindow'] != '' ? $this->quickppr_redirectsmeta[$key]['newwindow'] : '0';
853
+ $qrtredURL = (int) $this->pproverride_rewrite == 1 && $this->pproverride_URL != '' ? '<span class="ppr-rrlor">'.esc_url($this->pproverride_URL).'</span>' : $redir;
854
  $qrtactive = (int) $this->pproverride_active == 1 ? '<span class="ppr-acor">0</span>' : 1;
855
  $qr_nofollow = (int) $this->pproverride_nofollow == 1 ? '<span class="ppr-nfor">1</span>' : $qr_nofollow;
856
  $qr_newwindow = (int) $this->pproverride_newwin == 1 ? '<span class="ppr-nwor">1</span>' : $qr_newwindow;
905
  $tnofoll = (int) $this->pproverride_nofollow == 1 ? '<span class="ppr-nfor">1</span>' : $tnofoll;
906
  $tnewwin = (int) $this->pproverride_newwin == 1 ? '<span class="ppr-nwor">1</span>' : $tnewwin;
907
  $trewrit = (int) $this->pproverride_rewrite == 1 ? '<span class="ppr-rrlor">1</span>' : $trewrit;
908
+ $tredURL = (int) $this->pproverride_rewrite == 1 && $this->pproverride_URL != '' ? '<span class="ppr-rrlor">' . esc_url($this->pproverride_URL) . '</span>' : $tredURL;
909
  $toriurl = isset($reportItem['origurl']) ? $reportItem['origurl'] : get_permalink($tpostid);
910
  $pclass = $pclass == 'offrow' ? 'onrow' : 'offrow';
911
  if($tredURL == 'http://www.example.com' || $tredURL == '<span class="ppr-rrlor">http://www.example.com</span>'){$tredURL='<strong>N/A - redirection will not occur</strong>';}
937
 
938
  function ppr_import_export_page(){
939
  if(isset($_GET['update'])){
940
+ if(sanitize_key($_GET['update'])=='4'){$this->updatemsg ='' . __( 'Quick Redirects Imported & Replaced.', 'quick-pagepost-redirect-plugin' ) . '';}
941
+ if(sanitize_key($_GET['update'])=='5'){$this->updatemsg ='' . __( 'Quick Redirects Imported & Added to Existing Redirects.', 'quick-pagepost-redirect-plugin' ) . '';}
942
  }
943
  echo '<div class="wrap">';
944
  echo ' <h2>' . __( 'Import/Export Redirects', 'quick-pagepost-redirect-plugin' ) . '</h2>';
1028
  }
1029
 
1030
  function ppr_settings_page() {
1031
+ if( isset( $_GET['update'] ) && sanitize_key($_GET['update']) != '' ){
1032
+ if( sanitize_key($_GET['update']) == '3' ){ $this->updatemsg = __( 'All Quick Redirects deleted from database.', 'quick-pagepost-redirect-plugin' );}
1033
+ if( sanitize_key($_GET['update']) == '2' ){ $this->updatemsg = __( 'All Individual Redirects deleted from database.', 'quick-pagepost-redirect-plugin' );}
1034
+ if( sanitize_key($_GET['update']) == '4' ){ $this->updatemsg = __( 'Quick Redirects Imported & Replaced.', 'quick-pagepost-redirect-plugin' );}
1035
+ if( sanitize_key($_GET['update']) == '5' ){ $this->updatemsg = __( 'Quick Redirects Imported & Added to Existing Redirects.', 'quick-pagepost-redirect-plugin' );}
1036
+ if( sanitize_key($_GET['update']) == '6' ){ $this->updatemsg = __( 'All Redirects and Settings deleted from database', 'quick-pagepost-redirect-plugin' );}
1037
+ if( sanitize_key($_GET['update']) == '0' ){ $this->updatemsg = __( 'There was an problem with your last request. Please reload the page and try again.', 'quick-pagepost-redirect-plugin' );}
1038
  }
1039
  ?>
1040
  <div class="wrap" style="position:relative;">
1041
  <h2><?php echo __( 'Quick Page Post Redirect Options', 'quick-pagepost-redirect-plugin' );?></h2>
1042
  <?php if($this->updatemsg != ''){?>
1043
  <div class="updated" id="setting-error-settings_updated">
1044
+ <p><strong><?php echo esc_html($this->updatemsg);?></strong></p>
1045
  </div>
1046
  <?php } ?>
1047
  <?php $this->updatemsg = '';//reset message;?>
1088
  }else{
1089
  $ptypecheck = '';
1090
  }
1091
+ $ptypeHTML .= '<div class="qppr-ptype"><input class="qppr-ptypecb" type="checkbox" name="ppr_qpprptypeok[]" value="'.esc_attr($ptype).'"'.esc_attr($ptypecheck).' /> <div class="ppr-type-name">'.esc_html($ptype).'</div></div>';
1092
  }
1093
  }
1094
  $ptypeHTML .= '</div>';
1192
  <tr>
1193
  <td><code>/about.htm</code></td>
1194
  <td>&nbsp;&raquo;&nbsp;</td>
1195
+ <td><code>'.esc_url($this->homelink).'/about/</code></td>
1196
  </tr>
1197
  <tr>
1198
  <td><code>/directory/landing/</code></td>
1202
  <tr>
1203
  <td><code>'. str_replace("http://", "https://",$this->homelink).'/contact-us/</code></td>
1204
  <td>&nbsp;&raquo;&nbsp;</td>
1205
+ <td><code>'.esc_url($this->homelink).'/contact-us-new/</code></td>
1206
  </tr>
1207
  </table>
1208
 
1290
  <div class="wrap">
1291
  <h2><?php echo __( 'Quick Redirects (301 Redirects)', 'quick-pagepost-redirect-plugin' );?></h2>
1292
  <?php if($this->updatemsg != ''){?>
1293
+ <div class="updated settings-error" id="setting-error-settings_updated"><p><strong><?php echo esc_html($this->updatemsg);?></strong></p></div>
1294
  <?php } ?>
1295
  <?php $this->updatemsg ='';//reset message;?>
1296
  <?php
1546
  $this->ppr_all_redir_array = $this->get_main_array();
1547
  $this->pprptypes_ok = get_option( 'ppr_qpprptypeok', array() );
1548
  if( current_user_can( 'manage_options' ) ){
1549
+ if ( isset( $_GET['action'] ) && sanitize_text_field($_GET['action']) == 'export-quick-redirects-file' ) {
1550
  $newQPPR_Array = array();
1551
  check_admin_referer( 'export-redirects-qppr' );
1552
  $type = isset( $_GET['qppr-file-type'] ) && sanitize_text_field( $_GET['qppr-file-type'] ) == 'encoded' ? 'encoded' : 'pipe' ; // can be 'encoded' or 'pipe';
1588
  wp_die( __( 'An error occured during the file upload. Please fix your server configuration and retry.', 'quick-pagepost-redirect-plugin' ) , __( 'SERVER ERROR - Could Not Load', 'quick-pagepost-redirect-plugin' ), array( 'response' => '200', 'back_link' => '1' ) );
1589
  exit;
1590
  } else {
1591
+ $config_file = file_get_contents( sanitize_file_name($_FILES['qppr_file']['tmp_name']) );
1592
  if ( substr($config_file, 0, strlen('QUICKPAGEPOSTREDIRECT')) !== 'QUICKPAGEPOSTREDIRECT' ) {
1593
  if(strpos($config_file,'|') !== false){
1594
  $delim = '|';
1800
  echo '<label for="pprredirect_rewritelink" style="padding:2px 0;"><input type="checkbox" name="pprredirect_rewritelink" id="pprredirect_rewritelink" value="1" '. checked('1',get_post_meta($post->ID,'_pprredirect_rewritelink',true),0).'>&nbsp;' . __( '<strong>Show</strong> Redirect URL in link.', 'quick-pagepost-redirect-plugin' ) . ' <span class="qppr_meta_help_wrap"><span class="qppr_meta_help_icon dashicons dashicons-editor-help"></span><span class="qppr_meta_help">' . __( 'To increase effectivness, select "Use jQuery" in the options. This will only change the URL in the link <strong>NOT</strong> the URL in the Address bar.', 'quick-pagepost-redirect-plugin' ) . '</span></span></label><br /><br />';
1801
  //echo '<label for="pprredirect_casesensitive" style="padding:2px 0;"><input type="checkbox" name="pprredirect_casesensitive" id="pprredirect_casesensitive" value="1" '. checked('1',get_post_meta($post->ID,'_pprredirect_casesensitive',true),0).'>&nbsp;Make the Redirect Case Insensitive.</label><br /><br />';
1802
  echo '<label for="pprredirect_url"><b>' . __( 'Redirect / Destination URL:', 'quick-pagepost-redirect-plugin' ) . '</b></label><br />';
1803
+ echo '<input type="text" style="width:75%;margin-top:2px;margin-bottom:2px;" name="pprredirect_url" value="'.esc_url($pprredirecturl).'" /><span class="qppr_meta_help_wrap"><span class="qppr_meta_help_icon dashicons dashicons-editor-help"></span><span class="qppr_meta_help"><br />' . __( '(i.e., <strong>http://example.com</strong> or <strong>/somepage/</strong> or <strong>p=15</strong> or <strong>155</strong>. Use <b>FULL URL</b> <i>including</i> <strong>http://</strong> for all external <i>and</i> meta redirects.)', 'quick-pagepost-redirect-plugin' ) . '</span></span><br /><br />';
1804
  echo '<label for="pprredirect_type"><b>' . __( 'Type of Redirect:', 'quick-pagepost-redirect-plugin' ) . '</b></label><br />';
1805
 
1806
  switch($pprredirecttype):
1867
  if( isset( $_POST['pprredirect_active'] ) || isset( $_POST['pprredirect_url'] ) || isset( $_POST['pprredirect_type'] ) || isset( $_POST['pprredirect_newwindow'] ) || isset($_POST['pprredirect_relnofollow']) || isset($_POST['pprredirect_meta_secs'])):
1868
  $protocols = apply_filters( 'qppr_allowed_protocols', array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp'));
1869
  // find & save the form data & put it into an array
1870
+ $my_meta_data['_pprredirect_active'] = isset($_REQUEST['pprredirect_active']) ? $this->isOne_none(intval( $_REQUEST['pprredirect_active'])) : '';
1871
+ $my_meta_data['_pprredirect_newwindow'] = isset($_REQUEST['pprredirect_newwindow']) ? $this->isOne_none(intval($_REQUEST['pprredirect_newwindow'])) : '';
1872
+ $my_meta_data['_pprredirect_relnofollow'] = isset($_REQUEST['pprredirect_relnofollow']) ? $this->isOne_none(intval( $_REQUEST['pprredirect_relnofollow'])) : '';
1873
+ $my_meta_data['_pprredirect_type'] = isset($_REQUEST['pprredirect_type']) ? sanitize_text_field( $_REQUEST['pprredirect_type'] ) : '';
1874
+ $my_meta_data['_pprredirect_rewritelink'] = isset($_REQUEST['pprredirect_rewritelink']) ? $this->isOne_none(intval( $_REQUEST['pprredirect_rewritelink'])) : '';
1875
+ $my_meta_data['_pprredirect_url'] = isset($_REQUEST['pprredirect_url']) ? esc_url_raw( sanitize_url($_REQUEST['pprredirect_url']), $protocols ) : '';
1876
+ $my_meta_data['_pprredirect_meta_secs'] = isset($_REQUEST['pprredirect_meta_secs']) && (int) $_REQUEST['pprredirect_meta_secs'] > 0 ? (int) $_REQUEST['pprredirect_meta_secs'] : '';
1877
+
1878
+
1879
+ // function qppr_sanitize_pprredirect_active_meta( $meta_value ) {
1880
+ // return absint( $meta_value );
1881
+ // }
1882
+ add_filter( 'sanitize_post_meta__pprredirect_newwindow', 'qppr_sanitize_pprredirect_active_meta', 10, 1 );
1883
+ add_filter( 'sanitize_post_meta__pprredirect_active', 'qppr_sanitize_pprredirect_active_meta', 10, 1 );
1884
+ add_filter( 'sanitize_post_meta__pprredirect_active', 'qppr_sanitize_pprredirect_active_meta', 10, 1 );
1885
+
1886
 
1887
  $info = $this->appip_parseURI($my_meta_data['_pprredirect_url']);
1888
  //$my_meta_data['_pprredirect_url'] = esc_url_raw($info['url']);
2094
 
2095
  function redirect(){
2096
  //bypass for testing.
2097
+ if(isset($_GET['action']) && sanitize_text_field($_GET['action']) == 'no-redirect' )
2098
  return;
2099
  // Quick Redirects Redirect.
2100
  // Read the list of redirects and if the current page is found in the list, send the visitor on her way
2122
  $getQAddrNeedle = $this->pproverride_casesensitive ? str_replace( $getQAddress, '', $getAddrNeedle ) : strtolower(str_replace( $getQAddress, '', $getAddrNeedle ));
2123
  $finalQS = str_replace( '&amp;','&', $finalQS);
2124
  $finalQS = $this->pproverride_casesensitive ? $finalQS : strtolower( $finalQS ); //added 5.1.4 to fix URL needle being converted to lower, but not Query (as it never matches unless user enters lower)
2125
+ $finalQS = esc_url(apply_filters( 'appip_filter_testing_finalQS', $finalQS, $needle, $haystack)); // added 5.1.4 to allow filtering of QS data prior to matching.
2126
  $index = false;
2127
 
2128
  /* These are the URL matching checks to see if the request should be redirected.
2134
  //check if QS data might be part of the redirect URL and not supposed to be added back.
2135
  $index = $needle . $finalQS;
2136
  $finalQS = ''; //remove it
2137
+ }elseif( array_key_exists( esc_url($needle . $finalQS), $haystack ) ){
2138
  //check if QS data might be part of the encoded redirect URL and not supposed to be added back.
2139
  $index = $needle . $finalQS;
2140
  $finalQS = ''; //remove it
2141
  }elseif(array_key_exists( $needle, $haystack)){
2142
  //standard straight forward check for needle (request URL)
2143
  $index = $needle;
2144
+ }elseif(array_key_exists(esc_url($needle), $haystack)){
2145
  //standard straight forward check for URL encoded needle (request URL)
2146
+ $index = esc_url($needle);
2147
  }elseif(array_key_exists( $getAddrNeedle, $haystack)){
2148
  //Checks of the needle (request URL) might be using a different protocol than site home URL
2149
  $index = $getAddrNeedle;
2150
+ }elseif(array_key_exists( esc_url( $getAddrNeedle ), $haystack)){
2151
  //Checks of an encoded needle (request URL) might be using a different protocol than site home URL
2152
+ $index = esc_url( $getAddrNeedle );
2153
  }elseif( strpos( $needle, 'https' ) !== false ){
2154
  //Checks of the encoded needle (request URL) might be http but the redirect is set up as http
2155
  if(array_key_exists(str_replace('https','http',$needle), $haystack))
2156
  $index = str_replace('https','http',$needle); //unencoded version
2157
+ elseif(array_key_exists(str_replace('https','http',esc_url($needle)), $haystack))
2158
+ $index = str_replace('https','http',esc_url($needle)); //encoded version
2159
  }elseif(strpos($needle,'/') === false) {
2160
  //Checks of the needle (request URL) might not have beginning and ending / but the redirect is set up with them
2161
  if( array_key_exists( '/' . $needle . '/', $haystack ) )
2162
  $index = '/'.$needle.'/';
2163
+ }elseif( array_key_exists( esc_url($getQAddrNeedle), $haystack ) ){
2164
  //Checks if encoded needle (request URL) doesn't contain a sub directory in the URL, but the site Root is set to include it.
2165
+ $index = esc_url( $getQAddrNeedle );
2166
  }elseif( array_key_exists( $getQAddrNeedle, $haystack ) ){
2167
  //Checks if needle (request URL) doesn't contain a sub directory in the URL, but the site Root is set to include it.
2168
  $index = $getQAddrNeedle;
2210
 
2211
  function ppr_do_redirect( $var1='var1', $var2 = 'var2'){
2212
  //bypass for testing.
2213
+ if(isset($_GET['action']) && sanitize_text_field($_GET['action']) == 'no-redirect' )
2214
  return;
2215
  // Individual Redirects Redirect.
2216
  // Read the list of redirects and if the current page is found in the list, send the visitor on her way
2347
  ?>
2348
  <div class="wrap" style="position:relative;">
2349
  <h2><?php echo __( 'Meta Redirect Settings', 'quick-pagepost-redirect-plugin' );?></h2>
2350
+ <?php if ( ! empty( sanitize_text_field($_GET['settings-updated']) ) ) : ?><div id="message" class="updated notice is-dismissible"><p><?php echo __( 'Settings Updated', 'quick-pagepost-redirect-plugin' );?></p></div><?php endif; ?>
2351
  <p><?php echo __( 'This section is for updating options for redirects that use the "meta refresh" funcitonality for redirecting.', 'quick-pagepost-redirect-plugin' );?></p>
2352
  <p><?php echo __( 'Using the setting below, you can add elements or a message to the page that is loaded before tht redirect, or just allow the page to load as normal until the redirect reaches the number of seconds you have set below.', 'quick-pagepost-redirect-plugin' );?></p>
2353
  <form method="post" action="options.php" class="qpprform">
2690
 
2691
  return sanitize_text_field( $meta_value );
2692
  }
2693
+ add_filter( 'sanitize_post_meta__pprredirect_type', 'qppr_sanitize_pprredirect_type_meta', 10, 1 );
readme.txt CHANGED
@@ -5,13 +5,13 @@ Donate Link:
5
  Requires at least: 4.0
6
  License: GPLv2 or later
7
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
8
- Tested up to: 5.6
9
- Stable tag: 5.2.2
10
 
11
  Easily redirect pages/posts or custom post types to another page/post or external URL by specifying the redirect URL and type (301, 302, 307, meta).
12
 
13
  == Description ==
14
- **Current Version 5.2.2**
15
 
16
  This plugin has two redirect functionalities - **"Quick Redirects"** and **"Individual Redirects"**:
17
 
@@ -182,6 +182,9 @@ NO it isn't! Check the plugin FAQs/Help page for a more up to date list of Frequ
182
  * THIS SECTION IS JUST TO KEEP TRACK OF TODO ITEMS FOR FUTURE UPDATES.
183
  * Add New Window and No Follow to links where the URL has been rewritten. Currently if you rewrite the URL neither will work as they are referenced with the original URL, not the rewrite.
184
 
 
 
 
185
  = 5.2.2 =
186
  * **WordPress 5.6 compatibility check
187
 
5
  Requires at least: 4.0
6
  License: GPLv2 or later
7
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
8
+ Tested up to: 5.9.1
9
+ Stable tag: 5.2.3
10
 
11
  Easily redirect pages/posts or custom post types to another page/post or external URL by specifying the redirect URL and type (301, 302, 307, meta).
12
 
13
  == Description ==
14
+ **Current Version 5.2.3**
15
 
16
  This plugin has two redirect functionalities - **"Quick Redirects"** and **"Individual Redirects"**:
17
 
182
  * THIS SECTION IS JUST TO KEEP TRACK OF TODO ITEMS FOR FUTURE UPDATES.
183
  * Add New Window and No Follow to links where the URL has been rewritten. Currently if you rewrite the URL neither will work as they are referenced with the original URL, not the rewrite.
184
 
185
+ = 5.2.3 =
186
+ * **Security fixes
187
+
188
  = 5.2.2 =
189
  * **WordPress 5.6 compatibility check
190