fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2010-10-27 07:25 am

[dw-free] check calls to LJ::ago_text for inappropriate uses of zero

[commit: http://hg.dwscoalition.org/dw-free/rev/72171d6809cb]

http://bugs.dwscoalition.org/show_bug.cgi?id=3158

Make a new function, diff_ago_text, to handle when we're looking at the
difference from the current time.

Patch by [personal profile] kareila.

Files modified:
  • cgi-bin/LJ/Directory/Results.pm
  • cgi-bin/LJ/User.pm
  • cgi-bin/LJ/Widget/ImportStatus.pm
  • cgi-bin/LJ/Widget/InboxFolder.pm
  • cgi-bin/ljtimeutil.pl
  • htdocs/admin/theschwartz.bml
  • htdocs/latest.bml
  • htdocs/support/help.bml
  • htdocs/support/see_request.bml
  • htdocs/tools/endpoints/directorysearch.bml
  • htdocs/tools/recent_comments.bml
--------------------------------------------------------------------------------
diff -r 890ddde03d5b -r 72171d6809cb cgi-bin/LJ/Directory/Results.pm
--- a/cgi-bin/LJ/Directory/Results.pm	Wed Oct 27 15:18:37 2010 +0800
+++ b/cgi-bin/LJ/Directory/Results.pm	Wed Oct 27 15:25:22 2010 +0800
@@ -95,7 +95,8 @@ sub render_simple {
     foreach my $u (@users) {
         $ret .= "<tr><td class='SearchResult'>";
         $ret .= $u->ljuser_display . " - " . $u->name_html;
-        $ret .= " <small>(Last updated: ". LJ::ago_text(time() - $updated->{$u->id}) . ")</small>";
+        # FIXME: consider replacing this with $u->last_updated
+        $ret .= " <small>(Last updated: ". LJ::diff_ago_text( $updated->{$u->id} ) . ")</small>";
         $ret .= "</td></tr>";
     }
     $ret .= "</table>";
@@ -123,13 +124,15 @@ sub render_pics {
             };
         $ret .= '<div class="Username">' . $u->ljuser_display . '</div>';
 
-        if ($updated->{$u->id}) {
-            $ret .= "<small>Updated ". LJ::ago_text(time() - $updated->{$u->id}) . "</small>";
+        $ret .= "<small>";
+
+        if ( $updated->{$u->id} ) {
+            $ret .= LJ::Lang::ml( 'search.user.update.last', { time => LJ::diff_ago_text( $updated->{$u->id} ) } );
         } else {
-            $ret .= "<small>Never updated</small>";
+            $ret .= LJ::Lang::ml( 'search.user.update.never' );
         }
 
-        $ret .= "</td>";
+        $ret .= "</small></td>";
     }
     $ret .= "</tr></table>";
 
diff -r 890ddde03d5b -r 72171d6809cb cgi-bin/LJ/User.pm
--- a/cgi-bin/LJ/User.pm	Wed Oct 27 15:18:37 2010 +0800
+++ b/cgi-bin/LJ/User.pm	Wed Oct 27 15:25:22 2010 +0800
@@ -720,8 +720,7 @@ sub last_updated {
     return undef unless $u -> is_person || $u->is_community;
 
     my $lastupdated = substr( LJ::mysql_time( $u->timeupdate ), 0, 10 );
-    my $secondsold = time() - $u->timeupdate;
-    my $ago_text = LJ::ago_text( $secondsold );
+    my $ago_text = LJ::diff_ago_text( $u->timeupdate );
 
     if ( $u->timeupdate ) {
         return LJ::Lang::ml( 'lastupdated.ago',
@@ -8369,9 +8368,9 @@ sub user_search_display {
         $ret .= "<tr><td colspan='2' style='text-align: left; font-size: smaller' class='lastupdated'>";
 
         if ( $updated->{$u->userid} > 0 ) {
-            $ret .= BML::ml( 'search.user.update.last', { time => LJ::ago_text( time() - $updated->{$u->userid} ) } );
-        } else {
-            $ret .= BML::ml( 'search.user.update.never' );
+            $ret .= LJ::Lang::ml( 'search.user.update.last', { time => LJ::diff_ago_text( $updated->{$u->id} ) } );
+        } else {
+            $ret .= LJ::Lang::ml( 'search.user.update.never' );
         }
 
         $ret .= "</td></tr>";
diff -r 890ddde03d5b -r 72171d6809cb cgi-bin/LJ/Widget/ImportStatus.pm
--- a/cgi-bin/LJ/Widget/ImportStatus.pm	Wed Oct 27 15:18:37 2010 +0800
+++ b/cgi-bin/LJ/Widget/ImportStatus.pm	Wed Oct 27 15:25:22 2010 +0800
@@ -46,7 +46,7 @@ sub render_body {
             foreach my $item ( sort keys %{$import_item->{items}} ) {
                 my $i = $import_item->{items}->{$item};
                 my $color = { init => '#333333', ready => '#3333aa', queued => '#33aa33', failed => '#aa3333', succeeded => '#00ff00' }->{$i->{status}};
-                my $ago_text = $i->{last_touch} ? LJ::ago_text( time() - $i->{last_touch} ) : "";
+                my $ago_text = $i->{last_touch} ? LJ::diff_ago_text( $i->{last_touch} ) : "";
                 my $status = "<span style='color: $color;'>";
                 if ( $i->{status} eq 'init' ) {
                     $status .= $class->ml( "widget.importstatus.status.$i->{status}.$item" );
@@ -60,7 +60,7 @@ sub render_body {
                 $ret .= "<td>";
                 $ret .= $ago_text ? $class->ml( 'widget.importstatus.statusasof', { status => $status, timeago => $ago_text } ) : $status;
                 $ret .= "</td>";
-                $ret .= "<td>" . $class->ml( 'widget.importstatus.createtime', { timeago => LJ::ago_text( time() - $i->{created} ) } ) . "</td>";
+                $ret .= "<td>" . $class->ml( 'widget.importstatus.createtime', { timeago => LJ::diff_ago_text( $i->{created} ) } ) . "</td>";
                 $ret .= "</tr>";
 
                 $import_in_progress = 1 if $i->{status} =~ /^(?:init|ready|queued)$/;
diff -r 890ddde03d5b -r 72171d6809cb cgi-bin/LJ/Widget/InboxFolder.pm
--- a/cgi-bin/LJ/Widget/InboxFolder.pm	Wed Oct 27 15:18:37 2010 +0800
+++ b/cgi-bin/LJ/Widget/InboxFolder.pm	Wed Oct 27 15:25:22 2010 +0800
@@ -172,7 +172,7 @@ sub render_body {
                   . LJ::img( $bookmark, "", { class => 'InboxItem_Bookmark' } )
                   . "</a>";
 
-        my $when = LJ::ago_text(time() - $inbox_item->when_unixtime);
+        my $when = LJ::diff_ago_text( $inbox_item->when_unixtime );
         my $contents = $inbox_item->as_html || '';
 
         my $row_class = ($rownum++ % 2 == 0) ? "InboxItem_Meta" : "InboxItem_Meta alt";
diff -r 890ddde03d5b -r 72171d6809cb cgi-bin/ljtimeutil.pl
--- a/cgi-bin/ljtimeutil.pl	Wed Oct 27 15:18:37 2010 +0800
+++ b/cgi-bin/ljtimeutil.pl	Wed Oct 27 15:25:22 2010 +0800
@@ -246,6 +246,18 @@ sub ago_text
     }
 }
 
+# args: time in seconds of last activity; "current" time in seconds.
+# returns: result of LJ::ago_text for the difference.
+
+sub diff_ago_text {
+    my ( $last, $time ) = @_;
+    return ago_text( 0 ) unless $last;
+    $time = time() unless defined $time;
+
+    my $diff = ( $time - $last ) || 1;
+    return ago_text( $diff );
+}
+
 # Given a year, month, and day; calculate the age in years compared to now. May return a negative number or
 # zero if called in such a way as would cause those.
 
diff -r 890ddde03d5b -r 72171d6809cb htdocs/admin/theschwartz.bml
--- a/htdocs/admin/theschwartz.bml	Wed Oct 27 15:18:37 2010 +0800
+++ b/htdocs/admin/theschwartz.bml	Wed Oct 27 15:25:22 2010 +0800
@@ -73,8 +73,8 @@ body<=
         foreach my $job ( @$jobs ) {
             my ( $jid, $fn, $it, $r_it, $ra, $r_ra, $gu, $r_gu, $pr ) = @$job;
 
-            my $ago_it = LJ::ago_text( time() - $r_it );
-            my $ago_ra = LJ::ago_text( time() - $r_ra );
+            my $ago_it = LJ::diff_ago_text( $r_it );
+            my $ago_ra = LJ::diff_ago_text( $r_ra );
 
             my $state;
             warn "[$r_ra, $r_gu]\n";
diff -r 890ddde03d5b -r 72171d6809cb htdocs/latest.bml
--- a/htdocs/latest.bml	Wed Oct 27 15:18:37 2010 +0800
+++ b/htdocs/latest.bml	Wed Oct 27 15:25:22 2010 +0800
@@ -159,7 +159,7 @@ EOC
             if ( ! $obj->poster->equals( $obj->journal ) ) {
                 $user .= ' in ' . $obj->journal->ljuser_display;
             }
-            my $time = LJ::ago_text( $now - $obj->logtime_unix );
+            my $time = LJ::diff_ago_text( $obj->logtime_unix, $now );
             my $url = $obj->url;
             my $truncated;
             my $evt = $obj->event_html_summary( 2000, { cuturl => $url, preformatted => $obj->prop( 'opt_preformatted' ) }, \$truncated );
diff -r 890ddde03d5b -r 72171d6809cb htdocs/support/help.bml
--- a/htdocs/support/help.bml	Wed Oct 27 15:18:37 2010 +0800
+++ b/htdocs/support/help.bml	Wed Oct 27 15:25:22 2010 +0800
@@ -327,7 +327,7 @@ body<=
      # other content for this request
      my $summary = LJ::ehtml($sp->{'subject'});
      my $secold = time() - $sp->{'timecreate'};
-     my $age = $GET{rawdates} ? LJ::mysql_time($sp->{'timecreate'}) : LJ::ago_text($secold);
+     my $age = $GET{rawdates} ? LJ::mysql_time( $sp->{timecreate} ) : LJ::ago_text( $secold || 1 );
      my $probarea = $sp->{_cat}->{'catname'};
      my $points = LJ::Support::calc_points($sp, $secold);
 
diff -r 890ddde03d5b -r 72171d6809cb htdocs/support/see_request.bml
--- a/htdocs/support/see_request.bml	Wed Oct 27 15:18:37 2010 +0800
+++ b/htdocs/support/see_request.bml	Wed Oct 27 15:25:22 2010 +0800
@@ -473,8 +473,8 @@ body<=
         $ret .= "<tr><td align='right'><b>$ML{'.tier'}</b></td><td>$tier_map{$latest_timelogged_tier}</td></tr>\n";
     }
 
-    my $timecreate = LJ::time_to_http($sp->{'timecreate'});
-    my $age = LJ::ago_text(time() - $sp->{'timecreate'});
+    my $timecreate = LJ::time_to_http( $sp->{timecreate} );
+    my $age = LJ::diff_ago_text( $sp->{timecreate} );
     $ret .= "<tr><td align='right'><b>$ML{'.timeposted'}:</b></td><td>$timecreate ($age)</td></tr>\n";
     my $state = $sp->{'state'};
     if ($state eq "open") {
diff -r 890ddde03d5b -r 72171d6809cb htdocs/tools/endpoints/directorysearch.bml
--- a/htdocs/tools/endpoints/directorysearch.bml	Wed Oct 27 15:18:37 2010 +0800
+++ b/htdocs/tools/endpoints/directorysearch.bml	Wed Oct 27 15:25:22 2010 +0800
@@ -61,8 +61,7 @@ _c?>
                     my @users;
                     foreach my $u ($results->users) {
                         my $updatetime = $updated->{$u->userid};
-                        my $updatetimestring = $updatetime ? LJ::ago_text(time() - $updatetime) :
-                            'Never';
+                        my $updatetimestring = LJ::diff_ago_text( $updatetime );
 
                         push @users, {
                             lastupdated => $updatetime,
diff -r 890ddde03d5b -r 72171d6809cb htdocs/tools/recent_comments.bml
--- a/htdocs/tools/recent_comments.bml	Wed Oct 27 15:18:37 2010 +0800
+++ b/htdocs/tools/recent_comments.bml	Wed Oct 27 15:25:22 2010 +0800
@@ -197,7 +197,7 @@ body<=
             $ret .= "<tr valign='top' id='cmtbar$talkid'><td style='width: 150px; line-height: 1.5em; border-top: 1px solid #999; background-color: $bgcolor' id='cmtbar$talkid'>";
             $ret .= (LJ::isu($pu) ? LJ::ljuser($pu) : $ML{ '.anonymous' }) . "<br />";
 
-            $ret .= LJ::ago_text($now - $r->{datepostunix}) . "<br />";
+            $ret .= LJ::diff_ago_text( $r->{datepostunix}, $now ) . "<br />";
             $ret .= "<div id='state$talkid'>$state</div>" if $r->{state} ne "D";
 
             unless ($r->{state} eq "D") {
@@ -302,7 +302,7 @@ body<=
             my $commentanchor = LJ::Talk::comment_anchor( $talkid );
             my $talkurl = "$logurl?thread=$talkid$commentanchor";
 
-            my $hr_ago = LJ::ago_text($now - $r->{'posttime'});
+            my $hr_ago = LJ::diff_ago_text( $r->{posttime}, $now );
             my $subject;
             my $delete;
             my $editlink;
--------------------------------------------------------------------------------