]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/accountprofileblock.php
If there's no Happening, we can't use the RSVP.
[quix0rs-gnu-social.git] / lib / accountprofileblock.php
index 61aff13d41ef77e248e4690fd690f24169e7838b..875acbb59c30ea500b38ff27b85fe660f70dd21a 100644 (file)
@@ -4,7 +4,7 @@
  * Copyright (C) 2011, StatusNet, Inc.
  *
  * Profile block to show for an account
- * 
+ *
  * PHP version 5
  *
  * This program is free software: you can redistribute it and/or modify
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * Profile block to show for an account
@@ -44,26 +40,21 @@ if (!defined('STATUSNET')) {
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
  * @link      http://status.net/
  */
-
 class AccountProfileBlock extends ProfileBlock
 {
     protected $profile = null;
+    protected $user    = null;
 
-    function __construct($out, $profile)
+    function __construct(Action $out, Profile $profile)
     {
         parent::__construct($out);
         $this->profile = $profile;
-    }
-
-    function avatar()
-    {
-        $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
-        if (empty($avatar)) {
-            $avatar = $this->profile->getAvatar(73);
+        try {
+            $this->user = $this->profile->getUser();
+        } catch (NoSuchUserException $e) {
+            // The profile presented is non-local
+            assert(!$this->profile->isLocal());
         }
-        return (!empty($avatar)) ? 
-            $avatar->displayUrl() : 
-            Avatar::defaultImage(AVATAR_PROFILE_SIZE);
     }
 
     function name()
@@ -76,34 +67,227 @@ class AccountProfileBlock extends ProfileBlock
         return $this->profile->profileurl;
     }
 
-    function canEdit()
+    function location()
     {
-        $user = common_current_user();
-        return ((!empty($user)) && ($user->id == $profile->id));
+        return $this->profile->location;
     }
 
-    function editUrl()
+    function homepage()
     {
-        return common_local_url('profilesettings');
+        return $this->profile->homepage;
     }
 
-    function editText()
+    function description()
     {
-        return _('Edit');
+        return $this->profile->bio;
     }
 
-    function location()
+    function otherProfiles()
     {
-        return $this->profile->location;
+        $others = array();
+
+        Event::handle('OtherAccountProfiles', array($this->profile, &$others));
+        
+        return $others;
     }
 
-    function homepage()
+    function showTags()
     {
-        return $this->profile->homepage;
+        $cur = common_current_user();
+
+        $self_tags = new SelftagsWidget($this->out, $this->profile, $this->profile);
+        $self_tags->show();
+
+        if ($cur) {
+            // don't show self-tags again
+            if ($cur->id != $this->profile->id && $cur->getProfile()->canTag($this->profile)) {
+                $tags = new PeopletagsWidget($this->out, $cur, $this->profile);
+                $tags->show();
+            }
+        }
     }
 
-    function description()
+    function showActions()
     {
-        return $this->profile->bio;
+        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;
+            }
+
+            $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))) {
+                        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.
+                                       _m('BUTTON','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 if ($cur->hasPendingSubscription($this->profile)) {
+                            $sf = new CancelSubscriptionForm($this->out, $this->profile);
+                            $sf->show();
+                        } else {
+                            $sf = new SubscribeForm($this->out, $this->profile);
+                            $sf->show();
+                        }
+                        $this->out->elementEnd('li');
+
+                        if ($this->profile->isLocal() && $cur->mutuallySubscribed($this->profile)) {
+                            // nudge
+
+                            if ($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');
     }
-}
\ No newline at end of file
+
+    function show()
+    {
+        $this->out->elementStart('div', 'profile_block account_profile_block section');
+        if (Event::handle('StartShowAccountProfileBlock', array($this->out, $this->profile))) {
+            parent::show();
+            Event::handle('EndShowAccountProfileBlock', array($this->out, $this->profile));
+        }
+        $this->out->elementEnd('div');
+    }
+}