PluginProbe
Super RSS Reader – Add attractive RSS Feed Widget / 2.4
Super RSS Reader – Add attractive RSS Feed Widget v2.4
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
super-rss-reader / super-rss-reader.php

super-rss-reader.php in Super RSS Reader – Add attractive RSS Feed Widget 2.4, at super-rss-reader.php

480 lines 19.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
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.4
9 */
10
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 }
16
17 define('SRR_VERSION', '2.4');
18 define('SRR_AUTHOR', 'Aakash Chakravarthy');
19 define('SRR_URL', $srr_url);
20
21 ## Include the required scripts
22 function srr_public_scripts(){
23 // jQuery
24 wp_enqueue_script('jquery');
25
26 // Super RSS Reader JS and CSS
27 wp_register_script('super-rss-reader-js', SRR_URL . 'public/srr-js.js');
28 wp_enqueue_script(array('jquery', 'super-rss-reader-js'));
29 }
30 add_action('wp_enqueue_scripts', 'srr_public_scripts');
31
32 ## Include the required styles
33 function srr_public_styles(){
34 wp_register_style('super-rss-reader-css', SRR_URL . 'public/srr-css.css');
35 wp_enqueue_style('super-rss-reader-css');
36 }
37 add_action('wp_enqueue_scripts', 'srr_public_styles');
38
39 ## Default color styles
40 $srr_color_styles = array(
41 'No style' => 'none',
42 'Grey' => 'grey',
43 'Dark' => 'dark',
44 'Orange' => 'orange',
45 'Simple modern' => 'smodern'
46 );
47
48 ## The main RSS Parser
49 function srr_rss_parser($instance){
50
51 $urls = stripslashes($instance['urls']);
52 $count = intval($instance['count']);
53 $show_date = intval($instance['show_date']);
54 $show_desc = intval($instance['show_desc']);
55 $show_author = intval($instance['show_author']);
56 $show_thumb = stripslashes($instance['show_thumb']);
57 $open_newtab = intval($instance['open_newtab']);
58 $strip_desc = intval($instance['strip_desc']);
59 $strip_title = intval($instance['strip_title']);
60 $read_more = htmlspecialchars($instance['read_more']);
61 $color_style = stripslashes($instance['color_style']);
62 $enable_ticker = intval($instance['enable_ticker']);
63 $visible_items = intval($instance['visible_items']);
64 $ticker_speed = intval($instance['ticker_speed']) * 1000;
65
66 if(empty($urls)){
67 return '';
68 }
69
70 $rand = array();
71 $url = explode(',', $urls);
72 $ucount = count($url);
73
74 // Generate the Tabs
75 if($ucount > 1){
76 echo '<ul class="srr-tab-wrap srr-tab-style-' . $color_style . ' srr-clearfix">';
77 for($i=0; $i<$ucount; $i++){
78 // Get the Feed URL
79 $feedUrl = trim($url[$i]);
80 $rss = fetch_feed($feedUrl);
81 $rand[$i] = rand(0, 999);
82
83 if (!is_wp_error($rss)){
84 $rss_title = esc_attr(strip_tags($rss->get_title()));
85 echo '<li data-tab="srr-tab-' . $rand[$i] . '">' . $rss_title . '</li>';
86 }else{
87 echo '<li data-tab="srr-tab-' . $rand[$i] . '">Error</li>';
88 }
89
90 }
91 echo '</ul>';
92 }
93
94 for($i=0; $i<$ucount; $i++){
95 // Get the Feed URL
96 $feedUrl = trim($url[$i]);
97 if(isset($url[$i])){
98 $rss = fetch_feed($feedUrl);
99 }else{
100 return '';
101 }
102
103 // Check for feed errors
104 if (!is_wp_error( $rss ) ){
105 $maxitems = $rss->get_item_quantity($count);
106 $rss_items = $rss->get_items(0, $maxitems);
107 $rss_title = esc_attr(strip_tags($rss->get_title()));
108 $rss_desc = esc_attr(strip_tags($rss->get_description()));
109 }else{
110 echo '<div class="srr-wrap srr-style-' . $color_style .'" data-id="srr-tab-' . $rand[$i] . '"><p>RSS Error: ' . $rss->get_error_message() . '</p></div>';
111 continue;
112 }
113
114 $randAttr = isset($rand[$i]) ? ' data-id="srr-tab-' . $rand[$i] . '" ' : '';
115
116 // Outer Wrap start
117 echo '<div class="srr-wrap ' . (($enable_ticker == 1 ) ? 'srr-vticker' : '' ) . ' srr-style-' . $color_style . '" data-visible="' . $visible_items . '" data-speed="' . $ticker_speed . '"' . $randAttr . '><div>';
118
119 // Check feed items
120 if ($maxitems == 0){
121 echo '<div>No items.</div>';
122 }else{
123 $j=1;
124 // Loop through each feed item
125 foreach ($rss_items as $item){
126 // Get the link
127 $link = $item->get_link();
128 while ( stristr($link, 'http') != $link ){ $link = substr($link, 1); }
129 $link = esc_url(strip_tags($link));
130
131 // Get the item title
132 $title = esc_attr(strip_tags($item->get_title()));
133 if ( empty($title) )
134 $title = __('No Title');
135
136 if($strip_title != 0){
137 $titleLen = strlen($title);
138 $title = wp_html_excerpt( $title, $strip_title );
139 $title = ($titleLen > $strip_title) ? $title . ' ...' : $title;
140 }
141
142 // Get the date
143 $date = $item->get_date('j F Y');
144
145 // Get thumbnail if present @since v2.2
146 $thumb = '';
147 if ($show_thumb == 1 && $enclosure = $item->get_enclosure()){
148 $thumburl = $enclosure->get_thumbnail();
149 if(!empty($thumburl))
150 $thumb = '<img src="' . $thumburl . '" alt="' . $title . '" class="srr-thumb" align="left"/>';
151 }
152
153 // Get the description
154 $desc = str_replace( array("\n", "\r"), ' ', esc_attr( strip_tags( @html_entity_decode( $item->get_description(), ENT_QUOTES, get_option('blog_charset') ) ) ) );
155 if($strip_desc != 0){
156 $desc = wp_html_excerpt( $desc, $strip_desc );
157 $rmore = (!empty($read_more)) ? '<a href="' . $link . '" title="Read more">' . $read_more . '</a>' : '';
158
159 if ( '[...]' == substr( $desc, -5 ) )
160 $desc = substr( $desc, 0, -5 );
161 elseif ( '[&hellip;]' != substr( $desc, -10 ) )
162 $desc .= '';
163
164 $desc = esc_html( $desc );
165 }
166 $desc = $thumb . $desc . ' ' . $rmore;
167
168 // Get the author
169 $author = $item->get_author();
170 if ( is_object($author) ) {
171 $author = $author->get_name();
172 $author = esc_html(strip_tags($author));
173 }
174
175 // Open links in new tab
176 $newtab = ($open_newtab) ? ' target="_blank"' : '';
177
178 echo "\n\n\t";
179
180 // Display the feed items
181 echo '<div class="srr-item ' . (($j%2 == 0) ? 'even' : 'odd') . '">';
182 echo '<div class="srr-title"><a href="' . $link . '"' . $newtab . ' title="Posted on ' . $date . '">' . $title . '</a></div>';
183 echo '<div class="srr-meta">';
184
185 if($show_date && !empty($date))
186 echo '<time class="srr-date">' . $date . '</time>';
187
188 if($show_author && !empty($author))
189 echo ' - <cite class="srr-author">' . $author . '</cite>';
190
191 echo '</div>';
192
193 if($show_desc)
194 echo '<p class="srr-summary srr-clearfix">' . $desc . '</p>';
195
196 echo '</div>';
197 // End display
198
199 $j++;
200 }
201 }
202
203 // Outer wrap end
204 echo "\n\n</div>
205 </div> \n\n" ;
206
207 }
208 }
209
210 class super_rss_reader_widget extends WP_Widget{
211 ## Initialize
212 function super_rss_reader_widget(){
213 $widget_ops = array(
214 'classname' => 'widget_super_rss_reader',
215 'description' => "Enhanced RSS feed reader widget with advanced features."
216 );
217
218 $control_ops = array('width' => 430, 'height' => 500);
219 parent::WP_Widget('super_rss_reader', 'Super RSS Reader', $widget_ops, $control_ops);
220 }
221
222 ## Display the Widget
223 function widget($args, $instance){
224 extract($args);
225 if(empty($instance['title'])){
226 $title = '';
227 }else{
228 $title = $before_title . apply_filters('widget_title', $instance['title'], $instance, $this->id_base) . $after_title;
229 }
230
231 echo $before_widget . $title;
232 echo "\n" . '
233 <!-- Start - Super RSS Reader v' . SRR_VERSION . '-->
234 <div class="super-rss-reader-widget">' . "\n";
235
236 srr_rss_parser($instance);
237
238 echo "\n" . '</div>
239 <!-- End - Super RSS Reader -->
240 ' . "\n";
241 echo $after_widget;
242 }
243
244 ## Save settings
245 function update($new_instance, $old_instance){
246 $instance = $old_instance;
247 $instance['title'] = stripslashes($new_instance['title']);
248 $instance['urls'] = stripslashes($new_instance['urls']);
249
250 $instance['count'] = intval($new_instance['count']);
251 $instance['show_date'] = intval($new_instance['show_date']);
252 $instance['show_desc'] = intval($new_instance['show_desc']);
253 $instance['show_author'] = intval($new_instance['show_author']);
254 $instance['show_thumb'] = stripslashes($new_instance['show_thumb']);
255 $instance['open_newtab'] = intval($new_instance['open_newtab']);
256 $instance['strip_desc'] = intval($new_instance['strip_desc']);
257 $instance['strip_title'] = intval($new_instance['strip_title']);
258 $instance['read_more'] = stripslashes($new_instance['read_more']);
259
260 $instance['color_style'] = stripslashes($new_instance['color_style']);
261 $instance['enable_ticker'] = intval($new_instance['enable_ticker']);
262 $instance['visible_items'] = intval($new_instance['visible_items']);
263 $instance['ticker_speed'] = intval($new_instance['ticker_speed']);
264
265 return $instance;
266 }
267
268 ## HJA Widget form
269 function form($instance){
270 global $srr_color_styles;
271
272 $instance = wp_parse_args( (array) $instance, array(
273 'title' => '', 'urls' => '', 'count' => 5,
274 'show_date' => 0, 'show_desc' => 1, 'show_author' => 0, 'show_thumb' => 1,
275 'open_newtab' => 1, 'strip_desc' => 100, 'read_more' => '[...]',
276 'color_style' => 'none', 'enable_ticker' => 1, 'visible_items' => 5,
277 'strip_title' => 0, 'ticker_speed' => 2,
278 ));
279
280 $title = htmlspecialchars($instance['title']);
281 $urls = htmlspecialchars($instance['urls']);
282
283 $count = intval($instance['count']);
284 $show_date = intval($instance['show_date']);
285 $show_desc = intval($instance['show_desc']);
286 $show_author = intval($instance['show_author']);
287 $show_thumb = intval($instance['show_thumb']);
288 $open_newtab = intval($instance['open_newtab']);
289 $strip_desc = intval($instance['strip_desc']);
290 $strip_title = intval($instance['strip_title']);
291 $read_more = htmlspecialchars($instance['read_more']);
292
293 $color_style = stripslashes($instance['color_style']);
294 $enable_ticker = intval($instance['enable_ticker']);
295 $visible_items = intval($instance['visible_items']);
296 $ticker_speed = intval($instance['ticker_speed']);
297
298 ?>
299 <div class="srr_settings">
300 <table width="100%" height="72" border="0">
301 <tr>
302 <td width="13%" height="33"><label for="<?php echo $this->get_field_id('title'); ?>">Title: </label></td>
303 <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>
304 </tr>
305 <tr>
306 <td><label for="<?php echo $this->get_field_id('urls'); ?>">URLs: </label></td>
307 <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"/>
308 <small class="srr_smalltext">Can enter multiple RSS/atom feed URLs seperated by a comma.</small>
309 </td>
310 </tr>
311 </table>
312 </div>
313
314 <div class="srr_settings">
315 <h4>Settings</h4>
316 <table width="100%" border="0">
317 <tr>
318 <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>
319 <td width="40%"><label for="<?php echo $this->get_field_id('show_desc'); ?>">Show Description</label></td>
320 <td width="28%"><label for="<?php echo $this->get_field_id('count');?>">Count</label></td>
321 <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>
322 </tr>
323 <tr>
324 <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>
325 <td><label for="<?php echo $this->get_field_id('show_date'); ?>">Show Date</label></td>
326 <td><label for="<?php echo $this->get_field_id('strip_desc');?>">Strip description</label></td>
327 <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="The number of charaters to be displayed. Use 0 to disable stripping"/> </td>
328 </tr>
329 <tr>
330 <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>
331 <td><label for="<?php echo $this->get_field_id('show_author'); ?>">Show Author</label></td>
332 <td><label for="<?php echo $this->get_field_id('read_more'); ?>">Read more text</label></td>
333 <td><input id="<?php echo $this->get_field_name('read_more'); ?>" name="<?php echo $this->get_field_name('read_more'); ?>" type="text" value="<?php echo $read_more; ?>" class="widefat" title="Leave blank to hide read more text"/></td>
334 </tr>
335 <tr>
336 <td height="29"><input id="<?php echo $this->get_field_id('open_newtab'); ?>" type="checkbox" name="<?php echo $this->get_field_name('open_newtab'); ?>" value="1" <?php echo $open_newtab == "1" ? 'checked="checked"' : ""; ?> /></td>
337 <td><label for="<?php echo $this->get_field_id('open_newtab'); ?>">Open links in new tab</label></td>
338 <td><label for="<?php echo $this->get_field_id('strip_title'); ?>">Strip Title</label></td>
339 <td><input id="<?php echo $this->get_field_id('strip_title');?>" name="<?php echo $this->get_field_name('strip_title'); ?>" type="text" value="<?php echo $strip_title; ?>" class="widefat" title="The number of charaters to be displayed. Use 0 to disable stripping"/></td>
340 </tr>
341 <tr>
342 <td height="29"><input id="<?php echo $this->get_field_id('show_thumb'); ?>" type="checkbox" name="<?php echo $this->get_field_name('show_thumb'); ?>" value="1" <?php echo $show_thumb == "1" ? 'checked="checked"' : ""; ?> /></td>
343 <td><label for="<?php echo $this->get_field_id('show_thumb'); ?>">Show thumbnail if present</label></td>
344 <td>&nbsp;</td>
345 <td>&nbsp;</td>
346 </tr>
347 </table>
348 </div>
349
350 <div class="srr_settings">
351 <h4>Other settings</h4>
352 <table width="100%" height="109" border="0">
353 <tr>
354 <td height="32"><label>Color style: </label></td>
355 <td>
356 <?php
357 echo '<select name="' . $this->get_field_name('color_style') . '" id="' . $this->get_field_id('color_style') . '">';
358 foreach($srr_color_styles as $k => $v){
359 echo '<option value="' . $v . '" ' . ($color_style == $v ? 'selected="selected"' : "") . '>' . $k . '</option>';
360 }
361 echo '</select>';
362 ?>
363 </td>
364 </tr>
365 <tr>
366 <td height="33"><label for="<?php echo $this->get_field_id('enable_ticker'); ?>">Ticker animation:</label> </td>
367 <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>
368 </tr>
369 <tr>
370 <td height="36"><label for="<?php echo $this->get_field_id('visible_items');?>">Visible items: </label></td>
371 <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."/>
372 </td>
373 </tr>
374 <tr>
375 <td height="36"><label for="<?php echo $this->get_field_id('ticker_speed');?>">Ticker speed: </label></td>
376 <td><input id="<?php echo $this->get_field_id('ticker_speed');?>" name="<?php echo $this->get_field_name('ticker_speed'); ?>" type="text" value="<?php echo $ticker_speed; ?>" title="Speed of the ticker in seconds"/> seconds
377 </td>
378 </tr>
379 </table>
380 </div>
381
382 <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>
383 <small>Please donate and share this plugin to show your support. Thank you :)</small>
384
385 <?php
386 }
387 }
388
389 function super_rss_reader_init(){
390 register_widget('super_rss_reader_widget');
391 }
392 add_action('widgets_init', 'super_rss_reader_init');
393
394 function srr_widget_scripts(){
395 if(in_array($GLOBALS['pagenow'], array('widgets.php'))){
396 ?>
397 <style type="text/css">
398 .srr_settings h4{
399 border-bottom: 1px solid #DFDFDF;
400 margin: 20px -11px 10px -11px;
401 padding: 5px 11px 5px 11px;
402 border-top: 1px solid #DFDFDF;
403 background-color: #fff;
404 background-image: -ms-linear-gradient(top,#fff,#f9f9f9);
405 background-image: -moz-linear-gradient(top,#fff,#f9f9f9);
406 background-image: -o-linear-gradient(top,#fff,#f9f9f9);
407 background-image: -webkit-gradient(linear,left top,left bottom,from(#fff),to(#f9f9f9));
408 background-image: -webkit-linear-gradient(top,#fff,#f9f9f9);
409 background-image: linear-gradient(top,#fff,#f9f9f9);
410 }
411 .srr_support{
412 border: 1px solid #DFDFDF;
413 padding: 5px 13px;
414 background: #F9F9F9;
415 text-decoration:none;
416 margin: 10px -13px;
417 }
418 .srr_support a{
419 text-decoration: none;
420 }
421 .srr_support a:hover{
422 text-decoration: underline;
423 }
424 .srr_smalltext{
425 font-size: 11px;
426 color: #666666;
427 }
428 .srr_support{
429 border: 1px solid #DFDFDF;
430 padding: 5px 13px;
431 background: #F9F9F9;
432 text-decoration:none;
433 margin: 10px -13px;
434 }
435 .srr_support a{
436 text-decoration: none;
437 }
438 .srr_support a:hover{
439 text-decoration: underline;
440 }
441 .srr_fblike{
442 background: url('<?php echo SRR_URL; ?>images/like-button.png') no-repeat;
443 padding-left: 19px;
444 }
445 .srr_fblike span{
446 display: none;
447 }
448 .srr_fblike:hover span{
449 display: inline;
450 padding:10px;
451 margin: -15px 0px 0px -50px;
452 position:absolute;
453 background:#ffffff;
454 border:1px solid #cccccc;
455 -webkit-box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.09);
456 -moz-box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.09);
457 box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.09);
458 -moz-border-radius: 5px;
459 border-radius: 5px;
460 }
461 </style>
462
463 <script type="text/javascript">
464 jQuery(document).ready(function(){
465 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>';
466
467 jQuery('.srr_fblike').live('mouseenter', function(){
468 if(jQuery('.srr_fblike span').length == 0)
469 jQuery(this).prepend('<span>' + social + '</span>');
470 });
471
472 });
473 </script>
474
475 <?php
476 }
477 }
478 add_action('admin_footer', 'srr_widget_scripts');
479
480 ?>