diff --git a/docker/config.properties b/docker/config.properties index a54836ad08..de19578799 100644 --- a/docker/config.properties +++ b/docker/config.properties @@ -24,6 +24,8 @@ Secret=secret recaptcha.private=6LcdM0oUAAAAANYhnHF3jmD1r1TvkiyPaWHjC83x recaptcha.public=6LcdM0oUAAAAAD2T-0ZW2HPkqZ5nFi1Y52U7BOMI +user.FullDelete = false + EnableHsts=false # admin.emailAddress=bugz@linux.org.ru admin.emailAddress=specify_your_real_email_if_you_want_receive_messages diff --git a/src/main/java/ru/org/linux/spring/SiteConfig.java b/src/main/java/ru/org/linux/spring/SiteConfig.java index b8a436f21f..36b0045ad4 100644 --- a/src/main/java/ru/org/linux/spring/SiteConfig.java +++ b/src/main/java/ru/org/linux/spring/SiteConfig.java @@ -182,4 +182,17 @@ public Integer getCommentScoreValueForEditing() { } return Integer.valueOf(property); } + + /** + * Полное удаление аккаунта, с переносом сообщений к Delete. + * + * @return true если разрешено, иначе false + */ + public Boolean isUserFullDelete() { + String property = properties.getProperty("user.FullDelete"); + if (property == null) { + return false; + } + return Boolean.valueOf(property); + } } diff --git a/src/main/java/ru/org/linux/user/DeregisterController.java b/src/main/java/ru/org/linux/user/DeregisterController.java index 25ee0a2362..5e6b3afd46 100644 --- a/src/main/java/ru/org/linux/user/DeregisterController.java +++ b/src/main/java/ru/org/linux/user/DeregisterController.java @@ -49,14 +49,18 @@ public class DeregisterController { @Autowired private ElasticsearchIndexService indexService; + + private boolean isFullDelete; @RequestMapping(value = "/deregister.jsp", method = {RequestMethod.GET, RequestMethod.HEAD}) public ModelAndView show( HttpServletRequest request, @ModelAttribute("form") DeregisterRequest form ) { - + Template tmpl = Template.getTemplate(request); + isFullDelete = tmpl.getConfig().isUserFullDelete(); + if (!tmpl.isSessionAuthorized()) { throw new AccessViolationException("Not authorized"); } @@ -64,12 +68,19 @@ public ModelAndView show( User user = tmpl.getCurrentUser(); user.checkAnonymous(); + String msgDereg1, msgDereg2; + if(isFullDelete) { + msgDereg1 = "Удаление"; msgDereg2 = "удалить"; + }else{ + msgDereg1 = "Блокировка"; msgDereg2 = "заблокировать"; + } + if (user.getScore() < 100) { - throw new AccessViolationException("Удаление аккаунта недоступно для пользователей со score < 100"); + throw new AccessViolationException(msgDereg1 + " аккаунта недоступно для пользователей со score < 100"); } if (user.isAdministrator() || user.isModerator()) { - throw new AccessViolationException("Нельзя удалить модераторский аккаунт"); + throw new AccessViolationException("Нельзя " + msgDereg2 + " модераторский аккаунт"); } return new ModelAndView("deregister"); @@ -83,6 +94,7 @@ public ModelAndView deregister( ) { Template tmpl = Template.getTemplate(request); + isFullDelete = tmpl.getConfig().isUserFullDelete(); if (!tmpl.isSessionAuthorized()) { throw new AccessViolationException("Not authorized"); @@ -91,8 +103,15 @@ public ModelAndView deregister( User user = tmpl.getCurrentUser(); user.checkAnonymous(); + String msgDereg1, msgDereg2, msgDereg3; + if(isFullDelete) { + msgDereg1 = "Удаление"; msgDereg2 = "удалить"; msgDereg3 = "самостоятельное удаление"; + }else{ + msgDereg1 = "Блокировка"; msgDereg2 = "заблокировать"; msgDereg3 = "самостоятельная блокировка"; + } + if (user.getScore() < 100) { - throw new AccessViolationException("Удаление аккаунта недоступно для пользователей со score < 100"); + throw new AccessViolationException(msgDereg1 + " аккаунта недоступно для пользователей со score < 100"); } if (!user.matchPassword(form.getPassword())) { @@ -100,7 +119,7 @@ public ModelAndView deregister( } if (user.isAdministrator() || user.isModerator()) { - throw new AccessViolationException("Нельзя удалить модераторский аккаунт"); + throw new AccessViolationException("Нельзя " + msgDereg2 + " модераторский аккаунт"); } if (errors.hasErrors()) { @@ -108,33 +127,33 @@ public ModelAndView deregister( } // Move messages -/* - List movedComments = commentDao.getAllByUser(user); - List movedTopics = topicDao.getAllByUser(user); + if (isFullDelete) { + List movedComments = commentDao.getAllByUser(user); + List movedTopics = topicDao.getAllByUser(user); - userDao.moveMessages(user.getId(), userDao.findUserId("Deleted")); + userDao.moveMessages(user.getId(), userDao.findUserId("Deleted")); - indexService.reindexComments(movedComments); - indexService.reindexTopics(movedTopics); -*/ + indexService.reindexComments(movedComments); + indexService.reindexTopics(movedTopics); + } // Remove user info userDao.resetUserpic(user, user); userDao.updateUser(user, "", "", null, "", null, ""); // Block account - userDao.block(user, user, "самостоятельная блокировка аккаунта"); + userDao.block(user, user, msgDereg3 + " аккаунта"); return new ModelAndView( "action-done", "message", - "Удаление пользователя прошло успешно." + msgDereg1 + " пользователя прошло успешно." ); } @InitBinder("form") public void requestValidator(WebDataBinder binder) { - binder.setValidator(new DeregisterRequestValidator()); + binder.setValidator(new DeregisterRequestValidator(isFullDelete)); binder.setBindingErrorProcessor(new ExceptionBindingErrorProcessor()); } } diff --git a/src/main/java/ru/org/linux/user/DeregisterRequestValidator.java b/src/main/java/ru/org/linux/user/DeregisterRequestValidator.java index e2d88e650c..88cc940caf 100644 --- a/src/main/java/ru/org/linux/user/DeregisterRequestValidator.java +++ b/src/main/java/ru/org/linux/user/DeregisterRequestValidator.java @@ -19,6 +19,10 @@ import org.springframework.validation.Validator; public class DeregisterRequestValidator implements Validator { + public DeregisterRequestValidator(boolean isFullDelete) { + this.isFullDelete = isFullDelete; + } + private boolean isFullDelete; @Override public boolean supports(Class aClass) { return DeregisterRequest.class.equals(aClass); @@ -28,16 +32,17 @@ public boolean supports(Class aClass) { public void validate(Object o, Errors errors) { DeregisterRequest form = (DeregisterRequest) o; + String msgDereg; + if(isFullDelete) msgDereg = "с удалением"; else msgDereg = "с блокировкой"; + if (!form.getAcceptBlock()) { - errors.reject("acceptBlock", null, "Вы не согласились с блокировкой аккаунта"); + errors.reject("acceptBlock", null, "Вы не согласились " + msgDereg + " аккаунта"); } -/* - if (!form.getAcceptMoveToDeleted()) { + if(isFullDelete && !form.getAcceptMoveToDeleted()) { errors.reject("acceptMoveToDeleted", null, "Вы не согласились с передачей всех сообщений специальному пользователю"); } -*/ - + if (!form.getAcceptOneway()) { errors.reject("acceptOneway", null, "Вы не согласились с невозможностью восстановления аккаунта"); } diff --git a/src/main/webapp/WEB-INF/config.properties.dist b/src/main/webapp/WEB-INF/config.properties.dist index ee64459d30..436d019fa2 100644 --- a/src/main/webapp/WEB-INF/config.properties.dist +++ b/src/main/webapp/WEB-INF/config.properties.dist @@ -24,6 +24,8 @@ Secret=secret recaptcha.private=6LcdM0oUAAAAANYhnHF3jmD1r1TvkiyPaWHjC83x recaptcha.public=6LcdM0oUAAAAAD2T-0ZW2HPkqZ5nFi1Y52U7BOMI +user.FullDelete = false + EnableHsts=false # admin.emailAddress=bugz@linux.org.ru admin.emailAddress=specify_your_real_email_if_you_want_receive_messages diff --git a/src/main/webapp/WEB-INF/jsp/deregister.jsp b/src/main/webapp/WEB-INF/jsp/deregister.jsp index 1388b51a80..47edf5de0b 100644 --- a/src/main/webapp/WEB-INF/jsp/deregister.jsp +++ b/src/main/webapp/WEB-INF/jsp/deregister.jsp @@ -18,12 +18,19 @@ --%> -Удаление пользователя + + + + +${msgDereg2} пользователя -

Удаление пользователя

+

${msgDereg2} пользователя

-Аккаунт становится недоступен для входа<%--, все сообщения переходят к специальному пользователю--%>. +Аккаунт становится недоступен для входа + + , все сообщения переходят к специальному пользователю. +

@@ -39,23 +46,22 @@
-
-
- +
diff --git a/src/main/webapp/WEB-INF/jsp/edit-profile.jsp b/src/main/webapp/WEB-INF/jsp/edit-profile.jsp index c09d226964..65437d470a 100644 --- a/src/main/webapp/WEB-INF/jsp/edit-profile.jsp +++ b/src/main/webapp/WEB-INF/jsp/edit-profile.jsp @@ -163,13 +163,15 @@ $script.ready('plugins', function() {

Другие настройки

+ + diff --git a/src/main/webapp/sass/tango/_style.scss b/src/main/webapp/sass/tango/_style.scss index 56df941cc1..0e31013fff 100644 --- a/src/main/webapp/sass/tango/_style.scss +++ b/src/main/webapp/sass/tango/_style.scss @@ -105,8 +105,8 @@ p { } #bd li { - margin-left: 2em; list-style: inherit; + list-style-position: inside; } #bd .sign { diff --git a/src/main/webapp/sass/waltz/style.scss b/src/main/webapp/sass/waltz/style.scss index 63c2e13f4b..c845dc18f6 100644 --- a/src/main/webapp/sass/waltz/style.scss +++ b/src/main/webapp/sass/waltz/style.scss @@ -129,8 +129,8 @@ p { } #bd li { - margin-left: 2em; list-style: inherit; + list-style-position: inside; } #bd .sign { diff --git a/src/main/webapp/sass/zomg_ponies/style.scss b/src/main/webapp/sass/zomg_ponies/style.scss index ed29f32a9a..62876c8626 100644 --- a/src/main/webapp/sass/zomg_ponies/style.scss +++ b/src/main/webapp/sass/zomg_ponies/style.scss @@ -269,8 +269,8 @@ div.msg-top-header{ } #bd li { - margin-left: 2em; list-style: inherit; + list-style-position: inside; } #bd .sign {