Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1522 → Rev 1524

/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=["&#173;",'<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"/>