/branches/v3/impl/conf/language/MessageResources.properties |
---|
427,7 → 427,9 |
questionario.email.from.person=Por favor preencha a pessoa ou a entidade ou orgão que quer que apareça como remetente |
questionario.email.message=Por favor preencha uma mensagem |
questionario.send.message.top.nav=Envio de Mensagem de Correio Eletronico aos Inquiridos |
#Cursos |
/branches/v3/impl/conf/WEB-INF/struts/tiles-pae-questionarios.xml |
---|
39,6 → 39,13 |
</definition> |
<definition name="page.pae.questionario.pedagogico.message" extends="page.pae.separators.home"> |
<put name="separator" value="1" type="string"/> |
<put name="topnav" value="/user/questionarios/pedagogicoEstudante/topnavQuestionarioPedagogicoSendMessage.jsp"/> |
<put name="body" value="/user/questionarios/pedagogicoEstudante/sendMessageQuestionarioRequisitados.jsp"/> |
</definition> |
<!-- Modulo do Pedagogico Estudantes --> |
<definition name="page.pae.questionario.courses.selection" extends="page.pae.separators.home"> |
<put name="separator" value="1" type="string"/> |
/branches/v3/impl/conf/WEB-INF/struts/struts-pae-questionarios.xml |
---|
10,6 → 10,7 |
<form-beans> |
<form-bean type="pt.estgp.estgweb.web.form.questionarios.QuestionarioForm" name="QuestionarioForm"/> |
<form-bean type="pt.estgp.estgweb.web.form.questionarios.QuestionarioRespostaForm" name="QuestionarioRespostaForm"/> |
<form-bean type="pt.estgp.estgweb.web.form.questionarios.QuestionarioMessage" name="QuestionarioMessage"/> |
</form-beans> |
<global-exceptions> |
89,6 → 90,31 |
<forward name="success" path="page.pae.separators.home"/> |
</action> |
<action path="/user/startQuestionariosPaeMessagePedagogico" forward="page.pae.questionario.pedagogico.message"/> |
<!--<action path="/user/startQuestionariosPaeMessageXPTO" forward="page.pae.questionario.XPTO.message"/>--> |
<action path="/user/questionariosPaeMessagePedagogico" |
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioController" |
name="QuestionarioMessage" |
scope="request" |
parameter="dispatch" |
validate="true" |
input="page.pae.questionario.pedagogico.message"> |
<forward name="success" path="page.pae.questionario.see"/> |
<forward name="seeAll" path="page.pae.see.questionarios"/> |
</action> |
<!--Outros no futuro |
<action path="/user/questionariosPaeMessageXpto" |
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioController" |
name="QuestionarioMessage" |
scope="request" |
parameter="dispatch" |
validate="true" |
input="page.pae.questionario.XPTO.message"> |
<forward name="success" path="page.pae.questionario.see.XPTO"/> |
</action> |
--> |
<!--%%%%%%%%%%%%%%%% Pedagogico Alunos Modulo %%%%%%%%%%%%%%%%%%%--> |
<action path="/user/questionarioPedagogicoStartChooseCourses" forward="page.pae.questionario.courses.selection"/> |
<action path="/user/questionarioPedagogicoStartCheckCourses" forward="page.pae.questionario.courses.check"/> |
/branches/v3/impl/conf/app.properties |
---|
17,9 → 17,11 |
user.session.timeout.minutes=60 |
site.url=@site.url@ |
#USAR APENAS ESTES DOIS EMAILS NAO DA PARA MAIS |
admin.email=ci@estgp.pt |
admin.email.2=jmachado@estgp.pt |
admin.email=@admin.email.1@ |
admin.email.2=@admin.email.2@ |
email.local.suffix.1=estgp.pt |
email.local.suffix.2=esae.pt |
28,14 → 30,19 |
email.local.suffix=estgp.pt |
email.server=smtp.gmail.com |
email.server=@email.server@ |
##If RoundRobin is false will use email.from property in from address |
email.use.round.robin=@email.use.round.robin@ |
email.use.security=@email.use.security@ |
#to use example: bacodev1@estgp.pt bacodev2@estgp.pt |
email.user.prefix=bacodev |
email.user.sufix=@estgp.pt |
email.user.count=10 |
email.user.prefix=@email.user.prefix@ |
email.user.sufix=@email.user.sufix@ |
email.user.count=20 |
email.user=bacodev@estgp.pt |
email.password=@email.password@ |
email.from=bacodev@estgp.pt |
email.from=@email.from@ |
email.templates.dir=@email.templates.dir@ |
#email.server.security= |
#email.server.security=SSL |
699,8 → 706,8 |
system.redirections.policy.index.welcome=@system.redirections.policy.index.welcome@ |
system.redirections.policy.authentication.action=@system.redirections.policy.authentication.action@ |
system.redirections.policy.authentication.logout.action=@system.redirections.policy.authentication.logout.action@ |
system.mail.standard.certificated.home.page=@system.mail.standard.certificated.home.page@ |
###AQUI PODEMOS USAR OU TRA INTRANET OU OUTRO PORTAL PUBLICO |
system.intranet.url=@system.intranet.url@ |
system.public.url=@system.public.url@ |
/branches/v3/impl/conf/template/email/message_ipp_pt_certificated.txt |
---|
New file |
0,0 → 1,28 |
|
<html> |
<head> |
<title>{1}</title> |
</head> |
<body> |
<p>Olá <b>@USER_NOME@</b></p> |
<p><i>Mensagem de:</i> {0}</p> |
<p><i>Assunto:</i> <b><u>{1}</u></b></p> |
{2} |
<hr/> |
<p>Informação Automática PAE:</p> |
<p><i>@USER_NOME@</i>, pode responder a esta solicitação acedendo directamente à sua conta no sistema PAE através do seguinte endereço: </a> |
<a href="@URL@">@URL@</a> |
<p>Se pretender contactar a entidade que lhe enviou a mensagem, use por favor o seguinte endereço de email: {3}</p> |
--------------------------------------------- |
<p>Instituto Politécnico de Portalegre - Sistema PAE</p> |
<p><a href="http://pae.ipportalegre.pt">http://pae.ipportalegre.pt</a></p> |
</body> |
</html> |
/branches/v3/impl/conf/template/email/message_ipp_pt.txt |
---|
9,13 → 9,13 |
<p><i>Mensagem de:</i> {0}</p> |
<p><i>Assunto:</i> <b><u>{1}</u></b></p> |
{2} |
<p>Cumprimentos</p> |
<p>{0}</p> |
<hr/> |
<p>Se pretender responder, use o email: {3}</p> |
--------------------------------------------- |
<p>Instituto Politécnico de Portalegre - Sistema PAE</p> |
/branches/v3/impl/conf/berserk/sd.xml |
---|
2828,6 → 2828,19 |
</filterChains> |
</service> |
<service> |
<name>QuestionarioSendMessageAllProcessing</name> |
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>sendMessageAllProcessing</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
<chain name="AdminsOrQuestionarioAdminsOrPedagogico"/> |
</filterChains> |
</service> |
<service> |
<name>SalvarFicheiro</name> |
/branches/v3/impl/src/java/jomm/web/utils/NavPlace.java |
---|
149,7 → 149,7 |
} |
catch(Exception e) |
{ |
logger.error(e,e); |
logger.info("Message " + msg + " does not exist in MessageProperties will use key"); |
} |
if(msg == null) |
return key; |
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/EmailPersonalizedCertificated.java |
---|
New file |
0,0 → 1,131 |
package pt.estgp.estgweb.utils; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import javax.mail.Message; |
import java.io.Serializable; |
import java.util.ArrayList; |
import java.util.List; |
/** |
* @author Jorge Machado |
* @date 20/Mar/2008 |
* @time 18:32:21 |
* @see pt.estgp.estgweb.utils |
*/ |
public class EmailPersonalizedCertificated extends Email implements Serializable |
{ |
private static final Logger logger = Logger.getLogger(EmailPersonalizedCertificated.class); |
/**FIELDS FOR PERSONALIZED EMAILS**/ |
private String urlPatternWithoutCetificate = null; |
private List<Long> userIds = null; |
public EmailPersonalizedCertificated cloneEmailForJob(){ |
EmailPersonalizedCertificated email = new EmailPersonalizedCertificated(subject, from, emailTemplateName, arguments); |
email = (EmailPersonalizedCertificated) super.cloneEmailForJob(email); |
email.urlPatternWithoutCetificate = this.urlPatternWithoutCetificate; |
if(this.userIds != null) |
{ |
email.userIds = new ArrayList<Long>(); |
email.userIds.addAll(this.userIds); |
} |
return email; |
} |
public EmailPersonalizedCertificated() |
{ |
} |
public EmailPersonalizedCertificated(String urlPatternWithoutCetificate, |
List<Long> userIds) |
{ |
this.urlPatternWithoutCetificate = urlPatternWithoutCetificate; |
this.userIds = filterUserIds(userIds); |
} |
public EmailPersonalizedCertificated(String subject, String from, String mailTemplateName, List<String> arguments) |
{ |
super( subject, new ArrayList<String>(), from, mailTemplateName, arguments, Message.RecipientType.TO); |
} |
public EmailPersonalizedCertificated(String subject, String from, String mailTemplateName, List<String> arguments, |
String urlPatternWithoutCetificate, |
List<Long> userIds) |
{ |
super( subject, new ArrayList<String>(), from, mailTemplateName, arguments, Message.RecipientType.TO); |
this.urlPatternWithoutCetificate = urlPatternWithoutCetificate; |
this.userIds = filterUserIds(userIds); |
} |
public boolean isSystemAssumingTestEmail() { |
return systemAssumingTestEmail; |
} |
public String getFromName() { |
return fromName; |
} |
public void setFromName(String fromName) { |
this.fromName = fromName; |
} |
public String getSubject() |
{ |
return subject; |
} |
public List<String> getRecipients() |
{ |
return recipients; |
} |
public void setRecipients(List<String> recipients) |
{ |
systemAssumingTestEmail = true;//ja nao estao sobre |
this.recipients = filterRecipients(recipients); |
} |
public String getUrlPatternWithoutCetificate() { |
return urlPatternWithoutCetificate; |
} |
public void setUrlPatternWithoutCetificate(String urlPatternWithoutCetificate) { |
this.urlPatternWithoutCetificate = urlPatternWithoutCetificate; |
} |
public List<Long> getUserIds() { |
return userIds; |
} |
public void setUserIds(List<Long> userIds) { |
this.userIds = filterUserIds(userIds); |
} |
/** |
* Garante que os users Idss não são usados em testes |
* @return |
*/ |
protected List<Long> filterUserIds(List<Long> userIds) |
{ |
if(Globals.TEST_ENVIRONEMENT) |
{ |
userIds = new ArrayList<Long>(); |
userIds.add(new Long(1));//Adding super user |
} |
return userIds; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/Email.java |
---|
1,20 → 1,16 |
package pt.estgp.estgweb.utils; |
import jomm.utils.TemplateUtils; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.services.email.SendEmailService; |
import javax.mail.*; |
import javax.mail.internet.MimeMessage; |
import javax.mail.internet.InternetAddress; |
import java.util.Properties; |
import javax.mail.Message; |
import java.io.Serializable; |
import java.util.ArrayList; |
import java.util.List; |
import java.util.ArrayList; |
import java.util.regex.Matcher; |
import java.util.regex.Pattern; |
import java.util.regex.Matcher; |
import java.text.MessageFormat; |
import java.io.Serializable; |
import pt.estgp.estgweb.Globals; |
/** |
* @author Jorge Machado |
* @date 20/Mar/2008 |
25,16 → 21,42 |
{ |
private boolean isHtml = false; |
private String subject; |
private List<String> recipients; |
private Message.RecipientType type = Message.RecipientType.TO; |
private String from; |
private String emailTemplateName; |
private List<String> arguments; |
private String fromName = null; |
private static final Logger logger = Logger.getLogger(Email.class); |
protected boolean systemAssumingTestEmail = false; |
protected boolean isHtml = false; |
protected String subject; |
protected List<String> recipients; |
protected List<String> recipientsCC = null; |
protected Message.RecipientType type = Message.RecipientType.TO; |
protected String from; |
protected String emailTemplateName; |
protected List<String> arguments; |
protected String fromName = null; |
public Email cloneEmailForJob(){ |
Email email = new Email(subject,recipients,from,emailTemplateName,arguments,type); |
return cloneEmailForJob(email); |
} |
public Email cloneEmailForJob(Email email){ |
email.systemAssumingTestEmail = this.systemAssumingTestEmail; |
email.isHtml = this.isHtml; |
email.subject = this.subject; |
email.recipients = this.recipients; |
email.type = this.type; |
email.from = this.from; |
email.emailTemplateName = this.emailTemplateName; |
email.arguments = this.arguments; |
email.fromName = this.fromName; |
return email; |
} |
public boolean isHtml() { |
return isHtml; |
} |
43,10 → 65,13 |
isHtml = html; |
} |
public Email() { |
} |
public Email(String subject, List<String> recipients, String from, String mailTemplateName, List<String> arguments) |
{ |
this.subject = subject; |
this.recipients = recipients; |
this.recipients = filterRecipients(recipients, arguments, mailTemplateName);; |
this.from = from; |
this.emailTemplateName = mailTemplateName; |
this.arguments = arguments; |
56,12 → 81,48 |
{ |
this.type = type; |
this.subject = subject; |
this.recipients = recipients; |
this.recipients = filterRecipients(recipients, arguments, mailTemplateName); |
this.from = from; |
this.emailTemplateName = mailTemplateName; |
this.arguments = arguments; |
} |
protected List<String> filterRecipients(List<String> recipients,List<String> arguments,String template) |
{ |
if(Globals.TEST_ENVIRONEMENT) |
{ |
systemAssumingTestEmail = true; |
logger.info("SISTEMA EM MODO DE TESTES, iria enviar email para os seguintes recipientes:"); |
System.out.println(recipients); |
logger.info("Mensagem que ia ser enviada:"); |
logger.info(SendEmailService.getEmailTextMessage(template, arguments)); |
logger.info("SISTEMA EM MODO DE TESTES: Vai enviar apenas para o mail de testes"); |
recipients = new ArrayList<String>(); |
recipients.add(Globals.ADMIN_EMAIL); |
} |
return recipients; |
} |
protected List<String> filterRecipients(List<String> recipients) |
{ |
if(Globals.TEST_ENVIRONEMENT) |
{ |
systemAssumingTestEmail = true; |
logger.info("SISTEMA EM MODO DE TESTES, iria enviar email para os seguintes recipientes:"); |
System.out.println(recipients); |
logger.info("Nao se sabe a Mensagem que ia ser enviada"); |
logger.info("SISTEMA EM MODO DE TESTES: Vai enviar apenas para o mail de testes"); |
recipients = new ArrayList<String>(); |
recipients.add(Globals.ADMIN_EMAIL); |
} |
return recipients; |
} |
public boolean isSystemAssumingTestEmail() { |
return systemAssumingTestEmail; |
} |
public String getFromName() { |
return fromName; |
} |
82,7 → 143,9 |
public void setRecipients(List<String> recipients) |
{ |
this.recipients = recipients; |
systemAssumingTestEmail = true;//ja nao estao sobre |
this.recipients = filterRecipients(recipients); |
} |
public String getFrom() |
132,6 → 195,17 |
public void setType(Message.RecipientType type) |
{ |
this.type = type; |
//TODO WHEN BACK TO BCC REMOVE this |
this.type = Message.RecipientType.TO; |
//this.type = type; |
} |
public List<String> getRecipientsCC() { |
return recipientsCC; |
} |
public void setRecipientsCC(List<String> recipientsCC) { |
this.recipientsCC = recipientsCC; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/Globals.java |
---|
125,7 → 125,7 |
public static final String TMP_DIR = ConfigProperties.getProperty("tmp.dir"); |
public static final String DATA_DIR = ConfigProperties.getProperty("data.dir"); |
public static final String JOB_SERVICES_LOG_DIR = ConfigProperties.getProperty("data.dir") + java.io.File.separator + "jobslogs"; |
; |
public static final String EMAIL_SERVER_HOST = ConfigProperties.getProperty("email.server"); |
public static final String EMAIL_SERVER_SECURITY = ConfigProperties.getProperty("email.server.security"); |
public static final int EMAIL_SERVER_SECURITY_TLS = ConfigProperties.getIntProperty("email.server.security.tls"); |
138,7 → 138,17 |
public static final String EMAIL_SERVER_USERNAME = ConfigProperties.getProperty("email.user"); |
public static final String EMAIL_SERVER_PASSWORD = ConfigProperties.getProperty("email.password"); |
public static final String ADMIN_EMAIL = ConfigProperties.getProperty("admin.email"); |
public static final String ADMIN_EMAIL_2 = ConfigProperties.getProperty("admin.email.2"); |
public static final boolean SYSTEM_EMAIL_USE_SECURITY = ConfigProperties.getBooleanProperty("email.use.security"); |
public static final boolean SYSTEM_EMAIL_USE_ROUND_ROBIN = ConfigProperties.getBooleanProperty("email.use.round.robin"); |
public static final String SYSTEM_EMAIL_BOX = ConfigProperties.getProperty("email.from"); |
public static final String ANNOUNCEMENT_TYPE_NEWS = "news"; |
public static final String ANNOUNCEMENT_TYPE_TOP_FLASH_NEWS = "top.flash.news"; |
public static final String ANNOUNCEMENT_TYPE_BOTTOM_FLASH_NEWS = "bottom.flash.news"; |
361,6 → 371,7 |
public static final String EMAIL_MESSAGE_TEMPLATE_PT = "message_pt.txt"; |
public static final String EMAIL_MESSAGE_IPP_TEMPLATE_PT_CERTIFICATED = "message_ipp_pt_certificated.txt"; |
public static final String EMAIL_MESSAGE_IPP_TEMPLATE_PT = "message_ipp_pt.txt"; |
public static final String EMAIL_COURSEUNIT_WORK_SUBJECT_PT = ConfigProperties.getProperty("email.courseunit.work.subject.pt"); |
434,6 → 445,7 |
public static final String ROLE_INVITED = "invited"; |
public static final String SYSTEM_EMAIL_CERTIFICATED_HOME_PAGE = ConfigProperties.getProperty("system.mail.standard.certificated.home.page"); |
public static final String SYSTEM_THEME = ConfigProperties.getProperty("system.theme"); |
public static final String AUTHENTICATE_SERVICE = ConfigProperties.getProperty("authentication.policy.service"); |
public static final String AUTHENTICATE_SERVICE_USERNAME_KEY = ConfigProperties.getProperty("authentication.policy.username.msg.key"); |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/impl/EmailTransport.java |
---|
New file |
0,0 → 1,135 |
package pt.estgp.estgweb.services.email.impl; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import javax.mail.MessagingException; |
import javax.mail.PasswordAuthentication; |
import javax.mail.Session; |
import javax.mail.Transport; |
import java.util.Properties; |
/** |
* Created by jorgemachado on 13/06/16. |
*/ |
public class EmailTransport |
{ |
private static final Logger logger = Logger.getLogger(EmailTransport.class); |
Session session = null; |
Transport transport = null; |
String sendFromAddress; |
String password; |
String identifier; |
public EmailTransport(String identifier, String sendFromAddress,String password) |
{ |
this.identifier = identifier; |
this.sendFromAddress = sendFromAddress; |
this.password = password; |
} |
public synchronized Transport getEmailTransport() |
{ |
if(session == null || transport == null || !transport.isConnected()) |
{ |
logger.info("Transport(" + identifier + ") CONNECTION TO TRANSPORT DOES NOT EXIST OR FAIL WILL REOPEN : " + sendFromAddress + " password: " + password); |
} |
else |
{ |
System.out.println("Transport(" + identifier + ") OK --> RETURNING Transport"); |
return transport; |
} |
// Set up properties for mail session |
//Properties props = System.getProperties(); |
Properties props = new Properties(); |
props.put("mail.smtp.host", Globals.EMAIL_SERVER_HOST); |
props.setProperty("mail.transport.protocol", "smtp");//todo new |
javax.mail.Authenticator authenticator = null; |
if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("TLS")==0) |
{ |
logger.info("Transport(" + identifier + ") Using Email Security TLS"); |
props.put("mail.smtp.auth", "true"); |
props.put("mail.smtp.starttls.enable", "true"); |
props.put("mail.smtp.port", ""+ Globals.EMAIL_SERVER_SECURITY_TLS); |
authenticator = new javax.mail.Authenticator() { |
protected PasswordAuthentication getPasswordAuthentication() { |
System.out.println("Email from:" + sendFromAddress + " pass:" + password); |
return new PasswordAuthentication(sendFromAddress, password); |
} |
}; |
} |
else if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("SSL")==0) |
{ |
logger.info("Transport(" + identifier + ") Using Email Security SSL"); |
props.put("mail.smtp.socketFactory.port", Globals.EMAIL_SERVER_SECURITY_SSL); |
props.put("mail.smtp.socketFactory.class", |
"javax.net.ssl.SSLSocketFactory"); |
props.put("mail.smtp.auth", "true"); |
props.put("mail.smtp.port", Globals.EMAIL_SERVER_SECURITY_SSL); |
authenticator = new javax.mail.Authenticator() { |
protected PasswordAuthentication getPasswordAuthentication() { |
System.out.println("Email from:" + sendFromAddress + " pass:" + password); |
return new PasswordAuthentication(sendFromAddress,password); |
} |
}; |
} |
else |
{ |
} |
System.out.println("Transport(" + identifier + ") Autenticator != null :" + (authenticator != null)); |
// Get session |
/*Session session = authenticator != null ? |
Session.getDefaultInstance(props, authenticator) |
: Session.getDefaultInstance(props) ; |
*/ |
session = authenticator != null ? |
Session.getInstance(props, authenticator) |
: Session.getInstance(props) ; |
try { |
transport = session.getTransport("smtp"); |
System.out.println("Transport(" + identifier + ") before connect isConnected:" + transport.isConnected()); |
transport.connect(); |
System.out.println("Transport(" + identifier + ") after connect isConnected:" + transport.isConnected()); |
} catch (MessagingException e) { |
logger.error(e,e); |
return null; |
} |
session.setDebug(true); |
session.setDebugOut(System.out); |
return transport; |
} |
public String getIdentifier() { |
return identifier; |
} |
public Session getSession() { |
return session; |
} |
public Transport getTransport() { |
return transport; |
} |
public String getSendFromAddress() { |
return sendFromAddress; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/impl/EmailTransportPool.java |
---|
New file |
0,0 → 1,89 |
package pt.estgp.estgweb.services.email.impl; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import javax.mail.Transport; |
import java.util.ArrayList; |
import java.util.List; |
/** |
* Created by jorgemachado on 13/06/16. |
*/ |
public class EmailTransportPool |
{ |
private static final Logger logger = Logger.getLogger(EmailTransportPool.class); |
private List<EmailTransport> pool = new ArrayList<EmailTransport>(); |
//SINGLETON INSTANCE |
static EmailTransportPool instance = new EmailTransportPool(); |
public static EmailTransportPool getInstance(){ |
return instance; |
} |
String[] serverEmails; |
private EmailTransportPool() |
{ |
serverEmails = new String[Globals.EMAIL_SERVER_USER_COUNT]; |
for(int i = 1;i<= Globals.EMAIL_SERVER_USER_COUNT;i++) |
{ |
serverEmails[i-1] = Globals.EMAIL_SERVER_USER_PREFIX + i + Globals.EMAIL_SERVER_USER_SUFIX; |
} |
if(Globals.SYSTEM_EMAIL_USE_ROUND_ROBIN) |
{ |
for(String emailFrom: serverEmails) |
{ |
String pass = Globals.EMAIL_SERVER_PASSWORD; |
logger.info("POOL: Adding to POOL " + emailFrom + " with pass: " + pass); |
createTransport(emailFrom,emailFrom,pass); |
} |
} |
else |
{ |
logger.info("POOL: Will use only system mail box"); |
createTransport(Globals.SYSTEM_EMAIL_BOX,Globals.SYSTEM_EMAIL_BOX,Globals.EMAIL_SERVER_PASSWORD); |
} |
} |
private void createTransport(String identifier, String emailFrom, String emailServerPassword) |
{ |
EmailTransport emailTransport = new EmailTransport(identifier,emailFrom,emailServerPassword); |
pool.add(emailTransport); |
} |
int indexPool = -1; |
public synchronized EmailTransport getAvailableTransportFromPool() |
{ |
int tries = pool.size(); |
while(tries > 0) |
{ |
tries--; |
indexPool++; |
if(indexPool >= pool.size()) |
indexPool = 0; |
EmailTransport emailTransport = pool.get(indexPool); |
Transport transport = emailTransport.getEmailTransport(); |
if(transport.isConnected()) |
{ |
logger.warn("EMAIL POOL: Transport (" + emailTransport.getIdentifier() + ") is OK connected, will return this one"); |
return emailTransport; |
} |
else |
{ |
logger.warn("EMAIL POOL: Transport (" + emailTransport.getIdentifier() + ") is not connected, will try another"); |
} |
} |
logger.warn("EMAIL POOL: Transport (There are no available transports)"); |
return null; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/EMAILJob.java |
---|
33,50 → 33,66 |
//TODO WHEN BACK TO BCC REMOVE this to 20 and remove Thread |
private static final int NUMBER_EMAILS_TO = 1; |
private static final int pauseTime = 1000; |
public void runJob() |
{ |
if(Globals.TEST_ENVIRONEMENT) |
{ |
String warn = "System in TEST Environement - will not send EMAIL"; |
logger.warn(warn); |
return; |
} |
try |
{ |
List<String> recipientsOriginal = new ArrayList<String>(); |
List<String> recipients = new ArrayList<String>(); |
recipients.addAll(email.getRecipients()); |
recipientsOriginal.addAll(email.getRecipients()); |
while(recipients.size() > 0) |
{ |
List<String> recipientsToSend = new ArrayList<String>(); |
final Email cloned = email.cloneEmailForJob(); |
logger.info("Opening new Thread to send emails"); |
new Thread( |
new Runnable() { |
@Override |
public void run() { |
if(Globals.TEST_ENVIRONEMENT && !cloned.isSystemAssumingTestEmail()) |
{ |
String warn = "System in TEST Environement - will not send EMAIL"; |
logger.warn(warn); |
return; |
} |
try |
{ |
List<String> recipientsOriginal = new ArrayList<String>(); |
List<String> recipients = new ArrayList<String>(); |
recipients.addAll(cloned.getRecipients()); |
recipientsOriginal.addAll(cloned.getRecipients()); |
while(recipients.size() > 0) |
{ |
List<String> recipientsToSend = new ArrayList<String>(); |
int contador = 0; |
Iterator<String> iter = recipients.iterator(); |
while(iter.hasNext() && contador < 20) |
{ |
recipientsToSend.add(iter.next()); |
iter.remove(); |
contador++; |
int contador = 0; |
Iterator<String> iter = recipients.iterator(); |
while(iter.hasNext() && contador < NUMBER_EMAILS_TO) |
{ |
recipientsToSend.add(iter.next()); |
iter.remove(); |
contador++; |
} |
cloned.setRecipients(recipientsToSend); |
new SendEmailService().sendEmail(cloned); |
try { |
Thread.sleep(pauseTime); |
} catch (InterruptedException e) { |
logger.error(e,e); |
} |
} |
try { |
Thread.sleep(1000); |
} catch (InterruptedException e) { |
logger.error(e,e); |
} |
cloned.setRecipients(recipientsOriginal); |
} |
catch (ServiceException e) |
{ |
logger.error("Sending EMAIL:" + e.toString(),e); |
} |
} |
} |
email.setRecipients(recipientsToSend); |
new SendEmailService().sendEmail(email); |
try { |
Thread.sleep(1000); |
} catch (InterruptedException e) { |
logger.error(e,e); |
} |
} |
try { |
Thread.sleep(1000); |
} catch (InterruptedException e) { |
logger.error(e,e); |
} |
email.setRecipients(recipientsOriginal); |
} |
catch (ServiceException e) |
{ |
logger.error("Sending EMAIL:" + e.toString(),e); |
} |
).start(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/SendEmailService.java |
---|
5,13 → 5,17 |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.enums.LangEnum; |
import pt.estgp.estgweb.services.email.impl.EmailTransport; |
import pt.estgp.estgweb.services.email.impl.EmailTransportPool; |
import pt.estgp.estgweb.services.expceptions.ServiceException; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.utils.Email; |
import pt.estgp.estgweb.utils.EmailPersonalizedCertificated; |
import pt.estgp.estgweb.web.utils.DatesUtils; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import javax.mail.*; |
import javax.mail.Message; |
import javax.mail.MessagingException; |
import javax.mail.internet.InternetAddress; |
import javax.mail.internet.MimeMessage; |
import java.io.UnsupportedEncodingException; |
19,7 → 23,6 |
import java.util.ArrayList; |
import java.util.Date; |
import java.util.List; |
import java.util.Properties; |
/** |
* @author Jorge Machado |
33,16 → 36,123 |
private static final String gradeUnitTemplate = Globals.TEMPLATE_EMAIL_PATH + "/" + Globals.EMAIL_GRADE_UNIT_TEMPLATE; |
static String[] serverEmails; |
/*static String sendFromAddress;*/ |
public SendEmailService() { |
} |
/*static String[] serverEmails; |
static int serverEmailPos = -1; |
static Session session = null; |
static Transport transport = null; |
static{ |
static |
{ |
serverEmails = new String[Globals.EMAIL_SERVER_USER_COUNT]; |
for(int i = 1;i<= Globals.EMAIL_SERVER_USER_COUNT;i++) |
{ |
serverEmails[i-1] = Globals.EMAIL_SERVER_USER_PREFIX + i + Globals.EMAIL_SERVER_USER_SUFIX; |
} |
} |
public static synchronized Transport getEmailTransport() |
{ |
if(session == null || transport == null || !transport.isConnected()) |
{ |
sendFromAddress = Globals.SYSTEM_EMAIL_USE_ROUND_ROBIN ? |
getRoundRobinEmailUser() : Globals.SYSTEM_EMAIL_BOX; |
logger.info("CONNECTION TO TRANSPORT FAIL WILL REOPEN : " + sendFromAddress + " using round robin: " + Globals.SYSTEM_EMAIL_USE_ROUND_ROBIN); |
} |
else |
{ |
System.out.println("TRANSPORT OK RETURNING"); |
return transport; |
} |
// Set up properties for mail session |
//Properties props = System.getProperties(); |
Properties props = new Properties(); |
props.put("mail.smtp.host", Globals.EMAIL_SERVER_HOST); |
props.setProperty("mail.transport.protocol", "smtp");//todo new |
final String username = Globals.EMAIL_SERVER_USERNAME; |
final String password = Globals.EMAIL_SERVER_PASSWORD; |
javax.mail.Authenticator authenticator = null; |
if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("TLS")==0) |
{ |
logger.info("Using Email Security TLS"); |
props.put("mail.smtp.auth", "true"); |
props.put("mail.smtp.starttls.enable", "true"); |
props.put("mail.smtp.port", ""+ Globals.EMAIL_SERVER_SECURITY_TLS); |
authenticator = new javax.mail.Authenticator() { |
protected PasswordAuthentication getPasswordAuthentication() { |
System.out.println("Email from:" + sendFromAddress + " pass:" + password); |
return new PasswordAuthentication(sendFromAddress, password); |
} |
}; |
} |
else if(Globals.SYSTEM_EMAIL_USE_SECURITY && Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("SSL")==0) |
{ |
logger.info("Using Email Security SSL"); |
props.put("mail.smtp.socketFactory.port", Globals.EMAIL_SERVER_SECURITY_SSL); |
props.put("mail.smtp.socketFactory.class", |
"javax.net.ssl.SSLSocketFactory"); |
props.put("mail.smtp.auth", "true"); |
props.put("mail.smtp.port", Globals.EMAIL_SERVER_SECURITY_SSL); |
authenticator = new javax.mail.Authenticator() { |
protected PasswordAuthentication getPasswordAuthentication() { |
System.out.println("Email from:" + sendFromAddress + " pass:" + password); |
return new PasswordAuthentication(sendFromAddress,password); |
} |
}; |
} |
else |
{ |
} |
System.out.println("Autenticator != null :" + (authenticator != null)); |
// Get session |
//Session session = authenticator != null ? |
// Session.getDefaultInstance(props, authenticator) |
// : Session.getDefaultInstance(props) ; |
session = authenticator != null ? |
Session.getInstance(props, authenticator) |
: Session.getInstance(props) ; |
try { |
System.out.println("toString:" + session.getTransport("smtp").toString()); |
transport = session.getTransport("smtp"); |
System.out.println("before connect isConnected:" + transport.isConnected()); |
transport.connect(); |
System.out.println("after connect isConnected:" + transport.isConnected()); |
} catch (MessagingException e) { |
logger.error(e,e); |
return null; |
} |
session.setDebug(true); |
session.setDebugOut(System.out); |
return transport; |
} |
private static synchronized String getRoundRobinEmailUser() |
{ |
serverEmailPos++; |
52,64 → 162,31 |
} |
return serverEmails[serverEmailPos]; |
} |
*/ |
public void sendEmail(Email email) throws ServiceException |
{ |
if(Globals.TEST_ENVIRONEMENT) |
sendEmail(email,null,null); |
} |
public void sendEmail(Email email,String url,String nome) throws ServiceException |
{ |
if(Globals.TEST_ENVIRONEMENT && !email.isSystemAssumingTestEmail()) |
{ |
String warn = "System in TEST Environement - will not send EMAIL"; |
logger.warn(warn); |
return; |
} |
try{ |
final String sendFromAddress = getRoundRobinEmailUser(); |
// Set up properties for mail session |
Properties props = System.getProperties(); |
props.put("mail.smtp.host", Globals.EMAIL_SERVER_HOST); |
final String username = Globals.EMAIL_SERVER_USERNAME; |
final String password = Globals.EMAIL_SERVER_PASSWORD; |
javax.mail.Authenticator authenticator = null; |
if(Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("TLS")==0) |
{ |
props.put("mail.smtp.auth", "true"); |
props.put("mail.smtp.starttls.enable", "true"); |
props.put("mail.smtp.port", ""+ Globals.EMAIL_SERVER_SECURITY_TLS); |
authenticator = new javax.mail.Authenticator() { |
protected PasswordAuthentication getPasswordAuthentication() { |
return new PasswordAuthentication(sendFromAddress, password); |
} |
}; |
} |
else if(Globals.EMAIL_SERVER_SECURITY != null && Globals.EMAIL_SERVER_SECURITY.compareTo("SSL")==0) |
{ |
props.put("mail.smtp.socketFactory.port", Globals.EMAIL_SERVER_SECURITY_SSL); |
props.put("mail.smtp.socketFactory.class", |
"javax.net.ssl.SSLSocketFactory"); |
props.put("mail.smtp.auth", "true"); |
props.put("mail.smtp.port", Globals.EMAIL_SERVER_SECURITY_SSL); |
authenticator = new javax.mail.Authenticator() { |
protected PasswordAuthentication getPasswordAuthentication() { |
return new PasswordAuthentication(sendFromAddress,password); |
} |
}; |
} |
else |
{ |
//Transport transport = getEmailTransport(); |
//MimeMessage message = new MimeMessage(session); |
} |
EmailTransport emailTransport = EmailTransportPool.getInstance().getAvailableTransportFromPool(); |
MimeMessage message = new MimeMessage(emailTransport.getSession()); |
// Get session |
Session session = Session.getDefaultInstance(props, authenticator); |
session.setDebug(true); |
session.setDebugOut(System.out); |
// Create message |
MimeMessage message = new MimeMessage(session); |
// Set the recipients of the message |
boolean valid = false; |
for (String recipient : email.getRecipients()) |
117,23 → 194,41 |
if(Email.validEmail(recipient)) |
{ |
valid=true; |
message.addRecipient(email.getType(),new InternetAddress(recipient)); |
logger.info("Adding recipient to transport:"+recipient); |
message.addRecipient(Message.RecipientType.TO,new InternetAddress(recipient)); |
logger.info("Adding recipient (" + email.getType().toString() + ") to transport:"+recipient); |
} |
} |
if(email.getRecipientsCC() != null) |
{ |
for (String recipient : email.getRecipientsCC()) |
{ |
if(Email.validEmail(recipient)) |
{ |
//valid=true; |
message.addRecipient(Message.RecipientType.CC,new InternetAddress(recipient)); |
logger.info("Adding recipient CC (" + email.getType().toString() + ") to transport:"+recipient); |
} |
} |
} |
if(valid) |
{ |
String content = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_EMAIL_PATH + "/" + email.getEmailTemplateName()); |
// Format the mail message |
String fullMessage = MessageFormat.format(content, email.getArguments().toArray()); |
String fullMessage = getEmailTextMessage(email); |
if(url != null && nome != null) |
{ |
logger.info("Requesting certificated Email, will replace fields in template"); |
fullMessage = fullMessage.replaceAll("@USER_NOME@",nome); |
fullMessage = fullMessage.replaceAll("@URL@",url); |
} |
logger.info("FROM:" + email.getFrom() + " but using: " + sendFromAddress); |
logger.info("FROM:" + email.getFrom() + " but using: " + emailTransport.getSendFromAddress()); |
//if(email.getFromName() != null) |
try { |
message.setFrom(new InternetAddress(sendFromAddress,sendFromAddress)); |
message.setFrom(new InternetAddress(emailTransport.getSendFromAddress(),emailTransport.getSendFromAddress())); |
} catch (UnsupportedEncodingException e) { |
logger.error(e,e); |
//message.setFrom(new InternetAddress(sendFromAddress)); |
171,7 → 266,9 |
Transport.send(message); |
emailTransport.getTransport().send(message); |
//session.getTransport("smtp").sendMessage(message,message.getAllRecipients()); |
//session.getTransport().close(); |
} |
} |
catch(MessagingException e) |
181,6 → 278,22 |
} |
} |
private static String getEmailTextMessage(Email email) |
{ |
return getEmailTextMessage( email.getEmailTemplateName(), email.getArguments().toArray()); |
} |
public static String getEmailTextMessage(String template,List<String> arguments) |
{ |
return getEmailTextMessage(template, arguments.toArray()); |
} |
public static String getEmailTextMessage(String template,Object[] arguments) |
{ |
String content = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_EMAIL_PATH + "/" +template); |
// Format the mail message |
return MessageFormat.format(content, arguments); |
} |
public Email getSendUrlToFriendEmail(String url, String from, LangEnum langEnum, List<String> recipients) |
{ |
List<String> arguments = new ArrayList<String>(); |
298,7 → 411,8 |
// # 0 : From |
// # 1 : Subject |
// # 2 : Text |
// # 2 : FromEmail Adultered in message |
// # 3 : FromEmail Adultered in message |
// # 4 : URL todo with certificate |
List<String> arguments = new ArrayList<String>(); |
arguments.add(from); |
arguments.add(subject); |
316,6 → 430,7 |
if(Email.validEmail(e)) |
recipients.add(e); |
} |
logger.info("subject: " + subject); |
if(fromEmail == null) |
logger.info("user: " + user.getEmail()); |
330,11 → 445,56 |
logger.info(rec); |
logger.info("arguments end"); |
fromEmail = fromEmail == null ? user.getEmail() : fromEmail; |
Email email = new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.BCC); |
Email email = new Email(subject ,recipients,fromEmail,template,arguments,Message.RecipientType.TO); |
email.setFromName(from + " (PAE-IPP)"); |
return email; |
} |
public EmailPersonalizedCertificated getMessageEmailAdulteredFromEmailIppCertificated( |
String fromEmail, String from, String subject,String text, User user, |
List<Long> userIds, |
String url |
) |
{ |
// # 0 : From |
// # 1 : Subject |
// # 2 : Text |
// # 3 : FromEmail Adultered in message |
// # 4 : URL todo with certificate |
List<String> arguments = new ArrayList<String>(); |
arguments.add(from); |
arguments.add(subject); |
arguments.add(text); |
arguments.add(fromEmail); |
String template; |
template = Globals.EMAIL_MESSAGE_IPP_TEMPLATE_PT_CERTIFICATED; |
logger.info("Preparing batch work for Personalized Emails Certificated"); |
logger.info("subject: " + subject); |
if(fromEmail == null) |
logger.info("user: " + user.getEmail()); |
else |
logger.info("user altered to: " + fromEmail); |
logger.info("template: " + template); |
logger.info("arguments:"); |
for(String arg: arguments) |
logger.info(arg); |
logger.info("userIds:" + userIds); |
logger.info("arguments end"); |
fromEmail = fromEmail == null ? user.getEmail() : fromEmail; |
EmailPersonalizedCertificated email = new EmailPersonalizedCertificated(subject ,fromEmail,template,arguments, |
url, |
userIds); |
email.setFromName(from + " (PAE-IPP)"); |
return email; |
} |
public Email getMessageEmailOld(String from, String subject,String text, LangEnum langEnum, String target, List<User> users, User user) |
{ |
// # 0 : From |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/Emails.bmp |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+ application/octet-stream |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/email/EMAILJobPersonalizedCertificated.java |
---|
New file |
0,0 → 1,139 |
package pt.estgp.estgweb.services.email; |
import jomm.dao.impl.AbstractDao; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.User; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.services.authenticate.AuthenticateService; |
import pt.estgp.estgweb.services.jobs.JobHandler; |
import pt.estgp.estgweb.utils.Email; |
import pt.estgp.estgweb.utils.EmailPersonalizedCertificated; |
import java.io.Serializable; |
import java.util.ArrayList; |
import java.util.List; |
/** |
* @author Jorge Machado |
* @date 11/Jul/2008 |
* @see pt.estgp.estgweb.services.sms |
*/ |
public class EMAILJobPersonalizedCertificated implements JobHandler, Serializable |
{ |
private static final Logger logger = Logger.getLogger(EMAILJobPersonalizedCertificated.class); |
private EmailPersonalizedCertificated email; |
public EMAILJobPersonalizedCertificated(EmailPersonalizedCertificated email) |
{ |
this.email = email; |
} |
private static final int pauseTime = 1000; |
public void runJob() |
{ |
final EmailPersonalizedCertificated cloned = email.cloneEmailForJob(); |
logger.info("Opening new Thread to send emails"); |
new Thread( |
new Runnable() { |
@Override |
public void run() { |
if(Globals.TEST_ENVIRONEMENT && !cloned.isSystemAssumingTestEmail()) |
{ |
String warn = "System in TEST Environement - will not send EMAIL"; |
logger.warn(warn); |
return; |
} |
try |
{ |
String URL_PREFIX = cloned.getUrlPatternWithoutCetificate(); |
if(URL_PREFIX.indexOf("?") < 0) |
URL_PREFIX = URL_PREFIX + "?certificate="; |
else |
URL_PREFIX = URL_PREFIX + "&certificate="; |
cloned.setRecipients(new ArrayList<String>()); |
SendEmailService sendEmailService = new SendEmailService(); |
for(long userId: cloned.getUserIds()) |
{ |
try{ |
AbstractDao.getCurrentSession().beginTransaction(); |
AbstractDao.getCurrentSession().clear(); |
User user = DaoFactory.getUserDaoImpl().load(userId); |
String certificate = new AuthenticateService().createCertificate(user); |
String emailStr = user.getEmail(); |
String outEmail = user.getOutEmail(); |
String preferrefEmail = user.getPreferrefEmail(); |
String toEmail = null; |
if(preferrefEmail != null && Email.validEmail(preferrefEmail)) |
toEmail = preferrefEmail; |
else if(emailStr != null && Email.validEmail(emailStr)) |
toEmail = emailStr; |
else if(outEmail != null && Email.validEmail(outEmail)) |
toEmail = outEmail; |
String nome = user.getName(); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
if(toEmail != null) |
{ |
List<String> ccEmails = new ArrayList<String>(); |
if(emailStr != null && Email.validEmail(emailStr) && !toEmail.equals(emailStr)) |
ccEmails.add(emailStr); |
if(outEmail != null && Email.validEmail(outEmail) && !toEmail.equals(outEmail)) |
ccEmails.add(outEmail); |
cloned.setRecipientsCC(ccEmails); |
cloned.getRecipients().clear(); |
cloned.getRecipients().add(toEmail); |
String finalUrl = URL_PREFIX + certificate; |
sendEmailService.sendEmail(cloned, finalUrl, nome); |
try { |
logger.info("Watting to send another email: sent to" + toEmail); |
//Thread.sleep(pauseTime); |
Thread.sleep(pauseTime); |
} catch (InterruptedException e) { |
logger.error(e,e); |
} |
} |
}catch(Throwable e) |
{ |
logger.error(e,e); |
} |
} |
logger.info("No more user ids to send email. exiting"); |
} |
catch (Throwable e) |
{ |
logger.error("Sending EMAIL:" + e.toString(),e); |
} |
} |
} |
).start(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportTeachersService.java |
---|
480,8 → 480,7 |
catch (Exception e) |
{ |
logger.error(e, e); |
List<String> emails = new ArrayList<String>(); |
emails.add(ConfigProperties.getProperty("admin.email")); |
List<String> emails = ConfigProperties.getListValues("admin.email"); |
List<String> arguments = new ArrayList<String>(); |
String cause = e.getCause() == null ? "" : e.getCause().toString(); |
arguments.add((e.toString() + "\n" + cause).replace("\n","<br/>")); |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/QuestionariosService.java |
---|
1,20 → 1,22 |
package pt.estgp.estgweb.services.questionarios; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.dao.impl.AnnouncementDaoImpl; |
import pt.estgp.estgweb.domain.views.QuestionarioView; |
import pt.estgp.estgweb.services.email.EMAILJob; |
import pt.estgp.estgweb.services.email.EMAILJobPersonalizedCertificated; |
import pt.estgp.estgweb.services.email.SendEmailService; |
import pt.estgp.estgweb.services.jobs.JobScheduleService; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.utils.Email; |
import pt.estgp.estgweb.utils.EmailPersonalizedCertificated; |
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.util.ArrayList; |
import java.util.Iterator; |
import java.util.List; |
import java.util.*; |
/** |
* Created by jorgemachado on 21/03/16. |
204,56 → 206,112 |
public int sendMessage(boolean onlyNotAnswered,Long id,String msg,String emailFrom,String personFrom, String subject,UserSession userSession) |
{ |
String source = "questionario message"; |
AnnouncementDaoImpl.FindUsersResult result = DaoFactory.getQuestionarioDaoImpl().findUsersEmails(id,onlyNotAnswered); |
AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIds(id, onlyNotAnswered); |
return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result); |
} |
private int sendEmails(Long id, String msg, String emailFrom, String personFrom, String subject, UserSession userSession, String source, AnnouncementDaoImpl.FindUsersResult result) { |
List<String> usersToConsume = result.emails; |
logger.info("Scheduling mail jobs to " + result.users + " users: " + usersToConsume.size() + " recipients"); |
while(usersToConsume.size() > 0) |
{ |
Iterator<String> iter = usersToConsume.iterator(); |
List<String> usersToJob = new ArrayList<String>(); |
int contador = 0; |
while(iter.hasNext() && contador < 20) |
{ |
usersToJob.add(iter.next()); |
iter.remove(); |
contador++; |
} |
Email e = sendEmailService.getMessageEmailAdulteredFromEmailIpp(emailFrom, |
personFrom, |
subject, |
msg, |
usersToJob, |
userSession.getUser()); |
e.setHtml(true); |
EMAILJob emailJob = new EMAILJob(e); |
JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id + ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject ,userSession); |
} |
return result.users; |
} |
public int sendMessageCursoAfeto(boolean onlyNotAnswered,Long id,String msg,String emailFrom,String personFrom, String subject,UserSession userSession) |
{ |
String source = "questionario curso message"; |
AnnouncementDaoImpl.FindUsersResult result = DaoFactory.getQuestionarioDaoImpl().findUsersEmailsPedagogico(onlyNotAnswered,id,0); |
AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIdsPedagogico(onlyNotAnswered, id, 0); |
return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result); |
} |
public int sendMessageUnidadeAfeta(boolean onlyNotAnswered,Long id,String msg,String emailFrom,String personFrom, String subject,UserSession userSession) |
{ |
String source = "questionario unidade message"; |
AnnouncementDaoImpl.FindUsersResult result = DaoFactory.getQuestionarioDaoImpl().findUsersEmailsPedagogico(onlyNotAnswered,0,id); |
AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIdsPedagogico(onlyNotAnswered, 0, id); |
return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result); |
} |
public int sendMessageAllProcessing(boolean onlyNotAnswered,String msg,String emailFrom,String personFrom, String subject,UserSession userSession) |
{ |
String source = "questionarios em processamento message"; |
AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIdsPedagogicoAllProcessing(onlyNotAnswered); |
return sendEmails(null, msg, emailFrom, personFrom, subject, userSession, source, result); |
} |
private int sendEmails(Long id, String msg, String emailFrom, String personFrom, String subject, UserSession userSession, String source, AnnouncementDaoImpl.FindUsersIdResult result) { |
List<Long> usersToConsume = result.userIds; |
logger.info("Scheduling mail jobs to " + result.users + " users: " + usersToConsume.size() + " recipients"); |
//while(usersToConsume.size() > 0) |
//{ |
// Iterator<String> iter = usersToConsume.iterator(); |
// List<String> usersToJob = new ArrayList<String>(); |
// int contador = 0; |
// while(iter.hasNext() && contador < 20) |
// { |
// usersToJob.add(iter.next()); |
// iter.remove(); |
// contador++; |
// } |
String suffix = Globals.SYSTEM_EMAIL_CERTIFICATED_HOME_PAGE; |
if(suffix.startsWith("/")) |
suffix = suffix.substring(1); |
String url = Globals.SITE_URL.endsWith("/") ? Globals.SITE_URL + suffix : Globals.SITE_URL + "/" + suffix; |
EmailPersonalizedCertificated e = sendEmailService.getMessageEmailAdulteredFromEmailIppCertificated(emailFrom, |
personFrom, |
subject, |
msg, |
userSession.getUser(), |
usersToConsume, |
url); |
e.setHtml(true); |
EMAILJobPersonalizedCertificated emailJob = new EMAILJobPersonalizedCertificated(e); |
JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id + ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject ,userSession); |
//} |
enviarComprovativoAoRemetente(id, msg, emailFrom, personFrom, subject, userSession, source,usersToConsume.size()); |
enviarComprovativoAAdministracao(id, msg, emailFrom, personFrom, subject, userSession, source,usersToConsume.size()); |
return result.users; |
} |
private void enviarComprovativoAAdministracao(Long id, String msg, String emailFrom, String personFrom, String subject, UserSession userSession, String source,int sentTo) |
{ |
Email e = sendEmailService.getMessageEmailAdulteredFromEmailIpp(emailFrom, |
personFrom, |
subject + " (COMPROVATIVO PAE) ", |
"<u>Caros membros da administração este é um comprovativo de um email enviado pelo PAE pelo user: " + userSession.getUser().getName() + " - Este é um comprovativo do seu envio de mensagem a " + sentTo + " Alunos</u><br/><br/>" + msg, |
ConfigProperties.getListValuesByPrefix("admin.email"), |
userSession.getUser()); |
e.setHtml(true); |
EMAILJob emailJob = new EMAILJob(e); |
JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id + ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject ,userSession); |
} |
private void enviarComprovativoAoRemetente(Long id, String msg, String emailFrom, String personFrom, String subject, UserSession userSession, String source,int sentTo) |
{ |
Map<String,String> emailsComprovativos = new HashMap<String, String>(); |
if(Email.validEmail(userSession.getUser().getEmail())) |
emailsComprovativos.put(userSession.getUser().getEmail(),""); |
if(Email.validEmail(userSession.getUser().getOutEmail())) |
emailsComprovativos.put(userSession.getUser().getOutEmail(),""); |
if(Email.validEmail(userSession.getUser().getPreferrefEmail())) |
emailsComprovativos.put(userSession.getUser().getPreferrefEmail(),""); |
List<String> comprovativos = new ArrayList<String>(); |
comprovativos.addAll(emailsComprovativos.keySet()); |
if(comprovativos.size() > 0) |
{ |
Email e = sendEmailService.getMessageEmailAdulteredFromEmailIpp(emailFrom, |
personFrom, |
subject + " (COMPROVATIVO PAE) ", |
"<u>Olá " + userSession.getUser().getName() + " - Este é um comprovativo do seu envio de mensagem a " + sentTo + " Alunos</u><br/><br/>" + msg, |
comprovativos, |
userSession.getUser()); |
e.setHtml(true); |
EMAILJob emailJob = new EMAILJob(e); |
JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id + ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject ,userSession); |
} |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/authenticate/AuthenticateService.java |
---|
329,6 → 329,15 |
User u = DaoFactory.getUserDaoImpl().load(userId); |
return createCertificate(u, usersession); |
} |
public String createCertificateForId(long userId) |
{ |
User u = DaoFactory.getUserDaoImpl().load(userId); |
return createCertificate(u); |
} |
public String createCertificate(User user) |
{ |
return createCertificate(user,null); |
} |
/** |
* Create a new Certificate for usage in URL auto login |
* |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/QuestionarioDaoImpl.java |
---|
10,9 → 10,7 |
import pt.estgp.estgweb.domain.*; |
import java.util.ArrayList; |
import java.util.HashMap; |
import java.util.List; |
import java.util.Map; |
import static org.hibernate.criterion.Restrictions.*; |
113,6 → 111,21 |
else |
return 0; |
} |
public long getNumeroUnidadesUsadas(long questionarioId) |
{ |
Query q = getCurrentSession().createQuery |
("select count(u.id) from u in class " + QuestionarioPedagogicoUnidadeCurricularAfeta.class.getName() + " " + |
" JOIN u.cursoAfeto c " + |
" JOIN c.questionario q " + |
" where u.usar = true AND q.id = " + questionarioId); |
Object result = q.uniqueResult(); |
if(result != null && ((Long)result) > 0) |
{ |
return (Long)result; |
} |
else |
return 0; |
} |
public long getNumeroRespostasRequisitadas(long questionarioId) |
{ |
129,6 → 142,7 |
return 0; |
} |
/* |
public AnnouncementDaoImpl.FindUsersResult findUsersEmails(Long id,boolean onlyNotAnswered) |
{ |
155,16 → 169,46 |
} |
*/ |
public AnnouncementDaoImpl.FindUsersResult findUsersEmailsPedagogico(boolean onlyNotAnswered,long cursoAfetoId,long unidadeAfetaId) |
public AnnouncementDaoImpl.FindUsersIdResult findUsersIds(Long id,boolean onlyNotAnswered) |
{ |
AnnouncementDaoImpl.FindUsersResult findUsersResult = new AnnouncementDaoImpl.FindUsersResult(); |
List<String> users = new ArrayList<String>(); |
findUsersResult.emails = users; |
AnnouncementDaoImpl.FindUsersIdResult findUsersResult = new AnnouncementDaoImpl.FindUsersIdResult(); |
List<Long> users = new ArrayList<Long>(); |
findUsersResult.userIds = users; |
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " + |
" u.outEmail, u.preferrefEmail, u.email " + |
" u.id " + |
"from " + QuestionarioRespostaRequisitada.class.getName() + " rR " + |
"JOIN rR.questionario q " + |
"JOIN rR.user u " + |
"WHERE q.id = :id " + |
(onlyNotAnswered? " AND rR.resposta is null " : "" ) + |
"GROUP BY u.id"); |
q.setLong("id",id); |
List<Object> results = (List<Object>) q.list(); |
for(Object result: results) |
{ |
findUsersResult.userIds.add((Long) result); |
} |
findUsersResult.users = results.size(); |
return findUsersResult; |
} |
public AnnouncementDaoImpl.FindUsersIdResult findUsersIdsPedagogico(boolean onlyNotAnswered,long cursoAfetoId,long unidadeAfetaId) |
{ |
AnnouncementDaoImpl.FindUsersIdResult findUsersResult = new AnnouncementDaoImpl.FindUsersIdResult(); |
List<Long> users = new ArrayList<Long>(); |
findUsersResult.userIds = users; |
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " + |
" u.id " + |
"from " + QuestionarioPedagogicoAlunoRequisitado.class.getName() + " aR " + |
"JOIN aR.respostaRequisitada rR " + |
"JOIN rR.user u " + |
175,37 → 219,58 |
(onlyNotAnswered? " AND rR.resposta is null " : "" ) + |
"GROUP BY u.id"); |
List<Object[]> results = (List<Object[]>) q.list(); |
List<Object> results = (List<Object>) q.list(); |
fullFillResults(findUsersResult, results); |
for(Object result: results) |
{ |
findUsersResult.userIds.add((Long) result); |
} |
findUsersResult.users = results.size(); |
return findUsersResult; |
} |
private void fullFillResults(AnnouncementDaoImpl.FindUsersResult findUsersResult, List<Object[]> results) { |
Map<String,String> emailsSet = new HashMap<String, String>(); |
for(Object[] result: results) |
public AnnouncementDaoImpl.FindUsersIdResult findUsersIdsPedagogicoAllProcessing(boolean onlyNotAnswered) |
{ |
AnnouncementDaoImpl.FindUsersIdResult findUsersResult = new AnnouncementDaoImpl.FindUsersIdResult(); |
List<Long> users = new ArrayList<Long>(); |
findUsersResult.userIds = users; |
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " + |
" u.id " + |
"from " + QuestionarioPedagogicoAlunoRequisitado.class.getName() + " aR " + |
"JOIN aR.respostaRequisitada rR " + |
"JOIN rR.user u " + |
"WHERE " + |
"( " + |
" aR.tipologiaRequisitada.unidadeAfeta.cursoAfeto.questionario.state = :sP1 " + |
" OR " + |
" aR.tipologiaRequisitada.unidadeAfeta.cursoAfeto.questionario.state = :sP2 " + |
")" + |
(onlyNotAnswered? " AND rR.resposta is null " : "" ) + |
"GROUP BY u.id"); |
q.setString("sP1",QuestionarioImpl.State.PROCESSING.name()); |
q.setString("sP2",QuestionarioImpl.State.PROCESSING_WITH_ANSWERS.name()); |
List<Object> results = (List<Object>) q.list(); |
for(Object result: results) |
{ |
if(result[0] != null) |
{ |
emailsSet.put((String) result[0],""); |
} |
if(result[1] != null) |
{ |
emailsSet.put((String) result[1],""); |
} |
if(result[2] != null) |
{ |
emailsSet.put((String) result[2],""); |
} |
findUsersResult.userIds.add((Long) result); |
} |
findUsersResult.emails.addAll(emailsSet.keySet()); |
findUsersResult.users = results.size(); |
return findUsersResult; |
} |
public static class QuestionarioStatsVars |
{ |
public long cursos; |
216,6 → 281,7 |
public long alunosDeUsadas; |
public long profsDeUsadas; |
public long unidadesUsadas; |
public long tipologiasUsadas; |
public long profsTimeStudents; |
public long respostasRequisitadas; |
public long respostasObtidas; |
231,16 → 297,17 |
" count(distinct c.id) AS cursos " + |
",count(distinct u.id) AS unidades " + |
",sum (u.profs) AS profs " + |
",sum (u.turmas) AS turmas " + |
",count(distinct t.cdTurma) AS turmas " + |
",sum (u.students) AS students " + |
",sum (case when u.usar = true then u.students else 0 end) AS alunosDeUsadas " + |
",sum (case when u.usar = true then u.profs else 0 end) AS profsDeUsadas " + |
",sum (case when u.usar = true then 1 else 0 end) AS unidadesUsadas " + |
",sum (case when u.usar = true then 1 else 1 end) AS unidadesTodasCheck " + |
",count(distinct a.aluno.id) AS alunosDeUsadas " + |
",count(distinct t.docenteAfeto.id) AS profsDeUsadas " + |
",count(distinct t.id) AS tipologiasRequisitadas " + |
",sum (case when u.usar = true then (u.profs * u.students) else 0 end) AS respostasEsperadas " + |
"from " + QuestionarioPedagogicoCursoAfeto.class.getName() + " c " + |
"JOIN c.questionario q " + |
"JOIN c.unidadesAfetas u " + |
"JOIN u.tipologiasRequisitadas t " + |
"JOIN t.alunosRequisitados a " + |
"WHERE q.id = :id " + |
"GROUP BY q.id"); |
257,13 → 324,14 |
questionarioStatsVars.alunos = (Long) results[4]; |
questionarioStatsVars.alunosDeUsadas = (Long) results[5]; |
questionarioStatsVars.profsDeUsadas = (Long) results[6]; |
questionarioStatsVars.unidadesUsadas = (Long) results[7]; |
if(((Long) results[8]) != questionarioStatsVars.unidades) |
logger.error("TEM UM ERRO NA QUERY, a contagem de usadas com o distinct da diferente de com o SUM"); |
questionarioStatsVars.profsTimeStudents = (Long) results[9]; |
questionarioStatsVars.tipologiasUsadas = (Long) results[7]; |
questionarioStatsVars.profsTimeStudents = (Long) results[8]; |
questionarioStatsVars.respostasRequisitadas = getNumeroRespostasRequisitadas(questionarioId); |
questionarioStatsVars.respostasObtidas = getNumeroRespostas(questionarioId); |
questionarioStatsVars.unidadesUsadas = getNumeroUnidadesUsadas(questionarioId); |
if(questionarioStatsVars.unidadesUsadas > questionarioStatsVars.unidades) |
logger.error("TEM UM ERRO NA QUERY, a contagem de usadas com o distinct da diferente de com o SUM"); |
} |
return questionarioStatsVars; |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/AnnouncementDaoImpl.java |
---|
41,6 → 41,13 |
public int users; |
public List<String> emails; |
} |
public static class FindUsersIdResult |
{ |
public int users; |
public List<Long> userIds; |
} |
public FindUsersResult findUsersEmails(String year, String department, long courseId, long courseUnitId, String semestre, CreateAnnouncementService.MessageTarget target) |
{ |
FindUsersResult findUsersResult = new FindUsersResult(); |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/QuestionarioPedagogicoCursoAfetoImpl.java |
---|
30,4 → 30,5 |
public void incStatTipologiasRequisitadas(){ setStatTipologiasRequisitadas(getStatTipologiasRequisitadas()+1);} |
public void incStatRespostasRequisitadas(){ setStatRespostasRequisitadas(getStatRespostasRequisitadas() + 1);} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/questionarios/QuestionarioMessage.java |
---|
16,6 → 16,35 |
String fromPerson; |
String subject; |
String formDescription; |
String dispatch; |
long questionarioId; |
public long getQuestionarioId() { |
return questionarioId; |
} |
public void setQuestionarioId(long questionarioId) { |
this.questionarioId = questionarioId; |
} |
public String getDispatch() { |
return dispatch; |
} |
public void setDispatch(String dispatch) { |
this.dispatch = dispatch; |
} |
public String getFormDescription() { |
return formDescription; |
} |
public void setFormDescription(String formDescription) { |
this.formDescription = formDescription; |
} |
public String getSubject() { |
return subject; |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/questionarios/QuestionarioController.java |
---|
282,7 → 282,8 |
frm.getFromPerson(), |
frm.getSubject() |
}; |
sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessage",args,names); |
int size = (Integer) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessage",args,names); |
addMessage(request,"submit.todo.message.success","" + size); |
return mapping.findForward("success"); |
} |
public ActionForward sendEmailQuestionarioCursoAfeto(ActionMapping mapping, |
303,7 → 304,8 |
frm.getFromPerson(), |
frm.getSubject() |
}; |
sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessageCursoAfeto",args,names); |
int size = (Integer) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessageCursoAfeto",args,names); |
addMessage(request,"submit.todo.message.success","" + size); |
return mapping.findForward("success"); |
} |
325,12 → 327,37 |
frm.getFromPerson(), |
frm.getSubject() |
}; |
sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessageUnidadeAfeta",args,names); |
int size = (Integer) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessageUnidadeAfeta",args,names); |
addMessage(request,"submit.todo.message.success","" + size); |
return mapping.findForward("success"); |
} |
public ActionForward sendEmailQuestionariosProcessing(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
QuestionarioMessage frm = (QuestionarioMessage) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {"onlyNotAnswered","id","msg","emailFrom","personFrom","subject"}; |
Object[] args = { |
frm.isOnlyNotAnswered(), |
frm.getMessage(), |
frm.getFromEmail(), |
frm.getFromPerson(), |
frm.getSubject() |
}; |
int size = (Integer) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSendMessageAllProcessing",args,names); |
addMessage(request,"submit.todo.message.success","" + size); |
return mapping.findForward("seeAll"); |
} |
} |
/branches/v3/impl/src/doc/estgweb.eap |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v3/impl/src/web/admin/configuration/configs.jsp |
---|
101,7 → 101,7 |
jsonObjDegrees = []; |
if(degrees.length > 0) |
{ |
var degreesArray = degrees.split(","); |
var degreesArray = degrees.split(";"); |
for(i=0;i< degreesArray.length;i++) |
{ |
item = {} |
117,7 → 117,7 |
if(finalDegrees == "") |
finalDegrees+= obj.degree; |
else |
finalDegrees+= "," + obj.degree; |
finalDegrees+= ";" + obj.degree; |
var elementNew = $("<div class=\"list-group-item\">" + |
/branches/v3/impl/src/web/user/home/teacherPae.jsp |
---|
26,9 → 26,11 |
<baco:hasRole role="admin,all,questionarios.gerais,questionarios.admin"> |
<div class="col-md-6 col-sm-12 col-xs-12"> |
<jsp:include page="panels/configsInfo.jsp"/> |
<baco:hasRole role="admin,all,services,questionarios.admin,questionarios.atribuicoes.admin,questionarios.tipologias.admin,questionarios.atribuicoes.check_teachers"> |
<jsp:include page="panels/configsInfo.jsp"/> |
</baco:hasRole> |
<jsp:include page="panels/configsGeraisSistema.jsp"/> |
<jsp:include page="panels/docs.jsp"/> |
<jsp:include page="panels/configsGeraisSistema.jsp"/> |
</div> |
<div class="col-md-6 col-sm-12 col-xs-12"> |
<jsp:include page="panels/academicTools.jsp"/> |
/branches/v3/impl/src/web/user/home/teacher.jsp |
---|
202,8 → 202,14 |
String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear(); |
List<String> activeDegrees = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveDegrees(); |
long time = System.currentTimeMillis(); |
List<CourseUnit> evaluations = DaoFactory.getCourseUnitDaoImpl().loadTeacherUnitsMissingEvaluation(UserSession); |
System.out.println("TIME10: " + (System.currentTimeMillis()-time)); |
time = System.currentTimeMillis(); |
List<CourseUnit> programs = DaoFactory.getCourseUnitDaoImpl().loadMissingPrograms(UserSession.getUser().getId()); |
System.out.println("TIME11: " + (System.currentTimeMillis()-time)); |
time = System.currentTimeMillis(); |
if(programs != null && programs.size() > 0 || evaluations!= null && evaluations.size() > 0) |
{ |
%> |
/branches/v3/impl/src/web/user/home/courseComission.jsp |
---|
12,11 → 12,19 |
HibernateUtils.getCurrentSession().beginTransaction(); |
String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear(); |
List<String> activeDegrees = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveDegrees(); |
long time = System.currentTimeMillis(); |
List<CourseUnitDaoImpl.CourseMissingValidationProgram> result0 = DaoFactory.getCourseUnitDaoImpl().loadMissingPrograms(UserSession); |
System.out.println("TIME1: " + (System.currentTimeMillis()-time)); |
time = System.currentTimeMillis(); |
List<CourseUnitDaoImpl.CourseMissingValidationProgram> result1 = DaoFactory.getCourseUnitDaoImpl().loadMissingProgramValidate(UserSession); |
System.out.println("TIME2: " + (System.currentTimeMillis()-time)); |
time = System.currentTimeMillis(); |
List<CourseUnitDaoImpl.CourseMissingValidationEvaluation> result2 = DaoFactory.getCourseUnitDaoImpl().loadMissingEvaluationValidate(UserSession); |
System.out.println("TIME3: " + (System.currentTimeMillis()-time)); |
time = System.currentTimeMillis(); |
List<CourseUnitDaoImpl.CourseMissingValidationEvaluation> result3 = DaoFactory.getCourseUnitDaoImpl().loadMissingEvaluation(UserSession); |
System.out.println("TIME4: " + (System.currentTimeMillis()-time)); |
time = System.currentTimeMillis(); |
if(result0.size() > 0 || result1.size() > 0 || result2.size() > 0 || result3.size()>0) |
{ |
%> |
/branches/v3/impl/src/web/user/questionarios/sendMessageQuestionarioRequisitados.jsp |
---|
File deleted |
\ No newline at end of file |
/branches/v3/impl/src/web/user/questionarios/questionarioAdmin.jsp |
---|
87,6 → 87,8 |
%> |
<div class="alert alert-success col-md-2 col-sm-2"> |
<bean:message key="questionario.state.ASSIGNATION_DETAILS"/> |
<html:link styleClass="btn btn-default" action="/user/questionarioPedagogicoStartCheckCourses.do?questionarioId=${Questionario.id}">Ver Atribuições</html:link> |
<html:link styleClass="btn btn-default" action="/user/questionarioPedagogicoStartChooseCourses.do?questionarioId=${Questionario.id}">Ver Seleção de Cursos</html:link> |
</div> |
<div class="col-md-1 col-sm-1 vcenter alert hidden-xs"><span class="glyphicon glyphicon-chevron-right"/></div> |
<% |
/branches/v3/impl/src/web/user/questionarios/questionariosSee.jsp |
---|
3,6 → 3,7 |
<%@ page import="pt.estgp.estgweb.domain.QuestionarioImpl" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="java.util.List" %> |
<%@ page import="java.net.URLEncoder" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
22,9 → 23,15 |
<div class="panel panel-primary"> |
<div class="panel-heading clearfix"> |
Questionários |
<baco:hasRole role="questionarios.admin,all,admin"> |
<html:link styleClass="btn btn-default btn-sm pull-right" action="/user/startNewQuestionario">Criar Novo <span class="glyphicon glyphicon-plus"> </span></html:link> |
</baco:hasRole> |
<% |
String desc = URLEncoder.encode("Mensagem para os alunos de todos os Questionários em Processamento","ISO-8859-1"); |
request.setAttribute("desc",desc); |
%> |
<html:link styleClass="btn btn-default pull-right" action="/user/startQuestionariosPaeMessagePedagogico.do?&formDescription=${desc}&targetDispatch=sendEmailQuestionariosProcessing"> |
<span class="glyphicon glyphicon-envelope"> </span> Enviar Mensagem A Todos Os Inquiridos |
</html:link> |
<a class="btn btn-default" href="#" data-toggle="modal" data-target="#modalHelpQuestionario"> |
<span class="glyphicon glyphicon-question-sign"></span> Ajuda sobre Processo dos Questionários |
</a> |
/branches/v3/impl/src/web/user/questionarios/topnavQuestionarioSee.jsp |
---|
2,10 → 2,19 |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<%@ page import="pt.estgp.estgweb.web.form.questionarios.QuestionarioMessage" %> |
<% |
String qId = request.getParameter("questionarioId"); |
if(qId == null) |
qId = request.getParameter("questionario.id"); |
if(qId==null) |
{ |
QuestionarioMessage questionarioMessage = (QuestionarioMessage) request.getAttribute("QuestionarioMessage"); |
if(questionarioMessage != null) |
{ |
qId = "" + questionarioMessage.getQuestionarioId(); |
} |
} |
Long questionarioId = Long.parseLong(qId); |
/branches/v3/impl/src/web/user/questionarios/pedagogicoEstudante/pedagogicoEstudanteAssignAnswers.jsp |
---|
138,24 → 138,32 |
<div class="alert alert-info">Por favor confira estes valores com os resultados apresentados no LOG</div> |
<table class="tablesorter-blue"> |
<thead> |
<th>Cursos Selecionados</th> |
<th>Total de Unidades</th> |
<th>Unidades Não Selecionadas</th> |
<th>Unidades Selecionadas</th> |
<th>Turmas Selecionadas</th> |
<th>Alunos Selecionados</th> |
<th>Professores Selecionados</th> |
<th>Máximo de questionários simples admitidos (Somatorio (Por cada Unidade Profs*Alunos))</th> |
<th>Cursos Selecionados</th> |
<th>Total de Unidades</th> |
<th>Unidades Não Selecionadas</th> |
<th>Unidades Selecionadas</th> |
<th>Turmas Selecionadas</th> |
<th>Alunos Selecionados</th> |
<th>Professores Selecionados</th> |
<th>Tipologias Selecionadas</th> |
<th>Respondidos</th> |
<th>Por Responder</th> |
<th>Respostas Requisitadas</th> |
</thead> |
<tbody> |
<td><%=questionarioStatsVars.cursos%></td> |
<td><%=questionarioStatsVars.unidades%></td> |
<td><%=questionarioStatsVars.unidades - questionarioStatsVars.unidadesUsadas%></td> |
<td><%=questionarioStatsVars.unidadesUsadas%></td> |
<td><%=questionarioStatsVars.turmas%></td> |
<td><%=questionarioStatsVars.alunosDeUsadas%></td> |
<td><%=questionarioStatsVars.profsDeUsadas%></td> |
<td><%=questionarioStatsVars.profsTimeStudents%></td> |
<td><%=questionarioStatsVars.cursos%></td> |
<td><%=questionarioStatsVars.unidades%></td> |
<td><%=questionarioStatsVars.unidades - questionarioStatsVars.unidadesUsadas%></td> |
<td><%=questionarioStatsVars.unidadesUsadas%></td> |
<td><%=questionarioStatsVars.turmas%></td> |
<td><%=questionarioStatsVars.alunosDeUsadas%></td> |
<td><%=questionarioStatsVars.profsDeUsadas%></td> |
<td><%=questionarioStatsVars.tipologiasUsadas%></td> |
<td><label class="label label-success" style="font-size: 1em"><%=questionarioStatsVars.respostasObtidas%></label></td> |
<td><label class="label label-danger" style="font-size: 1em"><%=(questionarioStatsVars.respostasRequisitadas-questionarioStatsVars.respostasObtidas)%></label></td> |
<td><label class="label label-info" style="font-size: 1em"><%=questionarioStatsVars.respostasRequisitadas%></label></td> |
</tbody> |
</table> |
</div> |
/branches/v3/impl/src/web/user/questionarios/pedagogicoEstudante/questionariosDocenteAbertos.jsp |
---|
53,7 → 53,7 |
for(Questionario questionario: tipologiasOrdenadas.keySet()) |
{ |
%> |
<h2><%=questionario.getDescription()%></h2> |
<h2 class="well">Questionário: <%=questionario.getDescription()%></h2> |
<% |
HashMap<QuestionarioPedagogicoCursoAfeto,Boolean> cursosAfetoHashMap = new HashMap<QuestionarioPedagogicoCursoAfeto, Boolean>(); |
for(QuestionarioPedagogicoTipologiaRequisitada tipologiaRequisitada: tipologiasOrdenadas.get(questionario)) |
64,7 → 64,9 |
for(QuestionarioPedagogicoCursoAfeto cursoAfeto: cursosAfetoHashMap.keySet()) |
{ |
%> |
<h3><%=cursoAfeto.getNome()%></h3> |
<div class="well well-sm"><%=cursoAfeto.getNome()%></div> |
<div class="list-group"> |
<%--<div class="list-group-item list-group-item-heading clearfix"> |
Unidade Curricular (Código da Unidade) <label class="label label-pill label-success" style="font-size: 1em">Questionários Preenchidos</label> de <label class="label label-pill label-info" style="font-size: 1em">Número de Solicitados</label> <label class="badge badge-info">Tipologia de Aula</label> |
98,7 → 100,10 |
<label class="label label-pill <%=respondidos == null ? "label-warning" : "label-success"%>" style="font-size: 1em"><%=respondidos == null ? 0 : ((Long)respondidos)%></label> |
respondidos de |
<label class="label label-pill label-info" style="font-size: 1em"><%=tipologiaRequisitada.getAlunosRequisitados().size()%></label> |
<%=tipologiaRequisitada.getUnidadeAfeta().getNome()%> |
<span style="margin-left: 10px" class="glyphicon glyphicon-arrow-right"> </span> |
<label class="bg-info " style="padding: 2px"><%=tipologiaRequisitada.getUnidadeAfeta().getNome()%></label> |
(<%=tipologiaRequisitada.getUnidadeAfeta().getCodigoUnidade()%>) |
<label class="badge badge-info"><%=tipologiaRequisitada.getDsTipologia()%></label> |
</div> |
/branches/v3/impl/src/web/user/questionarios/pedagogicoEstudante/questionarioDashBoard.jsp |
---|
4,8 → 4,9 |
<%@ page import="pt.estgp.estgweb.domain.QuestionarioPedagogicoCursoAfeto" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.impl.QuestionarioDaoImpl" %> |
<%@ page import="pt.estgp.estgweb.web.form.questionarios.QuestionarioMessage" %> |
<%@ page import="java.net.URLEncoder" %> |
<%@ page import="java.util.List" %> |
<%@ page import="pt.estgp.estgweb.web.exceptions.NotAuthorizedException" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
15,7 → 16,8 |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSessionImpl" scope="request"/> |
<html:errors/> |
<jomm:messages/> |
<% |
String questionarioIdStr = request.getParameter("questionarioId"); |
if(questionarioIdStr == null) |
27,6 → 29,11 |
Questionario quest = (Questionario) request.getAttribute("Questionario"); |
questionarioIdStr = quest.getId() + ""; |
} |
if(request.getAttribute("QuestionarioMessage") != null) |
{ |
questionarioIdStr = "" + ((QuestionarioMessage) request.getAttribute("QuestionarioMessage")).getQuestionarioId(); |
} |
} |
long questionarioId = Long.parseLong(questionarioIdStr); |
57,6 → 64,18 |
<baco:clearOperation name="Questionario" op="QUESTIONARIO_START_PROCESSEMENT"> |
<button class="btn btn-success" type="button" data-toggle="modal" data-target="#confirm-ModalGeneric" data-message="Esta operação irá abrir o questionário para os alunos!! Tem a certeza que deseja prosseguir?" data-href="<%=request.getContextPath()%>/user/questionariosPaeYearSemestre.do?dispatch=startProcessement&questionarioId=${Questionario.id}"><span class="icon icon-play"> </span> Iniciar Questionário</button> |
</baco:clearOperation> |
<td> |
<% |
String descEncoded = URLEncoder.encode(questionario.getDescription(),"ISO-8859-1"); |
request.setAttribute("descEncoded",descEncoded); |
%> |
<html:link styleClass="btn btn-default" action="/user/startQuestionariosPaeMessagePedagogico.do?questionarioId=${Questionario.id}&formDescription=Mensagem para os alunos: ${descEncoded}&targetDispatch=sendEmailQuestionario&cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId=${Questionario.id}"> |
<span class="glyphicon glyphicon-envelope"> </span> Enviar para todos os Cursos |
</html:link> |
</td> |
<a href="<%=request.getContextPath()%>/user/questionariosPaeMessagePedagogico.do"/> |
</div> |
<div class="col-sm-12"> |
<table class="tablesorter-blue"> |
68,7 → 87,8 |
<th>Turmas Selecionadas</th> |
<th>Alunos Selecionados</th> |
<th>Professores Selecionados</th> |
<th>Respondidos</th> |
<th>Tipologias Selecionadas</th> |
<th>Respostas</th> |
<th>Por Responder</th> |
<th>Respostas Requisitadas</th> |
81,6 → 101,7 |
<td><%=questionarioStatsVars.turmas%></td> |
<td><%=questionarioStatsVars.alunosDeUsadas%></td> |
<td><%=questionarioStatsVars.profsDeUsadas%></td> |
<td><%=questionarioStatsVars.tipologiasUsadas%></td> |
<td><label class="label label-success" style="font-size: 1em"><%=questionarioStatsVars.respostasObtidas%></label></td> |
<td><label class="label label-danger" style="font-size: 1em"><%=(questionarioStatsVars.respostasRequisitadas-questionarioStatsVars.respostasObtidas)%></label></td> |
<td><label class="label label-info" style="font-size: 1em"><%=questionarioStatsVars.respostasRequisitadas%></label></td> |
95,10 → 116,11 |
<th>Código</th> |
<th>Curso</th> |
<th>Unidades</th> |
<th>Alunos Que Responderam</th> |
<th>Respondidos</th> |
<th>Alunos</th> |
<th>Respostas</th> |
<th>Por Responder</th> |
<th>Total</th> |
<th></th> |
</thead> |
<tbody> |
<% |
124,6 → 146,15 |
<td><label class="label <%=respostasCurso > 0 ? "label-success":"label-warning"%>" style="font-size: 1em"><%=respostasCurso%></label></td> |
<td><label class="label label-danger" style="font-size: 1em"><%=cursoAfeto.getStatRespostasRequisitadas() - respostasCurso%></label></td> |
<td><label class="label label-info" style="font-size: 1em"><%=cursoAfeto.getStatRespostasRequisitadas()%></label></td> |
<td> |
<% |
String nomeCursoEncoded = URLEncoder.encode(cursoAfeto.getNome(),"ISO-8859-1"); |
request.setAttribute("nomeCursoEncoded",nomeCursoEncoded); |
%> |
<html:link styleClass="btn btn-default" action="/user/startQuestionariosPaeMessagePedagogico.do?questionarioId=${Questionario.id}&formDescription=Mensagem para os alunos do curso ${nomeCursoEncoded} (${cursoAfeto.codigoCurso})&targetDispatch=sendEmailQuestionarioCursoAfeto&cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId=${cursoAfeto.id}"> |
<span class="glyphicon glyphicon-envelope"> </span> |
</html:link> |
</td> |
</tr> |
<% |
} |
/branches/v3/impl/src/web/user/questionarios/pedagogicoEstudante/sendMessageQuestionarioRequisitados.jsp |
---|
New file |
0,0 → 1,165 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/> |
<% |
/* IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{}; |
List<String> importYears = (List<String>) sm.execute(RequestUtils.getRequester(request, response), "LoadCoursesImportYears", args, names); |
request.setAttribute("importYears", importYears);*/ |
%> |
<logic:present name="QuestionarioMessage"> |
<logic:notEmpty name="QuestionarioMessage" property="message"> |
<script> |
$(document).ready( |
function(){ |
setText(); |
} |
); |
function setText() |
{ |
$("#editor").html('<bean:write name="QuestionarioMessage" property="message" filter="false"/>'); |
} |
</script> |
</logic:notEmpty> |
</logic:present> |
<html:form styleId="formSubmitMessage" styleClass="form-horizontal" action="/user/questionariosPaeMessagePedagogico" enctype="multipart/form-data" onsubmit="this.form.message.value=$('#editor').html();"> |
<jsp:useBean id="QuestionarioMessage" type="pt.estgp.estgweb.web.form.questionarios.QuestionarioMessage" scope="request"/> |
<% |
String targetDispatch = request.getParameter("targetDispatch"); |
String formDescription = request.getParameter("formDescription"); |
String cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId = request.getParameter("cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId"); |
String questionarioId = request.getParameter("questionarioId"); |
if(formDescription!=null) |
QuestionarioMessage.setFormDescription(formDescription); |
if(targetDispatch!=null) |
QuestionarioMessage.setDispatch(targetDispatch); |
if(cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId != null) |
QuestionarioMessage.setCursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId(Long.parseLong(cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId)); |
if(questionarioId != null) |
QuestionarioMessage.setQuestionarioId(Long.parseLong(questionarioId)); |
%> |
<html:hidden property="formDescription"/> |
<div class="alert alert-info">Esta funcionalidade apenas está disponivel a membros do Pedagógico e à Administração</div> |
<div class="panel panel-default"> |
<div class="panel-heading">${QuestionarioMessage.formDescription}</div> |
<div class="panel-body"> |
<jomm:messages/> |
<html:errors/> |
<input type="hidden" name="dispatch" value="${QuestionarioMessage.dispatch}"/> |
<html:hidden property="cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId"/> |
<html:hidden property="formDescription"/> |
<html:hidden property="message"/> |
<html:hidden property="questionarioId"/> |
<div class="form-group row"> |
<div class="control-label col-sm-2">Nome ou Entidade que representa</div> |
<div class="col-sm-10"> |
<html:text styleId="sendAnnouncementEmail" styleClass="form-control" property="fromPerson"/> |
</div> |
</div> |
<div class="form-group row"> |
<div class="control-label col-sm-2">Email que aparece como Remetente</div> |
<div class="col-sm-10"> |
<html:text styleId="sendAnnouncementEmail" styleClass="form-control" property="fromEmail"/> |
</div> |
</div> |
<div class="form-group row"> |
<div class="control-label col-sm-2"><bean:message key="submit.todo.message.subject"/></div> |
<div class="col-sm-10"> |
<html:text styleId="subject" styleClass="form-control" property="subject"/> |
</div> |
</div> |
<div class="form-group row"> |
<div class="control-label col-sm-2" for="person"><bean:message key="submit.todo.message.target.person"/></div> |
<div class="col-sm-10"> |
<html:select styleId="person" styleClass="form-control" property="onlyNotAnswered"> |
<html:option value="true">Enviar apenas a quem têm questionários por responder</html:option> |
<html:option value="false">Enviar a Todos os Inquiridos</html:option> |
</html:select> |
</div> |
</div> |
<div class="form-group row"> |
<div class="col-sm-12"> |
<div class="btn-toolbar" data-role="editor-toolbar" data-target="#editor"> |
<!-- <div class="btn-group"> |
<a class="btn dropdown-toggle" data-toggle="dropdown" title="Font"><i class="aweicon-font"></i><b class="caret"></b></a> |
<ul class="dropdown-menu"> |
</ul> |
</div> |
<div class="btn-group"> |
<a class="btn dropdown-toggle" data-toggle="dropdown" title="Font Size"><i class="aweicon-text-height"></i> <b class="caret"></b></a> |
<ul class="dropdown-menu"> |
<li><a data-edit="fontSize 5"><font size="5">Huge</font></a></li> |
<li><a data-edit="fontSize 3"><font size="3">Normal</font></a></li> |
<li><a data-edit="fontSize 1"><font size="1">Small</font></a></li> |
</ul> |
</div>--> |
<div class="btn-group"> |
<a class="btn btn-default" data-edit="bold" title="Bold (Ctrl/Cmd+B)"><i class="aweicon-bold"></i></a> |
<a class="btn btn-default" data-edit="italic" title="Italic (Ctrl/Cmd+I)"><i class="aweicon-italic"></i></a> |
<a class="btn btn-default" data-edit="strikethrough" title="Strikethrough"><i class="aweicon-strikethrough"></i></a> |
<a class="btn btn-default" data-edit="underline" title="Underline (Ctrl/Cmd+U)"><i class="aweicon-underline"></i></a> |
</div> |
<div class="btn-group"> |
<a class="btn btn-default" data-edit="insertunorderedlist" title="Bullet list"><i class="aweicon-list-ul"></i></a> |
<a class="btn btn-default" data-edit="insertorderedlist" title="Number list"><i class="aweicon-list-ol"></i></a> |
<a class="btn btn-default" data-edit="outdent" title="Reduce indent (Shift+Tab)"><i class="aweicon-indent-left"></i></a> |
<a class="btn btn-default" data-edit="indent" title="Indent (Tab)"><i class="aweicon-indent-right"></i></a> |
</div> |
<div class="btn-group"> |
<a class="btn btn-default" data-edit="justifyleft" title="Align Left (Ctrl/Cmd+L)"><i class="aweicon-align-left"></i></a> |
<a class="btn btn-default" data-edit="justifycenter" title="Center (Ctrl/Cmd+E)"><i class="aweicon-align-center"></i></a> |
<a class="btn btn-default" data-edit="justifyright" title="Align Right (Ctrl/Cmd+R)"><i class="aweicon-align-right"></i></a> |
<a class="btn btn-default" data-edit="justifyfull" title="Justify (Ctrl/Cmd+J)"><i class="aweicon-align-justify"></i></a> |
</div> |
<div class="btn-group"> |
<a class="btn btn-default dropdown-toggle" data-toggle="dropdown" title="Hyperlink"><i class="aweicon-link"></i></a> |
<div class="dropdown-menu input-append"> |
<input class="span2" placeholder="URL" type="text" data-edit="createLink"/> |
<button class="btn" type="button">Add</button> |
</div> |
<a class="btn btn-default" data-edit="unlink" title="Remove Hyperlink"><i class="aweicon-cut"></i></a> |
</div> |
<div class="btn-group"> |
<a class="btn btn-default" title="Insert picture (or just drag & drop)" id="pictureBtn"><i class="aweicon-picture"></i></a> |
<input type="file" data-role="magic-overlay" data-target="#pictureBtn" data-edit="insertImage" /> |
</div> |
<div class="btn-group"> |
<a class="btn btn-default" data-edit="undo" title="Undo (Ctrl/Cmd+Z)"><i class="aweicon-undo"></i></a> |
<a class="btn btn-default" data-edit="redo" title="Redo (Ctrl/Cmd+Y)"><i class="aweicon-repeat"></i></a> |
</div> |
</div> |
<div id="editor"> |
<bean:message key="submit.todo.email.content"/>… |
</div> |
</div> |
</div> |
<button class="btn btn-success" onclick="this.form.message.value=$('#editor').html(); this.form.submit()"><bean:message key="submit.todo.message"/></button> |
</div> |
</div> |
</html:form> |
/branches/v3/impl/src/web/user/questionarios/pedagogicoEstudante/questionarioCourseDashBoard.jsp |
---|
5,6 → 5,7 |
<%@ page import="pt.estgp.estgweb.domain.QuestionarioPedagogicoCursoAfeto" %> |
<%@ page import="pt.estgp.estgweb.domain.QuestionarioPedagogicoUnidadeCurricularAfeta" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="java.net.URLEncoder" %> |
<%@ page import="java.util.List" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
46,6 → 47,7 |
",sum (case when u.usar = true AND rR.resposta is null then 1 else 0 end) AS porResponder " + |
",sum (case when u.usar = true AND rR.resposta is null then 0 else 1 end) AS respostasObtidas " + |
",count(distinct a.aluno)" + |
",u.id" + |
" from u in class " + QuestionarioPedagogicoUnidadeCurricularAfeta.class.getName() + " " + |
" join u.cursoAfeto c " + |
" join u.tipologiasRequisitadas t " + |
68,9 → 70,10 |
<th class="filter-name filter-select">Docente</th> |
<th>Tipologia</th> |
<th>Turma</th> |
<th>Por Responder</th> |
<th>Respondidos</th> |
<th>Estudantes</th> |
<th>Por Resp.</th> |
<th>Resp.</th> |
<th>Alunos</th> |
<th></th> |
</thead> |
<tbody> |
<% |
88,6 → 91,19 |
<td><label class="label label-danger" style="font-size: 1em"><%=tipologia[6]%></label></td> |
<td><label class="label <%=((Long)tipologia[7]) > 0 ? "label-success":"label-warning"%>" style="font-size: 1em"><%=tipologia[7]%></label></td> |
<td><label class="label label-info" style="font-size: 1em"><%=tipologia[8]%></label></td> |
<td> |
<% |
Long unidadeId = (Long) tipologia[9]; |
request.setAttribute("unidadeId",unidadeId); |
%> |
<% |
String nomeCursoEncoded = URLEncoder.encode(tipologia[1] + "(" + tipologia[0] + ")", "ISO-8859-1"); |
request.setAttribute("nomeUnidadeEncoded",nomeCursoEncoded); |
%> |
<html:link styleClass="btn btn-default" action="/user/startQuestionariosPaeMessagePedagogico.do?questionarioId=${Questionario.id}&formDescription=Mensagem para os alunos: ${nomeUnidadeEncoded}&targetDispatch=sendEmailQuestionarioUnidadeAfeta&cursoAfetoOrUnidadeAfetaOrQuestionarioAfetoId=${unidadeId}"> |
<span class="glyphicon glyphicon-envelope"> </span> |
</html:link> |
</td> |
</tr> |
<% |
} |
/branches/v3/impl/src/web/user/questionarios/pedagogicoEstudante/topnavQuestionarioPedagogicoSendMessage.jsp |
---|
New file |
0,0 → 1,35 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<%@ page import="pt.estgp.estgweb.web.form.questionarios.QuestionarioMessage" %> |
<% |
String qId = request.getParameter("questionarioId"); |
if(qId == null) |
qId = request.getParameter("questionario.id"); |
if(qId==null) |
{ |
QuestionarioMessage questionarioMessage = (QuestionarioMessage) request.getAttribute("QuestionarioMessage"); |
if(questionarioMessage != null) |
{ |
qId = "" + questionarioMessage.getQuestionarioId(); |
} |
} |
Long questionarioId = qId != null ? Long.parseLong(qId) : 0; |
/* |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {"questionarioId"}; |
Object[] args = {questionarioId}; |
QuestionarioImpl questionario = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"loadQuestionarioAdmin",args,names); |
*/ |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/homePae.do", "intranet.separator.home.back"); |
topNav.addNavPlace("/user/seeQuestionarios.do", "surveys"); |
if(questionarioId > 0) |
topNav.addNavPlace("/user/seeQuestionario.do?questionarioId=" + questionarioId, "survey.see",""+questionarioId); |
topNav.addNavPlace(null, "questionario.send.message.top.nav"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
/branches/v3/impl/build.properties |
---|
40,6 → 40,7 |
authentication.policy.service=Authenticate |
authentication.policy.username.msg.key=username |
authentication.policy.password.msg.key=password |
system.mail.standard.certificated.home.page=/user/home.do |
#mode.pae.enabled=true |
#system.theme=ipp |
159,8 → 160,16 |
email.templates.dir.build=${build.dir.classes}${email.templates.dir} |
email.templates.dir.conf=${conf.dir}${email.templates.dir} |
##If RoundRobin is false will use email.from property in from address |
email.server=smtp.gmail.com |
email.from=baco@estgp.pt |
email.use.round.robin=true |
#If not set will not use any security, only for localhost |
email.use.security=true |
#EMAIL SERVER SMTP GOOGLE |
email.password=DUMMY_PASSWORD_GMAIL |
email.user.prefix=bacodev |
email.user.sufix=@estgp.pt |
#email templates |
sms.templates.dir=/template/sms |
240,3 → 249,7 |
##Em testes colocar a true |
test.control.var=false |
admin.email.1=ci@estgp.pt |
admin.email.2=jmachado@estgp.pt |
/branches/v3/impl/build.xml |
---|
455,6 → 455,8 |
<replacefilter token="@hibernate.show.sql@" value="${hibernate.show.sql}"/> |
</replace>--> |
<replace file="${app.properties.build}/app.properties"> |
<replacefilter token="@admin.email.1@" value="${admin.email.1}"/> |
<replacefilter token="@admin.email.2@" value="${admin.email.2}"/> |
<replacefilter token="@tmp.dir@" value="${tmp.dir}"/> |
<replacefilter token="@data.dir@" value="${data.dir}"/> |
<replacefilter token="@out.dir@" value="${out.dir}"/> |
473,6 → 475,12 |
<!--System instance type specifications--> |
<replacefilter token="@email.password@" value="${email.password}"/> |
<replacefilter token="@email.user.sufix@" value="${email.user.sufix}"/> |
<replacefilter token="@email.use.round.robin@" value="${email.use.round.robin}"/> |
<replacefilter token="@email.use.security@" value="${email.use.security}"/> |
<replacefilter token="@email.user.prefix@" value="${email.user.prefix}"/> |
<replacefilter token="@email.from@" value="${email.from}"/> |
<replacefilter token="@email.server@" value="${email.server}"/> |
<replacefilter token="@test.control.var@" value="${test.control.var}"/> |
<replacefilter token="@mode.pae.enabled@" value="${mode.pae.enabled}"/> |
483,7 → 491,9 |
<replacefilter token="@system.redirections.policy.index.welcome@" value="${system.redirections.policy.index.welcome}"/> |
<replacefilter token="@system.redirections.policy.authentication.action@" value="${system.redirections.policy.authentication.action}"/> |
<replacefilter token="@system.redirections.policy.authentication.logout.action@" value="${system.redirections.policy.authentication.logout.action}"/> |
<replacefilter token="@system.mail.standard.certificated.home.page@" value="${system.mail.standard.certificated.home.page}"/> |
<replacefilter token="@system.intranet.url@" value="${system.intranet.url}"/> |
<replacefilter token="@system.public.url@" value="${system.public.url}"/> |