X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fuserprofile.php;h=8bd68ae3d74f1ba6f89bb6458ced884b2569811e;hb=b1675ff175cf54e4d9b97f24608d341551469ca8;hp=4321a2f93977cc3d4a990f2de5d954f34ad78879;hpb=d24ed193e7b19b50f7304790820c945e46ac2c95;p=quix0rs-gnu-social.git diff --git a/lib/userprofile.php b/lib/userprofile.php index 4321a2f939..8bd68ae3d7 100644 --- a/lib/userprofile.php +++ b/lib/userprofile.php @@ -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')); } }