alf (red_alf) wrote in changelog,
alf
red_alf
changelog

[livejournal] r18425: LJSUP-7955: Top 6 commenters for ONTD

Committer: afedorov
LJSUP-7955: Top 6 commenters for ONTD

U   trunk/cgi-bin/LJ/Widget/TopUsers.pm
Modified: trunk/cgi-bin/LJ/Widget/TopUsers.pm
===================================================================
--- trunk/cgi-bin/LJ/Widget/TopUsers.pm	2011-03-01 11:31:45 UTC (rev 18424)
+++ trunk/cgi-bin/LJ/Widget/TopUsers.pm	2011-03-01 11:33:41 UTC (rev 18425)
@@ -5,6 +5,7 @@
 use Carp qw(croak);
 
 use LJ::ExtBlock;
+use LJ::JSON;
 
 # Keys to get data from ext_block
 my %keys = ();
@@ -16,54 +17,48 @@
 
 my %debug_data = (
     'ontd_authors'      => '[{"count":"2","userid":"3"},{"count":"1","userid":"4"}]',
-    'ontd_commenters'   => '[{"count":"276","userid":"2"},{"count":"170","userid":"3"},{"count":"139","userid":"4"},{"count":"124","userid":"5"},{"count":"123","userid":"6"}]',
+    'ontd_commenters'   => '[{"count":"276","userid":"2"},{"count":"170","userid":"3"},{"count":"139","userid":"4"},{"count":"124","userid":"5"},{"count":"123","userid":"6"},{"count":"120","userid":"6"}]',
 );
 
 sub _fetch_data {
     %keys = (
-        #'ontd_authors'      => { title => "widget.topusers.top5posters.title",   order => 2 },
-        'ontd_commenters'   => { title => "widget.topusers.top5commenters.title", order => 2 },
+        #'ontd_authors'      => { title => "widget.topusers.top5posters.title",   order => 1, data => [] },
+        'ontd_commenters'   => { title => "widget.topusers.top5commenters.title", order => 2, data => [] },
     );
 
     foreach my $key (keys %keys) {
-        my $data;
 
+        my $json_data;
         if ($use_debug_data) {
             LJ::ExtBlock->create_or_replace($key, $debug_data{$key}) if $use_debug_data > 1;
-            $data = $debug_data{$key};
+            $json_data = $debug_data{$key};
         } else {
             my $block = LJ::ExtBlock->load_by_id($key);
-            $data = $block->blocktext() if $block;
+            $json_data = $block->blocktext() if $block;
         }
+        next unless $json_data;
 
-        next unless $data;
+        my $data = LJ::JSON->from_json($json_data);
+        next unless ref($data) eq 'ARRAY';
+        
+        foreach (@$data) {
+            my $count = $_->{count};
+            my $user  = LJ::load_userid($_->{userid});
+            my $userpic = $user->userpic() if $user;
+            warn "Cannot load user with id=$_->{userid}\n" unless $user;
+            warn "Cannot load userpic with id=$_->{userid}\n" unless $userpic;
 
-        $data =~ s/\[|\]//g;
-        while ($data) {
-            $data =~ s/\{([^\}]*)\},?//;
-            if ($1) {
-                my ($count, $user) = 2 x undef;
-                foreach my $pair (split(/,/, $1)) {
-                $pair =~ s/\{|\}|\"//g;
-                    my ($name, $value) = split(/:/, $pair);
-                    if ('count' eq $name) {
-                        $count = $value;
-                    } elsif ('userid' eq $name) {
-                        $user = LJ::load_userid($value);
-                        warn "Cannot load user with id=$value\n" unless $user;
-                    }
-                }
-                if ($count && $user) {
-                    my $userpic = $user->userpic();
-                    $userpic = $userpic->url if $userpic;
-                    push @{$keys{$key}->{'data'}},
-                        {
-                            count   => $count,
-                            userpic => $userpic,
-                            display => $user->ljuser_display(),
-                        };
-                }
+            if ($count && $user && $userpic) {
+                push @{$keys{$key}->{'data'}},
+                    {
+                        count   => $count,
+                        userpic => $userpic ? $userpic->url : '',
+                        display => $user->ljuser_display,
+                        user    => $user->user,
+                        url     => $user->journal_base,
+                    };
             }
+            
         }
         @{$keys{$key}->{'data'}} = sort { $b->{'count'} <=> $a->{'count'} } @{$keys{$key}->{'data'}};
         $keys{$key}->{'title'} = BML::ml($keys{$key}->{'title'});
@@ -83,39 +78,34 @@
     my @keys = sort { $keys{$a}->{'order'} <=> $keys{$b}->{'order'} } keys %keys;
 
     # Head of whole widget
-    $ret .= "<div class='w-topusers w-ontd'><div class='w-head'><h2><span class='w-head-in'>". $class->ml('widget.topusers.spotlight.title') ."</span></h2>
-    <i class='w-head-corner'></i></div><div class='w-content'>";
+    $ret .= "<img src='http://localhostr.com/files/yRmFCoW/topcommenters.gif' alt='Top commenters' /><div id='topcommentersbox'>";
 
     foreach my $key (@keys) {
-	
-		# Header of widget column
-        $ret .= "<h3>".$keys{$key}->{'title'}."</h3>";
 
         my $index = 1;
-		$ret .= "<ol>";
+        $ret .= "<ol>";
 
         foreach my $data (@{$keys{$key}->{'data'}}) {
 
             # Element begin
-            $ret .= "<li>";
+            $ret .= "<li style='background-image: url($data->{userpic});'>";
 
             # User info
-            $ret .= $data->{'display'};
-			$ret .= "<span class='num'>" . $data->{'count'} . "</span>";
+                        $ret .= "<a href='$data->{url}'>$data->{user} <span>$data->{'count'}</span></a>";
 
             # Element end
             $ret .= "</li>";
 
             $index++;
-            last if $index > 5;
+            last if $index > 6;
         }
 
         # Footer of coumn
-        $ret .= "</li></ol>";
+        $ret .= "</ol><br style='clear: both;' />";
     }
 
     # Footer of whole widget
-    $ret .= "</div></div>";
+    $ret .= "</div>";
 
     return $ret;
 }

Tags: livejournal, pm, red_alf
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments