summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorByron Jones <bjones@mozilla.com>2013-11-01 08:39:59 +0100
committerByron Jones <bjones@mozilla.com>2013-11-01 08:39:59 +0100
commite5d385374cb02e7d6b1b2013144135264ec5d29a (patch)
tree49e83687a3a08a749ac79ea41ea91bbc8acf2b50
parent682a16ef7a6bcd78cac1748f431ab3912269a929 (diff)
downloadbugzilla-e5d385374cb02e7d6b1b2013144135264ec5d29a.tar.gz
bugzilla-e5d385374cb02e7d6b1b2013144135264ec5d29a.tar.xz
Bug 911812: make the user profile more discoverable
-rw-r--r--extensions/BMO/template/en/default/hook/global/header-start.html.tmpl3
-rw-r--r--extensions/Gravatar/Extension.pm7
-rw-r--r--extensions/Gravatar/template/en/default/hook/bug/comments-user-image.html.tmpl6
-rw-r--r--extensions/InlineHistory/template/en/default/hook/bug/comments-aftercomments.html.tmpl2
-rw-r--r--extensions/UserProfile/Extension.pm9
-rw-r--r--extensions/UserProfile/template/en/default/pages/user_profile.html.tmpl69
-rw-r--r--extensions/UserProfile/web/styles/user_profile.css44
-rw-r--r--skins/contrib/Dusk-Helvetica/global.css4
-rw-r--r--skins/contrib/Dusk-Segoe/global.css4
-rw-r--r--skins/contrib/Dusk/global.css4
-rw-r--r--skins/contrib/Mozilla/global.css5
-rw-r--r--skins/custom/show_bug.css1
-rw-r--r--skins/standard/global.css15
-rw-r--r--template/en/default/global/header.html.tmpl1
-rw-r--r--template/en/default/global/user.html.tmpl13
15 files changed, 133 insertions, 54 deletions
diff --git a/extensions/BMO/template/en/default/hook/global/header-start.html.tmpl b/extensions/BMO/template/en/default/hook/global/header-start.html.tmpl
index e265d0bb6..2b2642148 100644
--- a/extensions/BMO/template/en/default/hook/global/header-start.html.tmpl
+++ b/extensions/BMO/template/en/default/hook/global/header-start.html.tmpl
@@ -33,7 +33,8 @@
[% END %]
[% END %]
-[% IF user.in_group('canconfirm') %]
+[%# BMO - add user context menu %]
+[% IF user.id %]
[% yui.push('container', 'menu') %]
[% style_urls.push('js/yui/assets/skins/sam/menu.css') %]
[% javascript_urls.push('extensions/BMO/web/js/edituser_menu.js') %]
diff --git a/extensions/Gravatar/Extension.pm b/extensions/Gravatar/Extension.pm
index e30e921c1..52bbd3d08 100644
--- a/extensions/Gravatar/Extension.pm
+++ b/extensions/Gravatar/Extension.pm
@@ -20,16 +20,17 @@ BEGIN {
}
sub _user_gravatar {
- my ($self) = @_;
+ my ($self, $size) = @_;
if (!$self->{gravatar}) {
if ($self->setting('show_my_gravatar') eq 'On') {
(my $email = $self->email) =~ s/\+(.*?)\@/@/;
- $self->{gravatar} = 'https://secure.gravatar.com/avatar/' . md5_hex(lc($email)) . '?size=64&d=mm';
+ $self->{gravatar} = 'https://secure.gravatar.com/avatar/' . md5_hex(lc($email)) . '?d=mm';
} else {
$self->{gravatar} = 'extensions/Gravatar/web/default.jpg';
}
}
- return $self->{gravatar};
+ $size ||= 64;
+ return $self->{gravatar} . "&amp;size=$size";
}
sub install_before_final_checks {
diff --git a/extensions/Gravatar/template/en/default/hook/bug/comments-user-image.html.tmpl b/extensions/Gravatar/template/en/default/hook/bug/comments-user-image.html.tmpl
index 14adfd055..6faed368d 100644
--- a/extensions/Gravatar/template/en/default/hook/bug/comments-user-image.html.tmpl
+++ b/extensions/Gravatar/template/en/default/hook/bug/comments-user-image.html.tmpl
@@ -7,5 +7,9 @@
#%]
[% IF user.settings.show_gravatars.value == 'On' %]
- <img align="middle" src="[% who.gravatar FILTER none %]" width="32" height="32">
+ [% IF who.last_activity_ts %]
+ <a href="user_profile?login=[% who.login FILTER uri %]">
+ [% END %]
+ <img align="middle" src="[% who.gravatar FILTER none %]" width="32" height="32" border="0">
+ [% "</a>" IF who.last_activity_ts %]
[% END %]
diff --git a/extensions/InlineHistory/template/en/default/hook/bug/comments-aftercomments.html.tmpl b/extensions/InlineHistory/template/en/default/hook/bug/comments-aftercomments.html.tmpl
index 079af95f0..25100fe9a 100644
--- a/extensions/InlineHistory/template/en/default/hook/bug/comments-aftercomments.html.tmpl
+++ b/extensions/InlineHistory/template/en/default/hook/bug/comments-aftercomments.html.tmpl
@@ -113,7 +113,7 @@
item[3] = '<div class="bz_comment_head">'
+ '<span class="bz_comment_user">'
+ user_image
- + '[% user_cache.$changer_id FILTER js %]'
+ + ' [% user_cache.$changer_id FILTER js %]'
+ '</span>'
+ '<span class="bz_comment_time"> ' + item[1] + ' </span>'
+ '</div>';
diff --git a/extensions/UserProfile/Extension.pm b/extensions/UserProfile/Extension.pm
index 99f235896..9e8eadb97 100644
--- a/extensions/UserProfile/Extension.pm
+++ b/extensions/UserProfile/Extension.pm
@@ -281,16 +281,18 @@ sub page_before_template {
my $target;
my $input = Bugzilla->input_params;
my $limit = Bugzilla->params->{'maxusermatches'} + 1;
- if (!$input->{login}) {
+ my $login = $input->{login};
+ if (!$login) {
$target = Bugzilla->login(LOGIN_REQUIRED);
+ $login = $target->login;
} else {
- my $users = Bugzilla::User::match($input->{login}, $limit, 1);
+ my $users = Bugzilla::User::match($login, $limit, 1);
if (scalar(@$users) == 1) {
# always allow singular matches without confirmation
$target = $users->[0];
} else {
Bugzilla::User::match_field({ 'login' => {'type' => 'single'} });
- $target = Bugzilla::User->check($input->{login});
+ $target = Bugzilla::User->check($login);
}
}
@@ -353,6 +355,7 @@ sub page_before_template {
$vars->{stats} = $stats;
$vars->{statuses} = $statuses;
$vars->{products} = $products;
+ $vars->{login} = $login;
$vars->{target} = $target;
}
diff --git a/extensions/UserProfile/template/en/default/pages/user_profile.html.tmpl b/extensions/UserProfile/template/en/default/pages/user_profile.html.tmpl
index 005d53443..71442b822 100644
--- a/extensions/UserProfile/template/en/default/pages/user_profile.html.tmpl
+++ b/extensions/UserProfile/template/en/default/pages/user_profile.html.tmpl
@@ -8,39 +8,9 @@
[% PROCESS global/variables.none.tmpl %]
-[% inline_styles = BLOCK %]
- #login_autocomplete {
- float: left;
- }
-
- #user_profile_table th {
- text-align: right;
- padding-right: 1em;
- vertical-align: middle;
- white-space: nowrap;
- }
-
- #user_profile_table .numeric {
- text-align: right;
- }
-
- #user_profile_table .product_span {
- white-space: nowrap;
- }
-
- #what {
- margin-top: 2em;
- }
-
- #updated {
- font-style: italic;
- font-size: x-small;
- }
-[% END %]
-
[% PROCESS global/header.html.tmpl
title = "User Profile: " _ target.identity
- style = inline_styles
+ style_urls = [ "extensions/UserProfile/web/styles/user_profile.css" ]
yui = [ 'autocomplete' ]
javascript_urls = [ "js/field.js" ]
%]
@@ -48,13 +18,14 @@
<table id="user_profile_table">
<tr>
- <th>Email</th>
+ <td>&nbsp;</td>
+ <th>Search</th>
<td colspan="2">
<form action="user_profile">
[% INCLUDE global/userselect.html.tmpl
id => "login"
name => "login"
- value => target.email
+ value => login
size => 40
emptyok => 0
%]
@@ -64,14 +35,31 @@
</tr>
<tr>
+ <td colspan="4" class="separator"><hr></td>
+</tr>
+
+<tr>
+ <td rowspan="16" id="gravatar-container">
+ [% IF user.gravatar %]
+ <img id="gravatar" src="[% target.gravatar(256) FILTER none %]" width="128" height="128"><br>
+ [% IF target.id == user.id %]
+ <a href="http://gravatar.com/">Change my image</a>
+ [% END %]
+ [% ELSE %]
+ &nbsp;
+ [% END %]
+ </td>
<th>Name</th>
<td colspan="2">[% target.name FILTER html %]</td>
</tr>
<tr>
+ <th>Email</th>
+ <td colspan="2"><a href="mailto:[% target.login FILTER uri %]">[% target.login FILTER html %]</a></td>
+</tr>
+
+<tr>
<td>&nbsp;</td>
- <td>&nbsp;</td>
- <td width="100%">&nbsp;</td>
</tr>
[%# user.creation_ts is added by the TagNewUsers extension %]
@@ -150,7 +138,7 @@
</tr>
<tr>
- <th>Statuses changed</td>
+ <th>Statuses changed</th>
<td colspan="2">
RESOLVED ([% statuses.item('RESOLVED') || 0 FILTER html %]),
FIXED ([% statuses.item('RESOLVED/FIXED') || 0 FILTER html %]),
@@ -160,7 +148,7 @@
</tr>
<tr>
- <th>Activity by product</td>
+ <th>Activity by product</th>
<td colspan="2">
[% FOREACH p = products %]
<span class="product_span">
@@ -176,6 +164,13 @@
</td>
</tr>
+<tr>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ <td width="100%">&nbsp;</td>
+</tr>
+
</table>
<div id="what">
diff --git a/extensions/UserProfile/web/styles/user_profile.css b/extensions/UserProfile/web/styles/user_profile.css
new file mode 100644
index 000000000..c261c24b6
--- /dev/null
+++ b/extensions/UserProfile/web/styles/user_profile.css
@@ -0,0 +1,44 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This Source Code Form is "Incompatible With Secondary Licenses", as
+ * defined by the Mozilla Public License, v. 2.0. */
+
+#login_autocomplete {
+ float: left;
+}
+
+#user_profile_table th {
+ text-align: right;
+ padding-right: 1em;
+ vertical-align: middle;
+ white-space: nowrap;
+}
+
+#user_profile_table .numeric {
+ text-align: right;
+}
+
+#user_profile_table .product_span {
+ white-space: nowrap;
+}
+
+#updated {
+ font-style: italic;
+ font-size: x-small;
+}
+
+#gravatar-container {
+ text-align: center;
+ font-size: x-small;
+ vertical-align: top;
+ padding-right: 15px;
+}
+
+#gravatar {
+ -moz-box-shadow: 2px 2px 5px #888;
+ -webkit-box-shadow: 2px 2px 5px #888;
+ box-shadow: 2px 2px 5px #888;
+ margin-bottom: 5px;
+}
diff --git a/skins/contrib/Dusk-Helvetica/global.css b/skins/contrib/Dusk-Helvetica/global.css
index 8478c1a88..566bf3cf7 100644
--- a/skins/contrib/Dusk-Helvetica/global.css
+++ b/skins/contrib/Dusk-Helvetica/global.css
@@ -242,6 +242,10 @@ hr {
background-color: #f0f0f0;
}
+.arrow_down {
+ border-top-color: #6070cf;
+}
+
/* Rules specific for printing */
@media print {
#header,
diff --git a/skins/contrib/Dusk-Segoe/global.css b/skins/contrib/Dusk-Segoe/global.css
index f431aceba..e9fb55e08 100644
--- a/skins/contrib/Dusk-Segoe/global.css
+++ b/skins/contrib/Dusk-Segoe/global.css
@@ -242,6 +242,10 @@ hr {
background-color: #f0f0f0;
}
+.arrow_down {
+ border-top-color: #6070cf;
+}
+
/* Rules specific for printing */
@media print {
#header,
diff --git a/skins/contrib/Dusk/global.css b/skins/contrib/Dusk/global.css
index 33f28965c..b3c8aea4d 100644
--- a/skins/contrib/Dusk/global.css
+++ b/skins/contrib/Dusk/global.css
@@ -236,6 +236,10 @@ hr {
background-color: #f0f0f0;
}
+.arrow_down {
+ border-top-color: #6070cf;
+}
+
/* Rules specific for printing */
@media print {
#header,
diff --git a/skins/contrib/Mozilla/global.css b/skins/contrib/Mozilla/global.css
index ecbab8ba7..cbd829740 100644
--- a/skins/contrib/Mozilla/global.css
+++ b/skins/contrib/Mozilla/global.css
@@ -443,7 +443,6 @@ table.edit_form hr {
}
.bz_comment_head img, .bz_first_comment_head img {
- margin-right: 0.25em;
vertical-align: middle;
}
@@ -641,6 +640,10 @@ button[disabled], input[type=submit][disabled], input[type=button][disabled], bu
padding: 5px 10px;
}
+.arrow_down {
+ border-top-color: #0095dd;
+}
+
/* Attachments */
#viewFrame {
diff --git a/skins/custom/show_bug.css b/skins/custom/show_bug.css
index 1a89a6892..e98e32fb4 100644
--- a/skins/custom/show_bug.css
+++ b/skins/custom/show_bug.css
@@ -83,4 +83,3 @@ table#flags {
border-collapse: collapse;
border-spacing: 0px;
}
-
diff --git a/skins/standard/global.css b/skins/standard/global.css
index 325b82ca3..bb44a919b 100644
--- a/skins/standard/global.css
+++ b/skins/standard/global.css
@@ -459,6 +459,21 @@ div.user_match {
padding: 0.5em 1em;
}
+.arrow_down {
+ width: 0;
+ height: 0;
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ border-top: 4px solid #003399;
+ position: relative;
+ top: 1em;
+ margin: 4px 0;
+}
+
+.arrow_container {
+ margin: 0 2px;
+}
+
.collapsed {
display: none;
}
diff --git a/template/en/default/global/header.html.tmpl b/template/en/default/global/header.html.tmpl
index 9336d5cd4..6071b2845 100644
--- a/template/en/default/global/header.html.tmpl
+++ b/template/en/default/global/header.html.tmpl
@@ -265,6 +265,7 @@
[% filtered_username = user.login FILTER uri %]
<li><a href="[% Param('mybugstemplate').replace('%userid%', filtered_username) %]">My [% terms.Bugs %]</a></li>
[% END %]
+ <li><a href="user_profile">My Profile</a></li>
<li><a href="userprefs.cgi">Preferences</a></li>
<li><a href="request.cgi?requester=[% user.login FILTER uri %]&amp;requestee=[% user.login FILTER uri %]&amp;do_union=1&amp;group=type&amp;action=queue">My Requests</a></li>
[% IF user.in_group('tweakparams') || user.in_group('editusers') || user.can_bless
diff --git a/template/en/default/global/user.html.tmpl b/template/en/default/global/user.html.tmpl
index 4f9b8a41b..2c12fa6dd 100644
--- a/template/en/default/global/user.html.tmpl
+++ b/template/en/default/global/user.html.tmpl
@@ -27,17 +27,18 @@
[% FILTER collapse %]
[% IF user.id %]
<a class="email" href="mailto:[% who.email FILTER html %]"
- [% IF who.id && user.in_group('canconfirm') %]
onclick="return show_usermenu(event, [% who.id FILTER none %], '[% who.email FILTER js %]',
- [% IF (user.in_group('editusers') || user.bless_groups.size > 0) %]true[% ELSE %]false[% END %]);"
- [% END %]
- title="[% who.identity FILTER html %]">
+ [% user.in_group('editusers') || user.bless_groups.size > 0 ? "true" : "false" %]);"
+ title="[% who.identity FILTER html %]">
[%- END -%]
[% IF who.name %]
<span class="fn">[% who.name FILTER html %]</span>
[% ELSE %]
- [% who.login FILTER email FILTER html %]
+ <span class="ln">[% who.login FILTER email FILTER html %]</span>
+ [% END %]
+ [% IF user.id %]
+ <span class="arrow_container"><span class="arrow_down"></span></span>
+ </a>
[% END %]
- [% '</a>' IF user.id %]
[% END %]
</span>