]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/userprofile.php
Rudimentary support for enclosures and some fiddling
[quix0rs-gnu-social.git] / lib / userprofile.php
index 4321a2f93977cc3d4a990f2de5d954f34ad78879..8bd68ae3d74f1ba6f89bb6458ced884b2569811e 100644 (file)
@@ -48,7 +48,6 @@ require_once INSTALLDIR.'/lib/widget.php';
  *
  * @see      HTMLOutputter
  */
-
 class UserProfile extends Widget
 {
     var $user = null;
@@ -71,7 +70,9 @@ class UserProfile extends Widget
     {
         if (Event::handle('StartProfilePageProfileSection', array(&$this->out, $this->profile))) {
 
-            $this->out->elementStart('div', 'entity_profile vcard author');
+            $this->out->elementStart('div', array('id' => 'i',
+                                                  'class' => 'entity_profile vcard author'));
+            // TRANS: H2 for user profile information.
             $this->out->element('h2', null, _('User profile'));
 
             if (Event::handle('StartProfilePageProfileElements', array(&$this->out, $this->profile))) {
@@ -97,8 +98,13 @@ class UserProfile extends Widget
         if (Event::handle('StartProfilePageAvatar', array($this->out, $this->profile))) {
 
             $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
+            if (!$avatar) {
+                // hack for remote Twitter users: no 96px, but large Twitter size is 73px
+                $avatar = $this->profile->getAvatar(73);
+            }
 
             $this->out->elementStart('dl', 'entity_depiction');
+            // TRANS: DT element in area for user avatar.
             $this->out->element('dt', null, _('Photo'));
             $this->out->elementStart('dd');
             $this->out->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE),
@@ -108,11 +114,10 @@ class UserProfile extends Widget
                                         'alt' => $this->profile->nickname));
             $this->out->elementEnd('dd');
 
-            $user = User::staticGet('id', $this->profile->id);
-
             $cur = common_current_user();
-            if ($cur && $cur->id == $user->id) {
+            if ($cur && $cur->id == $this->profile->id) {
                 $this->out->elementStart('dd');
+                // TRANS: Link text for changeing the avatar of the logged in user.
                 $this->out->element('a', array('href' => common_local_url('avatarsettings')), _('Edit Avatar'));
                 $this->out->elementEnd('dd');
             }
@@ -128,6 +133,7 @@ class UserProfile extends Widget
         if (Event::handle('StartProfilePageNickname', array($this->out, $this->profile))) {
 
             $this->out->elementStart('dl', 'entity_nickname');
+            // TRANS: DT for nick name in a profile.
             $this->out->element('dt', null, _('Nickname'));
             $this->out->elementStart('dd');
             $hasFN = ($this->profile->fullname) ? 'nickname url uid' : 'fn nickname url uid';
@@ -146,6 +152,7 @@ class UserProfile extends Widget
         if (Event::handle('StartProfilePageFullName', array($this->out, $this->profile))) {
             if ($this->profile->fullname) {
                 $this->out->elementStart('dl', 'entity_fn');
+                // TRANS: DT for full name in a profile.
                 $this->out->element('dt', null, _('Full name'));
                 $this->out->elementStart('dd');
                 $this->out->element('span', 'fn', $this->profile->fullname);
@@ -161,6 +168,7 @@ class UserProfile extends Widget
         if (Event::handle('StartProfilePageLocation', array($this->out, $this->profile))) {
             if ($this->profile->location) {
                 $this->out->elementStart('dl', 'entity_location');
+                // TRANS: DT for location in a profile.
                 $this->out->element('dt', null, _('Location'));
                 $this->out->element('dd', 'label', $this->profile->location);
                 $this->out->elementEnd('dl');
@@ -174,6 +182,7 @@ class UserProfile extends Widget
         if (Event::handle('StartProfilePageHomepage', array($this->out, $this->profile))) {
             if ($this->profile->homepage) {
                 $this->out->elementStart('dl', 'entity_url');
+                // TRANS: DT for URL in a profile.
                 $this->out->element('dt', null, _('URL'));
                 $this->out->elementStart('dd');
                 $this->out->element('a', array('href' => $this->profile->homepage,
@@ -191,6 +200,7 @@ class UserProfile extends Widget
         if (Event::handle('StartProfilePageBio', array($this->out, $this->profile))) {
             if ($this->profile->bio) {
                 $this->out->elementStart('dl', 'entity_note');
+                // TRANS: DT for note in a profile.
                 $this->out->element('dt', null, _('Note'));
                 $this->out->element('dd', 'note', $this->profile->bio);
                 $this->out->elementEnd('dl');
@@ -206,6 +216,7 @@ class UserProfile extends Widget
 
             if (count($tags) > 0) {
                 $this->out->elementStart('dl', 'entity_tags');
+                // TRANS: DT for tags in a profile.
                 $this->out->element('dt', null, _('Tags'));
                 $this->out->elementStart('dd');
                 $this->out->elementStart('ul', 'tags xoxo');
@@ -228,24 +239,43 @@ class UserProfile extends Widget
 
     function showEntityActions()
     {
-        if (Event::handle('StartProfilePageActionsSection', array(&$this->out, $this->profile))) {
+        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 (Event::handle('StartProfilePageActionsElements', array($this->out, $this->profile))) {
                 if (empty($cur)) { // not logged in
-                    $this->out->elementStart('li', 'entity_subscribe');
-                    $this->showRemoteSubscribeLink();
-                    $this->out->elementEnd('li');
+                    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
@@ -263,19 +293,21 @@ class UserProfile extends Widget
                         }
                         $this->out->elementEnd('li');
 
-                        if ($cur->mutuallySubscribed($this->user)) {
+                        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->email && $this->user->emailnotifynudge) {
+                            if ($this->user && $this->user->email && $this->user->emailnotifynudge) {
                                 $this->out->elementStart('li', 'entity_nudge');
                                 $nf = new NudgeForm($this->out, $this->user);
                                 $nf->show();
@@ -285,8 +317,11 @@ class UserProfile extends Widget
 
                         // return-to args, so we don't have to keep re-writing them
 
-                        $r2args = array('action' => 'showstream',
-                                        'nickname' => $this->profile->nickname);
+                        list($action, $r2args) = $this->out->returnToArgs();
+
+                        // push the action into the list
+
+                        $r2args['action'] = $action;
 
                         // block/unblock
 
@@ -301,47 +336,89 @@ class UserProfile extends Widget
                         }
                         $this->out->elementEnd('li');
 
-                        if ($cur->hasRight(Right::SANDBOXUSER)) {
-                            $this->out->elementStart('li', 'entity_sandbox');
-                            if ($this->user->isSandboxed()) {
-                                $usf = new UnSandboxForm($this->out, $this->profile, $r2args);
-                                $usf->show();
-                            } else {
-                                $sf = new SandboxForm($this->out, $this->profile, $r2args);
-                                $sf->show();
+                        // 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');
                             }
-                            $this->out->elementEnd('li');
-                        }
 
-                        if ($cur->hasRight(Right::SILENCEUSER)) {
-                            $this->out->elementStart('li', 'entity_silence');
-                            if ($this->user->isSilenced()) {
-                                $usf = new UnSilenceForm($this->out, $this->profile, $r2args);
-                                $usf->show();
-                            } else {
-                                $sf = new SilenceForm($this->out, $this->profile, $r2args);
-                                $sf->show();
+                            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 ($cur->hasRight(Right::DELETEUSER)) {
-                            $this->out->elementStart('li', 'entity_delete');
-                            $df = DeleteUserForm($this->out, $this->profile, $r2args);
-                            $df->show();
+                        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));
+                Event::handle('EndProfilePageActionsElements', array($this->out, $this->profile));
             }
 
             $this->out->elementEnd('ul');
             $this->out->elementEnd('div');
 
-            Event::handle('EndProfilePageActionsSection', array(&$this->out, $this->profile));
+            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()
@@ -350,6 +427,7 @@ class UserProfile extends Widget
                                 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'));
     }
 }