diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index f4a24c6d8a1157a1e9b722f3f09e0447e83da19c..199a165e9be69fc3f0c5fc9782f8130abdf820f0 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -432,6 +432,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware } @Override + @Cacheable("sessions") public Session getSessionFromKeyword(final String keyword) { final NovaView view = new NovaView("session/by_keyword"); view.setKey(keyword); diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index b404910b3fb1efd7fae1b3f0cb8756f3adac7e1e..170c19c1146dacf348785b9a9a79e12ef32052b3 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -313,7 +313,41 @@ public class SessionService implements ISessionService, ApplicationEventPublishe @Override @PreAuthorize("isAuthenticated() and hasPermission(#session, 'owner')") public Session updateSession(final String sessionkey, final Session session) { - return databaseDao.updateSession(session); + final Session existingSession = databaseDao.getSessionFromKeyword(sessionkey); + + existingSession.setActive(session.isActive()); + existingSession.setShortName(session.getShortName()); + existingSession.setPpAuthorName(session.getPpAuthorName()); + existingSession.setPpAuthorMail(session.getPpAuthorMail()); + existingSession.setShortName(session.getShortName()); + existingSession.setPpAuthorName(session.getPpAuthorName()); + existingSession.setPpFaculty(session.getPpFaculty()); + existingSession.setName(session.getName()); + existingSession.setPpUniversity(session.getPpUniversity()); + existingSession.setPpDescription(session.getPpDescription()); + existingSession.setPpLevel(session.getPpLevel()); + existingSession.setPpLicense(session.getPpLicense()); + existingSession.setPpSubject(session.getPpSubject()); + + if (session.getPpLogo() != null) { + if (session.getPpLogo().startsWith("http")) { + final String base64ImageString = imageUtils.encodeImageToString(session.getPpLogo()); + if (base64ImageString == null) { + throw new BadRequestException(); + } + existingSession.setPpLogo(base64ImageString); + } else { + existingSession.setPpLogo(session.getPpLogo()); + } + // base64 adds offset to filesize, formula taken from: http://en.wikipedia.org/wiki/Base64#MIME + final int fileSize = (int) ((existingSession.getPpLogo().length() - 814) / 1.37); + if (fileSize > uploadFileSizeByte) { + LOGGER.error("Could not save file. File is too large with " + fileSize + " Byte."); + throw new PayloadTooLargeException(); + } + } + + return databaseDao.updateSession(existingSession); } /*