Yi EungJun 2013-12-19
user: Fix avatarUrl to support application.context
application.context should be taken into account while computing the url
to user's avatar.
@52708aa292e41138835f9b03b3175f338ba4cd58
app/controllers/ProjectApp.java
--- app/controllers/ProjectApp.java
+++ app/controllers/ProjectApp.java
@@ -645,7 +645,7 @@
             if(!user.loginId.equals(Constants.ADMIN_LOGIN_ID) && user != null){
                 projectUserMap.put("username", user.loginId);
                 projectUserMap.put("name", user.name);
-                projectUserMap.put("image", user.avatarUrl);
+                projectUserMap.put("image", user.avatarUrl());
                 users.add(projectUserMap);
             }
         }
app/controllers/UserApp.java
--- app/controllers/UserApp.java
+++ app/controllers/UserApp.java
@@ -57,7 +57,8 @@
     public static final String SESSION_USERNAME = "userName";
     public static final String TOKEN = "yobi.token";
     public static final int MAX_AGE = 30*24*60*60;
-    public static final String DEFAULT_AVATAR_URL = "/assets/images/default-avatar-128.png";
+    public static final String DEFAULT_AVATAR_URL
+            = routes.Assets.at("images/default-avatar-128.png").url();
     public static final int MAX_FETCH_USERS = 1000;
     private static final int HASH_ITERATIONS = 1024;
     public static final int DAYS_AGO = 7;
@@ -509,7 +510,6 @@
                 if (primary.equals("image")) {
                     Attachment.deleteAll(currentUser().avatarAsResource());
                     attachment.moveTo(currentUser().avatarAsResource());
-                    user.avatarUrl = routes.AttachmentApp.getFile(attachment.id).url();
                 }
             }
         } catch (NumberFormatException e) {
@@ -795,7 +795,6 @@
         RandomNumberGenerator rng = new SecureRandomNumberGenerator();
         user.passwordSalt = rng.nextBytes().getBytes().toString();
         user.password = hashedPassword(user.password, user.passwordSalt);
-        user.avatarUrl = DEFAULT_AVATAR_URL;
         User.create(user);
         if (isUseSignUpConfirm()) {
             user.changeState(UserState.LOCKED);
app/models/History.java
--- app/models/History.java
+++ app/models/History.java
@@ -213,6 +213,6 @@
     private static void setUserPageUrl(History history, User user) {
         history.setWho(user.name);
         history.setUserPageUrl("/" + user.loginId);
-        history.setUserAvatarUrl(user.avatarUrl);
+        history.setUserAvatarUrl(user.avatarUrl());
     }
 }
app/models/NullUser.java
--- app/models/NullUser.java
+++ app/models/NullUser.java
@@ -19,7 +19,6 @@
         this.loginId = "";
         this.email = "";
         this.createdDate = new Date();
-        this.avatarUrl = UserApp.DEFAULT_AVATAR_URL;
     }
 
     public List<Project> myProjects(){
app/models/User.java
--- app/models/User.java
+++ app/models/User.java
@@ -92,10 +92,7 @@
      */
     @Constraints.Email(message = "user.wrongEmail.alert")
     public String email;
-    /**
-     * 아바타 URL
-     */
-    public String avatarUrl;
+
     /**
      * 로그인 정보를 기억할지 나타내는 값
      */
@@ -289,7 +286,11 @@
     @Transient
     public Long avatarId(){
         List<Attachment> attachments = Attachment.findByContainer(avatarAsResource());
-        return attachments.get(attachments.size()-1).id;
+        if (attachments.size() > 0) {
+            return attachments.get(attachments.size()-1).id;
+        } else {
+            return null;
+        }
     }
 
     /**
@@ -463,7 +464,6 @@
             password = "";
             passwordSalt = "";
             email = "deleted-" + loginId + "@noreply.yobi.io";
-            avatarUrl = UserApp.DEFAULT_AVATAR_URL;
             rememberMe = false;
             projectUser.clear();
             enrolledProjects.clear();
@@ -476,10 +476,18 @@
         update();
     }
 
+    public String avatarUrl() {
+        Long avatarId = avatarId();
+        if (avatarId == null) {
+            return UserApp.DEFAULT_AVATAR_URL;
+        } else {
+            return controllers.routes.AttachmentApp.getFile(avatarId).url();
+        }
+    }
+
     public static List<User> findIssueAuthorsByProjectId(long projectId) {
-        String sql = "select user.id, user.avatar_url, user.name, user.login_id from issue issue, n4user user where issue.author_id = user.id group by issue.author_id";
+        String sql = "select user.id, user.name, user.login_id from issue issue, n4user user where issue.author_id = user.id group by issue.author_id";
         RawSql rawSql = RawSqlBuilder.parse(sql)
-                        .columnMapping("user.avatar_url", "avatarUrl")
                         .columnMapping("user.login_id", "loginId")
                         .create();
 
app/playRepository/GitRepository.java
--- app/playRepository/GitRepository.java
+++ app/playRepository/GitRepository.java
@@ -323,10 +323,10 @@
     }
 
     private String getAvatar(User user) {
-        if(user.isAnonymous() || user.avatarUrl.equals(UserApp.DEFAULT_AVATAR_URL)) {
+        if(user.isAnonymous() || user.avatarUrl().equals(UserApp.DEFAULT_AVATAR_URL)) {
             return GravatarUtil.getAvatar(user.email, 34);
         } else {
-            return user.avatarUrl;
+            return user.avatarUrl();
         }
     }
 
app/playRepository/SVNRepository.java
--- app/playRepository/SVNRepository.java
+++ app/playRepository/SVNRepository.java
@@ -114,11 +114,11 @@
     }
 
     private static String getAvatar(User user) {
-        if(user.isAnonymous() || user.avatarUrl.equals(UserApp.DEFAULT_AVATAR_URL)) {
+        if(user.isAnonymous() || user.avatarUrl().equals(UserApp.DEFAULT_AVATAR_URL)) {
             String defaultImageUrl = "http://ko.gravatar.com/userimage/53495145/0eaeeb47c620542ad089f17377298af6.png";
             return GravatarUtil.getAvatar(user.email, 34, defaultImageUrl);
         } else {
-            return user.avatarUrl;
+            return user.avatarUrl();
         }
     }
 
app/utils/TemplateHelper.scala
--- app/utils/TemplateHelper.scala
+++ app/utils/TemplateHelper.scala
@@ -174,7 +174,7 @@
   def getUserAvatar(user: models.User, avatarSize:String = "small") = {
     var userInfoURL = routes.UserApp.userInfo(user.loginId).toString();
 
-    "<a href=\"" + userInfoURL + "\" class=\"usf-group\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"" + user.name + "\"><img src=\"" + user.avatarUrl + "\" class=\"avatar-wrap " + avatarSize + "\"></a>" 
+    "<a href=\"" + userInfoURL + "\" class=\"usf-group\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"" + user.name + "\"><img src=\"" + user.avatarUrl + "\" class=\"avatar-wrap " + avatarSize + "\"></a>"
   }
 
   object DiffRenderer {
 
conf/evolutions/default/51.sql (added)
+++ conf/evolutions/default/51.sql
@@ -0,0 +1,7 @@
+# --- !Ups
+
+ALTER TABLE pull_request_comment DROP COLUMN IF EXISTS avatar_url;
+
+# --- !Downs
+
+ALTER TABLE pull_request_comment ADD COLUMN avatar_url varchar(255);
conf/initial-data.yml
--- conf/initial-data.yml
+++ conf/initial-data.yml
@@ -6,7 +6,6 @@
         password:       5v4TVjzLo1bqullT1CU4/bENUNOUfX97WpdunGLvJvw=
         passwordSalt:   '[B@1032a4'
         email:          admin@nhn.com
-        avatarUrl:      /assets/images/default-avatar-128.png
         createdDate:           2012-11-01 08:00:00
 
 siteAdmins:
conf/test-data.yml
--- conf/test-data.yml
+++ conf/test-data.yml
@@ -6,7 +6,6 @@
         password:       ys9gr1Xet/DL9RpmgczOlJg+txPvqnZCaw/z55gb0KU=
         passwordSalt:   '[B@1032a4'
         email:          yobi@yobi.io
-        avatarUrl:      /assets/images/default-avatar-128.png
         createdDate:           2012-12-01 08:00:00
     - !!models.User
         name:           Jihan
@@ -14,7 +13,6 @@
         password:       v1O5ggs2TqM0prM1pLUD/zC+g7cavbWMXayVA9pvGHY=
         passwordSalt:   '[B@1032a4'
         email:          laziel@naver.com
-        avatarUrl:      /assets/images/default-avatar-128.png
         createdDate:           2012-01-01 08:00:00
     - !!models.User
         name:           suwon
@@ -22,7 +20,6 @@
         password:       rB5DBMe0hxMWs5FlQOJi5GmK+wj2Txx09MdgFqH83+k=
         passwordSalt:   '[B@1032a4'
         email:          doortts@gmail.com
-        avatarUrl:      /assets/images/default-avatar-128.png
         createdDate:           2012-07-01 08:00:00
     - !!models.User
         name:           eungjun
@@ -30,7 +27,6 @@
         password:       yOF0X0iKA1MVkaAJESNcdGE1n/3SWM8vDOKRYCXV2E0=
         passwordSalt:   '[B@1032a4'
         email:          ejlee@nhn.com
-        avatarUrl:      /assets/images/default-avatar-128.png
         createdDate:           2012-05-01 08:00:00
     - !!models.User
         name:           wansoon
@@ -38,7 +34,6 @@
         password:       2OZ+qhPn9UJ7GffhbfO5gctuUMWI8jUf2YFdAMH73G8=
         passwordSalt:   '[B@737aa47f'
         email:          alecsiel@nhn.com
-        avatarUrl:      /assets/images/default-avatar-128.png
         createdDate:           2013-11-18 13:30:00
 
 # Projects
Add a comment
List