diff --git a/src/main/scala/app/AccountController.scala b/src/main/scala/app/AccountController.scala index 17fca02..1997363 100644 --- a/src/main/scala/app/AccountController.scala +++ b/src/main/scala/app/AccountController.scala @@ -58,10 +58,10 @@ getAccountByUserName(userName).flatMap(_.image).map { image => contentType = FileUtil.getMimeType(image) new java.io.File(getUserUploadDir(userName), image) - } getOrElse { - contentType = "image/png" - Thread.currentThread.getContextClassLoader.getResourceAsStream("noimage.png") - } +// } getOrElse { +// contentType = "image/png" +// Thread.currentThread.getContextClassLoader.getResourceAsStream("noimage.png") + } getOrElse NotFound } get("/:userName/_edit")(oneselfOnly { diff --git a/src/main/scala/app/ControllerBase.scala b/src/main/scala/app/ControllerBase.scala index a22d6cc..7d88da8 100644 --- a/src/main/scala/app/ControllerBase.scala +++ b/src/main/scala/app/ControllerBase.scala @@ -10,6 +10,7 @@ import model.Account import scala.Some import service.AccountService +import javax.servlet.http.HttpServletRequest /** * Provides generic features for controller implementations. @@ -22,7 +23,7 @@ /** * Returns the context object for the request. */ - implicit def context: Context = Context(servletContext.getContextPath, LoginAccount, currentURL) + implicit def context: Context = Context(servletContext.getContextPath, LoginAccount, currentURL, request) private def currentURL: String = { val queryString = request.getQueryString @@ -94,7 +95,7 @@ /** * Context object for the current request. */ -case class Context(path: String, loginAccount: Option[Account], currentUrl: String) +case class Context(path: String, loginAccount: Option[Account], currentUrl: String, request: HttpServletRequest) /** * Base trait for controllers which manages account information. diff --git a/src/main/scala/util/StringUtil.scala b/src/main/scala/util/StringUtil.scala index bd42fb9..bc478c7 100644 --- a/src/main/scala/util/StringUtil.scala +++ b/src/main/scala/util/StringUtil.scala @@ -8,4 +8,10 @@ md.digest.map(b => "%02x".format(b)).mkString } + def md5(value: String): String = { + val md = java.security.MessageDigest.getInstance("MD5") + md.update(value.getBytes) + md.digest.map(b => "%02x".format(b)).mkString + } + } diff --git a/src/main/scala/view/helpers.scala b/src/main/scala/view/helpers.scala index db2d804..fdb3734 100644 --- a/src/main/scala/view/helpers.scala +++ b/src/main/scala/view/helpers.scala @@ -2,6 +2,8 @@ import java.util.Date import java.text.SimpleDateFormat import twirl.api.Html +import util.StringUtil +import service.AccountService /** * Provides helper methods for Twirl templates. @@ -74,6 +76,29 @@ .replaceAll("(^|\\W)([a-f0-9]{40})(\\W|$)", "$1$2$3").format(context.path, repository.owner, repository.name)) /** + * Returns <img> which displays the avatar icon. + * Looks up Gravatar if avatar icon has not been configured in user settings. + */ + def avatar(userName: String, size: Int, tooltip: Boolean = false)(implicit context: app.Context): Html = { + val account = Option(context.request.getAttribute("cache.account." + userName).asInstanceOf[model.Account]).orElse { + new AccountService {}.getAccountByUserName(userName).map { account => + context.request.setAttribute("cache.account." + userName, account) + account + } + } + val src = account.collect { case account if(account.image.isEmpty) => + s"""http://www.gravatar.com/avatar/${StringUtil.md5(account.mailAddress)}?s=${size}""" + } getOrElse { + s"""${context.path}/${userName}/_avatar""" + } + if(tooltip){ + Html(s"""""") + } else { + Html(s"""""") + } + } + + /** * Implicit conversion to add mkHtml() to Seq[Html]. */ implicit def extendsHtmlSeq(seq: Seq[Html]) = new { diff --git a/src/main/twirl/account/activity.scala.html b/src/main/twirl/account/activity.scala.html index da65fcc..29b2982 100644 --- a/src/main/twirl/account/activity.scala.html +++ b/src/main/twirl/account/activity.scala.html @@ -6,7 +6,7 @@
- +
@account.userName
diff --git a/src/main/twirl/account/repositories.scala.html b/src/main/twirl/account/repositories.scala.html index dbdacf5..9a2ce34 100644 --- a/src/main/twirl/account/repositories.scala.html +++ b/src/main/twirl/account/repositories.scala.html @@ -6,7 +6,7 @@
- +
@account.userName
diff --git a/src/main/twirl/admin/users/list.scala.html b/src/main/twirl/admin/users/list.scala.html index 1fef459..abe96f4 100644 --- a/src/main/twirl/admin/users/list.scala.html +++ b/src/main/twirl/admin/users/list.scala.html @@ -14,7 +14,7 @@ Edit
- @helper.html.avatar(account.userName, 20) + @avatar(account.userName, 20) @account.userName @if(account.isAdmin){ (Administrator) diff --git a/src/main/twirl/helper/activities.scala.html b/src/main/twirl/helper/activities.scala.html index 7cac4de..93519b4 100644 --- a/src/main/twirl/helper/activities.scala.html +++ b/src/main/twirl/helper/activities.scala.html @@ -8,7 +8,7 @@
@datetime(activity.activityDate)
- @helper.html.avatar(activity.activityUserName, 16) + @avatar(activity.activityUserName, 16) @activityMessage(activity.message)
@activity.additionalInfo.map { additionalInfo => diff --git a/src/main/twirl/helper/avatar.scala.html b/src/main/twirl/helper/avatar.scala.html deleted file mode 100644 index 4612f3e..0000000 --- a/src/main/twirl/helper/avatar.scala.html +++ /dev/null @@ -1,8 +0,0 @@ -@(userName: String, size: Int, tooltip: Boolean = false)(implicit context: app.Context) -@import context._ -@import view.helpers._ -@if(tooltip){ - -} else { - -} diff --git a/src/main/twirl/helper/uploadavatar.scala.html b/src/main/twirl/helper/uploadavatar.scala.html index a008cfb..59a4993 100644 --- a/src/main/twirl/helper/uploadavatar.scala.html +++ b/src/main/twirl/helper/uploadavatar.scala.html @@ -4,7 +4,9 @@ @if(account.nonEmpty && account.get.image.nonEmpty){ } else { -
No Image
+
+ Gravatar is used +
}
@if(account.nonEmpty && account.get.image.nonEmpty){ diff --git a/src/main/twirl/issues/create.scala.html b/src/main/twirl/issues/create.scala.html index 54bdcfc..cfa330a 100644 --- a/src/main/twirl/issues/create.scala.html +++ b/src/main/twirl/issues/create.scala.html @@ -23,7 +23,7 @@
  • Clear assignee
  • @collaborators.map { collaborator => -
  • @helper.html.avatar(collaborator, 20) @collaborator
  • +
  • @avatar(collaborator, 20) @collaborator
  • } } } diff --git a/src/main/twirl/issues/issue.scala.html b/src/main/twirl/issues/issue.scala.html index ae65e40..218c721 100644 --- a/src/main/twirl/issues/issue.scala.html +++ b/src/main/twirl/issues/issue.scala.html @@ -31,7 +31,7 @@
    @issue.assignedUserName.map { userName => - @helper.html.avatar(userName, 20) @userName is assigned + @avatar(userName, 20) @userName is assigned }.getOrElse("No one is assigned") @if(hasWritePermission){ @@ -39,7 +39,7 @@
  • Clear assignee
  • @collaborators.map { collaborator => -
  • @helper.html.avatar(collaborator, 20) @collaborator
  • +
  • @avatar(collaborator, 20) @collaborator
  • } } } diff --git a/src/main/twirl/issues/list.scala.html b/src/main/twirl/issues/list.scala.html index 1aa62f6..3fa59f2 100644 --- a/src/main/twirl/issues/list.scala.html +++ b/src/main/twirl/issues/list.scala.html @@ -219,7 +219,7 @@ } @issue.assignedUserName.map { userName => - @helper.html.avatar(userName, 20, true) + @avatar(userName, 20, true) } #@issue.issueId diff --git a/src/main/twirl/repo/commit.scala.html b/src/main/twirl/repo/commit.scala.html index 2ac2af5..60a872b 100644 --- a/src/main/twirl/repo/commit.scala.html +++ b/src/main/twirl/repo/commit.scala.html @@ -43,7 +43,7 @@ - @helper.html.avatar(commit.committer, 20) + @avatar(commit.committer, 20) @commit.committer @datetime(commit.time)
    diff --git a/src/main/twirl/repo/commits.scala.html b/src/main/twirl/repo/commits.scala.html index 469d0bb..0a6e6aa 100644 --- a/src/main/twirl/repo/commits.scala.html +++ b/src/main/twirl/repo/commits.scala.html @@ -38,7 +38,7 @@ Browse code
    -
    @helper.html.avatar(commit.committer, 40)
    +
    @avatar(commit.committer, 40)
    @link(commit.summary, repository) @if(commit.description.isDefined){ ... diff --git a/src/main/twirl/repo/files.scala.html b/src/main/twirl/repo/files.scala.html index 60acfed..1cb2434 100644 --- a/src/main/twirl/repo/files.scala.html +++ b/src/main/twirl/repo/files.scala.html @@ -36,7 +36,7 @@
    - @helper.html.avatar(latestCommit.committer, 20) + @avatar(latestCommit.committer, 20) @latestCommit.committer @datetime(latestCommit.time)
    diff --git a/src/main/twirl/wiki/history.scala.html b/src/main/twirl/wiki/history.scala.html index 859f0f8..d40a0c0 100644 --- a/src/main/twirl/wiki/history.scala.html +++ b/src/main/twirl/wiki/history.scala.html @@ -35,7 +35,7 @@ @commits.map { commit => - @helper.html.avatar(commit.committer, 20)@commit.committer + @avatar(commit.committer, 20)@commit.committer @datetime(commit.time): @commit.shortMessage