WordPress.org

Plugin Directory

Changeset 609880


Ignore:
Timestamp:
10/09/12 05:30:05 (19 months ago)
Author:
cfinke
Message:

Mega commit:

  • Using a hash of the URL in feed_links as the unique key, since there were notices about 700+ byte keys.
  • Fixed post view tracking (broken since a few commits ago, but never in a stable tag).
  • Handling settings changes earlier so that the sidebar menus are correct on the first pageload.
  • Converted most queries to use $wpdb->prepare() and other $wpdb APIs.
  • Dumped the dbDelta stuff to manage the SQL myself.
  • Fixed deprecated user role being used to add the menu links.
  • Cleaned up HTML of admin pages.
  • Using number_format on displayed counts.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • wordpress-feed-statistics/trunk/feed-statistics.php

    r609699 r609880  
    8686            } 
    8787            else { 
    88                 $sql = "INSERT INTO `".$wpdb->prefix."feed_links` SET `url`='".mysql_real_escape_string($url)."'"; 
     88                $sql = "INSERT INTO `".$wpdb->prefix."feed_links` SET `url`='".mysql_real_escape_string($url)."', `url_hash`='".md5( $url ) ."'"; 
    8989         
    9090                if ($wpdb->query($sql)) { 
     
    113113         
    114114        if ( isset( $_GET['feed-stats-post-id'] ) ) { 
    115             if ( ! empty( $_GET['feed-stats-view'] ) && get_option( "feed_statistics_track_postviews" ) ) { 
     115            if ( ! empty( $_GET['feed-stats-post-id'] ) && get_option( "feed_statistics_track_postviews" ) ) { 
    116116                $wpdb->insert( 
    117117                    $wpdb->prefix . 'feed_postviews', 
    118118                    array( 
    119                         'post_id' => $_GET['feed-stats-view'], 
     119                        'post_id' => $_GET['feed-stats-post-id'], 
    120120                        'time' => date( 'Y-m-d H:i:s' ) 
    121121                    ), 
     
    153153                        $wpdb->insert( 
    154154                            $wpdb->prefix . 'feed_links', 
    155                             array( 'url' => $url ), 
    156                             array( '%s' ) 
     155                            array( 
     156                                'url' => $url, 
     157                                'url_hash' => md5( $url ) 
     158                            ), 
     159                            array( '%s', '%s' ) 
    157160                        ) 
    158161                    ) { 
     
    182185        } 
    183186         
     187        if ( isset( $_POST["feed_statistics_update"] ) ) { 
     188            // Handle settings changes here so that the menus can show the right options. 
     189            update_option( "feed_statistics_expiration_days", intval( $_POST["feed_statistics_expiration_days"] ) ); 
     190            update_option( "feed_statistics_track_clickthroughs", intval( isset( $_POST["feed_statistics_track_clickthroughs"] ) ) ); 
     191            update_option( "feed_statistics_track_postviews", intval( isset( $_POST["feed_statistics_track_postviews"] ) ) ); 
     192        }  
     193         
    184194        load_plugin_textdomain( 'feed-statistics', false, dirname( __FILE__ ) . '/languages' ); 
    185195         
     
    227237            } 
    228238             
    229             $q = "SELECT * FROM `".$wpdb->prefix."feed_subscribers` 
    230                 WHERE `identifier`='".mysql_real_escape_string($identifier)."' 
    231                 AND `feed`=''"; 
    232             $results = $wpdb->get_results($q); 
    233          
    234             if (!empty($results)) { 
    235                 $q = "UPDATE `".$wpdb->prefix."feed_subscribers` 
    236                     SET  
    237                         `subscribers`=".intval($subscribers).",  
    238                         `identifier`='".mysql_real_escape_string($identifier)."',  
    239                         `user_agent`='".mysql_real_escape_string($user_agent)."', 
    240                         `feed`='".mysql_real_escape_string($feed)."', 
    241                         `date`=NOW()  
    242                     WHERE 
    243                         `identifier`='".mysql_real_escape_string($identifier)."' 
    244                         AND `feed`=''"; 
    245                 $wpdb->query($q); 
     239            $results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM ".$wpdb->prefix."feed_subscribers WHERE identifier=%s AND feed=''", $identifier ) ); 
     240         
     241            if ( ! empty( $results ) ) { 
     242                $wpdb->update( 
     243                    $wpdb->prefix . 'feed_subscribers', 
     244                    array( 
     245                        'subscribers' => $susbcribers, 
     246                        'user_agent' => $user_agent, 
     247                        'feed' => $feed, 
     248                        'date' => date( 'Y-m-d H:i:s' ) 
     249                    ), 
     250                    array( 
     251                        'identifier' => $identifier, 
     252                        'feed' => '' 
     253                    ), 
     254                    array( 
     255                        '%d', 
     256                        '%s', 
     257                        '%s', 
     258                        '%s' 
     259                    ), 
     260                    array( 
     261                        '%s', 
     262                        '%s' 
     263                    ) 
     264                ); 
    246265            } 
    247266            else { 
    248                 $q = "SELECT * FROM `".$wpdb->prefix."feed_subscribers` WHERE `identifier`='".mysql_real_escape_string($identifier)."' AND `feed`='".mysql_real_escape_string($feed)."'"; 
    249                 $result = $wpdb->query($q); 
    250                  
    251                 if ($result == 0) { 
    252                     $q = "INSERT INTO `".$wpdb->prefix."feed_subscribers` 
    253                         SET  
    254                             `subscribers`=".intval($subscribers).",  
    255                             `identifier`='".mysql_real_escape_string($identifier)."',  
    256                             `user_agent`='".mysql_real_escape_string($user_agent)."', 
    257                             `feed`='".mysql_real_escape_string($feed)."', 
    258                             `date`=NOW()"; 
    259                     $wpdb->query($q); 
     267                $row = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM " . $wpdb->prefix . "feed_subscribers WHERE identifier=%s AND feed=%s", $identifier, $feed ) ); 
     268                 
     269                if ( empty( $row ) ) { 
     270                    $wpdb->insert( 
     271                        $wpdb->prefix . 'feed_subscribers', 
     272                        array( 
     273                            'subscribers' => $subscribers, 
     274                            'identifier' => $identifier, 
     275                            'user_agent' => $user_agent, 
     276                            'feed' => $feed, 
     277                            'date' => date( 'Y-m-d H:i:s' ) 
     278                        ), 
     279                        array( 
     280                            '%d', 
     281                            '%s', 
     282                            '%s', 
     283                            '%s', 
     284                            '%s' 
     285                        ) 
     286                    ); 
    260287                } 
    261                 else { 
    262                     $row = $wpdb->last_result[0]; 
    263                      
    264                     if ($user_agent != $row->user_agent || $subscribers != $row->subscribers){ 
    265                         $q = "UPDATE `".$wpdb->prefix."feed_subscribers` 
    266                             SET 
    267                             `date`=NOW(),  
    268                             `user_agent`='".mysql_real_escape_string($user_agent)."', 
    269                             `subscribers`=".intval($subscribers)." 
    270                             WHERE `identifier`='".mysql_real_escape_string($identifier)."' AND `feed`='".mysql_real_escape_string($feed)."'"; 
    271                         $wpdb->query($q); 
    272                     } 
     288                else if ( $user_agent != $row->user_agent || $subscribers != $row->subscribers ) { 
     289                    $wpdb->update( 
     290                        $wpdb->prefix . 'feed_subscribers', 
     291                        array( 
     292                            'date' => date( 'Y-m-d H:i:s' ), 
     293                            'user_agent' => $user_agent, 
     294                            'subscribers' => $subscribers 
     295                        ), 
     296                        array( 
     297                            'identifier' => $identifier, 
     298                            'feed' => $feed 
     299                        ), 
     300                        array( 
     301                            '%s', 
     302                            '%s', 
     303                            '%d' 
     304                        ), 
     305                        array( 
     306                            '%s', 
     307                            '%s' 
     308                        ) 
     309                    ); 
    273310                } 
    274311            } 
     
    293330        global $wpdb; 
    294331         
    295         $sql = "CREATE TABLE ".$wpdb->prefix."feed_clickthroughs ( 
    296   id int(11) NOT NULL AUTO_INCREMENT, 
    297   link_id int(11) NOT NULL DEFAULT '0', 
    298   time datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    299   PRIMARY KEY  (id) 
    300 ); 
    301  
    302 CREATE TABLE ".$wpdb->prefix."feed_links ( 
    303   id int(11) NOT NULL AUTO_INCREMENT, 
    304   url varchar(1000) NOT NULL, 
    305   PRIMARY KEY (id), 
    306   UNIQUE KEY  url (url) 
    307 ); 
    308  
    309 CREATE TABLE ".$wpdb->prefix."feed_postviews ( 
    310   id int(11) NOT NULL AUTO_INCREMENT, 
    311   post_id int(11) NOT NULL DEFAULT '0', 
    312   time datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    313   PRIMARY KEY  (id) 
    314 ); 
    315  
    316 CREATE TABLE ".$wpdb->prefix."feed_subscribers ( 
    317   subscribers int(11) NOT NULL DEFAULT '0', 
    318   identifier varchar(255) NOT NULL DEFAULT '', 
    319   feed varchar(120) NOT NULL, 
    320   date datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    321   user_agent varchar(255) DEFAULT NULL, 
    322   PRIMARY KEY  (identifier,feed) 
    323 );"; 
    324  
    325         require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); 
    326         dbDelta( $sql ); 
     332        $last_version = get_option( 'feed_statistics_version' ); 
     333         
     334        switch ( $last_version ) { 
     335            case '1.0': 
     336            case '1.0.1': 
     337            case '1.0.2': 
     338            case '1.0.3': 
     339            case '1.0.4': 
     340                $sql = "ALTER TABLE `".$wpdb->prefix."feed_subscribers` ADD `user_agent` VARCHAR(255) NOT NULL DEFAULT ''"; 
     341                $wpdb->query($sql); 
     342                 
     343                $sql = "CREATE TABLE IF NOT EXISTS `".$wpdb->prefix."feed_clickthroughs` ( 
     344                    `id` INT(11) NOT NULL auto_increment, 
     345                    `link_id` INT(11) NOT NULL DEFAULT '0', 
     346                    `referrer_id` INT(11) NOT NULL DEFAULT '0', 
     347                    `time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', 
     348                    PRIMARY KEY (id) 
     349                )"; 
     350                $wpdb->query($sql); 
     351                 
     352                $sql = "CREATE TABLE IF NOT EXISTS `".$wpdb->prefix."feed_links` ( 
     353                    `id` INT(11) NOT NULL auto_increment, 
     354                    `url` VARCHAR(255) NOT NULL DEFAULT '', 
     355                    PRIMARY KEY (`id`), 
     356                    UNIQUE KEY `url` (`url`) 
     357                )"; 
     358                $wpdb->query($sql); 
     359                 
     360                $sql = "CREATE TABLE IF NOT EXISTS `".$wpdb->prefix."feed_referrers` ( 
     361                    `id` INT(11) NOT NULL auto_increment, 
     362                    `url` VARCHAR(255) NOT NULL DEFAULT '', 
     363                    PRIMARY KEY (`id`), 
     364                    UNIQUE KEY `url` (`url`) 
     365                )"; 
     366                $wpdb->query($sql); 
     367                 
     368                $sql = "CREATE TABLE IF NOT EXISTS `".$wpdb->prefix."feed_postviews` ( 
     369                    `id` INT(11) NOT NULL auto_increment, 
     370                    `post_id` INT(11) NOT NULL DEFAULT '0', 
     371                    `time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', 
     372                    PRIMARY KEY (id) 
     373                )"; 
     374                $wpdb->query($sql); 
     375                 
     376                update_option("feed_statistics_track_clickthroughs", "0"); 
     377                update_option("feed_statistics_track_postviews", "1"); 
     378            case '1.1': 
     379            case '1.1.1': 
     380            case '1.1.2': 
     381                $sql = "ALTER TABLE `".$wpdb->prefix."feed_subscribers` ADD `feed` VARCHAR( 120 ) NOT NULL AFTER `identifier`"; 
     382                $wpdb->query($sql); 
     383 
     384                $sql = "ALTER TABLE `".$wpdb->prefix."feed_subscribers` DROP PRIMARY KEY, ADD PRIMARY KEY (`identifier`, `feed`)"; 
     385                $wpdb->query($sql); 
     386            case '1.2': 
     387            case '1.3': 
     388                $sql = "DROP TABLE `".$wpdb->prefix."feed_referrers`"; 
     389                $wpdb->query($sql); 
     390                 
     391                $sql = "ALTER TABLE `".$wpdb->prefix."feed_clickthroughs` DROP `referrer_id`"; 
     392                $wpdb->query($sql); 
     393            case '1.3.1': 
     394                $sql = "ALTER TABLE `".$wpdb->prefix."feed_subscribers` CHANGE `feed` `feed` VARCHAR(120) NOT NULL"; 
     395                $wpdb->query($sql); 
     396            case '1.3.2': 
     397            case '1.4': 
     398            case '1.4.1'; 
     399            case '1.4.2': 
     400            case '1.4.3': 
     401            case '1.5': 
     402                // Seeing some errors about a 1000-byte key being too long. Go figure. 
     403                $wpdb->query( "ALTER TABLE " . $wpdb->prefix . "feed_links DROP KEY url" ); 
     404                $wpdb->query( "ALTER TABLE " . $wpdb->prefix . "feed_links ADD url_hash VARCHAR(32) NOT NULL" ); 
     405                $wpdb->query( "UPDATE " . $wpdb->prefix . "feed_links SET url_hash=MD5(url)" ); 
     406                $wpdb->query( "ALTER TABLE " . $wpdb->prefix . "feed_links ADD KEY url_hash (url_hash)" ); 
     407            break; 
     408            default: 
     409                // Full SQL of current schema. 
     410                 
     411                $wpdb->query( "CREATE TABLE IF NOT EXISTS ".$wpdb->prefix."feed_links 
     412                    ( 
     413                        id int(11) NOT NULL AUTO_INCREMENT, 
     414                        url_hash varchar(32) NOT NULL, 
     415                        url varchar(1000) NOT NULL, 
     416                        PRIMARY KEY  (id), 
     417                        UNIQUE KEY url_hash (url_hash) 
     418                    )" 
     419                ); 
     420 
     421                $wpdb->query( "CREATE TABLE IF NOT EXISTS ".$wpdb->prefix."feed_postviews 
     422                    ( 
     423                        id int(11) NOT NULL AUTO_INCREMENT, 
     424                        post_id int(11) NOT NULL DEFAULT '0', 
     425                        time datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
     426                        PRIMARY KEY  (id) 
     427                    )" 
     428                ); 
     429 
     430                $wpdb->query( "CREATE TABLE IF NOT EXISTS ".$wpdb->prefix."feed_subscribers 
     431                    ( 
     432                        subscribers int(11) NOT NULL DEFAULT '0', 
     433                        identifier varchar(255) NOT NULL DEFAULT '', 
     434                        feed varchar(120) NOT NULL, 
     435                        date datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
     436                        user_agent varchar(255) DEFAULT NULL, 
     437                        PRIMARY KEY  (identifier,feed) 
     438                    )" 
     439                ); 
     440                 
     441                $wpdb->query( "CREATE TABLE IF NOT EXISTS ".$wpdb->prefix."feed_clickthroughs 
     442                    ( 
     443                        id int(11) NOT NULL AUTO_INCREMENT, 
     444                        link_id int(11) NOT NULL DEFAULT '0', 
     445                        time datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
     446                        PRIMARY KEY  (id) 
     447                    )" 
     448                ); 
     449            break; 
     450        } 
    327451    } 
    328452     
     
    358482        global $wpdb; 
    359483         
    360         $q = "SELECT 
    361                 `subscribers`, 
    362                 CASE WHEN `subscribers` = 1 THEN `identifier` ELSE CONCAT(`identifier`, `feed`) END AS `ident` 
    363             FROM `".$wpdb->prefix."feed_subscribers` 
    364             WHERE  
    365                 ( 
    366                     (`date` > '".date("Y-m-d H:i:s", time() - (60 * 60 * 24 * get_option("feed_statistics_expiration_days")))."')  
    367                     OR  
     484        $results = $wpdb->get_results( 
     485            $wpdb->prepare( 
     486                "SELECT 
     487                    `subscribers`, 
     488                    CASE WHEN `subscribers` = 1 THEN `identifier` ELSE CONCAT(`identifier`, `feed`) END AS `ident` 
     489                FROM " . $wpdb->prefix . "feed_subscribers 
     490                WHERE  
    368491                    ( 
    369                         LOCATE('###',`identifier`) != 0 AND  
    370                         `date` > '".date("Y-m-d H:i:s", time() - (60 * 60 * 24 * get_option("feed_statistics_expiration_days") * 3))."' 
     492                        (`date` > %s) 
     493                        OR  
     494                        ( 
     495                            LOCATE('###',`identifier`) != 0 AND  
     496                            `date` > %s 
     497                        ) 
    371498                    ) 
    372                 ) 
    373                 ORDER BY `ident` ASC, `date` DESC"; 
    374         $results = $wpdb->get_results($q); 
     499                ORDER BY `ident` ASC, `date` DESC", 
     500                date( "Y-m-d H:i:s", time() - ( 60 * 60 * 24 * get_option( "feed_statistics_expiration_days" ) ) ), 
     501                date( "Y-m-d H:i:s", time() - ( 60 * 60 * 24 * get_option( "feed_statistics_expiration_days" ) * 3 ) ) 
     502            ) 
     503        ); 
    375504         
    376505        $s = 0; 
    377         $current_ident = ''; 
    378          
    379         if (!empty($results)) { 
    380             foreach ($results as $row){ 
    381                 if ($row->ident != $current_ident){ 
     506         
     507        if ( ! empty( $results ) ) { 
     508            $current_ident = ''; 
     509 
     510            foreach ( $results as $row ) { 
     511                if ( $row->ident != $current_ident ) { 
    382512                    $s += $row->subscribers; 
    383513                    $current_ident = $row->ident; 
     
    386516        } 
    387517         
    388         return intval($s); 
     518        return intval( $s ); 
    389519    } 
    390520     
    391521    function add_options_menu() { 
    392         add_menu_page( __( 'Feed Options', 'feed-statistics' ), __( 'Feed', 'feed-statistics' ), 8, basename(__FILE__), 'feed_statistics_feed_page' ); 
    393         add_submenu_page( basename( __FILE__ ), __( 'Top Feeds', 'feed-statistics' ), __( 'Top Feeds', 'feed-statistics' ), 8, 'feedstats-topfeeds', 'feed_statistics_topfeeds_page' ); 
    394         add_submenu_page( basename( __FILE__ ), __( 'Feed Readers', 'feed-statistics' ), __( 'Feed Readers', 'feed-statistics' ), 8, 'feedstats-feedreaders', 'feed_statistics_feedreaders_page' ); 
     522        add_menu_page( __( 'Feed Statistics Settings', 'feed-statistics' ), __( 'Feed Statistics', 'feed-statistics' ), 'publish_posts', basename(__FILE__), 'feed_statistics_feed_page' ); 
     523         
     524        add_submenu_page( basename( __FILE__ ), __( 'Top Feeds', 'feed-statistics' ), __( 'Top Feeds', 'feed-statistics' ), 'publish_posts', 'feedstats-topfeeds', 'feed_statistics_topfeeds_page' ); 
     525        add_submenu_page( basename( __FILE__ ), __( 'Feed Readers', 'feed-statistics' ), __( 'Feed Readers', 'feed-statistics' ), 'publish_posts', 'feedstats-feedreaders', 'feed_statistics_feedreaders_page' ); 
    395526         
    396527        if (get_option("feed_statistics_track_postviews")) 
    397             add_submenu_page( basename( __FILE__ ), __( 'Post Views', 'feed-statistics' ), __( 'Post Views', 'feed-statistics' ), 8, 'feedstats-postviews', 'feed_statistics_postviews_page' ); 
     528            add_submenu_page( basename( __FILE__ ), __( 'Post Views', 'feed-statistics' ), __( 'Post Views', 'feed-statistics' ), 'publish_posts', 'feedstats-postviews', 'feed_statistics_postviews_page' ); 
    398529         
    399530        if (get_option("feed_statistics_track_clickthroughs")) 
    400             add_submenu_page( basename( __FILE__ ), __( 'Clickthroughs', 'feed-statistics' ), __( 'Clickthroughs', 'feed-statistics' ), 8, 'feedstats-clickthroughs', 'feed_statistics_clickthroughs_page' ); 
     531            add_submenu_page( basename( __FILE__ ), __( 'Clickthroughs', 'feed-statistics' ), __( 'Clickthroughs', 'feed-statistics' ), 'publish_posts', 'feedstats-clickthroughs', 'feed_statistics_clickthroughs_page' ); 
    401532    } 
    402533     
    403534    function clickthroughs_page(){ 
    404535        global $wpdb; 
     536         
    405537        ?> 
    406             <div class="wrap"> 
    407                 <p> 
    408                     <?php 
    409  
    410                     if ( get_option( 'feed_statistics_track_clickthroughs' ) ) 
    411                         esc_html_e( 'You currently have clickthrough tracking turned on.', 'feed-statistics' ); 
    412                     else 
    413                         esc_html_e( 'You currently have clickthrough tracking turned off.', 'feed-statistics' ); 
    414      
    415                     ?> 
    416                 </p> 
     538        <div class="wrap"> 
     539            <div class="icon32" id="icon-options-general"> 
     540                <br /> 
     541            </div> 
     542            <h2><?php esc_html_e( 'Most popular links in your feed (last 30 days)', 'feed-statistics' ); ?></h2> 
     543            <p> 
     544                <?php 
     545 
     546                if ( get_option( 'feed_statistics_track_clickthroughs' ) ) 
     547                    esc_html_e( 'You currently have clickthrough tracking turned on.', 'feed-statistics' ); 
     548                else 
     549                    esc_html_e( 'You currently have clickthrough tracking turned off.', 'feed-statistics' ); 
     550 
     551                ?> 
    417552            </p> 
    418             <br /> 
    419  
    420             <h2><?php esc_html_e( 'Most popular links in your feed (last 30 days)', 'feed-statistics' ); ?></h2> 
     553 
    421554            <table style="width: 100%;"> 
    422555                <thead> 
     
    430563                <tbody> 
    431564                    <?php 
    432          
    433                     $sql = "DELETE FROM `".$wpdb->prefix."feed_clickthroughs` WHERE `time` < '".date("Y-m-d H:i:s", time() - (60 * 60 * 24 * 30))."'"; 
    434                     $wpdb->get_results($sql); 
    435          
    436                     $sql = "SELECT  
    437                             COUNT(*) AS `clicks`, 
    438                             `l`.`url` AS `link` 
    439                         FROM `".$wpdb->prefix."feed_clickthroughs` AS `c` 
    440                         LEFT JOIN `".$wpdb->prefix."feed_links` AS `l` ON `c`.`link_id`=`l`.`id` 
    441                         WHERE `c`.`time` > '".date("Y-m-d H:i:s", time() - (60 * 60 * 24 * 30))."' 
    442                         GROUP BY `c`.`link_id` 
    443                         ORDER BY `clicks` DESC"; 
    444                     $results = $wpdb->get_results($sql); 
    445          
     565 
     566                    $wpdb->query( 
     567                        $wpdb->prepare( 
     568                            "DELETE FROM " . $wpdb->prefix . "feed_clickthroughs WHERE time < %s", 
     569                            date( "Y-m-d H:i:s", time() - ( 60 * 60 * 24 * 30 ) ) 
     570                        ) 
     571                    ); 
     572 
     573                    $results = $wpdb->get_results( 
     574                        $wpdb->prepare( 
     575                            "SELECT  
     576                                COUNT(*) AS `clicks`, 
     577                                `l`.`url` AS `link` 
     578                            FROM " . $wpdb->prefix . "feed_clickthroughs AS `c` 
     579                                LEFT JOIN `".$wpdb->prefix."feed_links` AS `l` ON `c`.`link_id`=`l`.`id` 
     580                            WHERE `c`.`time` > %s 
     581                            GROUP BY `c`.`link_id` 
     582                            ORDER BY `clicks` DESC", 
     583                            date( 'Y-m-d H:i:s', time() - ( 60 * 60 * 24 * 30 ) ) 
     584                        ) 
     585                    ); 
     586     
    446587                    $i = 1; 
    447          
    448                     if (!empty($results)) { 
     588     
     589                    if ( ! empty( $results ) ) { 
    449590                        $max = $results[0]->clicks; 
    450          
    451                         foreach ($results as $row){ 
    452                             $percentage = ceil($row->clicks / $max * 100); 
    453              
    454                             echo '<tr><td>'.$i++.'.</td><td><a href="'.$row->link.'">'.$row->link.'</a></td><td>'.$row->clicks.'</td> 
     591     
     592                        foreach ( $results as $row ) { 
     593                            $percentage = ceil( $row->clicks / $max * 100 ); 
     594                             
     595                            ?> 
     596                            <tr> 
    455597                                <td> 
    456                                     <div class="graph" style="width: '.$percentage.'%;">&nbsp;</div> 
     598                                    <?php echo $i++; ?> 
    457599                                </td> 
    458                                 </tr>'; 
     600                                <td> 
     601                                    <a href="<?php echo esc_url( $row->link ); ?>"><?php echo esc_url( $row->link ); ?></a> 
     602                                </td> 
     603                                <td> 
     604                                    <?php echo $row->clicks; ?> 
     605                                </td> 
     606                                <td> 
     607                                    <div class="graph" style="width: <?php echo $percentage; ?>%;">&nbsp;</div> 
     608                                </td> 
     609                            </tr> 
     610                            <?php 
    459611                        } 
    460612                    } 
    461                      
     613                 
    462614                    ?> 
    463615                </tbody> 
     
    469621    function topfeeds_page(){ 
    470622        global $wpdb; 
     623         
    471624        ?> 
    472625        <div class="wrap"> 
     626            <div class="icon32" id="icon-options-general"> 
     627                <br /> 
     628            </div> 
    473629            <h2><?php esc_html_e( 'Your most popular feeds', 'feed-statistics' ); ?></h2> 
    474630            <table style="width: 100%;"> 
     
    484640                    <?php 
    485641         
    486                     $q = "SELECT 
    487                         `feed`, 
    488                         SUM(`subscribers`) `subscribers` 
    489                         FROM `".$wpdb->prefix."feed_subscribers` 
    490                         WHERE  
    491                             `feed` != ''  
    492                             AND  
    493                             ( 
    494                                 (`date` > '".date("Y-m-d H:i:s", time() - (60 * 60 * 24 * get_option("feed_statistics_expiration_days")))."')  
    495                                 OR  
    496                                 ( 
    497                                     LOCATE('###',`identifier`) != 0 AND  
    498                                     `date` > '".date("Y-m-d H:i:s", time() - (60 * 60 * 24 * get_option("feed_statistics_expiration_days") * 3))."' 
    499                                 ) 
    500                             ) 
    501                         GROUP BY `feed` 
    502                         ORDER BY `subscribers` DESC"; 
    503                     $results = $wpdb->get_results($q); 
    504          
     642                    $results = $wpdb->get_results( 
     643                        $wpdb->prepare( 
     644                            "SELECT 
     645                                `feed`, 
     646                                SUM(`subscribers`) `subscribers` 
     647                                FROM `".$wpdb->prefix."feed_subscribers` 
     648                                WHERE  
     649                                    `feed` != ''  
     650                                    AND  
     651                                    ( 
     652                                        (`date` > %s)  
     653                                        OR  
     654                                        ( 
     655                                            LOCATE('###',`identifier`) != 0 AND  
     656                                            `date` > %s 
     657                                        ) 
     658                                    ) 
     659                                GROUP BY `feed` 
     660                                ORDER BY `subscribers` DESC", 
     661                            date("Y-m-d H:i:s", time() - (60 * 60 * 24 * get_option("feed_statistics_expiration_days"))), 
     662                            date("Y-m-d H:i:s", time() - (60 * 60 * 24 * get_option("feed_statistics_expiration_days") * 3)) 
     663                        ) 
     664                    ); 
     665 
    505666                    $feeds = array(); 
    506          
     667 
    507668                    $i = 1; 
    508          
    509                     if (!empty($results)){ 
    510                         foreach ($results as $feed) { 
    511                             if (!isset($max)) $max = $feed->subscribers; 
    512                  
    513                             $percentage = ceil($feed->subscribers / $max * 100); 
    514              
    515                             echo '<tr><td>'.$i++.'.</td><td style="width: 40%;"><a href="'.$feed->feed.'">'.$feed->feed.'</a></td><td style="width: 15%;">'.$feed->subscribers.'</td><td style="width: 40%;"><div class="graph" style="width: '.$percentage.'%;">&nbsp;</div></td></tr>'; 
     669 
     670                    if ( ! empty( $results ) ) { 
     671                        foreach ( $results as $feed ) { 
     672                            if ( ! isset( $max ) ) 
     673                                $max = $feed->subscribers; 
     674 
     675                            $percentage = ceil( $feed->subscribers / $max * 100 ); 
     676 
     677                            ?> 
     678                            <tr> 
     679                                <td><?php echo $i++; ?></td> 
     680                                <td style="width: 40%;"> 
     681                                    <a href="<?php echo esc_url( $feed->feed ); ?>"><?php echo esc_url( $feed->feed ); ?></a> 
     682                                </td> 
     683                                <td style="width: 15%;"><?php echo $feed->subscribers; ?></td> 
     684                                <td style="width: 40%;"> 
     685                                    <div class="graph" style="width: <?php echo $percentage; ?>%;">&nbsp;</div> 
     686                                </td> 
     687                            </tr> 
     688                            <?php 
    516689                        } 
    517690                    } 
     
    526699    function postviews_page(){ 
    527700        global $wpdb; 
     701         
    528702        ?> 
    529703        <div class="wrap"> 
     704            <div class="icon32" id="icon-options-general"> 
     705                <br /> 
     706            </div> 
     707            <h2><?php esc_html_e( 'Your most popular posts (last 30 days)', 'feed-statistics' ); ?></h2> 
    530708            <p> 
    531709                <?php 
     
    538716                ?> 
    539717            </p> 
    540             <h2><?php esc_html_e( 'Your most popular posts (last 30 days)', 'feed-statistics' ); ?></h2> 
    541718            <table style="width: 100%;"> 
    542719                <thead> 
     
    549726                </thead> 
    550727                <tbody> 
    551                     <?php        
     728                    <?php 
    552729         
    553730                    // Delete entries older than 30 days. 
    554                     $sql = "DELETE FROM `".$wpdb->prefix."feed_postviews` WHERE `time` < '".date("Y-m-d H:i:s", time() - (60 * 60 * 24 * 30))."'"; 
    555                     $wpdb->get_results($sql); 
    556          
    557                     $sql = "SELECT  
    558                             COUNT(*) AS `views`, 
    559                             `v`.`post_id`, 
    560                             `p`.`post_title` `title`, 
    561                             `p`.`guid` `permalink` 
    562                         FROM `".$wpdb->prefix."feed_postviews` AS `v` 
    563                         LEFT JOIN `".$wpdb->prefix."posts` AS `p` ON `v`.`post_id`=`p`.`ID` 
    564                         WHERE `v`.`time` > '".date("Y-m-d H:i:s", time() - (60 * 60 * 24 * 30))."' 
    565                         GROUP BY `v`.`post_id` 
    566                         ORDER BY `views` DESC 
    567                         LIMIT 20"; 
    568                     $results = $wpdb->get_results($sql); 
    569          
    570                     if (!empty($results)) { 
     731                    $wpdb->query( 
     732                        $wpdb->prepare( 
     733                            "DELETE FROM " . $wpdb->prefix . "feed_postviews WHERE `time` < %s", 
     734                            date("Y-m-d H:i:s", time() - (60 * 60 * 24 * 30)) 
     735                        ) 
     736                    ); 
     737         
     738                    $results = $wpdb->get_results( 
     739                        $wpdb->prepare( 
     740                            "SELECT  
     741                                COUNT(*) AS `views`, 
     742                                `v`.`post_id`, 
     743                                `p`.`post_title` `title`, 
     744                                `p`.`guid` `permalink` 
     745                            FROM " . $wpdb->prefix . "feed_postviews AS `v` 
     746                            LEFT JOIN " . $wpdb->prefix . "posts AS `p` ON `v`.`post_id`=`p`.`ID` 
     747                            WHERE `v`.`time` > %s 
     748                            GROUP BY `v`.`post_id` 
     749                            ORDER BY `views` DESC 
     750                            LIMIT 20", 
     751                            date("Y-m-d H:i:s", time() - (60 * 60 * 24 * 30)) 
     752                        ) 
     753                    ); 
     754         
     755                    if ( ! empty( $results ) ) { 
    571756                        $i = 1; 
    572757                        $max = $results[0]->views; 
    573758             
    574                         foreach ($results as $row) { 
     759                        foreach ( $results as $row ) { 
    575760                            $percentage = ceil($row->views / $max * 100); 
    576                             echo ' 
    577                                 <tr> 
    578                                     <td>'.$i++.'.</td> 
    579                                     <td><a href="'.$row->permalink.'">'.$row->title.'</a></td> 
    580                                     <td>'.$row->views.'</td> 
    581                                     <td> 
    582                                         <div class="graph" style="width: '.$percentage.'%;">&nbsp;</div> 
    583                                     </td> 
    584                                 </tr>'; 
     761                             
     762                            ?> 
     763                            <tr> 
     764                                <td><?php echo $i++; ?></td> 
     765                                <td><a href="<?php echo esc_url( $row->permalink ); ?>"><?php esc_html_e( $row->title ); ?></a></td> 
     766                                <td><?php echo $row->views; ?></td> 
     767                                <td> 
     768                                    <div class="graph" style="width: <?php echo $percentage; ?>%;">&nbsp;</div> 
     769                                </td> 
     770                            </tr> 
     771                            <?php 
    585772                        } 
    586773                    } 
     
    594781     
    595782    function feedreaders_page(){ 
     783        global $wpdb; 
     784         
    596785        ?> 
    597786        <div class="wrap"> 
    598         <h2><?php esc_html_e( 'Top Feed Readers', 'feed-statistics' ); ?></h2> 
    599         <?php  
    600          
    601         echo FEED_STATS::reader_stats(); 
    602          
    603         ?> 
     787            <div class="icon32" id="icon-options-general"> 
     788                <br /> 
     789            </div> 
     790            <h2><?php esc_html_e( 'Top Feed Readers', 'feed-statistics' ); ?></h2> 
     791            <?php  
     792         
     793            $expiration_days = get_option("feed_statistics_expiration_days"); 
     794         
     795            $wpdb->query( 
     796                $wpdb->prepare( 
     797                    "DELETE FROM " . $wpdb->prefix . "feed_subscribers WHERE `date` < %s", 
     798                    date( "Y-m-d H:i:s", time() - ( 60 * 60 * 24 * get_option( "feed_statistics_expiration_days" ) * 3 ) ) 
     799                ) 
     800            ); 
     801         
     802            $results = $wpdb->get_results( 
     803                $wpdb->prepare( 
     804                    "SELECT 
     805                        CASE  
     806                            WHEN  
     807                                LOCATE('###',`identifier`) != 0 THEN SUBSTRING(`identifier`, 1, LOCATE(' ',`identifier`)) 
     808                            ELSE 
     809                                `user_agent` 
     810                        END AS `reader`, 
     811                    SUM(`subscribers`) `readers` 
     812                    FROM " . $wpdb->prefix . "feed_subscribers 
     813                    WHERE `date` > %s 
     814                    GROUP BY `reader` 
     815                    ORDER BY `readers` DESC", 
     816                    date("Y-m-d H:i:s", time() - (60 * 60 * 24 * get_option("feed_statistics_expiration_days"))) 
     817                ) 
     818            ); 
     819         
     820            $readers = array(); 
     821         
     822            if (!empty($results)){ 
     823                foreach ($results as $row){ 
     824                    $reader = $row->reader; 
     825             
     826                    $version = array(); 
     827             
     828                    if ($reader == '') { 
     829                        $reader = "Unknown (Pending)"; 
     830                    }  
     831                    else if (preg_match("/Navigator\/([0-9abpre\.]+)/is", $reader, $version)){ 
     832                        $reader = "Netscape Navigator ".$version[1]; 
     833                    } 
     834                    else if (preg_match("/Opera\/([0-9abpre\.]+)/is", $reader, $version)){ 
     835                        $reader = "Opera ".$version[1]; 
     836                    } 
     837                    else if (preg_match("/Flock\/([0-9abpre\.]+)/is", $reader, $version)){ 
     838                        $reader = "Flock ".$version[1]; 
     839                    } 
     840                    else if (preg_match("/(Firefox|BonEcho|GranParadiso|Aurora|Minefield)\/([0-9abpre\.]+)/is", $reader, $version)) { 
     841                        $reader = "Mozilla ".$version[1]." ".$version[2]; 
     842                    } 
     843                    else if (preg_match("/MSIE ([0-9abpre\.]+)/is", $reader, $version)){ 
     844                        $reader = "Internet Explorer ".$version[1]; 
     845                    } 
     846                    else if (preg_match("/RockMelt\/([^\s\.]+)/is", $reader, $version)) { 
     847                        $reader = "RockMelt ".$version[1]; 
     848                    } 
     849                    else if (preg_match("/Chrome\/([^\s\.]+)/is", $reader, $version)) { 
     850                        $reader = "Chrome ".$version[1]; 
     851                    } 
     852                    else if (preg_match("/Safari/is", $reader)) { 
     853                        $reader = "Safari"; 
     854                    } 
     855                    else if (preg_match("/Gecko/Uis", $reader)) { 
     856                        $reader = "Other Mozilla browser"; 
     857                    } 
     858                    else if (!preg_match("/Mozilla/Uis", $reader)){ 
     859                        $reader = preg_replace("/[\/;].*$/Uis", "", $reader); 
     860                    } 
     861                    else { 
     862                        continue; 
     863                    } 
     864             
     865                    foreach ($readers as $key => $d) { 
     866                        if ($d["reader"] == $reader){ 
     867                            $readers[$key]["readers"] += $row->readers; 
     868                            continue 2; 
     869                        } 
     870                    } 
     871             
     872                    $readers[] = array("reader" => $reader, "readers" => $row->readers); 
     873                } 
     874            } 
     875         
     876            function sort_reader_array($a, $b) { 
     877                return $b["readers"] - $a["readers"]; 
     878            } 
     879         
     880            usort($readers, 'sort_reader_array'); 
     881         
     882            $max = $readers[0]["readers"]; 
     883         
     884            ob_start(); 
     885         
     886            ?> 
     887            <table style="width: 100%;"> 
     888                <thead> 
     889                    <tr> 
     890                        <th>&nbsp;</th> 
     891                        <th><?php esc_html_e( 'Reader', 'feed-statistics' ); ?></th> 
     892                        <th><?php esc_html_e( 'Subscribers', 'feed-statistics' ); ?></th> 
     893                        <th>&nbsp;</th> 
     894                    </tr> 
     895                </thead> 
     896                <tbody> 
     897                    <?php 
     898                 
     899                    $i = 1; 
     900         
     901                    foreach ($readers as $reader) { 
     902                        $percentage = ceil($reader["readers"] / $max * 100); 
     903                     
     904                        ?> 
     905                        <tr> 
     906                            <td><?php echo $i++; ?></td> 
     907                            <td style="width: 40%;"><?php echo esc_html( $reader["reader"] ); ?></td> 
     908                            <td style="width: 15%;"><?php echo esc_html( $reader["readers"] ); ?></td> 
     909                            <td style="width: 40%;"> 
     910                                <div class="graph" style="width: <?php echo $percentage; ?>%;">&nbsp;</div> 
     911                            </td> 
     912                        </tr> 
     913                        <?php 
     914                    } 
     915                 
     916                    ?> 
     917                </tbody> 
     918            </table> 
    604919        </div> 
    605920        <?php 
     
    607922     
    608923    function feed_page() { 
    609         if (isset($_POST["feed_statistics_update"])){ 
    610             update_option("feed_statistics_expiration_days",intval($_POST["feed_statistics_expiration_days"])); 
    611             update_option("feed_statistics_track_clickthroughs",intval(isset($_POST["feed_statistics_track_clickthroughs"]))); 
    612             update_option("feed_statistics_track_postviews",intval(isset($_POST["feed_statistics_track_postviews"]))); 
    613         }  
    614924        ?> 
    615925        <div class="wrap"> 
    616             <h2><?php esc_html_e( 'Feed Options', 'feed-statistics' ); ?></h2> 
    617             <form method="post" style="width: 100%;"> 
    618                 <fieldset> 
    619                     <input type="hidden" name="feed_statistics_update" value="1"/> 
    620                     <p><?php printf( esc_html( __( 'Count users who have requested a feed within the last %1$s days as subscribers. You currently have %2$s subscribers.' ) ), '<input type="text" size="2" name="feed_statistics_expiration_days" value="' . intval( get_option("feed_statistics_expiration_days") ) . '" />', number_format_i18n( FEED_STATS::how_many_subscribers() ) ); ?></p> 
    621                     <p> 
    622                         <input type="checkbox" name="feed_statistics_track_clickthroughs" value="1" <?php if (get_option("feed_statistics_track_clickthroughs")) { ?>checked="checked"<?php } ?>> 
    623                         <?php esc_html_e( 'Track which links your subscribers click', 'feed-statistics' ); ?><br /> 
    624                         <?php esc_html_e( 'This requires Wordpress to route all links in your posts back through your site so that clicks can be recorded.  The user shouldn\'t notice a difference.', 'feed-statistics' ); ?> 
    625                     </p> 
    626                     <p> 
    627                         <input type="checkbox" name="feed_statistics_track_postviews" value="1" <?php if (get_option("feed_statistics_track_postviews")) { ?>checked="checked"<?php } ?>> 
    628                         <?php esc_html_e( 'Track individual post views', 'feed-statistics' ); ?><br /> 
    629                         <?php esc_html_e( 'This is done via an invisible tracking image and will track views of posts by users that use feed readers that load images from your site.', 'feed-statistics' ); ?> 
    630                     </p> 
    631                     <input type="submit" name="Submit" value="<?php esc_attr_e( 'Update Options', 'feed-statistics' ); ?> &raquo;" /> 
    632                 </fieldset>  
     926            <?php if ( ! empty( $_POST['feed_statistics_update'] ) ) { ?> 
     927                <div class="updated"><p><?php esc_html_e( 'Settings have been saved.', 'feed-statistics' ); ?></p></div> 
     928            <?php } ?> 
     929             
     930            <div class="icon32" id="icon-options-general"> 
     931                <br /> 
     932            </div> 
     933            <h2><?php esc_html_e( 'Feed Statistics Settings', 'feed-statistics' ); ?></h2> 
     934            <form method="post"> 
     935                <input type="hidden" name="feed_statistics_update" value="1"/> 
     936                 
     937                <table class="form-table"> 
     938                    <tbody> 
     939                        <tr valign="top"> 
     940                            <th scope="row"><?php esc_html_e( 'Subscribers', 'feed-statistics' ); ?></th> 
     941                            <td> 
     942                                <?php printf( esc_html( __( 'Count users who have requested a feed within the last %1$s days as subscribers. You currently have %2$s subscribers.' ) ), '<input type="text" size="2" name="feed_statistics_expiration_days" value="' . intval( get_option("feed_statistics_expiration_days") ) . '" />', number_format_i18n( FEED_STATS::how_many_subscribers() ) ); ?> 
     943                            </td> 
     944                        </tr> 
     945                        <tr valign="top"> 
     946                            <th scope="row"><?php esc_html_e( 'Clickthroughs', 'feed-statistics' ); ?></th> 
     947                            <td> 
     948                                <p> 
     949                                    <input type="checkbox" name="feed_statistics_track_clickthroughs" value="1" <?php checked( get_option( 'feed_statistics_track_clickthroughs' ) ); ?> /> 
     950                                    <?php esc_html_e( 'Track which links your subscribers click', 'feed-statistics' ); ?> 
     951                                    <br /> 
     952                                    <?php esc_html_e( 'This requires Wordpress to route all links in your posts back through your site so that clicks can be recorded.  The user shouldn\'t notice a difference.', 'feed-statistics' ); ?> 
     953                                </p> 
     954                            </td> 
     955                        </tr> 
     956                        <tr valign="top"> 
     957                            <th scope="row"><?php esc_html_e( 'Post views', 'feed-statistics' ); ?></th> 
     958                            <td> 
     959                                <p> 
     960                                    <input type="checkbox" name="feed_statistics_track_postviews" value="1" <?php checked( get_option( 'feed_statistics_track_postviews' ) ); ?> /> 
     961                                    <?php esc_html_e( 'Track individual post views', 'feed-statistics' ); ?> 
     962                                    <br /> 
     963                                    <?php esc_html_e( 'This is done via an invisible tracking image and will track views of posts by users that use feed readers that load images from your site.', 'feed-statistics' ); ?> 
     964                                </p> 
     965                            </td> 
     966                        </tr> 
     967                    </tbody> 
     968                </table> 
     969                <p class="submit"> 
     970                    <input class="button-primary" type="submit" name="Submit" value="<?php esc_attr_e( 'Update Options', 'feed-statistics' ); ?>" /> 
     971                </p> 
    633972            </form> 
    634973        </div> 
     
    636975    } 
    637976     
    638     function reader_stats() { 
    639         global $wpdb; 
    640          
    641         $expiration_days = get_option("feed_statistics_expiration_days"); 
    642          
    643         $sql = "DELETE FROM `".$wpdb->prefix."feed_subscribers` WHERE `date` < '".date("Y-m-d H:i:s", time() - (60 * 60 * 24 * get_option("feed_statistics_expiration_days") * 3))."'"; 
    644         $wpdb->get_results($sql); 
    645          
    646         $q = "SELECT 
    647                 CASE  
    648                     WHEN  
    649                         LOCATE('###',`identifier`) != 0 THEN SUBSTRING(`identifier`, 1, LOCATE(' ',`identifier`)) 
    650                     ELSE 
    651                         `user_agent` 
    652                 END AS `reader`, 
    653             SUM(`subscribers`) `readers` 
    654             FROM `".$wpdb->prefix."feed_subscribers` 
    655             WHERE `date` > '".date("Y-m-d H:i:s", time() - (60 * 60 * 24 * get_option("feed_statistics_expiration_days")))."' 
    656             GROUP BY `reader` 
    657             ORDER BY `readers` DESC"; 
    658         $results = $wpdb->get_results($q); 
    659          
    660         $readers = array(); 
    661          
    662         if (!empty($results)){ 
    663             foreach ($results as $row){ 
    664                 $reader = $row->reader; 
    665              
    666                 $version = array(); 
    667              
    668                 if ($reader == '') { 
    669                     $reader = "Unknown (Pending)"; 
    670                 }  
    671                 else if (preg_match("/Navigator\/([0-9abpre\.]+)/is", $reader, $version)){ 
    672                     $reader = "Netscape Navigator ".$version[1]; 
    673                 } 
    674                 else if (preg_match("/Opera\/([0-9abpre\.]+)/is", $reader, $version)){ 
    675                     $reader = "Opera ".$version[1]; 
    676                 } 
    677                 else if (preg_match("/Flock\/([0-9abpre\.]+)/is", $reader, $version)){ 
    678                     $reader = "Flock ".$version[1]; 
    679                 } 
    680                 else if (preg_match("/(Firefox|BonEcho|GranParadiso|Aurora|Minefield)\/([0-9abpre\.]+)/is", $reader, $version)) { 
    681                     $reader = "Mozilla ".$version[1]." ".$version[2]; 
    682                 } 
    683                 else if (preg_match("/MSIE ([0-9abpre\.]+)/is", $reader, $version)){ 
    684                     $reader = "Internet Explorer ".$version[1]; 
    685                 } 
    686                 else if (preg_match("/RockMelt\/([^\s\.]+)/is", $reader, $version)) { 
    687                     $reader = "RockMelt ".$version[1]; 
    688                 } 
    689                 else if (preg_match("/Chrome\/([^\s\.]+)/is", $reader, $version)) { 
    690                     $reader = "Chrome ".$version[1]; 
    691                 } 
    692                 else if (preg_match("/Safari/is", $reader)) { 
    693                     $reader = "Safari"; 
    694                 } 
    695                 else if (preg_match("/Gecko/Uis", $reader)) { 
    696                     $reader = "Other Mozilla browser"; 
    697                 } 
    698                 else if (!preg_match("/Mozilla/Uis", $reader)){ 
    699                     $reader = preg_replace("/[\/;].*$/Uis", "", $reader); 
    700                 } 
    701                 else { 
    702                     continue; 
    703                 } 
    704              
    705                 foreach ($readers as $key => $d) { 
    706                     if ($d["reader"] == $reader){ 
    707                         $readers[$key]["readers"] += $row->readers; 
    708                         continue 2; 
    709                     } 
    710                 } 
    711              
    712                 $readers[] = array("reader" => $reader, "readers" => $row->readers); 
    713             } 
    714         } 
    715          
    716         function sort_reader_array($a, $b) { 
    717             return $b["readers"] - $a["readers"]; 
    718         } 
    719          
    720         usort($readers, 'sort_reader_array'); 
    721          
    722         $max = $readers[0]["readers"]; 
    723         $rv = '<table style="width: 100%;">'; 
    724         $rv .= '<thead><tr><th>&nbsp;</th><th>Reader</th><th>Subscribers</th><th>&nbsp;</th></tr></thead><tbody>'; 
    725          
    726         $i = 1; 
    727          
    728         foreach ($readers as $reader) { 
    729             $percentage = ceil($reader["readers"] / $max * 100); 
    730              
    731             $rv .= '<tr><td>'.$i++.'.</td><td style="width: 40%;">'.$reader["reader"].'</td><td style="width: 15%;">'.$reader["readers"].'</td><td style="width: 40%;"><div class="graph" style="width: '.$percentage.'%;">&nbsp;</div></td></tr>'; 
    732         } 
    733          
    734         $rv .= "</tbody></table>"; 
    735          
    736         return $rv; 
    737     } 
    738      
    739977    function widget_register() { 
    740         if (function_exists('register_sidebar_widget')) { 
    741             register_sidebar_widget('Feed Statistics', 'feed_statistics_widget'); 
    742         } 
     978        wp_register_sidebar_widget( 'feed-statistics-widget', __( 'Feed Statistics', 'feed-statistics' ), array( 'FEED_STATS', 'widget' ) ); 
    743979    } 
    744980     
    745981    function widget($args) { 
    746         extract($args); 
    747          
    748         echo $before_widget; 
     982        echo $args['before_widget']; 
     983         
    749984        echo '<span class="subscriber_count">'; 
    750         feed_subscribers(); 
     985            feed_subscribers(); 
    751986        echo '</span>'; 
    752         echo $after_widget; 
     987         
     988        echo $args['after_widget']; 
    753989    } 
    754990     
     
    7901026    $s = FEED_STATS::how_many_subscribers(); 
    7911027     
    792     printf( _n( '%d feed subscriber', '%d feed subscribers', $s ), $s ); 
     1028    printf( _n( '%s feed subscriber', '%s feed subscribers', $s ), number_format_i18n( $s ) ); 
    7931029} 
    7941030 
     
    8391075    register_activation_hook( __FILE__, array( 'FEED_STATS', 'sql' ) ); 
    8401076} 
    841  
    842 ?> 
Note: See TracChangeset for help on using the changeset viewer.