web/wp-content/plugins/feedburner-plugin/fdfeedburner.php
branchwordpress
changeset 109 03b0d1493584
child 194 32102edaa81b
equal deleted inserted replaced
-1:000000000000 109:03b0d1493584
       
     1 <?php
       
     2 /*
       
     3 Plugin Name: FD Feedburner Plugin
       
     4 Plugin URI: http://flagrantdisregard.com/feedburner/
       
     5 Description: Redirects all feeds to a Feedburner feed
       
     6 Author: John Watson
       
     7 Author URI: http://flagrantdisregard.com/
       
     8 Version: 1.41
       
     9 
       
    10 Copyright (C) Sat Feb 18 2006 John Watson
       
    11 john@flagrantdisregard.com
       
    12 http://flagrantdisregard.com/
       
    13 
       
    14 $Id: feedburnerplugin.php 407 2006-11-14 17:40:47Z John $
       
    15 
       
    16 This program is free software; you can redistribute it and/or
       
    17 modify it under the terms of the GNU General Public License
       
    18 as published by the Free Software Foundation; either version 2
       
    19 of the License, or any later version.
       
    20 
       
    21 This program is distributed in the hope that it will be useful,
       
    22 but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       
    24 GNU General Public License for more details.
       
    25 '
       
    26 You should have received a copy of the GNU General Public License
       
    27 along with this program; if not, write to the Free Software
       
    28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
       
    29 */ 
       
    30 
       
    31 add_action('admin_menu', 'feedburner_config_page');
       
    32 
       
    33 function feedburner_config_page() {
       
    34 	global $wpdb;
       
    35 	if ( function_exists('add_submenu_page') )
       
    36 		add_submenu_page('plugins.php', __('Feedburner Configuration'), __('Feedburner Configuration'), 8, __FILE__, 'feedburner_conf');
       
    37 }
       
    38 
       
    39 function feedburner_fix_url($url) {
       
    40 	$url = preg_replace('!^(http|https)://!i', '', $url);
       
    41 	$url = preg_replace('!^/!i', '', $url);
       
    42 	$url = 'http://'.$url;
       
    43 	return $url;
       
    44 }
       
    45 
       
    46 function feedburner_conf() {
       
    47 	$options = get_option('fd_feedburner');
       
    48 
       
    49 	if (!isset($options['feedburner_url'])) $options['feedburner_url'] = null;
       
    50 	if (!isset($options['feedburner_comment_url'])) $options['feedburner_comment_url'] = null;
       
    51 	if (!isset($options['feedburner_append_cats'])) $options['feedburner_append_cats'] = 0;
       
    52 	if (!isset($options['feedburner_no_cats'])) $options['feedburner_no_cats'] = 0;
       
    53 	if (!isset($options['feedburner_no_search'])) $options['feedburner_no_search'] = 0;
       
    54 	
       
    55 	$updated = false;
       
    56 	if ( isset($_POST['submit']) ) {
       
    57 		check_admin_referer();
       
    58 		
       
    59 		if (isset($_POST['feedburner_url'])) {
       
    60 			$feedburner_url = $_POST['feedburner_url'];
       
    61 			if ($feedburner_url != null) $feedburner_url = feedburner_fix_url($feedburner_url);
       
    62 		} else {
       
    63 			$feedburner_url = null;
       
    64 		}
       
    65 		
       
    66 		if (isset($_POST['feedburner_comment_url'])) {
       
    67 			$feedburner_comment_url = $_POST['feedburner_comment_url'];
       
    68 			if ($feedburner_comment_url != null) $feedburner_comment_url = feedburner_fix_url($feedburner_comment_url);
       
    69 		} else {
       
    70 			$feedburner_comment_url = null;
       
    71 		}
       
    72 		
       
    73 		if (isset($_POST['feedburner_append_cats'])) {
       
    74 			$feedburner_append_cats = $_POST['feedburner_append_cats'];
       
    75 		} else {
       
    76 			$feedburner_append_cats = 0;
       
    77 		}
       
    78 		
       
    79 		if (isset($_POST['feedburner_no_cats'])) {
       
    80 			$feedburner_no_cats = $_POST['feedburner_no_cats'];
       
    81 		} else {
       
    82 			$feedburner_no_cats = 0;
       
    83 		}
       
    84 		
       
    85 		if (isset($_POST['feedburner_no_search'])) {
       
    86 			$feedburner_no_search = $_POST['feedburner_no_search'];
       
    87 		} else {
       
    88 			$feedburner_no_search = 0;
       
    89 		}
       
    90 		
       
    91 		$options['feedburner_url'] = $feedburner_url;
       
    92 		$options['feedburner_comment_url'] = $feedburner_comment_url;
       
    93 		$options['feedburner_append_cats'] = $feedburner_append_cats;
       
    94 		$options['feedburner_no_cats'] = $feedburner_no_cats;
       
    95 		$options['feedburner_no_search'] = $feedburner_no_search;
       
    96 		
       
    97 		update_option('fd_feedburner', $options);
       
    98 		
       
    99 		$updated = true;
       
   100 	}
       
   101 ?>
       
   102 
       
   103 <div class="wrap">
       
   104 <?php
       
   105 if ($updated) {
       
   106 	echo "<div id='message' class='updated fade'><p>";
       
   107 	_e('Configuration updated.');
       
   108 	echo "</p></div>";
       
   109 }
       
   110 ?>
       
   111 <h2><?php _e('Feedburner Configuration'); ?></h2>
       
   112 <div style="float: right; width: 350px">
       
   113 	<h3>How does this work?</h3>
       
   114 	<p><?php _e('This plugin automatically redirects all of your existing feeds to Feedburner (including category and tag feeds).')?></p>
       
   115 	<p><?php _e('First go to <a href="http://feedburner.com">Feedburner.com</a> and burn your feed. Enter the URL Feedburner created for you. You may optionally redirect your comments feed using the same procedure. To disable redirection, disable the plugin or erase the URLs.');
       
   116 	?></p>
       
   117 	<p><?php _e('Once you enter URLs your feeds will be redirected automatically and you do not need to take any further action.') ?> <em><?php _e('Note that your feeds may not appear to redirect to Feedburner until you add a new post.'); ?></em>
       
   118 	</p>
       
   119 </div>
       
   120 <form action="" method="post" id="feedburner-conf">
       
   121 <h3><label for="feedburner_url"><?php _e('Redirect my feeds here:'); ?></label></h3>
       
   122 <p><input id="feedburner_url" name="feedburner_url" type="text" size="65" maxlength="200" value="<?php echo $options['feedburner_url']; ?>" /></p>
       
   123 
       
   124 <h3><label for="feedburner_comment_url"><?php _e('Redirect my comments feed here:'); ?></label></h3>
       
   125 <p><input id="feedburner_comment_url" name="feedburner_comment_url" type="text" size="65" maxlength="200" value="<?php echo $options['feedburner_comment_url']; ?>" /></p>
       
   126 
       
   127 <h3>Advanced Options</h3>
       
   128 <p>
       
   129 	<input id="feedburner_no_cats" name="feedburner_no_cats" type="checkbox" value="1"<?php if ($options['feedburner_no_cats']==1) echo ' checked'; ?> />
       
   130 	<label for="feedburner_no_cats"><?php _e('Do not redirect category or tag feeds'); ?></label>
       
   131 </p>
       
   132 <p>
       
   133 	<input id="feedburner_append_cats" name="feedburner_append_cats" type="checkbox" value="1"<?php if ($options['feedburner_append_cats']==1) echo ' checked'; ?> />
       
   134 	<label for="feedburner_append_cats"><?php _e('Append category/tag to URL for category/tag feeds'); ?> (<i>http://url<b>_category</b></i>)</label>
       
   135 </p>
       
   136 <p>
       
   137 	<input id="feedburner_no_search" name="feedburner_no_search" type="checkbox" value="1"<?php if ($options['feedburner_no_search']==1) echo ' checked'; ?> />
       
   138 	<label for="feedburner_no_search"><?php _e('Do not redirect search result feeds'); ?></label>
       
   139 </p>
       
   140 
       
   141 <p class="submit" style="text-align: left"><input type="submit" name="submit" value="<?php _e('Save &raquo;'); ?>" /></p>
       
   142 </form>
       
   143 </div>
       
   144 <?php
       
   145 }
       
   146 
       
   147 function feedburner_redirect() {
       
   148 	global $feed, $withcomments, $wp, $wpdb, $wp_version, $wp_db_version;
       
   149 	
       
   150 	// Do nothing if not a feed
       
   151 	if (!is_feed()) return;
       
   152 	
       
   153 	// Do nothing if feedburner is the user-agent
       
   154 	if (preg_match('/feedburner/i', $_SERVER['HTTP_USER_AGENT'])) return;
       
   155 	
       
   156 	// Do nothing if not configured
       
   157 	$options = get_option('fd_feedburner');
       
   158 	if (!isset($options['feedburner_url'])) $options['feedburner_url'] = null;
       
   159 	if (!isset($options['feedburner_comment_url'])) $options['feedburner_comment_url'] = null;
       
   160 	if (!isset($options['feedburner_append_cats'])) $options['feedburner_append_cats'] = 0;
       
   161 	if (!isset($options['feedburner_no_cats'])) $options['feedburner_no_cats'] = 0;
       
   162 	if (!isset($options['feedburner_no_search'])) $options['feedburner_no_search'] = 0;
       
   163 	$feed_url = $options['feedburner_url'];
       
   164 	$comment_url = $options['feedburner_comment_url'];
       
   165 	if ($feed_url == null && $comment_url == null) return;
       
   166 	
       
   167 	// Get category
       
   168 	$cat = null;
       
   169 	if ($wp->query_vars['category_name'] != null) {
       
   170 		$cat = $wp->query_vars['category_name'];
       
   171 	}
       
   172 	if ($wp->query_vars['cat'] != null) {
       
   173 		if ($wp_db_version >= 6124) {
       
   174 			// 6124 = WP 2.3
       
   175 			$cat = $wpdb->get_var("SELECT slug FROM $wpdb->terms WHERE term_id = '".$wp->query_vars['cat']."' LIMIT 1");
       
   176 		} else {
       
   177 			$cat = $wpdb->get_var("SELECT category_nicename FROM $wpdb->categories WHERE cat_ID = '".$wp->query_vars['cat']."' LIMIT 1");
       
   178 		}
       
   179 	}
       
   180 	if ($options['feedburner_append_cats'] == 1 && $cat) {
       
   181 		$feed_url .= '_'.$cat;
       
   182 	}
       
   183 	
       
   184 	// Get tag
       
   185 	$tag = null;
       
   186 	if ($wp->query_vars['tag'] != null) {
       
   187 		$tag = $wp->query_vars['tag'];
       
   188 	}
       
   189 	if ($options['feedburner_append_cats'] == 1 && $tag) {
       
   190 		$feed_url .= '_'.$tag;
       
   191 	}
       
   192 
       
   193 	// Get search terms
       
   194 	$search = null;
       
   195 	if ($wp->query_vars['s'] != null) {
       
   196 		$search = $wp->query_vars['s'];
       
   197 	}
       
   198 
       
   199 	// Redirect comment feed
       
   200 	if ($feed == 'comments-rss2' || is_single() || $withcomments) {
       
   201 		if ($comment_url != null) {
       
   202 			header("Location: ".$comment_url);
       
   203 			die;
       
   204 		}
       
   205 	} else {
       
   206 		// Other feeds
       
   207 		switch($feed) {
       
   208 			case 'feed':
       
   209 			case 'rdf':
       
   210 			case 'rss':
       
   211 			case 'rss2':
       
   212 			case 'atom':
       
   213 				if (($cat || $tag) && $options['feedburner_no_cats'] == 1) {
       
   214 					// If this is a category/tag feed and redirect is disabled, do nothing
       
   215 				} else if ($search && $options['feedburner_no_search'] == 1) {
       
   216 					// If this is a search result feed and redirect is disabled, do nothing
       
   217 				} else {
       
   218 					if ($feed_url != null) {
       
   219 						// Redirect the feed
       
   220 						header("Location: ".$feed_url);
       
   221 						die;
       
   222 					}
       
   223 				}
       
   224 		}
       
   225 	}
       
   226 }
       
   227 
       
   228 /*
       
   229 ==================================================
       
   230 Add action hooks
       
   231 ==================================================
       
   232 */
       
   233 add_action('template_redirect', 'feedburner_redirect');
       
   234 ?>