/**
* 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.cadastrousuarios.beans;
import java.io.IOException;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import org.apache.commons.lang.StringUtils;
import br.gov.camara.edemocracia.portlets.libs.Biblioteca;
import com.liferay.faces.portal.context.LiferayFacesContext;
import com.liferay.portal.NoSuchUserException;
import com.liferay.portal.kernel.exception.PortalException;
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.model.Ticket;
import com.liferay.portal.model.User;
import com.liferay.portal.service.ServiceContext;
import com.liferay.portal.service.ServiceContextFactory;
import com.liferay.portal.service.TicketLocalServiceUtil;
import com.liferay.portal.service.UserLocalServiceUtil;
import com.liferay.portal.service.UserServiceUtil;
@ManagedBean(name = "descadastro")
@RequestScoped
public class DescadastrarBean implements Serializable {
private static final long serialVersionUID = 1L;
// http://SERVER_NAME/c/portal/logout
private static final String URL_LOGOUT = "/c/portal/logout";
private static final String URL_HOME = "/web/public/home";
private static final Log _log = LogFactoryUtil.getLog(DescadastrarBean.class);
private static final long ID_USER_DEFAULT = 10134;
@ManagedProperty("#{param.ticketKey}")
private String ticketKey;
@ManagedProperty("#{param.paramUserId}")
private String paramUserId;
private String nomeUsuario;
@ManagedProperty("#{param.email}")
private String email;
private String captchaText;
private Boolean mostrarConfirmacao;
private Boolean mostrarMensagemLogout;
private boolean usuarioCadastrado;
private boolean emailEnviadoParaUsuario;
@PostConstruct
public void init() {
try {
if (paramUserId != null) {
Long userId = new Long(this.paramUserId);
User user = UserServiceUtil.getUserById(userId);
email = user.getEmailAddress();
nomeUsuario = user.getFirstName();
mostrarConfirmacao = false;
mostrarMensagemLogout = false;
if (ticketKey != null && !ticketKey.equals("")) {
if (isLoggedIn()) {
mostrarMensagemLogout = true;
} else {
mostrarConfirmacao = true;
}
}
usuarioCadastrado = true;
} else {
nomeUsuario = "Usuário";
}
} catch (NoSuchUserException e) {
_log.warn("Usuário não encontrado com a chave primária ." + paramUserId, e);
adicionarMensagemDeErro("Erro ao recuperar dados.");
} catch (PortalException e) {
_log.error("Ocorreu um erro ao inicializar dados.", e);
adicionarMensagemDeErro("Erro ao recuperar dados");
} catch (SystemException e) {
_log.error("Ocorreu um erro ao inicializar dados.", e);
adicionarMensagemDeErro("Erro ao recuperar dados");
}
}
public void enviaEmail() {
boolean emailValido = validarEmail(email);
boolean captchaValido = validarCaptcha(captchaText);
if (emailValido && captchaValido) {
try {
long companyId = LiferayFacesContext.getInstance().getCompanyId();
User user = UserServiceUtil.getUserByEmailAddress(companyId, email);
ServiceContext serviceContext = ServiceContextFactory.getInstance(User.class.getName(), LiferayFacesContext.getInstance().getPortletRequest());
LiferayCadastroUtil.enviaEmailDescadastrar(user, companyId, email, serviceContext);
adicionarMensagemDeSucesso("Email enviado. Por favor cheque sua caixa de entrada para continuar com o processo de descadastramento.");
emailEnviadoParaUsuario = true;
} catch (NoSuchUserException e) {
_log.warn("Usuário não encontrado com o email: " + email, e);
adicionarMensagemDeErro("Erro ao recuperar dados.");
} catch (PortalException e) {
_log.error("Ocorreu um erro ao enviar email para: " + email, e);
adicionarMensagemDeErro("Erro ao recuperar dados.");
} catch (SystemException e) {
_log.error("Ocorreu um erro ao enviar email para: " + email, e);
adicionarMensagemDeErro("Erro ao recuperar dados.");
}
} else {
captchaText = "";
}
}
private boolean validarCaptcha(String captchaText) {
if (StringUtils.isBlank(captchaText)) {
adicionarMensagemDeErro("Digite o captcha.");
return false;
} else if (!Biblioteca.validarCaptcha(captchaText)) {
adicionarMensagemDeErro(" Captcha inválido. Digite novamente.");
return false;
} else {
return true;
}
}
private boolean validarEmail(String email) {
if (StringUtils.isBlank(email)) {
adicionarMensagemDeErro("Informe o e-mail.");
return false;
} else if (!Biblioteca.validarEmail(email)) {
adicionarMensagemDeErro("E-mail inválido.");
return false;
} else {
return true;
}
}
public void descadastrar() {
try {
Long userId = new Long(this.paramUserId);
User user = UserServiceUtil.getUserById(userId);
Ticket ticket = TicketLocalServiceUtil.getTicket(ticketKey);
if (userId == user.getUserId()) {
if (isLoggedIn()) {
logout();
}
deletaUsuario(user);
TicketLocalServiceUtil.deleteTicket(ticket);
}
adicionarMensagemDeSucesso("Você foi descadastrado do portal edemocracia.");
usuarioCadastrado = false;
} catch (PortalException e) {
_log.error("Ocorreu um erro ao descadastrar usuário.", e);
adicionarMensagemDeErro("Ocorreu um erro ao descadastrar usuário");
} catch (SystemException e) {
_log.error("Ocorreu um erro ao descadastrar usuário.", e);
adicionarMensagemDeErro("Ocorreu um erro ao descadastrar usuário");
} catch (Exception e) {
_log.error("Ocorreu um erro ao descadastrar usuário.", e);
adicionarMensagemDeErro("Ocorreu um erro ao descadastrar usuário");
}
}
private boolean isLoggedIn() {
try {
Long userId = new Long(Long.toString(LiferayFacesContext.getInstance().getUserId()));
if (userId == ID_USER_DEFAULT) {
return false;
}
} catch (Exception e) {
return false;
}
return true;
}
private void logout() throws IOException {
LiferayFacesContext.getInstance().getExternalContext().redirect(URL_LOGOUT);
}
private void deletaUsuario(User user) throws SystemException {
try {
UserLocalServiceUtil.deleteUser(user.getUserId());
} catch (PortalException e) {
adicionarMensagemDeErro("Erro ao descadastrar usuário");
_log.error("Erro ao deletar usuário.", e);
}
}
public void voltarParaHome() {
try {
LiferayFacesContext.getInstance().getExternalContext().redirect(URL_HOME);
} catch (IOException e) {
_log.error("Ocorreu um erro ao redirecionar para home page.", e);
}
}
private void adicionarMensagemDeErro(String mensagem) {
LiferayFacesContext.getInstance().addGlobalErrorMessage(mensagem);
}
private void adicionarMensagemDeSucesso(String mensagem) {
LiferayFacesContext.getInstance().addGlobalInfoMessage(mensagem);
}
public String getCaptchaText() {
return captchaText;
}
public void setCaptchaText(String captchaText) {
this.captchaText = captchaText;
}
public Boolean getMostrarConfirmacao() {
return mostrarConfirmacao;
}
public void setMostrarConfirmacao(Boolean mostrarConfirmacao) {
this.mostrarConfirmacao = mostrarConfirmacao;
}
public Boolean getMostrarMensagemLogout() {
return mostrarMensagemLogout;
}
public void setMostrarMensagemLogout(Boolean mostrarMensagemLogout) {
this.mostrarMensagemLogout = mostrarMensagemLogout;
}
public String getNomeUsuario() {
return nomeUsuario;
}
public String getTicketKey() {
return ticketKey;
}
public void setTicketKey(String ticketKey) {
this.ticketKey = ticketKey;
}
public String getEmail() {
return email;
}
public void setNomeUsuario(String nomeUsuario) {
this.nomeUsuario = nomeUsuario;
}
public void setEmail(String email) {
this.email = email;
}
public String getParamUserId() {
return paramUserId;
}
public void setParamUserId(String userId) {
this.paramUserId = userId;
}
public boolean isUsuarioCadastrado() {
return usuarioCadastrado;
}
public boolean isEmailEnviadoParaUsuario() {
return emailEnviadoParaUsuario;
}
}