]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
move UserProfile actions to account profile block
authorEvan Prodromou <evan@status.net>
Mon, 14 Mar 2011 20:39:45 +0000 (16:39 -0400)
committerEvan Prodromou <evan@status.net>
Wed, 16 Mar 2011 13:57:10 +0000 (09:57 -0400)
lib/accountprofileblock.php

index 61aff13d41ef77e248e4690fd690f24169e7838b..e75527b288589b6ad0f26ab7bb6b6688faaf1e1d 100644 (file)
@@ -48,11 +48,13 @@ if (!defined('STATUSNET')) {
 class AccountProfileBlock extends ProfileBlock
 {
     protected $profile = null;
+    protected $user    = null;
 
     function __construct($out, $profile)
     {
         parent::__construct($out);
         $this->profile = $profile;
+        $this->user    = User::staticGet('id', $profile->id);
     }
 
     function avatar()
@@ -106,4 +108,198 @@ class AccountProfileBlock extends ProfileBlock
     {
         return $this->profile->bio;
     }
+
+    function showActions()
+    {
+        if ($this->profile->hasRole(Profile_role::DELETED)) {
+            $this->out->elementStart('div', 'entity_actions');
+            // TRANS: H2 for user actions in a profile.
+            $this->out->element('h2', null, _('User actions'));
+            $this->out->elementStart('ul');
+            $this->out->elementStart('p', array('class' => 'profile_deleted'));
+            // TRANS: Text shown in user profile of not yet compeltely deleted users.
+            $this->out->text(_('User deletion in progress...'));
+            $this->out->elementEnd('p');
+            $this->out->elementEnd('ul');
+            $this->out->elementEnd('div');
+            return;
+        }
+        if (Event::handle('StartProfilePageActionsSection', array($this->out, $this->profile))) {
+
+            $cur = common_current_user();
+
+            $this->out->elementStart('div', 'entity_actions');
+            // TRANS: H2 for entity actions in a profile.
+            $this->out->element('h2', null, _('User actions'));
+            $this->out->elementStart('ul');
+
+            if (Event::handle('StartProfilePageActionsElements', array($this->out, $this->profile))) {
+                if (empty($cur)) { // not logged in
+                    if (Event::handle('StartProfileRemoteSubscribe', array($this->out, $this->profile))) {
+                        $this->out->elementStart('li', 'entity_subscribe');
+                        $this->showRemoteSubscribeLink();
+                        $this->out->elementEnd('li');
+                        Event::handle('EndProfileRemoteSubscribe', array($this->out, $this->profile));
+                    }
+                } else {
+                    if ($cur->id == $this->profile->id) { // your own page
+                        $this->out->elementStart('li', 'entity_edit');
+                        $this->out->element('a', array('href' => common_local_url('profilesettings'),
+                                                  // TRANS: Link title for link on user profile.
+                                                  'title' => _('Edit profile settings')),
+                                       // TRANS: Link text for link on user profile.
+                                       _('Edit'));
+                        $this->out->elementEnd('li');
+                    } else { // someone else's page
+
+                        // subscribe/unsubscribe button
+
+                        $this->out->elementStart('li', 'entity_subscribe');
+
+                        if ($cur->isSubscribed($this->profile)) {
+                            $usf = new UnsubscribeForm($this->out, $this->profile);
+                            $usf->show();
+                        } else {
+                            $sf = new SubscribeForm($this->out, $this->profile);
+                            $sf->show();
+                        }
+                        $this->out->elementEnd('li');
+
+                        if ($cur->mutuallySubscribed($this->profile)) {
+
+                            // message
+
+                            $this->out->elementStart('li', 'entity_send-a-message');
+                            $this->out->element('a', array('href' => common_local_url('newmessage', array('to' => $this->user->id)),
+                                                      // TRANS: Link title for link on user profile.
+                                                      'title' => _('Send a direct message to this user')),
+                                           // TRANS: Link text for link on user profile.
+                                           _('Message'));
+                            $this->out->elementEnd('li');
+
+                            // nudge
+
+                            if ($this->user && $this->user->email && $this->user->emailnotifynudge) {
+                                $this->out->elementStart('li', 'entity_nudge');
+                                $nf = new NudgeForm($this->out, $this->user);
+                                $nf->show();
+                                $this->out->elementEnd('li');
+                            }
+                        }
+
+                        // return-to args, so we don't have to keep re-writing them
+
+                        list($action, $r2args) = $this->out->returnToArgs();
+
+                        // push the action into the list
+
+                        $r2args['action'] = $action;
+
+                        // block/unblock
+
+                        $blocked = $cur->hasBlocked($this->profile);
+                        $this->out->elementStart('li', 'entity_block');
+                        if ($blocked) {
+                            $ubf = new UnblockForm($this->out, $this->profile, $r2args);
+                            $ubf->show();
+                        } else {
+                            $bf = new BlockForm($this->out, $this->profile, $r2args);
+                            $bf->show();
+                        }
+                        $this->out->elementEnd('li');
+
+                        // Some actions won't be applicable to non-local users.
+                        $isLocal = !empty($this->user);
+
+                        if ($cur->hasRight(Right::SANDBOXUSER) ||
+                            $cur->hasRight(Right::SILENCEUSER) ||
+                            $cur->hasRight(Right::DELETEUSER)) {
+                            $this->out->elementStart('li', 'entity_moderation');
+                            // TRANS: Label text on user profile to select a user role.
+                            $this->out->element('p', null, _('Moderate'));
+                            $this->out->elementStart('ul');
+                            if ($cur->hasRight(Right::SANDBOXUSER)) {
+                                $this->out->elementStart('li', 'entity_sandbox');
+                                if ($this->profile->isSandboxed()) {
+                                    $usf = new UnSandboxForm($this->out, $this->profile, $r2args);
+                                    $usf->show();
+                                } else {
+                                    $sf = new SandboxForm($this->out, $this->profile, $r2args);
+                                    $sf->show();
+                                }
+                                $this->out->elementEnd('li');
+                            }
+
+                            if ($cur->hasRight(Right::SILENCEUSER)) {
+                                $this->out->elementStart('li', 'entity_silence');
+                                if ($this->profile->isSilenced()) {
+                                    $usf = new UnSilenceForm($this->out, $this->profile, $r2args);
+                                    $usf->show();
+                                } else {
+                                    $sf = new SilenceForm($this->out, $this->profile, $r2args);
+                                    $sf->show();
+                                }
+                                $this->out->elementEnd('li');
+                            }
+
+                            if ($isLocal && $cur->hasRight(Right::DELETEUSER)) {
+                                $this->out->elementStart('li', 'entity_delete');
+                                $df = new DeleteUserForm($this->out, $this->profile, $r2args);
+                                $df->show();
+                                $this->out->elementEnd('li');
+                            }
+                            $this->out->elementEnd('ul');
+                            $this->out->elementEnd('li');
+                        }
+
+                        if ($isLocal && $cur->hasRight(Right::GRANTROLE)) {
+                            $this->out->elementStart('li', 'entity_role');
+                            // TRANS: Label text on user profile to select a user role.
+                            $this->out->element('p', null, _('User role'));
+                            $this->out->elementStart('ul');
+                            // TRANS: Role that can be set for a user profile.
+                            $this->roleButton('administrator', _m('role', 'Administrator'));
+                            // TRANS: Role that can be set for a user profile.
+                            $this->roleButton('moderator', _m('role', 'Moderator'));
+                            $this->out->elementEnd('ul');
+                            $this->out->elementEnd('li');
+                        }
+                    }
+                }
+
+                Event::handle('EndProfilePageActionsElements', array($this->out, $this->profile));
+            }
+
+            $this->out->elementEnd('ul');
+            $this->out->elementEnd('div');
+
+            Event::handle('EndProfilePageActionsSection', array($this->out, $this->profile));
+        }
+    }
+
+    function roleButton($role, $label)
+    {
+        list($action, $r2args) = $this->out->returnToArgs();
+        $r2args['action'] = $action;
+
+        $this->out->elementStart('li', "entity_role_$role");
+        if ($this->profile->hasRole($role)) {
+            $rf = new RevokeRoleForm($role, $label, $this->out, $this->profile, $r2args);
+            $rf->show();
+        } else {
+            $rf = new GrantRoleForm($role, $label, $this->out, $this->profile, $r2args);
+            $rf->show();
+        }
+        $this->out->elementEnd('li');
+    }
+
+    function showRemoteSubscribeLink()
+    {
+        $url = common_local_url('remotesubscribe',
+                                array('nickname' => $this->profile->nickname));
+        $this->out->element('a', array('href' => $url,
+                                  'class' => 'entity_remote_subscribe'),
+                       // TRANS: Link text for link that will subscribe to a remote profile.
+                       _('Subscribe'));
+    }
 }
\ No newline at end of file