]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/profileaction.php
Merge branch '0.9.x'
[quix0rs-gnu-social.git] / lib / profileaction.php
index ae70ad560bb86a34ab65c6f82362d76ecada86ca..f777edd31955d0f20d734604cd700cff97503a18 100644 (file)
@@ -46,7 +46,6 @@ require_once INSTALLDIR.'/lib/groupminilist.php';
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class ProfileAction extends OwnerDesignAction
 {
     var $page    = null;
@@ -74,6 +73,7 @@ class ProfileAction extends OwnerDesignAction
         $this->user = User::staticGet('nickname', $nickname);
 
         if (!$this->user) {
+            // TRANS: Client error displayed when calling a profile action without specifying a user.
             $this->clientError(_('No such user.'), 404);
             return false;
         }
@@ -81,6 +81,7 @@ class ProfileAction extends OwnerDesignAction
         $this->profile = $this->user->getProfile();
 
         if (!$this->profile) {
+            // TRANS: Server error displayed when calling a profile action while the specified user does not have a profile.
             $this->serverError(_('User has no profile.'));
             return false;
         }
@@ -122,6 +123,7 @@ class ProfileAction extends OwnerDesignAction
                                          'class' => 'section'));
         if (Event::handle('StartShowSubscriptionsMiniList', array($this))) {
             $this->elementStart('h2');
+            // TRANS: H2 text for user subscription statistics.
             $this->statsSectionLink('subscriptions', _('Subscriptions'));
             $this->elementEnd('h2');
 
@@ -131,12 +133,14 @@ class ProfileAction extends OwnerDesignAction
                 $pml = new ProfileMiniList($profile, $this);
                 $cnt = $pml->show();
                 if ($cnt == 0) {
+                    // TRANS: Text for user subscription statistics if the user has no subscriptions.
                     $this->element('p', null, _('(None)'));
                 }
             }
 
             if ($cnt > PROFILES_PER_MINILIST) {
                 $this->elementStart('p');
+                // TRANS: Text for user subscription statistics if user has more subscriptions than displayed.
                 $this->statsSectionLink('subscriptions', _('All subscriptions'), 'more');
                 $this->elementEnd('p');
             }
@@ -156,6 +160,7 @@ class ProfileAction extends OwnerDesignAction
         if (Event::handle('StartShowSubscribersMiniList', array($this))) {
 
             $this->elementStart('h2');
+            // TRANS: H2 text for user subscriber statistics.
             $this->statsSectionLink('subscribers', _('Subscribers'));
             $this->elementEnd('h2');
 
@@ -165,12 +170,14 @@ class ProfileAction extends OwnerDesignAction
                 $sml = new SubscribersMiniList($profile, $this);
                 $cnt = $sml->show();
                 if ($cnt == 0) {
+                    // TRANS: Text for user subscriber statistics if user has no subscribers.
                     $this->element('p', null, _('(None)'));
                 }
             }
 
             if ($cnt > PROFILES_PER_MINILIST) {
                 $this->elementStart('p');
+                // TRANS: Text for user subscription statistics if user has more subscribers than displayed.
                 $this->statsSectionLink('subscribers', _('All subscribers'), 'more');
                 $this->elementEnd('p');
             }
@@ -183,10 +190,7 @@ class ProfileAction extends OwnerDesignAction
 
     function showStatistics()
     {
-        $subs_count   = $this->profile->subscriptionCount();
-        $subbed_count = $this->profile->subscriberCount();
         $notice_count = $this->profile->noticeCount();
-        $group_count  = $this->profile->getGroups()->N;
         $age_days     = (time() - strtotime($this->profile->created)) / 86400;
         if ($age_days < 1) {
             // Rather than extrapolating out to a bajillion...
@@ -197,39 +201,80 @@ class ProfileAction extends OwnerDesignAction
         $this->elementStart('div', array('id' => 'entity_statistics',
                                          'class' => 'section'));
 
+        // TRANS: H2 text for user statistics.
         $this->element('h2', null, _('Statistics'));
 
-        // Other stats...?
-        $this->showStatsRow('user-id', _('User ID'), $this->profile->id);
-
-        $this->showStatsRow('member-since', _('Member since'), date('j M Y',
-                                        strtotime($this->profile->created)));
-
-        $this->showStatsRow('subscriptions', _('Subscriptions'), $subs_count, 'subscriptions');
-
-        $this->showStatsRow('subscribers', _('Subscribers'), $subbed_count, 'subscribed');
-
-        $this->showStatsRow('groups', _('Groups'), $group_count, 'usergroup');
-
-        $this->showStatsRow('notices', _('Notices'), $notice_count);
-
-        // TRANS: Average count of posts made per day since account registration
-        $this->showStatsRow('daily_notices', _('Daily average'), $daily_count);
-
+        $profile = $this->profile;
+        $actionParams = array('nickname' => $profile->nickname);
+        $stats = array(
+            array(
+                'id' => 'user-id',
+                // TRANS: Label for user statistics.
+                'label' => _('User ID'),
+                'value' => $profile->id,
+            ),
+            array(
+                'id' => 'member-since',
+                // TRANS: Label for user statistics.
+                'label' => _('Member since'),
+                'value' => date('j M Y', strtotime($profile->created))
+            ),
+            array(
+                'id' => 'subscriptions',
+                // TRANS: Label for user statistics.
+                'label' => _('Subscriptions'),
+                'link' => common_local_url('subscriptions', $actionParams),
+                'value' => $profile->subscriptionCount(),
+            ),
+            array(
+                'id' => 'subscribers',
+                // TRANS: Label for user statistics.
+                'label' => _('Subscribers'),
+                'link' => common_local_url('subscribers', $actionParams),
+                'value' => $profile->subscriberCount(),
+            ),
+            array(
+                'id' => 'groups',
+                // TRANS: Label for user statistics.
+                'label' => _('Groups'),
+                'link' => common_local_url('usergroups', $actionParams),
+                'value' => $profile->getGroups()->N,
+            ),
+            array(
+                'id' => 'notices',
+                // TRANS: Label for user statistics.
+                'label' => _('Notices'),
+                'value' => $notice_count,
+            ),
+            array(
+                'id' => 'daily_notices',
+                // TRANS: Label for user statistics.
+                // TRANS: Average count of posts made per day since account registration.
+                'label' => _('Daily average'),
+                'value' => $daily_count
+            )
+        );
+
+        // Give plugins a chance to add stats entries
+        Event::handle('ProfileStats', array($profile, &$stats));
+
+        foreach ($stats as $row) {
+            $this->showStatsRow($row);
+        }
         $this->elementEnd('div');
     }
 
-    function showStatsRow($id, $label, $content, $labelAction=false)
+    private function showStatsRow($row)
     {
-        $this->elementStart('dl', 'entity_' . $id);
+        $this->elementStart('dl', 'entity_' . $row['id']);
         $this->elementStart('dt');
-        if ($labelAction) {
-            $this->statsSectionLink($labelAction, $label);
+        if (!empty($row['link'])) {
+            $this->element('a', array('href' => $row['link']), $row['label']);
         } else {
-            $this->text($label);
+            $this->text($row['label']);
         }
         $this->elementEnd('dt');
-        $this->element('dd', null, $content);
+        $this->element('dd', null, $row['value']);
         $this->elementEnd('dl');
     }
 
@@ -241,6 +286,7 @@ class ProfileAction extends OwnerDesignAction
                                          'class' => 'section'));
         if (Event::handle('StartShowGroupsMiniList', array($this))) {
             $this->elementStart('h2');
+            // TRANS: H2 text for user group membership statistics.
             $this->statsSectionLink('usergroups', _('Groups'));
             $this->elementEnd('h2');
 
@@ -248,12 +294,14 @@ class ProfileAction extends OwnerDesignAction
                 $gml = new GroupMiniList($groups, $this->profile, $this);
                 $cnt = $gml->show();
                 if ($cnt == 0) {
+                    // TRANS: Text for user user group membership statistics if user is not a member of any group.
                     $this->element('p', null, _('(None)'));
                 }
             }
 
             if ($cnt > GROUPS_PER_MINILIST) {
                 $this->elementStart('p');
+                // TRANS: Text for user group membership statistics if user has more subscriptions than displayed.
                 $this->statsSectionLink('usergroups', _('All groups'), 'more');
                 $this->elementEnd('p');
             }
@@ -283,4 +331,3 @@ class SubscribersMiniListItem extends ProfileMiniListItem
         return $aAttrs;
     }
 }
-