/src/com/shroggle/presentation/account/accessPermissions/RemoveUserRightsUtil.java

https://github.com/shroggle/Shroggle · Java · 193 lines · 150 code · 27 blank · 16 comment · 20 complexity · 98083f419fa3023a70c2f20afdd82c62 MD5 · raw file

  1. /*********************************************************************
  2. * *
  3. * Copyright (c) 2007-2011 by Web-Deva. *
  4. * All rights reserved. *
  5. * *
  6. * This computer program is protected by copyright law and *
  7. * international treaties. Unauthorized reproduction or distribution *
  8. * of this program, or any portion of it, may result in severe civil *
  9. * and criminal penalties, and will be prosecuted to the maximum *
  10. * extent possible under the law. *
  11. * *
  12. *********************************************************************/
  13. package com.shroggle.presentation.account.accessPermissions;
  14. import com.shroggle.entity.*;
  15. import com.shroggle.logic.user.UsersManager;
  16. import com.shroggle.util.ServiceLocator;
  17. import com.shroggle.util.StringUtil;
  18. import com.shroggle.util.international.International;
  19. import com.shroggle.util.international.InternationalStorage;
  20. import com.shroggle.util.mail.Mail;
  21. import com.shroggle.util.persistance.Persistance;
  22. import com.shroggle.util.persistance.PersistanceTransaction;
  23. import com.shroggle.util.process.synchronize.SynchronizeContext;
  24. import com.shroggle.util.process.synchronize.SynchronizeMethod;
  25. import com.shroggle.util.process.synchronize.SynchronizeRequest;
  26. import com.shroggle.util.process.synchronize.SynchronizeRequestEntity;
  27. import java.util.ArrayList;
  28. import java.util.List;
  29. import java.util.Locale;
  30. /**
  31. * @author Balakirev Anatoliy
  32. */
  33. public class RemoveUserRightsUtil {
  34. public boolean isOneSiteAdmin(final List<Integer> selectedUsersId, final Integer loginedUserId) {
  35. List<Site> sitesAvailableForLoginedUser = persistance.getSites(loginedUserId, new SiteAccessLevel[]{SiteAccessLevel.ADMINISTRATOR});
  36. List<Integer> siteAdminsId;
  37. for (Site site : sitesAvailableForLoginedUser) {
  38. siteAdminsId = new ArrayList<Integer>();
  39. siteAdminsId.addAll(getSiteAdminsId(site));
  40. siteAdminsId.removeAll(selectedUsersId);
  41. if (siteAdminsId.size() == 0) {
  42. return true;
  43. }
  44. }
  45. return false;
  46. }
  47. private List<Integer> getSiteAdminsId(final Site site) {
  48. List<Integer> siteAdmins = new ArrayList<Integer>();
  49. for (UserOnSiteRight right : site.getUserOnSiteRights()) {
  50. if (right.isActive() && right.getSiteAccessType() == SiteAccessLevel.ADMINISTRATOR) {
  51. siteAdmins.add(right.getId().getUser().getUserId());
  52. }
  53. }
  54. return siteAdmins;
  55. }
  56. public RemovedRightsResponse removeRight(final Integer userId, final boolean removeEmptyUser, final boolean sendMessage) throws Exception {
  57. final List<RemovedRights> removedUsers = new ArrayList<RemovedRights>();
  58. final List<RemovedRights> removedRights = new ArrayList<RemovedRights>();
  59. final SynchronizeRequest synchronizeRequest = new SynchronizeRequestEntity(User.class, SynchronizeMethod.WRITE, userId);
  60. ServiceLocator.getSynchronize().execute(synchronizeRequest, new SynchronizeContext<Void>() {
  61. public Void execute() {
  62. final Integer loginedUserId = new UsersManager().getLogined().getUserId();
  63. // We must remove userOnSiteRights only for site to which logined user has "ADMINISTRATOR" access. Tolik
  64. final List<Site> sitesAvailableForLoginedUser =
  65. persistance.getSites(loginedUserId, new SiteAccessLevel[]{SiteAccessLevel.ADMINISTRATOR});
  66. final User user = persistance.getUserById(userId);
  67. persistanceTransaction.execute(new Runnable() {
  68. public void run() {
  69. for (final Site site : sitesAvailableForLoginedUser) {
  70. final UserOnSiteRight right = persistance.getUserOnSiteRightById(
  71. new UserOnSiteRightId(user, site));
  72. if (right != null) {
  73. if (sendMessage && !right.isActive()) {
  74. sendMessageAboutRepealedAccess(user, loginedUserId, site.getTitle());
  75. }
  76. removedRights.add(new RemovedRights(right.getId().getUser().getEmail(), right.getId().getSite().getTitle()));
  77. persistance.removeUserOnSiteRight(right);
  78. if (removeEmptyUser && (user.getUserOnSiteRights() == null || user.getUserOnSiteRights().size() == 0)) {
  79. removedUsers.add(new RemovedRights(user.getEmail()));
  80. persistance.removeUser(user);
  81. }
  82. }
  83. }
  84. }
  85. });
  86. return null;
  87. }
  88. });
  89. return new RemovedRightsResponse(removedUsers, removedRights);
  90. }
  91. private boolean hasActiveRights(final User user) {
  92. for (UserOnSiteRight right : user.getUserOnSiteRights()) {
  93. if (right.isActive()) {
  94. return true;
  95. }
  96. }
  97. return false;
  98. }
  99. void sendMessageAboutRepealedAccess(final User userWithRepealedRight, final Integer loginedUserId, final String siteName) {
  100. final User loginedUser = persistance.getUserById(loginedUserId);
  101. final InternationalStorage internationalStorage = ServiceLocator.getInternationStorage();
  102. final International international = internationalStorage.get("addEditPermissions", Locale.US);
  103. final String messageBody = international.get(
  104. "accessRepealedBody",
  105. StringUtil.getEmptyOrString(userWithRepealedRight.getLastName()),
  106. StringUtil.getEmptyOrString(userWithRepealedRight.getFirstName()),
  107. StringUtil.getEmptyOrString(loginedUser.getLastName()),
  108. StringUtil.getEmptyOrString(loginedUser.getFirstName()),
  109. siteName,
  110. UsersManager.getNetworkNameForNetworkUserOrOurAppName(),
  111. ServiceLocator.getConfigStorage().get().getApplicationUrl(),
  112. UsersManager.getNetworkEmailForNetworkUserOrOurAppEmail()
  113. );
  114. final String messageSubject = international.get("accessRepealedSubject");
  115. ServiceLocator.getMailSender().send(new Mail(userWithRepealedRight.getEmail(), messageBody, messageSubject));
  116. }
  117. public static class RemovedRightsResponse {
  118. public RemovedRightsResponse() {
  119. this.removedUsers = new ArrayList<RemovedRights>();
  120. this.removedRights = new ArrayList<RemovedRights>();
  121. }
  122. public RemovedRightsResponse(List<RemovedRights> removedUsers, List<RemovedRights> removedRights) {
  123. this.removedUsers = removedUsers;
  124. this.removedRights = removedRights;
  125. }
  126. private final List<RemovedRights> removedUsers;
  127. private final List<RemovedRights> removedRights;
  128. public List<RemovedRights> getRemovedUsers() {
  129. return removedUsers;
  130. }
  131. public String getRemovedUsersEmails() {
  132. final StringBuilder emails = new StringBuilder();
  133. for (RemovedRights removedUser : removedUsers) {
  134. emails.append(removedUser.getEmail());
  135. emails.append("<br>");
  136. }
  137. return emails.toString();
  138. }
  139. public List<RemovedRights> getRemovedRights() {
  140. return removedRights;
  141. }
  142. public void add(final RemovedRightsResponse removedRightsResponse) {
  143. this.removedUsers.addAll(removedRightsResponse.getRemovedUsers());
  144. this.removedRights.addAll(removedRightsResponse.getRemovedRights());
  145. }
  146. }
  147. public class RemovedRights {
  148. public RemovedRights(String email) {
  149. this(email, null);
  150. }
  151. public RemovedRights(String email, String siteTitle) {
  152. this.email = email;
  153. this.siteTitle = siteTitle;
  154. }
  155. private String email;
  156. private String siteTitle;
  157. public String getEmail() {
  158. return email;
  159. }
  160. public String getSiteTitle() {
  161. return siteTitle;
  162. }
  163. }
  164. private final Persistance persistance = ServiceLocator.getPersistance();
  165. private final PersistanceTransaction persistanceTransaction = ServiceLocator.getPersistanceTransaction();
  166. }