/branches/v3/impl/src/java/jomm/web/tags/ErrorsForJsonTag.java |
---|
New file |
0,0 → 1,291 |
/* |
* $Id: ErrorsTag.java 471754 2006-11-06 14:55:09Z husted $ |
* |
* Licensed to the Apache Software Foundation (ASF) under one |
* or more contributor license agreements. See the NOTICE file |
* distributed with this work for additional information |
* regarding copyright ownership. The ASF licenses this file |
* to you under the Apache License, Version 2.0 (the |
* "License"); you may not use this file except in compliance |
* with the License. You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, |
* software distributed under the License is distributed on an |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
* KIND, either express or implied. See the License for the |
* specific language governing permissions and limitations |
* under the License. |
*/ |
package jomm.web.tags; |
import org.apache.struts.Globals; |
import org.apache.struts.action.ActionMessage; |
import org.apache.struts.action.ActionMessages; |
import org.apache.struts.taglib.TagUtils; |
import org.apache.struts.taglib.html.Constants; |
import org.apache.struts.util.MessageResources; |
import javax.servlet.jsp.JspException; |
import javax.servlet.jsp.tagext.TagSupport; |
import java.util.Iterator; |
/** |
* Custom tag that renders error messages if an appropriate request attribute |
* has been created. The tag looks for a request attribute with a reserved |
* key, and assumes that it is either a String, a String array, containing |
* message keys to be looked up in the module's MessageResources, or an object |
* of type <code>org.apache.struts.action.ActionErrors</code>. <p> The |
* following optional message keys will be utilized if corresponding messages |
* exist for them in the application resources: |
* |
* <ul> |
* |
* <li><b>errors.header</b> - If present, the corresponding message will be |
* rendered prior to the individual list of error messages.</li> |
* |
* <li><b>errors.footer</b> - If present, the corresponding message will be |
* rendered following the individual list of error messages.</li> |
* |
* <li><b>errors.prefix</b> - If present, the corresponding message will be |
* rendered before each individual error message.</li> |
* |
* <li><b>errors.suffix</b> - If present, the corresponding message will be |
* rendered after each individual error message.</li> |
* |
* </ul> |
* |
* @version $Rev: 471754 $ $Date: 2005-08-21 19:08:45 -0400 (Sun, 21 Aug 2005) |
* $ |
*/ |
public class ErrorsForJsonTag extends TagSupport { |
/** |
* The message resources for this package. |
*/ |
protected static MessageResources messages = |
MessageResources.getMessageResources(Constants.Package |
+ ".LocalStrings"); |
// ----------------------------------------------------------- Properties |
/** |
* The servlet context attribute key for our resources. |
*/ |
protected String bundle = null; |
/** |
* The session attribute key for our locale. |
*/ |
protected String locale = Globals.LOCALE_KEY; |
/** |
* The request attribute key for our error messages (if any). |
*/ |
protected String name = Globals.ERROR_KEY; |
/** |
* The name of the property for which error messages should be returned, |
* or <code>null</code> to return all errors. |
*/ |
protected String property = null; |
/** |
* The message resource key for errors header. |
*/ |
protected String header = null; |
/** |
* The message resource key for errors footer. |
*/ |
protected String footer = null; |
/** |
* The message resource key for errors prefix. |
*/ |
protected String prefix = null; |
/** |
* The message resource key for errors suffix. |
*/ |
protected String suffix = null; |
public String getBundle() { |
return (this.bundle); |
} |
public void setBundle(String bundle) { |
this.bundle = bundle; |
} |
public String getLocale() { |
return (this.locale); |
} |
public void setLocale(String locale) { |
this.locale = locale; |
} |
public String getName() { |
return (this.name); |
} |
public void setName(String name) { |
this.name = name; |
} |
public String getProperty() { |
return (this.property); |
} |
public void setProperty(String property) { |
this.property = property; |
} |
public String getHeader() { |
return (header == null) ? "errors.header.for.json" : header; |
} |
public void setHeader(String header) { |
this.header = header; |
} |
public String getFooter() { |
return (footer == null) ? "errors.footer.for.json" : footer; |
} |
public void setFooter(String footer) { |
this.footer = footer; |
} |
public String getPrefix() { |
return (prefix == null) ? "errors.prefix.for.json" : prefix; |
} |
public void setPrefix(String prefix) { |
this.prefix = prefix; |
} |
public String getSuffix() { |
return (suffix == null) ? "errors.suffix.for.json" : suffix; |
} |
public void setSuffix(String suffix) { |
this.suffix = suffix; |
} |
// ------------------------------------------------------- Public Methods |
/** |
* Render the specified error messages if there are any. |
* |
* @throws javax.servlet.jsp.JspException if a JSP exception has occurred |
*/ |
public int doStartTag() throws JspException { |
// Were any error messages specified? |
ActionMessages messages; |
try { |
messages = |
TagUtils.getInstance().getActionMessages(pageContext, Globals.ERROR_KEY); |
} catch (JspException e) { |
TagUtils.getInstance().saveException(pageContext, e); |
throw e; |
} |
if ((messages == null) || messages.isEmpty()) { |
return (EVAL_BODY_INCLUDE); |
} |
boolean headerPresent = |
TagUtils.getInstance().present(pageContext, bundle, locale, |
getHeader()); |
boolean footerPresent = |
TagUtils.getInstance().present(pageContext, bundle, locale, |
getFooter()); |
boolean prefixPresent = |
TagUtils.getInstance().present(pageContext, bundle, locale, |
getPrefix()); |
boolean suffixPresent = |
TagUtils.getInstance().present(pageContext, bundle, locale, |
getSuffix()); |
// Render the error messages appropriately |
StringBuffer results = new StringBuffer(); |
boolean headerDone = false; |
String message; |
Iterator reports = |
(property == null) ? messages.get() : messages.get(property); |
while (reports.hasNext()) { |
ActionMessage report = (ActionMessage) reports.next(); |
if (!headerDone) { |
if (headerPresent) { |
message = |
TagUtils.getInstance().message(pageContext, bundle, |
locale, getHeader()); |
results.append(message); |
} |
headerDone = true; |
} |
if (prefixPresent) { |
message = |
TagUtils.getInstance().message(pageContext, bundle, locale, |
getPrefix()); |
results.append(message); |
} |
if (report.isResource()) { |
message = |
TagUtils.getInstance().message(pageContext, bundle, locale, |
report.getKey(), report.getValues()); |
} else { |
message = report.getKey(); |
} |
if (message != null) { |
results.append(message); |
} |
if (suffixPresent) { |
message = |
TagUtils.getInstance().message(pageContext, bundle, locale, |
getSuffix()); |
results.append(message); |
} |
} |
if (headerDone && footerPresent) { |
message = |
TagUtils.getInstance().message(pageContext, bundle, locale, |
getFooter()); |
results.append(message); |
} |
TagUtils.getInstance().write(pageContext, results.toString()); |
return (EVAL_BODY_INCLUDE); |
} |
/** |
* Release any acquired resources. |
*/ |
public void release() { |
super.release(); |
bundle = Globals.MESSAGES_KEY; |
locale = Globals.LOCALE_KEY; |
name = Globals.ERROR_KEY; |
property = null; |
header = null; |
footer = null; |
prefix = null; |
suffix = null; |
} |
} |
Property changes: |
Added: svn:executable |
+ * |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/users/CreateUserService.java |
---|
6,10 → 6,10 |
import pt.estgp.estgweb.domain.User; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.services.common.CommonServicesManager; |
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException; |
import pt.estgp.estgweb.services.expceptions.FieldException; |
import pt.estgp.estgweb.services.expceptions.ServiceException; |
import pt.estgp.estgweb.services.common.CommonServicesManager; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.util.Date; |
60,4 → 60,18 |
else |
logger.info(userSession.getUser().getName() + " - Creating user:" + user.getUsername() + " " + user.getName()); |
} |
public User addRole2User(Long userId, String role, UserSession userSession) throws ServiceException |
{ |
User u = DaoFactory.getUserDaoImpl().load(userId); |
u.addRole(role); |
return u; |
} |
public User removeRole2User(Long userId, String role, UserSession userSession) throws ServiceException |
{ |
User u = DaoFactory.getUserDaoImpl().load(userId); |
u.removeRole(role); |
return u; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/users/UserRoleConfigService.java |
---|
181,6 → 181,8 |
"user.role.servicesPrograms=Gestão de Programas Curriculares\n" + |
"user.role.servicesStudiesPlans=Gestão de Planos de Estudos\n" + |
"user.role.servicesCoursesManagement=Gestão de Cursos\n" + |
"user.role.event_class_manager=Gestão de Classes de Eventos\n" + |
"user.role.event_manager_nfc=Gestão de Eventos do Nucleo de Formacao Continua\n" + |
"user.role.administrativeCouncil=Membro da Direcção\n" + |
"user.role.administrativeCouncil.director=Director\n" + |
"user.role.administrativeCouncil.vice=Vice Director\n" + |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/events/EventsService.java |
---|
New file |
0,0 → 1,194 |
package pt.estgp.estgweb.services.events; |
import jomm.utils.FilesUtils; |
import org.apache.log4j.Logger; |
import org.apache.struts.upload.FormFile; |
import pt.estgp.estgweb.domain.EventClass; |
import pt.estgp.estgweb.domain.EventFormacoes; |
import pt.estgp.estgweb.domain.EventGeneric; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum; |
import pt.estgp.estgweb.services.data.RepositoryService; |
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.io.IOException; |
/** |
* Created by jorgemachado on 04/10/16. |
*/ |
public class EventsService implements IService |
{ |
private static final Logger logger = Logger.getLogger(EventsService.class); |
public void save(EventClass eventClass, UserSession userSession) |
{ |
if(eventClass.getId() <= 0) |
{ |
DaoFactory.getEventClassDaoImpl().save(eventClass); |
} |
else |
{ |
EventClass persistent = DaoFactory.getEventClassDaoImpl().load(eventClass.getId()); |
persistent.setName(eventClass.getName()); |
persistent.setDescription(eventClass.getDescription()); |
persistent.setManagersRole(eventClass.getManagersRole()); |
persistent.setEventosFormacoes(eventClass.isEventosFormacoes()); |
persistent.setEventosGenericos(eventClass.isEventosGenericos()); |
} |
} |
public void delete(long eventClassId, UserSession userSession) throws NotAuthorizedException { |
EventClass persistent = DaoFactory.getEventClassDaoImpl().load(eventClassId); |
if(persistent.getEvents().size() > 0) |
{ |
throw new NotAuthorizedException("Existem eventos nesta classe"); |
} |
else |
{ |
DaoFactory.getEventClassDaoImpl().delete(persistent); |
} |
} |
public void saveEvent(long eventClassId,EventGeneric event, FormFile flyer, UserSession userSession) |
{ |
System.out.println("Serviço de gravação de eventos OK"); |
System.out.println(event.getDataAberturaFormulario()); |
System.out.println(event.getDataFechoFormulario()); |
System.out.println(event.getDataPublicacao()); |
System.out.println(event.getDataInicio()); |
EventClass eventClass; |
EventGeneric eventPersistent; |
if(event.getId() <= 0) |
{ |
eventClass = DaoFactory.getEventClassDaoImpl().load(eventClassId); |
event.setEventClass(eventClass); |
event.setOwner(userSession.getUser()); |
if(event instanceof EventFormacoes) |
{ |
DaoFactory.getEventFormacoesDaoImpl().save((EventFormacoes) event); |
} |
else if(event instanceof EventGeneric) |
{ |
DaoFactory.getEventGenericDaoImpl().save(event); |
} |
updateFlyer(event, flyer, userSession); |
eventPersistent = event; |
} |
else |
{ |
eventPersistent = DaoFactory.getEventGenericDaoImpl().load(event.getId()); |
eventClass = eventPersistent.getEventClass(); |
updateEventFields(event,eventPersistent,flyer,userSession); |
} |
//todo falta docentes apenas depois de estar o evento gravado por razões de já haver unidade |
logger.info("Propiedades do Evento Gravadas e Flyer actualizado, vamos iniciar operações de actividade curricular"); |
//EVENTO SALVO |
} |
private void updateEventFields(EventGeneric event, EventGeneric eventPersistent,FormFile flyer,UserSession userSession) |
{ |
eventPersistent.setAtivo(event.isAtivo()); |
//CONTROLO |
eventPersistent.setDataPublicacao(event.getDataPublicacao()); |
eventPersistent.setDataAberturaFormulario(event.getDataAberturaFormulario()); |
eventPersistent.setDataFechoFormulario(event.getDataFechoFormulario()); |
eventPersistent.setCategory(event.getCategory()); |
eventPersistent.setSubCategory(event.getSubCategory()); |
eventPersistent.setRegisteredUsersOnly(event.isRegisteredUsersOnly()); |
eventPersistent.setTitle(event.getTitle()); |
eventPersistent.setDescription(event.getDescription()); |
eventPersistent.setObservacoes(event.getObservacoes()); |
eventPersistent.setLocais(event.getLocais()); |
eventPersistent.setDataInicio(event.getDataInicio()); |
eventPersistent.setPreInformation(event.getPreInformation()); |
eventPersistent.setAfterRegisterInformation(event.getAfterRegisterInformation()); |
updateFlyer(eventPersistent, flyer, userSession); |
eventPersistent.setDataNascimento(event.isDataNascimento()); |
eventPersistent.setEmpresa(event.isEmpresa()); |
eventPersistent.setEscolaridade(event.isEscolaridade()); |
eventPersistent.setProfissao(event.isProfissao()); |
eventPersistent.setSexo(event.isSexo()); |
eventPersistent.setTelefone1(event.isTelefone1()); |
eventPersistent.setTelefone2(event.isTelefone2()); |
eventPersistent.setPais(event.isPais()); |
eventPersistent.setMorada(event.isMorada()); |
eventPersistent.setNif(event.isNif()); |
eventPersistent.setBi(event.isBi()); |
if(event instanceof EventFormacoes) |
{ |
EventFormacoes eventFormacoes = (EventFormacoes) event; |
EventFormacoes eventPersistentFormacoes = (EventFormacoes) eventPersistent; |
eventPersistentFormacoes.setReferencia(eventFormacoes.getReferencia()); |
eventPersistentFormacoes.setUnidadeOrganica(eventFormacoes.getUnidadeOrganica()); |
eventPersistentFormacoes.setLocalDeRealizacao(eventFormacoes.getLocalDeRealizacao()); |
eventPersistentFormacoes.setDominio(eventFormacoes.getDominio()); |
eventPersistentFormacoes.setOutroDominio(eventFormacoes.getOutroDominio()); |
eventPersistentFormacoes.setDestinatarios(eventFormacoes.getDestinatarios()); |
eventPersistentFormacoes.setConteudos(eventFormacoes.getConteudos()); |
//CONTROLO FINANCEIRO |
eventPersistentFormacoes.setStatus(eventFormacoes.getStatus()); |
eventPersistentFormacoes.setNumeroVagas(eventFormacoes.getNumeroVagas()); |
eventPersistentFormacoes.setDuracaoHoras(eventFormacoes.getDuracaoHoras()); |
eventPersistentFormacoes.setEcts(eventFormacoes.getEcts()); |
eventPersistentFormacoes.setDiasDuracao(eventFormacoes.getDiasDuracao()); |
eventPersistentFormacoes.setCustoFormacao(eventFormacoes.getCustoFormacao()); |
eventPersistentFormacoes.setPrecoFormando(eventFormacoes.getPrecoFormando()); |
eventPersistentFormacoes.setPercentagemMinimaLucro(eventFormacoes.getPercentagemMinimaLucro()); |
} |
} |
private void updateFlyer(EventGeneric eventPersistent, FormFile flyer, UserSession userSession) { |
if(flyer != null && flyer.getFileSize() > 0) |
{ |
RepositoryService repositoryService = new RepositoryService(); |
if(eventPersistent.getFlyerRepositoryStream() != null && eventPersistent.getFlyerRepositoryStream().trim().length() > 0) |
{ |
try { |
repositoryService.updateRepositoryFile( |
eventPersistent.getFlyerRepositoryStream(), |
flyer.getInputStream(), |
flyer.getContentType(), |
FilesUtils.getExtension(flyer.getFileName()), |
flyer.getFileSize(), |
flyer.getFileName(), |
"Flyer de formacao " + eventPersistent.getTitle(), |
ResourceAccessControlEnum.publicDomain |
); |
} catch (IOException e) { |
logger.error(e,e); |
} |
} |
else |
{ |
try { |
String repositoryIdentifier = repositoryService.storeRepositoryFile( |
flyer.getInputStream(), |
flyer.getContentType(), |
FilesUtils.getExtension(flyer.getFileName()), |
flyer.getFileSize(), |
flyer.getFileName(), |
"Flyer de formacao " + eventPersistent.getTitle(), |
ResourceAccessControlEnum.publicDomain, |
userSession |
); |
eventPersistent.setFlyerRepositoryStream(repositoryIdentifier); |
} catch (IOException e) { |
logger.error(e,e); |
} |
} |
} |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/EventFormacoesImpl.java |
---|
4,4 → 4,30 |
* Created by jorgemachado on 07/09/16. |
*/ |
public class EventFormacoesImpl extends EventFormacoes { |
private Double lucro = null; |
private Boolean rentavel = false; |
private Double percentagemLucro = 0.0; |
public double getLucroPrevisto() |
{ |
if(lucro == null) |
{ |
double entradas = getPrecoFormando() * getEventRecords().size(); |
double custos = getCustoFormacao(); |
lucro = entradas - custos; |
percentagemLucro = lucro <= 0 ? 0.0 : lucro/custos; |
if(percentagemLucro > getPercentagemMinimaLucro()) |
rentavel = true; |
} |
return lucro; |
} |
public double getPercentagemLucro(){ |
getLucroPrevisto(); |
return percentagemLucro; |
} |
public boolean isRentavel(){ |
getLucroPrevisto(); |
return rentavel; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/EventClassImpl.java |
---|
1,29 → 1,8 |
package pt.estgp.estgweb.domain; |
import java.io.Serializable; |
import java.util.List; |
/** |
* Created by jorgemachado on 05/09/16. |
*/ |
public class EventClassImpl extends EventClass { |
@Override |
public GenericUser getOwner() { |
return null; |
} |
@Override |
public List<String> getOwnerRoles() { |
return null; |
} |
@Override |
public String getChoosedOwnerRole() { |
return null; |
} |
@Override |
public Serializable getSerializable() { |
return null; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/DomainObjectFactory.java |
---|
431,4 → 431,15 |
public static CourseDepartmentImpl createCourseDepartmentImpl() { |
return new CourseDepartmentImpl(); |
} |
public static EventClassImpl createEventClass() { |
return new EventClassImpl(); |
} |
public static EventGenericImpl createEventGenericImpl() { |
return new EventGenericImpl(); |
} |
public static EventFormacoesImpl createEventFormacoesImpl() { |
return new EventFormacoesImpl(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/UserDaoImpl.java |
---|
191,6 → 191,11 |
return findUsers(textToSearch, null); |
} |
public List<User> findUsersFromClassUserAndTeacherOnly() |
{ |
return createCriteria().add(or(eq("class","UserImpl"),eq("class","TeacherImpl"))).list(); |
} |
public List<User> findUsers(String textToSearch, String typeToSearch) |
{ |
Criteria criteria; |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/EventFormacoesDaoImpl.java |
---|
New file |
0,0 → 1,24 |
package pt.estgp.estgweb.domain.dao.impl; |
/** |
* @author Jorge Machado |
* @date 28/Fev/2008 |
* @time 2:51:06 |
* @see pt.estgp.estgweb.domain.dao.impl |
*/ |
public class EventFormacoesDaoImpl extends EventFormacoesDao |
{ |
private EventFormacoesDaoImpl() |
{ |
} |
public static EventFormacoesDaoImpl getInstance() |
{ |
if (myInstance == null) |
myInstance = new EventFormacoesDaoImpl(); |
return (EventFormacoesDaoImpl) myInstance; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/EventClassDaoImpl.java |
---|
New file |
0,0 → 1,24 |
package pt.estgp.estgweb.domain.dao.impl; |
/** |
* @author Jorge Machado |
* @date 28/Fev/2008 |
* @time 2:51:06 |
* @see pt.estgp.estgweb.domain.dao.impl |
*/ |
public class EventClassDaoImpl extends EventClassDao |
{ |
private EventClassDaoImpl() |
{ |
} |
public static EventClassDaoImpl getInstance() |
{ |
if (myInstance == null) |
myInstance = new EventClassDaoImpl(); |
return (EventClassDaoImpl) myInstance; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/EventGenericDaoImpl.java |
---|
New file |
0,0 → 1,24 |
package pt.estgp.estgweb.domain.dao.impl; |
/** |
* @author Jorge Machado |
* @date 28/Fev/2008 |
* @time 2:51:06 |
* @see pt.estgp.estgweb.domain.dao.impl |
*/ |
public class EventGenericDaoImpl extends EventGenericDao |
{ |
private EventGenericDaoImpl() |
{ |
} |
public static EventGenericDaoImpl getInstance() |
{ |
if (myInstance == null) |
myInstance = new EventGenericDaoImpl(); |
return (EventGenericDaoImpl) myInstance; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/UserRoleConfigDaoImpl.java |
---|
7,6 → 7,7 |
import java.util.List; |
import static org.hibernate.criterion.Restrictions.eq; |
import static org.hibernate.criterion.Restrictions.like; |
/** |
* Created by IntelliJ IDEA. |
36,4 → 37,9 |
return null; |
} |
public List<UserRoleConfig> findRolesByPrefix(String prefix){ |
List<UserRoleConfig> userRoleConfigList = createCriteria().add(like("role", prefix + "%")).list(); |
return userRoleConfigList; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/DaoFactory.java |
---|
12,6 → 12,8 |
{ |
private static CourseDepartmentDaoImpl courseDepartmentDaoImpl; |
private static EventClassDaoImpl eventClassDaoImpl; |
private static EventFormacoesDaoImpl eventFormacoesDaoImpl; |
public static JobDaoImpl getJobDaoImpl() |
{ |
424,4 → 426,18 |
public static CourseDepartmentDaoImpl getCourseDepartmentDaoImpl() { |
return CourseDepartmentDaoImpl.getInstance(); |
} |
public static EventClassDaoImpl getEventClassDaoImpl() |
{ |
return EventClassDaoImpl.getInstance(); |
} |
public static EventFormacoesDaoImpl getEventFormacoesDaoImpl() |
{ |
return EventFormacoesDaoImpl.getInstance(); |
} |
public static EventGenericDaoImpl getEventGenericDaoImpl() |
{ |
return EventGenericDaoImpl.getInstance(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/GenericUserImpl.java |
---|
50,6 → 50,18 |
return false; |
} |
public boolean hasRolePrefix(String r) |
{ |
if (r == null || getRoles() == null || getRoles().length() == 0) |
return false; |
for (String role : RoleManager.getRolesFromSerial(getRoles())) |
{ |
if (role.startsWith(r)) |
return true; |
} |
return false; |
} |
public boolean hasRole(List<String> roles) |
{ |
return RoleManager.hasRole(this,roles); |
/branches/v3/impl/src/java/pt/estgp/estgweb/filters/filters/EventManager.java |
---|
New file |
0,0 → 1,61 |
package pt.estgp.estgweb.filters.filters; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.EventClass; |
import pt.estgp.estgweb.domain.EventGeneric; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.filters.chains.AdminControlFilter; |
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException; |
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.utils.RoleManager; |
import pt.utl.ist.berserk.ServiceRequest; |
import pt.utl.ist.berserk.ServiceResponse; |
import pt.utl.ist.berserk.logic.filterManager.FilterParameters; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException; |
public class EventManager extends AdminControlFilter { |
private static final Logger logger = Logger.getLogger(EventManager.class); |
private static final String ALL_ROLE = ConfigProperties.getProperty("user.super"); |
public void execute(ServiceRequest request, ServiceResponse response) |
throws FilterException, Exception |
{ |
} |
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception |
{ |
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY); |
if(userSession.getUser() == null) |
{ |
logger.info("try access restricted area:" + request.getRequester()); |
throw new NeedAuthenticationException(); |
} |
if(userSession.getUser().isSuperuserOrAdmin()) |
return; |
String eventClassIdParameter = (String) filterParameters.getParameter(0); |
EventGeneric eventParameter = (EventGeneric) filterParameters.getParameter(1); |
if(eventParameter.getId() > 0) |
{ |
EventGeneric persistent = DaoFactory.getEventGenericDaoImpl().load(eventParameter.getId()); |
if(RoleManager.hasRole(userSession.getUser(), persistent.getEventClass().getManagersRole())) |
return; |
} |
else |
{ |
EventClass eventClass = DaoFactory.getEventClassDaoImpl().load(eventClassIdParameter); |
if(RoleManager.hasRole(userSession.getUser(), eventClass.getManagersRole())) |
return; |
} |
throw new AccessDeniedOperationException("fail.role"); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/tags/HasRolePrefixTag.java |
---|
New file |
0,0 → 1,90 |
package pt.estgp.estgweb.web.tags; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.UserSessionImpl; |
import javax.servlet.jsp.JspException; |
import javax.servlet.jsp.JspWriter; |
import javax.servlet.jsp.tagext.BodyTagSupport; |
public class HasRolePrefixTag extends BodyTagSupport |
{ |
private static final Logger logger = Logger.getLogger(HasRolePrefixTag.class); |
private String role; |
private String rolePrefix; |
public String getRolePrefix() { |
return rolePrefix; |
} |
public void setRolePrefix(String rolePrefix) { |
this.rolePrefix = rolePrefix; |
} |
public String getRole() |
{ |
return role; |
} |
public void setRole(String role) |
{ |
this.role = role; |
} |
public int doStartTag() throws JspException |
{ |
if(go()) |
return EVAL_BODY_TAG; |
else |
return SKIP_BODY; |
} |
public boolean go() |
{ |
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(Globals.USER_SESSION_KEY); |
if(userSession != null && userSession.getUser() != null) |
{ |
String[] roles = role.split(","); |
String[] rolesPrefix = rolePrefix.split(","); |
for(String role: roles) |
{ |
if(userSession.getUser().hasRole(role)) |
return true; |
} |
for(String role: rolesPrefix) |
{ |
if(userSession.getUser().hasRolePrefix(role)) |
return true; |
} |
} |
return false; |
} |
public int doEndTag() throws JspException |
{ |
if (go()) |
{ |
String toPage = bodyContent.getString().trim(); |
JspWriter writer = pageContext.getOut(); |
try |
{ |
writer.write(toPage); |
} |
catch (Exception e) |
{ |
logger.error(e, e); |
throw new JspException(e); |
} |
} |
// Continue processing this page |
return EVAL_PAGE; |
} |
} |
Property changes: |
Added: svn:executable |
+ * |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/events/MyEventGenericForm.java |
---|
New file |
0,0 → 1,15 |
package pt.estgp.estgweb.web.form.events; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
/** |
* Created by jorgemachado on 07/10/16. |
*/ |
public class MyEventGenericForm extends MyEventForm |
{ |
public MyEventGenericForm() |
{ |
event = DomainObjectFactory.createEventGenericImpl(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/events/MyEventFormacoesForm.java |
---|
New file |
0,0 → 1,22 |
package pt.estgp.estgweb.web.form.events; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
import pt.estgp.estgweb.domain.EventFormacoes; |
/** |
* Created by jorgemachado on 07/10/16. |
*/ |
public class MyEventFormacoesForm extends MyEventForm |
{ |
@Override |
public EventFormacoes getEvent() { |
return (EventFormacoes) super.getEvent(); |
} |
public MyEventFormacoesForm() |
{ |
super(); |
event = DomainObjectFactory.createEventFormacoesImpl(); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/events/EventClassForm.java |
---|
New file |
0,0 → 1,65 |
package pt.estgp.estgweb.web.form.events; |
import org.apache.struts.action.ActionErrors; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
import pt.estgp.estgweb.domain.EventClass; |
import pt.estgp.estgweb.web.form.ApplicationForm; |
/** |
* @author Jorge Machado |
* @date 25/Jun/2008 |
* @see pt.estgp.estgweb.web.form.courses |
*/ |
public class EventClassForm extends ApplicationForm |
{ |
private long eventId; |
private EventClass eventClass; |
public EventClassForm() |
{ |
eventClass = DomainObjectFactory.createEventClass(); |
} |
public long getEventId() { |
return eventId; |
} |
public void setEventId(long eventId) { |
this.eventId = eventId; |
} |
public EventClass getEventClass() { |
return eventClass; |
} |
public void setEventClass(EventClass eventClass) { |
this.eventClass = eventClass; |
} |
public ActionErrors validate(org.apache.struts.action.ActionMapping actionMapping, javax.servlet.http.HttpServletRequest httpServletRequest) |
{ |
ActionErrors errors = new ActionErrors(); |
if(eventClass.getName() == null || eventClass.getName().length() == 0) |
{ |
addMessageWithKeys(errors,httpServletRequest,"errors.required","event.name"); |
} |
if(eventClass.getManagersRole() == null || eventClass.getManagersRole().length() == 0) |
{ |
addMessageWithKeys(errors,httpServletRequest,"errors.required","event.managerRole"); |
} |
if(!eventClass.isEventosFormacoes() && !eventClass.isEventosGenericos() ) |
{ |
addMessageWithKeys(errors,httpServletRequest,"errors.required","event.permited.types"); |
} |
return errors; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/events/MyEventForm.java |
---|
New file |
0,0 → 1,97 |
package pt.estgp.estgweb.web.form.events; |
import org.apache.struts.upload.FormFile; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
import pt.estgp.estgweb.domain.EventGeneric; |
import pt.estgp.estgweb.web.form.ApplicationForm; |
/** |
* @author Jorge Machado |
* @date 25/Jun/2008 |
* @see pt.estgp.estgweb.web.form.courses |
*/ |
public class MyEventForm extends ApplicationForm |
{ |
private long eventClassId; |
private long eventId; |
protected EventGeneric event; |
private FormFile flyerFile; |
private String dataAberturaFormulario; |
private String dataFechoFormulario; |
private String dataPublicacao; |
private String dataInicio; |
public MyEventForm() |
{ |
event = DomainObjectFactory.createEventFormacoesImpl(); |
} |
public long getEventClassId() { |
return eventClassId; |
} |
public void setEventClassId(long eventClassId) { |
this.eventClassId = eventClassId; |
} |
public long getEventId() { |
return eventId; |
} |
public void setEventId(long eventId) { |
this.eventId = eventId; |
} |
public EventGeneric getEvent() { |
return event; |
} |
public void setEvent(EventGeneric event) { |
this.event = event; |
} |
public FormFile getFlyerFile() { |
return flyerFile; |
} |
public void setFlyerFile(FormFile flyerFile) { |
this.flyerFile = flyerFile; |
} |
public String getDataAberturaFormulario() { |
return dataAberturaFormulario; |
} |
public void setDataAberturaFormulario(String dataAberturaFormulario) { |
this.dataAberturaFormulario = dataAberturaFormulario; |
} |
public String getDataFechoFormulario() { |
return dataFechoFormulario; |
} |
public void setDataFechoFormulario(String dataFechoFormulario) { |
this.dataFechoFormulario = dataFechoFormulario; |
} |
public String getDataPublicacao() { |
return dataPublicacao; |
} |
public void setDataPublicacao(String dataPublicacao) { |
this.dataPublicacao = dataPublicacao; |
} |
public String getDataInicio() { |
return dataInicio; |
} |
public void setDataInicio(String dataInicio) { |
this.dataInicio = dataInicio; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/events/EventsController.java |
---|
New file |
0,0 → 1,116 |
package pt.estgp.estgweb.web.controllers.events; |
import org.apache.log4j.Logger; |
import org.apache.struts.action.ActionForm; |
import org.apache.struts.action.ActionForward; |
import org.apache.struts.action.ActionMapping; |
import pt.estgp.estgweb.domain.EventFormacoes; |
import pt.estgp.estgweb.filters.exceptions.NotFoundException; |
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController; |
import pt.estgp.estgweb.web.form.events.EventClassForm; |
import pt.estgp.estgweb.web.form.events.MyEventForm; |
import pt.estgp.estgweb.web.utils.DatesUtils; |
import pt.estgp.estgweb.web.utils.RequestUtils; |
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException; |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
/** |
* @author Jorge Machado |
* @date 26/Fev/2008 |
* @time 18:01:54 |
* @see pt.estgp.estgweb.web |
*/ |
public class EventsController extends ApplicationDispatchController |
{ |
private static final Logger logger = Logger.getLogger(EventsController.class); |
public ActionForward saveClassAjax(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
try{ |
EventClassForm frm = (EventClassForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
Object[] args = {frm.getEventClass()}; |
sm.execute(RequestUtils.getRequester(request, response),"EventsSaveClass",args,names); |
System.out.println(frm.getEventClass().getName()); |
return mapping.findForward("jsonOk"); |
} |
catch (FilterChainFailedException e) |
{ |
addError(request, "error.401.authenticated"); |
return mapping.findForward("jsonErrors"); |
} |
catch (NotFoundException e) |
{ |
addError(request,"error.404.explain"); |
return mapping.findForward("jsonErrors"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
addError(request, "error.500"); |
return mapping.findForward("jsonErrors"); |
} |
} |
public ActionForward saveEvent(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable |
{ |
try{ |
MyEventForm frm = (MyEventForm) form; |
frm.getEvent().setDataAberturaFormulario(DatesUtils.getDateFromString(frm.getDataAberturaFormulario())); |
frm.getEvent().setDataFechoFormulario(DatesUtils.getDateFromString(frm.getDataFechoFormulario())); |
frm.getEvent().setDataPublicacao(DatesUtils.getDateFromString(frm.getDataPublicacao())); |
frm.getEvent().setDataInicio(DatesUtils.getDateFromString(frm.getDataInicio())); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {"eventClassId","event","flyer"}; |
Object[] args = {frm.getEventClassId(), frm.getEvent(),frm.getFlyerFile()}; |
sm.execute(RequestUtils.getRequester(request, response),"EventsSaveEvent",args,names); |
addMessageAsString(request, "Evento " + frm.getEvent().getTitle() + ": Adicionado com Sucesso"); |
if(frm.getEvent() instanceof EventFormacoes) |
addMessageAsString(request,"Para adicionar professores volte a entrar no formulário"); |
return mapping.findForward("ok"); |
} |
catch (FilterChainFailedException e) |
{ |
addError(request, "error.401.authenticated"); |
return mapping.findForward("errors"); |
} |
catch (NotFoundException e) |
{ |
addError(request,"error.404.explain"); |
return mapping.findForward("errors"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
addError(request, "error.500"); |
return mapping.findForward("errors"); |
} |
} |
} |
Property changes: |
Added: svn:executable |
+ * |
/branches/v3/impl/src/updates/version/release-09-2016-planos-Estudos |
---|
23,4 → 23,9 |
4 - Fazer update HIBERNATE de SQL |
correr a query |
update course set showStudiesPlan = status; |
update course set showStudiesPlan = status; |
drop table event_class; |
drop table event_generic; |
drop table event_generic_record; |
drop table event_user; |
/branches/v3/impl/src/hbm/pt/estgp/estgweb/domain/Events.hbm.xml |
---|
6,7 → 6,7 |
<hibernate-mapping> |
<class name="pt.estgp.estgweb.domain.EventClass" table="event_class" abstract="true"> |
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta> |
<meta attribute="extends">pt.estgp.estgweb.domain.DomainObject</meta> |
<meta attribute="scope-class">public abstract</meta> |
<id name="id" type="long"> |
<generator class="native"/> |
18,16 → 18,17 |
<property name="description" type="string"> |
<column name="description" sql-type="TEXT"/> |
</property> |
<property name="managers_role" type="string"/> |
<property name="eventosGenericos" type="boolean"/> |
<property name="eventosFormacoes" type="boolean"/> |
<property name="managersRole" type="string"/> |
<set name="events" cascade="none" lazy="true"> |
<key column="eventClass"/> |
<one-to-many class="pt.estgp.estgweb.domain.EventGeneric"/> |
</set> |
<subclass name="pt.estgp.estgweb.domain.EventClassImpl" discriminator-value="EventClassImpl"/> |
</class> |
<class name="pt.estgp.estgweb.domain.EventGeneric" table="event_generic" abstract="true"> |
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta> |
<meta attribute="scope-class">public abstract</meta> |
37,55 → 38,67 |
<discriminator column="discrimitator"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="ativo" type="boolean"/><!--Flag Geral de Finalizacao, Tem de desativar das API's--> |
<property name="dataAberturaFormulario" type="timestamp"/> |
<property name="dataFechoFormulario" type="timestamp"/> <!-- Tem de desativar das API's --> |
<property name="dataPublicacao" type="timestamp"/><!--Usado para API's--> |
<!--Controlo--> |
<!--OK--><property name="ativo" type="boolean"/><!--Flag Geral de Finalizacao, Tem de desativar das API's--> |
<!--OK--><property name="dataAberturaFormulario" type="timestamp"/> |
<!--OK--><property name="dataFechoFormulario" type="timestamp"/> <!-- Tem de desativar das API's --> |
<!--OK--><property name="dataPublicacao" type="timestamp"/><!--Usado para API's--> |
<!--OK--><property name="registeredUsersOnly" type="boolean"/> |
<!--OK--><property name="category" type="string"/> |
<!--OK--><property name="subCategory" type="string"/> |
<!--Metadata--> |
<property name="title" type="string"/> |
<property name="description" type="string"> |
<!--OK--><property name="title" type="string"/> |
<!--OK--><property name="description" type="string"> |
<column name="description" sql-type="TEXT"/> |
</property> |
<property name="observacoes" type="string"> |
<!--OK--><property name="observacoes" type="string"> |
<column name="observacoes" sql-type="TEXT"/> |
</property> |
<property name="locais" type="string"/> |
<property name="dataInicio" type="timestamp"/> |
<property name="flyerRepositoryStream" type="string"/> |
<property name="category" type="string"/> |
<property name="sub_category" type="string"/> |
<property name="preInformation" type="string"> |
<!--OK--><property name="locais" type="string"> |
<column name="locais" sql-type="TEXT"/> |
</property> |
<!--OK--><property name="dataInicio" type="timestamp"/> |
<!--OK--><property name="flyerRepositoryStream" type="string"/> |
<!--OK--><property name="preInformation" type="string"> |
<column name="preInformation" sql-type="TEXT"/> |
</property> |
<property name="afterRegisterInformation" type="string"> |
<!--OK--><property name="afterRegisterInformation" type="string"> |
<column name="afterRegisterInformation" sql-type="TEXT"/> |
</property> |
<property name="registeredUsersOnly" type="boolean"/> |
<!-- Campos Ativos no Registo --> |
<!--Contactos Info Pessoal--> |
<!--<property name="nome" type="boolean"/> já assumido para registo--> |
<!--<property name="mail" type="boolean"/> já assumido para registo--> |
<property name="sexo" type="boolean"/> |
<property name="morada" type="boolean"/> <!--Implica ADDRESS, ZIP, CIDADE--> |
<property name="dataNascimento" type="boolean"/> |
<property name="nif" type="boolean"/> |
<property name="bi" type="boolean"/> |
<property name="telefone1" type="boolean"/> |
<property name="telefone2" type="boolean"/> |
<property name="empresa" type="boolean"/> |
<property name="pais" type="boolean"/> |
<property name="escolaridade" type="boolean"/> |
<property name="profissao" type="boolean"/> |
<!--OK--><property name="sexo" type="boolean"/> |
<!--OK--><property name="morada" type="boolean"/> <!--Implica ADDRESS, ZIP, CIDADE--> |
<!--OK--><property name="pais" type="boolean"/> |
<!--OK--><property name="dataNascimento" type="boolean"/> |
<!--OK--><property name="nif" type="boolean"/> |
<!--OK--><property name="bi" type="boolean"/> |
<!--OK--><property name="telefone1" type="boolean"/> |
<!--OK--><property name="telefone2" type="boolean"/> |
<!--OK--><property name="empresa" type="boolean"/> |
<!--OK--><property name="escolaridade" type="boolean"/> |
<!--OK--><property name="profissao" type="boolean"/> |
<!--Pagamentos |
<property name="custoInscricao" type="boolean"/> |
<property name="custoAtas" type="boolean"/> |
--> |
<many-to-one name="owner" class="pt.estgp.estgweb.domain.User" lazy="proxy" outer-join="false"/> |
<many-to-one name="eventClass" class="pt.estgp.estgweb.domain.EventClass" lazy="proxy" outer-join="false"/> |
<set name="eventRecords" cascade="none" lazy="true"> |
<key column="event"/> |
<one-to-many class="pt.estgp.estgweb.domain.EventGenericRecord"/> |
</set> |
<subclass name="pt.estgp.estgweb.domain.EventGenericImpl" discriminator-value="EventGenericImpl"> |
<subclass name="pt.estgp.estgweb.domain.EventFormacoes"> |
<meta attribute="extends">pt.estgp.estgweb.domain.EventGenericImpl</meta> |
95,22 → 108,24 |
<property name="unidadeOrganica" type="string"/><!--(ESTG, ESEP, ...)--> |
<property name="localDeRealizacao" type="string"/><!--(Sala, Laboratório, ...)--> |
<property name="dominio" type="string"/> <!--(Gestão, Informática, Marketing, ...)--> |
<property name="outroDominio" type="string"/> |
<property name="destinatarios" type="string"/> |
<property name="conteudos" type="string"> |
<column name="conteudos" sql-type="MEDIUMTEXT"/> |
</property> |
<property name="status" type="string"/><!--(Em construção, Ativa, Concluída)--> |
<property name="numeroVagas" type="integer"/> |
<property name="duracaoHoras" type="integer"/> |
<property name="ects" type="integer"/> |
<property name="dataRealizacao" type="integer"/> |
<!-- o mesmo da dataInicio <property name="dataRealizacao" type="integer"/>--> |
<property name="diasDuracao" type="integer"/> |
<property name="custoFormacao" type="double"/> <!--(moeda Euros)--> |
<property name="precoFormando" type="double"/> <!--(moeda Euros)--> |
<property name="percentagemMinimaLucro" type="double"/> <!--(%)--> |
<property name="conteudos" type="string"> |
<column name="conteudos" sql-type="MEDIUMTEXT"/> |
</property> |
<property name="status" type="string"/><!--(Em construção, Ativa, Concluída) |
TAGS de ENUMERADO: Iniciada / Ativa / Anulada / Concluida |
--> |
<property name="formadores" type="string"/> |
<subclass name="pt.estgp.estgweb.domain.EventFormacoesImpl" discriminator-value="EventFormacoesImpl"/> |
130,6 → 145,34 |
<property name="saveDate" type="timestamp"/> |
<property name="email" type="string"/> |
<property name="password" type="string"/> <!-- MD5 um user afeta a password sempre que se inscreve mas o email é a ponte para todos os seus registos --> |
<!-- Campos de Registo OS MESMOS QUE EM EventGenericRecord--> |
<!--Contactos Info Pessoal--> |
<!--Obrigatorios--> |
<property name="mail" type="string"/> |
<property name="nome" type="string"/> |
<!--opcionais--> |
<property name="sexo" type="string"/> |
<property name="morada" type="string"/> |
<property name="zip" type="string"/> |
<property name="cidade" type="string"/> |
<property name="dataNascimento" type="string"/> |
<property name="nif" type="string"/> |
<property name="bi" type="string"/> |
<property name="telefone1" type="string"/> |
<property name="telefone2" type="string"/> |
<property name="empresa" type="string"/> |
<property name="pais" type="string"/> |
<property name="escolaridade" type="string"/> <!--12 ano, Bacharelato, Licenciatura, Mestrado, Doutoramento, Outro--> |
<property name="profissao" type="string"/> |
<!--#########################################--> |
<many-to-one name="registeredUserAssociated" class="pt.estgp.estgweb.domain.User" lazy="proxy" outer-join="false"/> |
<subclass name="pt.estgp.estgweb.domain.EventUserImpl" discriminator-value="EventUserImpl"/> |
</class> |
172,7 → 215,10 |
<property name="profissao" type="string"/> |
<!--Controlo--> |
<property name="chaveConfirmacao" type="string"/><!--Chave enviada ao user no email--> |
<property name="emailConfirmado" type="boolean"/><!--fica verdadeiro apenas apos verificacao do email--> |
<property name="confirmado" type="boolean"/> |
184,6 → 230,7 |
<column name="transacaoInfo" sql-type="TEXT"/> |
</property> |
<many-to-one name="event" class="pt.estgp.estgweb.domain.EventGeneric" lazy="proxy" outer-join="false"/> |
<many-to-one name="eventUserAssociated" class="pt.estgp.estgweb.domain.EventUser" lazy="proxy" outer-join="false"/> |
<subclass name="pt.estgp.estgweb.domain.EventGenericRecordImpl" discriminator-value="EventGenericRecordImpl"/> |
/branches/v3/impl/src/web/css/estg/lavish-bootstrap.css |
---|
4272,10 → 4272,33 |
right: -21px; |
color: inherit; } |
@keyframes alert-success { |
from { opacity: 1; } |
to { opacity: 0.4; } |
} |
.alert-success { |
background-color: #dff0d8; |
border-color: #d6e9c6; |
color: #3c763d; } |
.alert-success |
{ |
background-color: #dff0d8; |
border-color: #d6e9c6; |
color: #3c763d; |
animation: alert-success 0.5s cubic-bezier(.2, 0, 1, 1) infinite alternate; |
/* |
-webkit-animation-name: waitPost !important; |
-webkit-animation-iteration-count: infinite !important; |
-webkit-animation-timing-function: cubic-bezier(.5, 0, 1, 1) !important; |
-webkit-animation-duration: 1.7s !important;*/ |
} |
.alert-success hr { |
border-top-color: #c9e2b3; } |
.alert-success .alert-link { |
4290,19 → 4313,60 |
.alert-info .alert-link { |
color: #245269; } |
/* |
.alert-warning { |
background-color: #fcf8e3; |
border-color: #faebcc; |
color: #8a6d3b; } |
*/ |
@keyframes alert-warning { |
from { opacity: 1; } |
to { opacity: 0.4; } |
} |
.alert-warning |
{ |
background-color: #fcf8e3; |
border-color: #faebcc; |
color: #8a6d3b; |
animation: alert-warning 0.5s cubic-bezier(.2, 0, 1, 1) infinite alternate; |
/* |
-webkit-animation-name: waitPost !important; |
-webkit-animation-iteration-count: infinite !important; |
-webkit-animation-timing-function: cubic-bezier(.5, 0, 1, 1) !important; |
-webkit-animation-duration: 1.7s !important;*/ |
} |
.alert-warning hr { |
border-top-color: #f7e1b5; } |
.alert-warning .alert-link { |
color: #66512c; } |
/* |
.alert-danger { |
background-color: #f2dede; |
border-color: #ebccd1; |
color: #a94442; } |
*/ |
@keyframes alert-danger { |
from { opacity: 1; } |
to { opacity: 0.4; } |
} |
.alert-danger |
{ |
background-color: #f2dede; |
border-color: #ebccd1; |
color: #a94442; |
animation: alert-danger 0.5s cubic-bezier(.2, 0, 1, 1) infinite alternate; |
/* |
-webkit-animation-name: waitPost !important; |
-webkit-animation-iteration-count: infinite !important; |
-webkit-animation-timing-function: cubic-bezier(.5, 0, 1, 1) !important; |
-webkit-animation-duration: 1.7s !important;*/ |
} |
.alert-danger hr { |
border-top-color: #e4b9c0; } |
.alert-danger .alert-link { |
/branches/v3/impl/src/web/css/ipp/lavish-bootstrap.css |
---|
4272,10 → 4272,31 |
right: -21px; |
color: inherit; } |
@keyframes alert-success { |
from { opacity: 1; } |
to { opacity: 0.4; } |
} |
.alert-success { |
background-color: #dff0d8; |
border-color: #d6e9c6; |
color: #3c763d; } |
.alert-success |
{ |
background-color: #dff0d8; |
border-color: #d6e9c6; |
color: #3c763d; |
animation: alert-success 0.5s cubic-bezier(.2, 0, 1, 1) infinite alternate; |
/* |
-webkit-animation-name: waitPost !important; |
-webkit-animation-iteration-count: infinite !important; |
-webkit-animation-timing-function: cubic-bezier(.5, 0, 1, 1) !important; |
-webkit-animation-duration: 1.7s !important;*/ |
} |
.alert-success hr { |
border-top-color: #c9e2b3; } |
.alert-success .alert-link { |
4290,19 → 4311,61 |
.alert-info .alert-link { |
color: #245269; } |
/* |
.alert-warning { |
background-color: #fcf8e3; |
border-color: #faebcc; |
color: #8a6d3b; } |
*/ |
@keyframes alert-warning { |
from { opacity: 1; } |
to { opacity: 0.4; } |
} |
.alert-warning |
{ |
background-color: #fcf8e3; |
border-color: #fbeed5; |
color: #c09853; |
animation: alert-warning 0.5s cubic-bezier(.2, 0, 1, 1) infinite alternate; |
/* |
-webkit-animation-name: waitPost !important; |
-webkit-animation-iteration-count: infinite !important; |
-webkit-animation-timing-function: cubic-bezier(.5, 0, 1, 1) !important; |
-webkit-animation-duration: 1.7s !important;*/ |
} |
.alert-warning hr { |
border-top-color: #f7e1b5; } |
.alert-warning .alert-link { |
color: #66512c; } |
/* |
.alert-danger { |
background-color: #f2dede; |
border-color: #ebccd1; |
color: #a94442; } |
*/ |
@keyframes alert-danger { |
from { opacity: 1; } |
to { opacity: 0.4; } |
} |
.alert-danger |
{ |
background-color: #f2dede; |
border-color: #ebccd1; |
color: #a94442; |
animation: alert-danger 0.5s cubic-bezier(.2, 0, 1, 1) infinite alternate; |
/* |
-webkit-animation-name: waitPost !important; |
-webkit-animation-iteration-count: infinite !important; |
-webkit-animation-timing-function: cubic-bezier(.5, 0, 1, 1) !important; |
-webkit-animation-duration: 1.7s !important;*/ |
} |
.alert-danger hr { |
border-top-color: #e4b9c0; } |
.alert-danger .alert-link { |
/branches/v3/impl/src/web/css/lavish-bootstrap.css |
---|
4357,10 → 4357,31 |
right: -21px; |
color: inherit; |
} |
@keyframes alert-success { |
from { opacity: 1; } |
to { opacity: 0.4; } |
} |
.alert-success { |
background-color: #dff0d8; |
border-color: #d6e9c6; |
color: #468847; |
background-color: #dff0d8; |
border-color: #d6e9c6; |
color: #468847; } |
.alert-success |
{ |
background-color: #dff0d8; |
border-color: #d6e9c6; |
color: #3c763d; |
animation: alert-success 0.5s cubic-bezier(.2, 0, 1, 1) infinite alternate; |
/* |
-webkit-animation-name: waitPost !important; |
-webkit-animation-iteration-count: infinite !important; |
-webkit-animation-timing-function: cubic-bezier(.5, 0, 1, 1) !important; |
-webkit-animation-duration: 1.7s !important;*/ |
} |
.alert-success hr { |
border-top-color: #c9e2b3; |
4379,22 → 4400,61 |
.alert-info .alert-link { |
color: #2d6987; |
} |
@keyframes alert-warning { |
from { opacity: 1; } |
to { opacity: 0.4; } |
} |
.alert-warning |
{ |
background-color: #fcf8e3; |
border-color: #fbeed5; |
color: #c09853; |
animation: alert-warning 0.5s cubic-bezier(.2, 0, 1, 1) infinite alternate; |
/* |
-webkit-animation-name: waitPost !important; |
-webkit-animation-iteration-count: infinite !important; |
-webkit-animation-timing-function: cubic-bezier(.5, 0, 1, 1) !important; |
-webkit-animation-duration: 1.7s !important;*/ |
} |
/* |
.alert-warning { |
background-color: #fcf8e3; |
border-color: #fbeed5; |
color: #c09853; |
} |
}*/ |
.alert-warning hr { |
border-top-color: #f8e5be; |
} |
.alert-warning .alert-link { |
color: #a47e3c; |
} |
/* |
.alert-danger { |
background-color: #f2dede; |
border-color: #eed3d7; |
color: #b94a48; |
}*/ |
@keyframes alert-danger { |
from { opacity: 1; } |
to { opacity: 0.4; } |
} |
.alert-danger |
{ |
background-color: #f2dede; |
border-color: #eed3d7; |
color: #b94a48; |
animation: alert-danger 0.5s cubic-bezier(.2, 0, 1, 1) infinite alternate; |
/* |
-webkit-animation-name: waitPost !important; |
-webkit-animation-iteration-count: infinite !important; |
-webkit-animation-timing-function: cubic-bezier(.5, 0, 1, 1) !important; |
-webkit-animation-duration: 1.7s !important;*/ |
} |
.alert-danger hr { |
border-top-color: #e6c1c7; |
} |
/branches/v3/impl/src/web/js/bootstrapvalidator.min.js |
---|
New file |
0,0 → 1,13 |
/** |
* BootstrapValidator (http://bootstrapvalidator.com) |
* |
* The best jQuery plugin to validate form fields. Designed to use with Bootstrap 3 |
* |
* @version v0.4.5 |
* @author https://twitter.com/nghuuphuoc |
* @copyright (c) 2013 - 2014 Nguyen Huu Phuoc |
* @license MIT |
*/ |
!function(a){var b=function(c,d){this.$form=a(c),this.options=a.extend({},b.DEFAULT_OPTIONS,d),this.$invalidField=null,this.$submitButton=null,this.STATUS_NOT_VALIDATED="NOT_VALIDATED",this.STATUS_VALIDATING="VALIDATING",this.STATUS_INVALID="INVALID",this.STATUS_VALID="VALID";var e=function(){for(var a=3,b=document.createElement("div"),c=b.all||[];b.innerHTML="<!--[if gt IE "+ ++a+"]><br><![endif]-->",c[0];);return a>4?a:!a}(),f=document.createElement("div");this._changeEvent=9!==e&&"oninput"in f?"input":"keyup",this._submitIfValid=null,this._init()};b.DEFAULT_OPTIONS={elementClass:"bv-form",message:"This value is not valid",threshold:null,excluded:[":disabled",":hidden",":not(:visible)"],feedbackIcons:{valid:null,invalid:null,validating:null},submitButtons:'[type="submit"]',submitHandler:null,live:"enabled",fields:null},b.prototype={constructor:b,_init:function(){var b,c,d,e,f,g,h,i=this,j={excluded:this.$form.attr("data-bv-excluded"),trigger:this.$form.attr("data-bv-trigger"),message:this.$form.attr("data-bv-message"),submitButtons:this.$form.attr("data-bv-submitbuttons"),threshold:this.$form.attr("data-bv-threshold"),live:this.$form.attr("data-bv-live"),fields:{},feedbackIcons:{valid:this.$form.attr("data-bv-feedbackicons-valid"),invalid:this.$form.attr("data-bv-feedbackicons-invalid"),validating:this.$form.attr("data-bv-feedbackicons-validating")}};this.$form.attr("novalidate","novalidate").addClass(this.options.elementClass).on("submit.bv",function(a){a.preventDefault(),i.validate()}).on("click",this.options.submitButtons,function(){i.$submitButton=a(this),i._submitIfValid=!0}).find("[name], [data-bv-field]").each(function(){var k=a(this);if(!i._isExcluded(k)){var l=k.attr("name")||k.attr("data-bv-field"),m={};for(c in a.fn.bootstrapValidator.validators)if(b=a.fn.bootstrapValidator.validators[c],d=k.attr("data-bv-"+c.toLowerCase())+"",h="function"==typeof b.enableByHtml5?b.enableByHtml5(a(this)):null,h&&"false"!=d||h!==!0&&(""==d||"true"==d)){b.html5Attributes=b.html5Attributes||{message:"message"},m[c]=a.extend({},1==h?{}:h,m[c]);for(g in b.html5Attributes)e=b.html5Attributes[g],f=k.attr("data-bv-"+c.toLowerCase()+"-"+g),f&&("true"==f?f=!0:"false"==f&&(f=!1),m[c][e]=f)}var n={trigger:k.attr("data-bv-trigger"),message:k.attr("data-bv-message"),container:k.attr("data-bv-container"),selector:k.attr("data-bv-selector"),threshold:k.attr("data-bv-threshold"),validators:m};a.isEmptyObject(n.validators)||a.isEmptyObject(n)||(k.attr("data-bv-field",l),j.fields[l]=a.extend({},n,j.fields[l]))}}).end().find(this.options.submitButtons).each(function(){a("<input/>").attr("type","hidden").attr("name",a(this).attr("name")).val(a(this).val()).appendTo(i.$form)}),this.options=a.extend(!0,this.options,j);for(var k in this.options.fields)this._initField(k);this.setLiveMode(this.options.live)},_initField:function(b){if(null!=this.options.fields[b]&&null!=this.options.fields[b].validators){var c=this.getFieldElements(b);if(null==c)return void delete this.options.fields[b];for(var d in this.options.fields[b].validators)a.fn.bootstrapValidator.validators[d]||delete this.options.fields[b].validators[d];for(var e=this,f=c.attr("type"),g="radio"==f||"checkbox"==f||"file"==f||"SELECT"==c[0].tagName?"change":e._changeEvent,h=c.length,i=1==h||"radio"==f||"checkbox"==f,j=0;h>j;j++){var k=a(c[j]),l=k.parents(".form-group"),m=this.options.fields[b].container?l.find(this.options.fields[b].container):this._getMessageContainer(k);k.attr("data-bv-field")||k.attr("data-bv-field",b),k.on(g+".update.bv",function(){e._submitIfValid=!1,i?e.updateStatus(b,e.STATUS_NOT_VALIDATED,null):e.updateElementStatus(a(this),e.STATUS_NOT_VALIDATED,null)}),k.data("bv.messages",m);for(d in this.options.fields[b].validators)k.data("bv.result."+d,this.STATUS_NOT_VALIDATED),i&&j!=h-1||a("<small/>").css("display","none").attr("data-bv-validator",d).attr("data-bv-validator-for",b).html(this.options.fields[b].validators[d].message||this.options.fields[b].message||this.options.message).addClass("help-block").appendTo(m);if(this.options.feedbackIcons&&this.options.feedbackIcons.validating&&this.options.feedbackIcons.invalid&&this.options.feedbackIcons.valid&&(!i||j==h-1)){l.addClass("has-feedback");var n=a("<i/>").css("display","none").addClass("form-control-feedback").attr("data-bv-icon-for",b).insertAfter(k);0==l.find("label").length&&n.css("top",0)}}null==this.options.fields[b].enabled&&(this.options.fields[b].enabled=!0)}},_getMessageContainer:function(a){var b=a.parent();if(b.hasClass("form-group"))return b;var c=b.attr("class");if(!c)return this._getMessageContainer(b);c=c.split(" ");for(var d=c.length,e=0;d>e;e++)if(/^col-(xs|sm|md|lg)-\d+$/.test(c[e])||/^col-(xs|sm|md|lg)-offset-\d+$/.test(c[e]))return b;return this._getMessageContainer(b)},_submit:function(){if(this.isValid())this.options.submitHandler&&"function"==typeof this.options.submitHandler?this.options.submitHandler.call(this,this,this.$form,this.$submitButton):this.disableSubmitButtons(!0).defaultSubmit();else if("submitted"==this.options.live&&this.setLiveMode("enabled"),this.$invalidField){var b,c=this.$invalidField.parents(".tab-pane");c&&(b=c.attr("id"))&&a('a[href="#'+b+'"][data-toggle="tab"]').trigger("click.bs.tab.data-api"),this.$invalidField.focus()}},_isExcluded:function(b){if(this.options.excluded){"string"==typeof this.options.excluded&&(this.options.excluded=a.map(this.options.excluded.split(","),function(b){return a.trim(b)}));for(var c=this.options.excluded.length,d=0;c>d;d++)if("string"==typeof this.options.excluded[d]&&b.is(this.options.excluded[d])||"function"==typeof this.options.excluded[d]&&1==this.options.excluded[d].call(this,b,this))return!0}return!1},_exceedThreshold:function(a){var b=a.attr("data-bv-field"),c=this.options.fields[b].threshold||this.options.threshold;if(!c)return!0;var d=a.attr("type"),e=-1!=["button","checkbox","file","hidden","image","radio","reset","submit"].indexOf(d);return e||a.val().length>=c},getFieldElements:function(b){var c=this.options.fields[b].selector?a(this.options.fields[b].selector):this.$form.find('[name="'+b+'"]');return 0==c.length?null:c},setLiveMode:function(b){if(this.options.live=b,"submitted"==b)return this;var c=this;for(var d in this.options.fields)!function(e){var f=c.getFieldElements(e);if(f)for(var g=f.attr("type"),h=f.length,i=1==h||"radio"==g||"checkbox"==g,j=c.options.fields[d].trigger||c.options.trigger||("radio"==g||"checkbox"==g||"file"==g||"SELECT"==f[0].tagName?"change":c._changeEvent),k=a.map(j.split(" "),function(a){return a+".live.bv"}).join(" "),l=0;h>l;l++)"enabled"==b?a(f[l]).on(k,function(){c._exceedThreshold(a(this))&&(i?c.validateField(e):c.validateFieldElement(a(this),!1))}):a(f[l]).off(k)}(d);return this},disableSubmitButtons:function(a){return a?"disabled"!=this.options.live&&this.$form.find(this.options.submitButtons).attr("disabled","disabled"):this.$form.find(this.options.submitButtons).removeAttr("disabled"),this},validate:function(){if(!this.options.fields)return this;this.disableSubmitButtons(!0);for(var a in this.options.fields)this.validateField(a);return this.$submitButton&&this._submit(),this},validateField:function(b){for(var c=this.getFieldElements(b),d=c.attr("type"),e="radio"==d||"checkbox"==d?1:c.length,f=0;e>f;f++)this.validateFieldElement(a(c[f]),1==e);return this},validateFieldElement:function(b,c){var d,e,f=this,g=b.attr("data-bv-field"),h=this.options.fields[g].validators;if(!this.options.fields[g].enabled||this._isExcluded(b))return this;for(d in h){b.data("bv.dfs."+d)&&b.data("bv.dfs."+d).reject();var i=b.data("bv.result."+d);i!=this.STATUS_VALID&&i!=this.STATUS_INVALID&&(b.data("bv.result."+d,this.STATUS_VALIDATING),e=a.fn.bootstrapValidator.validators[d].validate(this,b,h[d]),"object"==typeof e?(c?this.updateStatus(g,this.STATUS_VALIDATING,d):this.updateElementStatus(b,this.STATUS_VALIDATING,d),b.data("bv.dfs."+d,e),e.done(function(a,b,d){a.removeData("bv.dfs."+b),c?f.updateStatus(a.attr("data-bv-field"),d?f.STATUS_VALID:f.STATUS_INVALID,b):f.updateElementStatus(a,d?f.STATUS_VALID:f.STATUS_INVALID,b),d&&1==f._submitIfValid&&f._submit()})):"boolean"==typeof e&&(c?this.updateStatus(g,e?this.STATUS_VALID:this.STATUS_INVALID,d):this.updateElementStatus(b,e?this.STATUS_VALID:this.STATUS_INVALID,d)))}return this},updateStatus:function(b,c,d){for(var e=this.getFieldElements(b),f=e.attr("type"),g="radio"==f||"checkbox"==f?1:e.length,h=0;g>h;h++)this.updateElementStatus(a(e[h]),c,d);return this},updateElementStatus:function(b,c,d){var e=this,f=b.attr("data-bv-field"),g=b.parents(".form-group"),h=b.data("bv.messages"),i=h.find(".help-block[data-bv-validator]"),j=g.find('.form-control-feedback[data-bv-icon-for="'+f+'"]');if(d)b.data("bv.result."+d,c);else for(var k in this.options.fields[f].validators)b.data("bv.result."+k,c);var l,m,n=b.parents(".tab-pane");switch(n&&(l=n.attr("id"))&&(m=a('a[href="#'+l+'"][data-toggle="tab"]').parent()),c){case this.STATUS_VALIDATING:this.disableSubmitButtons(!0),g.removeClass("has-success").removeClass("has-error"),d?i.filter('.help-block[data-bv-validator="'+d+'"]').hide():i.hide(),j&&j.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.invalid).addClass(this.options.feedbackIcons.validating).show(),m&&m.removeClass("bv-tab-success").removeClass("bv-tab-error");break;case this.STATUS_INVALID:this.disableSubmitButtons(!0),g.removeClass("has-success").addClass("has-error"),d?i.filter('[data-bv-validator="'+d+'"]').show():i.show(),j&&j.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.validating).addClass(this.options.feedbackIcons.invalid).show(),m&&m.removeClass("bv-tab-success").addClass("bv-tab-error");break;case this.STATUS_VALID:d?i.filter('[data-bv-validator="'+d+'"]').hide():i.hide();var o=0==i.filter(function(){var c=a(this).css("display"),d=a(this).attr("data-bv-validator");return"block"==c||b.data("bv.result."+d)!=e.STATUS_VALID}).length;this.disableSubmitButtons(!o),j&&j.removeClass(this.options.feedbackIcons.invalid).removeClass(this.options.feedbackIcons.validating).removeClass(this.options.feedbackIcons.valid).addClass(o?this.options.feedbackIcons.valid:this.options.feedbackIcons.invalid).show();var p=function(c){return 0==c.find(".help-block[data-bv-validator]").filter(function(){var c=a(this).css("display"),d=a(this).attr("data-bv-validator");return"block"==c||b.data("bv.result."+d)&&b.data("bv.result."+d)!=e.STATUS_VALID}).length};g.removeClass("has-error has-success").addClass(p(g)?"has-success":"has-error"),m&&m.removeClass("bv-tab-success").removeClass("bv-tab-error").addClass(p(n)?"bv-tab-success":"bv-tab-error");break;case this.STATUS_NOT_VALIDATED:default:this.disableSubmitButtons(!1),g.removeClass("has-success").removeClass("has-error"),d?i.filter('.help-block[data-bv-validator="'+d+'"]').hide():i.hide(),j&&j.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.invalid).removeClass(this.options.feedbackIcons.validating).hide(),m&&m.removeClass("bv-tab-success").removeClass("bv-tab-error")}return this},isValid:function(){var b,c,d,e,f,g,h,i;for(c in this.options.fields)if(null!=this.options.fields[c]&&this.options.fields[c].enabled)for(b=this.getFieldElements(c),e=b.attr("type"),h="radio"==e||"checkbox"==e?1:b.length,i=0;h>i;i++)if(d=a(b[i]),!this._isExcluded(d))for(g in this.options.fields[c].validators){if(f=d.data("bv.result."+g),f==this.STATUS_NOT_VALIDATED||f==this.STATUS_VALIDATING)return!1;if(f==this.STATUS_INVALID)return this.$invalidField=d,!1}return!0},defaultSubmit:function(){this.$form.off("submit.bv").submit()},resetForm:function(b){var c,d,e,f,g;for(c in this.options.fields){d=this.getFieldElements(c),e=d.length;for(var h=0;e>h;h++)for(g in this.options.fields[c].validators)a(d[h]).removeData("bv.dfs."+g);this.updateStatus(c,this.STATUS_NOT_VALIDATED,null),b&&(f=d.attr("type"),"radio"==f||"checkbox"==f?d.removeAttr("checked").removeAttr("selected"):d.val(""))}return this.$invalidField=null,this.$submitButton=null,this.disableSubmitButtons(!1),this},enableFieldValidators:function(a,b){return this.options.fields[a].enabled=b,this.updateStatus(a,this.STATUS_NOT_VALIDATED,null),this}},a.fn.bootstrapValidator=function(c){var d=arguments;return this.each(function(){var e=a(this),f=e.data("bootstrapValidator"),g="object"==typeof c&&c;f||(f=new b(this,g),e.data("bootstrapValidator",f)),"string"==typeof c&&f[c].apply(f,Array.prototype.slice.call(d,1))})},a.fn.bootstrapValidator.validators={},a.fn.bootstrapValidator.Constructor=b,a.fn.bootstrapValidator.helpers={date:function(a,b,c,d){if(1e3>a||a>9999||0==b||b>12)return!1;var e=[31,28,31,30,31,30,31,31,30,31,30,31];if((a%400==0||a%100!=0&&a%4==0)&&(e[1]=29),0>c||c>e[b-1])return!1;if(d===!0){var f=new Date,g=f.getFullYear(),h=f.getMonth(),i=f.getDate();return g>a||a==g&&h>b-1||a==g&&b-1==h&&i>c}return!0},luhn:function(a){for(var b=a.length,c=0,d=[[0,1,2,3,4,5,6,7,8,9],[0,2,4,6,8,1,3,5,7,9]],e=0;b--;)e+=d[c][parseInt(a.charAt(b),10)],c^=1;return e%10===0&&e>0},mod_11_10:function(a){for(var b=5,c=a.length,d=0;c>d;d++)b=(2*(b||10)%11+parseInt(a.charAt(d),10))%10;return 1==b},mod_37_36:function(a,b){b=b||"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";for(var c=b.length,d=a.length,e=Math.floor(c/2),f=0;d>f;f++)e=(2*(e||c)%(c+1)+b.indexOf(a.charAt(f)))%c;return 1==e}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.base64={validate:function(a,b){var c=b.val();return""==c?!0:/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.between={html5Attributes:{message:"message",min:"min",max:"max",inclusive:"inclusive"},enableByHtml5:function(a){return"range"==a.attr("type")?{min:a.attr("min"),max:a.attr("max")}:!1},validate:function(a,b,c){var d=b.val();return""==d?!0:(d=parseFloat(d),c.inclusive===!0?d>c.min&&d<c.max:d>=c.min&&d<=c.max)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.callback={validate:function(b,c,d){var e=c.val();if(d.callback&&"function"==typeof d.callback){var f=new a.Deferred;return f.resolve(c,"callback",d.callback.call(this,e,b)),f}return!0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.choice={html5Attributes:{message:"message",min:"min",max:"max"},validate:function(a,b,c){var d=b.is("select")?a.getFieldElements(b.attr("data-bv-field")).find("option").filter(":selected").length:a.getFieldElements(b.attr("data-bv-field")).filter(":checked").length;return c.min&&d<c.min||c.max&&d>c.max?!1:!0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.creditCard={validate:function(b,c){var d=c.val();if(""==d)return!0;if(/[^0-9-\s]+/.test(d))return!1;if(d=d.replace(/\D/g,""),!a.fn.bootstrapValidator.helpers.luhn(d))return!1;var e,f,g={AMERICAN_EXPRESS:{length:[15],prefix:["34","37"]},DINERS_CLUB:{length:[14],prefix:["300","301","302","303","304","305","36"]},DINERS_CLUB_US:{length:[16],prefix:["54","55"]},DISCOVER:{length:[16],prefix:["6011","622126","622127","622128","622129","62213","62214","62215","62216","62217","62218","62219","6222","6223","6224","6225","6226","6227","6228","62290","62291","622920","622921","622922","622923","622924","622925","644","645","646","647","648","649","65"]},JCB:{length:[16],prefix:["3528","3529","353","354","355","356","357","358"]},LASER:{length:[16,17,18,19],prefix:["6304","6706","6771","6709"]},MAESTRO:{length:[12,13,14,15,16,17,18,19],prefix:["5018","5020","5038","6304","6759","6761","6762","6763","6764","6765","6766"]},MASTERCARD:{length:[16],prefix:["51","52","53","54","55"]},SOLO:{length:[16,18,19],prefix:["6334","6767"]},UNIONPAY:{length:[16,17,18,19],prefix:["622126","622127","622128","622129","62213","62214","62215","62216","62217","62218","62219","6222","6223","6224","6225","6226","6227","6228","62290","62291","622920","622921","622922","622923","622924","622925"]},VISA:{length:[16],prefix:["4"]}};for(e in g)for(f in g[e].prefix)if(d.substr(0,g[e].prefix[f].length)==g[e].prefix[f]&&-1!=g[e].length.indexOf(d.length))return!0;return!1}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.cusip={validate:function(b,c){var d=c.val();if(""==d)return!0;if(d=d.toUpperCase(),!/^[0-9A-Z]{9}$/.test(d))return!1;for(var e=a.map(d.split(""),function(a){var b=a.charCodeAt(0);return b>="A".charCodeAt(0)&&b<="Z".charCodeAt(0)?b-"A".charCodeAt(0)+10:a}),f=e.length,g=0,h=0;f-1>h;h++){var i=parseInt(e[h]);h%2!=0&&(i*=2),i>9&&(i-=9),g+=i}return g=(10-g%10)%10,g==e[f-1]}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.cvv={html5Attributes:{message:"message",ccfield:"creditCardField"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;if(!/^[0-9]{3,4}$/.test(d))return!1;if(!c.creditCardField)return!0;var e=a.getFieldElements(c.creditCardField).val();if(""==e)return!0;e=e.replace(/\D/g,"");var f,g,h={AMERICAN_EXPRESS:{length:[15],prefix:["34","37"]},DINERS_CLUB:{length:[14],prefix:["300","301","302","303","304","305","36"]},DINERS_CLUB_US:{length:[16],prefix:["54","55"]},DISCOVER:{length:[16],prefix:["6011","622126","622127","622128","622129","62213","62214","62215","62216","62217","62218","62219","6222","6223","6224","6225","6226","6227","6228","62290","62291","622920","622921","622922","622923","622924","622925","644","645","646","647","648","649","65"]},JCB:{length:[16],prefix:["3528","3529","353","354","355","356","357","358"]},LASER:{length:[16,17,18,19],prefix:["6304","6706","6771","6709"]},MAESTRO:{length:[12,13,14,15,16,17,18,19],prefix:["5018","5020","5038","6304","6759","6761","6762","6763","6764","6765","6766"]},MASTERCARD:{length:[16],prefix:["51","52","53","54","55"]},SOLO:{length:[16,18,19],prefix:["6334","6767"]},UNIONPAY:{length:[16,17,18,19],prefix:["622126","622127","622128","622129","62213","62214","62215","62216","62217","62218","62219","6222","6223","6224","6225","6226","6227","6228","62290","62291","622920","622921","622922","622923","622924","622925"]},VISA:{length:[16],prefix:["4"]}},i=null;for(f in h)for(g in h[f].prefix)if(e.substr(0,h[f].prefix[g].length)==h[f].prefix[g]&&-1!=h[f].length.indexOf(e.length)){i=f;break}return null==i?!1:"AMERICAN_EXPRESS"==i?4==d.length:3==d.length}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.date={html5Attributes:{message:"message",format:"format"},validate:function(b,c,d){var e=c.val();if(""==e)return!0;d.format=d.format||"MM/DD/YYYY";var f=d.format.split(" "),g=f[0],h=f.length>1?f[1]:null,i=f.length>2?f[2]:null,j=e.split(" "),k=j[0],l=j.length>1?j[1]:null;if(f.length!=j.length)return!1;var m=-1!=k.indexOf("/")?"/":-1!=k.indexOf("-")?"-":null;if(null==m)return!1;k=k.split(m),g=g.split(m);var n=k[g.indexOf("YYYY")],o=k[g.indexOf("MM")],p=k[g.indexOf("DD")],q=null,r=null,s=null;if(h){if(h=h.split(":"),l=l.split(":"),h.length!=l.length)return!1;if(r=l.length>0?l[0]:null,q=l.length>1?l[1]:null,s=l.length>2?l[2]:null,s&&(s=parseInt(s,10),0>s||s>60))return!1;if(r&&(r=parseInt(r,10),0>r||r>=24||i&&r>12))return!1;if(q&&(q=parseInt(q,10),0>q||q>59))return!1}return p=parseInt(p,10),o=parseInt(o,10),n=parseInt(n,10),a.fn.bootstrapValidator.helpers.date(n,o,p)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.different={html5Attributes:{message:"message",field:"field"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e=a.getFieldElements(c.field);return null==e?!0:d!=e.val()?(a.updateStatus(c.field,a.STATUS_VALID,"different"),!0):!1}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.digits={validate:function(a,b){var c=b.val();return""==c?!0:/^\d+$/.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.ean={validate:function(a,b){var c=b.val();if(""==c)return!0;if(!/^(\d{8}|\d{12}|\d{13})$/.test(c))return!1;for(var d=c.length,e=0,f=8==d?[3,1]:[1,3],g=0;d-1>g;g++)e+=parseInt(c.charAt(g))*f[g%2];return e=10-e%10,e==c.charAt(d-1)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.emailAddress={enableByHtml5:function(a){return"email"==a.attr("type")},validate:function(a,b){var c=b.val();if(""==c)return!0;var d=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return d.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.file={html5Attributes:{extension:"extension",maxsize:"maxSize",message:"message",type:"type"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e,f=c.extension?c.extension.split(","):null,g=c.type?c.type.split(","):null,h=window.File&&window.FileList&&window.FileReader;if(h)for(var i=b.get(0).files,j=i.length,k=0;j>k;k++){if(c.maxSize&&i[k].size>parseInt(c.maxSize))return!1;if(e=i[k].name.substr(i[k].name.lastIndexOf(".")+1),f&&-1==f.indexOf(e))return!1;if(g&&-1==g.indexOf(i[k].type))return!1}else if(e=d.substr(d.lastIndexOf(".")+1),f&&-1==f.indexOf(e))return!1;return!0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.greaterThan={html5Attributes:{message:"message",value:"value",inclusive:"inclusive"},enableByHtml5:function(a){var b=a.attr("min");return b?{value:b}:!1},validate:function(a,b,c){var d=b.val();return""==d?!0:(d=parseFloat(d),c.inclusive===!0?d>c.value:d>=c.value)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.grid={validate:function(b,c){var d=c.val();return""==d?!0:(d=d.toUpperCase(),/^[GRID:]*([0-9A-Z]{2})[-\s]*([0-9A-Z]{5})[-\s]*([0-9A-Z]{10})[-\s]*([0-9A-Z]{1})$/g.test(d)?(d=d.replace(/\s/g,"").replace(/-/g,""),"GRID:"==d.substr(0,5)&&(d=d.substr(5)),a.fn.bootstrapValidator.helpers.mod_37_36(d)):!1)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.hex={validate:function(a,b){var c=b.val();return""==c?!0:/^[0-9a-fA-F]+$/.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.hexColor={enableByHtml5:function(a){return"color"==a.attr("type")},validate:function(a,b){var c=b.val();return""==c?!0:/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.iban={html5Attributes:{message:"message",country:"country"},validate:function(b,c,d){var e=c.val();if(""==e)return!0;var f={AD:"AD[0-9]{2}[0-9]{4}[0-9]{4}[A-Z0-9]{12}",AE:"AE[0-9]{2}[0-9]{3}[0-9]{16}",AL:"AL[0-9]{2}[0-9]{8}[A-Z0-9]{16}",AO:"AO[0-9]{2}[0-9]{21}",AT:"AT[0-9]{2}[0-9]{5}[0-9]{11}",AZ:"AZ[0-9]{2}[A-Z]{4}[A-Z0-9]{20}",BA:"BA[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{8}[0-9]{2}",BE:"BE[0-9]{2}[0-9]{3}[0-9]{7}[0-9]{2}",BF:"BF[0-9]{2}[0-9]{23}",BG:"BG[0-9]{2}[A-Z]{4}[0-9]{4}[0-9]{2}[A-Z0-9]{8}",BH:"BH[0-9]{2}[A-Z]{4}[A-Z0-9]{14}",BI:"BI[0-9]{2}[0-9]{12}",BJ:"BJ[0-9]{2}[A-Z]{1}[0-9]{23}",BR:"BR[0-9]{2}[0-9]{8}[0-9]{5}[0-9]{10}[A-Z][A-Z0-9]",CH:"CH[0-9]{2}[0-9]{5}[A-Z0-9]{12}",CI:"CI[0-9]{2}[A-Z]{1}[0-9]{23}",CM:"CM[0-9]{2}[0-9]{23}",CR:"CR[0-9]{2}[0-9]{3}[0-9]{14}",CV:"CV[0-9]{2}[0-9]{21}",CY:"CY[0-9]{2}[0-9]{3}[0-9]{5}[A-Z0-9]{16}",CZ:"CZ[0-9]{2}[0-9]{20}",DE:"DE[0-9]{2}[0-9]{8}[0-9]{10}",DK:"DK[0-9]{2}[0-9]{14}",DO:"DO[0-9]{2}[A-Z0-9]{4}[0-9]{20}",DZ:"DZ[0-9]{2}[0-9]{20}",EE:"EE[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{11}[0-9]{1}",ES:"ES[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{1}[0-9]{1}[0-9]{10}",FI:"FI[0-9]{2}[0-9]{6}[0-9]{7}[0-9]{1}",FO:"FO[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}",FR:"FR[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}",GB:"GB[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}",GE:"GE[0-9]{2}[A-Z]{2}[0-9]{16}",GI:"GI[0-9]{2}[A-Z]{4}[A-Z0-9]{15}",GL:"GL[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}",GR:"GR[0-9]{2}[0-9]{3}[0-9]{4}[A-Z0-9]{16}",GT:"GT[0-9]{2}[A-Z0-9]{4}[A-Z0-9]{20}",HR:"HR[0-9]{2}[0-9]{7}[0-9]{10}",HU:"HU[0-9]{2}[0-9]{3}[0-9]{4}[0-9]{1}[0-9]{15}[0-9]{1}",IE:"IE[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}",IL:"IL[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{13}",IR:"IR[0-9]{2}[0-9]{22}",IS:"IS[0-9]{2}[0-9]{4}[0-9]{2}[0-9]{6}[0-9]{10}",IT:"IT[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}",JO:"JO[0-9]{2}[A-Z]{4}[0-9]{4}[0]{8}[A-Z0-9]{10}",KW:"KW[0-9]{2}[A-Z]{4}[0-9]{22}",KZ:"KZ[0-9]{2}[0-9]{3}[A-Z0-9]{13}",LB:"LB[0-9]{2}[0-9]{4}[A-Z0-9]{20}",LI:"LI[0-9]{2}[0-9]{5}[A-Z0-9]{12}",LT:"LT[0-9]{2}[0-9]{5}[0-9]{11}",LU:"LU[0-9]{2}[0-9]{3}[A-Z0-9]{13}",LV:"LV[0-9]{2}[A-Z]{4}[A-Z0-9]{13}",MC:"MC[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}",MD:"MD[0-9]{2}[A-Z0-9]{20}",ME:"ME[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}",MG:"MG[0-9]{2}[0-9]{23}",MK:"MK[0-9]{2}[0-9]{3}[A-Z0-9]{10}[0-9]{2}",ML:"ML[0-9]{2}[A-Z]{1}[0-9]{23}",MR:"MR13[0-9]{5}[0-9]{5}[0-9]{11}[0-9]{2}",MT:"MT[0-9]{2}[A-Z]{4}[0-9]{5}[A-Z0-9]{18}",MU:"MU[0-9]{2}[A-Z]{4}[0-9]{2}[0-9]{2}[0-9]{12}[0-9]{3}[A-Z]{3}",MZ:"MZ[0-9]{2}[0-9]{21}",NL:"NL[0-9]{2}[A-Z]{4}[0-9]{10}",NO:"NO[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{1}",PK:"PK[0-9]{2}[A-Z]{4}[A-Z0-9]{16}",PL:"PL[0-9]{2}[0-9]{8}[0-9]{16}",PS:"PS[0-9]{2}[A-Z]{4}[A-Z0-9]{21}",PT:"PT[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{11}[0-9]{2}",QA:"QA[0-9]{2}[A-Z]{4}[A-Z0-9]{21}",RO:"RO[0-9]{2}[A-Z]{4}[A-Z0-9]{16}",RS:"RS[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}",SA:"SA[0-9]{2}[0-9]{2}[A-Z0-9]{18}",SE:"SE[0-9]{2}[0-9]{3}[0-9]{16}[0-9]{1}",SI:"SI[0-9]{2}[0-9]{5}[0-9]{8}[0-9]{2}",SK:"SK[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{10}",SM:"SM[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}",SN:"SN[0-9]{2}[A-Z]{1}[0-9]{23}",TN:"TN59[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}",TR:"TR[0-9]{2}[0-9]{5}[A-Z0-9]{1}[A-Z0-9]{16}",VG:"VG[0-9]{2}[A-Z]{4}[0-9]{16}"};e=e.replace(/[^a-zA-Z0-9]/g,"").toUpperCase();var g=d.country||e.substr(0,2);if(!f[g])return!1;if(!new RegExp("^"+f[g]+"$").test(e))return!1;e=e.substr(4)+e.substr(0,4),e=a.map(e.split(""),function(a){var b=a.charCodeAt(0);return b>="A".charCodeAt(0)&&b<="Z".charCodeAt(0)?b-"A".charCodeAt(0)+10:a}),e=e.join("");for(var h=parseInt(e.substr(0,1),10),i=e.length,j=1;i>j;++j)h=(10*h+parseInt(e.substr(j,1),10))%97;return 1==h}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.id={html5Attributes:{message:"message",country:"country"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e=c.country||d.substr(0,2),f=["_",e.toLowerCase()].join("");return this[f]&&"function"==typeof this[f]?this[f](d):!0},_validateJMBG:function(a,b){if(!/^\d{13}$/.test(a))return!1;var c=parseInt(a.substr(0,2),10),d=parseInt(a.substr(2,2),10),e=(parseInt(a.substr(4,3),10),parseInt(a.substr(7,2),10)),f=parseInt(a.substr(12,1),10);if(c>31||d>12)return!1;for(var g=0,h=0;6>h;h++)g+=(7-h)*(parseInt(a.charAt(h))+parseInt(a.charAt(h+6)));if(g=11-g%11,(10==g||11==g)&&(g=0),g!=f)return!1;switch(b.toUpperCase()){case"BA":return e>=10&&19>=e;case"MK":return e>=41&&49>=e;case"ME":return e>=20&&29>=e;case"RS":return e>=70&&99>=e;case"SI":return e>=50&&59>=e;default:return!0}},_ba:function(a){return this._validateJMBG(a,"BA")},_mk:function(a){return this._validateJMBG(a,"MK")},_me:function(a){return this._validateJMBG(a,"ME")},_rs:function(a){return this._validateJMBG(a,"RS")},_si:function(a){return this._validateJMBG(a,"SI")},_bg:function(b){if(!/^\d{10}$/.test(b)&&!/^\d{6}\s\d{3}\s\d{1}$/.test(b))return!1;b=b.replace(/\s/g,"");var c=parseInt(b.substr(0,2),10)+1900,d=parseInt(b.substr(2,2),10),e=parseInt(b.substr(4,2),10);if(d>40?(c+=100,d-=40):d>20&&(c-=100,d-=20),!a.fn.bootstrapValidator.helpers.date(c,d,e))return!1;for(var f=0,g=[2,4,8,5,10,9,7,3,6],h=0;9>h;h++)f+=parseInt(b.charAt(h))*g[h];return f=f%11%10,f==b.substr(9,1)},_br:function(a){if(/^1{11}|2{11}|3{11}|4{11}|5{11}|6{11}|7{11}|8{11}|9{11}|0{11}$/.test(a))return!1;if(!/^\d{11}$/.test(a)&&!/^\d{3}\.\d{3}\.\d{3}-\d{2}$/.test(a))return!1;a=a.replace(/\./g,"").replace(/-/g,"");for(var b=0,c=0;9>c;c++)b+=(10-c)*parseInt(a.charAt(c));if(b=11-b%11,(10==b||11==b)&&(b=0),b!=a.charAt(9))return!1;var d=0;for(c=0;10>c;c++)d+=(11-c)*parseInt(a.charAt(c));return d=11-d%11,(10==d||11==d)&&(d=0),d==a.charAt(10)},_ch:function(a){if(!/^756[\.]{0,1}[0-9]{4}[\.]{0,1}[0-9]{4}[\.]{0,1}[0-9]{2}$/.test(a))return!1;a=a.replace(/\D/g,"").substr(3);for(var b=a.length,c=0,d=8==b?[3,1]:[1,3],e=0;b-1>e;e++)c+=parseInt(a.charAt(e))*d[e%2];return c=10-c%10,c==a.charAt(b-1)},_cl:function(a){if(!/^\d{7,8}[-]{0,1}[0-9K]$/.test(a))return!1;for(a=a.replace(/\D/g,"");a.length<9;)a="0"+a;for(var b=0,c=[3,2,7,6,5,4,3,2],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b=11-b%11,11==b?b=0:10==b&&(b="K"),b==a.charAt(8)},_cz:function(b){if(!/^\d{9,10}$/.test(b))return!1;var c=1900+parseInt(b.substr(0,2)),d=parseInt(b.substr(2,2))%50%20,e=parseInt(b.substr(4,2));if(9==b.length){if(c>=1980&&(c-=100),c>1953)return!1}else 1954>c&&(c+=100);if(!a.fn.bootstrapValidator.helpers.date(c,d,e))return!1;if(10==b.length){var f=parseInt(b.substr(0,9),10)%11;return 1985>c&&(f%=10),f==b.substr(9,1)}return!0},_dk:function(b){if(!/^[0-9]{6}[-]{0,1}[0-9]{4}$/.test(b))return!1;b=b.replace(/-/g,"");var c=parseInt(b.substr(0,2),10),d=parseInt(b.substr(2,2),10),e=parseInt(b.substr(4,2),10);switch(!0){case-1!="5678".indexOf(b.charAt(6))&&e>=58:e+=1800;break;case-1!="0123".indexOf(b.charAt(6)):case-1!="49".indexOf(b.charAt(6))&&e>=37:e+=1900;break;default:e+=2e3}return a.fn.bootstrapValidator.helpers.date(e,d,c)},_ee:function(a){return this._lt(a)},_es:function(a){if(!/^[0-9A-Z]{8}[-]{0,1}[0-9A-Z]$/.test(a)&&!/^[XYZ][-]{0,1}[0-9]{7}[-]{0,1}[0-9A-Z]$/.test(a))return!1;a=a.replace(/-/g,"");var b="XYZ".indexOf(a.charAt(0));-1!=b&&(a=b+a.substr(1)+"");var c=parseInt(a.substr(0,8),10);return c="TRWAGMYFPDXBNJZSQVHLCKE"[c%23],c==a.substr(8,1)},_fi:function(b){if(!/^[0-9]{6}[-+A][0-9]{3}[0-9ABCDEFHJKLMNPRSTUVWXY]$/.test(b))return!1;var c=parseInt(b.substr(0,2),10),d=parseInt(b.substr(2,2),10),e=parseInt(b.substr(4,2),10),f={"+":1800,"-":1900,A:2e3};if(e=f[b.charAt(6)]+e,!a.fn.bootstrapValidator.helpers.date(e,d,c))return!1;var g=parseInt(b.substr(7,3));if(2>g)return!1;var h=b.substr(0,6)+b.substr(7,3)+"";return h=parseInt(h),"0123456789ABCDEFHJKLMNPRSTUVWXY".charAt(h%31)==b.charAt(10)},_hr:function(b){return/^[0-9]{11}$/.test(b)?a.fn.bootstrapValidator.helpers.mod_11_10(b):!1},_ie:function(a){if(!/^\d{7}[A-W][AHWTX]?$/.test(a))return!1;var b=function(a){for(;a.length<7;)a="0"+a;for(var b="WABCDEFGHIJKLMNOPQRSTUV",c=0,d=0;7>d;d++)c+=parseInt(a.charAt(d))*(8-d);return c+=9*b.indexOf(a.substr(7)),b[c%23]};return 9!=a.length||"A"!=a.charAt(8)&&"H"!=a.charAt(8)?a.charAt(7)==b(a.substr(0,7)):a.charAt(7)==b(a.substr(0,7)+a.substr(8)+"")},_is:function(b){if(!/^[0-9]{6}[-]{0,1}[0-9]{4}$/.test(b))return!1;b=b.replace(/-/g,"");var c=parseInt(b.substr(0,2),10),d=parseInt(b.substr(2,2),10),e=parseInt(b.substr(4,2),10),f=parseInt(b.charAt(9));if(e=9==f?1900+e:100*(20+f)+e,!a.fn.bootstrapValidator.helpers.date(e,d,c,!0))return!1;for(var g=0,h=[3,2,7,6,5,4,3,2],i=0;8>i;i++)g+=parseInt(b.charAt(i))*h[i];return g=11-g%11,g==b.charAt(8)},_lt:function(b){if(!/^[0-9]{11}$/.test(b))return!1;var c=parseInt(b.charAt(0)),d=parseInt(b.substr(1,2),10),e=parseInt(b.substr(3,2),10),f=parseInt(b.substr(5,2),10),g=c%2==0?17+c/2:17+(c+1)/2;if(d=100*g+d,!a.fn.bootstrapValidator.helpers.date(d,e,f,!0))return!1;for(var h=0,i=[1,2,3,4,5,6,7,8,9,1],j=0;10>j;j++)h+=parseInt(b.charAt(j))*i[j];if(h%=11,10!=h)return h==b.charAt(10);for(h=0,i=[3,4,5,6,7,8,9,1,2,3],j=0;10>j;j++)h+=parseInt(b.charAt(j))*i[j];return h%=11,10==h&&(h=0),h==b.charAt(10)},_lv:function(b){if(!/^[0-9]{6}[-]{0,1}[0-9]{5}$/.test(b))return!1;b=b.replace(/\D/g,"");var c=parseInt(b.substr(0,2)),d=parseInt(b.substr(2,2)),e=parseInt(b.substr(4,2));if(e=e+1800+100*parseInt(b.charAt(6)),!a.fn.bootstrapValidator.helpers.date(e,d,c,!0))return!1;for(var f=0,g=[10,5,8,4,2,1,6,3,7,9],h=0;10>h;h++)f+=parseInt(b.charAt(h))*g[h];return f=(f+1)%11%10,f==b.charAt(10)},_nl:function(a){for(;a.length<9;)a="0"+a;if(!/^[0-9]{4}[.]{0,1}[0-9]{2}[.]{0,1}[0-9]{3}$/.test(a))return!1;if(a=a.replace(/\./g,""),0==parseInt(a,10))return!1;for(var b=0,c=a.length,d=0;c-1>d;d++)b+=(9-d)*parseInt(a.charAt(d));return b%=11,10==b&&(b=0),b==a.charAt(c-1)},_ro:function(b){if(!/^[0-9]{13}$/.test(b))return!1;var c=parseInt(b.charAt(0));if(0==c||7==c||8==c)return!1;var d=parseInt(b.substr(1,2),10),e=parseInt(b.substr(3,2),10),f=parseInt(b.substr(5,2),10),g={1:1900,2:1900,3:1800,4:1800,5:2e3,6:2e3};if(f>31&&e>12)return!1;if(9!=c&&(d=g[c+""]+d,!a.fn.bootstrapValidator.helpers.date(d,e,f)))return!1;for(var h=0,i=[2,7,9,1,4,6,3,5,8,2,7,9],j=b.length,k=0;j-1>k;k++)h+=parseInt(b.charAt(k))*i[k]; |
return h%=11,10==h&&(h=1),h==b.charAt(j-1)},_se:function(b){if(!/^[0-9]{10}$/.test(b)&&!/^[0-9]{6}[-|+][0-9]{4}$/.test(b))return!1;b=b.replace(/[^0-9]/g,"");var c=parseInt(b.substr(0,2))+1900,d=parseInt(b.substr(2,2)),e=parseInt(b.substr(4,2));return a.fn.bootstrapValidator.helpers.date(c,d,e)?a.fn.bootstrapValidator.helpers.luhn(b):!1},_sk:function(a){return this._cz(a)},_sm:function(a){return/^\d{5}$/.test(a)},_za:function(b){if(!/^[0-9]{10}[0|1][8|9][0-9]$/.test(b))return!1;var c=parseInt(b.substr(0,2)),d=(new Date).getFullYear()%100,e=parseInt(b.substr(2,2)),f=parseInt(b.substr(4,2));return c=c>=d?c+1900:c+2e3,a.fn.bootstrapValidator.helpers.date(c,e,f)?a.fn.bootstrapValidator.helpers.luhn(b):!1}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.identical={html5Attributes:{message:"message",field:"field"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e=a.getFieldElements(c.field);return null==e?!0:d==e.val()?(a.updateStatus(c.field,a.STATUS_VALID,"identical"),!0):!1}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.imei={validate:function(b,c){var d=c.val();if(""==d)return!0;switch(!0){case/^\d{15}$/.test(d):case/^\d{2}-\d{6}-\d{6}-\d{1}$/.test(d):case/^\d{2}\s\d{6}\s\d{6}\s\d{1}$/.test(d):return d=d.replace(/[^0-9]/g,""),a.fn.bootstrapValidator.helpers.luhn(d);case/^\d{14}$/.test(d):case/^\d{16}$/.test(d):case/^\d{2}-\d{6}-\d{6}(|-\d{2})$/.test(d):case/^\d{2}\s\d{6}\s\d{6}(|\s\d{2})$/.test(d):return!0;default:return!1}}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.integer={enableByHtml5:function(a){return"number"==a.attr("type")},validate:function(a,b){var c=b.val();return""==c?!0:/^(?:-?(?:0|[1-9][0-9]*))$/.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.ip={html5Attributes:{message:"message",ipv4:"ipv4",ipv6:"ipv6"},validate:function(b,c,d){var e=c.val();return""==e?!0:(d=a.extend({},{ipv4:!0,ipv6:!0},d),d.ipv4?/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(e):d.ipv6?/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/.test(str):!1)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.isbn={validate:function(a,b){var c=b.val();if(""==c)return!0;var d;switch(!0){case/^\d{9}[\dX]$/.test(c):case 13==c.length&&/^(\d+)-(\d+)-(\d+)-([\dX])$/.test(c):case 13==c.length&&/^(\d+)\s(\d+)\s(\d+)\s([\dX])$/.test(c):d="ISBN10";break;case/^(978|979)\d{9}[\dX]$/.test(c):case 17==c.length&&/^(978|979)-(\d+)-(\d+)-(\d+)-([\dX])$/.test(c):case 17==c.length&&/^(978|979)\s(\d+)\s(\d+)\s(\d+)\s([\dX])$/.test(c):d="ISBN13";break;default:return!1}c=c.replace(/[^0-9X]/gi,"");var e,f=c.split(""),g=f.length,h=0;switch(d){case"ISBN10":h=0;for(var i=0;g-1>i;i++)h+=(10-i)*parseInt(f[i]);return e=11-h%11,11==e?e=0:10==e&&(e="X"),e+""==f[g-1];case"ISBN13":h=0;for(var i=0;g-1>i;i++)h+=i%2==0?parseInt(f[i]):3*parseInt(f[i]);return e=10-h%10,10==e&&(e="0"),e+""==f[g-1];default:return!1}}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.isin={COUNTRY_CODES:"AF|AX|AL|DZ|AS|AD|AO|AI|AQ|AG|AR|AM|AW|AU|AT|AZ|BS|BH|BD|BB|BY|BE|BZ|BJ|BM|BT|BO|BQ|BA|BW|BV|BR|IO|BN|BG|BF|BI|KH|CM|CA|CV|KY|CF|TD|CL|CN|CX|CC|CO|KM|CG|CD|CK|CR|CI|HR|CU|CW|CY|CZ|DK|DJ|DM|DO|EC|EG|SV|GQ|ER|EE|ET|FK|FO|FJ|FI|FR|GF|PF|TF|GA|GM|GE|DE|GH|GI|GR|GL|GD|GP|GU|GT|GG|GN|GW|GY|HT|HM|VA|HN|HK|HU|IS|IN|ID|IR|IQ|IE|IM|IL|IT|JM|JP|JE|JO|KZ|KE|KI|KP|KR|KW|KG|LA|LV|LB|LS|LR|LY|LI|LT|LU|MO|MK|MG|MW|MY|MV|ML|MT|MH|MQ|MR|MU|YT|MX|FM|MD|MC|MN|ME|MS|MA|MZ|MM|NA|NR|NP|NL|NC|NZ|NI|NE|NG|NU|NF|MP|NO|OM|PK|PW|PS|PA|PG|PY|PE|PH|PN|PL|PT|PR|QA|RE|RO|RU|RW|BL|SH|KN|LC|MF|PM|VC|WS|SM|ST|SA|SN|RS|SC|SL|SG|SX|SK|SI|SB|SO|ZA|GS|SS|ES|LK|SD|SR|SJ|SZ|SE|CH|SY|TW|TJ|TZ|TH|TL|TG|TK|TO|TT|TN|TR|TM|TC|TV|UG|UA|AE|GB|US|UM|UY|UZ|VU|VE|VN|VG|VI|WF|EH|YE|ZM|ZW",validate:function(a,b){var c=b.val();if(""==c)return!0;c=c.toUpperCase();var d=new RegExp("^("+this.COUNTRY_CODES+")[0-9A-Z]{10}$");if(!d.test(c))return!1;for(var e="",f=c.length,g=0;f-1>g;g++){var h=c.charCodeAt(g);e+=h>57?(h-55).toString():c.charAt(g)}var i="",j=e.length,k=j%2!=0?0:1;for(g=0;j>g;g++)i+=parseInt(e[g])*(g%2==k?2:1)+"";var l=0;for(g=0;g<i.length;g++)l+=parseInt(i.charAt(g));return l=(10-l%10)%10,l==c.charAt(f-1)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.ismn={validate:function(a,b){var c=b.val();if(""==c)return!0;var d;switch(!0){case/^M\d{9}$/.test(c):case/^M-\d{4}-\d{4}-\d{1}$/.test(c):case/^M\s\d{4}\s\d{4}\s\d{1}$/.test(c):d="ISMN10";break;case/^9790\d{9}$/.test(c):case/^979-0-\d{4}-\d{4}-\d{1}$/.test(c):case/^979\s0\s\d{4}\s\d{4}\s\d{1}$/.test(c):d="ISMN13";break;default:return!1}"ISMN10"==d&&(c="9790"+c.substr(1)),c=c.replace(/[^0-9]/gi,"");for(var e=c.length,f=0,g=[1,3],h=0;e-1>h;h++)f+=parseInt(c.charAt(h))*g[h%2];return f=10-f%10,f==c.charAt(e-1)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.issn={validate:function(a,b){var c=b.val();if(""==c)return!0;if(!/^\d{4}\-\d{3}[\dX]$/.test(c))return!1;c=c.replace(/[^0-9X]/gi,"");var d=c.split(""),e=d.length,f=0;"X"==d[7]&&(d[7]=10);for(var g=0;e>g;g++)f+=(8-g)*parseInt(d[g]);return f%11==0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.lessThan={html5Attributes:{message:"message",value:"value",inclusive:"inclusive"},enableByHtml5:function(a){var b=a.attr("max");return b?{value:b}:!1},validate:function(a,b,c){var d=b.val();return""==d?!0:(d=parseFloat(d),c.inclusive===!1?d<=c.value:d<c.value)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.mac={validate:function(a,b){var c=b.val();return""==c?!0:/^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$/.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.notEmpty={enableByHtml5:function(a){var b=a.attr("required")+"";return"required"==b||"true"==b},validate:function(b,c){var d=c.attr("type");return"radio"==d||"checkbox"==d?b.getFieldElements(c.attr("data-bv-field")).filter(":checked").length>0:""!=a.trim(c.val())}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.numeric={html5Attributes:{message:"message",separator:"separator"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e=c.separator||".";return"."!=e&&(d=d.replace(e,".")),!isNaN(parseFloat(d))&&isFinite(d)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.phone={html5Attributes:{message:"message",country:"country"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e=(c.country||"US").toUpperCase();switch(e){case"US":default:return d=d.replace(/\D/g,""),/^(?:(1\-?)|(\+1 ?))?\(?(\d{3})[\)\-\.]?(\d{3})[\-\.]?(\d{4})$/.test(d)&&10==d.length}}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.regexp={html5Attributes:{message:"message",regexp:"regexp"},enableByHtml5:function(a){var b=a.attr("pattern");return b?{regexp:b}:!1},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e="string"==typeof c.regexp?new RegExp(c.regexp):c.regexp;return e.test(d)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.remote={html5Attributes:{message:"message",url:"url",name:"name"},validate:function(b,c,d){var e=c.val();if(""==e)return!0;var f=c.attr("data-bv-field"),g=d.data;null==g&&(g={}),"function"==typeof g&&(g=g.call(this,b)),g[d.name||f]=e;var h=new a.Deferred,i=a.ajax({type:"POST",url:d.url,dataType:"json",data:g});return i.then(function(a){h.resolve(c,"remote",a.valid===!0||"true"===a.valid)}),h.fail(function(){i.abort()}),h}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.rtn={validate:function(a,b){var c=b.val();if(""==c)return!0;if(!/^\d{9}$/.test(c))return!1;for(var d=0,e=0;e<c.length;e+=3)d+=3*parseInt(c.charAt(e),10)+7*parseInt(c.charAt(e+1),10)+parseInt(c.charAt(e+2),10);return 0!=d&&d%10==0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.sedol={validate:function(a,b){var c=b.val();if(""==c)return!0;if(c=c.toUpperCase(),!/^[0-9A-Z]{7}$/.test(c))return!1;for(var d=0,e=[1,3,1,7,3,9,1],f=c.length,g=0;f-1>g;g++)d+=e[g]*parseInt(c.charAt(g),36);return d=(10-d%10)%10,d==c.charAt(f-1)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.siren={validate:function(b,c){var d=c.val();return""==d?!0:/^\d{9}$/.test(d)?a.fn.bootstrapValidator.helpers.luhn(d):!1}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.siret={validate:function(a,b){var c=b.val();if(""==c)return!0;for(var d,e=0,f=c.length,g=0;f>g;g++)d=parseInt(c.charAt(g),10),g%2==0&&(d=2*d,d>9&&(d-=9)),e+=d;return e%10==0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.step={html5Attributes:{message:"message",base:"baseValue",step:"step"},validate:function(b,c,d){var e=c.val();if(""==e)return!0;if(d=a.extend({},{baseValue:0,step:1},d),e=parseFloat(e),isNaN(e)||!isFinite(e))return!1;var f=function(a,b){var c=Math.pow(10,b);a*=c;var d=a>0|-(0>a),e=a%1===.5*d;return e?(Math.floor(a)+(d>0))/c:Math.round(a)/c},g=function(a,b){if(0==b)return 1;var c=(a+"").split("."),d=(b+"").split("."),e=(1==c.length?0:c[1].length)+(1==d.length?0:d[1].length);return f(a-b*Math.floor(a/b),e)},h=g(e-d.baseValue,d.step);return 0==h||h==d.step}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.stringCase={html5Attributes:{message:"message","case":"case"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e=(c["case"]||"lower").toLowerCase();switch(e){case"upper":return d===d.toUpperCase();case"lower":default:return d===d.toLowerCase()}}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.stringLength={html5Attributes:{message:"message",min:"min",max:"max"},enableByHtml5:function(a){var b=a.attr("maxlength");return b?{max:parseInt(b,10)}:!1},validate:function(b,c,d){var e=c.val();if(""==e)return!0;var f=a.trim(e).length;return d.min&&f<d.min||d.max&&f>d.max?!1:!0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.uri={enableByHtml5:function(a){return"url"==a.attr("type")},validate:function(a,b){var c=b.val();if(""==c)return!0;var d=new RegExp("^(?:(?:https?|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:/[^\\s]*)?$","i");return d.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.uuid={html5Attributes:{message:"message",version:"version"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e={3:/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,4:/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,5:/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,all:/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i},f=c.version?c.version+"":"all";return null==e[f]?!0:e[f].test(d)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.vat={html5Attributes:{message:"message",country:"country"},validate:function(a,b,c){var d=b.val();if(""==d)return!0;var e=c.country||d.substr(0,2),f=["_",e.toLowerCase()].join("");return this[f]&&"function"==typeof this[f]?this[f](d):!0},_at:function(a){if(!/^ATU[0-9]{8}$/.test(a))return!1;a=a.substr(3);for(var b=0,c=[1,2,1,2,1,2,1],d=0,e=0;7>e;e++)d=parseInt(a.charAt(e))*c[e],d>9&&(d=Math.floor(d/10)+d%10),b+=d;return b=10-(b+4)%10,10==b&&(b=0),b==a.substr(7,1)},_be:function(a){if(!/^BE[0]{0,1}[0-9]{9}$/.test(a))return!1;if(a=a.substr(2),9==a.length&&(a="0"+a),0==a.substr(1,1))return!1;var b=parseInt(a.substr(0,8),10)+parseInt(a.substr(8,2),10);return b%97==0},_bg:function(b){if(!/^BG[0-9]{9,10}$/.test(b))return!1;b=b.substr(2);var c=0,d=0;if(9==b.length){for(d=0;8>d;d++)c+=parseInt(b.charAt(d))*(d+1);if(c%=11,10==c)for(c=0,d=0;8>d;d++)c+=parseInt(b.charAt(d))*(d+3);return c%=10,c==b.substr(8)}if(10==b.length){var e=function(b){var c=parseInt(b.substr(0,2),10)+1900,d=parseInt(b.substr(2,2),10),e=parseInt(b.substr(4,2),10);if(d>40?(c+=100,d-=40):d>20&&(c-=100,d-=20),!a.fn.bootstrapValidator.helpers.date(c,d,e))return!1;for(var f=0,g=[2,4,8,5,10,9,7,3,6],h=0;9>h;h++)f+=parseInt(b.charAt(h))*g[h];return f=f%11%10,f==b.substr(9,1)},f=function(a){for(var b=0,c=[21,19,17,13,11,9,7,3,1],d=0;9>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%=10,b==a.substr(9,1)},g=function(a){for(var b=0,c=[4,3,2,7,6,5,4,3,2],d=0;9>d;d++)b+=parseInt(a.charAt(d))*c[d];return b=11-b%11,10==b?!1:(11==b&&(b=0),b==a.substr(9,1))};return e(b)||f(b)||g(b)}return!1},_ch:function(a){if(!/^CHE[0-9]{9}(MWST)?$/.test(a))return!1;a=a.substr(3);for(var b=0,c=[5,4,3,2,7,6,5,4],d=0;8>d;d++)b+=parseInt(a.charAt(d),10)*c[d];return b=11-b%11,10==b?!1:(11==b&&(b=0),b==a.substr(8,1))},_cy:function(a){if(!/^CY[0-5|9]{1}[0-9]{7}[A-Z]{1}$/.test(a))return!1;if(a=a.substr(2),"12"==a.substr(0,2))return!1;for(var b=0,c={0:1,1:0,2:5,3:7,4:9,5:13,6:15,7:17,8:19,9:21},d=0;8>d;d++){var e=parseInt(a.charAt(d),10);d%2==0&&(e=c[e+""]),b+=e}return b="ABCDEFGHIJKLMNOPQRSTUVWXYZ"[b%26],b==a.substr(8,1)},_cz:function(b){if(!/^CZ[0-9]{8,10}$/.test(b))return!1;b=b.substr(2);var c=0,d=0;if(8==b.length){if(b.charAt(0)+""=="9")return!1;for(c=0,d=0;7>d;d++)c+=parseInt(b.charAt(d),10)*(8-d);return c=11-c%11,10==c&&(c=0),11==c&&(c=1),c==b.substr(7,1)}if(9==b.length&&b.charAt(0)+""=="6"){for(c=0,d=0;7>d;d++)c+=parseInt(b.charAt(d+1),10)*(8-d);return c=11-c%11,10==c&&(c=0),11==c&&(c=1),c=[8,7,6,5,4,3,2,1,0,9,10][c-1],c==b.substr(8,1)}if(9==b.length||10==b.length){var e=1900+parseInt(b.substr(0,2)),f=parseInt(b.substr(2,2))%50%20,g=parseInt(b.substr(4,2));if(9==b.length){if(e>=1980&&(e-=100),e>1953)return!1}else 1954>e&&(e+=100);if(!a.fn.bootstrapValidator.helpers.date(e,f,g))return!1;if(10==b.length){var h=parseInt(b.substr(0,9),10)%11;return 1985>e&&(h%=10),h==b.substr(9,1)}return!0}return!1},_de:function(b){return/^DE[0-9]{9}$/.test(b)?(b=b.substr(2),a.fn.bootstrapValidator.helpers.mod_11_10(b)):!1},_dk:function(a){if(!/^DK[0-9]{8}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[2,7,6,5,4,3,2,1],d=0;8>d;d++)b+=parseInt(a.charAt(d),10)*c[d];return b%11==0},_ee:function(a){if(!/^EE[0-9]{9}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[3,7,1,3,7,1,3,7,1],d=0;9>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%10==0},_es:function(a){if(!/^ES[0-9A-Z][0-9]{7}[0-9A-Z]$/.test(a))return!1;a=a.substr(2);var b=function(a){var b=parseInt(a.substr(0,8),10);return b="TRWAGMYFPDXBNJZSQVHLCKE"[b%23],b==a.substr(8,1)},c=function(a){var b=["XYZ".indexOf(a.charAt(0)),a.substr(1)].join("");return b=parseInt(b,10),b="TRWAGMYFPDXBNJZSQVHLCKE"[b%23],b==a.substr(8,1)},d=function(a){var b,c=a.charAt(0);if(-1!="KLM".indexOf(c))return b=parseInt(a.substr(1,8),10),b="TRWAGMYFPDXBNJZSQVHLCKE"[b%23],b==a.substr(8,1);if(-1!="ABCDEFGHJNPQRSUVW".indexOf(c)){for(var d=0,e=[2,1,2,1,2,1,2],f=0,g=0;7>g;g++)f=parseInt(a.charAt(g+1))*e[g],f>9&&(f=Math.floor(f/10)+f%10),d+=f;return d=10-d%10,d==a.substr(8,1)||"JABCDEFGHI"[d]==a.substr(8,1)}return!1},e=a.charAt(0);return/^[0-9]$/.test(e)?b(a):/^[XYZ]$/.test(e)?c(a):d(a)},_fi:function(a){if(!/^FI[0-9]{8}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[7,9,10,5,8,4,2,1],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%11==0},_fr:function(b){if(!/^FR[0-9A-Z]{2}[0-9]{9}$/.test(b))return!1;if(b=b.substr(2),!a.fn.bootstrapValidator.helpers.luhn(b.substr(2)))return!1;if(/^[0-9]{2}$/.test(b.substr(0,2)))return b.substr(0,2)==parseInt(b.substr(2)+"12",10)%97;var c,d="0123456789ABCDEFGHJKLMNPQRSTUVWXYZ";return c=/^[0-9]{1}$/.test(b.charAt(0))?24*d.indexOf(b.charAt(0))+d.indexOf(b.charAt(1))-10:34*d.indexOf(b.charAt(0))+d.indexOf(b.charAt(1))-100,(parseInt(b.substr(2),10)+1+Math.floor(c/11))%11==c%11},_gb:function(a){if(!(/^GB[0-9]{9}$/.test(a)||/^GB[0-9]{12}$/.test(a)||/^GBGD[0-9]{3}$/.test(a)||/^GBHA[0-9]{3}$/.test(a)||/^GB(GD|HA)8888[0-9]{5}$/.test(a)))return!1;a=a.substr(2);var b=a.length;if(5==b){var c=a.substr(0,2),d=parseInt(a.substr(2));return"GD"==c&&500>d||"HA"==c&&d>=500}if(11==b&&("GD8888"==a.substr(0,6)||"HA8888"==a.substr(0,6)))return"GD"==a.substr(0,2)&&parseInt(a.substr(6,3))>=500||"HA"==a.substr(0,2)&&parseInt(a.substr(6,3))<500?!1:parseInt(a.substr(6,3))%97==parseInt(a.substr(9,2));if(9==b||12==b){for(var e=0,f=[8,7,6,5,4,3,2,10,1],g=0;9>g;g++)e+=parseInt(a.charAt(g))*f[g];return e%=97,parseInt(a.substr(0,3))>=100?0==e||42==e||55==e:0==e}return!0},_gr:function(a){if(!/^GR[0-9]{9}$/.test(a))return!1;a=a.substr(2),8==a.length&&(a="0"+a);for(var b=0,c=[256,128,64,32,16,8,4,2],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b=b%11%10,b==a.substr(8,1)},_el:function(a){return/^EL[0-9]{9}$/.test(a)?(a="GR"+a.substr(2),this._gr(a)):!1},_hu:function(a){if(!/^HU[0-9]{8}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[9,7,3,1,9,7,3,1],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%10==0},_hr:function(b){return/^HR[0-9]{11}$/.test(b)?(b=b.substr(2),a.fn.bootstrapValidator.helpers.mod_11_10(b)):!1},_ie:function(a){if(!/^IE[0-9]{1}[0-9A-Z\*\+]{1}[0-9]{5}[A-Z]{1,2}$/.test(a))return!1;a=a.substr(2);var b=function(a){for(;a.length<7;)a="0"+a;for(var b="WABCDEFGHIJKLMNOPQRSTUV",c=0,d=0;7>d;d++)c+=parseInt(a.charAt(d))*(8-d);return c+=9*b.indexOf(a.substr(7)),b[c%23]};return/^[0-9]+$/.test(a.substr(0,7))?a.charAt(7)==b(a.substr(0,7)+a.substr(8)+""):-1!="ABCDEFGHIJKLMNOPQRSTUVWXYZ+*".indexOf(a.charAt(1))?a.charAt(7)==b(a.substr(2,5)+a.substr(0,1)+""):!0},_it:function(b){if(!/^IT[0-9]{11}$/.test(b))return!1;if(b=b.substr(2),0==parseInt(b.substr(0,7)))return!1;var c=parseInt(b.substr(7,3));return 1>c||c>201&&999!=c&&888!=c?!1:a.fn.bootstrapValidator.helpers.luhn(b)},_lt:function(a){if(!/^LT([0-9]{7}1[0-9]{1}|[0-9]{10}1[0-9]{1})$/.test(a))return!1;a=a.substr(2);for(var b=a.length,c=0,d=0;b-1>d;d++)c+=parseInt(a.charAt(d))*(1+d%9);var e=c%11;if(10==e){c=0;for(var d=0;b-1>d;d++)c+=parseInt(a.charAt(d))*(1+(d+2)%9)}return e=e%11%10,e==a.charAt(b-1)},_lu:function(a){return/^LU[0-9]{8}$/.test(a)?(a=a.substr(2),a.substr(0,6)%89==a.substr(6,2)):!1},_lv:function(b){if(!/^LV[0-9]{11}$/.test(b))return!1;b=b.substr(2);var c=parseInt(b.charAt(0)),d=0,e=[],f=0,g=b.length;if(c>3){for(d=0,e=[9,1,4,8,3,10,2,5,7,6,1],f=0;g>f;f++)d+=parseInt(b.charAt(f))*e[f];return d%=11,3==d}var h=parseInt(b.substr(0,2)),i=parseInt(b.substr(2,2)),j=parseInt(b.substr(4,2));if(j=j+1800+100*parseInt(b.charAt(6)),!a.fn.bootstrapValidator.helpers.date(j,i,h))return!1;for(d=0,e=[10,5,8,4,2,1,6,3,7,9],f=0;g-1>f;f++)d+=parseInt(b.charAt(f))*e[f];return d=(d+1)%11%10,d==b.charAt(g-1)},_mt:function(a){if(!/^MT[0-9]{8}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[3,4,6,7,8,9,10,1],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%37==0},_nl:function(a){if(!/^NL[0-9]{9}B[0-9]{2}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[9,8,7,6,5,4,3,2],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%=11,b>9&&(b=0),b==a.substr(8,1)},_no:function(a){if(!/^NO[0-9]{9}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[3,2,7,6,5,4,3,2],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b=11-b%11,11==b&&(b=0),b==a.substr(8,1)},_pl:function(a){if(!/^PL[0-9]{10}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[6,5,7,2,3,4,5,6,7,-1],d=0;10>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%11==0},_pt:function(a){if(!/^PT[0-9]{9}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[9,8,7,6,5,4,3,2],d=0;8>d;d++)b+=parseInt(a.charAt(d))*c[d];return b=11-b%11,b>9&&(b=0),b==a.substr(8,1)},_ro:function(a){if(!/^RO[1-9][0-9]{1,9}$/.test(a))return!1;a=a.substr(2);for(var b=a.length,c=[7,5,3,2,1,7,5,3,2].slice(10-b),d=0,e=0;b-1>e;e++)d+=parseInt(a.charAt(e))*c[e];return d=10*d%11%10,d==a.substr(b-1,1)},_ru:function(a){if(!/^RU([0-9]{9}|[0-9]{12})$/.test(a))return!1;if(a=a.substr(2),10==a.length){for(var b=0,c=[2,4,10,3,5,9,4,6,8,0],d=0;10>d;d++)b+=parseInt(a.charAt(d))*c[d];return b%=11,b>9&&(b%=10),b==a.substr(9,1)}if(12==a.length){for(var e=0,f=[7,2,4,10,3,5,9,4,6,8,0],g=0,h=[3,7,2,4,10,3,5,9,4,6,8,0],d=0;11>d;d++)e+=parseInt(a.charAt(d))*f[d],g+=parseInt(a.charAt(d))*h[d];return e%=11,e>9&&(e%=10),g%=11,g>9&&(g%=10),e==a.substr(10,1)&&g==a.substr(11,1)}return!1},_rs:function(a){if(!/^RS[0-9]{9}$/.test(a))return!1;a=a.substr(2);for(var b=10,c=0,d=0;8>d;d++)c=(parseInt(a.charAt(d))+b)%10,0==c&&(c=10),b=2*c%11;return(b+parseInt(a.substr(8,1)))%10==1},_se:function(b){return/^SE[0-9]{10}01$/.test(b)?(b=b.substr(2,10),a.fn.bootstrapValidator.helpers.luhn(b)):!1},_si:function(a){if(!/^SI[0-9]{8}$/.test(a))return!1;a=a.substr(2);for(var b=0,c=[8,7,6,5,4,3,2],d=0;7>d;d++)b+=parseInt(a.charAt(d))*c[d];return b=11-b%11,10==b&&(b=0),b==a.substr(7,1)},_sk:function(a){return/^SK[1-9][0-9][(2-4)|(6-9)][0-9]{7}$/.test(a)?(a=a.substr(2),a%11==0):!1}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.vin={validate:function(a,b){var c=b.val();if(""==c)return!0;if(!/^[a-hj-npr-z0-9]{8}[0-9xX][a-hj-npr-z0-9]{8}$/i.test(c))return!1;c=c.toUpperCase();for(var d={A:1,B:2,C:3,D:4,E:5,F:6,G:7,H:8,J:1,K:2,L:3,M:4,N:5,P:7,R:9,S:2,T:3,U:4,V:5,W:6,X:7,Y:8,Z:9,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,0:0},e=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],f=0,g=c.length,h=0;g>h;h++)f+=d[c.charAt(h)+""]*e[h];var i=f%11;return 10==i&&(i="X"),i==c.charAt(8)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.zipCode={html5Attributes:{message:"message",country:"country"},validate:function(a,b,c){var d=b.val();if(""==d||!c.country)return!0;var e=(c.country||"US").toUpperCase();switch(e){case"CA":return/(?:A|B|C|E|G|J|K|L|M|N|P|R|S|T|V|X|Y){1}[0-9]{1}(?:A|B|C|E|G|J|K|L|M|N|P|R|S|T|V|X|Y){1}\s?[0-9]{1}(?:A|B|C|E|G|J|K|L|M|N|P|R|S|T|V|X|Y){1}[0-9]{1}/i.test(d);case"DK":return/^(DK(-|\s)?)?\d{4}$/i.test(d);case"GB":return this._gb(d);case"IT":return/^(I-|IT-)?\d{5}$/i.test(d);case"NL":return/^[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}$/i.test(d);case"SE":return/^(S-)?\d{3}\s?\d{2}$/i.test(d);case"US":default:return/^\d{4,5}([\-]\d{4})?$/.test(d)}},_gb:function(a){for(var b="[ABCDEFGHIJKLMNOPRSTUWYZ]",c="[ABCDEFGHKLMNOPQRSTUVWXY]",d="[ABCDEFGHJKPMNRSTUVWXY]",e="[ABEHMNPRVWXY]",f="[ABDEFGHJLNPQRSTUWXYZ]",g=[new RegExp("^("+b+"{1}"+c+"?[0-9]{1,2})(\\s*)([0-9]{1}"+f+"{2})$","i"),new RegExp("^("+b+"{1}[0-9]{1}"+d+"{1})(\\s*)([0-9]{1}"+f+"{2})$","i"),new RegExp("^("+b+"{1}"+c+"{1}?[0-9]{1}"+e+"{1})(\\s*)([0-9]{1}"+f+"{2})$","i"),new RegExp("^(BF1)(\\s*)([0-6]{1}[ABDEFGHJLNPQRST]{1}[ABDEFGHJLNPQRSTUWZYZ]{1})$","i"),/^(GIR)(\s*)(0AA)$/i,/^(BFPO)(\s*)([0-9]{1,4})$/i,/^(BFPO)(\s*)(c\/o\s*[0-9]{1,3})$/i,/^([A-Z]{4})(\s*)(1ZZ)$/i,/^(AI-2640)$/i],h=0;h<g.length;h++)if(g[h].test(a))return!0;return!1}}}(window.jQuery); |
/branches/v3/impl/src/web/js/modernizr.js |
---|
New file |
0,0 → 1,0 |
window.Modernizr=function(e,t,n){function r(e){b.cssText=e}function o(e,t){return r(S.join(e+";")+(t||""))}function a(e,t){return typeof e===t}function i(e,t){return!!~(""+e).indexOf(t)}function c(e,t){for(var r in e){var o=e[r];if(!i(o,"-")&&b[o]!==n)return"pfx"==t?o:!0}return!1}function s(e,t,r){for(var o in e){var i=t[e[o]];if(i!==n)return r===!1?e[o]:a(i,"function")?i.bind(r||t):i}return!1}function l(e,t,n){var r=e.charAt(0).toUpperCase()+e.slice(1),o=(e+" "+k.join(r+" ")+r).split(" ");return a(t,"string")||a(t,"undefined")?c(o,t):(o=(e+" "+T.join(r+" ")+r).split(" "),s(o,t,n))}function u(){m.input=function(n){for(var r=0,o=n.length;o>r;r++)M[n[r]]=n[r]in E;return M.list&&(M.list=!!t.createElement("datalist")&&!!e.HTMLDataListElement),M}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),m.inputtypes=function(e){for(var r,o,a,i=0,c=e.length;c>i;i++)E.setAttribute("type",o=e[i]),r="text"!==E.type,r&&(E.value=w,E.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(o)&&E.style.WebkitAppearance!==n?(g.appendChild(E),a=t.defaultView,r=a.getComputedStyle&&"textfield"!==a.getComputedStyle(E,null).WebkitAppearance&&0!==E.offsetHeight,g.removeChild(E)):/^(search|tel)$/.test(o)||(r=/^(url|email)$/.test(o)?E.checkValidity&&E.checkValidity()===!1:E.value!=w)),P[e[i]]=!!r;return P}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var f,d,p="2.8.3",m={},h=!0,g=t.documentElement,v="modernizr",y=t.createElement(v),b=y.style,E=t.createElement("input"),w=":)",x={}.toString,S=" -webkit- -moz- -o- -ms- ".split(" "),C="Webkit Moz O ms",k=C.split(" "),T=C.toLowerCase().split(" "),j={svg:"http://www.w3.org/2000/svg"},N={},P={},M={},A=[],L=A.slice,$=function(e,n,r,o){var a,i,c,s,l=t.createElement("div"),u=t.body,f=u||t.createElement("body");if(parseInt(r,10))for(;r--;)c=t.createElement("div"),c.id=o?o[r]:v+(r+1),l.appendChild(c);return a=["­",'<style id="s',v,'">',e,"</style>"].join(""),l.id=v,(u?l:f).innerHTML+=a,f.appendChild(l),u||(f.style.background="",f.style.overflow="hidden",s=g.style.overflow,g.style.overflow="hidden",g.appendChild(f)),i=n(l,e),u?l.parentNode.removeChild(l):(f.parentNode.removeChild(f),g.style.overflow=s),!!i},z=function(){function e(e,o){o=o||t.createElement(r[e]||"div"),e="on"+e;var i=e in o;return i||(o.setAttribute||(o=t.createElement("div")),o.setAttribute&&o.removeAttribute&&(o.setAttribute(e,""),i=a(o[e],"function"),a(o[e],"undefined")||(o[e]=n),o.removeAttribute(e))),o=null,i}var r={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return e}(),D={}.hasOwnProperty;d=a(D,"undefined")||a(D.call,"undefined")?function(e,t){return t in e&&a(e.constructor.prototype[t],"undefined")}:function(e,t){return D.call(e,t)},Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if("function"!=typeof t)throw new TypeError;var n=L.call(arguments,1),r=function(){if(this instanceof r){var o=function(){};o.prototype=t.prototype;var a=new o,i=t.apply(a,n.concat(L.call(arguments)));return Object(i)===i?i:a}return t.apply(e,n.concat(L.call(arguments)))};return r}),N.flexbox=function(){return l("flexWrap")},N.canvas=function(){var e=t.createElement("canvas");return!!e.getContext&&!!e.getContext("2d")},N.canvastext=function(){return!!m.canvas&&!!a(t.createElement("canvas").getContext("2d").fillText,"function")},N.webgl=function(){return!!e.WebGLRenderingContext},N.touch=function(){var n;return"ontouchstart"in e||e.DocumentTouch&&t instanceof DocumentTouch?n=!0:$(["@media (",S.join("touch-enabled),("),v,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(e){n=9===e.offsetTop}),n},N.geolocation=function(){return"geolocation"in navigator},N.postmessage=function(){return!!e.postMessage},N.websqldatabase=function(){return!!e.openDatabase},N.indexedDB=function(){return!!l("indexedDB",e)},N.hashchange=function(){return z("hashchange",e)&&(t.documentMode===n||t.documentMode>7)},N.history=function(){return!!e.history&&!!history.pushState},N.draganddrop=function(){var e=t.createElement("div");return"draggable"in e||"ondragstart"in e&&"ondrop"in e},N.websockets=function(){return"WebSocket"in e||"MozWebSocket"in e},N.rgba=function(){return r("background-color:rgba(150,255,150,.5)"),i(b.backgroundColor,"rgba")},N.hsla=function(){return r("background-color:hsla(120,40%,100%,.5)"),i(b.backgroundColor,"rgba")||i(b.backgroundColor,"hsla")},N.multiplebgs=function(){return r("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(b.background)},N.backgroundsize=function(){return l("backgroundSize")},N.borderimage=function(){return l("borderImage")},N.borderradius=function(){return l("borderRadius")},N.boxshadow=function(){return l("boxShadow")},N.textshadow=function(){return""===t.createElement("div").style.textShadow},N.opacity=function(){return o("opacity:.55"),/^0.55$/.test(b.opacity)},N.cssanimations=function(){return l("animationName")},N.csscolumns=function(){return l("columnCount")},N.cssgradients=function(){var e="background-image:",t="gradient(linear,left top,right bottom,from(#9f9),to(white));",n="linear-gradient(left top,#9f9, white);";return r((e+"-webkit- ".split(" ").join(t+e)+S.join(n+e)).slice(0,-e.length)),i(b.backgroundImage,"gradient")},N.cssreflections=function(){return l("boxReflect")},N.csstransforms=function(){return!!l("transform")},N.csstransforms3d=function(){var e=!!l("perspective");return e&&"webkitPerspective"in g.style&&$("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(t){e=9===t.offsetLeft&&3===t.offsetHeight}),e},N.csstransitions=function(){return l("transition")},N.fontface=function(){var e;return $('@font-face {font-family:"font";src:url("https://")}',function(n,r){var o=t.getElementById("smodernizr"),a=o.sheet||o.styleSheet,i=a?a.cssRules&&a.cssRules[0]?a.cssRules[0].cssText:a.cssText||"":"";e=/src/i.test(i)&&0===i.indexOf(r.split(" ")[0])}),e},N.generatedcontent=function(){var e;return $(["#",v,"{font:0/0 a}#",v,':after{content:"',w,'";visibility:hidden;font:3px/1 a}'].join(""),function(t){e=t.offsetHeight>=3}),e},N.video=function(){var e=t.createElement("video"),n=!1;try{(n=!!e.canPlayType)&&(n=new Boolean(n),n.ogg=e.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),n.h264=e.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),n.webm=e.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,""))}catch(r){}return n},N.audio=function(){var e=t.createElement("audio"),n=!1;try{(n=!!e.canPlayType)&&(n=new Boolean(n),n.ogg=e.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),n.mp3=e.canPlayType("audio/mpeg;").replace(/^no$/,""),n.wav=e.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),n.m4a=(e.canPlayType("audio/x-m4a;")||e.canPlayType("audio/aac;")).replace(/^no$/,""))}catch(r){}return n},N.localstorage=function(){try{return localStorage.setItem(v,v),localStorage.removeItem(v),!0}catch(e){return!1}},N.sessionstorage=function(){try{return sessionStorage.setItem(v,v),sessionStorage.removeItem(v),!0}catch(e){return!1}},N.webworkers=function(){return!!e.Worker},N.applicationcache=function(){return!!e.applicationCache},N.svg=function(){return!!t.createElementNS&&!!t.createElementNS(j.svg,"svg").createSVGRect},N.inlinesvg=function(){var e=t.createElement("div");return e.innerHTML="<svg/>",(e.firstChild&&e.firstChild.namespaceURI)==j.svg},N.smil=function(){return!!t.createElementNS&&/SVGAnimate/.test(x.call(t.createElementNS(j.svg,"animate")))},N.svgclippaths=function(){return!!t.createElementNS&&/SVGClipPath/.test(x.call(t.createElementNS(j.svg,"clipPath")))};for(var F in N)d(N,F)&&(f=F.toLowerCase(),m[f]=N[F](),A.push((m[f]?"":"no-")+f));return m.input||u(),m.addTest=function(e,t){if("object"==typeof e)for(var r in e)d(e,r)&&m.addTest(r,e[r]);else{if(e=e.toLowerCase(),m[e]!==n)return m;t="function"==typeof t?t():t,"undefined"!=typeof h&&h&&(g.className+=" "+(t?"":"no-")+e),m[e]=t}return m},r(""),y=E=null,function(e,t){function n(e,t){var n=e.createElement("p"),r=e.getElementsByTagName("head")[0]||e.documentElement;return n.innerHTML="x<style>"+t+"</style>",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=y.elements;return"string"==typeof e?e.split(" "):e}function o(e){var t=v[e[h]];return t||(t={},g++,e[h]=g,v[g]=t),t}function a(e,n,r){if(n||(n=t),u)return n.createElement(e);r||(r=o(n));var a;return a=r.cache[e]?r.cache[e].cloneNode():m.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!a.canHaveChildren||p.test(e)||a.tagUrn?a:r.frag.appendChild(a)}function i(e,n){if(e||(e=t),u)return e.createDocumentFragment();n=n||o(e);for(var a=n.frag.cloneNode(),i=0,c=r(),s=c.length;s>i;i++)a.createElement(c[i]);return a}function c(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return y.shivMethods?a(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(y,t.frag)}function s(e){e||(e=t);var r=o(e);return y.shivCSS&&!l&&!r.hasCSS&&(r.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),u||c(e,r),e}var l,u,f="3.7.0",d=e.html5||{},p=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,m=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,h="_html5shiv",g=0,v={};!function(){try{var e=t.createElement("a");e.innerHTML="<xyz></xyz>",l="hidden"in e,u=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){l=!0,u=!0}}();var y={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:f,shivCSS:d.shivCSS!==!1,supportsUnknownElements:u,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:s,createElement:a,createDocumentFragment:i};e.html5=y,s(t)}(this,t),m._version=p,m._prefixes=S,m._domPrefixes=T,m._cssomPrefixes=k,m.hasEvent=z,m.testProp=function(e){return c([e])},m.testAllProps=l,m.testStyles=$,m.prefixed=function(e,t,n){return t?l(e,t,n):l(e,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(h?" js "+A.join(" "):""),m}(this,this.document),function(e,t,n){function r(e){return"[object Function]"==g.call(e)}function o(e){return"string"==typeof e}function a(){}function i(e){return!e||"loaded"==e||"complete"==e||"uninitialized"==e}function c(){var e=v.shift();y=1,e?e.t?m(function(){("c"==e.t?d.injectCss:d.injectJs)(e.s,0,e.a,e.x,e.e,1)},0):(e(),c()):y=0}function s(e,n,r,o,a,s,l){function u(t){if(!p&&i(f.readyState)&&(b.r=p=1,!y&&c(),f.onload=f.onreadystatechange=null,t)){"img"!=e&&m(function(){w.removeChild(f)},50);for(var r in T[n])T[n].hasOwnProperty(r)&&T[n][r].onload()}}var l=l||d.errorTimeout,f=t.createElement(e),p=0,g=0,b={t:r,s:n,e:a,a:s,x:l};1===T[n]&&(g=1,T[n]=[]),"object"==e?f.data=n:(f.src=n,f.type=e),f.width=f.height="0",f.onerror=f.onload=f.onreadystatechange=function(){u.call(this,g)},v.splice(o,0,b),"img"!=e&&(g||2===T[n]?(w.insertBefore(f,E?null:h),m(u,l)):T[n].push(f))}function l(e,t,n,r,a){return y=0,t=t||"j",o(e)?s("c"==t?S:x,e,t,this.i++,n,r,a):(v.splice(this.i++,0,e),1==v.length&&c()),this}function u(){var e=d;return e.loader={load:l,i:0},e}var f,d,p=t.documentElement,m=e.setTimeout,h=t.getElementsByTagName("script")[0],g={}.toString,v=[],y=0,b="MozAppearance"in p.style,E=b&&!!t.createRange().compareNode,w=E?p:h.parentNode,p=e.opera&&"[object Opera]"==g.call(e.opera),p=!!t.attachEvent&&!p,x=b?"object":p?"script":"img",S=p?"script":x,C=Array.isArray||function(e){return"[object Array]"==g.call(e)},k=[],T={},j={timeout:function(e,t){return t.length&&(e.timeout=t[0]),e}};d=function(e){function t(e){var t,n,r,e=e.split("!"),o=k.length,a=e.pop(),i=e.length,a={url:a,origUrl:a,prefixes:e};for(n=0;i>n;n++)r=e[n].split("="),(t=j[r.shift()])&&(a=t(a,r));for(n=0;o>n;n++)a=k[n](a);return a}function i(e,o,a,i,c){var s=t(e),l=s.autoCallback;s.url.split(".").pop().split("?").shift(),s.bypass||(o&&(o=r(o)?o:o[e]||o[i]||o[e.split("/").pop().split("?")[0]]),s.instead?s.instead(e,o,a,i,c):(T[s.url]?s.noexec=!0:T[s.url]=1,a.load(s.url,s.forceCSS||!s.forceJS&&"css"==s.url.split(".").pop().split("?").shift()?"c":n,s.noexec,s.attrs,s.timeout),(r(o)||r(l))&&a.load(function(){u(),o&&o(s.origUrl,c,i),l&&l(s.origUrl,c,i),T[s.url]=2})))}function c(e,t){function n(e,n){if(e){if(o(e))n||(f=function(){var e=[].slice.call(arguments);d.apply(this,e),p()}),i(e,f,t,0,l);else if(Object(e)===e)for(s in c=function(){var t,n=0;for(t in e)e.hasOwnProperty(t)&&n++;return n}(),e)e.hasOwnProperty(s)&&(!n&&!--c&&(r(f)?f=function(){var e=[].slice.call(arguments);d.apply(this,e),p()}:f[s]=function(e){return function(){var t=[].slice.call(arguments);e&&e.apply(this,t),p()}}(d[s])),i(e[s],f,t,s,l))}else!n&&p()}var c,s,l=!!e.test,u=e.load||e.both,f=e.callback||a,d=f,p=e.complete||a;n(l?e.yep:e.nope,!!u),u&&n(u)}var s,l,f=this.yepnope.loader;if(o(e))i(e,0,f,0);else if(C(e))for(s=0;s<e.length;s++)l=e[s],o(l)?i(l,0,f,0):C(l)?d(l):Object(l)===l&&c(l,f);else Object(e)===e&&c(e,f)},d.addPrefix=function(e,t){j[e]=t},d.addFilter=function(e){k.push(e)},d.errorTimeout=1e4,null==t.readyState&&t.addEventListener&&(t.readyState="loading",t.addEventListener("DOMContentLoaded",f=function(){t.removeEventListener("DOMContentLoaded",f,0),t.readyState="complete"},0)),e.yepnope=u(),e.yepnope.executeStack=c,e.yepnope.injectJs=function(e,n,r,o,s,l){var u,f,p=t.createElement("script"),o=o||d.errorTimeout;p.src=e;for(f in r)p.setAttribute(f,r[f]);n=l?c:n||a,p.onreadystatechange=p.onload=function(){!u&&i(p.readyState)&&(u=1,n(),p.onload=p.onreadystatechange=null)},m(function(){u||(u=1,n(1))},o),s?p.onload():h.parentNode.insertBefore(p,h)},e.yepnope.injectCss=function(e,n,r,o,i,s){var l,o=t.createElement("link"),n=s?c:n||a;o.href=e,o.rel="stylesheet",o.type="text/css";for(l in r)o.setAttribute(l,r[l]);i||(h.parentNode.insertBefore(o,h),m(n,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))}; |
/branches/v3/impl/src/web/layout/themes/scripts-default.jsp |
---|
109,9 → 109,11 |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/lavish-bootstrap.css"/>--> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/<%=bacoTheme%>/lavish-bootstrap.css"/> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/<%=bacoTheme%>/variables.scss"/> |
<!--VALIDADORES --> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/bootstrapvalidator.min.js"></script> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/modernizr.js"></script> |
<link href="<%=request.getContextPath()%>/js/bootstrap-toggle-master/css/bootstrap-toggle.min.css" rel="stylesheet"> |
<script src="<%=request.getContextPath()%>/js/bootstrap-toggle-master/js/bootstrap-toggle.min.js"></script> |
234,11 → 236,18 |
function evaluateTableSorters() |
{ |
evaluateTableSortersInside(""); |
invokeChosenSelects(); |
} |
function evaluateTableSortersInside(insideDiv) |
{ |
if(insideDiv != "") |
invokeChosenSelects(insideDiv); |
else |
invokeChosenSelects(); |
if($(insideDiv + " #myTable")) |
{ |
$(insideDiv + " #myTable").tablesorter({ |
theme: 'blue', |
690,8 → 699,18 |
$(document).ready( |
function(){ |
//invokeChosenSelects(); |
$("select").chosen(); |
//$("select:not(.tablesorter-filter)").chosen({width: "50%"}); |
} |
); |
function invokeChosenSelects() |
{ |
$("select").chosen(); |
} |
function invokeChosenSelects(id) |
{ |
$(id).find("select").chosen(); |
} |
</script> |
/branches/v3/impl/src/web/layout/headerTools.jsp |
---|
197,10 → 197,12 |
function reloadAjaxRequestModal(target) |
{ |
$("#modalAjaxRequest .modal-title .title-wrap").html($(target).data('title')); |
$("#modalAjaxRequest .contentAjaxRequest").html('Pro favor aguarde ... <img src="<%=request.getContextPath()%>/imgs/wait.gif"/>'); |
$("#modalAjaxRequest .contentAjaxRequest").html('Por favor aguarde ... <img src="<%=request.getContextPath()%>/imgs/wait.gif"/>'); |
$.post($(target).data('href'), function(data) { |
$("#modalAjaxRequest .contentAjaxRequest").html(data); |
evaluateTableSortersInside("#modalAjaxRequest"); |
invokeChosenSelects(); |
$('#modalAjaxRequest .reloadAjaxRequestModal').on("click", |
function(e){ |
reloadAjaxRequestModal(e.currentTarget); |
/branches/v3/impl/src/web/user/home/panels/events.jsp |
---|
New file |
0,0 → 1,30 |
<%@ 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" %> |
<%@ 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-tiles.tld" prefix="tiles" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<baco:hasRolePrefix role="admin,all,event_class_manager" rolePrefix="event_manager_"> |
<div class="panel panel-primary"> |
<div class="panel-heading">Gestão Eventos</div> |
<div class="panel-body"> |
<baco:hasRole role="admin,all,event_class_manager"> |
<div class="text-info"> |
Para atribuir papeis de gestão de eventos especificos crie um papel com o prefixo: |
"event_manager_" e termine com o tipo de evento desejado, atribua depois o papel |
às pessoas com responsabilidade nesse tipo de evento. |
</div> |
</baco:hasRole> |
<div class="list-group"> |
<baco:hasRole role="admin,all,event_class_manager"> |
<div class="list-group-item"><html:link action="/user/startManageEventsClass"><bean:message key="events.manage.events"/></html:link></div> |
</baco:hasRole> |
<baco:hasRolePrefix role="admin,all" rolePrefix="event_manager_"> |
<div class="list-group-item"><html:link action="/user/startManageMyEvents"><bean:message key="events.my.events"/></html:link></div> |
</baco:hasRolePrefix> |
</div> |
</div> |
</div> |
</baco:hasRolePrefix> |
/branches/v3/impl/src/web/user/home/teacherPae.jsp |
---|
34,6 → 34,7 |
</div> |
<div class="col-md-6 col-sm-12 col-xs-12"> |
<jsp:include page="panels/academicTools.jsp"/> |
<jsp:include page="panels/events.jsp"/> |
</div> |
</baco:hasRole> |
/branches/v3/impl/src/web/user/home/userPae.jsp |
---|
18,6 → 18,7 |
<jsp:include page="panels/configsInfo.jsp"/> |
<jsp:include page="panels/configsGeraisSistema.jsp"/> |
<jsp:include page="panels/academicTools.jsp"/> |
<jsp:include page="panels/events.jsp"/> |
</div> |
</div> |
/branches/v3/impl/src/web/user/events/eventApiJson.jsp |
---|
New file |
0,0 → 1,66 |
<%@ page import="org.json.JSONObject"%><%@ page import="pt.estgp.estgweb.domain.Teacher"%><%@ page import="pt.estgp.estgweb.domain.User"%><%@ page import="pt.estgp.estgweb.web.utils.RequestUtils"%><%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager"%><%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager"%><%@ page contentType="application/json;charset=UTF-8" language="java" %> |
<% |
try{ |
String service = request.getParameter("service"); |
JSONObject json = new JSONObject(); |
if(service.equals("removeClassEventUser") ) |
{ |
String userId = request.getParameter("userId"); |
String eventRoleManager = request.getParameter("eventRoleManager"); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{Long.parseLong(userId),eventRoleManager}; |
User u = (User) sm.execute(RequestUtils.getRequester(request, response), "RemoveRole2User", args, names); |
json.put("response","done"); |
json.put("userName",u.getName()); |
json.put("userEmail",u.getEmail()); |
json.put("userId",u.getId()); |
if(u instanceof Teacher) |
{ |
json.put("sigesCode",((Teacher)u).getSigesCode()); |
} |
} |
else if(service.equals("addClassEventUser")) |
{ |
String userId = request.getParameter("userId"); |
String eventRoleManager = request.getParameter("eventRoleManager"); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{Long.parseLong(userId),eventRoleManager}; |
User u = (User) sm.execute(RequestUtils.getRequester(request, response), "AddRole2User", args, names); |
json.put("response","done"); |
json.put("userName",u.getName()); |
json.put("userEmail",u.getEmail()); |
json.put("userId",u.getId()); |
if(u instanceof Teacher) |
{ |
json.put("sigesCode",((Teacher)u).getSigesCode()); |
} |
} |
else if(service.equals("removeClassEvent")) |
{ |
String eventClassId = request.getParameter("eventClassId"); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{Long.parseLong(eventClassId)}; |
sm.execute(RequestUtils.getRequester(request, response), "RemoveEventClass", args, names); |
json.put("response","done"); |
} |
/*json.put("tipologiasRequisitadas",stats.tipologiasRequisitadas);*/ |
out.print(json.toString()); |
}catch(Throwable e) |
{ |
System.out.println(e.toString()); |
e.printStackTrace(); |
out.print("{\"response\":\"error\", \"msg\": \"" + e.toString() + "\"}"); |
} |
%> |
/branches/v3/impl/src/web/user/events/addEventGeneric.jsp |
---|
New file |
0,0 → 1,110 |
<%@ page import="jomm.dao.impl.AbstractDao" %> |
<%@ page import="pt.estgp.estgweb.domain.*" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="java.util.List" %> |
<%@ 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" %> |
<%@ 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-tiles.tld" prefix="tiles" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<baco:hasRole role="admin,all,event_class_manager"> |
<% |
long classId = Long.parseLong(request.getParameter("classId")); |
EventFormacoes event = null; |
AbstractDao.getCurrentSession().beginTransaction(); |
EventClass eventClass = DaoFactory.getEventClassDaoImpl().load(classId); |
if(request.getParameter("eventId") != null) |
{ |
event = (EventFormacoesImpl) DaoFactory.getEventFormacoesDaoImpl().load(Long.parseLong(request.getParameter("eventId"))); |
} |
else |
{ |
event = DomainObjectFactory.createEventFormacoesImpl(); |
} |
%> |
<script> |
function submitEventClassForm(form) |
{ |
$("#dispatch").val("saveClassAjax"); |
var data = $("#formEventClass").serialize().replace(/%0D%0A/g, '%0A').replace(/\r?\n/g, "\r\n"); |
$("#saveProgress").html('<div class="alert alert-info">Enviando ...</div>'); |
$.ajax({ |
url: "<%=request.getContextPath()%>/user/submitEventClassAjax.do", |
type: "POST", |
data: data, |
dataType: "json", |
success: function(resposta) { |
if(resposta.service && resposta.service == "ok") |
{ |
$("#saveProgress").html('<div class="alert alert-success">Salvo com sucesso</div>'); |
$('#modalAjaxRequest').modal('hide'); |
window.location.href = "<%=request.getContextPath()%>/user/startManageEventsClass.do"; |
} |
else if(resposta.service == "errors") |
{ |
$("#saveProgress").html(resposta.errors); |
} |
}, |
error: function() { |
$("#saveProgress").html('<div class="alert alert-danger">Erro de comunicação, por favor tente novamente</div>'); |
} |
}); |
} |
</script> |
<div class="panel panel-default"> |
<div class="panel-body"> |
<div class="text-info" id="saveProgress"></div> |
<html:form styleId="formEvent" action="/user/submitEventFormacoesAjax" styleClass="form-horizontal"> |
<input type="hidden" name="dispatch" value="saveEventAjax"> |
<jsp:useBean id="MyEventFormacoesForm" type="pt.estgp.estgweb.web.form.events.MyEventFormacoesForm" scope="request"/> |
<% |
if(event != null) |
MyEventFormacoesForm.setEvent(event); |
%> |
<html:hidden property="event.id"/> |
<div class="form-group"> |
<label class="control-label col-sm-2">Titulo</label> |
<div class="col-sm-10"> |
<html:text styleClass="form-control" property="event.title"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Descrição</label> |
<div class="col-sm-10"> |
<html:textarea rows="5" styleClass="form-control" property="event.description"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Observações</label> |
<div class="col-sm-10"> |
<html:textarea rows="5" styleClass="form-control" property="event.observacoes"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Locais</label> |
<div class="col-sm-10"> |
<html:textarea rows="5" styleClass="form-control" property="event.locais"/> |
</div> |
</div> |
<button type="button" class="btn btn-success" onclick="submitEventClassForm(form);"><bean:message key="confirm"/></button> |
</html:form> |
</div> |
</div> |
<% |
AbstractDao.getCurrentSession().getTransaction().commit(); |
%> |
</baco:hasRole> |
/branches/v3/impl/src/web/user/events/jsonSubmitOk.jsp |
---|
New file |
0,0 → 1,12 |
<%@ page contentType="application/json;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" %> |
<%@ 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-tiles.tld" prefix="tiles" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
{ |
"service":"ok", |
"messages":"<jomm:messages/>" |
} |
/branches/v3/impl/src/web/user/events/topnavMyEventsAddGeneric.jsp |
---|
New file |
0,0 → 1,12 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/homePae.do", "intranet.separator.home.back"); |
topNav.addNavPlace("/user/user/startManageMyEvents.do", "events.my.events"); |
topNav.addNavPlace(null, "events.my.events.add.generic"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
/branches/v3/impl/src/web/user/events/addEventFormacoes.jsp |
---|
New file |
0,0 → 1,644 |
<%@ page import="jomm.dao.impl.AbstractDao" %> |
<%@ page import="pt.estgp.estgweb.domain.*" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="pt.estgp.estgweb.web.utils.DatesUtils" %> |
<%@ page import="pt.estgp.estgweb.web.form.events.MyEventFormacoesForm" %> |
<%@ 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" %> |
<%@ 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-tiles.tld" prefix="tiles" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<% |
try{ |
%> |
<baco:hasRole role="admin,all,event_class_manager"> |
<% |
String classIdObj = request.getParameter("classId"); |
long classIdLong = 0; |
if(classIdObj != null) |
{ |
classIdLong = Long.parseLong(classIdObj); |
} |
EventFormacoes event = null; |
AbstractDao.getCurrentSession().beginTransaction(); |
EventClass eventClass; |
if(request.getAttribute("MyEventFormacoesForm") == null) |
{ |
if(request.getParameter("eventId") != null ) |
{ |
event = DaoFactory.getEventFormacoesDaoImpl().load(Long.parseLong(request.getParameter("eventId"))); |
eventClass = event.getEventClass(); |
} |
else |
{ |
event = DomainObjectFactory.createEventFormacoesImpl(); |
eventClass = DaoFactory.getEventClassDaoImpl().load(classIdLong); |
} |
request.setAttribute("eventClass",eventClass); |
} |
else |
{ |
pt.estgp.estgweb.web.form.events.MyEventFormacoesForm myEventFormacoesForm = (pt.estgp.estgweb.web.form.events.MyEventFormacoesForm) request.getAttribute("MyEventFormacoesForm"); |
eventClass = DaoFactory.getEventClassDaoImpl().load(myEventFormacoesForm.getEventClassId()); |
} |
%> |
<div class="panel panel-default"> |
<div class="panel-heading">Criar uma Formação na classe <%=eventClass.getName()%></div> |
<div class="panel-body"> |
<div class="text-info" id="saveProgress"></div> |
<html:errors/> |
<html:form styleId="FormEvent" action="/user/submitEventFormacoes" styleClass="form-horizontal" enctype="multipart/form-data"> |
<input type="hidden" name="dispatch" value="saveEvent"> |
<html:hidden property="eventClassId" value="${eventClass.id}"/> |
<jsp:useBean id="MyEventFormacoesForm" type="pt.estgp.estgweb.web.form.events.MyEventFormacoesForm" scope="request"/> |
<% |
if(event != null) |
{ |
MyEventFormacoesForm.setEvent(event); |
if(event.getDataAberturaFormulario() != null) |
MyEventFormacoesForm.setDataAberturaFormulario(DatesUtils.getStringFromDate(event.getDataAberturaFormulario())); |
if(event.getDataFechoFormulario() != null) |
MyEventFormacoesForm.setDataFechoFormulario(DatesUtils.getStringFromDate(event.getDataFechoFormulario())); |
if(event.getDataPublicacao() != null) |
MyEventFormacoesForm.setDataPublicacao(DatesUtils.getStringFromDate(event.getDataPublicacao())); |
if(event.getDataInicio() != null) |
MyEventFormacoesForm.setDataInicio(DatesUtils.getStringFromDate(event.getDataInicio())); |
} |
%> |
<html:hidden property="event.id"/> |
<%--INFORMACAO DE CONTROLO--%> |
<div class="panel panel-warning"> |
<div class="panel panel-heading">Controlo</div> |
<div class="panel-body"> |
<div class="form-group"> |
<label class="control-label col-sm-2">Evento Activo</label> |
<div class="col-sm-10"> |
<html:select styleClass="form-control" property="event.ativo"> |
<html:option value="true">Sim</html:option> |
<html:option value="false">Não</html:option> |
</html:select> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2" for="dataAberturaFormulario">Data Abertura Formulário</label> |
<div class="col-sm-8"> |
<div class="input-group date datetimepicker" > |
<html:text styleClass="form-control" property="dataAberturaFormulario" styleId="dataAberturaFormulario" /> |
<span class="input-group-addon"> |
<span class="glyphicon glyphicon-calendar"></span> |
</span> |
</div> |
</div> |
<div class="col-sm-2"> |
<button type="button" class="btn btn-danger" onClick="$('#dataAberturaFormulario').val('')"><span class="glyphicon glyphicon-remove"></span></button> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2" for="dataFechoFormulario">Data de Fecho do Formulário</label> |
<div class="col-sm-8"> |
<div class="input-group date datetimepicker" > |
<html:text styleClass="form-control" property="dataFechoFormulario" styleId="dataFechoFormulario" /> |
<span class="input-group-addon"> |
<span class="glyphicon glyphicon-calendar"></span> |
</span> |
</div> |
</div> |
<div class="col-sm-2"> |
<button type="button" class="btn btn-danger" onClick="$('#dataFechoFormulario').val('')"><span class="glyphicon glyphicon-remove"></span></button> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2" for="dataPublicacao">Data de Publicação (API's)*</label> |
<div class="col-sm-8"> |
<div class="input-group date datetimepicker" > |
<html:text styleClass="form-control" property="dataPublicacao" styleId="dataPublicacao" /> |
<span class="input-group-addon"> |
<span class="glyphicon glyphicon-calendar"></span> |
</span> |
</div> |
</div> |
<div class="col-sm-2"> |
<button type="button" class="btn btn-danger" onClick="$('#dataPublicacao').val('')"><span class="glyphicon glyphicon-remove"></span></button> |
</div> |
</div> |
<div class="text-info"> |
* Data de Publicação (API's) - Data a partir da qual o sistema publica através de API's automáticas JSON para sistemas externos como por exemplo o site do IPP. |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Utilizadores Permitidos **</label> |
<div class="col-sm-10"> |
<html:select styleClass="form-control" property="event.ativo"> |
<html:option value="false">Anónimos que efetuam registo no ato de inscrição</html:option> |
<html:option value="true">Apenas utilizadores ALUNO previamente registados na plataforma</html:option> |
</html:select> |
</div> |
</div> |
<div class="text-info"> |
** Utilizadores Permitidos - Utilizadores Tipo Aluno registados no sistema PAE ou utilizadores anónimos que são criados no ato do registo e aos quais é atribuido um código SIGES superior a 1.000.000 (1 Milhão). |
Professores que desejem frequentar formações terão de ter obrigatóriamente um segundo utilizador tipo Aluno registado na plataforma PAE. |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Categoria (Para efeitos de apresentação)</label> |
<div class="col-sm-10"> |
<html:text styleClass="form-control" property="event.category"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Sub Categoria (Para efeitos de apresentação)</label> |
<div class="col-sm-10"> |
<html:text styleClass="form-control" property="event.subCategory"/> |
</div> |
</div> |
</div> |
</div> |
<%--INFORMACAO DESECRITIVA--%> |
<div class="panel panel-default"> |
<div class="panel-heading">Informação Descritiva</div> |
<div class="panel-body"> |
<div class="form-group"> |
<label class="control-label col-sm-2">Titulo</label> |
<div class="col-sm-10"> |
<html:text styleClass="form-control" property="event.title"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Descrição</label> |
<div class="col-sm-10"> |
<html:textarea rows="5" styleClass="form-control" property="event.description"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Observações</label> |
<div class="col-sm-10"> |
<html:textarea rows="5" styleClass="form-control" property="event.observacoes"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Locais</label> |
<div class="col-sm-10"> |
<html:textarea rows="5" styleClass="form-control" property="event.locais"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2" for="dataInicio">Data de Inicio da Formação</label> |
<div class="col-sm-8"> |
<div class="input-group date datetimepicker" > |
<html:text styleClass="form-control" property="dataInicio" styleId="dataInicio" /> |
<span class="input-group-addon"> |
<span class="glyphicon glyphicon-calendar"></span> |
</span> |
</div> |
</div> |
<div class="col-sm-2"> |
<button type="button" class="btn btn-danger" onClick="$('#dataInicio').val('')"><span class="glyphicon glyphicon-remove"></span></button> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Informação prévia a apresentar no ato do registo</label> |
<div class="col-sm-10"> |
<html:textarea rows="5" styleClass="form-control" property="event.preInformation"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Informação a apresentar após o registo ter sido efetuado</label> |
<div class="col-sm-10"> |
<html:textarea rows="5" styleClass="form-control" property="event.afterRegisterInformation"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Ficheiro com Folheto promocional</label> |
<div class="col-sm-10"> |
<html:file styleClass="form-control" property="flyerFile"/> |
</div> |
</div> |
</div> |
</div> |
<%--CAMPOS DESEJADOS PARA O REGISTO--%> |
<div class="panel panel-default"> |
<div class="panel-heading">Campos opcionais abertos no Formulário</div> |
<div class="panel-body"> |
<div class="form-group"> |
<label class="control-label col-sm-2">Sexo</label> |
<div class="col-sm-10"> |
<html:checkbox styleClass="form-control" property="event.sexo"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Morada</label> |
<div class="col-sm-10"> |
<html:checkbox styleClass="form-control" property="event.morada"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">País</label> |
<div class="col-sm-10"> |
<html:checkbox styleClass="form-control" property="event.pais"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Data de Nascimento</label> |
<div class="col-sm-10"> |
<html:checkbox styleClass="form-control" property="event.dataNascimento"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Número de Contribuinte Fiscal</label> |
<div class="col-sm-10"> |
<html:checkbox styleClass="form-control" property="event.nif"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Número Cartão Cidadão</label> |
<div class="col-sm-10"> |
<html:checkbox styleClass="form-control" property="event.bi"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Telefone 1</label> |
<div class="col-sm-10"> |
<html:checkbox styleClass="form-control" property="event.telefone1"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Telefone 2</label> |
<div class="col-sm-10"> |
<html:checkbox styleClass="form-control" property="event.telefone2"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Empresa</label> |
<div class="col-sm-10"> |
<html:checkbox styleClass="form-control" property="event.empresa"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Escolaridade</label> |
<div class="col-sm-10"> |
<html:checkbox styleClass="form-control" property="event.escolaridade"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Profissão</label> |
<div class="col-sm-10"> |
<html:checkbox styleClass="form-control" property="event.profissao"/> |
</div> |
</div> |
</div> |
</div> |
<%--CAMPOS ESPECIFICOS DE FORMAÇÔES--%> |
<div class="panel panel-primary"> |
<div class="panel-heading">Informação Especifica dos Eventos tipo Formações</div> |
<div class="panel-body"> |
<div class="form-group"> |
<label class="control-label col-sm-2">Referência de Controlo</label> |
<div class="col-sm-10"> |
<html:text styleClass="form-control" property="event.referencia"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Unidade Orgânica</label> |
<div class="col-sm-10"> |
<html:select styleClass="form-control" property="event.unidadeOrganica"> |
<html:option value="ESTG">Escola Superior de Tecnologia e Gestão</html:option> |
<html:option value="ESECS">Escola Superior de Educação e Ciências Sociais</html:option> |
<html:option value="ESAE">Escola Superior Agrária de Elvas</html:option> |
<html:option value="ESS">Escola Superior de Saúde</html:option> |
<html:option value="IPP">Instituto Politécnico de Portalegre</html:option> |
</html:select> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Local de Realização (Sala, Laboratório, ...)</label> |
<div class="col-sm-10"> |
<html:text styleClass="form-control" property="event.localDeRealizacao"/> |
</div> |
</div> |
<script> |
$(document).ready( |
function(){ |
$("#eventoDominioSelect").change( |
function(){ |
if($(this).val() == 'Outro'){$('#outroDominioDiv').show();}else{$('#outroDominioDiv').val('');$('#outroDominioDiv').hide();} |
} |
); |
} |
); |
</script> |
<div class="form-group"> |
<label class="control-label col-sm-2">Dominio</label> |
<div class="col-sm-10"> |
<html:select styleId="eventoDominioSelect" styleClass="form-control" property="event.dominio"> |
<html:option value="">Escolha</html:option> |
<html:option value="Gestao">Gestão</html:option> |
<html:option value="Informatica">Informática</html:option> |
<html:option value="Marketing">Marketing</html:option> |
<html:option value="Outro">Outro</html:option> |
</html:select> |
</div> |
</div> |
<% |
if(event.getDominio() != null && event.getDominio().equals("Outro")) |
{ |
%> |
<script> |
$(document).ready( |
function(){ |
$('#outroDominioDiv').hide(); |
} |
); |
</script> |
<% |
} |
%> |
<div id="outroDominioDiv" class="form-group"> |
<label class="control-label col-sm-2">Outro dominio, qual?</label> |
<div class="col-sm-10"> |
<html:text styleClass="form-control" property="event.outroDominio"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Destinatários</label> |
<div class="col-sm-10"> |
<html:textarea rows="3" styleClass="form-control" property="event.destinatarios"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Conteúdos Leccionados</label> |
<div class="col-sm-10"> |
<html:textarea rows="10" styleClass="form-control" property="event.conteudos"/> |
</div> |
</div> |
</div> |
</div> |
<div class="panel panel-primary"> |
<div class="panel-heading">Gestão Finânceira de Abertura</div> |
<div class="panel-body"> |
<div class="form-group"> |
<label class="control-label col-sm-2">Status da Formação</label> |
<div class="col-sm-10"> |
<html:select styleClass="form-control" property="event.status"> |
<html:option value="Construcao">Em Construção</html:option> |
<html:option value="Activa">Activa</html:option> |
<html:option value="Concluida">Concluida</html:option> |
</html:select> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Número de Vagas</label> |
<div class="col-sm-10"> |
<div class="input-group"> |
<span class="input-group-addon"><i class="icon icon-users"></i></span> |
<html:text styleClass="form-control" property="event.numeroVagas"/> |
</div> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Duração em Horas</label> |
<div class="col-sm-10"> |
<div class="input-group"> |
<span class="input-group-addon"><i class="glyphicon glyphicon-hourglass"></i></span> |
<html:text styleClass="form-control" property="event.duracaoHoras"/> |
</div> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">ECTS</label> |
<div class="col-sm-10"> |
<div class="input-group"> |
<span class="input-group-addon"><i class="glyphicon glyphicon-education"></i></span> |
<html:text styleClass="form-control" property="event.ects"/> |
</div> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Dias de Duração</label> |
<div class="col-sm-10"> |
<div class="input-group"> |
<span class="input-group-addon"><i class="glyphicon glyphicon-hourglass"></i></span> |
<html:text styleClass="form-control" property="event.diasDuracao"/> |
</div> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Custo Previsto da Formação</label> |
<div class="col-sm-10"> |
<div class="input-group"> |
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span> |
<html:text styleClass="form-control" property="event.custoFormacao"/> |
</div> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Preço da Inscrição por Formando</label> |
<div class="col-sm-10"> |
<div class="input-group"> |
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span> |
<html:text styleClass="form-control" property="event.precoFormando"/> |
</div> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Percentagem de Lucro de Abertura</label> |
<div class="col-sm-10"> |
<div class="input-group"> |
<span class="input-group-addon">%</span> |
<html:text styleClass="form-control" property="event.percentagemMinimaLucro"/> |
</div> |
</div> |
</div> |
</div> |
</div> |
<!-- Success message --> |
<style> |
#success_message{ display: none;} |
</style> |
<div class="alert alert-success" role="alert" id="success_message">Success <i class="glyphicon glyphicon-thumbs-up"></i> Thanks for contacting us, we will get back to you shortly.</div> |
<button type="submit" class="btn btn-success"><bean:message key="confirm"/></button> |
</html:form> |
</div> |
</div> |
<% |
AbstractDao.getCurrentSession().getTransaction().commit(); |
%> |
</baco:hasRole> |
<script> |
$(document).ready(function() { |
$('#FormEvent').bootstrapValidator({ |
// To use feedback icons, ensure that you use Bootstrap v3.1.0 or later |
feedbackIcons: { |
valid: 'glyphicon glyphicon-ok', |
invalid: 'glyphicon glyphicon-remove', |
validating: 'glyphicon glyphicon-refresh' |
}, |
fields: { |
'event.title': { |
validators: { |
stringLength: { |
min: 2, |
message: "Este título não é válido" |
}, |
notEmpty: { |
message: 'Por favor coloque um titulo para a formação' |
} |
} |
} |
,'event.numeroVagas': { |
validators: { |
numeric: { |
message: "O Número de vagas têm de ser um número" |
}, |
notEmpty: { |
message: 'Por favor coloque um número de vagas para a formação' |
} |
} |
} |
,'event.duracaoHoras': { |
validators: { |
numeric: { |
message: "A duração em horas têm de ser um número" |
}, |
notEmpty: { |
message: 'Por favor coloque a duração em horas da formação' |
} |
} |
} |
,'event.ects': { |
validators: { |
numeric: { |
message: "O Número de ECTS têm de ser um número" |
}, |
notEmpty: { |
message: 'Por favor coloque um número de ECTS para a formação' |
} |
} |
} |
,'event.diasDuracao': { |
validators: { |
numeric: { |
message: "Os dias de duração têm de ser um número" |
}, |
notEmpty: { |
message: 'Por favor coloque um número de dias de duração da formação' |
} |
} |
} |
,'event.custoFormacao': { |
validators: { |
numeric: { |
message: "O custo da formação é especificado em Euros, insira um número por favor" |
}, |
notEmpty: { |
message: 'Por favor indique o custo da formação em euros' |
} |
} |
} |
,'event.precoFormando': { |
validators: { |
numeric: { |
message: "O preço da inscrição de um formando é especificado em Euros, insira um número por favor" |
}, |
notEmpty: { |
message: 'Por favor indique o preço de inscrição por formando em euros' |
} |
} |
} |
,'event.percentagemMinimaLucro': { |
validators: { |
numeric: { |
message: "O percentagem mínima de é obrigatório, insira um número por favor, pode ser Zero" |
}, |
notEmpty: { |
message: 'Por favor indique uma percentagem mínima de lucro' |
} |
} |
} |
} |
}) |
.on('success.form.bv', function(e) { |
$('#success_message').slideDown({ opacity: "show" }, "slow") // Do something ... |
$('#FormEvent').data('bootstrapValidator').resetForm(); |
// Prevent form submission |
e.preventDefault(); |
// Get the form instance |
var $form = $(e.target); |
// Get the BootstrapValidator instance |
var bv = $form.data('bootstrapValidator'); |
// Use Ajax to submit form data |
$.post($form.attr('action'), $form.serialize(), function(result) { |
console.log(result); |
}, 'json'); |
}); |
}); |
</script> |
<% |
}catch(Throwable e) |
{ |
System.out.println(e); |
e.printStackTrace(); |
} |
%> |
/branches/v3/impl/src/web/user/events/jsonSubmitErrors.jsp |
---|
New file |
0,0 → 1,12 |
<%@ page contentType="application/json;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" %> |
<%@ 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-tiles.tld" prefix="tiles" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
{ |
"service":"errors", |
"errors":"<jomm:errorsForJson/>" |
} |
/branches/v3/impl/src/web/user/events/myEvents.jsp |
---|
New file |
0,0 → 1,139 |
<%@ page import="jomm.dao.impl.AbstractDao" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="java.util.List" %> |
<%@ page import="pt.estgp.estgweb.web.utils.DatesUtils" %> |
<%@ page import="pt.estgp.estgweb.domain.*" %> |
<%@ 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" %> |
<%@ 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-tiles.tld" prefix="tiles" %> |
<%@ 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.UserSession" scope="request"/> |
<baco:hasRolePrefix role="admin,all,event_class_manager" rolePrefix="event_manager_"> |
<html:errors/> |
<jomm:messages/> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
<bean:message key="events.my.events"/> |
<% |
AbstractDao.getCurrentSession().beginTransaction(); |
List<EventClass> eventClasses = DaoFactory.getEventClassDaoImpl().findAll(); |
for(EventClass eventClass: eventClasses) |
{ |
request.setAttribute("eventClass",eventClass); |
%> |
<baco:hasRole role="admin,all,${eventClass.managersRole}"> |
<div class="panel panel-primary"> |
<div class="panel-heading"> |
<%=eventClass.getName()%> |
<% |
if(eventClass.isEventosGenericos()) |
{ |
%> |
<a class="btn btn-success pull-right" href="<%=request.getContextPath()%>/user/startSubmitEventGeneric.do?classId=${eventClass.id}"> |
<span class="glyphicon glyphicon-plus"> Genérico </span> |
</a> |
<% |
} |
%> |
<% |
if(eventClass.isEventosFormacoes()) |
{ |
%> |
<a class="btn btn-success pull-right" href="<%=request.getContextPath()%>/user/startSubmitEventFormacoes.do?classId=${eventClass.id}"> |
<span class="glyphicon glyphicon-plus"> Formações </span> |
</a> |
<% |
} |
%> |
</div> |
<div class="panel-body"> |
<div class="text-info"> |
<%=eventClass.getDescription()%> |
</div> |
<table class="tablesorterfiltered"> |
<thead> |
<tr> |
<th>ID</th> |
<th>Formulário</th> |
<th>Titulo</th> |
<th>Tipo</th> |
<th>Data Inicio</th> |
<th>Data Abertura do Formulário</th> |
<th>Rentabilidade %</th> |
</tr> |
</thead> |
<tbody> |
<% |
for(EventGeneric event: eventClass.getEvents()){ |
request.setAttribute("event",event); |
%> |
<tr> |
<td>${event.id}</td> |
<td> |
<logic:equal value="true" name="event" property="ativo"> |
<label class="alert alert-success alert-small">Ativo</label> |
</logic:equal> |
<logic:notEqual value="true" name="event" property="ativo"> |
<label class="alert bg-danger alert-small">Inativo</label> |
</logic:notEqual> |
</td> |
<td>${event.title}</td> |
<td> |
<%=event instanceof EventFormacoes ? "Formação (" + ((EventFormacoes)event).getStatus() + ")":"Genérico"%> |
</td> |
<td><%=DatesUtils.getStringFromDate(event.getDataInicio())%></td> |
<td><%=DatesUtils.getStringFromDate(event.getDataAberturaFormulario())%></td> |
<td> |
<% |
if(event instanceof EventFormacoes) |
{ |
if(((EventFormacoesImpl)event).isRentavel()) |
{ |
%> |
<label class="alert bg-success alert-small"><%=((EventFormacoesImpl)event).getPercentagemLucro()%></label> |
<% |
} |
else |
{ |
%> |
<label class="alert bg-warning alert-small"><%=((EventFormacoesImpl)event).getPercentagemLucro()%></label> |
<% |
} |
%> |
<% |
} |
%> |
</td> |
</tr> |
<% |
} |
%> |
</tbody> |
</table> |
</div> |
</div> |
</baco:hasRole> |
<% |
} |
%> |
<% |
AbstractDao.getCurrentSession().getTransaction().commit(); |
%> |
</div> |
<div class="panel-body"> |
</div> |
</div> |
</baco:hasRolePrefix> |
/branches/v3/impl/src/web/user/events/topnavMyEventsAddFormacoes.jsp |
---|
New file |
0,0 → 1,12 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/homePae.do", "intranet.separator.home.back"); |
topNav.addNavPlace("/user/user/startManageMyEvents.do", "events.my.events"); |
topNav.addNavPlace(null, "events.my.events.add.formacao"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
/branches/v3/impl/src/web/user/events/manageEventsClasses.jsp |
---|
New file |
0,0 → 1,130 |
<%@ page import="jomm.dao.impl.AbstractDao" %> |
<%@ page import="pt.estgp.estgweb.domain.EventClass" %> |
<%@ page import="pt.estgp.estgweb.domain.User" %> |
<%@ page import="pt.estgp.estgweb.domain.UserImpl" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="java.util.List" %> |
<%@ 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" %> |
<%@ 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-tiles.tld" prefix="tiles" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<baco:hasRole role="admin,all,event_class_manager"> |
<script> |
function removeEvent(eventClassId) |
{ |
$.getJSON('<%=request.getContextPath()%>/user/events/eventApiJson.jsp', |
{ |
service:"removeClassEvent", |
eventClassId:eventClassId |
}, |
function(data) |
{ |
if(data.response == "done") |
{ |
$("#eventClass" + eventClassId).remove(); |
$('#confirm-ModalFunction').modal('hide'); |
} |
else |
{ |
$("#eventClass" + eventClassId).css( |
{ |
"background-color":"red" |
} |
); |
$('#confirm-ModalFunction').modal('hide'); |
alert("ERRO NO SERVIÇO: " + data.msg); |
} |
}); |
} |
</script> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
<bean:message key="events.manage.events"/> |
<a class="btn btn-success pull-right" href="#" data-href="<%=request.getContextPath()%>/user/events/addClassEvent.jsp" data-title="Adicionar Nova Classe de Eventos" data-toggle="modal" data-target="#modalAjaxRequest"> |
<span class="glyphicon glyphicon-plus"> </span> |
</a> |
</div> |
<div class="panel-body"> |
<% |
AbstractDao.getCurrentSession().beginTransaction(); |
List<EventClass> eventClasses = DaoFactory.getEventClassDaoImpl().findAll(); |
request.setAttribute("eventClasses",eventClasses); |
%> |
<table class="tablesorterfiltered"> |
<thead> |
<tr> |
<th>ID</th> |
<th>Nome</th> |
<th>Papel Institucional de Gestão</th> |
<th>Pessoas na Gestão</th> |
<th>Tipos Permitidos</th> |
<th></th> |
<th></th> |
</tr> |
</thead> |
<tbody> |
<logic:iterate id="eventClass" name="eventClasses" type="pt.estgp.estgweb.domain.EventClass"> |
<tr id="eventClass<%=eventClass.getId()%>"> |
<td>${eventClass.id}</td> |
<td>${eventClass.name}</td> |
<td><bean:message key="user.role.${eventClass.managersRole}"/></td> |
<td> |
<div class="list-group"> |
<% |
List<User> users = DaoFactory.getUserDaoImpl().loadRoleUsers(eventClass.getManagersRole()); |
for(User u: users) |
{ |
%> |
<div class="list-group-item"><%=((UserImpl)u).getShortName()%></div> |
<% |
} |
%> |
</div> |
</td> |
<td> |
<div class="list-group"> |
<logic:equal value="true" name="eventClass" property="eventosGenericos"> |
<div class="list-group-item">Genéricos</div> |
</logic:equal> |
<logic:equal value="true" name="eventClass" property="eventosFormacoes"> |
<div class="list-group-item">Formações</div> |
</logic:equal> |
</div> |
</td> |
<td> |
<a class="btn btn-warning pull-right" href="#" data-href="<%=request.getContextPath()%>/user/events/addClassEvent.jsp?eventClassId=${eventClass.id}" data-title="Adicionar Nova Classe de Eventos" data-toggle="modal" data-target="#modalAjaxRequest"> |
<span class="glyphicon glyphicon-pencil"> </span> |
</a> |
</td> |
<td> |
<button class="btn btn-danger" type="button" data-toggle="modal" data-target="#confirm-ModalFunction" data-message="Esta operação apagar a classe de eventos selecionada, se existirem eventos a classe não pode ser removida!! Tem a certeza que deseja prosseguir?" data-script="removeEvent(${eventClass.id})"> |
<span class="glyphicon glyphicon-remove"></span> |
</button> |
</td> |
</tr> |
</logic:iterate> |
</tbody> |
</table> |
<% |
AbstractDao.getCurrentSession().getTransaction().commit(); |
%> |
</div> |
</div> |
</baco:hasRole> |
/branches/v3/impl/src/web/user/events/usersTeachersRoleManagementPanel.jsp |
---|
New file |
0,0 → 1,146 |
<%@ page import="pt.estgp.estgweb.domain.Teacher" %> |
<%@ page import="pt.estgp.estgweb.domain.User" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="java.util.List" %> |
<%@ 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" %> |
<%@ 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-tiles.tld" prefix="tiles" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<% |
//@parameter |
String startRole = (String) request.getAttribute("startRole"); |
String selectRoleInputId = (String) request.getAttribute("selectRoleInputId"); |
%> |
<script> |
function hideAfterSeconds(){ |
$("#classManagers").hide(); |
} |
$(document).ready( |
function() |
{ |
<% |
//Apenas se mostra a parte das pessoas se houver papel atribuido |
if(startRole == null || startRole.trim().length() == 0) |
{ |
%> |
//$("#classManagers").hide(); |
setTimeout("hideAfterSeconds()",500); |
<% |
} |
else |
{ |
%> |
reloadTable('<%=startRole%>'); |
<% |
} |
%> |
$("${selectRoleInputId}").change(function() |
{ |
if($("${selectRoleInputId}").val() == "") |
{ |
$("#classManagers").hide(); |
} |
else |
{ |
$("#classManagers").show(); |
reloadTable($("${selectRoleInputId}").val()); |
} |
}); |
}); |
function reloadTable(role) |
{ |
$("#usersTableWrapper").html('Por favor aguarde ... <img src="<%=request.getContextPath()%>/imgs/wait.gif"/>'); |
$.post('<%=request.getContextPath()%>/user/events/usersInRoleTable.jsp', |
{ |
tableRole:role |
}, |
function(html) |
{ |
$("#usersTableWrapper").html(html); |
evaluateTableSortersInside("#usersTableWrapper"); |
} |
); |
} |
function addManagerUser(role,userId) |
{ |
$.getJSON('<%=request.getContextPath()%>/user/events/eventApiJson.jsp', |
{ |
service:"addClassEventUser", |
userId:userId, |
eventRoleManager: role |
}, |
function(data) |
{ |
if(data.response == "done") |
{ |
reloadTable(role); |
} |
else |
{ |
$("#eventManager" + userId).css( |
{ |
"background-color":"red" |
} |
); |
alert("ERRO NO SERVIÇO: " + data.msg); |
} |
}); |
} |
</script> |
<div id="classManagers" class="panel panel-default"> |
<div class="panel-body"> |
<!--Adicionar Pessoa ao Papel--> |
<div class="form-group"> |
<label class="control-label col-sm-2"> |
Pessoas na Gestão * |
</label> |
<div class="col-sm-9"> |
<% |
List<User> usersAndTeachers = DaoFactory.getUserDaoImpl().findUsersFromClassUserAndTeacherOnly(); |
request.setAttribute("usersAndTeachers",usersAndTeachers); |
%> |
<select id="userSelectedForManager" class="form-control"> |
<logic:iterate id="user" name="usersAndTeachers" type="pt.estgp.estgweb.domain.User"> |
<option value="${user.id}"> |
${user.name} ( |
<% |
if(!(user instanceof Teacher)){ |
%>NORMAL<% |
}else{ |
%>"PROF"<% |
} |
%> |
) |
</option> |
</logic:iterate> |
</select> |
</div> |
<div class="col-sm-1"> |
<button type="button" class="btn btn-success" onclick="addManagerUser($('${selectRoleInputId}').val(),$('#userSelectedForManager').val())"><span class="glyphicon glyphicon-plus"></span></button> |
</div> |
</div> |
<!--Tabela de Pessoas ao Papel--> |
<div id="usersTableWrapper"> |
</div> |
</div> |
</div> |
/branches/v3/impl/src/web/user/events/addClassEvent.jsp |
---|
New file |
0,0 → 1,147 |
<%@ page import="jomm.dao.impl.AbstractDao" %> |
<%@ page import="pt.estgp.estgweb.domain.*" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="java.util.List" %> |
<%@ 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" %> |
<%@ 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-tiles.tld" prefix="tiles" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<baco:hasRole role="admin,all,event_class_manager"> |
<% |
EventClassImpl eventClass = null; |
AbstractDao.getCurrentSession().beginTransaction(); |
if(request.getParameter("eventClassId") != null) |
{ |
eventClass = (EventClassImpl) DaoFactory.getEventClassDaoImpl().load(Long.parseLong(request.getParameter("eventClassId"))); |
} |
else |
{ |
eventClass = DomainObjectFactory.createEventClass(); |
} |
%> |
<script> |
function submitEventClassForm(form) |
{ |
$("#dispatch").val("saveClassAjax"); |
var data = $("#formEventClass").serialize().replace(/%0D%0A/g, '%0A').replace(/\r?\n/g, "\r\n"); |
$("#saveProgress").html('<div class="alert alert-info">Enviando ...</div>'); |
$.ajax({ |
url: "<%=request.getContextPath()%>/user/submitEventClassAjax.do", |
type: "POST", |
data: data, |
dataType: "json", |
success: function(resposta) { |
if(resposta.service && resposta.service == "ok") |
{ |
$("#saveProgress").html('<div class="alert alert-success">Salvo com sucesso</div>'); |
$('#modalAjaxRequest').modal('hide'); |
window.location.href = "<%=request.getContextPath()%>/user/startManageEventsClass.do"; |
} |
else if(resposta.service == "errors") |
{ |
$("#saveProgress").html(resposta.errors); |
} |
}, |
error: function() { |
$("#saveProgress").html('<div class="alert alert-danger">Erro de comunicação, por favor tente novamente</div>'); |
} |
}); |
} |
</script> |
<div class="panel panel-default"> |
<div class="panel-body"> |
<div class="text-info" id="saveProgress"></div> |
<html:form styleId="formEventClass" action="/user/submitEventClassAjax" styleClass="form-horizontal"> |
<input type="hidden" name="dispatch" value="saveClassAjax"> |
<jsp:useBean id="EventClassForm" type="pt.estgp.estgweb.web.form.events.EventClassForm" scope="request"/> |
<% |
if(eventClass != null) |
EventClassForm.setEventClass(eventClass); |
%> |
<html:hidden property="eventClass.id"/> |
<div class="form-group"> |
<label class="control-label col-sm-2">Nome da Classe</label> |
<div class="col-sm-10"> |
<html:text styleClass="form-control" property="eventClass.name"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Descrição Administrativa</label> |
<div class="col-sm-10"> |
<html:text styleClass="form-control" property="eventClass.description"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2"> |
Tipos de Eventos Permitidos |
</label> |
<div class="col-sm-10"> |
<div class="list-group"> |
<div class="list-group-item">Genéricos: <html:checkbox property="eventClass.eventosGenericos"/></div> |
<div class="list-group-item">Formações <html:checkbox property="eventClass.eventosFormacoes"/></div> |
</div> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2"> |
Papel para gestão da classe * |
</label> |
<div class="col-sm-10"> |
<% |
List<UserRoleConfig> roles = DaoFactory.getUserRoleConfigDaoImpl().findRolesByPrefix("event_manager_"); |
request.setAttribute("roles",roles); |
%> |
<html:select styleId="roleManagerSelect" styleClass="form-control" property="eventClass.managersRole"> |
<html:option value="">Escolha</html:option> |
<logic:iterate id="role" name="roles" type="pt.estgp.estgweb.domain.UserRoleConfig"> |
<html:option value="${role.role}"><bean:message key="user.role.${role.role}"/></html:option> |
</logic:iterate> |
</html:select> |
</div> |
</div> |
<div> |
<% |
request.setAttribute("startRole",eventClass.getManagersRole()); |
request.setAttribute("selectRoleInputId","#roleManagerSelect"); |
%> |
<%-- Painel de Users + Teachers Gestão de Papel --%> |
<jsp:include page="usersTeachersRoleManagementPanel.jsp"/> |
</div> |
<button type="button" class="btn btn-success" onclick="submitEventClassForm(form);"><bean:message key="confirm"/></button> |
</html:form> |
<div class="text-info"> |
Para atribuir papeis de gestão de eventos especificos crie um papel com o prefixo: |
"event_manager_" e termine com o tipo de evento desejado, atribua depois o papel |
às pessoas com responsabilidade nesse tipo de evento. |
<a target="_blank" href="<%=request.getContextPath()%>/user/configurationUserRoles.do">Administre os papeis institucionais aqui</a> |
</div> |
</div> |
</div> |
<% |
AbstractDao.getCurrentSession().getTransaction().commit(); |
%> |
</baco:hasRole> |
/branches/v3/impl/src/web/user/events/topnavMyEvents.jsp |
---|
New file |
0,0 → 1,11 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/homePae.do", "intranet.separator.home.back"); |
topNav.addNavPlace(null, "events.my.events"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
/branches/v3/impl/src/web/user/events/usersInRoleTable.jsp |
---|
New file |
0,0 → 1,82 |
<%@ page import="pt.estgp.estgweb.domain.Teacher" %> |
<%@ page import="pt.estgp.estgweb.domain.User" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="java.util.List" %> |
<%@ page import="jomm.dao.impl.AbstractDao" %> |
<%@ 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" %> |
<%@ 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-tiles.tld" prefix="tiles" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<script> |
function removeManagerUser(role,userId) |
{ |
$.getJSON('<%=request.getContextPath()%>/user/events/eventApiJson.jsp', |
{ |
service:"removeClassEventUser", |
userId:userId, |
eventRoleManager: role |
}, |
function(data) |
{ |
if(data.response == "done") |
{ |
$("#eventManager" + userId).remove(); |
} |
else |
{ |
$("#eventManager" + userId).css( |
{ |
"background-color":"red" |
} |
); |
alert("ERRO NO SERVIÇO: " + data.msg); |
} |
}); |
} |
</script> |
<!--Tabela de Pessoas ao Papel--> |
<% |
//@parameter |
String tableRole = (String) request.getParameter("tableRole"); |
request.setAttribute("tableRole",tableRole); |
%> |
<div class="text-info">Utilizadores com o Papel: <bean:message key="user.role.${tableRole}"/></div> |
<table id="usersTable" class="tablesorterfiltered"> |
<thead> |
<tr> |
<th>Código</th> |
<th>Nome</th> |
<th>Contacto</th> |
<th>Editar</th> |
</tr> |
</thead> |
<tbody id="userContainer"> |
<% |
AbstractDao.getCurrentSession().beginTransaction(); |
for(User u: DaoFactory.getUserDaoImpl().loadRoleUsers(tableRole)) |
{ |
%> |
<tr id="eventManager<%=u.getId()%>"> |
<td><%=u instanceof Teacher ? ((Teacher)u).getSigesCode():""%></td> |
<td><%=u.getName()%></td> |
<td><%=u.getEmail()%></td> |
<td> |
<a class="btn btn-warning" target="_blank" href="<%=request.getContextPath()%>/user/startProfileFromSearchUsers.do?id=<%=u.getId()%>"><span class="glyphicon glyphicon-pencil"></span></a> |
<button type="button" class="btn btn-danger" onclick="removeManagerUser('<%=tableRole%>',<%=u.getId()%>)"><span class="glyphicon glyphicon-remove"></span></button> |
</td> |
</tr> |
<% |
} |
AbstractDao.getCurrentSession().getTransaction().commit(); |
%> |
</tbody> |
</table> |
/branches/v3/impl/src/web/user/events/topnavManageEventsClasses.jsp |
---|
New file |
0,0 → 1,11 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/homePae.do", "intranet.separator.home.back"); |
topNav.addNavPlace(null, "events.manage.events"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |