WordPress.org

Plugin Directory


Ignore:
Timestamp:
10/25/11 22:43:49 (2 years ago)
Author:
PerS
Message:

Delicious removed their javascript feed so I had to do a total rewrite

File:
1 edited

Legend:

Unmodified
Added
Removed
  • delicious-tagroll-shortcode/trunk/ps_delicious_tagroll.php

    r175408 r455721  
    22/* 
    33Plugin Name: delicious tagroll shortcode 
    4 Version: 1.1 
     4Version: 2.0 
    55Plugin URI: http://www.soderlind.no/archives/2009/11/18/delicious-tagroll-for-wordpress/ 
    66Description: Adds shortcode "[delicious_tagroll username='username']" which displays a delicious tagroll similar to <a href="http://delicious.com/help/tagrolls">http://delicious.com/help/tagrolls</a> 
     
    1616 
    1717Change log 
     182.0 
     19- Delicious removed their javascript feed so I had to do a total rewrite. 
     20- Some attributes are removed from the shortcode (you can change these using the ps_delicious_tagroll.css style sheet): 
     21     * mincolor 
     22     * maxcolor 
     23     * flow 
     24- Also removed 
     25     * showname 
     26     * showadd 
     27 - Added a new attribute: 
     28     * mincount (default mincount="10"), eg. show only tags with 10 or more links      
    18291.1 
    1930- changed parameter name="true" to showname="true" 
     
    2536*/ 
    2637 
    27  
    28 class ps_delicious_tagroll { 
    29     private $url = ""; 
    30     private $urlpath = ""; 
    31     private $doparamcheck = true; 
    32     function __construct() { 
    33         add_action('init',array(&$this,'ps_delicious_tagroll_init')); 
    34         add_action('wp_print_styles', array(&$this,'ps_delicious_tagroll_style')); // add styles (located at the end of this file) 
    35         add_shortcode('delicious_tagroll', array(&$this,'delicious_tagroll_func'));  
    36     } 
    37  
    38      
    39     // [delicious_tagroll username="username"] 
    40     // supported parameter values are "documented" at: http://delicious.com/help/tagrolls 
     38/* 
     39Credits:  
     40    This template is based on the template at http://pressography.com/plugins/wordpress-plugin-template/  
     41    My changes are documented at http://soderlind.no/archives/2010/03/04/wordpress-plugin-template/ 
     42*/ 
     43 
     44define(RSSCACHE_TIME, 3600); // one hour, NEVER set this lower than 1200 (20 minutes) - webmasters will hate you otherwise. 
     45 
     46 
     47if (!class_exists('ps_delicious_tagroll')) { 
     48    class ps_delicious_tagroll { 
     49        /** 
     50        * @var string $url The url to this plugin 
     51        */  
     52        var $url = ''; 
     53        /** 
     54        * @var string $urlpath The path to this plugin 
     55        */ 
     56        var $urlpath = ''; 
     57        /** 
     58        * @var string $urlpath The path to this plugin 
     59        */ 
     60        var $rsscachepath = ''; 
     61 
     62        //Class Functions 
     63        /** 
     64        * PHP 4 Compatible Constructor 
     65        */ 
     66        function ps_delicious_tagroll(){$this->__construct();} 
     67 
     68        /** 
     69        * PHP 5 Constructor 
     70        */       
     71        function __construct(){ 
     72            //"Constants" setup 
     73            $this->url = plugins_url(basename(__FILE__), __FILE__); 
     74            $this->urlpath = plugins_url('', __FILE__);  
     75            $this->rsscachepath = trailingslashit( ABSPATH . '/wp-content/aggrss-cache'); 
     76 
     77            //Actions 
     78            add_action("init", array(&$this,"ps_delicious_tagroll_init")); 
     79            add_action('wp_print_styles', array(&$this,'ps_delicious_tagroll_style')); // add styles (located at the end of this file) 
     80            add_shortcode('delicious_tagroll', array(&$this,'delicious_tagroll_func')); 
     81        } 
     82 
    4183    function delicious_tagroll_func($atts) { 
    4284        extract(shortcode_atts(array( 
    4385            'username'   => 'soderlind', //if you forget to add username="yourusername", my delicious tagroll will be shown ;) 
    4486            'title'      => 'My Delicious Tags', 
    45             'icon'       => 'true', 
    4687            'count'      => '100', 
    4788            'sort'       => 'alpha', 
    48             'flow'       => 'cloud', 
    49             'showname'   => 'true', 
    50             'showadd'    => 'true', 
     89            'mincount'   => '10', 
    5190            'showcounts' => 'false', 
    52             'mincolor'   => '73adff', 
    53             'maxcolor'   => '3274d0', 
    5491            'minfont'    => '12', 
    5592            'maxfont'    => '35', 
    5693        ), $atts)); 
     94         
    5795        // do param testing 
    58          
    59         if ($this->doparamcheck) { 
    6096        //string 
    61             $username    = urlencode( wp_filter_nohtml_kses($username)); 
    62             $title       = urlencode( wp_filter_nohtml_kses($title)); 
    63             //bool 
    64             $icon        = (strtolower($icon) == "true"); 
    65             $name        = (strtolower($name) == "true"); 
    66             $showadd     = (strtolower($showadd) == "true"); 
    67             $showcounts  = (strtolower($showcounts) == "true"); 
    68             //int 
    69             $count       = strval(intval($count)); 
    70             $minfont     = strval(intval($minfont)); 
    71             $maxfont     = strval(intval($maxfont)); 
    72             //hex 
    73             $mincolor    = ((strlen($mincolor) == 6) && ctype_xdigit($mincolor)) ? $mincolor : "73adff"; 
    74             $maxcolor    = ((strlen($maxcolor) == 6) && ctype_xdigit($maxcolor)) ? $maxcolor : "3274d0"; 
    75             //choice 
    76             $sort        = ($sort == "freq") ? "freq" : "alpha"; 
    77             $flow        = ($flow == "list") ? "list" : "cloud"; 
     97        $username    = urlencode( wp_filter_nohtml_kses($username)); 
     98        $title       = urlencode( wp_filter_nohtml_kses($title)); 
     99        //bool 
     100        $showcounts  = (strcasecmp($showcounts,"true") == 0); 
     101        //int 
     102        $mincount    = strval(intval($mincount)); 
     103        $count       = strval(intval($count)); 
     104        $minfont     = strval(intval($minfont)); 
     105        $maxfont     = strval(intval($maxfont)); 
     106        //choice 
     107        $sort        = ($sort == "freq") ? "freq" : "alpha"; 
     108                 
     109         
     110        $feed_url = sprintf("http://feeds.delicious.com/v2/rss/tags/%s?count=%s",$username,$count); 
     111         
     112        if ($rs = $this->aggrss($feed_url)) {            
     113            $tag_cloud = "<div class='ps_delicious_tagroll'>\n"; 
     114            if ($title != "") { 
     115                $tag_cloud .= sprintf("<h2>%s</h2>\n",$title); 
     116            } 
     117 
     118            if ($rs['items_count'] <= 0) { 
     119                $tag_cloud .= "Sorry, no items found"; 
     120            } else {             
     121                $tag_cloud .= "<ul>\n"; 
     122                if ($sort == "freq") { 
     123                    usort($rs['items'], array(&$this,'ps_delicious_tagroll_custom_sort_numtags_desc')); 
     124                } else { 
     125                    usort($rs['items'], array(&$this,'ps_delicious_tagroll_custom_sort_alpha_asc')); 
     126                } 
     127                 
     128                $max = $this->ps_delicious_tagroll_get_max($rs['items']); 
     129                $min = $this->ps_delicious_tagroll_get_min($rs['items']); 
     130                 
     131                foreach ($rs['items'] as $item) { 
     132                    if ($item['description'] >= $mincount) {                         
     133                        $multiplier = ($maxfont-$minfont)/($max-$min); 
     134                        $fontsize = $minfont + (($max-($max-($item['description']-$min)))*$multiplier); 
     135                        if ($showcounts == true) { 
     136                            $tag_cloud .=  sprintf("<li><a style='font-size: %dpx;' href='%s'>%s</a>(%d)</li>\n", $fontsize , $item['guid'], $item['title'],$item['description']); 
     137                        } else { 
     138                            $tag_cloud .=  sprintf("<li><a style='font-size: %dpx;' href='%s'>%s</a></li>\n", $fontsize , $item['guid'], $item['title']); 
     139                        } 
     140                    } 
     141                } 
     142                $tag_cloud .= "</ul>\n"; 
     143            } 
     144            $tag_cloud .= "</div>\n"; 
     145            return $tag_cloud; 
     146        } else { 
     147            return "<!-- It's not possible to reach Delicious -->"; 
    78148        } 
    79         return sprintf("<script type='text/javascript' src='http://feeds.delicious.com/v2/js/tags/%s?title=%s%s&count=%s&sort=%s&flow=%s%s%s%s&color=%s-%s&size=%s-%s'></script>'", 
    80         $username,$title,($icon==true ? "&icon" : ""),$count,$sort,$flow,($name == true ? "&name" : ""),($showadd == true ? "&showadd" : ""),($showcounts == true ? "&totals" : ""), $mincolor,$maxcolor,$minfont,$maxfont); 
    81     } 
     149    } 
     150     
     151    function ps_delicious_tagroll_get_max($arr) { 
     152        usort($arr, array(&$this,'ps_delicious_tagroll_custom_sort_numtags_desc')); 
     153        return $arr[0]['description']; 
     154    } 
     155 
     156    function ps_delicious_tagroll_get_min($arr) { 
     157        usort($arr, array(&$this,'ps_delicious_tagroll_custom_sort_numtags_asc')); 
     158        return $arr[0]['description']; 
     159    } 
     160 
     161     
     162    function ps_delicious_tagroll_custom_sort_numtags_desc($a,$b) { 
     163        return $a['description'] < $b['description']; 
     164    } 
     165 
     166    function ps_delicious_tagroll_custom_sort_numtags_asc($a,$b) { 
     167        return $a['description'] > $b['description']; 
     168    } 
     169 
     170    function ps_delicious_tagroll_custom_sort_alpha_asc($a,$b) { 
     171        //return $a['title'] > $b['title']; 
     172        return strcasecmp($a['title'] ,$b['title'] ); 
     173    } 
     174 
    82175     
    83176    function ps_delicious_tagroll_init() { 
    84         $this->url = trailingslashit( get_bloginfo('wpurl') ) . substr( __FILE__, strlen($_SERVER['DOCUMENT_ROOT'])+1); 
    85         $this->urlpath = dirname($this->url); 
    86     } 
    87      
     177        global $ps_delicious_tagroll_lastRSS; 
     178        require_once(dirname(__FILE__) . '/lastRSS/lastRSS.php'); 
     179         
     180        if ( !file_exists($this->rsscachepath) ) : 
     181            if ( is_writable( dirname($this->rsscachepath) ) ) 
     182                $dir = mkdir( $this->rsscachepath, 0777); 
     183            else 
     184                die("Your cache directory (<code>" . $this->rsscachepath . "</code>) needs to be writable for this plugin to work. Double-check it. <a href='" . get_settings('siteurl') . "/wp-admin/plugins.php?action=deactivate&amp;plugin=wp-lastRSS.php'>Deactivate the aggrss plugin</a>."); 
     185        endif; 
     186        // create lastRSS object 
     187        $ps_delicious_tagroll_lastRSS = new lastRSS;  
     188        // setup transparent cache 
     189        $ps_delicious_tagroll_lastRSS->cache_dir = $this->rsscachepath; 
     190        $ps_delicious_tagroll_lastRSS->cache_time = RSSCACHE_TIME;  
     191        // 
     192        $ps_delicious_tagroll_lastRSS->date_format = 'U'; 
     193    } 
     194         
     195 
     196    function aggrss($rssurl,$striptags=false,$num=0) { 
     197        global $ps_delicious_tagroll_lastRSS; 
     198        $ps_delicious_tagroll_lastRSS->CDATA= ($striptags) ? "strip" : "content" ; 
     199        $ps_delicious_tagroll_lastRSS->items_limit=$num; 
     200        if ($aggr = $ps_delicious_tagroll_lastRSS->Get($rssurl)) 
     201            return $aggr; 
     202        else 
     203            return 0; 
     204    } 
    88205 
    89206    function ps_delicious_tagroll_style() { 
    90         wp_enqueue_style('delicious_tagroll_style',  $this->url . "?ps_delicious_tagroll_style"); 
    91     } 
    92      
     207        wp_enqueue_style('delicious_tagroll_style',  $this->urlpath . "/ps_delicious_tagroll.css"); 
     208    } 
     209    } //End Class 
     210} //End if class exists statement 
     211 
     212 
     213if (class_exists('ps_delicious_tagroll')) {  
     214    $ps_delicious_tagroll_var = new ps_delicious_tagroll(); 
    93215} 
    94  
    95 if (isset($_GET['ps_delicious_tagroll_style'])) { 
    96     Header("content-type: text/css"); 
    97     echo<<<ENDCSS 
    98 /** 
    99 * @desc modify delicious tagroll, add css here 
    100 * @author Per Soderlind - www.soderlind.no 
    101 */ 
    102  
    103  
    104      
    105 ENDCSS; 
    106  
    107 } else { 
    108     $ps_tagroll = new ps_delicious_tagroll(); 
    109 } 
     216?> 
Note: See TracChangeset for help on using the changeset viewer.