/* * Copyright (C) 2003-2008 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.wcm.authoring.listener; import java.util.Collection; import java.util.Iterator; import javax.jcr.Node; import org.exoplatform.commons.utils.ListAccess; import org.exoplatform.portal.application.PortalRequestContext; import org.exoplatform.portal.webui.util.Util; import org.exoplatform.portal.webui.workspace.UIPortalApplication; import org.exoplatform.portal.webui.workspace.UIWorkingWorkspace; import org.exoplatform.services.cms.CmsService; import org.exoplatform.services.listener.Event; import org.exoplatform.services.listener.Listener; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import org.exoplatform.services.organization.Membership; import org.exoplatform.services.organization.MembershipHandler; import org.exoplatform.services.organization.OrganizationService; import org.exoplatform.services.organization.User; import org.exoplatform.services.organization.UserHandler; import org.exoplatform.services.wcm.extensions.publication.PublicationManager; import org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig.Lifecycle; import org.exoplatform.services.wcm.extensions.publication.lifecycle.impl.LifecyclesConfig.State; import org.exoplatform.services.wcm.utils.WCMCoreUtils; /** * Created by The eXo Platform SAS * Author : Benjamin Paillereau * benjamin.paillereau@exoplatform.com * May 31, 2010 */ public class PostUpdateStateEventListener extends Listener<CmsService, Node> { private static final Log LOG = ExoLogger.getLogger(PostUpdateStateEventListener.class.getName()); /** The pservice. */ private PublicationManager publicationManager; /** * Instantiates a new post edit content event listener. * * @param publicationManager the publication manager */ public PostUpdateStateEventListener(PublicationManager publicationManager) { this.publicationManager = publicationManager; } /* * (non-Javadoc) * @see * org.exoplatform.services.listener.Listener#onEvent(org.exoplatform.services * .listener.Event) */ public void onEvent(Event<CmsService, Node> event) throws Exception { Node node = event.getData(); String userId; try { userId = Util.getPortalRequestContext().getRemoteUser(); } catch (Exception e) { userId = node.getSession().getUserID(); } String currentState = node.getProperty("publication:currentState").getString(); if (!"enrolled".equals(currentState)) { String nodeLifecycle = node.getProperty("publication:lifecycle").getString(); // if (log.isInfoEnabled()) // log.info(userId+"::"+currentState+"::"+nodeLifecycle); if (LOG.isInfoEnabled()) LOG.info("@@@ " + currentState + " @@@@@@@@@@@@@@@@@@@ " + node.getPath()); Lifecycle lifecycle = publicationManager.getLifecycle(nodeLifecycle); Iterator<State> states = lifecycle.getStates().iterator(); State prevState = null; while (states.hasNext()) { State state = states.next(); if (state.getState().equals(currentState)) { sendMail(node, state, userId, false, false); if ("published".equals(state.getState()) && prevState != null) { sendMail(node, prevState, userId, false, true); } if (states.hasNext()) { State nextState = states.next(); sendMail(node, nextState, userId, true, false); break; } } prevState = state; } try { UIPortalApplication portalApplication = Util.getUIPortalApplication(); PortalRequestContext portalRequestContext = Util.getPortalRequestContext(); UIWorkingWorkspace uiWorkingWS = portalApplication.getChildById(UIPortalApplication.UI_WORKING_WS_ID); portalRequestContext.addUIComponentToUpdateByAjax(uiWorkingWS); portalRequestContext.ignoreAJAXUpdateOnPortlets(true); } catch (Exception e) { if (LOG.isWarnEnabled()) { LOG.warn(e.getMessage()); } } } } private void sendMail(Node node, State state, String userId, boolean isNextState, boolean isPublished) throws Exception { if (state.getMembership().contains(":")) { String[] membership = state.getMembership().split(":"); String membershipType = membership[0]; String group = membership[1]; OrganizationService orgService = WCMCoreUtils.getService(OrganizationService.class); UserHandler userh = orgService.getUserHandler(); MembershipHandler msh = orgService.getMembershipHandler(); ListAccess<User> userList = userh.findUsersByGroupId(group); User currentUser = null; try { currentUser = userh.findUserByName(userId); } catch (Exception e) { if (LOG.isWarnEnabled()) { LOG.warn(e.getMessage()); } } String username = userId; if (currentUser != null) username = currentUser.getFirstName() + " " + currentUser.getLastName(); for (User user : userList.load(0, userList.getSize())) { Collection<Membership> mss = msh.findMembershipsByUserAndGroup(user.getUserName(), group); for (Membership ms : mss) { if (membershipType.equals(ms.getMembershipType())) { String from = "\"" + username + "\" <exocontent@exoplatform.com>"; String to = user.getEmail(); String subject, body; String editUrl = "http://localhost:8080/ecmdemo/private/classic/siteExplorer/repository/collaboration" + node.getPath(); if (isPublished) { subject = "[eXo Content] Published : (published) " + node.getName(); } else { if (isNextState) { subject = "[eXo Content] Request : (" + state.getState() + ") " + node.getName(); } else { subject = "[eXo Content] Updated : (" + state.getState() + ") " + node.getName(); } } body = "[ <a href=\"" + editUrl + "\">" + editUrl + "</a> ]<br/>" + "updated by " + username; // mailService.sendMessage(from, to, subject, body); if (LOG.isInfoEnabled()) { LOG.info("\n################ SEND MAIL TO USER :: " + user.getUserName() + "\nfrom: " + from + "\nto: " + to + "\nsubject: " + subject + "\nbody: " + body + "\n######################################################"); } } } } } } }