PluginProbe
Super RSS Reader – Add attractive RSS Feed Widget / 2.0
Super RSS Reader – Add attractive RSS Feed Widget v2.0
trunk 0.8 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 3.0 3.1 3.2 4.0 4.0.1 4.1 4.2 4.3 4.4 4.4.1 4.5 4.6 4.7 4.8 All 33 releases
← All changes | super-rss-reader.php +391 -34 4.22.0 View file →
@@ -1,48 +1,405 @@
1 1 <?php
2 2 /*
3 - * Plugin Name: Super RSS Reader
4 - * Plugin URI: https://www.aakashweb.com/wordpress-plugins/super-rss-reader/
5 - * Description: Display any RSS feed(s) in widget with news ticker effect in multiple tabs, thumbnails, customizable color themes and more.
6 - * Author: Aakash Chakravarthy
7 - * Author URI: https://www.aakashweb.com/
8 - * Version: 4.2
9 - * Text Domain: super-rss-reader
10 - * Domain Path: /languages
11 - */
3 +Plugin Name: Super RSS Reader
4 +Plugin URI: http://www.aakashweb.com/wordpress-plugins/super-rss-reader/
5 +Author URI: http://www.aakashweb.com/
6 +Description: Super RSS Reader is jQuery based RSS reader widget, which displays the RSS feeds in the widget in an attractive way. It uses the jQuery easy ticker plugin to add a news ticker like effect to the RSS feeds. Multiple RSS feeds can be added for a single widget and they get seperated in tabs. <a href="http://www.youtube.com/watch?v=02aOG_-98Tg" target="_blank" title="Super RSS Reader demo video">Check out the demo video</a>.
7 +Author: Aakash Chakravarthy
8 +Version: 2.0
9 +*/
12 10
13 -define( 'SRR_VERSION', '4.2' );
14 -define( 'SRR_PATH', plugin_dir_path( __FILE__ ) ); // All have trailing slash
15 -define( 'SRR_URL', plugin_dir_url( __FILE__ ) );
16 -define( 'SRR_BASE_NAME', plugin_basename( __FILE__ ) );
11 +if(!defined('WP_CONTENT_URL')) {
12 + $srr_url = get_option('siteurl') . '/wp-content/plugins/' . plugin_basename(dirname(__FILE__)).'/';
13 +}else{
14 + $srr_url = WP_CONTENT_URL . '/plugins/' . plugin_basename(dirname(__FILE__)) . '/';
15 +}
17 16
18 -final class Super_RSS_Reader{
17 +define('SRR_VERSION', '2.0');
18 +define('SRR_AUTHOR', 'Aakash Chakravarthy');
19 +define('SRR_URL', $srr_url);
19 20
20 - public static function init(){
21 +## Include the required scripts and styles
22 +if( !is_admin()){
23 + // jQuery
24 + wp_deregister_script('jquery');
25 + wp_register_script('jquery', ("http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"), false, '1.3.2');
26 + wp_enqueue_script('jquery');
27 +
28 + // Super RSS Reader JS and CSS
29 + wp_register_script('super-rss-reader-js', SRR_URL . 'public/srr-js.js');
30 + wp_enqueue_script(array('jquery', 'super-rss-reader-js'));
31 + wp_register_style('super-rss-reader-css', SRR_URL . 'public/srr-css.css');
32 + wp_enqueue_style('super-rss-reader-css');
33 +}
21 34
22 - self::includes();
35 +## Default color styles
36 +$srr_color_styles = array(
37 + 'No style' => 'none',
38 + 'Grey' => 'grey',
39 + 'Dark' => 'dark'
40 +);
23 41
24 - add_action( 'plugins_loaded', array( __CLASS__, 'load_text_domain' ) );
42 +## The main RSS Parser
43 +function srr_rss_parser($instance){
44 +
45 + $urls = stripslashes($instance['urls']);
46 + $count = intval($instance['count']);
47 + $show_date = intval($instance['show_date']);
48 + $show_desc = intval($instance['show_desc']);
49 + $show_author = intval($instance['show_author']);
50 + $strip_desc = intval($instance['strip_desc']);
51 + $color_style = stripslashes($instance['color_style']);
52 + $enable_ticker = intval($instance['enable_ticker']);
53 + $visible_items = intval($instance['visible_items']);
54 +
55 + if(empty($urls)){
56 + return '';
57 + }
58 +
59 + $rand = array();
60 + $url = explode(',', $urls);
61 +
62 + // Generate the Tabs
63 + if(count($url) > 1){
64 + echo '<ul class="srr-tab-wrap srr-tab-style-' . $color_style . ' srr-clearfix">';
65 + for($i=0; $i<count($url); $i++){
66 + // Get the Feed URL
67 + $feedUrl = trim($url[$i]);
68 + $rss = fetch_feed($feedUrl);
69 + if (is_wp_error($rss)){
70 + if (is_admin() || current_user_can('manage_options')){
71 + echo '<p><strong>RSS Error</strong>:' . $rss->get_error_message() . '</p>';
72 + return;
73 + }
74 + }
75 + $rss_title = esc_attr(strip_tags($rss->get_title()));
76 + $rand[$i] = rand(0, 999);
77 + echo '<li data-tab="srr-tab-' . $rand[$i] . '">' . $rss_title . '</li>';
78 + }
79 + echo '</ul>';
80 + }
81 +
82 + for($i=0; $i<count($url); $i++){
83 + // Get the Feed URL
84 + $feedUrl = trim($url[$i]);
85 + if(isset($url[$i])){
86 + $rss = fetch_feed($feedUrl);
87 + }else{
88 + return '';
89 + }
90 +
91 + // Check for feed errors
92 + if (!is_wp_error( $rss ) ){
93 + $maxitems = $rss->get_item_quantity($count);
94 + $rss_items = $rss->get_items(0, $maxitems);
95 + $rss_title = esc_attr(strip_tags($rss->get_title()));
96 + $rss_desc = esc_attr(strip_tags($rss->get_description()));
97 + }
25 98
26 - }
99 + // Outer Wrap start
100 + echo '<div class="srr-wrap ' . (($enable_ticker == 1 ) ? 'srr-vticker' : '' ) . ' srr-style-' . $color_style . '" data-visible="' . $visible_items . '" data-id="srr-tab-' . $rand[$i] . '"><div>';
101 +
102 + // Check feed items
103 + if ($maxitems == 0){
104 + echo '<div>No items.</div>';
105 + }else{
106 + $j=1;
107 + // Loop through each feed item
108 + foreach ($rss_items as $item){
109 + // Get the link
110 + $link = $item->get_link();
111 + while ( stristr($link, 'http') != $link ){ $link = substr($link, 1); }
112 + $link = esc_url(strip_tags($link));
113 +
114 + // Get the item title
115 + $title = esc_attr(strip_tags($item->get_title()));
116 + if ( empty($title) )
117 + $title = __('Untitled');
118 +
119 + // Get the date
120 + $date = $item->get_date('j F Y');
121 +
122 + // Get the description
123 + $desc = str_replace( array("\n", "\r"), ' ', esc_attr( strip_tags( @html_entity_decode( $item->get_description(), ENT_QUOTES, get_option('blog_charset') ) ) ) );
124 +
125 + if($strip_desc != 0){
126 + $desc = wp_html_excerpt( $desc, $strip_desc );
127 + if ( '[...]' == substr( $desc, -5 ) )
128 + $desc = substr( $desc, 0, -5 ) . '[&hellip;]';
129 + elseif ( '[&hellip;]' != substr( $desc, -10 ) )
130 + $desc .= ' [&hellip;]';
131 + }
132 + $desc = esc_html( $desc );
133 +
134 + // Get the author
135 + $author = $item->get_author();
136 + if ( is_object($author) ) {
137 + $author = $author->get_name();
138 + $author = esc_html(strip_tags($author));
139 + }
140 +
141 + echo "\n\n\t";
142 +
143 + // Display the feed items
144 + echo '<div class="srr-item ' . (($j%2 == 0) ? 'even' : 'odd') . '">';
145 + echo '<a href="' . $link . '" title="Posted on ' . $date . '">' .$title . '</a>';
146 + if($show_date) echo '<br/><em class="srr-date">' . $date . '</em>';
147 + if($show_author) echo ' - <cite class="srr-author">' . $author . '</cite>';
148 + if($show_desc) echo '<p class="srr-summary">' . $desc . '</p>';
149 + echo '</div>';
150 + // End display
151 +
152 + $j++;
153 + }
154 + }
155 +
156 + // Outer wrap end
157 + echo "\n\n</div>
158 + </div> \n\n" ;
159 +
160 + }
161 +}
27 162
28 - public static function includes(){
163 +class super_rss_reader_widget extends WP_Widget{
164 + ## Initialize
165 + function super_rss_reader_widget(){
166 + $widget_ops = array(
167 + 'classname' => 'widget_super_rss_reader',
168 + 'description' => "Enhanced RSS feed reader widget with advanced features."
169 + );
170 +
171 + $control_ops = array('width' => 430, 'height' => 500);
172 + parent::WP_Widget('super_rss_reader', 'Super RSS Reader', $widget_ops, $control_ops);
173 + }
174 +
175 + ## Display the Widget
176 + function widget($args, $instance){
177 + extract($args);
178 + if(empty($instance['title'])){
179 + $title = '';
180 + }else{
181 + $title = $before_title . apply_filters('widget_title', $instance['title'], $instance, $this->id_base) . $after_title;
182 + }
183 +
184 + echo $before_widget . $title;
185 + echo "\n" . '
186 + <!-- Start - Super RSS Reader -->
187 + <div class="super-rss-reader-widget">' . "\n";
188 +
189 + srr_rss_parser($instance, $instance['urls']);
190 +
191 + echo "\n" . '</div>
192 + <!-- End - Super RSS Reader -->
193 + ' . "\n";
194 + echo $after_widget;
195 + }
196 +
197 + ## Save settings
198 + function update($new_instance, $old_instance){
199 + $instance = $old_instance;
200 + $instance['title'] = stripslashes($new_instance['title']);
201 + $instance['urls'] = stripslashes($new_instance['urls']);
202 +
203 + $instance['count'] = intval($new_instance['count']);
204 + $instance['show_date'] = intval($new_instance['show_date']);
205 + $instance['show_desc'] = intval($new_instance['show_desc']);
206 + $instance['show_author'] = intval($new_instance['show_author']);
207 + $instance['strip_desc'] = intval($new_instance['strip_desc']);
208 +
209 + $instance['color_style'] = stripslashes($new_instance['color_style']);
210 + $instance['enable_ticker'] = intval($new_instance['enable_ticker']);
211 + $instance['visible_items'] = intval($new_instance['visible_items']);
212 +
213 + return $instance;
214 + }
215 +
216 + ## HJA Widget form
217 + function form($instance){
218 + global $srr_color_styles;
219 +
220 + $instance = wp_parse_args( (array) $instance, array(
221 + 'title' => '', 'urls' => '', 'count' => 5,
222 + 'show_date' => 0, 'show_desc' => 1, 'show_author' => 0,
223 + 'strip_desc' => 100, 'color_style' => 'none', 'enable_ticker' => 1,
224 + 'visible_items' => 5
225 + ));
226 +
227 + $title = htmlspecialchars($instance['title']);
228 + $urls = htmlspecialchars($instance['urls']);
229 +
230 + $count = intval($instance['count']);
231 + $show_date = intval($instance['show_date']);
232 + $show_desc = intval($instance['show_desc']);
233 + $show_author = intval($instance['show_author']);
234 + $strip_desc = intval($instance['strip_desc']);
235 +
236 + $color_style = stripslashes($instance['color_style']);
237 + $enable_ticker = intval($instance['enable_ticker']);
238 + $visible_items = intval($instance['visible_items']);
239 +
240 + ?>
241 + <div class="srr_settings">
242 + <table width="100%" height="72" border="0">
243 + <tr>
244 + <td width="13%" height="33"><label for="<?php echo $this->get_field_id('title'); ?>">Title: </label></td>
245 + <td width="87%"><input id="<?php echo $this->get_field_id('title');?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" class="widefat"/></td>
246 + </tr>
247 + <tr>
248 + <td><label for="<?php echo $this->get_field_id('urls'); ?>">URLs: </label></td>
249 + <td><input id="<?php echo $this->get_field_id('urls');?>" name="<?php echo $this->get_field_name('urls'); ?>" type="text" value="<?php echo $urls; ?>" class="widefat"/>
250 + <small class="srr_smalltext">Can enter multiple RSS/atom feed URLs seperated by a comma.</small>
251 + </td>
252 + </tr>
253 + </table>
254 + </div>
255 +
256 + <div class="srr_settings">
257 + <h4>Settings</h4>
258 + <table width="100%" border="0">
259 + <tr>
260 + <td width="7%" height="28"><input id="<?php echo $this->get_field_id('show_desc'); ?>" type="checkbox" name="<?php echo $this->get_field_name('show_desc'); ?>" value="1" <?php echo $show_desc == "1" ? 'checked="checked"' : ""; ?> /></td>
261 + <td width="40%"><label for="<?php echo $this->get_field_id('show_desc'); ?>">Show Description</label></td>
262 + <td width="28%"><label for="<?php echo $this->get_field_id('count');?>">Count</label></td>
263 + <td width="25%"><input id="<?php echo $this->get_field_id('count');?>" name="<?php echo $this->get_field_name('count'); ?>" type="text" value="<?php echo $count; ?>" class="widefat" title="No of feed items to parse"/></td>
264 + </tr>
265 + <tr>
266 + <td height="32"><input id="<?php echo $this->get_field_id('show_date'); ?>" type="checkbox" name="<?php echo $this->get_field_name('show_date'); ?>" value="1" <?php echo $show_date == "1" ? 'checked="checked"' : ""; ?> /></td>
267 + <td><label for="<?php echo $this->get_field_id('show_date'); ?>">Show Date</label></td>
268 + <td><label for="<?php echo $this->get_field_id('strip_desc');?>">Strip description</label></td>
269 + <td><input id="<?php echo $this->get_field_id('strip_desc');?>" name="<?php echo $this->get_field_name('strip_desc'); ?>" type="text" value="<?php echo $strip_desc; ?>" class="widefat" title="Use 0 to avoid striping the description of the feed"/>
270 + </td>
271 + </tr>
272 + <tr>
273 + <td height="29"><input id="<?php echo $this->get_field_id('show_author'); ?>" type="checkbox" name="<?php echo $this->get_field_name('show_author'); ?>" value="1" <?php echo $show_author == "1" ? 'checked="checked"' : ""; ?> /></td>
274 + <td><label for="<?php echo $this->get_field_id('show_author'); ?>">Show Author</label></td>
275 + <td>&nbsp;</td>
276 + <td>&nbsp;</td>
277 + </tr>
278 + </table>
279 + </div>
280 +
281 + <div class="srr_settings">
282 + <h4>Other settings</h4>
283 + <table width="100%" height="109" border="0">
284 + <tr>
285 + <td height="32"><label>Color style: </label></td>
286 + <td>
287 + <?php
288 + echo '<select name="' . $this->get_field_name('color_style') . '" id="' . $this->get_field_id('color_style') . '">';
289 + foreach($srr_color_styles as $k => $v){
290 + echo '<option value="' . $v . '" ' . ($color_style == $v ? 'selected="selected"' : "") . '>' . $k . '</option>';
291 + }
292 + echo '</select>';
293 + ?>
294 + </td>
295 + </tr>
296 + <tr>
297 + <td height="33"><label for="<?php echo $this->get_field_id('enable_ticker'); ?>">Ticker animation:</label> </td>
298 + <td><input id="<?php echo $this->get_field_id('enable_ticker'); ?>" type="checkbox" name="<?php echo $this->get_field_name('enable_ticker'); ?>" value="1" <?php echo $enable_ticker == "1" ? 'checked="checked"' : ""; ?> /></td>
299 + </tr>
300 + <tr>
301 + <td height="36"><label for="<?php echo $this->get_field_id('visible_items');?>">Visible items: </label></td>
302 + <td><input id="<?php echo $this->get_field_id('visible_items');?>" name="<?php echo $this->get_field_name('visible_items'); ?>" type="text" value="<?php echo $visible_items; ?>" class="widefat" title="The no of feed items to be visible."/>
303 + </td>
304 + </tr>
305 + </table>
306 + </div>
307 +
308 + <div class="srr_support"> <a href="http://facebook.com/aakashweb" class="srr_fblike" target="_blank">Like</a> | <a href="http://bit.ly/srrdonate" target="_blank" style="color: #FF6600" title="If you like this plugin, then just make a small donation and it will be helpful for the plugin's development.">Donate</a> | <a href="http://www.aakashweb.com/wordpress-plugins/super-rss-reader/" target="_blank">Support</a></div>
309 +
310 + <?php
311 + }
312 +}
29 313
30 - include_once( SRR_PATH . 'includes/utilities.php' );
31 - include_once( SRR_PATH . 'includes/options.php' );
32 - include_once( SRR_PATH . 'includes/feed.php' );
33 - include_once( SRR_PATH . 'includes/widget.php' );
34 - include_once( SRR_PATH . 'includes/widget-admin.php' );
314 +function super_rss_reader_init(){
315 + register_widget('super_rss_reader_widget');
316 +}
317 +add_action('widgets_init', 'super_rss_reader_init');
35 318
36 - }
37 -
38 - public static function load_text_domain(){
39 -
40 - load_plugin_textdomain( 'super-rss-reader', FALSE, basename( dirname( __FILE__ ) ) . '/languages/' );
41 -
42 - }
43 -
319 +function srr_widget_scripts(){
320 + if(in_array($GLOBALS['pagenow'], array('widgets.php'))){
321 + ?>
322 + <style type="text/css">
323 + .srr_settings h4{
324 + border-bottom: 1px solid #DFDFDF;
325 + margin: 20px -11px 10px -11px;
326 + padding: 5px 11px 5px 11px;
327 + border-top: 1px solid #DFDFDF;
328 + background-color: #fff;
329 + background-image: -ms-linear-gradient(top,#fff,#f9f9f9);
330 + background-image: -moz-linear-gradient(top,#fff,#f9f9f9);
331 + background-image: -o-linear-gradient(top,#fff,#f9f9f9);
332 + background-image: -webkit-gradient(linear,left top,left bottom,from(#fff),to(#f9f9f9));
333 + background-image: -webkit-linear-gradient(top,#fff,#f9f9f9);
334 + background-image: linear-gradient(top,#fff,#f9f9f9);
335 + }
336 + .srr_support{
337 + border: 1px solid #DFDFDF;
338 + padding: 5px 13px;
339 + background: #F9F9F9;
340 + text-decoration:none;
341 + margin: 10px -13px;
342 + }
343 + .srr_support a{
344 + text-decoration: none;
345 + }
346 + .srr_support a:hover{
347 + text-decoration: underline;
348 + }
349 + .srr_smalltext{
350 + font-size: 11px;
351 + color: #666666;
352 + }
353 + .srr_support{
354 + border: 1px solid #DFDFDF;
355 + padding: 5px 13px;
356 + background: #F9F9F9;
357 + text-decoration:none;
358 + margin: 10px -13px;
359 + }
360 + .srr_support a{
361 + text-decoration: none;
362 + }
363 + .srr_support a:hover{
364 + text-decoration: underline;
365 + }
366 + .srr_fblike{
367 + background: url('<?php echo SRR_URL; ?>images/like-button.png') no-repeat;
368 + padding-left: 19px;
369 + }
370 + .srr_fblike span{
371 + display: none;
372 + }
373 + .srr_fblike:hover span{
374 + display: inline;
375 + padding:10px;
376 + margin: -15px 0px 0px -50px;
377 + position:absolute;
378 + background:#ffffff;
379 + border:1px solid #cccccc;
380 + -webkit-box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.09);
381 + -moz-box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.09);
382 + box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.09);
383 + -moz-border-radius: 5px;
384 + border-radius: 5px;
385 + }
386 + </style>
387 +
388 + <script type="text/javascript">
389 + jQuery(document).ready(function(){
390 + var social = '<iframe src="//www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.facebook.com%2Faakashweb&amp;send=false&amp;layout=button_count&amp;width=75&amp;show_faces=true&amp;action=like&amp;colorscheme=light&amp;font&amp;height=21&amp;appId=106994469342299" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:75px; height:21px;" allowTransparency="true"></iframe>';
391 +
392 + jQuery('.srr_fblike').live('mouseenter', function(){
393 + if(jQuery('.srr_fblike span').length == 0)
394 + jQuery(this).prepend('<span>' + social + '</span>');
395 + });
396 +
397 + });
398 + </script>
399 +
400 + <?php
401 + }
44 402 }
45 -
46 -Super_RSS_Reader::init();
403 +add_action('admin_footer', 'srr_widget_scripts');
47 404
48 405 ?>