mark: A photo of Mark kneeling on top of the Taal Volcano in the Philippines. It was a long hike. (Default)
Mark Smith ([staff profile] mark) wrote in [site community profile] changelog2009-10-30 11:15 pm

[dw-free] Tie community to admin promo codes

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

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

Add ability for a promo code to be tied to a community or user. If a
community, it suggests the community for you to join. If a user, it does
the normal 'suggest the user, and find what comms they're in to suggest
those too'.

Patch by [staff profile] mark.

Files modified:
  • bin/upgrading/update-db-general.pl
  • cgi-bin/LJ/User.pm
  • cgi-bin/LJ/Widget/CreateAccount.pm
  • cgi-bin/LJ/Widget/CreateAccountInviter.pm
--------------------------------------------------------------------------------
diff -r 63b5c594edb8 -r 4c1f8b40aa26 bin/upgrading/update-db-general.pl
--- a/bin/upgrading/update-db-general.pl	Wed Oct 28 14:46:07 2009 -0500
+++ b/bin/upgrading/update-db-general.pl	Fri Oct 30 23:15:10 2009 +0000
@@ -2978,6 +2978,7 @@ CREATE TABLE acctcode_promo (
     max_count int(10) unsigned not null default 0,
     current_count int(10) unsigned not null default 0,
     active enum('1','0') not null default 1,
+    suggest_journalid int unsigned,
 
     PRIMARY KEY ( code )
 )
@@ -3829,6 +3830,10 @@ EOF
                   q{ALTER TABLE clustertrack2 ADD COLUMN accountlevel SMALLINT UNSIGNED AFTER clusterid} );
     }
 
+    unless ( column_type( 'acctcode_promo', 'suggest_journalid' ) ) {
+        do_alter( 'acctcode_promo',
+                  q{ALTER TABLE acctcode_promo ADD COLUMN suggest_journalid INT UNSIGNED} );
+    }
 
 });
 
diff -r 63b5c594edb8 -r 4c1f8b40aa26 cgi-bin/LJ/User.pm
--- a/cgi-bin/LJ/User.pm	Wed Oct 28 14:46:07 2009 -0500
+++ b/cgi-bin/LJ/User.pm	Fri Oct 30 23:15:10 2009 +0000
@@ -217,7 +217,9 @@ sub create_personal {
         if ( $inviter ) {
             LJ::set_rel( $u, $inviter, 'I' );
             LJ::statushistory_add( $u, $inviter, 'create_from_invite', "Created new account." );
-            LJ::Event::InvitedFriendJoins->new( $inviter, $u )->fire;
+            if ( $inviter->is_individual ) {
+                LJ::Event::InvitedFriendJoins->new( $inviter, $u )->fire;
+            }
         }
     }
     # if we have initial friends for new accounts, add them.
diff -r 63b5c594edb8 -r 4c1f8b40aa26 cgi-bin/LJ/Widget/CreateAccount.pm
--- a/cgi-bin/LJ/Widget/CreateAccount.pm	Wed Oct 28 14:46:07 2009 -0500
+++ b/cgi-bin/LJ/Widget/CreateAccount.pm	Fri Oct 30 23:15:10 2009 +0000
@@ -390,6 +390,15 @@ sub handle_post {
         my $userid = $u ? $u->id : 0;
         if ( DW::InviteCodes->check_code( code => $code, userid => $userid ) ) {
             $from_post{code_valid} = 1;
+
+            # and if this is a community promo code, set the inviter
+            if ( my $pc = DW::InviteCodes->get_promo_code_info( code => $code ) ) {
+                if ( $pc->{suggest_journalid} ) {
+                    my $invu = LJ::load_userid( $pc->{suggest_journalid} );
+                    $post->{from} = $invu->user if $invu;
+                }
+            }
+
         } else {
             my $r = DW::Request->get;
             my $args = $r->query_string;
diff -r 63b5c594edb8 -r 4c1f8b40aa26 cgi-bin/LJ/Widget/CreateAccountInviter.pm
--- a/cgi-bin/LJ/Widget/CreateAccountInviter.pm	Wed Oct 28 14:46:07 2009 -0500
+++ b/cgi-bin/LJ/Widget/CreateAccountInviter.pm	Fri Oct 30 23:15:10 2009 +0000
@@ -46,31 +46,42 @@ sub render_body {
 
     $ret .= $class->html_hidden( from => $inviter->user );
 
-    if ( $u->can_trust( $inviter ) ) {
-        my $inviter_trust_name = 'inviter_trust_' . $inviter->id;
-        $ret .= $class->html_check(
-            name     => $inviter_trust_name,
-            value    => 1,
-            selected => defined $post->{$inviter_trust_name} ? $post->{$inviter_trust_name} : 1,
-            id       => $inviter_trust_name,
-        );
-        $ret .= " <label for='$inviter_trust_name'>" . $class->ml( 'widget.createaccountinviter.addinviter.trust', { user => $inviter->ljuser_display } ) . "</label><br />";
+    # if the invite code came from a comm (promo) then don't offer to watch/trust
+    if ( $inviter->is_individual ) {
+        if ( $u->can_trust( $inviter ) ) {
+            my $inviter_trust_name = 'inviter_trust_' . $inviter->id;
+            $ret .= $class->html_check(
+                name     => $inviter_trust_name,
+                value    => 1,
+                selected => defined $post->{$inviter_trust_name} ? $post->{$inviter_trust_name} : 1,
+                id       => $inviter_trust_name,
+            );
+            $ret .= " <label for='$inviter_trust_name'>" . $class->ml( 'widget.createaccountinviter.addinviter.trust', { user => $inviter->ljuser_display } ) . "</label><br />";
+        }
+
+        if ( $u->can_watch( $inviter ) ) {
+            my $inviter_watch_name = 'inviter_watch_' . $inviter->id;
+            $ret .= $class->html_check(
+                name     => $inviter_watch_name,
+                value    => 1,
+                selected => defined $post->{$inviter_watch_name} ? $post->{$inviter_watch_name} : 1,
+                id       => $inviter_watch_name,
+            );
+            $ret .= " <label for='$inviter_watch_name'>" . $class->ml( 'widget.createaccountinviter.addinviter.watch', { user => $inviter->ljuser_display } ) . "</label><br />";
+        }
     }
 
-    if ( $u->can_watch( $inviter ) ) {
-        my $inviter_watch_name = 'inviter_watch_' . $inviter->id;
-        $ret .= $class->html_check(
-            name     => $inviter_watch_name,
-            value    => 1,
-            selected => defined $post->{$inviter_watch_name} ? $post->{$inviter_watch_name} : 1,
-            id       => $inviter_watch_name,
-        );
-        $ret .= " <label for='$inviter_watch_name'>" . $class->ml( 'widget.createaccountinviter.addinviter.watch', { user => $inviter->ljuser_display } ) . "</label><br />";
+    my %comms;
+    if ( $inviter->is_individual ) {
+        %comms = $inviter->relevant_communities;
+    } elsif ( $inviter->is_community ) {
+        %comms = ( $inviter->id => { u => $inviter, istatus => 'normal' } );
     }
 
-    my %comms = $inviter->relevant_communities;
     if ( keys %comms ) {
         $ret .= "<br />";
+
+        my ( $any_mm, $any_mod );
 
         my $i = 0;
         foreach my $commid ( sort { $comms{$a}->{u}->display_username cmp $comms{$b}->{u}->display_username } keys %comms ) {
@@ -79,13 +90,21 @@ sub render_body {
             my $commu = $comms{$commid}->{u};
 
             my $note_mm = $comms{$commid}->{istatus} eq 'mm' ? ' *' : '';
+            $any_mm ||= $note_mm;
+
             my $note_moderated = $commu->is_moderated_membership ? ' **' : ''; # we will only get moderated or open communities
+            $any_mod ||= $note_moderated;
+
             my $comm_join_name = "inviter_join_$commid";
+
+            # selected if they have a link in that says to join, OR if they were invited
+            # by a community (which is the only one in the list)
+            my $sel = ( defined $post->{$comm_join_name} ? $post->{$comm_join_name} : 0 ) || $inviter->is_community;
 
             $ret .= $class->html_check(
                 name     => $comm_join_name,
                 value    => 1,
-                selected => defined $post->{$comm_join_name} ? $post->{$comm_join_name} : 0,
+                selected => $sel,
                 id       => $comm_join_name,
             );
             $ret .= " <label for='$comm_join_name'>";
@@ -95,10 +114,14 @@ sub render_body {
             $i++;
         }
 
-        $ret .= "<div style='margin: 10px;'>";
-        $ret .= "<?de * " . $class->ml( 'widget.createaccountinviter.addcomms.note.mm', { user => $inviter->ljuser_display } ) . " de?>";
-        $ret .= "<?de ** " . $class->ml( 'widget.createaccountinviter.addcomms.note.moderated' ) . " de?>";
-        $ret .= "</div>";
+        if ( $any_mm || $any_mod ) {
+            $ret .= "<div style='margin: 10px;'>";
+            $ret .= "<?de * " . $class->ml( 'widget.createaccountinviter.addcomms.note.mm', { user => $inviter->ljuser_display } ) . " de?><br />"
+                if $any_mm;
+            $ret .= "<?de ** " . $class->ml( 'widget.createaccountinviter.addcomms.note.moderated' ) . " de?>"
+                if $any_mod;
+            $ret .= "</div>";
+        }
     }
 
     return $ret;
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org