[dw-free] Use common logic for user link bar on profile page and in S2
[commit: http://hg.dwscoalition.org/dw-free/rev/535e170916f2]
http://bugs.dwscoalition.org/show_bug.cgi?id=400
Nice cleanup of S2 linkbar functionality.
Patch by
afuna.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=400
Nice cleanup of S2 linkbar functionality.
Patch by
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Files modified:
- bin/upgrading/en.dat
- cgi-bin/DW/Logic/ProfilePage.pm
- cgi-bin/LJ/S2.pm
- htdocs/userinfo.bml.text
-------------------------------------------------------------------------------- diff -r 3bd415c4b16c -r 535e170916f2 bin/upgrading/en.dat --- a/bin/upgrading/en.dat Wed Mar 04 08:04:40 2009 +0000 +++ b/bin/upgrading/en.dat Wed Mar 04 08:08:06 2009 +0000 @@ -2998,6 +2998,92 @@ tos.haveread=I have read and agree to th tos.mustread=Before continuing you must read and agree to the <a [[aopts]]>Terms of Service.</a> +userlinkbar.addsub=Subscribe + +userlinkbar.addsub.title.loggedout=You must be logged in to subscribe to this account + +userlinkbar.addsub.title.other=Subscribe to this account + +userlinkbar.addsub.title.self=Subscribe to your account + +userlinkbar.addtrust=Grant Access + +userlinkbar.addtrust.title.other=Grant access to this user + +userlinkbar.addtrust.title.loggedout=You must be logged in to grant access to this user + +userlinkbar.joincomm=Join + +userlinkbar.joincomm.title.cantjoin=You cannot join this community + +userlinkbar.joincomm.title.closed=Membership for this community is closed + +userlinkbar.joincomm.title.loggedout=You must be logged in to join this community + +userlinkbar.joincomm.title.open=Join this community + +userlinkbar.leavecomm=Leave + +userlinkbar.leavecomm.title=Leave this community + +userlinkbar.memories=Memories + +userlinkbar.memories.title.other=View this user's memories + +userlinkbar.memories.title.self=View your memories + +userlinkbar.modifysub=Modify Subscription + +userlinkbar.modifysub.title.other=Modify/remove subscription for this account + +userlinkbar.modifysub.title.self=Modify/remove subscription for your account + +userlinkbar.modifytrust=Modify Access + +userlinkbar.modifytrust.title.other=Modify/remove access from this user + +userlinkbar.tellafriend=Tell a Friend + +userlinkbar.tellafriend.title.other=Tell a friend about this journal + +userlinkbar.tellafriend.title.self=Tell a friend about your journal + +userlinkbar.post=Post + +userlinkbar.post.title=Post to this community + +userlinkbar.post.title.cantpost=You cannot post to this community + +userlinkbar.post.title.loggedout=You must be logged in to post to this community + +userlinkbar.postentry=Post an Entry + +userlinkbar.postentry.title=Post to your journal + +userlinkbar.sendmessage=Send Message + +userlinkbar.sendmessage.title=Send a private message to this user + +userlinkbar.sendmessage.title.cantsendmessage=You cannot send a private message to this user + +userlinkbar.sendmessage.title.loggedout=You must be logged in to send a private message to this user + +userlinkbar.track=Track + +userlinkbar.track.title=Receive notifications of updates to this community + +userlinkbar.tracksyn=Track Feed + +userlinkbar.tracksyn.title=Receive notifications of updates to this feed + +userlinkbar.trackuser=Track User + +userlinkbar.trackuser.title=Receive notifications of updates from this user + +userlinkbar.trackuser.title.cantuseesn=You cannot manage notifications + +userlinkbar.trackuser.title.loggedout=You must be logged in to manage notifications + username=Username userpic.inactive=Inactive diff -r 3bd415c4b16c -r 535e170916f2 cgi-bin/DW/Logic/ProfilePage.pm --- a/cgi-bin/DW/Logic/ProfilePage.pm Wed Mar 04 08:04:40 2009 +0000 +++ b/cgi-bin/DW/Logic/ProfilePage.pm Wed Mar 04 08:08:06 2009 +0000 @@ -19,7 +19,7 @@ package DW::Logic::ProfilePage; package DW::Logic::ProfilePage; use strict; - +use DW::Logic::UserLinkBar; # returns a new profile page object sub profile_page { @@ -40,7 +40,6 @@ sub profile_page { *LJ::User::profile_page = \&profile_page; *DW::User::profile_page = \&profile_page; - # returns array of hashrefs # ( # { url => "http://...", @@ -56,216 +55,10 @@ sub action_links { my $self = $_[0]; my $u = $self->{u}; - my $user = $u->user; my $remote = $self->{remote}; - my @ret; - -### JOIN/LEAVE COMMUNITY - - if ( $u->is_community ) { - # if logged in and a member of the community $u - if ( $remote && $remote->member_of( $u ) ) { - push @ret, { - url => "community/leave.bml?comm=$user", - title_ml => '.optionlinks.leavecomm.title', - image => 'leave-comm.gif', - text_ml => '.optionlinks.leavecomm', - class => 'profile_leave', - }; - - # if logged out, OR, not a member - } else { - my @comm_settings = LJ::get_comm_settings($u); - - my $link = { - text_ml => '.optionlinks.joincomm', - }; - - # if they're not allowed to join at this moment (many reasons) - if ($comm_settings[0] eq 'closed' || !$remote || $remote->is_identity || !$u->is_visible) { - $link->{title_ml} = $comm_settings[0] eq 'closed' ? - '.optionlinks.joincomm.title.closed' : - '.optionlinks.joincomm.title.loggedout'; - $link->{title_ml} = '.optionlinks.joincomm.title.cantjoin' - if $remote && $remote->is_identity; - $link->{image} = 'join-comm-disabled.gif'; - $link->{class} = 'profile_join_disabled'; - - # allowed to join - } else { - $link->{url} = "community/join.bml?comm=$user"; - $link->{title_ml} = '.optionlinks.joincomm.title.open'; - $link->{image} = 'join-comm.gif'; - $link->{class} = 'profile_join'; - } - - push @ret, $link; - } - } - -### ADD TRUST - - # can add/modify trust for the user if they are a person and not the same as the remote user, and remote is a personal account - if ( ( $u->is_personal || $u->is_identity ) && ( !$remote || ( $remote && !$remote->equals( $u ) && $remote->is_personal ) ) ) { - my $link = {}; - - my $remote_trusts = $remote && $remote->trusts( $u ) ? 1 : 0; - $link->{text_ml} = $remote_trusts ? '.optionlinks.modifytrust' : '.optionlinks.addtrust'; - if ( $remote && ( $remote_trusts || $u->is_visible ) ) { - $link->{url} = "manage/circle/add.bml?user=$user&action=access"; - $link->{title_ml} = $remote_trusts ? '.optionlinks.modifytrust.title.other' : '.optionlinks.addtrust.title.other'; - $link->{class} = 'profile_addtrust'; - $link->{image} = 'add-friend.gif'; - } else { - $link->{title_ml} = '.optionlinks.addtrust.title.loggedout'; - $link->{class} = 'profile_addtrust_disabled'; - $link->{image} = 'add-friend-disabled.gif'; - } - - push @ret, $link; - } - -### ADD WATCH - - { - my $link = {}; - - my $remote_watches = $remote && $remote->watches( $u ) ? 1 : 0; - $link->{text_ml} = $remote_watches ? '.optionlinks.modifysub' : '.optionlinks.addsub'; - if ( $remote && ( $remote_watches || $u->is_visible ) ) { - $link->{url} = "manage/circle/add.bml?user=$user&action=subscribe"; - - if ( $remote->equals( $u ) ) { - $link->{title_ml} = $remote_watches ? '.optionlinks.modifysub.title.self' : '.optionlinks.addsub.title.self'; - } else { - $link->{title_ml} = $remote_watches ? '.optionlinks.modifysub.title.other' : '.optionlinks.addsub.title.other'; - } - - if ( $u->is_community ) { - $link->{class} = 'profile_addsub_comm'; - $link->{image} = 'watch-comm.gif'; - } elsif ( $u->is_syndicated ) { - $link->{class} = 'profile_addsub_feed'; - $link->{image} = 'add-feed.gif'; - } else { - $link->{class} = 'profile_addsub_person'; - $link->{image} = 'add-friend.gif'; - } - } else { - $link->{title_ml} = '.optionlinks.addsub.title.loggedout'; - if ( $u->is_community ) { - $link->{class} = 'profile_addsub_comm_disabled'; - $link->{image} = 'watch-comm-disabled.gif'; - } elsif ( $u->is_syndicated ) { - $link->{class} = 'profile_addsub_feed_disabled'; - $link->{image} = 'add-feed-disabled.gif'; - } else { - $link->{class} = 'profile_addsub_person_disabled'; - $link->{image} = 'add-friend-disabled.gif'; - } - } - - push @ret, $link; - } - -### POST ENTRY - - if ( $remote && $remote->is_personal && ( $u->is_personal || $u->is_community ) && $remote->can_post_to( $u ) ) { - my $link = { - url => "update.bml?usejournal=$user", - class => 'profile_postentry', - image => 'post-entry.gif', - }; - - if ( $u->is_community ) { - $link->{text_ml} = '.optionlinks.post'; - $link->{title_ml} = '.optionlinks.post.title'; - } else { - $link->{text_ml} = '.optionlinks.postentry'; - $link->{title_ml} = '.optionlinks.postentry.title'; - } - - push @ret, $link; - } elsif ( $u->is_community ) { - push @ret, { - text_ml => '.optionlinks.post', - title_ml => $remote ? '.optionlinks.post.title.cantpost' : '.optionlinks.post.title.loggedout', - class => 'profile_postentry_disabled', - image => 'post-entry-disabled.gif', - }; - } - -### TRACK - - if ( LJ::is_enabled( 'esn' ) ) { - my $link = { - text_ml => '.optionlinks.trackuser', - title_ml => '.optionlinks.trackuser.title', - }; - - if ( $remote && $remote->equals( $u ) ) { - $link->{text_ml} = '.optionlinks.tracking'; - $link->{title_ml} = '.optionlinks.tracking.title'; - } elsif ( $u->is_community ) { - $link->{text_ml} = '.optionlinks.track'; - $link->{title_ml} = '.optionlinks.track.title'; - } elsif ( $u->is_syndicated ) { - $link->{text_ml} = '.optionlinks.tracksyn'; - $link->{title_ml} = '.optionlinks.tracksyn.title'; - } - - if ( $remote && $remote->can_use_esn ) { - $link->{url} = "manage/subscriptions/user.bml?journal=$user"; - $link->{class} = 'profile_trackuser'; - $link->{image} = 'track.gif'; - } else { - $link->{title_ml} = $remote ? '.optionlinks.trackuser.title.cantuseesn' : '.optionlinks.trackuser.title.loggedout'; - $link->{class} = 'profile_trackuser_disabled'; - $link->{image} = 'track-disabled.gif'; - } - - push @ret, $link; - } - -### PRIVATE MESSAGE - - if ( ( $u->is_personal || $u->is_identity ) && !$u->equals( $remote ) ) { - my $link = { - text_ml => '.optionlinks.sendmessage', - title_ml => '.optionlinks.sendmessage.title', - }; - - if ( $remote && $u->can_receive_message( $remote ) ) { - $link->{url} = "inbox/compose.bml?user=$user"; - $link->{class} = 'profile_sendmessage'; - $link->{image} = 'send-message.gif'; - } else { - $link->{title_ml} = $remote ? '.optionlinks.sendmessage.title.cantsendmessage' : '.optionlinks.sendmessage.title.loggedout'; - $link->{class} = 'profile_sendmessage_disabled'; - $link->{image} = 'send-message-disabled.gif'; - } - - push @ret, $link; - } - -### EXTRA - - # fix up image links and URLs and language - foreach my $link ( @ret ) { - $link->{image} = "$LJ::IMGPREFIX/profile_icons/$link->{image}" - if $link->{image} && $link->{image} !~ /^$LJ::IMGPREFIX/; - $link->{url} = "$LJ::SITEROOT/$link->{url}" - if $link->{url} && $link->{url} !~ /^$LJ::SITEROOT/; - - if ( my $ml = delete $link->{title_ml} ) { - $link->{title} = LJ::Lang::ml( $ml ); - } - if ( my $ml = delete $link->{text_ml} ) { - $link->{text} = LJ::Lang::ml( $ml ); - } - } - - return @ret; + + my $user_link_bar = $u->user_link_bar( $remote, class_prefix => "profile" ); + my @ret = $user_link_bar->get_links( "manage_membership", "trust", "watch", "post", "track", "message" ); } diff -r 3bd415c4b16c -r 535e170916f2 cgi-bin/LJ/S2.pm --- a/cgi-bin/LJ/S2.pm Wed Mar 04 08:04:40 2009 +0000 +++ b/cgi-bin/LJ/S2.pm Wed Mar 04 08:08:06 2009 +0000 @@ -2197,9 +2197,8 @@ sub UserLite 'link_keyseq' => [ ], }; my $lks = $o->{link_keyseq}; - push @$lks, qw(add_friend post_entry memories); - push @$lks, "tell_friend" unless $LJ::DISABLED{'tellafriend'}; - push @$lks, "search" unless $LJ::DISABLED{'offsite_journal_search'}; + push @$lks, qw(manage_membership trust watch post_entry track message); + push @$lks, 'tell_friend' unless $LJ::DISABLED{tellafriend}; # TODO: Figure out some way to use the userinfo_linkele hook here? @@ -3455,37 +3454,23 @@ sub UserLite__get_link { my ($ctx, $this, $key) = @_; - my $u = $this->{_u}; - my $user = $u->{user}; - my $remote = LJ::get_remote(); - my $is_remote = defined($remote) && $remote->{userid} eq $u->{userid}; - my $has_journal = $u->{journaltype} ne 'I'; + my $linkbar = $this->{_u}->user_link_bar( LJ::get_remote() ); my $button = sub { - return LJ::S2::Link($_[0], $_[1], LJ::S2::Image("$LJ::IMGPREFIX/$_[2]", 22, 20)); - }; - - if ($key eq 'add_friend' && defined($remote)) { - return $button->("$LJ::SITEROOT/manage/circle/add.bml?user=$user", "Add $user to friends list", "btn_addfriend.gif"); - } - if ($key eq 'post_entry') { - return undef unless $has_journal and LJ::can_use_journal($remote->{'userid'}, $user); - - my $caption = $is_remote ? "Update your journal" : "Post in $user"; - return $button->("$LJ::SITEROOT/update.bml?usejournal=$user", $caption, "btn_edit.gif"); - } - if ($key eq 'memories') { - my $caption = $is_remote ? "Your memories" : "${user}'s memories"; - return $button->("$LJ::SITEROOT/tools/memories.bml?user=$user", $caption, "btn_memories.gif"); - } - if ($key eq 'tell_friend' && $has_journal && !$LJ::DISABLED{'tellafriend'}) { - my $caption = $is_remote ? "Tell a friend about your journal" : "Tell a friend about $user"; - return $button->("$LJ::SITEROOT/tools/tellafriend.bml?user=$user", $caption, "btn_tellfriend.gif"); - } - if ($key eq 'search' && $has_journal && !$LJ::DISABLED{'offsite_journal_search'}) { - my $caption = $is_remote ? "Search your journal" : "Search $user"; - return $button->("$LJ::SITEROOT/tools/search.bml?user=$user", $caption, "btn_search.gif"); - } + my $link = $_[0]; + return undef unless $link; + + return LJ::S2::Link($link->{url}, $link->{title}, LJ::S2::Image($link->{image}, 20, 18)); + }; + + return $button->( $linkbar->manage_membership ) if $key eq 'manage_membership'; + return $button->( $linkbar->trust ) if $key eq 'trust'; + return $button->( $linkbar->watch ) if $key eq 'watch'; + return $button->( $linkbar->post ) if $key eq 'post_entry'; + return $button->( $linkbar->message ) if $key eq 'message'; + return $button->( $linkbar->track ) if $key eq 'track'; + return $button->( $linkbar->memories ) if $key eq 'memories'; + return $button->( $linkbar->tellafriend ) if $key eq 'tell_friend'; # Else? return undef; diff -r 3bd415c4b16c -r 535e170916f2 htdocs/userinfo.bml.text --- a/htdocs/userinfo.bml.text Wed Mar 04 08:04:40 2009 +0000 +++ b/htdocs/userinfo.bml.text Wed Mar 04 08:08:06 2009 +0000 @@ -330,94 +330,6 @@ .nonexist.name=Unknown user -.optionlinks.addsub=Subscribe - -.optionlinks.addsub.title.loggedout=You must be logged in to subscribe to this account - -.optionlinks.addsub.title.other=Subscribe to this account - -.optionlinks.addsub.title.self=Subscribe to your account - -.optionlinks.addtrust=Grant Access - -.optionlinks.addtrust.title.other=Grant access to this user - -.optionlinks.addtrust.title.loggedout=You must be logged in to grant access to this user - -.optionlinks.joincomm=Join - -.optionlinks.joincomm.title.cantjoin=You cannot join this community - -.optionlinks.joincomm.title.closed=Membership for this community is closed - -.optionlinks.joincomm.title.loggedout=You must be logged in to join this community - -.optionlinks.joincomm.title.open=Join this community - -.optionlinks.leavecomm=Leave - -.optionlinks.leavecomm.title=Leave this community - -.optionlinks.modifysub=Modify Subscription - -.optionlinks.modifysub.title.other=Modify/remove subscription for this account - -.optionlinks.modifysub.title.self=Modify/remove subscription for your account - -.optionlinks.modifytrust=Modify Access - -.optionlinks.modifytrust.title.other=Modify/remove access from this user - -.optionlinks.post=Post - -.optionlinks.post.title=Post to this community - -.optionlinks.post.title.cantpost=You cannot post to this community - -.optionlinks.post.title.loggedout=You must be logged in to post to this community - -.optionlinks.postentry=Post an Entry - -.optionlinks.postentry.title=Post to your journal - -.optionlinks.sendmessage=Send Message - -.optionlinks.sendmessage.title=Send a private message to this user - -.optionlinks.sendmessage.title.cantsendmessage=You cannot send a private message to this user - -.optionlinks.sendmessage.title.loggedout=You must be logged in to send a private message to this user - -.optionlinks.track=Track - -.optionlinks.track.title=Receive notifications of updates to this community - -.optionlinks.tracking=Tracking - -.optionlinks.tracking.title=Manage your notifications - -.optionlinks.tracksyn=Track Feed - -.optionlinks.tracksyn.title=Receive notifications of updates to this feed - -.optionlinks.trackuser=Track User - -.optionlinks.trackuser.title=Receive notifications of updates from this user - -.optionlinks.trackuser.title.cantuseesn=You cannot manage notifications - -.optionlinks.trackuser.title.loggedout=You must be logged in to manage notifications - -.optionlinks.viewjournal=View Journal - -.optionlinks.viewjournal.title.comm=View this community's journal - -.optionlinks.viewjournal.title.self=View your journal - -.optionlinks.viewjournal.title.syn=View this feed's journal - -.optionlinks.viewjournal.title.user=View this user's journal - .people.header=People .people.members.none=Members (0) --------------------------------------------------------------------------------