From 5799259547a5e3eab5ef93a607a669b5c2b632d5 Mon Sep 17 00:00:00 2001 From: Christian Corsano Date: Mon, 11 Feb 2008 22:47:22 +0000 Subject: [PATCH] =?UTF-8?q?Ajout=20du=20service=20d'envoi=20d'email=20Mise?= =?UTF-8?q?=20en=20place=20des=20invitations=20dans=20creer=20conf=20Mise?= =?UTF-8?q?=20en=20place=20de=20propriet=C3=A9s=20de=20config=20pour=20Ser?= =?UTF-8?q?vlet-config.xml=20Ajout=20des=20listes=20dynamiques=20dans=20le?= =?UTF-8?q?=20CSS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WEB-INF/classes/config.properties | 4 +- .../WEB-INF/classes/messages.properties | 4 +- .../WebContent/WEB-INF/jsp/addConference5.jsp | 27 ++- .../WEB-INF/jsp/choosePreference.jsp | 11 +- .../WEB-INF/jsp/submissionArticle.jsp | 79 +------- YACOSWeb/WebContent/WEB-INF/yacos-servlet.xml | 14 +- .../images/menu-header-background-repeat.png | Bin 0 -> 141 bytes .../yacos/addConference_invitation.js | 66 +++++++ .../javascripts/yacos/submissionArticle.js | 54 ++++++ YACOSWeb/WebContent/stylesheets/base.css | 28 +++ .../controller/AddConferenceController.java | 182 ++++++++++++------ .../system/controller/MailSenderService.java | 73 +++++++ .../web/system/session/SessionService.java | 18 ++ .../web/system/validation/UserValidator.java | 1 + 14 files changed, 397 insertions(+), 164 deletions(-) create mode 100644 YACOSWeb/WebContent/images/menu-header-background-repeat.png create mode 100644 YACOSWeb/WebContent/javascripts/yacos/addConference_invitation.js create mode 100644 YACOSWeb/WebContent/javascripts/yacos/submissionArticle.js create mode 100644 YACOSWeb/src/org/yacos/web/system/controller/MailSenderService.java diff --git a/YACOSWeb/WebContent/WEB-INF/classes/config.properties b/YACOSWeb/WebContent/WEB-INF/classes/config.properties index a297649..103935b 100644 --- a/YACOSWeb/WebContent/WEB-INF/classes/config.properties +++ b/YACOSWeb/WebContent/WEB-INF/classes/config.properties @@ -1 +1,3 @@ -download.dir.path=../server/default/data/uploadedFiles/ \ No newline at end of file +download.dir.path=../server/default/data/uploadedFiles/ +mailService.fromEmailAddress=system@yacos.dreamhosters.com +mailService.replyToEmailAddress=no-reply@yacos.dreamhosters.com \ No newline at end of file diff --git a/YACOSWeb/WebContent/WEB-INF/classes/messages.properties b/YACOSWeb/WebContent/WEB-INF/classes/messages.properties index 1269315..412aa16 100644 --- a/YACOSWeb/WebContent/WEB-INF/classes/messages.properties +++ b/YACOSWeb/WebContent/WEB-INF/classes/messages.properties @@ -97,7 +97,7 @@ form.submission.listauthor=Article's author form.submission.mainauthor=Main author form.submission.secondaryauthor=Secondary authors form.submission.file=File - +form.addConference.invitationsHeader=Invitations button.add=Add @@ -162,7 +162,7 @@ submissionArticle.file=please choose an article to submit #valider les articles validate.download=download the article -validate.report=consulter the result of the evaluation +validate.report=View the result of the evaluation validate.validate=validate validate.reject=reject diff --git a/YACOSWeb/WebContent/WEB-INF/jsp/addConference5.jsp b/YACOSWeb/WebContent/WEB-INF/jsp/addConference5.jsp index 4087d9d..74d266b 100644 --- a/YACOSWeb/WebContent/WEB-INF/jsp/addConference5.jsp +++ b/YACOSWeb/WebContent/WEB-INF/jsp/addConference5.jsp @@ -7,6 +7,8 @@ + + - - + @@ -108,11 +37,7 @@ var SecondaryAuthorManager = Class.create({ - "/> - - + "/>

diff --git a/YACOSWeb/WebContent/WEB-INF/yacos-servlet.xml b/YACOSWeb/WebContent/WEB-INF/yacos-servlet.xml index 7e61f77..7957e2a 100644 --- a/YACOSWeb/WebContent/WEB-INF/yacos-servlet.xml +++ b/YACOSWeb/WebContent/WEB-INF/yacos-servlet.xml @@ -202,7 +202,7 @@ class="org.yacos.web.PCmember.controller.CreateReportController"> - + @@ -212,6 +212,7 @@ class="org.yacos.web.system.controller.ListConferenceController"> + @@ -285,6 +286,17 @@ class="org.yacos.web.system.session.SessionService"> + + + + + + + + + + diff --git a/YACOSWeb/WebContent/images/menu-header-background-repeat.png b/YACOSWeb/WebContent/images/menu-header-background-repeat.png new file mode 100644 index 0000000000000000000000000000000000000000..d0beb7da9db770c1ff6b10eba987bb06a165bc54 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{T!3HEx%~ItDQk(@Ik;M!Q+`=Ht$S`Y;1W?f4 z)5S4_W2SBQLEZxf0*3@%1>99_esX`WVeOMC{6c0Lzt^h1bcx=nu>Hh=kR~2UHzjk) lY1#az?@s(F_9VUb7vp;&8%IBRnM$Bh44$rjF6*2UngCjUDX#zk literal 0 HcmV?d00001 diff --git a/YACOSWeb/WebContent/javascripts/yacos/addConference_invitation.js b/YACOSWeb/WebContent/javascripts/yacos/addConference_invitation.js new file mode 100644 index 0000000..bf7bbf4 --- /dev/null +++ b/YACOSWeb/WebContent/javascripts/yacos/addConference_invitation.js @@ -0,0 +1,66 @@ + +var InvitationsManager = Class.create({ + initialize: function(buttonAdd,buttonRemove,inputField){ + this.buttonAdd = buttonAdd; + this.buttonRemove = buttonRemove; + this.inputField = inputField; + $(buttonAdd).observe("click",this.addRemote.bind(this)); + $(buttonRemove).observe("click",this.removeRemote.bind(this)); + $(inputField).observe("keypress", this.keyPressHandler.bindAsEventListener(this)); + }, + select: function(event){ + var item = event.element(); + if(item.hasClassName('selected')){ + item.removeClassName('selected'); + } else { + item.addClassName('selected'); + } + }, + removeRemote: function() { + var itemsToRemove = $('invitationList').select('div.selected'); + var emailList = itemsToRemove.pluck('id'); + AddCriteriaJS.removeInvitations(emailList,this.remove.bind(this)); + }, + remove: function() { + var itemsToRemove = $('invitationList').select('div.selected'); + itemsToRemove.invoke('remove'); + }, + keyPressHandler: function(event){ + switch(event.keyCode){ + case Event.KEY_RETURN: + this.addRemote(); + event.stop(); + return false; + } + }, + addRemote: function(){ + var value = $(this.inputField).value; + AddCriteriaJS.addInvitation(value,function(success){ + if(success){ + this.add(value); + } + }.bind(this)); + }, + add: function(email) { + var elem = new Element('div', + { 'class':'dynamicListItem', + 'style':'display:none;height:0px;width:0px;', + 'id':email}).update(email); + $('invitationList').insert(elem); + elem.observe('click', this.select.bindAsEventListener()); + elem.appear(); + }, + refreshList: function(){ + AddCriteriaJS.getInvitations(function(emailList){ + this.removeAll(); + emailList.each(this.add.bind(this)); + }); + }, + removeAll: function(){ + var itemsToRemove = $('invitationList').select('div.dynamicListItem'); + itemsToRemove.invoke('remove'); + } +}); + +Event.observe(window,'load', function(){ + new InvitationsManager('inviteButton','removeInvitationButton','emailAddress')}); diff --git a/YACOSWeb/WebContent/javascripts/yacos/submissionArticle.js b/YACOSWeb/WebContent/javascripts/yacos/submissionArticle.js new file mode 100644 index 0000000..a16905a --- /dev/null +++ b/YACOSWeb/WebContent/javascripts/yacos/submissionArticle.js @@ -0,0 +1,54 @@ + +var SecondaryAuthorManager = Class.create({ + lastRef: 0, + initialize: function(buttonAdd,buttonRemove,inputField){ + this.buttonAdd = buttonAdd; + this.buttonRemove = buttonRemove; + this.inputField = inputField; + $(buttonAdd).observe("click",this.AddSecondaryAuthor.bind(this)); + $(buttonRemove).observe("click",this.RemoveSecondaryAuthor.bind(this)); + $(inputField).observe("keypress", this.KeyPressHandler.bindAsEventListener(this)); + }, + SelectSecondaryAuthor: function(event){ + var item = event.element(); + if(item.hasClassName('selected')){ + item.removeClassName('selected'); + } else { + item.addClassName('selected'); + } + }, + RemoveSecondaryAuthor: function() { + var itemsToRemove = $('secondaryAuthorList').select('div.selected'); + // Fade and remove + itemsToRemove.invoke('fade',{ + afterFinish: function(obj){ + obj.element.remove(); + } + }); + }, + KeyPressHandler: function(event){ + switch(event.keyCode){ + case Event.KEY_RETURN: + this.AddSecondaryAuthor(); + event.stop(); + return false; + } + }, + AddSecondaryAuthor: function() { + var ref = this.lastRef++; + var elemName = "liste["+ref+"]"; + var value = $('newSecondaryAuthorInput').value; + var hidden = new Element('input',{'id':elemName,'name':elemName,'type':'hidden','value':value}); + var elem = new Element('div', + { 'class':'dynamicListItem', + 'style':'display:none;height:0px;width:0px;', + 'id':elemName}).update(value).insert(hidden); + elem.observe('click', this.SelectSecondaryAuthor.bindAsEventListener()); + $('secondaryAuthorList').insert(elem); + $(this.inputField).clear(); + elem.appear(); + } +}); + +Event.observe(window,'load', function(){ + new SecondaryAuthorManager('addSecondaryButton','removeSecondaryButton','newSecondaryAuthorInput')}); diff --git a/YACOSWeb/WebContent/stylesheets/base.css b/YACOSWeb/WebContent/stylesheets/base.css index 9e1b5d1..d3c23f3 100644 --- a/YACOSWeb/WebContent/stylesheets/base.css +++ b/YACOSWeb/WebContent/stylesheets/base.css @@ -251,3 +251,31 @@ body { } /* @end */ + +/* @group dynamicList */ +.dynamicList { + display: table; + border-collapse: collapse; + border-spacing: 3px; + min-width: 200px; + min-height: 40px; + max-height: 200px; + overflow: auto; +} + +.dynamicList > * { + display: table-row; + border: thin solid #f57627; + padding:3px; +} + +.dynamicListHeader { + background-image: url(../images/menu-header-background-repeat.png); + background-repeat: repeat-x; + height: 23px; +} + +.selected { + background-color: #fea752; +} +/* @end */ \ No newline at end of file diff --git a/YACOSWeb/src/org/yacos/web/chairman/controller/AddConferenceController.java b/YACOSWeb/src/org/yacos/web/chairman/controller/AddConferenceController.java index a34b1d4..6951ce3 100644 --- a/YACOSWeb/src/org/yacos/web/chairman/controller/AddConferenceController.java +++ b/YACOSWeb/src/org/yacos/web/chairman/controller/AddConferenceController.java @@ -6,12 +6,18 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import org.acegisecurity.util.UrlUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.mail.MailSendException; import org.springframework.validation.BindException; import org.springframework.validation.Errors; +import org.springframework.web.context.support.WebApplicationContextUtils; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndViewDefiningException; import org.springframework.web.servlet.mvc.AbstractWizardFormController; @@ -19,13 +25,17 @@ import org.yacos.core.conferences.Conference; import org.yacos.core.conferences.IConferenceManager; import org.yacos.core.evaluation.Criterion; import org.yacos.core.evaluation.IEvaluationManager; +import org.yacos.core.exceptions.ConferenceDoesntExistException; import org.yacos.core.users.IUserManager; import org.yacos.core.users.User; import org.yacos.core.users.Role.RoleType; import org.yacos.web.chairman.form.FormConference; import org.yacos.web.chairman.validation.ConferenceValidator; +import org.yacos.web.system.controller.MailSenderService; import org.yacos.web.system.session.SessionService; +import com.sun.mail.smtp.SMTPAddressFailedException; + public class AddConferenceController extends AbstractWizardFormController { protected final Log logger = LogFactory.getLog(getClass()); @@ -33,7 +43,7 @@ public class AddConferenceController extends AbstractWizardFormController { private IConferenceManager conferenceManager; private IUserManager userManager; - + private IEvaluationManager evaluationManager; public IEvaluationManager getEvaluationManager() { @@ -62,6 +72,7 @@ public class AddConferenceController extends AbstractWizardFormController { private List listPersonBean; private List listPersonFiltered; private List listPersonAdded; + private List listInvitations; public void fillUser(String text) { if (text.equals("")) @@ -89,12 +100,6 @@ public class AddConferenceController extends AbstractWizardFormController { listPersonFiltered.remove(truePerson); } - public void addInvitation(String email){ - PersonBean invitationBean = new PersonBean(); - invitationBean.setLogin(email); - listPersonAdded.add(invitationBean); - } - public void deletePerson(PersonBean b) { PersonBean truePerson = getTruePerson(b.getLogin()); @@ -136,6 +141,30 @@ public class AddConferenceController extends AbstractWizardFormController { public List getUsersAdded() { return listPersonAdded; } + + public List getInvitation(){ + return listInvitations; + } + + public boolean addInvitation(String email){ + email = email.toLowerCase(); + Pattern emailPattern = Pattern.compile("^[a-z0-9._-]+@[a-z0-9._-]{2,}[.][a-z]{2,4}$"); // Regex + Matcher emailMatcher = emailPattern.matcher(email); + + if(!emailMatcher.matches()){ + return false; + } + + listInvitations.add(email); + + return true; + } + + public void removeInvitations(List emailList){ + for(String email : emailList){ + listInvitations.remove(email); + } + } // ########################################################### @@ -145,7 +174,7 @@ public class AddConferenceController extends AbstractWizardFormController { private Set criteria; private Set criteriaAll; - + public Set getCriteriaAll() { return criteriaAll; } @@ -153,7 +182,7 @@ public class AddConferenceController extends AbstractWizardFormController { public Set getCriteriaAdded() { return criteria; } - + public CriterionBean getTrueCriteria(int id) { for (CriterionBean cb : criteriaAll) { if (cb.getId() == id){ @@ -166,15 +195,15 @@ public class AddConferenceController extends AbstractWizardFormController { return cb; } } - + return null; } - + public void setCriterionClick(CriterionBean c) { if (c.getId() == -1) { c.setId(getNextId()); } - + criteria.remove(c); criteria.add(c); } @@ -185,18 +214,18 @@ public class AddConferenceController extends AbstractWizardFormController { } CriterionBean trueCriteria = getTrueCriteria(c.getId()); - + criteria.remove(trueCriteria); criteria.add(trueCriteria); criteriaAll.remove(trueCriteria); } public void deleteCriterion(CriterionBean c) { - + CriterionBean trueCriteria = getTrueCriteria(c.getId()); - - - + + + criteria.remove(trueCriteria); criteriaAll.add(trueCriteria); } @@ -216,14 +245,15 @@ public class AddConferenceController extends AbstractWizardFormController { protected Object formBackingObject(HttpServletRequest request) throws ModelAndViewDefiningException { logger.info(this.getClass().toString() + " dans le formBackingObject"); - + FormConference conference = new FormConference(); - + String action = request.getParameter("action"); - if (action == null || action.equals("")) { - // TODO : tester ici si le gars a le droit d'�tre ici - // a-t-il le droit de cr�er une conf�rence ? - + if (action == null || action.equals("")) + { + // TODO : tester ici si le gars a le droit d'être ici + // a-t-il le droit de créer une conférence ? + criteria = new HashSet(); criteriaAll = new HashSet(); List listCriterion = evaluationManager.getCriterions(); @@ -246,9 +276,10 @@ public class AddConferenceController extends AbstractWizardFormController { criteriaAll.add(cb); getNextId(); } - + listPersonBean = new ArrayList(); listPersonAdded = new ArrayList(); + listInvitations = new ArrayList(); listPersonFiltered = listPersonBean; List listUsers = userManager.getUsers(); for (User user : listUsers) { @@ -259,12 +290,12 @@ public class AddConferenceController extends AbstractWizardFormController { pb.setLogin(user.getLogin()); listPersonBean.add(pb); } - + return conference; } else if (action.equals("modify")) { Conference conf = SessionService.getInstance().getCurrentConference(); - + criteria = new HashSet(); criteriaAll = new HashSet(); @@ -309,6 +340,8 @@ public class AddConferenceController extends AbstractWizardFormController { listPersonBean = new ArrayList(); listPersonAdded = new ArrayList(); + // Should get the invitation tokens and allow them to be removed + listInvitations = new ArrayList(); listPersonFiltered = listPersonBean; List listUsers = userManager.getUsers(); for (User user : listUsers) { @@ -338,7 +371,7 @@ public class AddConferenceController extends AbstractWizardFormController { listPersonBean.remove(person); DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); - + conference.setTitle(conf.getTitle()); conference.setDateArticleParsed(conf.getDateArticle()); conference.setDateArticle(format.format(conf.getDateArticle())); @@ -350,7 +383,7 @@ public class AddConferenceController extends AbstractWizardFormController { conference.setDateStart(format.format(conf.getDateStart())); conference.setDescription(conf.getDescription()); conference.setOtherInformations(conf.getOtherInformations()); - + // TODO : ajouter ca ds conf ejb... /*conference.setPageNumber(pageNumber); conference.setSendInfo(sendInfo); @@ -358,18 +391,18 @@ public class AddConferenceController extends AbstractWizardFormController { conference.setTypeODT(typeODT); conference.setTypePDF(typePDF); conference.setTypeWord(typeWord);*/ - + return conference; - + } else { throw new ModelAndViewDefiningException(new ModelAndView("404error")); } - + } - - + + protected void validatePage(Object command, Errors errors, int page) { FormConference conference = (FormConference) command; ConferenceValidator conferenceValidator = (ConferenceValidator) getValidator(); @@ -393,36 +426,60 @@ public class AddConferenceController extends AbstractWizardFormController { String action = request.getParameter("action"); if (action == null || action.equals("")) { - Conference conf = conferenceManager.addConference( - conference.getTitle(), - conference.getDescription(), - conference.getOtherInformations(), - conference.getDateArticleParsed(), - conference.getDateArticleParsed(), - conference.getDateEvaluationParsed(), - conference.getDateStartParsed(), - conference.getDateEndParsed()); - - conference.setConferenceId(conf.getId()); - SessionService.getInstance().setCurrentConference(conf); - - for(CriterionBean criterion : criteria){ - conferenceManager.addCriterionToConference( - conf.getId(), - criterion.getLabel(), - criterion.getMin(), - criterion.getMax()); - } - - for(PersonBean personBean : listPersonAdded){ - conferenceManager.addPCMemberToConference( - conf.getId(), - personBean.getLogin()); - } - - conferenceManager.addRole(RoleType.CHAIRMAN, SessionService.getInstance().getCurrentUserLogin(), conf.getId()); + + Conference conf = conferenceManager.addConference( + conference.getTitle(), + conference.getDescription(), + conference.getOtherInformations(), + conference.getDateArticleParsed(), + conference.getDateArticleParsed(), + conference.getDateEvaluationParsed(), + conference.getDateStartParsed(), + conference.getDateEndParsed()); + + conference.setConferenceId(conf.getId()); + SessionService.getInstance().setCurrentConference(conf); + + for(CriterionBean criterion : criteria){ + conferenceManager.addCriterionToConference( + conf.getId(), + criterion.getLabel(), + criterion.getMin(), + criterion.getMax()); } - else { + + for(PersonBean personBean : listPersonAdded){ + conferenceManager.addPCMemberToConference( + conf.getId(), + personBean.getLogin()); + } + + String mailSubject = "YACOS "+conf.getTitle()+" invitation"; + String mailBody = "Greetings,\n"; + mailBody += "You've been invited to join the program comity of the conference :\n"; + mailBody += conf.getTitle()+"/n"; + mailBody += "You can register on this page : \n"; + String baseUrl = request.getSession().getServletContext().getContextPath(); + mailBody += baseUrl+"/registerUser.htm /n"; + mailBody += "Please note that you MUST use this eMail address in the registration form in order to get the appropriate credentials."; + // TODO : use a template + for(String invitationEmail : listInvitations){ + try { + conferenceManager.addInvitationToken(invitationEmail, RoleType.PCMEMBER, conf.getId()); + MailSenderService.getInstance().sendEMail(invitationEmail, mailSubject , mailBody); + } catch (ConferenceDoesntExistException e) { + // Should never happen + e.printStackTrace(); + } catch (MailSendException e) { + // TODO : see what we can do about this + e.printStackTrace(); + } + } + + conferenceManager.addRole(RoleType.CHAIRMAN, SessionService.getInstance().getCurrentUserLogin(), conf.getId()); + // Refresh the roles to take into account the chairman credentials + SessionService.getInstance().refreshAuthentication(); + } else { Conference conf = SessionService.getInstance().getCurrentConference(); conf.setTitle(conference.getTitle()); conf.setDescription(conference.getDescription()); @@ -452,7 +509,6 @@ public class AddConferenceController extends AbstractWizardFormController { conf.getId(), personBean.getLogin()); } - } return new ModelAndView("main"); diff --git a/YACOSWeb/src/org/yacos/web/system/controller/MailSenderService.java b/YACOSWeb/src/org/yacos/web/system/controller/MailSenderService.java new file mode 100644 index 0000000..f5570dd --- /dev/null +++ b/YACOSWeb/src/org/yacos/web/system/controller/MailSenderService.java @@ -0,0 +1,73 @@ +package org.yacos.web.system.controller; + +import org.springframework.mail.MailSender; +import org.springframework.mail.SimpleMailMessage; + +public class MailSenderService { + public static MailSenderService instance = new MailSenderService(); + private MailSender mailSender; + private String fromEmail; + private String replyTo; + + public MailSenderService(){ + + } + + public static MailSenderService getInstance(){ + if(instance == null){ + instance = new MailSenderService(); + } + return instance; + } + + public void sendEMail(String toEmail, String subject, String body){ + SimpleMailMessage message = composeEmail(toEmail, fromEmail, subject, body, replyTo, null, null); + mailSender.send(message); + } + + public SimpleMailMessage composeEmail(String toEmail, String fromEmail, String subject, String body){ + return composeEmail(toEmail, fromEmail, subject, body, fromEmail, null, null); + } + + public SimpleMailMessage composeEmail(String toEmail, String fromEmail, String subject, String body, String replyTo, String cc, String bcc){ + SimpleMailMessage mailMessage = new SimpleMailMessage(); + + mailMessage.setTo(toEmail); + mailMessage.setFrom(fromEmail); + mailMessage.setSubject(subject); + mailMessage.setText(body); + mailMessage.setReplyTo(replyTo); + if(cc!=null){ + mailMessage.setCc(cc); + } + if(bcc != null){ + mailMessage.setBcc(bcc); + } + + return mailMessage; + } + + public String getFromEmail() { + return fromEmail; + } + + public void setFromEmail(String fromEmail) { + this.fromEmail = fromEmail; + } + + public String getReplyTo() { + return replyTo; + } + + public void setReplyTo(String replyTo) { + this.replyTo = replyTo; + } + + public void setMailSender(MailSender mailSender) { + this.mailSender = mailSender; + } + + public MailSender getMailSender() { + return mailSender; + } +} diff --git a/YACOSWeb/src/org/yacos/web/system/session/SessionService.java b/YACOSWeb/src/org/yacos/web/system/session/SessionService.java index bac5f8f..fedf27a 100644 --- a/YACOSWeb/src/org/yacos/web/system/session/SessionService.java +++ b/YACOSWeb/src/org/yacos/web/system/session/SessionService.java @@ -74,6 +74,15 @@ public class SessionService { } public IConferenceManager getConferenceManager() { + if(conferenceManager == null){ + Context context; + try { + context = new InitialContext(); + conferenceManager = (IConferenceManager) context.lookup("ConferenceManagerBean/remote"); + } catch (NamingException e) { + e.printStackTrace(); + } + } return conferenceManager; } @@ -82,6 +91,15 @@ public class SessionService { } public IUserManager getUserManager() { + if(userManager == null){ + Context context; + try { + context = new InitialContext(); + userManager = (IUserManager) context.lookup("UserManagerBean/remote"); + } catch (NamingException e) { + e.printStackTrace(); + } + } return userManager; } diff --git a/YACOSWeb/src/org/yacos/web/system/validation/UserValidator.java b/YACOSWeb/src/org/yacos/web/system/validation/UserValidator.java index a722714..8ecff54 100644 --- a/YACOSWeb/src/org/yacos/web/system/validation/UserValidator.java +++ b/YACOSWeb/src/org/yacos/web/system/validation/UserValidator.java @@ -50,6 +50,7 @@ public class UserValidator implements Validator { // EMAIL VALIDATOR public void validateEmail(String email, Errors errors){ + email = email.toLowerCase(); Pattern emailPattern = Pattern.compile("^[a-z0-9._-]+@[a-z0-9._-]{2,}[.][a-z]{2,4}$"); // Regex Matcher emailMatcher = emailPattern.matcher(email);