Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1314 → Rev 1315

/branches/v3/impl/conf/language/MessageResourcesProfile.properties
41,6 → 41,7
profile.create.user=Criar Utilizador
profile.create.users=Criar Usuario
profile.siges.code=Código SIGES
profile.siges.code.public=Número
profile.siges.student.code=Número
profile.edit=Editar Perfil
profile.personal.data=Dados Pessoais
/branches/v3/impl/conf/language/MessageResourcesQuestionarios.properties
New file
0,0 → 1,10
################################################################################
#
# Questionarios MESSAGE RESOURCES
#
################################################################################
 
error.questionario.p.without.group=Verifique a pergunta {0} nao tem grupo
error.questionario.group.without.p=Verifique o grupo {0} nao tem pergunta
 
 
/branches/v3/impl/conf/language/MessageResourcesCourseUnits.properties
11,11 → 11,15
course.nav.without.arrow={0}
courseunit.security.not.implemented=N\u00e3o implementado por raz\u00f5es de seguran\u00e7a
courseunit.removed=Unidade Removida com sucesso
courseunits.nowarn.removed={0} Unidades Removidas com sucesso. (Com avisos nao foram removidas)
courseunits.all.removed={0} Unidades Removidas com sucesso
courseunit.cant.be.removed=N\u00e3o pode remover esta unidade
courseunit.menu.unit.old.units=Anos anteriores
courseunit.menu.unit.other.units=Outros Anos
courseunit.menu.unit=Unidade
courseunit.teachers=Corpo Docente
 
courseunit.teachers.teaching=Professores
courseunit.objectives=Objectivos da Unidade
courseunit.programfile.invalid=A ficha encontra-se submetido pela administra\u00e7\u00e3o mas n\u00e3o est\u00e1 validado pela Comiss\u00e3o de Curso
courseunit.programfilepath=Ficha Curricular
/branches/v3/impl/conf/WEB-INF/struts/tiles-courseunits.xml
55,7 → 55,7
</definition>
<definition name="page.submit.courseunit.from.home" extends="base.separators">
<put name="title" value="Unidade Curricular"/>
<put name="topnav" value="/user/home/topnavSubmitCourseUnit.jsp"/>
<put name="topnav" value="/user/home/topnavCourseUnit.jsp"/>
<put name="body" value="/user/courseunits/courseunitIntranet.jsp"/>
</definition>
<definition name="page.load.courseunit.works.from.home" extends="base.separators">
176,13 → 176,8
<put name="body" value="/admin/courseunits/courseUnitDeleteAdministration.jsp"/>
</definition>
 
<!--Remocao de unidades curriculares-->
<definition name="page.courseunit.delete.admin" extends="base.separators.semleft">
<put name="title" value="Apagar Unidades Curriculares Administração"/>
<put name="topnav" value="/admin/courseunits/topnavCourseUnitDeleteAdministration.jsp"/>
<put name="body" value="/admin/courseunits/courseUnitDeleteAdministration.jsp"/>
</definition>
 
 
<definition name="page.edit.courseunit.admin.from.course.unit.delete" extends="base.separators.semleft">
<put name="title" value="Unidade Curricular"/>
<put name="topnav" value="/admin/courseunits/topnavEditCourseUnitFromDelete.jsp"/>
/branches/v3/impl/conf/WEB-INF/struts/struts-pae-questionarios.xml
31,14 → 31,25
 
<action path="/admin/listQuestionarios" forward="page.pae.questionario.list"/>
 
<action path="/admin/formQuestionariosPae" forward="/admin/questionariosPaeLoads.do?dispatch=form"/>
<action path="/admin/questionariosPaeLoads"
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioController"
name="QuestionarioForm"
scope="request"
parameter="dispatch"
validate="false"
input="page.pae.questionario.list">
<forward name="list" path="page.pae.questionario.list"/>
</action>
<!--Authentication-->
<action path="/admin/questionariosPae"
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioController"
name="QuestionarioForm"
scope="request"
parameter="dispatch"
validate="false"
validate="true"
input="page.pae.questionario.list">
<forward name="list" path="page.pae.questionario.list"/>
<forward name="success" path="page.pae.separators.home"/>
</action>
 
/branches/v3/impl/conf/WEB-INF/tlds/jomm.tld
21,12 → 21,12
<attribute>
<name>property1</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>property2</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
73,12 → 73,12
<attribute>
<name>property1</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>property2</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
/branches/v3/impl/conf/app.properties
643,10 → 643,10
netpa.tipo.aula.8=Estagio HO
 
netpa.code.ocup.23.tipo.aula=1
netpa.code.ocup.22.code.ocup=2
netpa.code.ocup.19.code.ocup=5
netpa.code.ocup.21.code.ocup=6
netpa.code.ocup.20.code.ocup=3
netpa.code.ocup.22.tipo.aula=2
netpa.code.ocup.19.tipo.aula=5
netpa.code.ocup.21.tipo.aula=6
netpa.code.ocup.20.tipo.aula=3
 
 
#################
728,6 → 728,7
#questionario.instituition.6=
 
 
questionario.intro.text=<div>ATENÇÃO:&nbsp;</div><div><ul><li><span style="line-height: 1.42857;">Os/As estudantes que respondam a uma unidade curricular de Estágio, Projeto, Ensino Clínico ou Prática de Ensino Supervisionada, consoante o curso que frequentam, deverão apenas responder aos blocos iniciais e no final deverá optar pelo 4 ou 5 deste questionário.&nbsp;</span></li><li><span style="line-height: 1.42857;">A resposta a outras Unidades Curriculares faz-se respondendo às questões dos blocos 1, 2 e 3.</span></li></ul></div>
questionario.group1.title=Unidade Curricular
questionario.group2.title=Docente(s)
questionario.group3.title=Instalações/Equipamentos/Outros Recursos
/branches/v3/impl/conf/berserk/sd.xml
2386,7 → 2386,32
</filterChains>
</service>
 
<service>
<name>DeleteAllNoWarnCourseUnitService</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.DeleteCourseUnitService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>deleteCandidatesNoWarn</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="Admins"/>
</filterChains>
</service>
<service>
<name>DeleteAllCourseUnitService</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.DeleteCourseUnitService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>deleteCandidatesAll</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="Admins"/>
</filterChains>
</service>
 
 
<!--UserRole Services-->
<service>
<name>LoadRoleTranslationsIfDirty</name>
/branches/v3/impl/src/java/jomm/dao/impl/AbstractDao.java
606,6 → 606,36
* using the current value of the identifier property if the assigned
* generator is used.)
*/
public void update(CLAZZ obj)
{
try
{
getCurrentSession().update(obj);
}
catch (HibernateException e)
{
throw new DaoException(e);
}
}
 
public CLAZZ merge(CLAZZ obj)
{
try
{
return (CLAZZ) getCurrentSession().merge(obj);
}
catch (HibernateException e)
{
throw new DaoException(e);
}
}
 
/**
* Used by the base DAO classes but here for your modification Persist the
* given transient instance, first assigning a generated identifier. (Or
* using the current value of the identifier property if the assigned
* generator is used.)
*/
public final void saveOrUpdate(CLAZZ obj)
{
try
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courseunits/DeleteCourseUnitService.java
27,6 → 27,7
public String messageResult = "";
boolean canDelete = false;
public CourseUnitView cuv;
boolean deleted = false;
 
public List<String> getWarnings() {
return warnings;
184,6 → 185,7
 
}
DaoFactory.getCourseUnitDaoImpl().delete(cu);
result.deleted = true;
result.messageResult = "Unidade Apagada";
}
 
205,4 → 207,40
}
return courseUnitContentsInfos;
}
 
 
public Integer deleteCandidatesNoWarn(String importYear,UserSession session)
{
int count = 0;
List<CourseUnitContentsInfo> courseUnitContentsInfos = loadDeleteCandidates(importYear,session);
for(CourseUnitContentsInfo info: courseUnitContentsInfos)
{
if(info.isCanDelete() && info.getWarnings().size() == 0)
{
CourseUnitContentsInfo result = tryDelete(info.getCuv().getId(),session);
if(result.deleted)
count++;
}
}
return count;
}
 
public Integer deleteCandidatesAll(String importYear,UserSession session)
{
int count = 0;
List<CourseUnitContentsInfo> courseUnitContentsInfos = loadDeleteCandidates(importYear,session);
 
for(CourseUnitContentsInfo info: courseUnitContentsInfos)
{
if(info.isCanDelete())
{
CourseUnitContentsInfo result = tryDelete(info.getCuv().getId(),session);
if(result.deleted)
count++;
}
}
return count;
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportTeachersService.java
54,9 → 54,10
int teachersChangeBI = 0;
int unitsLocallyRemovedNotAdded = 0;
int professoresDesaparecidosDoSigesNesteAno = 0;
int cursosFicticios = 0;
 
//todo meter a zero no run
 
 
public ILogMessages run(String year,int institutionCode) throws ServiceException
{
 
73,6 → 74,7
teachersFound = 0;
teachersChangeBI = 0;
unitsLocallyRemovedNotAdded = 0;
cursosFicticios = 0;
 
String msgS = "STARTING TEACHERS IMPORT SERVICE FOR YEAR: " + year;
serviceLogInfo(msgS);
86,8 → 88,8
List<Integer> codigosDocentes = DocenteDao.getInstance().loadCodigosDocentes(institutionCode, year);
 
/**
* Este método vai procurar alunos no BACO neste ano que não vieram do SIGES
* Os alunos que não vieram da extração do SIGES e terão de ser consistidos
* Este método vai procurar processores no BACO neste ano que não vieram do SIGES
* Os professores que não vieram da extração do SIGES e terão de ser consistidos
* pois as suas unidades ter desaparecido todas de uma vez e vão aqui ficar penduradas
* Se foram adicionadas manualmente então nao serao removidas
*/
219,6 → 221,10
{
serviceLogInfo("CHECK DESAPARECIDOS OK - Não existem professores desaparecidos");
}
if(cursosFicticios > 0)
{
serviceLogInfo("#######Cursos Ficticios Encontrados (SITUACAO NAO PREVISTA):" + cursosFicticios);
}
 
logger.info("############################");
logger.info("############################");
242,6 → 248,10
{
logger.info("CHECK DESAPARECIDOS OK - Não existem professores desaparecidos");
}
if(cursosFicticios > 0)
{
logger.info("#######Cursos Ficticios Encontrados (SITUACAO NAO PREVISTA):" + cursosFicticios);
}
 
if(teachersChangeBI>0)
{
295,7 → 305,7
professoresDesaparecidosDoSigesNesteAno++;
Teacher t = DaoFactory.getTeacherDaoImpl().loadBySigesCode(c);
TeacherImpl teacherImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(t);
removerUnidadesQueDesapareceramNoSiges(teacherImpl,year, new HashSet<CourseUnit>());
removerUnidadesQueDesapareceramNoSiges(year, teacherImpl, new HashSet<CourseUnit>());
//consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>());
}
}
327,7 → 337,6
*/
private void sendNotificationAdmin(String subject, String cause)
{
//todo JOB
 
List<String> emails = ConfigProperties.getListValues("admin.email");
for(String email:emails)
440,6 → 449,9
logger.warn(msgS);
serviceLogInfo(msgS);
/******Logging****/
 
TeacherImpl tImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(teacher);
removerUnidadesQueDesapareceramNoSiges(year, tImpl, new HashSet<CourseUnit>());
}
else
{
448,16 → 460,18
//3 - Sao adicionadas ao teacher as que o docente ainda nao tiver da lista units
//4 - Remover da lista do teacher as unidades que não vêm do SIGES e que não foram adicionadas localmente
 
//o mapa nao esta a ser usado neste momento mas fica porque podera vir a ser necessario
//o docente e' colocado nas unidades todas e as turmas ficam nas tipologias tratadas na importacao de cursos
Map<CourseUnit,String> map_CourseUnit_x_Turma = new HashMap<CourseUnit, String>();
 
//PASSO 1
Set<CourseUnit> units = obterCadeirasBacoCorrespondentes(teacherSiges, teacher, logmessages,map_CourseUnit_x_Turma);
Set<CourseUnit> unitsFromSigesPersistentInBaco = obterCadeirasBacoCorrespondentes(year,teacherSiges, teacher, logmessages,map_CourseUnit_x_Turma);
//PASSO 2
removerRemovidasLocalmente(teacher, units);
TeacherImpl tImpl = removerRemovidasLocalmente(teacher, unitsFromSigesPersistentInBaco);
//PASSO 3
adicionarCadeirasNovasAoDocente(teacher, units);
adicionarCadeirasNovasAoDocente(tImpl, unitsFromSigesPersistentInBaco);
//PASSO 4
removerUnidadesQueDesapareceramNoSiges(teacher, year, units);
removerUnidadesQueDesapareceramNoSiges(year, tImpl, unitsFromSigesPersistentInBaco);
 
}
 
478,7 → 492,7
 
}
 
private void removerUnidadesQueDesapareceramNoSiges(Teacher teacher, String year, Set<CourseUnit> units)
private void removerUnidadesQueDesapareceramNoSiges(String year, Teacher teacher, Set<CourseUnit> units)
{
//Remover unidades deste ano que nao vem do SIGES e que nao foram adicionadas localmente
Iterator<CourseUnit> iterNowUnits = teacher.getTeachedUnits().iterator();
498,7 → 512,7
boolean added = false;
for(CourseUnit c: units)
{
if(cUNow.equals(c))
if(cUNow.getId() == c.getId())
{
added = true;
break;
541,7 → 555,7
boolean isIn = false;
for (CourseUnit tc : teacher.getTeachedUnits())
{
if (tc.equals(c))
if (tc.getId() == c.getId())
{
isIn = true;
break;
565,14 → 579,14
teacher.setTeachedUnits(units);
}
 
private void removerRemovidasLocalmente(Teacher teacher, Set<CourseUnit> units) {
private TeacherImpl removerRemovidasLocalmente(Teacher teacher, Set<CourseUnit> units) {
//2 - Sao retiradas da lista units as que o teacher tem mas que foram removidas localmente
Iterator<CourseUnit> iter = units.iterator();
TeacherImpl tImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(teacher);
while (iter.hasNext())
{
CourseUnit courseUnit = iter.next();
//In case of a comming proxy
TeacherImpl tImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(teacher);
if (tImpl.isLocalRemovedUnit(courseUnit))
{
/******Logging****/
585,11 → 599,11
iter.remove();
}
}
return tImpl;
}
 
private Set<CourseUnit> obterCadeirasBacoCorrespondentes(Docente teacherSiges, Teacher teacher, DefaultLogMessages logmessages,Map<CourseUnit,String> map_CourseUnit_x_Turma) {
private Set<CourseUnit> obterCadeirasBacoCorrespondentes(String year, Docente teacherSiges, Teacher teacher, DefaultLogMessages logmessages,Map<CourseUnit,String> map_CourseUnit_x_Turma) {
String msgS;
System.out.println("STATING STEP 1");
Set<CourseUnit> units = new HashSet<CourseUnit>();
 
for (Disciplina disciplina : teacherSiges.getDisciplinas())
597,31 → 611,23
List<CourseUnit> loadedunits = new ArrayList<CourseUnit>();
if(disciplina.getCodigoCurso().intValue() < 0)
{
//TODO AQUI CARREGA AS CADEIRAS DE TODOS OS CURSOS >>>> loadedunits
//EXPLICACAO:
 
//O CODIGO DE CURSO VEM A NULL E E METIDO PELO DAO A -1
//PORQUE OS ACADEMICOS NAO DEFINEM CURSO NA ASSOCIAÇÃO DO DOCENTE À TURMA NA TABELA T_DOC_TURMA
//ISTO ACONTECE PORQUE A TURMA E MISTA E DE VARIOS CURSOS
//NESTE CASO COLOCAMOS O DOCENTE NAS TURMAS TODAS
//NESTE CASO COLOCAMOS O DOCENTE NAS cadeiras dos cursos TODOS
 
//TODO -- CASO ESPECIAL TEM DE SER TRATADO DE FORMA ESPECIAL
//TODO -- ISTO VAI OBRIGAR A FAZER O MESMO PROCESSO N VEZES MUDAMOS PARA UMA LISTA DE LOADEDUNITS
//TODO -- TEMOS MESMO DE IR BUSCAR AS CADEIRAS AO MAPA DAS TURMAS PRIMEIRO, O MAPA DEVOLVE O CURSO REAL DA TURMA??? PODE SER QUE NAO
//TODO -- >>>>>NO CASO DA IMPORTACAO DE ESTUDANTES JA GARANTIMOS QUE A TROCA DE CURSO E FEITA PARA O CORRECTO<<<<<<<
//TODO -- OU SEJA SE OPTASSEMOS POR IR BUSCAR O CURSO REAL AO MAPA: 1) Caso seja apenas 1 para essa turma é esse o curso real,
//TODO -- mas nesse caso também existe apenas uma cadeira com essa Turma que é nesse curso
//TODO -- que é precisamente a cadeira com o curso real, será? pode haver uma cadeira noutro curso nessa turma se o mapa der um curso real unico? Nao.
//TODO -- O WEB SERVICE DEVOLVE TODAS AS COMBINACOES POSSIVEIS ASSUMIDAS DE INSCRICOES NORMAIS COM CD_TIPDISC = 1 ou 2
//TODO -- Caso 2) Caso haja duas metemos o docente em todas as cadeiras possiveis (CASO ESCPECIAL), ou as guardamos no mapa de cursos reais,
//TODO -- ou então vamos à base de dados buscar todas as possiveis e metemos o docente em todas.
//TODO -- PORTANTO AS CADEIRAS QUE TEMOS NA NOSSA BD JA SAO APENAS AS VALIDAS GARANTIDAS NA IMPORTACAO DE ESTUDANTES
//TODO -- NAO HA CURSO VINDO DO WEB-SERVICE METEMOS O DOCENTE COM TODAS AS POSSIVEIS CONSIDERANDO A TURMA
//TODO -- FORMA DE ENCONTRAR A TURMA DEPOIS, TEM DE MUDAR PORQUE VAI MUDAR DE TABELA
 
//TODO -- Isto vai passar a vir com Tipologias. Muda alguma coisa? A mesma cadeira vem duas vezes, mas o procedimento tem de ser o mesmo para as duas vezes
//TODO -- que ela é devolvida, caso já exista nao se faz nada, pode-se meter na lista à mesma, fica lá duas vezes, sera?
//todo futuro turmas separadas
//neste caso das turmas separadas existe uma duvida:
//Vir < 0 no codigo de curso significa que alunos de varios cursos podem estar nesta unidade
//isso significa que nao temos cursos --> nao saber se é separated turmas
//se nao sabemos se é separated turmas nunca podemos saber como ir buscar as unidades ao BACO
// neste caso vamos busca-las sem a turma a descriminar e atribuimos todas ao docente.
//a hipotese no futuro é, para todas as cadaeiras que forem devolvidas
//corremos uma a uma e verificamos o seu curso, se for separated turmas e a turma for igual
//a da disciplina adicionamos, se não for seprated turmas adicionamos sempre
 
 
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUniqueAllCourses("" + disciplina.getCodigo(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo());
if(courseUnits!=null)
{
648,14 → 654,35
}
/******Logging****/
}
else{ //TODO AQUI CARREGA COM O FILTRO DO CURSO QUE VEIO NA ASSOCIACAO >>>>> loadedunits
else{
 
boolean cursoFicticio = ImportStudentsService.isCursoFicticio(disciplina.getCodigoCurso());
if(cursoFicticio)
{
msgS = "WARNING WARNING #### Docente com curso ficticio, nao esperamos aqui cursos ficticios: " + disciplina.getCodigoCurso();
serviceLogWarn(msgS);
logger.warn(msgS);
logmessages.addMessage(new DefaultLogMessage("import.teachers", LogMessageTypeEnum.WARNING,msgS ));
cursosFicticios++;
continue;
}
 
//Nao vamos usar este pormenor aqui. Caregamos todas e pronto. Os docentes ficam associados às duas unidades das duas turmas
//mesmo no caso das turmas separadas. As tipologias tratam das associações às turmas para que não haja questionarios a mais
//na criacao de questionarios é natural que falhe alguma coisa por haver aqui unidades a mais
//por isso devera ser ai feita a verificacao destes casos
boolean separateTurmas = ImportCourseService.loadCourseYearTurmasPolicy(disciplina.getCodigoCurso(), year, logmessages, this);
/*
este procedimento requer que a turma venha do siges, neste momento nao vem
if(separateTurmas)
loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUniqueWithTurma("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo(),disciplina.getCdTurma());
else
loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo());
*/
loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo());
 
/*******Logging************************/
if(loadedunits.size()>1)
if(loadedunits.size() > 1 && !separateTurmas)
{
 
unitsDuplicated++;
msgS = "WARNING WARNING #### UnitsDuplicated: ";
serviceLogWarn(msgS);
667,6 → 694,26
serviceLogWarn(msgS);
logmessages.addMessage(new DefaultLogMessage("import.teachers", LogMessageTypeEnum.WARNING,msgS ));
}
if(loadedunits.size() > 1 && separateTurmas)
{
Map<String,String> turmas = new HashMap<String, String>();
 
for(CourseUnit c :loadedunits)
{
turmas.put(c.getCdTurma(),c.getCdTurma());
}
if(turmas.size() < loadedunits.size())
{
unitsDuplicated++;
msgS = "WARNING WARNING #### O Curso é de turmas separadas mas o docente tem unidades repetidas com a mesma turma: ";
serviceLogWarn(msgS);
logmessages.addMessage(new DefaultLogMessage("import.teachers", LogMessageTypeEnum.WARNING,msgS ));
logmessages.addMessage(new DefaultLogMessage("import.teachers", LogMessageTypeEnum.WARNING,msgS ));
msgS = "WARNING WARNING ####String sigesCode, String courseCode, String semestre, String year = " + disciplina.getCodigo() + ", " + disciplina.getCodigoCurso() + ","+ disciplina.getCdDuracao() + "," + disciplina.getCdLectivo();
serviceLogWarn(msgS);
}
turmas.clear();
}
/*******Logging************************/
}
 
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java
444,9 → 444,11
 
private void fillTipologias(Disciplina d, CourseUnitImpl c) {
try {
CourseUnitImpl.Tipologias t = ((CourseUnitImpl)c).getTipologiasClass();
CourseUnitImpl.Tipologias t = c.getTipologiasClass();
if(t == null)
t = new CourseUnitImpl.Tipologias();
 
t.setTipologiasSumarios(new ArrayList<CourseUnitImpl.Tipologia>());
for(TipologiasSumario.TipologiaSumario tipologiaSumario : d.getTipologiasSumario().getTipologias())
{
CourseUnitImpl.Tipologia tipoSum = new CourseUnitImpl.Tipologia();
457,6 → 459,7
tipoSum.setCdTipologia(""+tipologiaSumario.getCdTipoAula());
t.getTipologiasSumarios().add(tipoSum);
}
t.setTipologiasHorarioReferencia(new ArrayList<CourseUnitImpl.Tipologia>());
for(TipologiasHorario.TipologiaHorario tipologiaHorario : d.getTipologiasHorario().getTipologias())
{
CourseUnitImpl.Tipologia tipoSum = new CourseUnitImpl.Tipologia();
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitTurmaView.java
New file
0,0 → 1,50
package pt.estgp.estgweb.domain.views;
 
import pt.estgp.estgweb.domain.CourseUnitTurma;
 
import java.io.Serializable;
import java.util.List;
 
/**
* Created by jorgemachado on 11/03/16.
*/
public class CourseUnitTurmaView extends DomainObjectView {
 
private Long id;
private List<UserView> students;
private String turma;
 
public void setId(Long id) {
this.id = id;
}
 
public void setStudents(List<UserView> students) {
this.students = students;
}
 
public void setTurma(String turma) {
this.turma = turma;
}
 
@Override
public Class getReferenceClass() {
return CourseUnitTurma.class;
}
 
@Override
public Serializable getSerializable() {
return id;
}
 
public Long getId() {
return id;
}
 
public List<UserView> getStudents() {
return students;
}
 
public String getTurma() {
return turma;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/views/UserView.java
74,6 → 74,20
 
private boolean propinasEmDia = false;
 
private CourseUnitTurmaView studentCourseUnitTurmaView = null;
 
public void setStudentCourseUnitTurmaView(CourseUnitTurmaView studentCourseUnitTurmaView) {
this.studentCourseUnitTurmaView = studentCourseUnitTurmaView;
}
 
public String getStudentTurma()
{
if(studentCourseUnitTurmaView == null)
return "";
else
return studentCourseUnitTurmaView.getTurma();
}
 
public UserView()
{}
 
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java
64,6 → 64,8
private String sumariosPathFileIntranet;
private String cdTurma;
 
private List<CourseUnitTurmaView> turmas = null;
 
private boolean notFound = false;
 
private CourseView courseView;
72,6 → 74,8
 
private boolean evaluationOpenByAdmin = false;
 
private String topologies;
 
public Class getReferenceClass()
{
return CourseUnitImpl.class;
125,6 → 129,7
 
this.interfaceImportYear = DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear();
 
this.topologies = courseUnit.getTipologias();
this.pathIntranet = courseUnit.getPathIntranet();
this.normalizedName = courseUnit.getNormalizedName();
this.courseUnit = courseUnit;
179,10 → 184,24
}
if(initStudents && courseUnit.getStudents() != null)
{
for(StudentImpl s: courseUnit.getStudents())
turmas = new ArrayList<CourseUnitTurmaView>();
if(courseUnit.getTurmas() != null)
{
UserView u = new UserView(s);
students.add(u);
 
for(CourseUnitTurma t: courseUnit.getTurmas())
{
CourseUnitTurmaView tv = new CourseUnitTurmaView();
tv.setTurma(t.getTurma());
tv.setStudents(new ArrayList<UserView>());
for(StudentImpl s: courseUnit.getStudents())
{
UserView u = new UserView(s);
u.setStudentCourseUnitTurmaView(tv);
students.add(u);
tv.getStudents().add(u);
}
turmas.add(tv);
}
}
}
if(initBlog)
753,4 → 772,65
}
return studentsOrderedByName;
}
 
private List<CourseUnitImpl.Tipologia> mergedTipologias = null;
 
 
public List<CourseUnitImpl.Tipologia> getTipologias()
{
try {
if(mergedTipologias == null)
mergedTipologias = ((CourseUnitImpl)courseUnit).getTipologiasClass().obtainMergeTipologias();
} catch (Exception e) {
logger.error(e,e);
}
return mergedTipologias;
}
 
public List<CourseUnitImpl.Tipologia> loadTopologiasDocente(String codigo)
{
 
if(getTipologias() == null)
return null;
List<CourseUnitImpl.Tipologia> tipologiasDocente = new ArrayList<CourseUnitImpl.Tipologia>();
try {
for(CourseUnitImpl.Tipologia t: getTipologias())
{
if(t.getCdDocente().equals(codigo))
tipologiasDocente.add(t);
}
return tipologiasDocente;
} catch (Exception e) {
logger.error(e,e);
}
return null;
}
 
public Map<String,List<String>> getTipologiasTurmas(String codigo)
{
 
if(getTipologias() == null)
return null;
List<CourseUnitImpl.Tipologia> tipologiasDocente = new ArrayList<CourseUnitImpl.Tipologia>();
try {
Map<String,List<String>> mapa = new HashMap<String, List<String>>();
for(CourseUnitImpl.Tipologia t: getTipologias())
{
if(t.getCdDocente().equals(codigo))
{
List<String> turmas = mapa.get(t.getDsTipologia());
if(turmas == null)
{
turmas = new ArrayList<String>();
mapa.put(t.getDsTipologia(),turmas);
}
turmas.add(t.getCdTurma());
}
}
return mapa;
} catch (Exception e) {
logger.error(e,e);
}
return null;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/QuestionarioImpl.java
13,17 → 13,44
 
public enum State
{
CREATED,
ASSIGNED, // -> All tipologies prototypes created and assigned to student answers
PROCESSING, // -> Impossible to change or edit prototypes, possible to answer
CLOSED, // -> Impossible to answer
STATISTICS1
 
CREATED(1),
ASSIGNED(2), // -> All tipologies prototypes created and assigned to student answers
PROCESSING(3), // -> Impossible to change or edit prototypes, possible to answer
CLOSED(4), // -> Impossible to answer
STATISTICS1(5);
 
private int pos = 1;
 
State(int pos)
{
this.pos = pos;
}
 
public static State parse(String state)
{
for(State s: State.values())
{
if(s.name().equals(state))
return s;
}
return CREATED;
}
 
public int getPosition()
{
return pos;
}
}
 
 
 
public QuestionarioImpl() {
super();
 
setState(State.CREATED.name());
 
setIntroHtml(ConfigProperties.getProperty("questionario.intro.text"));
setGroup1Title(ConfigProperties.getProperty("questionario.group1.title"));
setGroup2Title(ConfigProperties.getProperty("questionario.group2.title"));
setGroup3Title(ConfigProperties.getProperty("questionario.group3.title"));
58,4 → 85,9
QuestionarioImpl q = new QuestionarioImpl();
System.out.println(q);
}
 
public State getStateEnum()
{
return State.parse(getState());
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/CourseUnitImpl.java
102,6 → 102,7
return null;
}
 
 
public boolean equalsSiges(Object anotherInstance,boolean turmasSeparadas)
{
if(anotherInstance instanceof CourseUnitImpl)
625,30 → 626,33
public List<Tipologia> obtainMergeTipologias()
{
List<Tipologia> merge = new ArrayList<Tipologia>();
merge.addAll(getTipologiasSumarios());
if(getTipologiasSumarios() != null)
merge.addAll(getTipologiasSumarios());
 
for(Tipologia tipo: tipologiasHorarioReferencia)
{
if(!merge.contains(tipo))
if(getTipologiasHorarioReferencia() != null)
for(Tipologia tipo: getTipologiasHorarioReferencia())
{
merge.add(tipo);
if(!merge.contains(tipo))
{
merge.add(tipo);
}
}
}
for(Tipologia tipo: tipologiasExtraAdicionadas)
{
if(!merge.contains(tipo))
if(getTipologiasExtraAdicionadas() != null)
for(Tipologia tipo: getTipologiasExtraAdicionadas())
{
merge.add(tipo);
if(!merge.contains(tipo))
{
merge.add(tipo);
}
}
}
for(Tipologia tipo: merge)
{
if(tipologiasHorarioReferencia.contains(tipo))
if(getTipologiasHorarioReferencia() != null && getTipologiasHorarioReferencia().contains(tipo))
{
tipo.horRef = true;
}
 
if(tipologiasExtraAdicionadas.contains(tipo))
if(getTipologiasExtraAdicionadas() != null && getTipologiasExtraAdicionadas().contains(tipo))
{
tipo.extra = true;
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/test/TestCourseUnit.java
319,4 → 319,387
 
}
 
public void testMerge2()
{
Tipologias ts = new Tipologias();
ts.setTipologiasHorarioReferencia(new ArrayList<Tipologia>());
ts.setTipologiasExtraAdicionadas(new ArrayList<Tipologia>());
ts.setTipologiasSumarios(null);
 
 
Tipologia t = new Tipologia();
t.setCdTurma("TINF");
t.setCdDocente("20128");
t.setCdTipologia("T");
t.setOcorrencias(null);
ts.getTipologiasHorarioReferencia().add(t);
t = new Tipologia();
t.setCdTurma("TINF");
t.setCdDocente("20128");
t.setCdTipologia("PL");
t.setOcorrencias(null);
ts.getTipologiasHorarioReferencia().add(t);
 
 
t = new Tipologia();
t.setCdTurma("TINF2");
t.setCdDocente("20128");
t.setCdTipologia("OT");
t.setOcorrencias(null);
ts.getTipologiasExtraAdicionadas().add(t);
t = new Tipologia();
t.setCdTurma("TINF2");
t.setCdDocente("20128");
t.setCdTipologia("Sem");
t.setOcorrencias(null);
ts.getTipologiasExtraAdicionadas().add(t);
 
 
 
 
/*
t = new Tipologia();
t.setCdTurma("TINF");
t.setCdDocente("20128");
t.setCdTipologia("T");
t.setOcorrencias(10);
ts.getTipologiasSumarios().add(t);
t = new Tipologia();
t.setCdTurma("TINF");
t.setCdDocente("20128");
t.setCdTipologia("TP");
t.setOcorrencias(20);
ts.getTipologiasSumarios().add(t);
*/
 
boolean foundT = false;
boolean foundPL = false;
boolean foundOT = false;
boolean foundSem = false;
//boolean foundTP = false;
 
String serial = null;
try {
serial = ts.serialize();
Tipologias tsTeste = Tipologias.deserialize(serial);
List<Tipologia> merge = tsTeste.obtainMergeTipologias();
 
assertTrue(merge.size() == 4);
 
for(Tipologia tipologia: merge)
{
if(tipologia.getCdTipologia().equals("T"))
{
assertTrue(tipologia.isHorRef());
assertFalse(tipologia.isSumario());
assertFalse(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0);
foundT = true;
}
if(tipologia.getCdTipologia().equals("PL"))
{
assertTrue(tipologia.isHorRef());
assertFalse(tipologia.isSumario());
assertFalse(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0);
foundPL = true;
}
if(tipologia.getCdTipologia().equals("OT"))
{
assertFalse(tipologia.isHorRef());
assertFalse(tipologia.isSumario());
assertTrue(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0);
foundOT = true;
}
if(tipologia.getCdTipologia().equals("Sem"))
{
assertFalse(tipologia.isHorRef());
assertFalse(tipologia.isSumario());
assertTrue(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0);
foundSem = true;
}
/*if(tipologia.getCdTipologia().equals("TP"))
{
assertFalse(tipologia.isHorRef());
assertTrue(tipologia.isSumario());
assertFalse(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == 20);
foundTP = true;
}*/
}
assertTrue(foundT);
assertTrue(foundPL);
assertTrue(foundOT);
assertTrue(foundSem);
//assertTrue(foundTP);
 
} catch (IOException e) {
e.printStackTrace();
} catch (TransformationException e) {
e.printStackTrace();
}
 
 
 
}
 
public void testMerge3()
{
Tipologias ts = new Tipologias();
ts.setTipologiasHorarioReferencia(new ArrayList<Tipologia>());
ts.setTipologiasExtraAdicionadas(null);
ts.setTipologiasSumarios(null);
 
 
Tipologia t = new Tipologia();
t.setCdTurma("TINF");
t.setCdDocente("20128");
t.setCdTipologia("T");
t.setOcorrencias(null);
ts.getTipologiasHorarioReferencia().add(t);
t = new Tipologia();
t.setCdTurma("TINF");
t.setCdDocente("20128");
t.setCdTipologia("PL");
t.setOcorrencias(null);
ts.getTipologiasHorarioReferencia().add(t);
 
 
/*
t = new Tipologia();
t.setCdTurma("TINF2");
t.setCdDocente("20128");
t.setCdTipologia("OT");
t.setOcorrencias(null);
ts.getTipologiasExtraAdicionadas().add(t);
t = new Tipologia();
t.setCdTurma("TINF2");
t.setCdDocente("20128");
t.setCdTipologia("Sem");
t.setOcorrencias(null);
ts.getTipologiasExtraAdicionadas().add(t);
*/
 
 
 
/*
t = new Tipologia();
t.setCdTurma("TINF");
t.setCdDocente("20128");
t.setCdTipologia("T");
t.setOcorrencias(10);
ts.getTipologiasSumarios().add(t);
t = new Tipologia();
t.setCdTurma("TINF");
t.setCdDocente("20128");
t.setCdTipologia("TP");
t.setOcorrencias(20);
ts.getTipologiasSumarios().add(t);
*/
 
boolean foundT = false;
boolean foundPL = false;
//boolean foundOT = false;
//boolean foundSem = false;
//boolean foundTP = false;
 
String serial = null;
try {
serial = ts.serialize();
Tipologias tsTeste = Tipologias.deserialize(serial);
List<Tipologia> merge = tsTeste.obtainMergeTipologias();
 
assertTrue(merge.size() == 2);
 
for(Tipologia tipologia: merge)
{
if(tipologia.getCdTipologia().equals("T"))
{
assertTrue(tipologia.isHorRef());
assertFalse(tipologia.isSumario());
assertFalse(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0);
foundT = true;
}
if(tipologia.getCdTipologia().equals("PL"))
{
assertTrue(tipologia.isHorRef());
assertFalse(tipologia.isSumario());
assertFalse(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0);
foundPL = true;
}
/*if(tipologia.getCdTipologia().equals("OT"))
{
assertFalse(tipologia.isHorRef());
assertFalse(tipologia.isSumario());
assertTrue(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0);
foundOT = true;
}
if(tipologia.getCdTipologia().equals("Sem"))
{
assertFalse(tipologia.isHorRef());
assertFalse(tipologia.isSumario());
assertTrue(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0);
foundSem = true;
}*/
/*if(tipologia.getCdTipologia().equals("TP"))
{
assertFalse(tipologia.isHorRef());
assertTrue(tipologia.isSumario());
assertFalse(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == 20);
foundTP = true;
}*/
}
assertTrue(foundT);
assertTrue(foundPL);
//assertTrue(foundOT);
//assertTrue(foundSem);
//assertTrue(foundTP);
 
} catch (IOException e) {
e.printStackTrace();
} catch (TransformationException e) {
e.printStackTrace();
}
 
 
 
}
 
public void testMerge4()
{
Tipologias ts = new Tipologias();
ts.setTipologiasHorarioReferencia(null);
ts.setTipologiasExtraAdicionadas(null);
ts.setTipologiasSumarios(null);
 
 
/*
Tipologia t = new Tipologia();
t.setCdTurma("TINF");
t.setCdDocente("20128");
t.setCdTipologia("T");
t.setOcorrencias(null);
ts.getTipologiasHorarioReferencia().add(t);
t = new Tipologia();
t.setCdTurma("TINF");
t.setCdDocente("20128");
t.setCdTipologia("PL");
t.setOcorrencias(null);
ts.getTipologiasHorarioReferencia().add(t);
*/
 
/*
t = new Tipologia();
t.setCdTurma("TINF2");
t.setCdDocente("20128");
t.setCdTipologia("OT");
t.setOcorrencias(null);
ts.getTipologiasExtraAdicionadas().add(t);
t = new Tipologia();
t.setCdTurma("TINF2");
t.setCdDocente("20128");
t.setCdTipologia("Sem");
t.setOcorrencias(null);
ts.getTipologiasExtraAdicionadas().add(t);
*/
 
 
 
/*
t = new Tipologia();
t.setCdTurma("TINF");
t.setCdDocente("20128");
t.setCdTipologia("T");
t.setOcorrencias(10);
ts.getTipologiasSumarios().add(t);
t = new Tipologia();
t.setCdTurma("TINF");
t.setCdDocente("20128");
t.setCdTipologia("TP");
t.setOcorrencias(20);
ts.getTipologiasSumarios().add(t);
*/
 
//boolean foundT = false;
//boolean foundPL = false;
//boolean foundOT = false;
//boolean foundSem = false;
//boolean foundTP = false;
 
String serial = null;
try {
serial = ts.serialize();
Tipologias tsTeste = Tipologias.deserialize(serial);
List<Tipologia> merge = tsTeste.obtainMergeTipologias();
 
assertTrue(merge.size() == 0);
 
for(Tipologia tipologia: merge)
{
/*
if(tipologia.getCdTipologia().equals("T"))
{
assertTrue(tipologia.isHorRef());
assertTrue(tipologia.isSumario());
assertFalse(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == 10);
foundT = true;
}
if(tipologia.getCdTipologia().equals("PL"))
{
assertTrue(tipologia.isHorRef());
assertFalse(tipologia.isSumario());
assertFalse(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0);
foundPL = true;
}
*/
/*if(tipologia.getCdTipologia().equals("OT"))
{
assertFalse(tipologia.isHorRef());
assertFalse(tipologia.isSumario());
assertTrue(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0);
foundOT = true;
}
if(tipologia.getCdTipologia().equals("Sem"))
{
assertFalse(tipologia.isHorRef());
assertFalse(tipologia.isSumario());
assertTrue(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == null || tipologia.getOcorrencias() == 0);
foundSem = true;
}*/
/*if(tipologia.getCdTipologia().equals("TP"))
{
assertFalse(tipologia.isHorRef());
assertTrue(tipologia.isSumario());
assertFalse(tipologia.isExtra());
assertTrue(tipologia.getOcorrencias() == 20);
foundTP = true;
}*/
}
//assertTrue(foundT);
//assertTrue(foundPL);
//assertTrue(foundOT);
//assertTrue(foundSem);
//assertTrue(foundTP);
 
} catch (IOException e) {
e.printStackTrace();
} catch (TransformationException e) {
e.printStackTrace();
}
 
 
 
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/questionarios/QuestionarioForm.java
1,9 → 1,15
package pt.estgp.estgweb.web.form.questionarios;
 
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.QuestionarioImpl;
import pt.estgp.estgweb.web.form.ApplicationForm;
 
import javax.servlet.http.HttpServletRequest;
 
 
/**
* @author Jorge Machado
* @date 25/Jun/2008
12,11 → 18,22
public class QuestionarioForm extends ApplicationForm
{
 
private static final Logger logger = Logger.getLogger(QuestionarioForm.class);
 
private String dispatch;
 
private QuestionarioImpl questionario;
 
private boolean showQuestionarioForm = false;
 
public boolean isShowQuestionarioForm() {
return showQuestionarioForm;
}
 
public void setShowQuestionarioForm(boolean showQuestionarioForm) {
this.showQuestionarioForm = showQuestionarioForm;
}
 
public QuestionarioForm()
{
 
43,5 → 60,39
this.dispatch = dispatch;
}
 
@Override
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if(getQuestionario().getYear() == null || getQuestionario().getYear().trim().length() == 0)
{
addMessageWithKeys(errors,request,"errors.required","course.importYear");
}
if(getQuestionario().getSemestre() == null || getQuestionario().getSemestre().trim().length() == 0)
{
addMessageWithKeys(errors,request,"errors.required","courseunit.semestre");
}
 
try {
for(int i = 1; i <= 30; i++)
{
String p = (String) questionario.getClass().getMethod("getP" + i).invoke(questionario);
String group = (String) questionario.getClass().getMethod("getP" + i + "Group").invoke(questionario);
if(p != null && p.trim().length() > 0 && (group == null||group.trim().length() == 0))
{
addMessage(errors,request,"error.questionario.p.without.group","" + i);
}
else if(group != null && group.trim().length() > 0 && (p == null || p.trim().length() == 0))
{
addMessage(errors,request,"error.questionario.group.without.p","" + i);
}
 
}
} catch (Exception e) {
logger.error(e, e);
addMessage(errors,request,"error.500");
}
if(errors.size() > 0)
showQuestionarioForm = true;
return errors;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsAdminController.java
396,6 → 396,62
 
}
 
public ActionForward deleteAllNoWarn(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
 
try {
String importYear = request.getParameter("importYear");
IServiceManager sm;
sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{importYear};
 
Integer removed = (Integer) sm.execute(RequestUtils.getRequester(request, response), "DeleteAllNoWarnCourseUnitService", args, names);
 
addMessage(request,"courseunits.nowarn.removed","" + removed);
 
//logger.info("Não implementado por razoes de segurança");
//addMessage(request,"courseunit.security.not.implemented");
return mapping.findForward("delete");
} catch (Throwable e) {
logger.error(e,e);
return mapping.findForward("error500");
}
 
}
public ActionForward deleteAll(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
 
try {
String importYear = request.getParameter("importYear");
IServiceManager sm;
sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{importYear};
 
Integer removed = (Integer) sm.execute(RequestUtils.getRequester(request, response), "DeleteAllCourseUnitService", args, names);
 
addMessage(request,"courseunits.all.removed","" + removed);
 
//logger.info("Não implementado por razoes de segurança");
//addMessage(request,"courseunit.security.not.implemented");
return mapping.findForward("delete");
} catch (Throwable e) {
logger.error(e,e);
return mapping.findForward("error500");
}
 
}
 
 
public ActionForward search(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/questionarios/QuestionarioController.java
5,12 → 5,10
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import pt.estgp.estgweb.domain.ConfigurationGradesEpocaAvaliacao;
import pt.estgp.estgweb.domain.ConfigurationGradesStatusEpoca;
import pt.estgp.estgweb.domain.QuestionarioImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController;
import pt.estgp.estgweb.web.form.configuration.ConfigurationGradesForm;
import pt.estgp.estgweb.web.form.questionarios.QuestionarioForm;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
29,47 → 27,59
 
 
 
public ActionForward saveGrades(ActionMapping mapping,
public ActionForward newEdit(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
 
if(!UserSessionProxy.loadUserSessionFromRequest(request).getUser().isAdmin() && !UserSessionProxy.loadUserSessionFromRequest(request).getUser().hasRole("services"))
{
return mapping.findForward("error401");
}
 
ConfigurationGradesForm f = (ConfigurationGradesForm) form;
QuestionarioForm frm = (QuestionarioForm) form;
AbstractDao.getCurrentSession().beginTransaction();
for(ConfigurationGradesEpocaAvaliacao a: f.getConfigurationGrades().getEpocasAvaliacao())
if(frm.getQuestionario().getId() <= 0)
{
if(a.getId() > 0)
{
ConfigurationGradesEpocaAvaliacao persist = DaoFactory.getConfigurationGradesEpocaAvaliacaoDaoImpl().load(a.getId());
persist.setCodigoEpoca(a.getCodigoEpoca());
persist.setCodigoMomento(a.getCodigoMomento());
persist.setObs(a.getObs());
persist.setDescricao(a.getDescricao());
}
DaoFactory.getQuestionarioDaoImpl().save(frm.getQuestionario());
}
 
for(ConfigurationGradesStatusEpoca a: f.getConfigurationGrades().getStatusEpocas())
else
{
if(a.getId() > 0)
{
ConfigurationGradesStatusEpoca persist = DaoFactory.getConfigurationGradesStatusEpocaDaoImpl().load(a.getId());
persist.setStatus(a.getStatus());
persist.setObs(a.getObs());
persist.setDescricao(a.getDescricao());
}
DaoFactory.getQuestionarioDaoImpl().merge(frm.getQuestionario());
}
AbstractDao.getCurrentSession().getTransaction().commit();
 
return mapping.findForward("grades");
 
return mapping.findForward("list");
}
 
public ActionForward refresh(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
 
QuestionarioForm frm = (QuestionarioForm) form;
frm.setShowQuestionarioForm(true);
return mapping.getInputForward();
}
 
public ActionForward form(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
 
QuestionarioForm frm = (QuestionarioForm) form;
AbstractDao.getCurrentSession().beginTransaction();
 
QuestionarioImpl q = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().get(frm.getQuestionario().getId());
frm.setQuestionario(q);
AbstractDao.getCurrentSession().getTransaction().commit();
 
frm.setShowQuestionarioForm(true);
return mapping.findForward("list");
}
 
 
 
}
/branches/v3/impl/src/hbm/pt/estgp/estgweb/domain/Questionarios.hbm.xml
7,7 → 7,7
<class name="pt.estgp.estgweb.domain.Questionario" table="questionario" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.DomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
<id name="id" type="long" unsaved-value="0">
<generator class="native"/>
</id>
<discriminator column="discriminator"/>
/branches/v3/impl/src/web/admin/courseunits/courseUnitDeleteAdministration.jsp
1,4 → 1,3
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ page import="pt.estgp.estgweb.services.courseunits.DeleteCourseUnitService" %>
<%@ page import="pt.estgp.estgweb.utils.DatesUtils" %>
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
87,20 → 86,10
 
%>
 
<style>
.modal-dialog{
position: absolute;
left: 0;
//now you must set a margin left under zero - value is a half width your window
}
</style>
 
 
 
 
 
 
 
<script>
$(document).ready(function(){
$('.deleteModal').on('show.bs.modal', function(e) {
109,60 → 98,7
});
</script>
 
<logic:iterate id="contentsInfo" name="CourseUnitContentsInfos" type="pt.estgp.estgweb.services.courseunits.DeleteCourseUnitService.CourseUnitContentsInfo">
 
<div id="info${contentsInfo.cuv.id}" class="modal fade" role="dialog">
<div class="modal-dialog modal-sm">
 
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">${contentsInfo.cuv.name}/${contentsInfo.cuv.code} - ${contentsInfo.cuv.courseName}/${contentsInfo.cuv.courseCode} - ${contentsInfo.cuv.semestre} - ${contentsInfo.cuv.importYear}</h4>
</div>
<div class="modal-body">
<logic:iterate id="msgWarn" name="contentsInfo" property="warnings">
<p>${msgWarn}</p>
</logic:iterate>
 
</div>
<div class="modal-footer">
<logic:equal value="true" name="contentsInfo" property="canDelete">
<button class="btn btn-danger" data-href="<%=request.getContextPath()%>/user/startDeleteCourseUnitAdminFromUnitsDeleteAdministration.do?dispatch=delete&id=${contentsInfo.cuv.id}&importYear=<%=importYear%>" data-toggle="modal" data-target="#confirm-delete${contentsInfo.cuv.id}">
<bean:message key="delete"/>
</button>
</logic:equal>
<html:link styleClass="btn btn-default" action="/user/startLoadCourseUnitFromHome?id=${contentsInfo.cuv.id}" target="_blank">Ir para a página</html:link>
<button type="button" class="btn btn-default" data-dismiss="modal"><bean:message key="close"/></button>
</div>
</div>
</div>
</div>
<div class="modal fade deleteModal" id="confirm-delete${contentsInfo.cuv.id}" tabindex="-1" role="dialog" >
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">${contentsInfo.cuv.name}/${contentsInfo.cuv.code} - ${contentsInfo.cuv.courseName}/${contentsInfo.cuv.courseCode} - ${contentsInfo.cuv.semestre} - ${contentsInfo.cuv.importYear}</h4>
</div>
<div class="modal-body">
<logic:iterate id="msgWarn" name="contentsInfo" property="warnings">
<p>${msgWarn}</p>
</logic:iterate>
<logic:empty name="contentsInfo" property="warnings">
Não tem avisos nesta unidade.
</logic:empty>
</div>
<div class="modal-footer">
Tem a certeza que desja apagar esta unidade curricular?
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<a class="btn btn-danger btn-ok">Delete</a>
</div>
</div>
</div>
</div>
</logic:iterate>
 
 
<!--Modais de iformação com avisos de conteudo da unidade-->
 
<jomm:messages/>
174,9 → 110,120
<div class="panel-heading">
Administração de Unidades Candidatas a Apagar com Zero Estudantes
<a href="<%=request.getContextPath()%>/admin/courseUnitsDeleteAdmin.do" class="btn btn-info"><span class="glyphicon glyphicon-refresh"></span></a>
<button class="btn btn-danger pull-right" data-href="<%=request.getContextPath()%>/user/startDeleteCourseUnitAdminFromUnitsDeleteAdministration.do?importYear=<%=importYear%>&dispatch=deleteAll" data-toggle="modal" data-target="#confirm-deleteAll">
Apagar todas as permitidas
</button>
<button class="btn btn-warning pull-right" style="margin-right: 5px" data-href="<%=request.getContextPath()%>/user/startDeleteCourseUnitAdminFromUnitsDeleteAdministration.do?importYear=<%=importYear%>&dispatch=deleteAllNoWarn" data-toggle="modal" data-target="#confirm-deleteAllNoWarn">
Apagar unidades sem avisos
</button>
 
</div>
<div class="panel-body">
 
<logic:iterate id="contentsInfo" name="CourseUnitContentsInfos" type="pt.estgp.estgweb.services.courseunits.DeleteCourseUnitService.CourseUnitContentsInfo">
 
 
<div id="info${contentsInfo.cuv.id}" class="modal fade" role="dialog">
<div class="modal-dialog" data-width="450" style="display: block; width: 450px; margin-top: 50px;" aria-hidden="false">
 
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">${contentsInfo.cuv.name}/${contentsInfo.cuv.code} - ${contentsInfo.cuv.courseName}/${contentsInfo.cuv.courseCode} - ${contentsInfo.cuv.semestre} - ${contentsInfo.cuv.importYear}</h4>
</div>
<div class="modal-body">
<logic:iterate id="msgWarn" name="contentsInfo" property="warnings">
<p>${msgWarn}</p>
</logic:iterate>
 
</div>
<div class="modal-footer">
<logic:equal value="true" name="contentsInfo" property="canDelete">
<button class="btn btn-danger" data-href="<%=request.getContextPath()%>/user/startDeleteCourseUnitAdminFromUnitsDeleteAdministration.do?dispatch=delete&id=${contentsInfo.cuv.id}&importYear=<%=importYear%>" data-toggle="modal" data-target="#confirm-delete${contentsInfo.cuv.id}">
<bean:message key="delete"/>
</button>
</logic:equal>
<html:link styleClass="btn btn-default" action="/user/startLoadCourseUnitFromHome?id=${contentsInfo.cuv.id}" target="_blank">Ir para a página</html:link>
<button type="button" class="btn btn-default" data-dismiss="modal"><bean:message key="close"/></button>
</div>
</div>
</div>
</div>
<div class="modal fade deleteModal" id="confirm-delete${contentsInfo.cuv.id}" tabindex="-1" role="dialog" >
<div class="modal-dialog" data-width="450" style="display: block; width: 450px; margin-top: 50px;" aria-hidden="false">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">${contentsInfo.cuv.name}/${contentsInfo.cuv.code} - ${contentsInfo.cuv.courseName}/${contentsInfo.cuv.courseCode} - ${contentsInfo.cuv.semestre} - ${contentsInfo.cuv.importYear}</h4>
</div>
<div class="modal-body">
<logic:iterate id="msgWarn" name="contentsInfo" property="warnings">
<p>${msgWarn}</p>
</logic:iterate>
<logic:empty name="contentsInfo" property="warnings">
Não tem avisos nesta unidade.
</logic:empty>
</div>
<div class="modal-footer">
Tem a certeza que desja apagar esta unidade curricular?
<button type="button" class="btn btn-default" data-dismiss="modal">Cancelar</button>
<a class="btn btn-danger btn-ok">Apagar</a>
</div>
</div>
</div>
</div>
</logic:iterate>
 
 
 
<div class="modal fade deleteModal" id="confirm-deleteAll" tabindex="-1" role="dialog" >
<div class="modal-dialog" data-width="450" style="display: block; width: 450px; margin-top: 50px;" aria-hidden="false">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Apagar Todas As Unidades Permitidas</h4>
</div>
<div class="modal-body">
 
<p>Tem a certeza que pretende apagar todas as unidades permitidas?</p>
 
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancelar</button>
<a class="btn btn-danger btn-ok">Apagar</a>
</div>
</div>
</div>
</div>
 
 
 
 
<div class="modal fade deleteModal" id="confirm-deleteAllNoWarn" role="dialog" >
<div class="modal-dialog" data-width="450" style="display: block; width: 450px; margin-top: 50px;" aria-hidden="false">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Apagar Todas As Unidades Sem Avisos?</h4>
</div>
<div class="modal-body">
 
<p>Tem a certeza que pretende apagar todas as unidades sem Avisos?</p>
<p>(As unidades com Avisos serão mantidas.)</p>
 
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancelar</button>
<a class="btn btn-danger btn-ok">Apagar</a>
</div>
</div>
</div>
</div>
 
 
 
 
 
 
 
<table class="tablesorter tablesorterfiltered">
<thead>
<tr>
/branches/v3/impl/src/web/admin/courseunits/findCourseunit.jsp
47,6 → 47,7
<th class="filter-name filter-select"><bean:message key="courseunit.semestre"/></th>
<th class="filter-name filter-select"><bean:message key="courseunit.importYear"/></th>
<th class="filter-name filter-select"><bean:message key="courseunit.course"/></th>
<th class="filter-name filter-select"><bean:message key="course.code"/></th>
<th></th>
<th></th>
</tr>
60,6 → 61,7
<td><bean:message key="courseunit.${courseunitresult.object.semestre}"/></td>
<td>${courseunitresult.object.importYear}</td>
<td><a href="<%=request.getContextPath()%>/user/courseControllerFromServiceZone.do?dispatch=edit&courseView.id=${courseunitresult.object.courseId}">${courseunitresult.object.courseName}</a></td>
<td>${courseunitresult.object.courseCode}</td>
<td><html:link styleClass="btn btn-warning" action="/user/startEditCourseUnitAdminFromServiceZone?id=${courseunitresult.object.id}"><bean:message key="edit"/><span class="glyphicon glyphicon-pencil"></span></html:link></td>
<td><html:link styleClass="btn btn-danger" action="/user/startDeleteCourseUnitAdminFromServiceZone?id=${courseunitresult.object.id}"><bean:message key="delete"/><span class="glyphicon glyphicon-remove"></span></html:link></td>
<td></td>
/branches/v3/impl/src/web/admin/questionarios/questionariosList.jsp
1,5 → 1,11
<%@ page import="pt.estgp.estgweb.domain.Questionario" %>
<%@ page import="pt.estgp.estgweb.domain.UserSessionImpl" %>
<%@ page import="pt.estgp.estgweb.utils.DatesUtils" %>
<%@ page import="pt.estgp.estgweb.web.UserSessionProxy" %>
<%@ page import="java.util.List" %>
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ page import="jomm.dao.impl.AbstractDao" %>
<%@ page import="pt.estgp.estgweb.domain.QuestionarioImpl" %>
<%@ 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" %>
9,95 → 15,143
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
 
<%
UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSessionFromRequest(request);
 
%>
<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog" >
<div class="modal-dialog" data-width="90%" style="display: block; width: 90%; margin-top: 50px;" aria-hidden="false">
 
<html:form styleClass="form-horizontal" action="/admin/questionariosPae" enctype="multipart/form-data">
<jsp:useBean id="QuestionarioForm" type="pt.estgp.estgweb.web.form.questionarios.QuestionarioForm" scope="request"/>
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title">Novo Questionário</h1>
<h1 class="modal-title">
<logic:lessEqual name="QuestionarioForm" property="questionario.id" value="0">
Novo Questionário
</logic:lessEqual>
<logic:notEqual name="QuestionarioForm" property="questionario.id" value="0">
Questionário (Número Controlo - ${QuestionarioForm.questionario.id})
</logic:notEqual>
</h1>
</div>
<div class="modal-body">
<html:errors/>
<jomm:messages/>
<html:form styleClass="form-horizontal" action="/admin/questionariosPae" enctype="multipart/form-data">
 
 
<%
if (QuestionarioForm.isShowQuestionarioForm())
{
%>
<script>
$(document).ready(function(){
$('#myModal').modal({
show: 'true'
});
});
</script>
 
<%
}
%>
 
 
<script>
 
$(document).ready(
function(){
$('#editor').wysiwyg();
 
setText();
$(".perguntaGroup").each(
function(){
if($(this).val() == "")
{
$(this).css({
"background-color":"orange"
});
}
}
);
}
);
function alerta()
{
alert($('#editor').html());
}
 
function setText()
{
$("#editor").html('<%--<bean:write name="QuestionarioForm" property="introHtml" filter="false"/>--%>');
$("#editor").html('<bean:write name="QuestionarioForm" property="questionario.introHtml" filter="false"/>');
}
 
</script>
<input type="hidden" name="dispatch" value="new">
<input type="hidden" name="dispatch" value="newEdit">
<html:hidden property="questionario.id"/>
 
<div class="form-group row">
<div class="col-sm-12">
 
<div class="btn-toolbar" data-role="editor-toolbar" data-target="#editor">
<!-- <div class="btn-group">
<a class="btn dropdown-toggle" data-toggle="dropdown" title="Font"><i class="icon-font"></i><b class="caret"></b></a>
<ul class="dropdown-menu">
</ul>
</div>-->
<div class="btn-group">
<a class="btn btn-default" data-toggle="dropdown" title="Font Size"><i class="icon-text-height"></i><b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a data-edit="fontSize 5"><font size="5">Grande</font></a></li>
<li><a data-edit="fontSize 3"><font size="3">Normal</font></a></li>
<li><a data-edit="fontSize 1"><font size="1">Pequeno</font></a></li>
</ul>
</div>
<div class="btn-group">
<a class="btn btn-default" data-edit="bold" title="Bold (Ctrl/Cmd+B)"><i class="icon-bold"></i></a>
<a class="btn btn-default" data-edit="italic" title="Italic (Ctrl/Cmd+I)"><i class="icon-italic"></i></a>
<a class="btn btn-default" data-edit="strikethrough" title="Strikethrough"><i class="icon-strikethrough"></i></a>
<a class="btn btn-default" data-edit="underline" title="Underline (Ctrl/Cmd+U)"><i class="icon-underline"></i></a>
</div>
<div class="btn-group">
<a class="btn btn-default" data-edit="insertunorderedlist" title="Bullet list"><i class="icon icon-list2"></i></a>
<a class="btn btn-default" data-edit="insertorderedlist" title="Number list"><i class="icon icon-list-numbered"></i></a>
<a class="btn btn-default" data-edit="outdent" title="Reduce indent (Shift+Tab)"><i class="glyphicon glyphicon-indent-left"></i></a>
<a class="btn btn-default" data-edit="indent" title="Indent (Tab)"><i class="glyphicon glyphicon-indent-right"></i></a>
</div>
<div class="btn-group">
<a class="btn btn-default" data-edit="justifyleft" title="Align Left (Ctrl/Cmd+L)"><i class="icon icon-paragraph-left"></i></a>
<a class="btn btn-default" data-edit="justifycenter" title="Center (Ctrl/Cmd+E)"><i class="icon icon-paragraph-center"></i></a>
<a class="btn btn-default" data-edit="justifyright" title="Align Right (Ctrl/Cmd+R)"><i class="icon icon-paragraph-right"></i></a>
<a class="btn btn-default" data-edit="justifyfull" title="Justify (Ctrl/Cmd+J)"><i class="icon icon-paragraph-justify"></i></a>
</div>
<div class="btn-group">
<a class="btn btn-default dropdown-toggle" data-toggle="dropdown" title="Hyperlink"><i class="icon-link"></i></a>
<div class="dropdown-menu input-append">
<input class="span2" placeholder="URL" type="text" data-edit="createLink"/>
<button class="btn" type="button">Add</button>
<div class="btn-toolbar" data-role="editor-toolbar" data-target="#editor">
<!-- <div class="btn-group">
<a class="btn dropdown-toggle" data-toggle="dropdown" title="Font"><i class="aweicon-font"></i><b class="caret"></b></a>
<ul class="dropdown-menu">
</ul>
</div>-->
<div class="btn-group">
<a class="btn btn-default" data-toggle="dropdown" title="Font Size"><i class="aweicon-text-height"></i>&nbsp;<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a data-edit="fontSize 5"><font size="5">Grande</font></a></li>
<li><a data-edit="fontSize 4"><font size="4">Maior</font></a></li>
<li><a data-edit="fontSize 3"><font size="3">Normal</font></a></li>
<li><a data-edit="fontSize 2"><font size="2">Menor</font></a></li>
<li><a data-edit="fontSize 1"><font size="1">Pequeno</font></a></li>
</ul>
</div>
<div class="btn-group">
<a class="btn btn-default" data-edit="bold" title="Bold (Ctrl/Cmd+B)"><i class="aweicon-bold"></i></a>
<a class="btn btn-default" data-edit="italic" title="Italic (Ctrl/Cmd+I)"><i class="aweicon-italic"></i></a>
<a class="btn btn-default" data-edit="strikethrough" title="Strikethrough"><i class="aweicon-strikethrough"></i></a>
<a class="btn btn-default" data-edit="underline" title="Underline (Ctrl/Cmd+U)"><i class="aweicon-underline"></i></a>
</div>
<a class="btn btn-default" data-edit="unlink" title="Remove Hyperlink"><i class="icon-cut"></i></a>
<div class="btn-group">
<a class="btn btn-default" data-edit="insertunorderedlist" title="Bullet list"><i class="aweicon-list-ul"></i></a>
<a class="btn btn-default" data-edit="insertorderedlist" title="Number list"><i class="aweicon-list-ol"></i></a>
<a class="btn btn-default" data-edit="outdent" title="Reduce indent (Shift+Tab)"><i class="aweicon-indent-left"></i></a>
<a class="btn btn-default" data-edit="indent" title="Indent (Tab)"><i class="aweicon-indent-right"></i></a>
</div>
<div class="btn-group">
<a class="btn btn-default" data-edit="justifyleft" title="Align Left (Ctrl/Cmd+L)"><i class="aweicon-align-left"></i></a>
<a class="btn btn-default" data-edit="justifycenter" title="Center (Ctrl/Cmd+E)"><i class="aweicon-align-center"></i></a>
<a class="btn btn-default" data-edit="justifyright" title="Align Right (Ctrl/Cmd+R)"><i class="aweicon-align-right"></i></a>
<a class="btn btn-default" data-edit="justifyfull" title="Justify (Ctrl/Cmd+J)"><i class="aweicon-align-justify"></i></a>
</div>
<div class="btn-group">
<a class="btn btn-default dropdown-toggle" data-toggle="dropdown" title="Hyperlink"><i class="aweicon-link"></i></a>
<div class="dropdown-menu input-append">
<input class="span2" placeholder="URL" type="text" data-edit="createLink"/>
<button class="btn" type="button">Add</button>
</div>
<a class="btn btn-default" data-edit="unlink" title="Remove Hyperlink"><i class="aweicon-cut"></i></a>
 
</div>
</div>
 
<div class="btn-group">
<a class="btn btn-default" title="Insert picture (or just drag & drop)" id="pictureBtn"><i class="glyphicon glyphicon-picture"></i></a>
<input type="file" data-role="magic-overlay" data-target="#pictureBtn" data-edit="insertImage" />
<div class="btn-group">
<a class="btn btn-default" title="Insert picture (or just drag & drop)" id="pictureBtn"><i class="aweicon-picture"></i></a>
<input type="file" data-role="magic-overlay" data-target="#pictureBtn" data-edit="insertImage" />
</div>
<div class="btn-group">
<a class="btn btn-default" data-edit="undo" title="Undo (Ctrl/Cmd+Z)"><i class="aweicon-undo"></i></a>
<a class="btn btn-default" data-edit="redo" title="Redo (Ctrl/Cmd+Y)"><i class="aweicon-repeat"></i></a>
</div>
 
</div>
<div class="btn-group">
<a class="btn btn-default" data-edit="undo" title="Undo (Ctrl/Cmd+Z)"><i class="icon icon-undo2"></i></a>
<a class="btn btn-default" data-edit="redo" title="Redo (Ctrl/Cmd+Y)"><i class="icon icon-redo2"></i></a>
<div id="editor">
<bean:message key="submit.todo.email.content"/>&hellip;
</div>
 
</div>
 
<div id="editor">
<bean:message key="submit.todo.email.content"/>&hellip;
</div>
</div>
</div>
 
122,7 → 176,7
</div>
</div>
 
<div class="form-group" id="jobSemestreKeyPart">
<div class="form-group">
<label class="control-label col-sm-2" for="semestre">Semestre:</label>
<div class="col-sm-10">
<html:select styleClass="form-control" styleId="semestre" property="questionario.semestre">
140,119 → 194,150
 
 
 
<%
 
<div class="form-group" id="jobSemestreKeyPart">
<label class="control-label col-sm-2" for="semestre">Pergunta 1:</label>
for(int i = 1; i <= 30; i ++)
{
request.setAttribute("p",i);
request.setAttribute("pBefore",i-1);
 
%>
<logic:present name="QuestionarioForm" property="questionario.p${p}Group">
<logic:equal value="1" name="p">
<h3>
<logic:equal value="1" name="QuestionarioForm" property="questionario.p${p}Group">
1 - ${QuestionarioForm.questionario.group1Title}
</logic:equal>
<logic:equal value="2" name="QuestionarioForm" property="questionario.p${p}Group">
2 - ${QuestionarioForm.questionario.group2Title}
</logic:equal>
<logic:equal value="3" name="QuestionarioForm" property="questionario.p${p}Group">
3 - ${QuestionarioForm.questionario.group3Title}
</logic:equal>
<logic:equal value="4" name="QuestionarioForm" property="questionario.p${p}Group">
4 - ${QuestionarioForm.questionario.group4Title}
</logic:equal>
<logic:equal value="5" name="QuestionarioForm" property="questionario.p${p}Group">
5 - ${QuestionarioForm.questionario.group5Title}
</logic:equal>
</h3>
</logic:equal>
<logic:greaterThan value="1" name="p">
<jomm:notEqualBeans name1="QuestionarioForm" property1="questionario.p${p}Group" name2="QuestionarioForm" property2="questionario.p${pBefore}Group">
<hr/>
<h3>
<logic:equal value="1" name="QuestionarioForm" property="questionario.p${p}Group">
1 - ${QuestionarioForm.questionario.group1Title}
</logic:equal>
<logic:equal value="2" name="QuestionarioForm" property="questionario.p${p}Group">
2 - ${QuestionarioForm.questionario.group2Title}
</logic:equal>
<logic:equal value="3" name="QuestionarioForm" property="questionario.p${p}Group">
3 - ${QuestionarioForm.questionario.group3Title}
</logic:equal>
<logic:equal value="4" name="QuestionarioForm" property="questionario.p${p}Group">
4 - ${QuestionarioForm.questionario.group4Title}
</logic:equal>
<logic:equal value="5" name="QuestionarioForm" property="questionario.p${p}Group">
5 - ${QuestionarioForm.questionario.group5Title}
</logic:equal>
</h3>
</jomm:notEqualBeans>
</logic:greaterThan>
</logic:present>
 
<div class="form-group">
<label class="control-label col-sm-2" for="p${p}">Pergunta ${p}:</label>
<div class="col-sm-8">
<html:textarea styleClass="form-control" property="questionario.p1" styleId="p1"/>
<html:textarea styleClass="form-control" property="questionario.p${p}" styleId="p${p}"/>
</div>
<div class="col-sm-2">
<html:select styleClass="form-control" property="questionario.p1Group">
<html:select styleClass="form-control perguntaGroup" property="questionario.p${p}Group" onchange="set(this.form,'refresh');form.submit()">
<html:option value="">Nenhum</html:option>
<html:option value="1">${QuestionarioForm.questionario.group1Title}</html:option>
<html:option value="2">${QuestionarioForm.questionario.group2Title}</html:option>
<html:option value="3">${QuestionarioForm.questionario.group3Title}</html:option>
<html:option value="4">${QuestionarioForm.questionario.group4Title}</html:option>
<html:option value="5">${QuestionarioForm.questionario.group5Title}</html:option>
 
</html:select>
</div>
</div>
<%--
<div class="form-group">
<label class="control-label col-sm-2" for="date"><bean:message key="courseunit.assignement.deliver.date"/></label>
<div class="col-sm-8">
<div class='input-group date datetimepicker' >
<html:text styleClass="form-control" property="courseUnitAssignementView.deliverDate" styleId="date" />
<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="CourseUnitsForm.deliverDate.value=null"><span class="glyphicon glyphicon-remove"></span></button>
</div>
</div>
 
<div class="form-group">
<label class="control-label col-sm-2" for="type"><bean:message key="courseunit.assignement.deliver.type"/></label>
<div class="col-sm-10">
<html:select styleId="type" styleClass="form-control" property="courseUnitAssignementView.deliverType">
<html:option value="file" key="courseunit.assignement.deliver.type.file"/>
<html:option value="nofile" key="courseunit.assignement.deliver.type.nofile"/>
</html:select>
</div>
</div>
 
<div class="form-group">
<label class="control-label col-sm-2" for="permission"><bean:message key="courseunit.assignement.deliver.late.permission"/></label>
<div class="col-sm-10">
<html:select styleId="permission" styleClass="form-control" property="courseUnitAssignementView.lateDelivers">
<html:option value="true" key="yes"/>
<html:option value="false" key="no"/>
</html:select>
</div>
</div>
 
<div class="form-group">
<label class="control-label col-sm-2" for="desc"><bean:message key="courseunit.description"/></label>
<div class="col-sm-10">
<html:textarea styleId="desc" styleClass="form-control" property="courseUnitAssignementView.description"/>
</div>
</div>
 
<div class="form-group">
<label class="control-label col-sm-2" for="fileA"><bean:message key="courseunit.assignement.file"/></label>
<div class="col-sm-10">
<html:file styleId="fileA" styleClass="form-control" property="uploadFile"/>
</div>
</div>
 
<div class="form-group">
<label class="control-label col-sm-2" for="status"><bean:message key="courseunit.status"/></label>
<div class="col-sm-10">
<html:select styleId="status" styleClass="form-control" property="courseUnitAssignementView.status">
<html:option value="true">
<bean:message key="status.active"/>
</html:option>
<html:option value="false">
<bean:message key="status.inactive"/>
</html:option>
</html:select>
</div>
</div>
--%>
<%
}
%>
<button type="button" class="btn btn-success" onclick="this.form.submit()"><bean:message key="confirm"/></button>
<button type="button" class="btn btn-danger" data-dismiss="modal"><bean:message key="cancel"/></button>
 
</html:form>
 
</div>
</div>
 
</html:form>
</div>
</div>
 
 
 
 
 
 
<div class="container-fluid" style="margin-top: 10px">
 
 
<div class="panel panel-primary">
<div class="panel-heading clearfix">
Questionários <button type="button" data-toggle="modal" data-target="#myModal" class="btn btn-default pull-right" href="">Criar Novo <span class="glyphicon glyphicon-plus"> </span></button>
Questionários <button type="button" data-toggle="modal" data-target="#myModal" class="btn btn-default btn-sm pull-right" href="">Criar Novo <span class="glyphicon glyphicon-plus"> </span></button>
</div>
<div class="panel-body">
<table class="tablesortersimple">
<thead>
<tr>
<th>Num. Control</th>
<th>Ano</th>
<th>Semestre</th>
<th>Administrar</th>
<th>Questionários</th>
<th>Editar</th>
<th>Formulário</th>
<th>Estado</th>
<th>Alterado a</th>
</tr>
</thead>
<tbody>
 
 
<%
AbstractDao.getCurrentSession().beginTransaction();
List<Questionario> questionarios = DaoFactory.getQuestionarioDaoImpl().findByPage(0,10);
for(Questionario q: questionarios)
{
request.setAttribute("q",q);
%>
<tr>
<td>${q.id}</td>
<td>${q.year}</td>
<td>${q.semestre}</td>
<td><button class="btn btn-default">Admin</button></td>
<td><button class="btn btn-default">Admin</button></td>
<td>
<%
if(((QuestionarioImpl)q).getStateEnum().getPosition() <= QuestionarioImpl.State.ASSIGNED.getPosition())
{
%>
<html:link action="/admin/formQuestionariosPae?questionario.id=${q.id}" styleClass="btn btn-default">Editar</html:link>
<%
}
else
{
%>
Em processamento
<%
}
%>
</td>
<td>${q.state}</td>
<td><%=pt.estgp.estgweb.web.utils.DatesUtils.getStringFromDate(q.getUpdateDate())%></td>
</tr>
<%
}
AbstractDao.getCurrentSession().getTransaction().commit();
%>
</tbody>
</table>
</div>
/branches/v3/impl/src/web/admin/announcements/submitMessage.jsp
170,12 → 170,12
<div class="col-sm-12">
<div class="btn-toolbar" data-role="editor-toolbar" data-target="#editor">
<!-- <div class="btn-group">
<a class="btn dropdown-toggle" data-toggle="dropdown" title="Font"><i class="icon-font"></i><b class="caret"></b></a>
<a class="btn dropdown-toggle" data-toggle="dropdown" title="Font"><i class="aweicon-font"></i><b class="caret"></b></a>
<ul class="dropdown-menu">
</ul>
</div>
<div class="btn-group">
<a class="btn dropdown-toggle" data-toggle="dropdown" title="Font Size"><i class="icon-text-height"></i>&nbsp;<b class="caret"></b></a>
<a class="btn dropdown-toggle" data-toggle="dropdown" title="Font Size"><i class="aweicon-text-height"></i>&nbsp;<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a data-edit="fontSize 5"><font size="5">Huge</font></a></li>
<li><a data-edit="fontSize 3"><font size="3">Normal</font></a></li>
183,40 → 183,40
</ul>
</div>-->
<div class="btn-group">
<a class="btn btn-default" data-edit="bold" title="Bold (Ctrl/Cmd+B)"><i class="icon-bold"></i></a>
<a class="btn btn-default" data-edit="italic" title="Italic (Ctrl/Cmd+I)"><i class="icon-italic"></i></a>
<a class="btn btn-default" data-edit="strikethrough" title="Strikethrough"><i class="icon-strikethrough"></i></a>
<a class="btn btn-default" data-edit="underline" title="Underline (Ctrl/Cmd+U)"><i class="icon-underline"></i></a>
<a class="btn btn-default" data-edit="bold" title="Bold (Ctrl/Cmd+B)"><i class="aweicon-bold"></i></a>
<a class="btn btn-default" data-edit="italic" title="Italic (Ctrl/Cmd+I)"><i class="aweicon-italic"></i></a>
<a class="btn btn-default" data-edit="strikethrough" title="Strikethrough"><i class="aweicon-strikethrough"></i></a>
<a class="btn btn-default" data-edit="underline" title="Underline (Ctrl/Cmd+U)"><i class="aweicon-underline"></i></a>
</div>
<div class="btn-group">
<a class="btn btn-default" data-edit="insertunorderedlist" title="Bullet list"><i class="icon-list-ul"></i></a>
<a class="btn btn-default" data-edit="insertorderedlist" title="Number list"><i class="icon-list-ol"></i></a>
<a class="btn btn-default" data-edit="outdent" title="Reduce indent (Shift+Tab)"><i class="icon-indent-left"></i></a>
<a class="btn btn-default" data-edit="indent" title="Indent (Tab)"><i class="icon-indent-right"></i></a>
<a class="btn btn-default" data-edit="insertunorderedlist" title="Bullet list"><i class="aweicon-list-ul"></i></a>
<a class="btn btn-default" data-edit="insertorderedlist" title="Number list"><i class="aweicon-list-ol"></i></a>
<a class="btn btn-default" data-edit="outdent" title="Reduce indent (Shift+Tab)"><i class="aweicon-indent-left"></i></a>
<a class="btn btn-default" data-edit="indent" title="Indent (Tab)"><i class="aweicon-indent-right"></i></a>
</div>
<div class="btn-group">
<a class="btn btn-default" data-edit="justifyleft" title="Align Left (Ctrl/Cmd+L)"><i class="icon-align-left"></i></a>
<a class="btn btn-default" data-edit="justifycenter" title="Center (Ctrl/Cmd+E)"><i class="icon-align-center"></i></a>
<a class="btn btn-default" data-edit="justifyright" title="Align Right (Ctrl/Cmd+R)"><i class="icon-align-right"></i></a>
<a class="btn btn-default" data-edit="justifyfull" title="Justify (Ctrl/Cmd+J)"><i class="icon-align-justify"></i></a>
<a class="btn btn-default" data-edit="justifyleft" title="Align Left (Ctrl/Cmd+L)"><i class="aweicon-align-left"></i></a>
<a class="btn btn-default" data-edit="justifycenter" title="Center (Ctrl/Cmd+E)"><i class="aweicon-align-center"></i></a>
<a class="btn btn-default" data-edit="justifyright" title="Align Right (Ctrl/Cmd+R)"><i class="aweicon-align-right"></i></a>
<a class="btn btn-default" data-edit="justifyfull" title="Justify (Ctrl/Cmd+J)"><i class="aweicon-align-justify"></i></a>
</div>
<div class="btn-group">
<a class="btn btn-default dropdown-toggle" data-toggle="dropdown" title="Hyperlink"><i class="icon-link"></i></a>
<a class="btn btn-default dropdown-toggle" data-toggle="dropdown" title="Hyperlink"><i class="aweicon-link"></i></a>
<div class="dropdown-menu input-append">
<input class="span2" placeholder="URL" type="text" data-edit="createLink"/>
<button class="btn" type="button">Add</button>
</div>
<a class="btn btn-default" data-edit="unlink" title="Remove Hyperlink"><i class="icon-cut"></i></a>
<a class="btn btn-default" data-edit="unlink" title="Remove Hyperlink"><i class="aweicon-cut"></i></a>
 
</div>
 
<div class="btn-group">
<a class="btn btn-default" title="Insert picture (or just drag & drop)" id="pictureBtn"><i class="icon-picture"></i></a>
<a class="btn btn-default" title="Insert picture (or just drag & drop)" id="pictureBtn"><i class="aweicon-picture"></i></a>
<input type="file" data-role="magic-overlay" data-target="#pictureBtn" data-edit="insertImage" />
</div>
<div class="btn-group">
<a class="btn btn-default" data-edit="undo" title="Undo (Ctrl/Cmd+Z)"><i class="icon-undo"></i></a>
<a class="btn btn-default" data-edit="redo" title="Redo (Ctrl/Cmd+Y)"><i class="icon-repeat"></i></a>
<a class="btn btn-default" data-edit="undo" title="Undo (Ctrl/Cmd+Z)"><i class="aweicon-undo"></i></a>
<a class="btn btn-default" data-edit="redo" title="Redo (Ctrl/Cmd+Y)"><i class="aweicon-repeat"></i></a>
</div>
 
</div>
/branches/v3/impl/src/web/css/ipp/style.css
92,7 → 92,16
BOOTSTRAP OVERRIDES
*************************************************/
 
 
body
{
font-family: Decima, Arial,"bitstream vera sans",Verdana,Helvetica,sans-serif !important;
font-size: 16px !important;
color: #323431 !important;
}
.form-control
{
color: #575253;
}
/*body{
background-color: #ABCEEB !important;
}*/
/branches/v3/impl/src/web/css/ipp/lavish-bootstrap.css
1070,10 → 1070,10
-webkit-tap-highlight-color: transparent; }
 
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
/*font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;*/
line-height: 1.42857;
color: #8F6D69;
/*color: #8F6D69;*/
background-color: #E7E7E7; }
 
input,
/branches/v3/impl/src/web/js/bootstrap-wysiwyg-master/netdna/font-awesome.css
28,4 → 28,5
url('fontawesome-webfont.ttf') format('truetype');
font-weight:normal;
font-style:normal }
[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat;margin-top:0}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:none}[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}a [class^="icon-"],a [class*=" icon-"]{display:inline-block}.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em}.btn [class^="icon-"],.nav [class^="icon-"],.btn [class*=" icon-"],.nav [class*=" icon-"]{display:inline}.btn [class^="icon-"].icon-large,.nav [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large,.nav [class*=" icon-"].icon-large{line-height:.9em}.btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block}.nav-tabs [class^="icon-"],.nav-pills [class^="icon-"],.nav-tabs [class*=" icon-"],.nav-pills [class*=" icon-"],.nav-tabs [class^="icon-"].icon-large,.nav-pills [class^="icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large{line-height:.9em}li [class^="icon-"],.nav li [class^="icon-"],li [class*=" icon-"],.nav li [class*=" icon-"]{display:inline-block;width:1.25em;text-align:center}li [class^="icon-"].icon-large,.nav li [class^="icon-"].icon-large,li [class*=" icon-"].icon-large,.nav li [class*=" icon-"].icon-large{width:1.5625em}ul.icons{list-style-type:none;text-indent:-0.75em}ul.icons li [class^="icon-"],ul.icons li [class*=" icon-"]{width:.75em}.icon-muted{color:#eee}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.pull-right{float:right}.pull-left{float:left}[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em}[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}.btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.18em}.btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{line-height:.8em}.btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.25em}.btn.btn-large [class^="icon-"],.btn.btn-large [class*=" icon-"]{margin-top:0}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.05em}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x{margin-right:.2em}.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-left:.2em}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}@-moz-document url-prefix(){.icon-spin{height:.9em}.btn .icon-spin{height:auto}.icon-spin.icon-large{height:1.25em}.btn .icon-spin.icon-large{height:.75em}}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope-alt:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-undo:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-reply:before{content:"\f112"}.icon-github-alt:before{content:"\f113"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"}
[class^="aweicon-"],[class*=" aweicon-"]{
font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat;margin-top:0}.aweicon-white,.nav-pills>.active>a>[class^="aweicon-"],.nav-pills>.active>a>[class*=" aweicon-"],.nav-list>.active>a>[class^="aweicon-"],.nav-list>.active>a>[class*=" aweaweicon-"],.navbar-inverse .nav>.active>a>[class^="aweicon-"],.navbar-inverse .nav>.active>a>[class*=" aweicon-"],.dropdown-menu>li>a:hover>[class^="aweicon-"],.dropdown-menu>li>a:hover>[class*=" aweicon-"],.dropdown-menu>.active>a>[class^="aweicon-"],.dropdown-menu>.active>a>[class*=" aweicon-"],.dropdown-submenu:hover>a>[class^="aweicon-"],.dropdown-submenu:hover>a>[class*=" aweicon-"]{background-image:none}[class^="aweicon-"]:before,[class*=" aweicon-"]:before{text-decoration:inherit;display:inline-block;speak:none}a [class^="aweicon-"],a [class*=" aweicon-"]{display:inline-block}.aweicon-large:before{vertical-align:-10%;font-size:1.3333333333333333em}.btn [class^="aweicon-"],.nav [class^="aweicon-"],.btn [class*=" aweicon-"],.nav [class*=" aweicon-"]{display:inline}.btn [class^="aweicon-"].aweicon-large,.nav [class^="aweicon-"].aweicon-large,.btn [class*=" aweicon-"].aweicon-large,.nav [class*=" aweicon-"].aweicon-large{line-height:.9em}.btn [class^="aweicon-"].aweicon-spin,.nav [class^="aweicon-"].aweicon-spin,.btn [class*=" aweicon-"].aweicon-spin,.nav [class*=" aweicon-"].aweicon-spin{display:inline-block}.nav-tabs [class^="aweicon-"],.nav-pills [class^="aweicon-"],.nav-tabs [class*=" aweicon-"],.nav-pills [class*=" aweicon-"],.nav-tabs [class^="aweicon-"].aweicon-large,.nav-pills [class^="aweicon-"].aweicon-large,.nav-tabs [class*=" aweicon-"].aweicon-large,.nav-pills [class*=" aweicon-"].aweicon-large{line-height:.9em}li [class^="aweicon-"],.nav li [class^="aweicon-"],li [class*=" aweicon-"],.nav li [class*=" aweicon-"]{display:inline-block;width:1.25em;text-align:center}li [class^="aweicon-"].aweicon-large,.nav li [class^="aweicon-"].aweicon-large,li [class*=" aweicon-"].aweicon-large,.nav li [class*=" aweicon-"].aweicon-large{width:1.5625em}ul.icons{list-style-type:none;text-indent:-0.75em}ul.icons li [class^="aweicon-"],ul.icons li [class*=" aweicon-"]{width:.75em}.aweicon-muted{color:#eee}.aweicon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.aweicon-2x{font-size:2em}.aweicon-2x.aweicon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.aweicon-3x{font-size:3em}.aweicon-3x.aweicon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.aweicon-4x{font-size:4em}.aweicon-4x.aweicon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.pull-right{float:right}.pull-left{float:left}[class^="aweicon-"].pull-left,[class*=" aweicon-"].pull-left{margin-right:.3em}[class^="aweicon-"].pull-right,[class*=" aweicon-"].pull-right{margin-left:.3em}.btn [class^="aweicon-"].pull-left.aweicon-2x,.btn [class*=" aweicon-"].pull-left.aweicon-2x,.btn [class^="aweicon-"].pull-right.aweicon-2x,.btn [class*=" aweicon-"].pull-right.aweicon-2x{margin-top:.18em}.btn [class^="aweicon-"].aweicon-spin.aweicon-large,.btn [class*=" aweicon-"].aweicon-spin.aweicon-large{line-height:.8em}.btn.btn-small [class^="aweicon-"].pull-left.aweicon-2x,.btn.btn-small [class*=" aweicon-"].pull-left.aweicon-2x,.btn.btn-small [class^="aweicon-"].pull-right.aweicon-2x,.btn.btn-small [class*=" aweicon-"].pull-right.aweicon-2x{margin-top:.25em}.btn.btn-large [class^="aweicon-"],.btn.btn-large [class*=" aweicon-"]{margin-top:0}.btn.btn-large [class^="aweicon-"].pull-left.aweicon-2x,.btn.btn-large [class*=" aweicon-"].pull-left.aweicon-2x,.btn.btn-large [class^="aweicon-"].pull-right.aweicon-2x,.btn.btn-large [class*=" aweicon-"].pull-right.aweicon-2x{margin-top:.05em}.btn.btn-large [class^="aweicon-"].pull-left.aweicon-2x,.btn.btn-large [class*=" aweicon-"].pull-left.aweicon-2x{margin-right:.2em}.btn.btn-large [class^="aweicon-"].pull-right.aweicon-2x,.btn.btn-large [class*=" aweicon-"].pull-right.aweicon-2x{margin-left:.2em}.aweicon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}@-moz-document url-prefix(){.aweicon-spin{height:.9em}.btn .aweicon-spin{height:auto}.aweicon-spin.aweicon-large{height:1.25em}.btn .aweicon-spin.aweicon-large{height:.75em}}.aweicon-glass:before{content:"\f000"}.aweicon-music:before{content:"\f001"}.aweicon-search:before{content:"\f002"}.aweicon-envelope:before{content:"\f003"}.aweicon-heart:before{content:"\f004"}.aweicon-star:before{content:"\f005"}.aweicon-star-empty:before{content:"\f006"}.aweicon-user:before{content:"\f007"}.aweicon-film:before{content:"\f008"}.aweicon-th-large:before{content:"\f009"}.aweicon-th:before{content:"\f00a"}.aweicon-th-list:before{content:"\f00b"}.aweicon-ok:before{content:"\f00c"}.aweicon-remove:before{content:"\f00d"}.aweicon-zoom-in:before{content:"\f00e"}.aweicon-zoom-out:before{content:"\f010"}.aweicon-off:before{content:"\f011"}.aweicon-signal:before{content:"\f012"}.aweicon-cog:before{content:"\f013"}.aweicon-trash:before{content:"\f014"}.aweicon-home:before{content:"\f015"}.aweicon-file:before{content:"\f016"}.aweicon-time:before{content:"\f017"}.aweicon-road:before{content:"\f018"}.aweicon-download-alt:before{content:"\f019"}.aweicon-download:before{content:"\f01a"}.aweicon-upload:before{content:"\f01b"}.aweicon-inbox:before{content:"\f01c"}.aweicon-play-circle:before{content:"\f01d"}.aweicon-repeat:before{content:"\f01e"}.aweicon-refresh:before{content:"\f021"}.aweicon-list-alt:before{content:"\f022"}.aweicon-lock:before{content:"\f023"}.aweicon-flag:before{content:"\f024"}.aweicon-headphones:before{content:"\f025"}.aweicon-volume-off:before{content:"\f026"}.aweicon-volume-down:before{content:"\f027"}.aweicon-volume-up:before{content:"\f028"}.aweicon-qrcode:before{content:"\f029"}.aweicon-barcode:before{content:"\f02a"}.aweicon-tag:before{content:"\f02b"}.aweicon-tags:before{content:"\f02c"}.aweicon-book:before{content:"\f02d"}.aweicon-bookmark:before{content:"\f02e"}.aweicon-print:before{content:"\f02f"}.aweicon-camera:before{content:"\f030"}.aweicon-font:before{content:"\f031"}.aweicon-bold:before{content:"\f032"}.aweicon-italic:before{content:"\f033"}.aweicon-text-height:before{content:"\f034"}.aweicon-text-width:before{content:"\f035"}.aweicon-align-left:before{content:"\f036"}.aweicon-align-center:before{content:"\f037"}.aweicon-align-right:before{content:"\f038"}.aweicon-align-justify:before{content:"\f039"}.aweicon-list:before{content:"\f03a"}.aweicon-indent-left:before{content:"\f03b"}.aweicon-indent-right:before{content:"\f03c"}.aweicon-facetime-video:before{content:"\f03d"}.aweicon-picture:before{content:"\f03e"}.aweicon-pencil:before{content:"\f040"}.aweicon-map-marker:before{content:"\f041"}.aweicon-adjust:before{content:"\f042"}.aweicon-tint:before{content:"\f043"}.aweicon-edit:before{content:"\f044"}.aweicon-share:before{content:"\f045"}.aweicon-check:before{content:"\f046"}.aweicon-move:before{content:"\f047"}.aweicon-step-backward:before{content:"\f048"}.aweicon-fast-backward:before{content:"\f049"}.aweicon-backward:before{content:"\f04a"}.aweicon-play:before{content:"\f04b"}.aweicon-pause:before{content:"\f04c"}.aweicon-stop:before{content:"\f04d"}.aweicon-forward:before{content:"\f04e"}.aweicon-fast-forward:before{content:"\f050"}.aweicon-step-forward:before{content:"\f051"}.aweicon-eject:before{content:"\f052"}.aweicon-chevron-left:before{content:"\f053"}.aweicon-chevron-right:before{content:"\f054"}.aweicon-plus-sign:before{content:"\f055"}.aweicon-minus-sign:before{content:"\f056"}.aweicon-remove-sign:before{content:"\f057"}.aweicon-ok-sign:before{content:"\f058"}.aweicon-question-sign:before{content:"\f059"}.aweicon-info-sign:before{content:"\f05a"}.aweicon-screenshot:before{content:"\f05b"}.aweicon-remove-circle:before{content:"\f05c"}.aweicon-ok-circle:before{content:"\f05d"}.aweicon-ban-circle:before{content:"\f05e"}.aweicon-arrow-left:before{content:"\f060"}.aweicon-arrow-right:before{content:"\f061"}.aweicon-arrow-up:before{content:"\f062"}.aweicon-arrow-down:before{content:"\f063"}.aweicon-share-alt:before{content:"\f064"}.aweicon-resize-full:before{content:"\f065"}.aweicon-resize-small:before{content:"\f066"}.aweicon-plus:before{content:"\f067"}.aweicon-minus:before{content:"\f068"}.aweicon-asterisk:before{content:"\f069"}.aweicon-exclamation-sign:before{content:"\f06a"}.aweicon-gift:before{content:"\f06b"}.aweicon-leaf:before{content:"\f06c"}.aweicon-fire:before{content:"\f06d"}.aweicon-eye-open:before{content:"\f06e"}.aweicon-eye-close:before{content:"\f070"}.aweicon-warning-sign:before{content:"\f071"}.aweicon-plane:before{content:"\f072"}.aweicon-calendar:before{content:"\f073"}.aweicon-random:before{content:"\f074"}.aweicon-comment:before{content:"\f075"}.aweicon-magnet:before{content:"\f076"}.aweicon-chevron-up:before{content:"\f077"}.aweicon-chevron-down:before{content:"\f078"}.aweicon-retweet:before{content:"\f079"}.aweicon-shopping-cart:before{content:"\f07a"}.aweicon-folder-close:before{content:"\f07b"}.aweicon-folder-open:before{content:"\f07c"}.aweicon-resize-vertical:before{content:"\f07d"}.aweicon-resize-horizontal:before{content:"\f07e"}.aweicon-bar-chart:before{content:"\f080"}.aweicon-twitter-sign:before{content:"\f081"}.aweicon-facebook-sign:before{content:"\f082"}.aweicon-camera-retro:before{content:"\f083"}.aweicon-key:before{content:"\f084"}.aweicon-cogs:before{content:"\f085"}.aweicon-comments:before{content:"\f086"}.aweicon-thumbs-up:before{content:"\f087"}.aweicon-thumbs-down:before{content:"\f088"}.aweicon-star-half:before{content:"\f089"}.aweicon-heart-empty:before{content:"\f08a"}.aweicon-signout:before{content:"\f08b"}.aweicon-linkedin-sign:before{content:"\f08c"}.aweicon-pushpin:before{content:"\f08d"}.aweicon-external-link:before{content:"\f08e"}.aweicon-signin:before{content:"\f090"}.aweicon-trophy:before{content:"\f091"}.aweicon-github-sign:before{content:"\f092"}.aweicon-upload-alt:before{content:"\f093"}.aweicon-lemon:before{content:"\f094"}.aweicon-phone:before{content:"\f095"}.aweicon-check-empty:before{content:"\f096"}.aweicon-bookmark-empty:before{content:"\f097"}.aweicon-phone-sign:before{content:"\f098"}.aweicon-twitter:before{content:"\f099"}.aweicon-facebook:before{content:"\f09a"}.aweicon-github:before{content:"\f09b"}.aweicon-unlock:before{content:"\f09c"}.aweicon-credit-card:before{content:"\f09d"}.aweicon-rss:before{content:"\f09e"}.aweicon-hdd:before{content:"\f0a0"}.aweicon-bullhorn:before{content:"\f0a1"}.aweicon-bell:before{content:"\f0a2"}.aweicon-certificate:before{content:"\f0a3"}.aweicon-hand-right:before{content:"\f0a4"}.aweicon-hand-left:before{content:"\f0a5"}.aweicon-hand-up:before{content:"\f0a6"}.aweicon-hand-down:before{content:"\f0a7"}.aweicon-circle-arrow-left:before{content:"\f0a8"}.aweicon-circle-arrow-right:before{content:"\f0a9"}.aweicon-circle-arrow-up:before{content:"\f0aa"}.aweicon-circle-arrow-down:before{content:"\f0ab"}.aweicon-globe:before{content:"\f0ac"}.aweicon-wrench:before{content:"\f0ad"}.aweicon-tasks:before{content:"\f0ae"}.aweicon-filter:before{content:"\f0b0"}.aweicon-briefcase:before{content:"\f0b1"}.aweicon-fullscreen:before{content:"\f0b2"}.aweicon-group:before{content:"\f0c0"}.aweicon-link:before{content:"\f0c1"}.aweicon-cloud:before{content:"\f0c2"}.aweicon-beaker:before{content:"\f0c3"}.aweicon-cut:before{content:"\f0c4"}.aweicon-copy:before{content:"\f0c5"}.aweicon-paper-clip:before{content:"\f0c6"}.aweicon-save:before{content:"\f0c7"}.aweicon-sign-blank:before{content:"\f0c8"}.aweicon-reorder:before{content:"\f0c9"}.aweicon-list-ul:before{content:"\f0ca"}.aweicon-list-ol:before{content:"\f0cb"}.aweicon-strikethrough:before{content:"\f0cc"}.aweicon-underline:before{content:"\f0cd"}.aweicon-table:before{content:"\f0ce"}.aweicon-magic:before{content:"\f0d0"}.aweicon-truck:before{content:"\f0d1"}.aweicon-pinterest:before{content:"\f0d2"}.aweicon-pinterest-sign:before{content:"\f0d3"}.aweicon-google-plus-sign:before{content:"\f0d4"}.aweicon-google-plus:before{content:"\f0d5"}.aweicon-money:before{content:"\f0d6"}.aweicon-caret-down:before{content:"\f0d7"}.aweicon-caret-up:before{content:"\f0d8"}.aweicon-caret-left:before{content:"\f0d9"}.aweicon-caret-right:before{content:"\f0da"}.aweicon-columns:before{content:"\f0db"}.aweicon-sort:before{content:"\f0dc"}.aweicon-sort-down:before{content:"\f0dd"}.aweicon-sort-up:before{content:"\f0de"}.aweicon-envelope-alt:before{content:"\f0e0"}.aweicon-linkedin:before{content:"\f0e1"}.aweicon-undo:before{content:"\f0e2"}.aweicon-legal:before{content:"\f0e3"}.aweicon-dashboard:before{content:"\f0e4"}.aweicon-comment-alt:before{content:"\f0e5"}.aweicon-comments-alt:before{content:"\f0e6"}.aweicon-bolt:before{content:"\f0e7"}.aweicon-sitemap:before{content:"\f0e8"}.aweicon-umbrella:before{content:"\f0e9"}.aweicon-paste:before{content:"\f0ea"}.aweicon-lightbulb:before{content:"\f0eb"}.aweicon-exchange:before{content:"\f0ec"}.aweicon-cloud-download:before{content:"\f0ed"}.aweicon-cloud-upload:before{content:"\f0ee"}.aweicon-user-md:before{content:"\f0f0"}.aweicon-stethoscope:before{content:"\f0f1"}.aweicon-suitcase:before{content:"\f0f2"}.aweicon-bell-alt:before{content:"\f0f3"}.aweicon-coffee:before{content:"\f0f4"}.aweicon-food:before{content:"\f0f5"}.aweicon-file-alt:before{content:"\f0f6"}.aweicon-building:before{content:"\f0f7"}.aweicon-hospital:before{content:"\f0f8"}.aweicon-ambulance:before{content:"\f0f9"}.aweicon-medkit:before{content:"\f0fa"}.aweicon-fighter-jet:before{content:"\f0fb"}.aweicon-beer:before{content:"\f0fc"}.aweicon-h-sign:before{content:"\f0fd"}.aweicon-plus-sign-alt:before{content:"\f0fe"}.aweicon-double-angle-left:before{content:"\f100"}.aweicon-double-angle-right:before{content:"\f101"}.aweicon-double-angle-up:before{content:"\f102"}.aweicon-double-angle-down:before{content:"\f103"}.aweicon-angle-left:before{content:"\f104"}.aweicon-angle-right:before{content:"\f105"}.aweicon-angle-up:before{content:"\f106"}.aweicon-angle-down:before{content:"\f107"}.aweicon-desktop:before{content:"\f108"}.aweicon-laptop:before{content:"\f109"}.aweicon-tablet:before{content:"\f10a"}.aweicon-mobile-phone:before{content:"\f10b"}.aweicon-circle-blank:before{content:"\f10c"}.aweicon-quote-left:before{content:"\f10d"}.aweicon-quote-right:before{content:"\f10e"}.aweicon-spinner:before{content:"\f110"}.aweicon-circle:before{content:"\f111"}.aweicon-reply:before{content:"\f112"}.aweicon-github-alt:before{content:"\f113"}.aweicon-folder-close-alt:before{content:"\f114"}.aweicon-folder-open-alt:before{content:"\f115"}
/branches/v3/impl/src/web/layout/themes/scripts-default.jsp
18,7 → 18,7
 
<!--OFF CANVAS É PARA METER O BODY ABAIXO DO MENU DESLIZANTE DE TOPO-->
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/offcanvas.css"/>
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/<%=bacoTheme%>/style.css"/>
 
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/<%=bacoTheme%>/stylePublicPortal.css"/>
<script type="text/javascript" src="<%=request.getContextPath()%>/js/functions.js"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/js/ajax.js"></script>
543,7 → 543,7
<link href="<%=request.getContextPath()%>/js/bootstrap-wysiwyg-master/external/google-code-prettify/prettify.css" rel="stylesheet">
<!--<link href="<%=request.getContextPath()%>/js/bootstrap-wysiwyg-master/netdna/bootstrap-combined.no-icons.min.css" rel="stylesheet">-->
<%--<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-responsive.min.css" rel="stylesheet">--%>
<%--<link href="<%=request.getContextPath()%>/js/bootstrap-wysiwyg-master/netdna/font-awesome.css" rel="stylesheet">--%>
<link href="<%=request.getContextPath()%>/js/bootstrap-wysiwyg-master/netdna/font-awesome.css" rel="stylesheet">
<%--<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>--%>
<script src="<%=request.getContextPath()%>/js/bootstrap-wysiwyg-master/external/jquery.hotkeys.js"></script>
<%--<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>--%>
620,5 → 620,6
}
 
</script>
 
<%--O nosso estilo fica aqui para se sobrepor--%>
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/<%=bacoTheme%>/style.css"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
/branches/v3/impl/src/web/layout/themes/ipp/footer.jsp
10,7 → 10,6
 
<footer class="footer">
<div class="container">
 
<p class="text-muted">Powered by plataforma IPP-PAE - 2016</b>.</p>
</div>
</footer>
/branches/v3/impl/src/web/user/courseunits/courseunit.jsp
1,9 → 1,9
<%@ page import="pt.estgp.estgweb.Globals" %>
<%@ page import="pt.estgp.estgweb.domain.StudentImpl" %>
<%@ page import="pt.estgp.estgweb.domain.UserImpl" %>
<%@ 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 import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ 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" %>
244,15 → 244,80
<div class="panel panel-default">
<div class="panel-heading">
<bean:message key="courseunit.teachers"/>
<a href="#" data-toggle="modal" data-target="#teachersInfo" class="pull-right">
Mais Info. <span class="glyphicon glyphicon-info-sign"> </span>
</a>
</div>
<div class="panel-body">
 
<div class="modal fade" id="teachersInfo" tabindex="-1" role="dialog" >
<div class="modal-dialog" data-width="750" style="display: block; width: 750px; margin-top: 50px;" aria-hidden="false">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title"><bean:message key="courseunit.teachers"/>
<button type="button" class="btn btn-danger btn-sm pull-right glyphicon glyphicon-remove " data-dismiss="modal"></button>
</h4>
</div>
<div class="modal-body">
<div class="well well-sm"><bean:message key="courseunit.responsable"/></div>
 
<logic:lessEqual value="0" name="CourseUnitView" property="responsableTeacher.id">
<p> Não existe informação disponivel.</p>
</logic:lessEqual>
<logic:greaterThan value="0" name="CourseUnitView" property="responsableTeacher.id">
<p class="lead"><strong><bean:message key="name"/></strong>: ${CourseUnitView.responsableTeacher.name}</p>
<p><strong><bean:message key="profile.siges.code.public"/></strong>: ${CourseUnitView.responsableTeacher.code}</p>
<p><label class=""><bean:message key="email"/></label>: ${CourseUnitView.responsableTeacher.safeEmail}</p>
</logic:greaterThan>
 
<div class="well well-sm"><bean:message key="courseunit.teachers.teaching"/></div>
<logic:iterate id="teacher" name="CourseUnitView" property="teachers" type="pt.estgp.estgweb.domain.views.UserView">
 
<p class="lead"><strong><bean:message key="name"/></strong>: ${teacher.name}</p>
<p><strong><bean:message key="profile.siges.code.public"/></strong>: ${teacher.code}</p>
<p><label class=""><bean:message key="email"/></label>: ${teacher.safeEmail}</p>
<logic:present name="CourseUnitView" property="tipologias">
<%
Map<String,List<String>> mapa = CourseUnitView.getTipologiasTurmas(""+teacher.getCode());
for(Map.Entry<String,List<String>> entry: mapa.entrySet())
{
String tipologia = entry.getKey();
List<String> turmas = entry.getValue();
request.setAttribute("turmas", turmas);
request.setAttribute("tipologia", tipologia);
%>
<p>${tipologia}:
<logic:iterate id="turma" name="turmas" type="java.lang.String" scope="request">
${turma}
</logic:iterate>
</p>
<%
}
%>
 
</logic:present>
</logic:iterate>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Voltar</button>
</div>
</div>
</div>
</div>
 
 
<logic:notEmpty name="CourseUnitView" property="responsableTeacher">
<div class="list-group">
<div class="list-group-item list-group-item-heading"><bean:message key="courseunit.responsable"/></div>
<div class="list-group-item clearfix">
 
<logic:lessEqual value="0" name="CourseUnitView" property="responsableTeacher.id">
<p> Não existe informação disponivel.</p>
</logic:lessEqual>
<logic:greaterThan value="0" name="CourseUnitView" property="responsableTeacher.id">
<html:link action="${user}/startLoadTeacherCourseUnit${fromAction}?code=${CourseUnitView.responsableTeacher.code}&courseUnitView.id=${CourseUnitView.id}">${CourseUnitView.responsableTeacher.name}</html:link>
<span class="badge">${CourseUnitView.responsableTeacher.code}</span>
</logic:greaterThan>
 
</div>
<div class="list-group-item list-group-item-footer"> ${CourseUnitView.responsableTeacher.safeEmail}</div>
/branches/v3/impl/src/web/user/courseunits/students.jsp
33,7 → 33,7
<div class="panel panel-default">
<div class="panel-body">
<p><bean:message key="courseunit.students.count"/>: ${CourseUnitView.studentsSize}</p>
<table id="myTable" class="tablesorter dataTable">
<table id="myTable" class="tablesorterfiltered">
<thead>
<tr>
<%/*<th><html:link action="${user}/startLoadCourseUnitStudents${fromAction}?courseUnitView.id=${CourseUnitView.id}&order=byNumber"><bean:message key="number"/></html:link></th>
50,6 → 50,7
<th><bean:message key="phone.number"/></th>
</baco:hasRole>
 
<th class="filter-name filter-select">Turma</th>
</tr>
</thead>
<tbody>
70,6 → 71,9
<baco:hasRole role="teacher">
<td>${student.phonenumber} </td>
</baco:hasRole>
<td>
${student.studentTurma}
</td>
</tr>
</logic:iterate>
</tbody>
/branches/v3/impl/src/web/user/home/userPae.jsp
17,6 → 17,9
<div class="panel-body">
<div class="list-group">
<div class="list-group-item"><html:link action="/user/configurationSchedulleTasks.do"><bean:message key="configuration.tasks"/></html:link></div>
<div class="list-group-item"><html:link action="/admin/courseUnitsDeleteAdmin">Administração de Unidades Curriculares (Remoções)</html:link></div>
<div class="list-group-item"><html:link action="/user/courseComissions">Informação Adicional de Cursos</html:link></div>
<div class="list-group-item"><html:link action="/user/startFindCourseUnitAdminFromServiceZone"><bean:message key="courseunit.search"/></html:link></div>
</div>
</div>
</div>
/branches/v3/impl/src/web/user/serviceZone/serviceZone.jsp
84,7 → 84,7
<li><a href="<%=request.getContextPath()%>/user/configurationGrades.do"><bean:message key="configuration.grades"/></a></li>
<li><a href="<%=request.getContextPath()%>/user/configurationDirectories.do"><bean:message key="configuration.directories"/></a></li>
<li><a href="<%=request.getContextPath()%>/user/configurationSchedulleTasks.do"><bean:message key="configuration.tasks"/></a></li>
 
<li><html:link action="/admin/courseUnitsDeleteAdmin">Administração de Unidades Curriculares (Remoções)</html:link></li>
<li><a href="<%=request.getContextPath()%>/user/configurationUserRoles.do"><bean:message key="configuration.roles"/></a></li>
</ul>
</li>
/branches/v3/impl/build.xml
194,7 → 194,7
</replace>
</target>
 
<target name="copy.jsps.war" depends="copyConfigurationFiles" description="copy only jsps to war distribution">
<target name="copy.jsps.war" depends="createConfigurationFiles" description="copy only jsps to war distribution">
<copy todir="${build.dir.war}" overwrite="false">
<fileset dir="src/web">
<include name="**/*"/>