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-07-13 02:41 am

[dw-free] Add current subscription count to manage/settings/?cat=notifications

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

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

Add 'current' and 'max' counts to the subscriptions page.

Patch by [personal profile] afuna.

Files modified:
  • bin/upgrading/en.dat
  • cgi-bin/weblib.pl
--------------------------------------------------------------------------------
diff -r 09ad0e14b1dd -r f5182f9f9a31 bin/upgrading/en.dat
--- a/bin/upgrading/en.dat	Mon Jul 13 02:31:48 2009 +0000
+++ b/bin/upgrading/en.dat	Mon Jul 13 02:41:11 2009 +0000
@@ -3425,6 +3425,8 @@ subscribe_interface.special_subs.note=Th
 
 taglib.error.access=You are not allowed to tag entries in this journal.
 
+subscribe_interface.subs.total=You are using [[active]] out of [[max_active]] active subscriptions.
+
 taglib.error.invalid=The following tag name is invalid: [[tagname]]
 
 taglib.error.nomerge=The tag name '[[tagname]]' is already in use.  Merging tags is not supported at this time.
diff -r 09ad0e14b1dd -r f5182f9f9a31 cgi-bin/weblib.pl
--- a/cgi-bin/weblib.pl	Mon Jul 13 02:31:48 2009 +0000
+++ b/cgi-bin/weblib.pl	Mon Jul 13 02:41:11 2009 +0000
@@ -2998,7 +2998,8 @@ sub subscribe_interface {
     my $catid = 0;
 
     my %shown_subids = ();
-
+    # ( LJ::NotificationMethod::Inbox => {active => x, total => y }, LJ::NotificationMethod::Email => ...)
+    my %num_subs_by_type = ();
     foreach my $cat_hash (@categories) {
         my ($category, $cat_events) = %$cat_hash;
 
@@ -3214,6 +3215,15 @@ sub subscribe_interface {
             }
 
             $shown_subids{$pending_sub->id}++ unless $pending_sub->pending;
+            # for the inbox
+            # "total" includes default subs (those at the top) which are active
+            #   and any subs for tracking an entry/comment, whether active or inactive
+            # "active" only counts subs which are selected
+            # don't count disabled, even if they're checked, because they don't count against your limit
+            if ( ! $disabled &&  ( $is_tracking_category || $selected ) ) {
+                $num_subs_by_type{"LJ::NotificationMethod::Inbox"}->{total}++;
+                $num_subs_by_type{"LJ::NotificationMethod::Inbox"}->{active}++ if $selected;
+            }
 
             $cat_empty = 0;
 
@@ -3273,6 +3283,18 @@ sub subscribe_interface {
                         value => (scalar @subs) ? 1 : 0,
                     });
                 }
+
+                # for other notification methods
+                # "total" includes default subs (those at the top) which are active,
+                #   and any subs for tracking an entry/comment, where the sub is active
+                #   (because inbox is selected, revealing the notification checkbox)
+                # "active" only counts subs which are selected
+                # don't count disabled, even if they're checked, because they don't count against your limit
+                if ( ! $disabled && ! $hidden && ( $is_tracking_category || $note_selected ) ) {
+                    $num_subs_by_type{$note_class}->{total}++;
+                    $num_subs_by_type{$note_class}->{active}++ if $note_selected;
+                }
+
             }
 
             $cat_html .= "</tr>";
@@ -3309,10 +3331,44 @@ sub subscribe_interface {
         'value' => join(',', map { $_->ntypeid } LJ::NotificationMethod->all_classes),
     });
 
+    my $subscription_stats = "";
+    if ( $settings_page ) {
+        # show how many subscriptions we have active / inactive
+        # there's a bit of a trick here: each row counts as a maximum of one subscription.
+        # However, forced subscriptions don't count (e.g., "Someone sends me a message" for inbox)
+        # Also, if we activate an inbox subscription but not its email, the total number of subs
+        # per notification method goes out of sync.
+        # Regardless, once we hit the limit for *any* method, we get a warning. So we take
+        # whichever method has the most total / active and use that figure in our message.
+
+        my $max_active_method = 0;
+        my $max_total_method = 0;
+
+        foreach my $method_class ( keys %num_subs_by_type ) {
+            $max_active_method = $num_subs_by_type{$method_class}->{active}
+                if $num_subs_by_type{$method_class}->{active} > $max_active_method;
+            $max_total_method = $num_subs_by_type{$method_class}->{total}
+                if $num_subs_by_type{$method_class}->{total} > $max_total_method;
+        }
+
+        my $paid_max = LJ::get_cap( 'paid', 'subscriptions' );
+        my $u_max  = $u->max_subscriptions;
+        # max for total number of subscriptions (generally it is $paid_max)
+        my $system_max  = $u_max > $paid_max ? $u_max : $paid_max;
+
+        $subscription_stats .= "<div class='subscription_stats'>" . LJ::Lang::ml( 'subscribe_interface.subs.total',  {
+                            active =>  $max_active_method,
+                            max_active => $u_max,
+                            total => $max_total_method,
+                            max_total => $system_max,
+                    } ) . "</div>";
+    }
+    
     $ret .= qq {
         $ntypeids
             $catids
             $events_table
+            $subscription_stats
         };
 
     $ret .= LJ::html_hidden({name => 'mode', value => 'save_subscriptions'});
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
No Subject Icon Selected
More info about formatting

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