Added POD to Onis::Plugins::Weekdays
[onis.git] / lib / Onis / Plugins / Userdetails.pm
index 4d3edf7..66e9903 100644 (file)
@@ -6,10 +6,11 @@ use warnings;
 use Onis::Config (qw(get_config));
 use Onis::Html (qw(html_escape get_filehandle));
 use Onis::Language (qw(translate));
-use Onis::Data::Core (qw(get_main_nick register_plugin));
+use Onis::Data::Core (qw(get_main_nick register_plugin nick_to_name));
 use Onis::Users (qw(ident_to_name get_link get_image));
 
-use Onis::Plugins::Core (qw(get_core_nick_counters));
+use Onis::Plugins::Core (qw(get_core_nick_counters get_sorted_nicklist));
+use Onis::Plugins::Weekdays (qw(get_weekdays));
 use Onis::Plugins::Conversations (qw(get_conversations));
 use Onis::Plugins::Bignumbers (qw(get_bignumbers));
 use Onis::Plugins::Interestingnumbers (qw(get_interestingnumbers));
@@ -136,8 +137,6 @@ sub output
 {
        my $nicks_ref = get_sorted_nicklist ();
        
-       my $max = $PLUGIN_MAX;
-       
        my $fh = get_filehandle ();
 
        my $trans = translate ('Detailed nick stats');
@@ -145,32 +144,47 @@ sub output
 
        my $max_time = 0;
        my $max_conv = 0;
+       my $max_weekday = 0;
 
-       my @nicks = $nicks_ref->[0 .. ($max - 1)];
+       my @nicks = @$nicks_ref;
        my $nick_data = {};
 
+       splice (@nicks, $PLUGIN_MAX) if (scalar (@nicks) > $PLUGIN_MAX);
+
        for (@nicks)
        {
                my $nick = $_;
 
                $nick_data->{$nick} = get_core_nick_counters ($nick);
+               $nick_data->{$nick}{'weekdays'} = get_weekdays ($nick);
                $nick_data->{$nick}{'conversations'} = get_conversations ($nick);
                $nick_data->{$nick}{'bignumbers'} = get_bignumbers ($nick);
                $nick_data->{$nick}{'interestingnumbers'} = get_interestingnumbers ($nick);
                
-               for (my $i = 0; $i < 12; $i++)
+               for (my $i = 0; $i < 24; $i++)
                {
-                       $num = $nick_data->{$nick}{'lines'}[2 * $i] + $nick_data->{$nick}{'lines'}[(2 * $i) + 1];
+                       $num = $nick_data->{$nick}{'chars'}[$i];
                        $max_time = $num if ($max_time < $num);
                }
 
                for (keys %{$nick_data->{$nick}{'conversations'}})
                {
                        my $other = $_;
-                       my $ptr = $nick_data->{$nick}{'conversations'}{'nicks'}{$other};
+                       my $ptr = $nick_data->{$nick}{'conversations'}{$other}{'nicks'}{$nick};
                        $num = $ptr->[0] + $ptr->[1] + $ptr->[2] + $ptr->[3];
                        $max_conv = $num if ($max_conv < $num);
                }
+
+               for (keys %{$nick_data->{$nick}{'weekdays'}})
+               {
+                       my $day = $_;
+                       my $ptr = $nick_data->{$nick}{'weekdays'}{$day};
+
+                       for (my $i = 0; $i < 4; $i++)
+                       {
+                               $max_weekday = $ptr->[$i] if ($max_weekday < $ptr->[$i]);
+                       }
+               }
        }
 
        my $time_factor = 0;
@@ -188,7 +202,7 @@ sub output
        
        print $fh qq#<table class="plugin userdetails">\n#,
        qq#  <tr>\n#,
-       qq#    <th colspan="#, $DISPLAY_IMAGES ? 3 : 2, qq#">$trans</th>\n#,
+       qq#    <th colspan="#, $DISPLAY_IMAGES ? 4 : 3, qq#">$trans</th>\n#,
        qq#  </tr>\n#;
 
        for (@nicks)
@@ -199,7 +213,7 @@ sub output
                my $ptr = $nick_data->{$nick};
 
                print $fh qq#  <tr>\n#,
-               qq#    <th colspan="#, $DISPLAY_IMAGES ? 3 : 2, qq#" class="nick">$print</th>\n#,
+               qq#    <th colspan="#, $DISPLAY_IMAGES ? 4 : 3, qq#" class="nick">$print</th>\n#,
                qq#  </tr>\n#,
                qq#  <tr>\n#;
 
@@ -252,6 +266,8 @@ sub output
                        $trans = translate ('Has written %u chars');
                        printf $fh ("      $trans<br />\n", $chars);
 
+                       $lines ||= 1;
+
                        $num = $words / $lines;
                        $trans = translate ('Has written %.1f words per line');
                        printf $fh ("      $trans<br />\n", $num);
@@ -266,16 +282,16 @@ sub output
                if (%{$ptr->{'interestingnumbers'}})
                {
                        $trans = translate ('Has given %u ops');
-                       printf $fh ("      $trans<br />\n", $ptr->{'interestingnumbers'}{'ops_given'});
+                       printf $fh ("      $trans<br />\n", $ptr->{'interestingnumbers'}{'op_given'});
                
                        $trans = translate ('Has taken %u ops');
-                       printf $fh ("      $trans<br />\n", $ptr->{'interestingnumbers'}{'ops_taken'});
+                       printf $fh ("      $trans<br />\n", $ptr->{'interestingnumbers'}{'op_taken'});
 
                        $trans = translate ('Has kicked out %u people');
-                       printf $fh ("      $trans<br />\n", $ptr->{'interestingnumbers'}{'kicks_given'});
+                       printf $fh ("      $trans<br />\n", $ptr->{'interestingnumbers'}{'kick_given'});
                
                        $trans = translate ('Has been kicked out %u times');
-                       printf $fh ("      $trans<br />\n", $ptr->{'interestingnumbers'}{'kicks_received'});
+                       printf $fh ("      $trans<br />\n", $ptr->{'interestingnumbers'}{'kick_received'});
 
                        $trans = translate ('Has performed %u actions');
                        printf $fh ("      $trans<br />\n", $ptr->{'interestingnumbers'}{'actions'});
@@ -300,53 +316,7 @@ sub output
                        printf $fh ("      $trans<br />\n", $num);
                }
 
-               # actions # TODO
-               # exclamation ratio # TODO
-               # # of nicks
-               #
-               # chats with
-               # lines per day
-
-               print $fh qq#    </td>\n  </tr>\n  <tr>\n    <td class="houractivity">\n#;
-               
-               if (defined ($ptr->{'chars'}))
-               {
-                       print $fh qq#      <table class="hours_of_day">\n        <tr>\n#;
-                       
-                       for (my $i = 0; $i < 12; $i++)
-                       {
-                               my $hour = 2 * $i;
-                               $num = 0;
-
-                               my $img = $V_IMAGES[int ($hour / 6)];
-                               my $height;
-
-                               $num  = $ptr->{'chars'}[$hour];
-                               $num += $ptr->{'chars'}[$hour + 1];
-
-                               $height = int (0.5 + ($time_factor * $num)) || 1;
-
-                               print $fh qq#          <td><img src="$img" alt="$num chars" #,
-                               qq#style="height: ${height}px;" /></td>\n#;
-                       }
-
-                       print $fh <<EOF;
-        </tr>
-       <tr class="hour_row">
-         <td colspan="3">0-5</td>
-         <td colspan="3">6-11</td>
-         <td colspan="3">12-17</td>
-         <td colspan="3">18-23</td>
-       </tr>
-      </table>
-EOF
-               }
-               else
-               {
-                       print '&nbsp;';
-               }
-
-               print $fh qq#    </td>\n    <td class="convpartners">\n#;
+               print $fh qq#    </td>\n    <td>\n#;
                
                if (%{$ptr->{'conversations'}})
                {
@@ -368,7 +338,7 @@ EOF
                        $trans = translate ('Talks to');
 
                        print $fh <<EOF;
-      <table>
+      <table class="conversations">
         <tr>
          <td colspan="2">$trans:</td>
        </tr>
@@ -381,13 +351,14 @@ EOF
                                my $total = 0;
 
                                print $fh "        <tr>\n",
-                               qq#          <td class="nick">$other_name</td>\n#,
-                               qq#          <td class="bar">#;
+                               qq#          <td class="nick right">$other_name</td>\n#,
+                               qq#          <td class="bar horizontal right">#;
 
                                for (my $k = 0; $k < 4; $k++)
                                {
                                        my $img = $H_IMAGES[$k];
-                                       my $width = int (0.5 + ($conv_factor * $ptr->{'conversations'}{$other}{'nicks'}{$nick}[$k])) || 1;
+                                       my $num = $ptr->{'conversations'}{$other}{'nicks'}{$nick}[$k];
+                                       my $width = sprintf ("%.2f", 95 * $num / $max_conv);
                                        
                                        print $fh qq#<img src="$img" alt="" #;
                                        if ($k == 0)
@@ -398,7 +369,7 @@ EOF
                                        {
                                                print $fh qq#class="last" #;
                                        }
-                                       print $fh qq#style="width: ${width}px;" />#;
+                                       print $fh qq#style="width: $width\%;" />#;
                                }
                                
                                print $fh "</td>\n        </tr>\n";
@@ -410,6 +381,92 @@ EOF
                {
                        print $fh '&nbsp;';
                }
+               print $fh qq#    </td>\n  </tr>\n#,
+               qq#  <tr>\n    <td>\n#;
+               
+               if (defined ($ptr->{'chars'}))
+               {
+                       print $fh qq#      <table class="hours">\n        <tr class="bars">\n#;
+                       
+                       for (my $i = 0; $i < 24; $i++)
+                       {
+                               $num = 0;
+
+                               my $img = $V_IMAGES[int ($i / 6)];
+                               my $height;
+
+                               $num  = $ptr->{'chars'}[$i];
+
+                               $height = sprintf ("%.2f", 95 * $num / $max_time);
+
+                               print $fh qq#          <td class="bar vertical"><img src="$img" alt="$num chars" #,
+                               qq#class="first last" style="height: $height\%;" /></td>\n#;
+                       }
+
+                       print $fh <<EOF;
+        </tr>
+       <tr class="numeration">
+         <td colspan="6" class="numeration">0-5</td>
+         <td colspan="6" class="numeration">6-11</td>
+         <td colspan="6" class="numeration">12-17</td>
+         <td colspan="6" class="numeration">18-23</td>
+       </tr>
+      </table>
+EOF
+               }
+               else
+               {
+                       print '&nbsp;';
+               }
+
+               print $fh qq#    </td>\n    <td>\n#;
+
+               #weekly
+               if (%{$nick_data->{$nick}{'weekdays'}})
+               {
+                       my $data = $nick_data->{$nick}{'weekdays'};
+                       my @days = (qw(mon tue wed thu fri sat sun));
+
+                       print $fh qq#      <table class="weekdays">\n#,
+                       qq#        <tr class="bars">\n#;
+
+                       for (@days)
+                       {
+                               my $day = $_;
+                               for (my $i = 0; $i < 4; $i++)
+                               {
+                                       my $num = $nick_data->{$nick}{'weekdays'}{$day}[$i];
+                                       my $height = sprintf ("%.2f", 95 * $num / $max_weekday);
+                                       my $class = '';
+                                       my $img = $V_IMAGES[$i];
+
+                                       print $fh qq#          <td class="bar vertical">#,
+                                       qq#<img src="$img" alt="" class="first last" style="height: $height\%;" />#,
+                                       qq#</td>\n#;
+                               }
+                       }
+
+                       print $fh qq#        </tr>\n#,
+                       qq#        <tr class="numeration">\n#;
+
+                       for (@days)
+                       {
+                               my $day = $_;
+                               my $trans = translate ($day);
+                               
+                               print $fh qq#          <td colspan="4" class="numeration $day">$trans</td>\n#;
+                       }
+
+                       print $fh qq#        </tr>\n#,
+                       qq#      </table>\n#;
+               }
+
+               print $fh qq#    </td>\n    <td>\n#;
+
+               #longterm
+               print $fh qq#      &nbsp;\n#;
+
+               print $fh qq#    </td>\n  </tr>\n#;
        }
 
        print $fh "</table>\n\n";