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
super-rss-reader / super-rss-reader.php

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

405 lines 15.0 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.0
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.0');
18 define('SRR_AUTHOR', 'Aakash Chakravarthy');
19 define('SRR_URL', $srr_url);
20
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 }
34
35 ## Default color styles
36 $srr_color_styles = array(
37 'No style' => 'none',
38 'Grey' => 'grey',
39 'Dark' => 'dark'
40 );
41
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 }
98
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 }
162
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 }
313
314 function super_rss_reader_init(){
315 register_widget('super_rss_reader_widget');
316 }
317 add_action('widgets_init', 'super_rss_reader_init');
318
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 }
402 }
403 add_action('admin_footer', 'srr_widget_scripts');
404
405 ?>