/**
* Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados.
*
* e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro
* dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do
* Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão.
*
* Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA;
* sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR.
* Veja a Licença Pública Geral Menor GNU para maiores detalhes.
*/
package br.gov.camara.edemocracia.portlets.comunidades.portlet;
import java.io.IOException;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletURL;
import javax.portlet.ProcessAction;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.Group;
import com.liferay.portal.model.GroupConstants;
import com.liferay.portal.model.User;
import com.liferay.portal.service.GroupLocalServiceUtil;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.util.bridges.mvc.MVCPortlet;
public class InscricaoComunidade extends MVCPortlet {
private static Log _log = LogFactoryUtil.getLog(InscricaoComunidade.class);
@Override
public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {
ThemeDisplay td = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);
Group comunidade = td.getScopeGroup();
User usuario = td.getUser();
try {
boolean podeAssinarComunidade = usuarioPodeAssinarAComunidade(comunidade, usuario);
boolean podeSairDaComunidade = usuarioPodeSairDaComunidade(comunidade, usuario);
String urlAcao = StringPool.BLANK;
if (usuario.isDefaultUser()) {
urlAcao = td.getURLSignIn();
if (comunidade.isGuest()) {
podeAssinarComunidade = false;
podeSairDaComunidade = false;
}
} else {
if (podeAssinarComunidade) {
urlAcao = createActionURL(renderResponse, "assinarComunidade");
} else if (podeSairDaComunidade) {
urlAcao = createActionURL(renderResponse, "sairDaComunidade");
}
}
setDefaultAttributes(renderRequest, podeAssinarComunidade, podeSairDaComunidade, urlAcao);
} catch (SystemException e) {
_log.error("Erro. Avalie o Log", e);
setDefaultAttributes(renderRequest, false, false, "");
}
super.doView(renderRequest, renderResponse);
}
private boolean usuarioPodeSairDaComunidade(Group comunidade, User usuario) throws SystemException {
boolean comunidadeDiferenteDaGuest = !comunidade.isGuest();
boolean usuarioEMembroDaComunidade = GroupLocalServiceUtil.hasUserGroup(usuario.getUserId(), comunidade.getGroupId());
if (usuarioEMembroDaComunidade && comunidadeDiferenteDaGuest && comunidade.isRegularSite()) {
return true;
} else {
return false;
}
}
private boolean usuarioPodeAssinarAComunidade(Group comunidade, User usuario) throws SystemException {
boolean usuarioNaoEstaNaComunidade = !GroupLocalServiceUtil.hasUserGroup(usuario.getUserId(), comunidade.getGroupId());
boolean comunidadeAberta = comunidade.getType() == GroupConstants.TYPE_SITE_OPEN;
if (usuarioNaoEstaNaComunidade && comunidadeAberta && comunidade.isRegularSite()) {
return true;
} else {
return false;
}
}
private String createActionURL(RenderResponse renderResponse, String actionName) {
PortletURL url = renderResponse.createActionURL();
url.setParameter(ActionRequest.ACTION_NAME, actionName);
return url.toString();
}
private void setDefaultAttributes(RenderRequest renderRequest, boolean podeAssinarComunidade, boolean podeSairDaComunidade, String urlAcao) {
renderRequest.setAttribute("urlAcao", urlAcao);
renderRequest.setAttribute("podeAssinarAComunidade", podeAssinarComunidade);
renderRequest.setAttribute("podeSairDaComunidade", podeSairDaComunidade);
}
@ProcessAction(name = "assinarComunidade")
public void entraComunidade(ActionRequest req, ActionResponse rsp) {
ThemeDisplay td = (ThemeDisplay) req.getAttribute(WebKeys.THEME_DISPLAY);
try {
verificarSeUsuarioEGuestERedirecionarParaLogin(rsp, td);
boolean usuarioPodeAssinarAComunidade = usuarioPodeAssinarAComunidade(td.getScopeGroup(), td.getUser());
if (usuarioPodeAssinarAComunidade) {
long[] groupIds = { td.getScopeGroupId() };
GroupLocalServiceUtil.addUserGroups(td.getUserId(), groupIds);
SessionMessages.add(req, "membro-usuario");
}
} catch (SystemException e) {
_log.error("Erro ao inscrever usuário na comunidade. Usuário: " + td.getUserId() + " .Comunidade:" + td.getScopeGroupId(), e);
SessionErrors.add(req, "erro-cadastrar-usuario");
} catch (IOException e) {
_log.error("Erro ao inscrever usuário na comunidade. Usuário: " + td.getUserId() + " .Comunidade:" + td.getScopeGroupId(), e);
SessionErrors.add(req, "erro-cadastrar-usuario");
}
}
@ProcessAction(name = "sairDaComunidade")
public void deixarComunidade(ActionRequest req, ActionResponse rsp) {
ThemeDisplay td = (ThemeDisplay) req.getAttribute(WebKeys.THEME_DISPLAY);
try {
verificarSeUsuarioEGuestERedirecionarParaLogin(rsp, td);
boolean usuarioPodeSairDaComunidade = usuarioPodeSairDaComunidade(td.getScopeGroup(), td.getUser());
if (usuarioPodeSairDaComunidade) {
long[] groupIds = { td.getScopeGroupId() };
GroupLocalServiceUtil.unsetUserGroups(td.getUserId(), groupIds);
SessionMessages.add(req, "descadastrado-usuario");
}
} catch (SystemException e) {
_log.error("Erro ao descadastrar usuário na comunidade. Usuário: " + td.getUserId() + " .Comunidade:" + td.getScopeGroupId(), e);
SessionErrors.add(req, "erro-descadastrar-usuario");
} catch (IOException e) {
_log.error("Erro ao descadastrar usuário na comunidade. Usuário: " + td.getUserId() + " .Comunidade:" + td.getScopeGroupId(), e);
SessionErrors.add(req, "erro-descadastrar-usuario");
}
}
private void verificarSeUsuarioEGuestERedirecionarParaLogin(ActionResponse rsp, ThemeDisplay themeDisplay) throws IOException {
User userLog = themeDisplay.getUser();
if (userLog.isDefaultUser()) {
rsp.sendRedirect(themeDisplay.getURLSignIn());
return;
}
}
}