fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2010-08-23 11:40 am

[dw-free] Memories pass in user name, not user object; server error

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

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

Clean up memories code page code: use a user, rather than a username for
LJ::item_link.

Patch by [personal profile] kareila.

Files modified:
  • cgi-bin/LJ/Entry.pm
  • htdocs/tools/memories.bml
--------------------------------------------------------------------------------
diff -r 48959df3692d -r a4b0829dcccd cgi-bin/LJ/Entry.pm
--- a/cgi-bin/LJ/Entry.pm	Mon Aug 23 19:12:30 2010 +0800
+++ b/cgi-bin/LJ/Entry.pm	Mon Aug 23 19:40:17 2010 +0800
@@ -2150,11 +2150,12 @@ sub item_link
 {
     my ($u, $itemid, $anum, @args) = @_;
     my $ditemid = $itemid*256 + $anum;
+    $u = LJ::load_user( $u ) unless LJ::isu( $u );
 
     # XXX: should have an option of returning a url with escaped (&)
     #      or non-escaped (&) arguments.  a new link object would be best.
     my $args = @args ? "?" . join("&", @args) : "";
-    return LJ::journal_base( $u ) . "/$ditemid.html$args";
+    return $u->journal_base . "/$ditemid.html$args";
 }
 
 # <LJFUNC>
diff -r 48959df3692d -r a4b0829dcccd htdocs/tools/memories.bml
--- a/htdocs/tools/memories.bml	Mon Aug 23 19:12:30 2010 +0800
+++ b/htdocs/tools/memories.bml	Mon Aug 23 19:40:17 2010 +0800
@@ -218,21 +218,23 @@ _c?>
              { security => $securities, filter => $filter });
      return $dberr->() unless defined $memoryhash;
      my @memories = $sortfunc{$sort}->( values %$memoryhash );
+     my $mem_us = LJ::load_userids( map { $_->{journalid} } @memories );
 
      $body .= "<form method='post' action='./memories?user=$user$authasarge'>\n" . LJ::form_auth()
          if $is_owner && $GET{multidelete};
      $body .= "<ul>\n";
      foreach my $mem (@memories) {
-         my $user = $mem->{user};
+         my $memuser = $mem->{user};
+         my $mem_u = $mem_us->{ $mem->{journalid} };
          my $eh_des = LJ::ehtml($mem->{'des'});
          LJ::text_out(\$eh_des);
 
          my ($entrylink, $editlink);
-         if ($user) {
-             my $itemid = int($mem->{'ditemid'} / 256);
-             my $anum = $mem->{'ditemid'} % 256;
-             $entrylink = LJ::item_link($user, $itemid, $anum);
-             $editlink = "/tools/memadd?journal=$user&amp;itemid=$mem->{ditemid}$authasarge";
+         if ( $memuser && $mem_u ) {
+             my $itemid = int( $mem->{ditemid} / 256 );
+             my $anum = $mem->{ditemid} % 256;
+             $entrylink = LJ::item_link( $mem_u, $itemid, $anum );
+             $editlink = "/tools/memadd?journal=$memuser&amp;itemid=$mem->{ditemid}$authasarge";
          } else {
              $entrylink = "/talkread?itemid=$mem->{ditemid}";
              $editlink = "/tools/memadd?itemid=$mem->{ditemid}$authasarge";
@@ -246,11 +248,11 @@ _c?>
                  if $GET{multidelete};
          }
 
-         my %icons = (
-            'friends' => "<?securityprotected?>",
-            'private' => "<?securityprivate?>",
-         );
-         $body .= "<p><li>$delete <a href=\"$entrylink\"><b>$eh_des</b></a> $edit $icons{$mem->{security}}<br /><font size='-1'><b>$user</b></font></li>";
+         my $icon = {
+                      friends => "<?securityprotected?>",
+                      private => "<?securityprivate?>",
+                    }->{ $mem->{security} } || '';
+         $body .= "<p><li>$delete <a href=\"$entrylink\"><b>$eh_des</b></a> $edit $icon<br /><font size='-1'><b>$memuser</b></font></li>";
      }
      $body .= "</ul>";
      if ($is_owner && $GET{multidelete}) {
--------------------------------------------------------------------------------