This is an automated email from the git hooks/post-receive script. New commit to branch feature/28_avatars in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit 16c884e01c8cbead7aaf4c8e2bee6d01fdbd578b Author: Kevin Morin <morin@codelutin.com> Date: Thu Sep 28 11:12:43 2017 +0200 refs #28 utilisation de l'avatar --- .../java/org/chorem/pollen/rest/api/v1/GtuApi.java | 3 -- .../org/chorem/pollen/services/bean/PollBean.java | 12 ++++++++ .../services/bean/resource/ResourceMetaBean.java | 2 +- .../pollen/services/service/PollService.java | 7 ++++- .../pollen/services/service/PollenUserService.java | 8 +++-- .../pollen/services/service/SocialAuthService.java | 5 ++- .../src/main/web/js/ResourceService.js | 4 +++ .../src/main/web/tag/PollenHeader.tag.html | 4 +-- .../src/main/web/tag/UserProfile.tag.html | 18 ++++++----- .../src/main/web/tag/components/Avatar.tag.html | 36 ++++++++++++++++++++++ .../web/tag/favoriteList/FavoriteList.tag.html | 2 -- .../src/main/web/tag/poll/Choice.tag.html | 3 +- .../src/main/web/tag/poll/ChoiceView.tag.html | 6 ++-- .../src/main/web/tag/poll/PollCard.tag.html | 3 +- 14 files changed, 85 insertions(+), 28 deletions(-) diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/GtuApi.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/GtuApi.java index b28619fb..ebb04d88 100644 --- a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/GtuApi.java +++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/GtuApi.java @@ -1,6 +1,5 @@ package org.chorem.pollen.rest.api.v1; -<<<<<<< HEAD /*- * #%L * Pollen :: Rest Api @@ -22,8 +21,6 @@ package org.chorem.pollen.rest.api.v1; * #L% */ -import org.chorem.pollen.services.bean.GtuMetaBean; -import org.chorem.pollen.services.bean.ResourceStreamBean; import org.chorem.pollen.services.bean.resource.GtuMetaBean; import org.chorem.pollen.services.bean.resource.ResourceStreamBean; import org.chorem.pollen.services.service.GtuService; diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollBean.java index f7f0c2e7..b8babfaf 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollBean.java @@ -140,6 +140,9 @@ public class PollBean extends PollenBean<Poll> { protected int maxVoters; + protected String creatorAvatar; + + public String getPermission() { return permission; } @@ -455,11 +458,20 @@ public class PollBean extends PollenBean<Poll> { this.gtuValidated = gtuValidated; } +<<<<<<< HEAD public int getMaxVoters() { return maxVoters; } public void setMaxVoters(int maxVoters) { this.maxVoters = maxVoters; +======= + public String getCreatorAvatar() { + return creatorAvatar; + } + + public void setCreatorAvatar(String creatorAvatar) { + this.creatorAvatar = creatorAvatar; +>>>>>>> refs #28 utilisation de l'avatar } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/resource/ResourceMetaBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/resource/ResourceMetaBean.java index a646dd4f..9cd1e54a 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/resource/ResourceMetaBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/resource/ResourceMetaBean.java @@ -34,7 +34,7 @@ public class ResourceMetaBean extends AbstractResourceBean { protected Date uploadDate; - protected ResourceMetaBean() { + public ResourceMetaBean() { super(PollenResource.class); } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java index 050f9e7f..3c3f2a37 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java @@ -182,8 +182,13 @@ public class PollService extends PollenServiceSupport { bean.setGtuValidated(getGtuService().isGtuValidated(entity)); bean.setMaxVoters(getMaxVoters(entity)); + if (entity.getCreator().getPollenUser() != null && entity.getCreator().getPollenUser().getAvatar() != null) { + bean.setCreatorAvatar(getPollenResourceService().getReduceIdByTopiaId( + entity.getCreator().getPollenUser().getAvatar().getTopiaId())); + } + return bean; - }; + } protected int getMaxVoters(Poll poll) { boolean premium = poll.isPremium() || getUserService().isPremium(poll.getCreator().getPollenUser()); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java index 59b6e985..3d9b7102 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java @@ -80,7 +80,9 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer .collect(Collectors.toList())); } bean.setPremiumTo(entity.getPremiumTo()); - + if (entity.getAvatar() != null) { + bean.setAvatar(getPollenResourceService().getReduceIdByTopiaId(entity.getAvatar().getTopiaId())); + } bean.setGtuValidated(getGtuService().isGtuValidated(entity)); bean.setPremium(isPremium(entity)); @@ -272,7 +274,7 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer checkIsConnected(); PollenUser user = getConnectedUser(); if (user.getAvatar() != null) { - getPollenResourceService().deleteResource(user.getAvatar().getTopiaId()); + getPollenResourceDao().delete(user.getAvatar()); } commit(); } @@ -283,7 +285,7 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer PollenResource avatarResource = getPollenResourceService().createAvatarResource(resourceBean); PollenUser user = getConnectedUser(); if (user.getAvatar() != null) { - getPollenResourceService().deleteResource(user.getAvatar().getTopiaId()); + getPollenResourceDao().delete(user.getAvatar()); } user.setAvatar(avatarResource); commit(); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java index 52c9e449..da9b9bbd 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java @@ -275,12 +275,11 @@ public class SocialAuthService extends PollenServiceSupport { } public void setAvatarToUser(SocialAuthManager manager, Map<String, String> paramsMap) throws Exception { - checkIsConnected(); - PollenUser connectedUser = getConnectedUser(); + PollenUser connectedUser = checkAndGetConnectedUser(); PollenResourceService pollenResourceService = getPollenResourceService(); if (connectedUser.getAvatar() != null) { - pollenResourceService.deleteResource(connectedUser.getAvatar().getTopiaId()); + getPollenResourceDao().delete(connectedUser.getAvatar()); } // get profile diff --git a/pollen-ui-riot-js/src/main/web/js/ResourceService.js b/pollen-ui-riot-js/src/main/web/js/ResourceService.js index 9001f361..7de1ccc0 100644 --- a/pollen-ui-riot-js/src/main/web/js/ResourceService.js +++ b/pollen-ui-riot-js/src/main/web/js/ResourceService.js @@ -52,6 +52,10 @@ class ResourceService extends FetchService { return this.get(url); } + getPreviewUrl(resourceId) { + return this.endPoint + this._getUrlPrefix(resourceId) + "/preview"; + } + getMeta(resourceId) { let url = this._getUrlPrefix(resourceId) + "/meta"; return this.get(url); diff --git a/pollen-ui-riot-js/src/main/web/tag/PollenHeader.tag.html b/pollen-ui-riot-js/src/main/web/tag/PollenHeader.tag.html index e9dc0480..05a0c123 100644 --- a/pollen-ui-riot-js/src/main/web/tag/PollenHeader.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/PollenHeader.tag.html @@ -22,7 +22,7 @@ */ require("./HeaderI18n.tag.html"); require("./popup/FeedbackModal.tag.html"); -require("./components/LetterAvatar.tag.html"); +require("./components/Avatar.tag.html"); <PollenHeader> <a class="header-home instance-title" href="#home" target="_top"></a> @@ -47,7 +47,7 @@ require("./components/LetterAvatar.tag.html"); <div class="dropdown" if={user}> <a class="header-link"> - <LetterAvatar name={user && user.name} rounded="true"/> + <Avatar avatar={user.avatar} name={user.name} rounded="true"/> <span class="user-name action-label"> {user && user.name}</span> </a> <div class="dropdown-content right"> diff --git a/pollen-ui-riot-js/src/main/web/tag/UserProfile.tag.html b/pollen-ui-riot-js/src/main/web/tag/UserProfile.tag.html index 5e89f949..5e0cf192 100644 --- a/pollen-ui-riot-js/src/main/web/tag/UserProfile.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/UserProfile.tag.html @@ -172,7 +172,7 @@ require("./components/LetterAvatar.tag.html"); <h3 class="c-heading"><i class="fa fa-sign-in"/> {__.avatar}</h3> <div class="avatar-container"> <div class="avatar-column" if="{user.avatar}"> - <img src="{userService.getUserAvatarUrl(user.id)}"/> + <img src="{resourceService.getPreviewUrl(user.avatar)}"/> <button onclick="{deleteAvatar}" class="c-button u-small c-button--error"><i class="fa fa-trash"></i></button> </div> <LetterAvatar class="avatar-column" name={user && user.name || ""} if="{!user.avatar}"/> @@ -208,8 +208,9 @@ require("./components/LetterAvatar.tag.html"); this.installBundle(this.session, "userProfile"); this.errors = {}; this.user = this.session.getUser() || {}; - this.userService = require("../js/UserService"); + let userService = require("../js/UserService"); this.authService = require("../js/AuthService"); + this.resourceService = require("../js/ResourceService"); let Message = require("../js/Message"); this.loginProviders = []; @@ -232,7 +233,7 @@ require("./components/LetterAvatar.tag.html"); e.stopPropagation(); this.user.name = this.refs.name.value; this.user.email = this.refs.email.value; - this.userService.saveUser(this.user).then(() => { + userService.saveUser(this.user).then(() => { this.session.updateUser(); this.bus.trigger("message", new Message(this._l("updatedIdentity"), "success")); }); @@ -259,7 +260,7 @@ require("./components/LetterAvatar.tag.html"); if (this.errors.repeatPassword === undefined) { let oldPassword = this.user.withPassword ? this.refs.oldPassword.value : null; let newPassword = this.refs.newPassword.value; - this.userService.changePassword(oldPassword, newPassword).then(() => { + userService.changePassword(oldPassword, newPassword).then(() => { if (this.user.withPassword) { this.refs.oldPassword.value = ""; } @@ -289,7 +290,7 @@ require("./components/LetterAvatar.tag.html"); if (!confirm) { return Promise.reject(); } - return this.userService.unlinkProvider(credentialId); + return userService.unlinkProvider(credentialId); }).then(result => { this.user.credentials.splice(index, 1); this.update(); @@ -309,7 +310,7 @@ require("./components/LetterAvatar.tag.html"); if (!confirm) { return Promise.reject(); } - return this.userService.deleteAvatar(); + return userService.deleteAvatar(); }).then(result => { this.user.avatar = null; this.update(); @@ -318,8 +319,9 @@ require("./components/LetterAvatar.tag.html"); //TODO check size and all this.uploadAvatar = e => { - this.userService.setUserAvatar(this.refs.avatar.files[0]).then((result) => { - this.user.avatar = result; + userService.setUserAvatar(this.refs.avatar.files[0]).then((result) => { + console.log(result); + this.user.avatar = result.id; this.update(); }); } diff --git a/pollen-ui-riot-js/src/main/web/tag/components/Avatar.tag.html b/pollen-ui-riot-js/src/main/web/tag/components/Avatar.tag.html new file mode 100644 index 00000000..b5e875da --- /dev/null +++ b/pollen-ui-riot-js/src/main/web/tag/components/Avatar.tag.html @@ -0,0 +1,36 @@ +require("./LetterAvatar.tag.html"); +<Avatar> + <LetterAvatar name={opts.name} rounded={opts.rounded} if={!opts.avatar} /> + + <div class="avatar {rounded: opts.rounded}" + style="background-image: url('{resourceService.getPreviewUrl(opts.avatar)}');" + show={opts.avatar}> + </div> + + <script> + this.session = require("../../js/Session"); + this.installBundle(this.session, "avatar"); + this.resourceService = require("../../js/ResourceService"); + this.avatarLoaded = false; + + this.onAvatarLoaded = e => { + this.avatarLoaded = true; + this.update(); + }; + </script> + + <style> + + .avatar { + width: 50px; + height:50px; + background-size: 50px 50px; + background-position: center; + background-repeat: no-repeat; + } + .avatar.rounded { + border-radius: 100%; + } + + </style> +</Avatar> \ No newline at end of file diff --git a/pollen-ui-riot-js/src/main/web/tag/favoriteList/FavoriteList.tag.html b/pollen-ui-riot-js/src/main/web/tag/favoriteList/FavoriteList.tag.html index ceac20ac..32733a09 100644 --- a/pollen-ui-riot-js/src/main/web/tag/favoriteList/FavoriteList.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/favoriteList/FavoriteList.tag.html @@ -164,8 +164,6 @@ require("../components/LoadingCard.tag.html"); favoriteListService.favoriteList(this.favoriteList.id).then(results => { this.favoriteList = results; this.loaded = true; - console.log("reloadFavoriteListInfos"); - console.log(results); this.update(); }); }; diff --git a/pollen-ui-riot-js/src/main/web/tag/poll/Choice.tag.html b/pollen-ui-riot-js/src/main/web/tag/poll/Choice.tag.html index 46a9cacc..2046ce78 100644 --- a/pollen-ui-riot-js/src/main/web/tag/poll/Choice.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/poll/Choice.tag.html @@ -53,7 +53,7 @@ require("../components/time-picker.tag.html"); </button> <div if="{originalFile}" class="original-file {opts.choice.choiceType === 'RESOURCE' ? 'selected' : 'hidden'}"> - <img src="{session.configuration.endPoint}/v1/resources/{originalFile}/preview"/> + <img src="{resourceService.getPreviewUrl(originalFile)}"/> <span> {originalFile.name} <i class="fa fa-remove" @@ -126,6 +126,7 @@ require("../components/time-picker.tag.html"); <script type="es6"> this.session = require("../../js/Session"); + this.resourceService = require("../../js/ResourceService"); let moment = require("moment"); moment.locale(this.session.locale); diff --git a/pollen-ui-riot-js/src/main/web/tag/poll/ChoiceView.tag.html b/pollen-ui-riot-js/src/main/web/tag/poll/ChoiceView.tag.html index 5c7bd0d5..9cd1dfce 100644 --- a/pollen-ui-riot-js/src/main/web/tag/poll/ChoiceView.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/poll/ChoiceView.tag.html @@ -39,7 +39,7 @@ require("../components/MultiLineLabel.tag.html"); </span> <div class="choice-ressource" if={opts.choice.choiceType === "RESOURCE" && meta && isImage(meta)}> - <img class="image-preview" src="{session.configuration.endPoint}/v1/resources/{opts.choice.choiceValue}/preview"/> + <img class="image-preview" src="{resourceService.getPreviewUrl(opts.choice.choiceValue)}"/> </div> <div class="choice-ressource" if={opts.choice.choiceType === "RESOURCE" && meta && !isImage(meta)}> @@ -92,13 +92,13 @@ require("../components/MultiLineLabel.tag.html"); </div> <script type="es6"> - let ResourceService = require("../../js/ResourceService"); this.session = require("../../js/Session"); + this.resourceService = require("../../js/ResourceService"); this.installBundle(this.session, "choice"); this.showModalImage = false; if (this.opts.choice.choiceType === "RESOURCE") { - ResourceService.getMeta(this.opts.choice.choiceValue).then(meta => { + this.resourceService.getMeta(this.opts.choice.choiceValue).then(meta => { this.meta = meta; this.update(); }); diff --git a/pollen-ui-riot-js/src/main/web/tag/poll/PollCard.tag.html b/pollen-ui-riot-js/src/main/web/tag/poll/PollCard.tag.html index a2347c15..1cb3bb78 100644 --- a/pollen-ui-riot-js/src/main/web/tag/poll/PollCard.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/poll/PollCard.tag.html @@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #L% --> +require("../components/Avatar.tag.html"); <PollCard class="poll-{opts.poll.status.toLowerCase()}"> <div class="card-actions"> @@ -48,7 +49,7 @@ </div> <div class="poll-creator" title={opts.poll.creatorName}> - <LetterAvatar name={opts.poll.creatorName} rounded="true"/> + <Avatar avatar={opts.poll.creatorAvatar} name={opts.poll.creatorName} rounded="true"/> <div class="creator-name"> {opts.poll.creatorName} <div class="creation-date"> -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.