WordPress.org

Plugin Directory

Changeset 204913


Ignore:
Timestamp:
02/13/10 18:22:00 (4 years ago)
Author:
KopiPejst
Message:

sidebar widget

Location:
twitter-flock/trunk
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • twitter-flock/trunk/README.txt

    r201637 r204913  
    11=== Twitter Flock === 
    22Contributors: Ivan Lazarevic 
    3 Tags: twitter 
     3Tags: twitter, sidebar 
    44Requires at least: 2.3  
    55Tested up to: 2.8 
    66Stable tag: trunk 
    77 
    8 Displaying tweets from multiple accounts with caching and different color scheme for every account. 
     8Displaying tweets from multiple accounts with caching and different color scheme for every account. With sidebar widget feature. 
    99 
    1010== Description == 
     
    1717- show only tweets with defined hash tag,  
    1818- link url inside of tweets,  
    19 - display tab with accounts avatars so visitors can select which account tweets wants to see. 
     19- display tab with accounts avatars so visitors can select which account tweets wants to see, 
     20- easy implement as sidebar widget. 
    2021 
    2122You can find more informations about this plugin on <a href="http://www.workshop.rs">www.workshop.rs</a> 
     
    25261. Upload `twitter-flock` directory to the `/wp-content/plugins/` directory 
    26272. Activate the plugin through the 'Plugins' menu in WordPress 
    27 3. Add this &lt;&#63;php include (ABSPATH . '/wp-content/plugins/twitter-flock/twitter-flock.php'); &#63;&#62; in header of your template 
    28 4. Put &lt;&#63;php TwitterFlock(); &#63;&#62; in your template on place where you want Twitter Flock to show tweets 
     283. Put &lt;&#63;php TwitterFlock(); &#63;&#62; in your template on place where you want Twitter Flock to show tweets - or - 
     294. Drag widget on your sidebar 
    29305. Set options on admin panel 
    3031 
     
    33341. Twitter Flock in action 
    34352. Options for Twitter Flock 
     363. Sidebar widget 
    3537 
     38== Changelog == 
     39 
     40= 1.1 = 
     41 
     42- Sidebar widget 
     43- No need for inlude line in header 
     44- Avatar is taken from first post 
     45 
  • twitter-flock/trunk/twitter-flock-content.php

    r201635 r204913  
    22/* 
    33Plugin Name: Twitter Flock 
    4 Plugin URI: http://www.workshop.rs 
    5 Description: Displaying tweets from multiple accounts with caching and different color scheme for every account. 
    6 Version: 1.0 
     4Plugin URI: http://workshop.rs/2010/02/twitter-flock-for-wordpress-multiple-accounts-tweets-with-style/ 
     5Description: Displaying tweets from multiple accounts with caching and different color scheme for every account. With sidebar widget feature. 
     6Version: 1.1 
    77Author: Ivan Lazarevic 
    8 Author URI: http://www.workshop.rs 
     8Author URI: http://workshop.rs 
    99*/ 
    1010 
     
    4646} 
    4747 
     48 
     49function TwitterFlock(){ 
     50    new TwitterFlockStart; 
     51} 
     52 
     53class TwitterFlockStart { 
     54 
     55    private $users; 
     56    private $no_of_statuses; 
     57    private $hashes; 
     58    private $avatars; 
     59 
     60    private $T_URL    = "http://twitter.com/statuses/user_timeline/"; 
     61    private $T_FORMAT = ".xml"; 
     62    private $T_CACHE; 
     63 
     64     
     65    function __construct(){ 
     66         
     67        $force = $_GET['tf_force']; // force source from url 
     68        $this->T_CACHE = dirname(__FILE__) . '/cache/cache.ch'; 
     69         
     70        $users = get_option('tf_usernames'); 
     71        $this->users = explode(",",$users); 
     72         
     73        $this->no_of_statuses = is_numeric(get_option('tf_number')) ? get_option('tf_number') : 15; 
     74        $hashes = get_option('tf_hashes'); 
     75        $this->hashes = explode(",",$hashes); 
     76 
     77        if($force) 
     78            $data = $this->tf_getData($force); 
     79        else 
     80            $data = $this->tf_getData(); 
     81         
     82        echo "<div id='twitter-flock'>"; 
     83            if(get_option('tf_tabs') != "") 
     84                $this->tf_printHeader($data); 
     85            $this->tf_printData($data); 
     86        echo "</div>"; 
     87    } 
     88     
     89     
     90    /** 
     91     * Return data to display 
     92     * Calculate source, Api or Cache 
     93     *  
     94     * @param $force - if we want to force data source, API or CACHE 
     95     *  
     96     */ 
     97    private function tf_getData($force = ''){ 
     98 
     99        if($force == 'CACHE'){ 
     100            if(file_exists($this->T_CACHE)){ 
     101                $data = unserialize(file_get_contents($this->T_CACHE)); 
     102                return $data; 
     103            } else { 
     104                echo "Sorry, we're not able to show data from Twitter"; 
     105            } 
     106        } 
     107         
     108        if($force == 'API'){ 
     109            $data = $this->tf_getApiData(); 
     110            return $data; 
     111        } 
     112         
     113        if(file_exists($this->T_CACHE)){ 
     114            $cache_time = filemtime($this->T_CACHE); 
     115            if(time()-$cache_time > 60){ 
     116                $data = $this->tf_getApiData(); 
     117            } else { 
     118                $data = unserialize(file_get_contents($this->T_CACHE)); 
     119            } 
     120        } else { 
     121            $data = $this->tf_getApiData(); 
     122        } 
     123         
     124        return $data; 
     125         
     126    } 
     127     
     128    /** 
     129     *  
     130     * Create array from Twitter API response 
     131     *  
     132     */  
     133    public function tf_getApiData(){ 
     134         
     135        foreach ($this->users as $key=>$name){ 
     136             
     137            $url = $this->T_URL.$name.$this->T_FORMAT; 
     138            $xml = @simplexml_load_file($url); 
     139 
     140            /* if there is error in Twitter response force data from Cache */ 
     141            if(!$xml) { 
     142                $data = $this->tf_getData('CACHE'); 
     143                return $data; 
     144            } 
     145             
     146            foreach ($xml as $x){ 
     147                 
     148                $tmp['text']        = (string)$x->text; 
     149                $tmp['time']        = (string)$x->created_at; 
     150                $tmp['timestamp']   = (string)strtotime($x->created_at); 
     151                $tmp['name']        = (string)$x->user->name; 
     152                $tmp['username']    = (string)$x->user->screen_name; 
     153                $tmp['avatar']      = (string)$x->user->profile_image_url; 
     154                $sts[] = $tmp; 
     155                 
     156            } 
     157        } 
     158         
     159        /* sort statuses array by timestamp */ 
     160            $tmp = $sts; 
     161            foreach ($tmp as $key=>$row) { 
     162                $text[$key] = $row['timestamp']; 
     163            } 
     164         
     165            array_multisort($text,SORT_DESC,$tmp); 
     166         
     167            $sts = $tmp; 
     168        /* end sorting */        
     169             
     170        /* put data in file for latter use : cache */    
     171            $cache = fopen($this->T_CACHE, 'w'); 
     172            fwrite($cache, serialize($sts)); 
     173            fclose($cache); 
     174         
     175        return $sts;     
     176    } 
     177     
     178 
     179    /** 
     180     * Print Twitter data 
     181     *  
     182     * @param $sts - array of twitter data 
     183     *  
     184     */ 
     185    private function tf_printData($sts){ 
     186         
     187        $i = 0; 
     188        echo "<div id='twitter-flock-body'>"; 
     189 
     190        foreach ($sts as $key=>$val){ 
     191             
     192            if($this->tf_checkHashes($val['text'])) continue; 
     193             
     194            $screenname = "<a href='http://www.twitter.com/".$val['username']."'>".$val['name'].":</a>"; 
     195            $img        = "<img src='{$val['avatar']}' />"; 
     196            $text       = $this->tf_parseStatus($val['text']); 
     197            $username   = strtolower($val['username']); 
     198             
     199            if(get_option('tf_photos') == '') $img = ''; 
     200             
     201            echo "<div class='tf_status tf_$username'>$img<b class='tf_name'>$screenname </b><span class='tf_text'>$text </span><br /><span class='tf_time'>{$this->tf_showTime($val['timestamp'])}</span></div>"; 
     202            $i++; 
     203            if($i == $this->no_of_statuses) break; 
     204             
     205        } 
     206        echo "</div>"; 
     207 
     208    } 
     209         
     210    private function tf_printHeader($sts){ 
     211 
     212        foreach($sts as $key=>$val){ 
     213 
     214            if($this->tf_checkHashes($val['text'])) continue; 
     215             
     216            $username           = strtolower($val['username']); 
     217            $img                = "<img src='{$val['avatar']}' class='tf_$username' />"; 
     218            if(!$avatars[$username]) $avatars[$username] = $img; 
     219             
     220        } 
     221 
     222        $sts = get_option('tf_usernames'); 
     223        $sts = explode(',',$sts); 
     224         
     225        echo "<div id='twitter-flock-tabs'>"; 
     226        $firstImg = get_bloginfo('wpurl')."/wp-content/plugins/twitter-flock/img/all_tweets.png"; 
     227        echo "<a href='javascript:void(0)' class='tf_tabs' id='tf_all'><img src='$firstImg' title='all' /></a>"; 
     228        foreach ($sts as $key=>$val){ 
     229            $name   = "<a href='javascript:void(0)' class='tf_tabs' id='tf_$val' title='$val' >{$avatars[$val]}</a>"; 
     230            echo $name; 
     231        } 
     232        echo "</div>"; 
     233         
     234        echo <<<T 
     235 
     236        <script> 
     237         
     238            $('.tf_tabs').css('opacity','0.4'); 
     239            $('.tf_tabs:first').css('opacity','1'); 
     240         
     241            $('.tf_tabs').click( function(){ 
     242                $('.tf_tabs').css('opacity','0.4'); 
     243                if($(this).attr('id') == 'tf_all') 
     244                    $('.tf_status').show(); 
     245                else 
     246                    $('.tf_status').hide(); 
     247                $('.' + $(this).attr('id')).show(); 
     248                $(this).css('opacity','1'); 
     249            }); 
     250         
     251        </script> 
     252         
     253T; 
     254         
     255    } 
     256     
     257    /** 
     258     * Create 'human readable' date format from timestamp 
     259     *  
     260     * @param $ts - timestamp 
     261     *  
     262     * TODO fix for 1st, 2nd, 3rd  
     263     *  
     264     */ 
     265    private function tf_showTime($ts){ 
     266        $c = time() - $ts; 
     267        $nd = date('g:i A M d\, Y',$ts); 
     268         
     269        if ($c < 60) return $c.' seconds ago'; 
     270        elseif ($c < 3600) return (int)($c/60).' minutes ago'; 
     271        elseif ($c < 3600*24) return (int)($c/3600).' hours ago'; 
     272        else return $nd; 
     273    } 
     274 
     275     
     276    /** 
     277     *  
     278     * Adding links, screen names, keywords  
     279     * Remove unwanted hashes 
     280     *  
     281     * @param $text - Twitter message 
     282     *  
     283     */  
     284    private function tf_parseStatus($text){ 
     285         
     286        global $escape_hashes; 
     287        // add urls 
     288        if(get_option('tf_https') != '') 
     289            $text = preg_replace('@((https?|ftp|file)://([-\w\.]+)+(:\d+)?(/([\w/_\.-]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $text); 
     290         
     291        // add screen name 
     292        if(get_option('tf_screennames') != '') 
     293            $text = preg_replace('#(@)(([^\s\,]+))#', '$1<a href="http://twitter.com/$2">$2</a>', $text);    
     294         
     295        // remove unwanted hashes 
     296        if(get_option('tf_removehashes') != ''){ 
     297            if($this->hashes[0] != ''){ 
     298                foreach($this->hashes as $val){ 
     299                    if(!strpos($text,$val)) continue; 
     300                    $text = str_replace($val,'',$text); 
     301                } 
     302            } 
     303        } 
     304     
     305        // add keywords  
     306        if(get_option('tf_chashes') != '') 
     307            $text = preg_replace('@(#([^\s\,]+))@', '<a href="http://twitter.com/search?q=$1">$1</a>', $text);   
     308     
     309        return $text; 
     310         
     311    } 
     312 
     313     
     314    /** 
     315     *  
     316     * Check does status have some of hashes that we want to display 
     317     *  
     318     * @param $text - Twitter message 
     319     *  
     320     */ 
     321    private function tf_checkHashes($text){ 
     322 
     323        if(get_option('tf_hashes') != ''){ 
     324            if($this->hashes[0] != ''){ 
     325                foreach($this->hashes as $val){ 
     326                    if(strpos($text,$val)) return false; 
     327                } 
     328            } 
     329            return true; 
     330        } else { 
     331            return false; 
     332        } 
     333         
     334    } 
     335} 
     336 
     337class TwitterFlock{ 
     338  function control(){ 
     339    echo 'Configure this widget on <a href="'.get_option('siteurl') . '/wp-admin/admin.php?page=twitter-flock/options.php'.'">options page</a>'; 
     340  } 
     341  function widget($args){ 
     342    echo $args['before_widget']; 
     343    new TwitterFlockStart(); 
     344    echo $args['after_widget']; 
     345  } 
     346  function register(){ 
     347    register_sidebar_widget('Twitter Flock', array('TwitterFlock', 'widget')); 
     348    register_widget_control('Twitter Flock', array('TwitterFlock', 'control')); 
     349  } 
     350} 
     351 
     352 
    48353add_action('wp_head','tf_head'); 
    49354add_action('admin_menu','tf_options_page'); 
     355add_action("widgets_init", array('TwitterFlock', 'register')); 
     356 
    50357 
    51358?> 
  • twitter-flock/trunk/twitter-flock.php

    r201635 r204913  
    1 <?php 
    2  
    3 /** 
    4  *   
    5  */ 
    6  
    7 function TwitterFlock(){ 
    8     new TwitterFlock; 
    9 } 
    10  
    11 class TwitterFlock { 
    12  
    13     private $users; 
    14     private $no_of_statuses; 
    15     private $hashes; 
    16     private $avatars; 
    17  
    18     private $T_URL    = "http://twitter.com/statuses/user_timeline/"; 
    19     private $T_FORMAT = ".xml"; 
    20     private $T_CACHE; 
    21  
    22      
    23     function __construct(){ 
    24          
    25         $force = $_GET['tf_force']; // force source from url 
    26         $this->T_CACHE = dirname(__FILE__) . '/cache/cache.ch'; 
    27          
    28         $users = get_option('tf_usernames'); 
    29         $this->users = explode(",",$users); 
    30          
    31         $this->no_of_statuses = is_numeric(get_option('tf_number')) ? get_option('tf_number') : 15; 
    32         $hashes = get_option('tf_hashes'); 
    33         $this->hashes = explode(",",$hashes); 
    34  
    35         if($force) 
    36             $data = $this->tf_getData($force); 
    37         else 
    38             $data = $this->tf_getData(); 
    39          
    40         echo "<div id='twitter-flock'>"; 
    41             if(get_option('tf_tabs') != "") 
    42                 $this->tf_printHeader($data); 
    43             $this->tf_printData($data); 
    44         echo "</div>"; 
    45     } 
    46      
    47      
    48     /** 
    49      * Return data to display 
    50      * Calculate source, Api or Cache 
    51      *  
    52      * @param $force - if we want to force data source, API or CACHE 
    53      *  
    54      */ 
    55     private function tf_getData($force = ''){ 
    56  
    57         if($force == 'CACHE'){ 
    58             if(file_exists($this->T_CACHE)){ 
    59                 $data = unserialize(file_get_contents($this->T_CACHE)); 
    60                 return $data; 
    61             } else { 
    62                 echo "Sorry, we're not able to show data from Twitter"; 
    63             } 
    64         } 
    65          
    66         if($force == 'API'){ 
    67             $data = $this->tf_getApiData(); 
    68             return $data; 
    69         } 
    70          
    71         if(file_exists($this->T_CACHE)){ 
    72             $cache_time = filemtime($this->T_CACHE); 
    73             if(time()-$cache_time > 60){ 
    74                 $data = $this->tf_getApiData(); 
    75             } else { 
    76                 $data = unserialize(file_get_contents($this->T_CACHE)); 
    77             } 
    78         } else { 
    79             $data = $this->tf_getApiData(); 
    80         } 
    81          
    82         return $data; 
    83          
    84     } 
    85      
    86     /** 
    87      *  
    88      * Create array from Twitter API response 
    89      *  
    90      */  
    91     public function tf_getApiData(){ 
    92          
    93         foreach ($this->users as $key=>$name){ 
    94              
    95             $url = $this->T_URL.$name.$this->T_FORMAT; 
    96             $xml = @simplexml_load_file($url); 
    97  
    98             /* if there is error in Twitter response force data from Cache */ 
    99             if(!$xml) { 
    100                 $data = $this->tf_getData('CACHE'); 
    101                 return $data; 
    102             } 
    103              
    104             foreach ($xml as $x){ 
    105                  
    106                 $tmp['text']        = (string)$x->text; 
    107                 $tmp['time']        = (string)$x->created_at; 
    108                 $tmp['timestamp']   = (string)strtotime($x->created_at); 
    109                 $tmp['name']        = (string)$x->user->name; 
    110                 $tmp['username']    = (string)$x->user->screen_name; 
    111                 $tmp['avatar']      = (string)$x->user->profile_image_url; 
    112                 $sts[] = $tmp; 
    113                  
    114             } 
    115         } 
    116          
    117         /* sort statuses array by timestamp */ 
    118             $tmp = $sts; 
    119             foreach ($tmp as $key=>$row) { 
    120                 $text[$key] = $row['timestamp']; 
    121             } 
    122          
    123             array_multisort($text,SORT_DESC,$tmp); 
    124          
    125             $sts = $tmp; 
    126         /* end sorting */        
    127              
    128         /* put data in file for latter use : cache */    
    129             $cache = fopen($this->T_CACHE, 'w'); 
    130             fwrite($cache, serialize($sts)); 
    131             fclose($cache); 
    132          
    133         return $sts;     
    134     } 
    135      
    136  
    137     /** 
    138      * Print Twitter data 
    139      *  
    140      * @param $sts - array of twitter data 
    141      *  
    142      */ 
    143     private function tf_printData($sts){ 
    144          
    145         $i = 0; 
    146         echo "<div id='twitter-flock-body'>"; 
    147  
    148         foreach ($sts as $key=>$val){ 
    149              
    150             if($this->tf_checkHashes($val['text'])) continue; 
    151              
    152             $screenname = "<a href='http://www.twitter.com/".$val['username']."'>".$val['name'].":</a>"; 
    153             $img        = "<img src='{$val['avatar']}' />"; 
    154             $text       = $this->tf_parseStatus($val['text']); 
    155             $username   = strtolower($val['username']); 
    156              
    157             if(get_option('tf_photos') == '') $img = ''; 
    158              
    159             echo "<div class='tf_status tf_$username'>$img<b class='tf_name'>$screenname </b><span class='tf_text'>$text </span><br /><span class='tf_time'>{$this->tf_showTime($val['timestamp'])}</span></div>"; 
    160             $i++; 
    161             if($i == $this->no_of_statuses) break; 
    162              
    163         } 
    164         echo "</div>"; 
    165  
    166     } 
    167          
    168     private function tf_printHeader($sts){ 
    169  
    170         foreach($sts as $key=>$val){ 
    171  
    172             if($this->tf_checkHashes($val['text'])) continue; 
    173              
    174             $username           = strtolower($val['username']); 
    175             $img                = "<img src='{$val['avatar']}' class='tf_$username' />"; 
    176  
    177             $avatars[$username] = $img; 
    178              
    179         } 
    180  
    181         $sts = get_option('tf_usernames'); 
    182         $sts = explode(',',$sts); 
    183          
    184         echo "<div id='twitter-flock-tabs'>"; 
    185         $firstImg = get_bloginfo('wpurl')."/wp-content/plugins/twitter-flock/img/all_tweets.png"; 
    186         echo "<a href='javascript:void(0)' class='tf_tabs' id='tf_all'><img src='$firstImg' title='all' /></a>"; 
    187         foreach ($sts as $key=>$val){ 
    188             $name   = "<a href='javascript:void(0)' class='tf_tabs' id='tf_$val' title='$val' >{$avatars[$val]}</a>"; 
    189             echo $name; 
    190         } 
    191         echo "</div>"; 
    192          
    193         echo <<<T 
    194  
    195         <script> 
    196          
    197             $('.tf_tabs').css('opacity','0.4'); 
    198             $('.tf_tabs:first').css('opacity','1'); 
    199          
    200             $('.tf_tabs').click( function(){ 
    201                 $('.tf_tabs').css('opacity','0.4'); 
    202                 if($(this).attr('id') == 'tf_all') 
    203                     $('.tf_status').show(); 
    204                 else 
    205                     $('.tf_status').hide(); 
    206                 $('.' + $(this).attr('id')).show(); 
    207                 $(this).css('opacity','1'); 
    208             }); 
    209          
    210         </script> 
    211          
    212 T; 
    213          
    214     } 
    215      
    216     /** 
    217      * Create 'human readable' date format from timestamp 
    218      *  
    219      * @param $ts - timestamp 
    220      *  
    221      * TODO fix for 1st, 2nd, 3rd  
    222      *  
    223      */ 
    224     private function tf_showTime($ts){ 
    225         $c = time() - $ts; 
    226         $nd = date('g:i A M d\, Y',$ts); 
    227          
    228         if ($c < 60) return $c.' seconds ago'; 
    229         elseif ($c < 3600) return (int)($c/60).' minutes ago'; 
    230         elseif ($c < 3600*24) return (int)($c/3600).' hours ago'; 
    231         else return $nd; 
    232     } 
    233  
    234      
    235     /** 
    236      *  
    237      * Adding links, screen names, keywords  
    238      * Remove unwanted hashes 
    239      *  
    240      * @param $text - Twitter message 
    241      *  
    242      */  
    243     private function tf_parseStatus($text){ 
    244          
    245         global $escape_hashes; 
    246         // add urls 
    247         if(get_option('tf_https') != '') 
    248             $text = preg_replace('@((https?|ftp|file)://([-\w\.]+)+(:\d+)?(/([\w/_\.-]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $text); 
    249          
    250         // add screen name 
    251         if(get_option('tf_screennames') != '') 
    252             $text = preg_replace('#(@)(([^\s\,]+))#', '$1<a href="http://twitter.com/$2">$2</a>', $text);    
    253          
    254         // remove unwanted hashes 
    255         if(get_option('tf_removehashes') != ''){ 
    256             if($this->hashes[0] != ''){ 
    257                 foreach($this->hashes as $val){ 
    258                     if(!strpos($text,$val)) continue; 
    259                     $text = str_replace($val,'',$text); 
    260                 } 
    261             } 
    262         } 
    263      
    264         // add keywords  
    265         if(get_option('tf_chashes') != '') 
    266             $text = preg_replace('@(#([^\s\,]+))@', '<a href="http://twitter.com/search?q=$1">$1</a>', $text);   
    267      
    268         return $text; 
    269          
    270     } 
    271  
    272      
    273     /** 
    274      *  
    275      * Check does status have some of hashes that we want to display 
    276      *  
    277      * @param $text - Twitter message 
    278      *  
    279      */ 
    280     private function tf_checkHashes($text){ 
    281  
    282         if(get_option('tf_hashes') != ''){ 
    283             if($this->hashes[0] != ''){ 
    284                 foreach($this->hashes as $val){ 
    285                     if(strpos($text,$val)) return false; 
    286                 } 
    287             } 
    288             return true; 
    289         } else { 
    290             return false; 
    291         } 
    292          
    293     } 
    294 } 
    295 ?> 
    296  
    297  
    298  
    299  
    300  
Note: See TracChangeset for help on using the changeset viewer.