]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/userprofile.php
Merge branch 'master' into testing
[quix0rs-gnu-social.git] / lib / userprofile.php
index 80021864add7e7867251167bdf59f353d78d6817..ca060842b6e9b44d2acf742f88bdd4fb2815d45f 100644 (file)
@@ -69,12 +69,13 @@ class UserProfile extends Widget
 
     function showProfileData()
     {
-        if (Event::handle('StartProfilePageProfileSection', array(&$this->action, $this->profile))) {
+        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'));
             $this->out->element('h2', null, _('User profile'));
 
-            if (Event::handle('StartProfilePageProfileElements', array(&$this->action, $this->profile))) {
+            if (Event::handle('StartProfilePageProfileElements', array(&$this->out, $this->profile))) {
 
                 $this->showAvatar();
                 $this->showNickname();
@@ -84,17 +85,17 @@ class UserProfile extends Widget
                 $this->showBio();
                 $this->showProfileTags();
 
-                Event::handle('EndProfilePageProfileElements', array(&$this->action, $this->profile));
+                Event::handle('EndProfilePageProfileElements', array(&$this->out, $this->profile));
             }
 
             $this->out->elementEnd('div');
-            Event::handle('EndProfilePageProfileSection', array(&$this->action, $this->profile));
+            Event::handle('EndProfilePageProfileSection', array(&$this->out, $this->profile));
         }
     }
 
     function showAvatar()
     {
-        if (Event::handle('StartProfilePageAvatar', array($this->action, $this->profile))) {
+        if (Event::handle('StartProfilePageAvatar', array($this->out, $this->profile))) {
 
             $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
 
@@ -119,13 +120,13 @@ class UserProfile extends Widget
 
             $this->out->elementEnd('dl');
 
-            Event::handle('EndProfilePageAvatar', array($this->action, $this->profile));
+            Event::handle('EndProfilePageAvatar', array($this->out, $this->profile));
         }
     }
 
     function showNickname()
     {
-        if (Event::handle('StartProfilePageNickname', array($this->action, $this->profile))) {
+        if (Event::handle('StartProfilePageNickname', array($this->out, $this->profile))) {
 
             $this->out->elementStart('dl', 'entity_nickname');
             $this->out->element('dt', null, _('Nickname'));
@@ -137,13 +138,13 @@ class UserProfile extends Widget
             $this->out->elementEnd('dd');
             $this->out->elementEnd('dl');
 
-            Event::handle('EndProfilePageNickname', array($this->action, $this->profile));
+            Event::handle('EndProfilePageNickname', array($this->out, $this->profile));
         }
     }
 
     function showFullName()
     {
-        if (Event::handle('StartProfilePageFullName', array($this->action, $this->profile))) {
+        if (Event::handle('StartProfilePageFullName', array($this->out, $this->profile))) {
             if ($this->profile->fullname) {
                 $this->out->elementStart('dl', 'entity_fn');
                 $this->out->element('dt', null, _('Full name'));
@@ -152,26 +153,26 @@ class UserProfile extends Widget
                 $this->out->elementEnd('dd');
                 $this->out->elementEnd('dl');
             }
-            Event::handle('EndProfilePageFullName', array($this->action, $this->profile));
+            Event::handle('EndProfilePageFullName', array($this->out, $this->profile));
         }
     }
 
     function showLocation()
     {
-        if (Event::handle('StartProfilePageLocation', array($this->action, $this->profile))) {
+        if (Event::handle('StartProfilePageLocation', array($this->out, $this->profile))) {
             if ($this->profile->location) {
                 $this->out->elementStart('dl', 'entity_location');
                 $this->out->element('dt', null, _('Location'));
                 $this->out->element('dd', 'label', $this->profile->location);
                 $this->out->elementEnd('dl');
             }
-            Event::handle('EndProfilePageLocation', array($this->action, $this->profile));
+            Event::handle('EndProfilePageLocation', array($this->out, $this->profile));
         }
     }
 
     function showHomepage()
     {
-        if (Event::handle('StartProfilePageHomepage', array($this->action, $this->profile))) {
+        if (Event::handle('StartProfilePageHomepage', array($this->out, $this->profile))) {
             if ($this->profile->homepage) {
                 $this->out->elementStart('dl', 'entity_url');
                 $this->out->element('dt', null, _('URL'));
@@ -182,26 +183,26 @@ class UserProfile extends Widget
                 $this->out->elementEnd('dd');
                 $this->out->elementEnd('dl');
             }
-            Event::handle('EndProfilePageHomepage', array($this->action, $this->profile));
+            Event::handle('EndProfilePageHomepage', array($this->out, $this->profile));
         }
     }
 
     function showBio()
     {
-        if (Event::handle('StartProfilePageBio', array($this->action, $this->profile))) {
+        if (Event::handle('StartProfilePageBio', array($this->out, $this->profile))) {
             if ($this->profile->bio) {
                 $this->out->elementStart('dl', 'entity_note');
                 $this->out->element('dt', null, _('Note'));
                 $this->out->element('dd', 'note', $this->profile->bio);
                 $this->out->elementEnd('dl');
             }
-            Event::handle('EndProfilePageBio', array($this->action, $this->profile));
+            Event::handle('EndProfilePageBio', array($this->out, $this->profile));
         }
     }
 
     function showProfileTags()
     {
-        if (Event::handle('StartProfilePageProfileTags', array($this->action, $this->profile))) {
+        if (Event::handle('StartProfilePageProfileTags', array($this->out, $this->profile))) {
             $tags = Profile_tag::getTags($this->profile->id, $this->profile->id);
 
             if (count($tags) > 0) {
@@ -222,13 +223,24 @@ class UserProfile extends Widget
                 $this->out->elementEnd('dd');
                 $this->out->elementEnd('dl');
             }
-            Event::handle('EndProfilePageProfileTags', array($this->action, $this->profile));
+            Event::handle('EndProfilePageProfileTags', array($this->out, $this->profile));
         }
     }
 
     function showEntityActions()
     {
-        if (Event::handle('StartProfilePageActionsSection', array(&$this->action, $this->profile))) {
+        if ($this->profile->hasRole(Profile_role::DELETED)) {
+            $this->out->elementStart('div', 'entity_actions');
+            $this->out->element('h2', null, _('User actions'));
+            $this->out->elementStart('ul');
+            $this->out->elementStart('p', array('class' => 'profile_deleted'));
+            $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();
 
@@ -236,11 +248,14 @@ class UserProfile extends Widget
             $this->out->element('h2', null, _('User actions'));
             $this->out->elementStart('ul');
 
-            if (Event::handle('StartProfilePageActionsElements', array(&$this->action, $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');
@@ -283,33 +298,103 @@ class UserProfile extends Widget
                             }
                         }
 
+                        // 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,
-                                                   array('action' => 'showstream',
-                                                         'nickname' => $this->profile->nickname));
+                            $ubf = new UnblockForm($this->out, $this->profile, $r2args);
                             $ubf->show();
                         } else {
-                            $bf = new BlockForm($this->out, $this->profile,
-                                                array('action' => 'showstream',
-                                                      'nickname' => $this->profile->nickname));
+                            $bf = new BlockForm($this->out, $this->profile, $r2args);
                             $bf->show();
                         }
                         $this->out->elementEnd('li');
+
+                        if ($cur->hasRight(Right::SANDBOXUSER) ||
+                            $cur->hasRight(Right::SILENCEUSER) ||
+                            $cur->hasRight(Right::DELETEUSER)) {
+                            $this->out->elementStart('li', 'entity_moderation');
+                            $this->out->element('p', null, _('Moderate'));
+                            $this->out->elementStart('ul');
+                            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();
+                                }
+                                $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();
+                                }
+                                $this->out->elementEnd('li');
+                            }
+
+                            if ($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::GRANTROLE)) {
+                            $this->out->elementStart('li', 'entity_role');
+                            $this->out->element('p', null, _('User role'));
+                            $this->out->elementStart('ul');
+                            $this->roleButton('administrator', _m('role', 'Administrator'));
+                            $this->roleButton('moderator', _m('role', 'Moderator'));
+                            $this->out->elementEnd('ul');
+                            $this->out->elementEnd('li');
+                        }
                     }
                 }
 
-                Event::handle('EndProfilePageActionsElements', array(&$this->action, $this->profile));
+                Event::handle('EndProfilePageActionsElements', array(&$this->out, $this->profile));
             }
 
             $this->out->elementEnd('ul');
             $this->out->elementEnd('div');
 
-            Event::handle('EndProfilePageActionsSection', array(&$this->action, $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->user->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()