Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 313 → Rev 367

/impl/importRoutines.xml
14,6 → 14,10
<target name="students">
<java classname="pt.estgp.estgweb.services.sigesimports.ImportStudentsService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
 
 
<target name="jobs">
<java classname="pt.estgp.estgweb.services.jobs.JobDeamon" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
<target name="summaries">
<java classname="pt.estgp.estgweb.services.sigesimports.ImportSumaries" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
</project>
/impl/conf/language/MessageResourcesCommon.properties
9,6 → 9,7
search.next=Próxima Página
search.previous=Página Anterior
search.see.more=ver mais
search.see.more.content=Clique aqui para ver mais acerca deste conteudo
search.type.phrase=Frase Exacta
search.type.any=Algumas Palavras
search.type.all=Todas as Palavras
/impl/conf/language/MessageResourcesCourse.properties
22,11 → 22,12
course.director=Director de Curso
course.studies.plan=Plano de Estudos (XML válido no planoEstudos.xsd)
course.studies.plan.not.available=Não disponivel
course.courseunit.program.objectives.todo=Unidade em Falta (programa ou objectivos)
course.courseunit.program.objectives.todo={0} Unidades em Falta (programa)
course.externalSite=Site Externo
course.studies.plan=Plano de Estudos
course.directed.coordinated.courses=Gestão de Unidades Curriculares
course.directed.coordinated.courses.updated.success={0} unidades curriculares actualizadas com sucesso
 
 
course.B=Bacharlato
course.L=Lincenciatura
course.M=Mestrado
38,13 → 39,26
course.Ms=Mestrados
course.Ps=Pós Graduaçãos
course.Es=CET's
 
 
course.units.no.program=Unidades sem programa entregue
course.units.with.program.not.checked=Unidades com programa por validar
course.units.with.program.checked=Unidades com programa válido
course.valid.program=Programa Validado
course.directed.coordinated=Cursos que coordena e/ou dirige (Apenas os coordenadores tem permissão para alterar o estado de um programa)
course.directed.courses=Cursos que dirige
course.coordinated.courses=Cursos que coordena
course.unit.directed=Unidades Curriculares
course.unit.coordinated=Unidades Coordenadas
course.program.courses=Programas Curriculares por Curso
course.program.coordinated.directed.courses=Programas Curriculares dos Cursos Coordenados e/ou dirigidos
course.program.courses.choose.year=Escolha o ano que deseja consultar
 
 
courseunit.programfile.valid=programa <u>Aprovado</u> pela coordenação de área
 
 
 
 
 
 
/impl/conf/language/MessageResourcesProfile.properties
11,6 → 11,7
profile.bad.profile.teacher.iregular.user.class=Existe um problema com o seu perfil. Aparentemente o papel de professor que lhe foi atribuido não foi reconhecido pelo sistema central. Por favor dirija-se ao centro informatico e reporte o problema para que a situação seja corrigida. Pedimos desculpa pelo incómodo.
profile.bad.profile.student.iregular.user.class=Existe um problema com o seu perfil. Aparentemente o papel de estudante que lhe foi atribuido não foi reconhecido pelo sistema central. Por favor dirija-se ao centro informatico e reporte o problema para que a situação seja corrigida. Pedimos desculpa pelo incómodo.
 
user.exists=Já existe um utilizador com o {0} escolhido
#Degrees
profile.scholar.degree.notset=Não disponivel
profile.scholar.degree=Escolaridade
98,3 → 99,6
profile.RecordEventOrganizationImpl=Participação em Organizações de Eventos
profile.RecordProjectImpl=Participações em Projectos
profile.RecordOtherImpl=Outros
 
profile.record.publisher.all=Instituição / Empresa / Conferência / Workshop / Revista
profile.record.publisher.paper=Conferência / Workshop / Revista
/impl/conf/language/MessageResources.properties
47,6 → 47,7
 
error.no.cookies=Por favor ligue os cookies do seu browser para poder continuar a usar este sistema. Obrigado
error.500=Ocorreu um erro interno
error.503=O serviço de monmento encontra-se indisponivel, por favor volte a tentar mais tarde.
error.404=A página solicitada não está disponível
error.404.explain=Caro utilizador, a página que pretende visualizar não se encontra disponível neste endereço.<br>O erro pode ter ocorrido por uma das seguintes razões:
error.404.item.1=Escreveu mal o endereço (URL) do documento a que pretende aceder
90,6 → 91,7
user.role.worker=Funcionário
user.role.invited=Convidado
user.role.services=Serviços
user.role.servicesPrograms=Gestão de Programas Curriculares
user.role.administrativeCouncil=Conselho Directivo
user.role.representativeCouncil=Assembleia de Representantes
user.role.scientificCouncil=Conselho Científico
/impl/conf/language/MessageResourcesCourseUnits.properties
13,7 → 13,9
courseunit.programfilepath=Programa Curricular
courseunit.programfilepath.not.available=O Programa Curricular não está disponivel
courseunit.objectives.not.available=Os objectivos não estão disponiveis
 
courseunit.summaries=Sumários
courseunit.summary.present.students=alunos presentes (valor de amostragem)
courseunit.summaries.zero.placed=Não existem sumários disponiveis
courseunit.program.description=Programa Curricular de {0}
 
courseunit.program.archive=Arquivo
24,6 → 26,7
courseunit.zero.units=Nenhuma Unidade Curricular
courseunit.objectives.todo=Peenchimento dos objectivos da unidade
courseunit.program.todo=Upload do programa da unidade
courseunit.program.objectives.todo=Programa e/ou Objectivos
courseunit.question.todo=Dúvida
courseunit.assignement.todo=Trabalho por entregar
course.unit.works=Trabalhos
91,9 → 94,10
 
 
backups=Cópias de Segurança
courseunits.backups=Criar cópia de Segurança de todos os trabalhos entregues em todos os cursos
courseunits.actual.year.backup=Trabalhos entregues este ano
courseunits.all.backup=Todos os trabalhos entregues
courseunits.backups=Criar cópia de Segurança de todos das Unidades Curriculares em todos os cursos
courseunits.backups.actual.year=Criar cópia de Segurança (apenas do ano corrente) de todos das Unidades Curriculares em todos os cursos
courseunits.actual.year.backup=Backup do ano corrente
courseunits.all.backup=Backup de todos os anos (Este serviço pode demorar alguns minutos a executar)
 
 
 
/impl/conf/language/MessageResourcesBlog.properties
38,6 → 38,8
blog.deleted.success=Blog apagado com sucesso.
blog.deleted.fail=O Blog não foi apagado, contacte a administração.
blog.add.post=Adicionar POST
blog.add.post.cant.add.login=Este blog tem restrições de utilização. (Autênticação necessária)
blog.add.post.cant.add=Este blog tem restrições de utilização. Se acha que deveria poder colocar Posts neste blog contacte a administração.
blog.delete.post=Apagar POST
blog.confirm.delete.post=Tem a certeza que deseja apagar o POST Selecionado?
blog.post.deleted.success=POST apagado com sucesso.
/impl/conf/WEB-INF/struts/struts-courses.xml
34,6 → 34,8
<forward name="load" path="page.load.course"/>
</action>
 
<action path="/user/startLoadCoursesProgramsFromServiceZone" forward="/user/courseControllerFromHome.do?dispatch=loadCoursesPrograms&amp;fromDispatch=loadCoursesPrograms&amp;from=ServiceZone"/>
<action path="/user/startLoadDirectedCoordinatedCoursesFromServiceZone" forward="/user/courseControllerFromServiceZone.do?dispatch=loadDirectedCoordininatedCourses&amp;fromDispatch=loadDirectedCoordininatedCourses&amp;from=ServiceZone"/>
<action path="/user/startSelectCourseFromServiceZone" forward="page.select.course.from.service.zone"/>
<action path="/user/startEditCourseFromServiceZone" forward="/user/courseControllerFromServiceZone.do?dispatch=edit&amp;from=ServiceZone"/>
<action path="/user/startNewCourseFromServiceZone" forward="/user/courseControllerFromServiceZone.do?dispatch=startNew&amp;from=ServiceZone"/>
46,10 → 48,29
validate="false"
input="page.separators.serviceZone">
<forward name="submit" path="page.submit.course.from.service.zone"/>
<forward name="load.courses.programs" path="page.courses.programs.from.service.zone"/>
<forward name="load.directed.coordinated.courses" path="page.directed.coordinated.courses.from.service.zone"/>
<forward name="confirm.courses.programs" path="page.separators.serviceZone"/>
</action>
 
<action path="/user/startLoadCoursesProgramsFromHome" forward="/user/courseControllerFromHome.do?dispatch=loadCoursesPrograms&amp;fromDispatch=loadCoursesPrograms&amp;from=Home"/>
<action path="/user/startLoadDirectedCoordinatedCoursesFromHome" forward="/user/courseControllerFromHome.do?dispatch=loadDirectedCoordininatedCourses&amp;fromDispatch=loadDirectedCoordininatedCourses&amp;from=Home"/>
<action path="/user/courseControllerFromHome"
type="pt.estgp.estgweb.web.controllers.courses.CoursesController"
name="CourseForm"
scope="request"
parameter="dispatch"
validate="false"
input="page.separators.serviceZone">
<forward name="load.courses.programs" path="page.courses.programs.from.home"/>
<forward name="load.directed.coordinated.courses" path="page.directed.coordinated.courses.from.home"/>
<forward name="confirm.courses.programs" path="page.separators.home"/>
</action>
 
 
 
 
 
</action-mappings>
 
</struts-config>
/impl/conf/WEB-INF/struts/tiles-courses.xml
32,7 → 32,30
<put name="topnav" value="/user/serviceZone/topnavSubmitCourse.jsp"/>
<put name="body" value="/admin/courses/course.jsp"/>
</definition>
<definition name="page.courses.programs.from.service.zone" extends="page.separators.serviceZone">
<put name="title" value="Ver Programas de Unidades"/>
<put name="topnav" value="/user/serviceZone/topnavCoursesPrograms.jsp"/>
<put name="body" value="/user/courses/directedCoordinatedCourses.jsp"/>
</definition>
<definition name="page.directed.coordinated.courses.from.service.zone" extends="page.separators.serviceZone">
<put name="title" value="Ver Cursos e Unidades"/>
<put name="topnav" value="/user/serviceZone/topnavDirectedCoordinatedCourses.jsp"/>
<put name="body" value="/user/courses/directedCoordinatedCourses.jsp"/>
</definition>
 
 
<definition name="page.directed.coordinated.courses.from.home" extends="page.separators.home">
<put name="title" value="Ver Cursos e Unidades"/>
<put name="topnav" value="/user/courses/topnavDirectedCoordinatedCourses.jsp"/>
<put name="body" value="/user/courses/directedCoordinatedCourses.jsp"/>
</definition>
<definition name="page.courses.programs.from.home" extends="page.separators.home">
<put name="title" value="Ver Cursos e Unidades"/>
<put name="topnav" value="/user/courses/topnavDirectedCoordinatedCourses.jsp"/>
<put name="body" value="/user/courses/directedCoordinatedCourses.jsp"/>
</definition>
 
 
 
 
/impl/conf/WEB-INF/struts/struts-default.xml
21,6 → 21,7
 
<global-forwards>
<forward name="welcome" path="/Welcome.do"/>
<forward name="error503" path="/error503.do"/>
<forward name="error500" path="/error500.do"/>
<forward name="error404" path="/error404.do"/>
<forward name="error401" path="/error401.do"/>
47,6 → 48,7
<action path="/error401" forward="page.error.401"/>
<action path="/error404" forward="page.error.404"/>
<action path="/error500" forward="page.error.500"/>
<action path="/error503" forward="page.error.503"/>
 
<!--Layout Forward-->
<action path="/layout"
/impl/conf/WEB-INF/struts/tiles-default.xml
324,6 → 324,10
<put name="title" value="internal error" />
<put name="body" value="/errors/500.jsp" />
</definition>
<definition name="page.error.503" extends="base.error.definition">
<put name="title" value="indisponivel" />
<put name="body" value="/errors/503.jsp" />
</definition>
<definition name="page.error.401" extends="base.error.definition">
<put name="title" value="not authorized" />
<put name="body" value="/errors/401.jsp" />
/impl/conf/WEB-INF/tlds/baco.tld
121,6 → 121,20
</attribute>
</tag>
<tag>
<name>isRealOwner</name>
<tagclass>pt.estgp.estgweb.web.tags.RealOwnerTag</tagclass>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>property</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
<tag>
<name>isValid</name>
<tagclass>pt.estgp.estgweb.web.tags.IsValidTag</tagclass>
<attribute>
149,6 → 163,20
</attribute>
</tag>
<tag>
<name>canNotAddContent</name>
<tagclass>pt.estgp.estgweb.web.tags.CanNotAddContentTag</tagclass>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>property</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
<tag>
<name>canLoad</name>
<tagclass>pt.estgp.estgweb.web.tags.CanLoadTag</tagclass>
<attribute>
/impl/conf/WEB-INF/web.xml
294,6 → 294,10
<error-code>500</error-code>
<location>/error500.do</location>
</error-page>
<error-page>
<error-code>503</error-code>
<location>/error503.do</location>
</error-page>
 
<!--TLDS-->
<jsp-config>
/impl/conf/app.properties
8,7 → 8,7
 
 
email.local.suffix=estgp.pt
email.server=mail.estgp.pt
email.server=localhost
email.user=
email.password=
email.from=bacodev@estgp.pt
30,9 → 30,19
email.courseunit.announcement.subject.pt={0}: {1} (ESTG)
email.courseunit.announcement.subject.en={0}: {1} (ESTG)
 
email.courseunit.blogpost.subject.pt={0}: {1} (ESTG)
email.courseunit.blogpost.subject.en={0}: {1} (ESTG)
 
email.new.grades=true
email.courseunit.announcements=true
email.courseunit.blogs=true
 
email.summaries=false
 
email.summary.subject.pt=Sumário lançado em {0}
email.summary.subject.en=Sumário lançado em {0}
 
 
##################################################
# Modules usage
#
49,7 → 59,7
module.reminders=true
module.intranet=true
module.profile=true
module.sms=true
module.sms=false
 
##################################################
# SMS
75,12 → 85,13
ionline.pass=baco
ionline.user=Baco_web
 
server.estgp=http://www.estgp.pt
estgp.encoding=ISO-8859-1
server.estgp.start.path=/testes/nova_web
 
server.estgp=http://localhost:8180
#estgp.encoding=ISO-8859-1
server.estgp.start.path=/static
#server.estgp=http://www.estgp.pt/testes/nova_web
#estgp.encoding=UTF-8
estgp.encoding=UTF-8
estgp.proxy.host=
estgp.proxy.port=
 
##server.estgp=http://localhost:8080/estgweb
server.estgweb=http://www.estgp.pt/testes/estgweb
106,6 → 117,7
user.courseCoordinator=courseCoordinator
user.courseDirector=courseDirector
user.identifiersManagers=identifiersManager
user.servicesPrograms=servicesPrograms
 
user.role.00=all
user.role.01=admin
133,9 → 145,9
user.role.23=courseDirector
user.role.24=identifiersManager
user.role.25=identifiersCollectionCreator
user.role.26=servicesPrograms
 
 
 
#########################################################################
#
# Modules
145,7 → 157,7
#########################################################################
# Announcements
#
announcements.text.summary.size=250
announcements.text.summary.size=500
announcements.text.summary.size.small=100
announcements.max.visible=10
announcements.top.flash.news.timeout.miliseconds=7000
171,7 → 183,7
announcements.automatic.validation.role.5=services
 
studentAssociation.auto.validation.targets=student,oldStudent,futureStudent,erasmusStudent
studentAssociation.auto.validation.types=news,top.flash.news
studentAssociation.auto.validation.types=news
 
services.auto.validation.targets=student,oldStudent,futureStudent,erasmusStudent,teacher,teacher.eg,teacher.dg,teacher.ce
services.auto.validation.types=news,top.flash.news,bottom.flash.news,todo
194,7 → 206,8
 
 
#role images for announcements
announcement.default.img=/imgs/rolesIcons/nd.gif
announcement.default.img=/imgs/rolesIcons/estg.gif
role.student.img=/imgs/rolesIcons/student.gif
role.admin.img=/imgs/rolesIcons/estg.gif
role.sudentAssociation.img=/imgs/rolesIcons/ae.gif
role.administrativeCouncil.img=/imgs/rolesIcons/c_directivo.gif
/impl/conf/template/email/courseUnitBlogPost_en.txt
New file
0,0 → 1,22
# 0 : Course Unit Name
# 1 : Title
# 2 : Text
# 3 : Teacher
#
# Course Unit Announcement
#
Dear Student
 
A new post has been inserted in unit blog:
{0}
 
{1}
 
{2}
 
Best Regards {3}
 
---------------------------------------------
Escola Superior de Tecnologia e Gestão
Instituto Politécnico de Portalegre
http://www.estgp.pt
/impl/conf/template/email/courseUnitBlogPost_pt.txt
New file
0,0 → 1,22
# 0 : Course Unit Name
# 1 : Title
# 2 : Text
# 3 : Teacher
#
# Course Unit Announcement
#
Caro estudante
 
Um novo post foi publicado no blog da unidade:
{0}
 
{1}
 
{2}
 
Com os melhores cumprimentos {3}
 
---------------------------------------------
Escola Superior de Tecnologia e Gestão
Instituto Politécnico de Portalegre
http://www.estgp.pt
/impl/conf/template/email/courseUnitAnnouncement_pt.txt
1,4 → 1,4
# 0 : Course Unit Name
# 0 : Course Unit Name
# 1 : Title
# 2 : Text
# 3 : Teacher
7,7 → 7,7
#
Caro estudante
 
Um novo anuncio foi publicado na unidade:
Um novo anúncio foi publicado na unidade:
{0}
 
{1}
/impl/conf/template/email/summary_en.txt
New file
0,0 → 1,17
#Email course unit summary
Dear Student
 
Follow the summary of {0} number {1} at day {2}
 
Summary
 
title: {3}
 
{4}
 
Best Regards
 
---------------------------------------------
Escola Superior de Tecnologia e Gestão
Instituto Politécnico de Portalegre
http://www.estgp.pt
/impl/conf/template/email/summary_pt.txt
New file
0,0 → 1,17
#Email course unit summary
Caro Aluno
 
Segue o sumario da disciplina de {0} da aula {1} do dia {2}
 
Sumário
 
titulo: {3}
 
{4}
 
Com os melhores cumprimentos
 
---------------------------------------------
Escola Superior de Tecnologia e Gestão
Instituto Politécnico de Portalegre
http://www.estgp.pt
/impl/conf/template/assignement/Assignement.txt
1,7 → 1,10
Unidade Curricular:{0}
Unidade Curricular:{0}
 
Titulo:{1}
 
Data de Entrega: {2}
 
Descrição:
 
{3}
 
/impl/conf/berserk/sd.xml
833,6 → 833,53
</filterChains>
</service>
<service>
<name>LoadDirectedCoordinatedCoursesForUserInSession</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.DirectedCoordinatedUnitsService</implementationClass>
<description>Load coordinated directed courses</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadForUserSession</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="DirectorsCoordinators"/>
</filterChains>
</service>
<service>
<name>LoadCoursesProgramsForServices</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.DirectedCoordinatedUnitsService</implementationClass>
<description>Load coordinated directed courses</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadForServices</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="ServicesOrOrganisms"/>
</filterChains>
</service>
<service>
<name>LoadCoursesImportYears</name>
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass>
<description>Load import years</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadImportYears</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
</filterChains>
</service>
<service>
<name>UpdateDirectedCoordinatedCoursesForUserInSession</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.DirectedCoordinatedUnitsService</implementationClass>
<description>Load coordinated directed courses</description>
<isTransactional>true</isTransactional>
<defaultMethod>update</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="DirectorsCoordinators"/>
</filterChains>
</service>
<service>
<name>LoadTeachedUnits</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.LoadTeachedUnitsService</implementationClass>
<description>Load teacher units</description>
961,7 → 1008,7
<implementationClass>pt.estgp.estgweb.services.courseunits.CreateCourseUnitWorksBackupService</implementationClass>
<description>Create a zip file with Intranet folders</description>
<isTransactional>true</isTransactional>
<defaultMethod>createSystemActualYearBackup</defaultMethod>
<defaultMethod>createSystemBackup</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
969,6 → 1016,18
</filterChains>
</service>
<service>
<name>CreateImportYearCourseUnitWorksBackup</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CreateCourseUnitWorksBackupService</implementationClass>
<description>Create a zip file with Intranet folders</description>
<isTransactional>true</isTransactional>
<defaultMethod>createSystemImportYearBackup</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="Admins"/>
</filterChains>
</service>
<service>
<name>CreateUserActualYearCourseUnitWorksBackup</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CreateCourseUnitWorksBackupService</implementationClass>
<description>Create a zip file with deliverables</description>
980,6 → 1039,17
</filterChains>
</service>
<service>
<name>CreateUserImportYearCourseUnitWorksBackup</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CreateCourseUnitWorksBackupService</implementationClass>
<description>Create a zip file with deliverables</description>
<isTransactional>true</isTransactional>
<defaultMethod>createImportYearBackup</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
</filterChains>
</service>
<service>
<name>CreateUserAllCourseUnitWorksBackup</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CreateCourseUnitWorksBackupService</implementationClass>
<description>Create a zip file with Intranet folders</description>
/impl/conf/berserk/fcd.xml
35,6 → 35,20
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass>
</filterChain>
<filterChain>
<name>DirectorsCoordinators</name>
<expression>AuthenticatedUsers &amp;&amp; (RoleUsers("courseDirector") || RoleUsers("courseCoordinator"))</expression>
<description>Validate if a user is coordinator or director</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass>
</filterChain>
<filterChain>
<name>ServicesOrOrganisms</name>
<expression>AuthenticatedUsers &amp;&amp; (RoleUsers("admin") || RoleUsers("servicesPrograms") || RoleUsers("administrativeCouncil") || RoleUsers("scientificCouncil") || RoleUsers("pedagogicCouncil"))</expression>
<description>Validate if a user is coordinator or director</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass>
</filterChain>
<filterChain>
<name>IdentifiersManager</name>
<expression>AuthenticatedUsers &amp;&amp; RoleUsers("identifiersManager")</expression>
<description>Admins Control Chain</description>
/impl/src/java/jomm/utils/StreamsUtils.java
53,6 → 53,4
stream.close();
out.close();
}
 
 
}
/impl/src/java/jomm/utils/AutoFillArrayList.java
New file
0,0 → 1,63
package jomm.utils;
 
import org.apache.log4j.Logger;
 
import java.util.ArrayList;
 
/**
* @author Jorge Machado
* @date 24/Out/2008
* @see jomm.utils
*/
public class AutoFillArrayList<CLAZZ> extends ArrayList<CLAZZ>
{
 
private static final Logger logger = Logger.getLogger(AutoFillArrayList.class);
 
Class c;
 
public AutoFillArrayList(Class c)
{
super();
// this.c = c;
for(int i=0;i<600;i++)
{
try
{
super.add((CLAZZ) c.newInstance());
}
catch (InstantiationException e)
{
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
catch (IllegalAccessException e)
{
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
 
// public CLAZZ get(int n)
// {
// while(super.size()-1 < n)
// {
// super.add(null);
// }
// if(super.get(n)==null)
// try
// {
// super.add(n, (CLAZZ) c.newInstance());
// }
// catch (InstantiationException e)
// {
// logger.error(e,e);
// }
// catch (IllegalAccessException e)
// {
// logger.error(e,e);
// }
// return super.get(n);
// }
 
 
}
/impl/src/java/jomm/utils/StringsUtils.java
115,6 → 115,8
return true;
}
 
 
public static String normalizeResourceName(String name)
{
if(name == null || name.trim().length() == 0)
184,6 → 186,7
 
public static void main(String [] args)
{
System.out.println(normalizeResourceName("teste.teste monhe 2.d.zip"));
System.out.println(cleanKeepNumbers("90.0123-212"));
 
}
264,4 → 267,5
}
 
 
 
}
/impl/src/java/jomm/dao/utils/HibernateUtils.java
14,17 → 14,16
 
public class HibernateUtils implements Runnable{
 
// private static Session session;
// private static Session session;
private static final Logger logger = Logger.getLogger(HibernateUtils.class);
private static final SessionFactory sessionFactory;
private static SessionFactory sessionFactory;
 
static
{
try
{
Configuration config = new Configuration();
config.configure(Thread.currentThread().getContextClassLoader().getResource("pt/estgp/estgweb/hibernate.cfg.xml"));
sessionFactory = config.buildSessionFactory();
createFactory();
 
// session = sessionFactory.openSession();
}
catch (Throwable e)
34,8 → 33,17
}
}
 
private static void createFactory()
{
Configuration config = new Configuration();
config.configure(Thread.currentThread().getContextClassLoader().getResource("pt/estgp/estgweb/hibernate.cfg.xml"));
sessionFactory = config.buildSessionFactory();
}
 
public static SessionFactory getSessionFactory()
{
if(sessionFactory.isClosed())
createFactory();
return sessionFactory;
}
 
51,7 → 59,7
// if(!examples.isOpen())
// examples = sessionFactory.openSession();
// return examples;
return sessionFactory.getCurrentSession();
return getSessionFactory().getCurrentSession();
}
 
public static void main(String [] args) throws SQLException
/impl/src/java/jomm/dao/impl/AbstractDao.java
5,12 → 5,14
import jomm.dao.IDomainObjectDao;
import jomm.dao.utils.HibernateUtils;
import org.hibernate.*;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import static org.hibernate.criterion.Restrictions.eq;
import pt.estgp.estgweb.domain.DomainObject;
import pt.estgp.estgweb.domain.DomainSerializableObject;
import pt.estgp.estgweb.domain.Teacher;
 
import java.io.Serializable;
import java.sql.SQLException;
324,6 → 326,20
}
 
/**
*
* @param o
* @return
*/
public CLAZZ narrow(CLAZZ o)
{
if (o instanceof HibernateProxy)
{
return (CLAZZ) ((HibernateProxy)o).getHibernateLazyInitializer().getImplementation();
}
return o;
}
 
/**
* Used by the base DAO classes but here for your modification Load object
* matching the given key and return it.
*
492,8 → 508,8
}
}
 
 
 
/**
* Remove this instance from the system cache.
* <p/>
682,7 → 698,7
/**
* Refresh a collection of objects.
*
* @param objs Objects to delete
* @param objs Objects to refreh
*/
public final void refresh(Collection<CLAZZ> objs)
{
699,7 → 715,26
throw new DaoException(e);
}
}
/**
* Refresh a collection of objects.
*
* @param obj Object to refreh
*/
public final void refresh(CLAZZ obj)
{
try
{
Session session = getCurrentSession();
 
session.refresh(obj);
 
}
catch (HibernateException e)
{
throw new DaoException(e);
}
}
 
/**
* Refresh a collection of objects.
*
/impl/src/java/pt/estgp/estgweb/utils/DatesUtils.java
49,6 → 49,20
return getFormatedImportYear(firstYearStr,secondYearStr,SIGES_importFinalFormat);
}
 
public static String getSemestre()
{
MyCalendar mc = new MyCalendar();
int month = mc.getMonth();
if((month > 8 && month <=12) || (month >= 1 && month <=2))
{
return "S1";
}
else
{
return "S2";
}
}
 
public static String getImportYearIntranet()
{
MyCalendar mc = new MyCalendar();
72,6 → 86,18
return getFormatedImportYear(firstYearStr,secondYearStr,SIGES_importFinalFormatIntranet);
}
 
public static String getImportYearIntranet(String importYear)
{
String decadeStr = importYear.substring(0,2);
if(importYear.substring(4,6).equals("00"))
{
String decade = importYear.substring(0,2);
int nextdecade= Integer.parseInt(decade)+1;
decadeStr = "" + nextdecade;
}
return getFormatedImportYear(importYear.substring(0,4),decadeStr+importYear.substring(4,6),SIGES_importFinalFormatIntranet);
}
 
public static String getFormatedImportYear(String firstYearStr, String secondYearStr, MessageFormat finalFormat)
{
String[] years = {firstYearStr,secondYearStr};
/impl/src/java/pt/estgp/estgweb/utils/CourseViewComparator.java
New file
0,0 → 1,39
package pt.estgp.estgweb.utils;
 
import jomm.utils.StringComparator;
import pt.estgp.estgweb.domain.views.CourseView;
 
/**
*
* @author User
*/
public class CourseViewComparator implements java.util.Comparator<CourseView>
{
 
 
private static CourseViewComparator instance = null;
 
public static CourseViewComparator getInstance()
{
if(instance == null)
{
instance = new CourseViewComparator();
}
return instance;
}
 
/** Creates a new instance of LongComparator */
private CourseViewComparator() {
}
 
 
public int compare(CourseView s1, CourseView s2)
{
int compareResult = s2.getName().compareTo(s1.getName());
if(compareResult > 0)
return -1;
else if(compareResult < 0)
return 1;
return 0;
}
}
/impl/src/java/pt/estgp/estgweb/Globals.java
33,6 → 33,8
public static final int SEARCH_BEST_FRAGMENTS_MAX_FRAGMENTS = ConfigProperties.getIntProperty("search.best.fragments.max.fragments");
 
public static final String ALL_ROLE = ConfigProperties.getProperty("user.super");
public static final String SERVICES_PROGRAMS_ROLE = ConfigProperties.getProperty("user.servicesPrograms");
 
public static final String ACTUAL_RELATIVE_PATH = "ACTUAL_RELATIVE_PATH";
public static final String ADMIN_ROLE = ConfigProperties.getProperty("user.admin");
public static final String SUPER_USER_ROLE = ConfigProperties.getProperty("user.super");
142,7 → 144,9
public static final boolean SMS_COURSEUNIT_ANNOUNCEMENT = ConfigProperties.getBooleanProperty("sms.courseunit.announcement");
public static final boolean SMS_NEW_GRADES = ConfigProperties.getBooleanProperty("sms.new.grades");
public static final boolean EMAIL_NEW_GRADES = ConfigProperties.getBooleanProperty("email.new.grades");
public static final boolean EMAIL_SUMMARIES = ConfigProperties.getBooleanProperty("email.summaries");
public static final boolean EMAIL_COURSEUNIT_ANNOUNCEMENTS = ConfigProperties.getBooleanProperty("email.courseunit.announcements");
public static final boolean EMAIL_COURSEUNIT_BLOGS = ConfigProperties.getBooleanProperty("email.courseunit.blogs");
 
public static final boolean SMS_COURSEUNIT_ANNOUNCEMENT_ONLY_PROFS = ConfigProperties.getBooleanProperty("sms.courseunit.announcement.only.profs");
 
182,10 → 186,22
public static final String EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_PT = "courseUnitAnnouncement_pt.txt";
public static final String EMAIL_COURSEUNIT_ANNOUNCEMENT_TEMPLATE_EN = "courseUnitAnnouncement_en.txt";
 
public static final String EMAIL_COURSEUNIT_BLOGPOST_SUBJECT_PT = ConfigProperties.getProperty("email.courseunit.blogpost.subject.pt");
public static final String EMAIL_COURSEUNIT_BLOGPOST_SUBJECT_EN = ConfigProperties.getProperty("email.courseunit.blogpost.subject.en");
public static final String EMAIL_COURSEUNIT_BLOGPOST_TEMPLATE_PT = "courseUnitBlogPost_pt.txt";
public static final String EMAIL_COURSEUNIT_BLOGPOST_TEMPLATE_EN = "courseUnitBlogPost_en.txt";
 
public static final String EMAIL_NEW_GRADES_SUBJECT_PT = ConfigProperties.getProperty("email.new.grades.subject.pt");
public static final String EMAIL_NEW_GRADES_SUBJECT_EN = ConfigProperties.getProperty("email.new.grades.subject.en");
 
public static final String EMAIL_SUMMARY_SUBJECT_PT = ConfigProperties.getProperty("email.summary.subject.pt");
public static final String EMAIL_SUMMARY_SUBJECT_EN = ConfigProperties.getProperty("email.summary.subject.en");
 
public static final String EMAIL_NEW_GRADES_TEMPLATE_PT = "newGrades_pt.txt";
public static final String EMAIL_NEW_GRADES_TEMPLATE_EN = "newGrades_en.txt";
 
public static final String EMAIL_SUMMARY_TEMPLATE_PT = "summary_pt.txt";
public static final String EMAIL_SUMMARY_TEMPLATE_EN = "summary_en.txt";
 
public static final String EMAIL_GRADE_UNIT_TEMPLATE = "GradeUnit.txt";
}
/impl/src/java/pt/estgp/estgweb/services/courses/CoursesCommonServices.java
8,6 → 8,8
import pt.estgp.estgweb.services.courseunits.CourseUnitsCommonServices;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.DatesUtils;
import org.apache.log4j.Logger;
 
import java.util.*;
96,21 → 98,36
coordinatorCourses = new HashSet<Course>();
if(directorCourses == null)
directorCourses = new HashSet<Course>();
coordinatorCourses = new HashSet<Course>(coordinatorCourses);
directorCourses = new HashSet<Course>(directorCourses);
coordinatorCourses.removeAll(directorCourses);
directorCourses.addAll(coordinatorCourses);
for(Course course: directorCourses)
{
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadMissingObjectivesOrProgramGivenCourse(course.getId());
for(CourseUnit c: courseUnits)
int missing = DaoFactory.getCourseUnitDaoImpl().countMissingProgramGivenCourse(course.getId());
if(missing > 0)
{
DefaultToDo defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "course.courseunit.program.objectives.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
DefaultToDo defaultToDo = new DefaultToDo(course.getName(),null,null, "course.courseunit.program.objectives.todo",""+missing,"/user/startLoadDirectedCoordinatedCoursesFromHome.do#" + course.getId());
todos.add(defaultToDo);
}
}
}
}
if(userSession.getUser().hasRole(Globals.SERVICES_PROGRAMS_ROLE))
{
List<Course> courses = DaoFactory.getCourseDaoImpl().findAll(DatesUtils.getImportYear());
for(Course course: courses)
{
int missing = DaoFactory.getCourseUnitDaoImpl().countMissingProgramGivenCourse(course.getId());
if(missing > 0)
{
DefaultToDo defaultToDo = new DefaultToDo(course.getName(),null,null, "course.courseunit.program.objectives.todo",""+missing,"/user/startLoadCoursesProgramsFromHome.do#" + course.getId());
todos.add(defaultToDo);
}
}
}/*This method is invoked from object creation*/
return todos;
}/*This method is invoked from object creation*/
}
 
public void adviseNew(DomainObject object)
{
/impl/src/java/pt/estgp/estgweb/services/courses/CoursesService.java
68,6 → 68,17
return null;
}
 
public List<String> loadImportYears(UserSession userSession) throws ServiceException
{
List<String> importYears = DaoFactory.getCourseDaoImpl().loadImportYears();
List<String> imStrings = new ArrayList<String>();
for(String importYear: importYears)
{
imStrings.add(importYear);
}
return imStrings;
}
 
public CourseView loadCourseByCode(String code, boolean initUnits) throws ServiceException
{
Course c = DaoFactory.getCourseDaoImpl().findCourseByCode(code);
107,7 → 118,7
String extension = FilesUtils.getExtension(name);
if(c.getStudiesPlan() == null)
{
String identifier = repositoryService.storeRepositoryFile(stream, contentType, extension, size, name, "course.studies.plan" + c.getName(), ResourceAccessControlEnum.publicDomain,userSession);
String identifier = repositoryService.storeRepositoryFile(stream, contentType, extension, size, name, "course.studies.plan " + c.getName(), ResourceAccessControlEnum.publicDomain,userSession);
c.setStudiesPlan(identifier);
}
else
/impl/src/java/pt/estgp/estgweb/services/courseunits/CourseUnitsCommonServices.java
88,30 → 88,30
 
if(userSession.getUser() != null && userSession.getUser() instanceof Teacher)
{
HashMap<Long,Long> doneProgramCodes = new HashMap<Long,Long>();
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadMissingObjectives(userSession.getUser().getId());
// HashMap<Long,Long> doneProgramCodes = new HashMap<Long,Long>();
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadMissingObjectivesOrPrograms(userSession.getUser().getId());
for(CourseUnit c: courseUnits)
{
DefaultToDo defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "courseunit.objectives.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
DefaultToDo defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "courseunit.program.objectives.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
todos.add(defaultToDo);
if(c.getProgramStreamId() == null || c.getProgramStreamId().length() == 0)
{
doneProgramCodes.put(c.getId(),c.getId());
defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "courseunit.program.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
todos.add(defaultToDo);
}
// if(c.getProgramStreamId() == null || c.getProgramStreamId().length() == 0)
// {
//// doneProgramCodes.put(c.getId(),c.getId());
// defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "courseunit.program.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
// todos.add(defaultToDo);
// }
}
 
courseUnits = DaoFactory.getCourseUnitDaoImpl().loadMissingPrograms(userSession.getUser().getId());
for(CourseUnit c: courseUnits)
{
if(doneProgramCodes.get(c.getId()) == null) //is not in missing objectives units
{
doneProgramCodes.put(c.getId(),c.getId());
DefaultToDo defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "courseunit.program.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
todos.add(defaultToDo);
}
}
// courseUnits = DaoFactory.getCourseUnitDaoImpl().loadMissingPrograms(userSession.getUser().getId());
// for(CourseUnit c: courseUnits)
// {
// if(doneProgramCodes.get(c.getId()) == null) //is not in missing objectives units
// {
// doneProgramCodes.put(c.getId(),c.getId());
// DefaultToDo defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "courseunit.program.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
// todos.add(defaultToDo);
// }
// }
 
List<CourseUnitQuestion> courseUnitQuestions = DaoFactory.getCourseUnitQuestionDaoImpl().loadMissingQuestions(userSession.getUser().getId());
for(CourseUnitQuestion c: courseUnitQuestions)
/impl/src/java/pt/estgp/estgweb/services/courseunits/DirectedCoordinatedCourses.java
New file
0,0 → 1,82
package pt.estgp.estgweb.services.courseunits;
 
import jomm.utils.AutoFillArrayList;
import pt.estgp.estgweb.domain.views.CourseView;
 
import java.util.List;
 
/**
* @author Jorge Machado
* @date 24/Out/2008
* @see pt.estgp.estgweb.services.courseunits
*/
public class DirectedCoordinatedCourses
{
private List<CourseView> directedCourses;
private List<CourseView> coordinatedCourses;
private List<CourseView> merge;
private int updated;
private int missing;
 
public DirectedCoordinatedCourses()
{
System.out.println("");
}
 
public List<CourseView> getDirectedCourses()
{
return directedCourses;
}
 
public void setDirectedCourses(List<CourseView> directedCourses)
{
this.directedCourses = directedCourses;
}
 
public List<CourseView> getCoordinatedCourses()
{
return coordinatedCourses;
}
 
public void setCoordinatedCourses(List<CourseView> coordinatedCourses)
{
this.coordinatedCourses = coordinatedCourses;
}
 
public int getUpdated()
{
return updated;
}
 
public void setUpdated(int updated)
{
this.updated = updated;
}
 
 
public int getMissing()
{
return missing;
}
 
public void setMissing(int missing)
{
this.missing = missing;
}
 
 
public void setMerge(List<CourseView> merge)
{
this.merge = merge;
}
 
public List<CourseView> getMerge()
{
if(merge == null)
merge = new AutoFillArrayList<CourseView>(CourseView.class);
return merge;
}
 
 
 
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/DirectedCoordinatedUnitsService.java
New file
0,0 → 1,156
package pt.estgp.estgweb.services.courseunits;
 
import pt.estgp.estgweb.domain.Course;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.CourseView;
import pt.estgp.estgweb.utils.CourseViewComparator;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
 
/**
* @author Jorge Machado
* @date 2/Jun/2008
* @see pt.estgp.estgweb.services.courseunits
*/
public class DirectedCoordinatedUnitsService implements IService
{
public DirectedCoordinatedCourses loadForUserSession(String importYear, UserSession userSession)
{
return loadForUser(userSession.getUser().getId(),importYear, userSession);
}
 
public DirectedCoordinatedCourses loadForUser(long teacherId, String importYear, UserSession userSession)
{
if(importYear == null)
importYear = DatesUtils.getImportYear();
List<Course> directorCourses = DaoFactory.getCourseDaoImpl().loadDirectorCourses(teacherId,importYear);
List<Course> coordinatorCourses = DaoFactory.getCourseDaoImpl().loadCoordinatedCourses(teacherId,importYear);
 
HashMap<Course, Boolean> map = new HashMap<Course, Boolean>();
 
DirectedCoordinatedCourses directedCoordinatedCourses = new DirectedCoordinatedCourses();
directedCoordinatedCourses.setCoordinatedCourses(new ArrayList<CourseView>());
directedCoordinatedCourses.setDirectedCourses(new ArrayList<CourseView>());
directedCoordinatedCourses.setMerge(new ArrayList<CourseView>());
for (Course c : directorCourses)
{
CourseView cV = new CourseView(c, true);
directedCoordinatedCourses.getDirectedCourses().add(cV);
if (map.get(c) == null)
{
directedCoordinatedCourses.getMerge().add(cV);
map.put(c, true);
}
}
for (Course c : coordinatorCourses)
{
CourseView cV = new CourseView(c, true);
directedCoordinatedCourses.getCoordinatedCourses().add(cV);
if (map.get(c) == null)
{
directedCoordinatedCourses.getMerge().add(cV);
map.put(c, true);
}
}
java.util.Collections.sort(directedCoordinatedCourses.getMerge(), CourseViewComparator.getInstance());
fill(directedCoordinatedCourses.getMerge());
return directedCoordinatedCourses;
}
 
public DirectedCoordinatedCourses loadForServices(String importYear, UserSession userSession)
{
if(importYear == null)
importYear = DatesUtils.getImportYear();
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByName(importYear);
 
List<CourseView> courseViews = new ArrayList<CourseView>();
for(Course c : courses)
{
CourseView cV = new CourseView(c, true);
courseViews.add(cV);
}
fill(courseViews);
DirectedCoordinatedCourses directedCoordinatedCourses = new DirectedCoordinatedCourses();
directedCoordinatedCourses.setMerge(courseViews);
return directedCoordinatedCourses;
}
 
private void fill(List<CourseView> courseViews)
{
for (CourseView cV : courseViews)
{
cV.setCourseUnitsWithNoProgramS1(new ArrayList<CourseUnitView>());
cV.setCourseUnitsWithNoProgramS2(new ArrayList<CourseUnitView>());
cV.setCourseUnitsWithProgramCheckedS1(new ArrayList<CourseUnitView>());
cV.setCourseUnitsWithProgramCheckedS2(new ArrayList<CourseUnitView>());
cV.setCourseUnitsWithProgramNotCheckedS1(new ArrayList<CourseUnitView>());
cV.setCourseUnitsWithProgramNotCheckedS2(new ArrayList<CourseUnitView>());
for (CourseUnitView cUV : cV.getCourseUnits())
{
if (cUV.getProgramStreamId() == null)
if (cUV.getSemestre().equals("S1"))
cV.getCourseUnitsWithNoProgramS1().add(cUV);
else
cV.getCourseUnitsWithNoProgramS2().add(cUV);
else if (cUV.isValidProgram())
if (cUV.getSemestre().equals("S1"))
cV.getCourseUnitsWithProgramCheckedS1().add(cUV);
else
cV.getCourseUnitsWithProgramCheckedS2().add(cUV);
else if (cUV.getSemestre().equals("S1"))
cV.getCourseUnitsWithProgramNotCheckedS1().add(cUV);
else
cV.getCourseUnitsWithProgramNotCheckedS2().add(cUV);
}
}
}
 
public DirectedCoordinatedCourses update(DirectedCoordinatedCourses directedCoordinatedCourses, UserSession userSession)
{
int counter = 0;
for(CourseView courseView: directedCoordinatedCourses.getMerge())
{
if(courseView.getId()>0)
{
Course c = DaoFactory.getCourseDaoImpl().load(courseView.getId());
if(userSession.getUser().getId() == c.getCoordinator().getId())
{
counter+=updateList(courseView.getCourseUnitsWithProgramCheckedS1());
counter+=updateList(courseView.getCourseUnitsWithProgramCheckedS2());
counter+=updateList(courseView.getCourseUnitsWithProgramNotCheckedS1());
counter+=updateList(courseView.getCourseUnitsWithProgramNotCheckedS2());
}
}
}
directedCoordinatedCourses.setUpdated(counter);
return directedCoordinatedCourses;
}
 
private int updateList(List<CourseUnitView> views)
{
int counter = 0;
for(CourseUnitView courseUnitView: views)
{
if(courseUnitView != null && courseUnitView.getId()>0)
{
if(courseUnitView.getProgramStreamId() != null && courseUnitView.getProgramStreamId().length() > 0)
{
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().load(courseUnitView.getId());
if(courseUnit.isValidProgram() != courseUnitView.isValidProgram())
{
courseUnit.setValidProgram(courseUnitView.isValidProgram());
counter++;
}
}
}
}
return counter;
}
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitXML.java
New file
0,0 → 1,216
package pt.estgp.estgweb.services.courseunits;
 
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.utils.Dom4jUtil;
import pt.estgp.estgweb.web.utils.DatesUtils;
 
import java.io.IOException;
import java.io.File;
 
/**
* @author Jorge Machado
* @date 23/Out/2008
* @see pt.estgp.estgweb.services.data
*/
public class CreateCourseUnitXML
{
private static final Logger logger = Logger.getLogger(CreateCourseUnitXML.class);
 
public void run(String toFile, CourseUnit courseUnit, UserSession userSession)
{
Document dom = run(courseUnit,userSession);
try
{
new File(toFile).getParentFile().mkdirs();
Dom4jUtil.write(dom,toFile);
}
catch (IOException e)
{
logger.error(e,e);
}
}
 
public Document run(CourseUnit courseUnit, UserSession userSession)
{
org.dom4j.Document dom = DocumentFactory.getInstance().createDocument();
Element rootElement = DocumentFactory.getInstance().createElement("courseUnit");
dom.setRootElement(rootElement);
rootElement.addAttribute("id", "" + courseUnit.getId());
rootElement.addAttribute("importYear", "" + courseUnit.getImportYear());
rootElement.addAttribute("institutionCode", "" + courseUnit.getInstitutionCode());
 
Element saveDate = DocumentFactory.getInstance().createElement("saveDate");
saveDate.setText(""+ DatesUtils.getStringFromDateForFilename(courseUnit.getSaveDate()));
 
Element updateDate = DocumentFactory.getInstance().createElement("updateDate");
updateDate.setText(""+ DatesUtils.getStringFromDateForFilename(courseUnit.getUpdateDate()));
 
Element name = DocumentFactory.getInstance().createElement("name");
name.setText("" + courseUnit.getName());
 
Element courseName = DocumentFactory.getInstance().createElement("courseName");
name.setText("" + courseUnit.getCourseName());
rootElement.add(saveDate);
rootElement.add(name);
rootElement.add(courseName);
 
if(courseUnit.getObjectives() != null)
{
Element objectives = DocumentFactory.getInstance().createElement("objectives");
objectives.setText(courseUnit.getObjectives());
rootElement.add(objectives);
}
 
if(courseUnit.getSummaries() != null)
{
Element summaries = DocumentFactory.getInstance().createElement("summaries");
summaries.addAttribute("number",""+courseUnit.getSummaries().size());
rootElement.add(summaries);
for(CourseUnitSummary a: courseUnit.getSummaries())
{
Element summary = DocumentFactory.getInstance().createElement("summary");
summaries.add(summary);
summary.addAttribute("id",""+a.getId());
summary.addAttribute("number",""+a.getNumeroAula());
summary.addAttribute("dateAula",""+a.getDataAula());
summary.addAttribute("studentsPresences",""+a.getAlunosPresentes());
if(a.getDescricao() != null)
{
Element text = DocumentFactory.getInstance().createElement("description");
text.setText(a.getDescricao());
summary.add(text);
}
if(a.getTitulo() != null)
{
Element titulo = DocumentFactory.getInstance().createElement("title");
titulo.setText(a.getTitulo());
summary.add(titulo);
}
}
}
 
if(courseUnit.getTeachers() != null)
{
Element teachers = DocumentFactory.getInstance().createElement("teachers");
teachers.addAttribute("number",""+courseUnit.getTeachers().size());
rootElement.add(teachers);
for(Teacher s: courseUnit.getTeachers())
{
Element teacher = DocumentFactory.getInstance().createElement("teacher");
teacher.addAttribute("code",""+s.getSigesCode());
teacher.addAttribute("name",""+s.getName());
teacher.addAttribute("email",""+s.getEmail());
if( userSession.getUser().isSuperuserOrAdmin() || userSession.getUser() instanceof Teacher)
{
teacher.addAttribute("oemail",""+s.getOutEmail());
teacher.addAttribute("phone",""+s.getPhonenumber());
teacher.addAttribute("gmail",""+s.getGmail());
teacher.addAttribute("msn",""+s.getMsn());
teacher.addAttribute("skype",""+s.getSkype());
}
teachers.add(teacher);
}
}
 
if( userSession.getUser().isSuperuserOrAdmin() || userSession.getUser() instanceof Teacher)
{
if(courseUnit.getStudents() != null)
{
Element students = DocumentFactory.getInstance().createElement("students");
students.addAttribute("number",""+courseUnit.getStudents().size());
rootElement.add(students);
for(Student s: courseUnit.getStudents())
{
Element student = DocumentFactory.getInstance().createElement("student");
student.addAttribute("code",""+s.getSigesCode());
student.addAttribute("name",""+s.getName());
student.addAttribute("email",""+s.getEmail());
student.addAttribute("oemail",""+s.getOutEmail());
student.addAttribute("phone",""+s.getPhonenumber());
student.addAttribute("gmail",""+s.getGmail());
student.addAttribute("msn",""+s.getMsn());
student.addAttribute("skype",""+s.getSkype());
students.add(student);
}
}
}
if( userSession.getUser().isSuperuserOrAdmin() || userSession.getUser() instanceof Teacher)
{
if(courseUnit.getAnnouncements() != null)
{
Element announcements = DocumentFactory.getInstance().createElement("announcements");
announcements.addAttribute("number",""+courseUnit.getAnnouncements().size());
rootElement.add(announcements);
for(Announcement a: courseUnit.getAnnouncements())
{
Element announcement = DocumentFactory.getInstance().createElement("announcement");
announcements.add(announcement);
announcement.addAttribute("id",""+a.getId());
announcement.addAttribute("title",""+a.getTitle());
announcement.addAttribute("date",""+a.getSaveDate());
if(a.getText() != null)
{
Element text = DocumentFactory.getInstance().createElement("text");
text.setText(a.getText());
announcement.add(text);
}
if(a.getUrl() != null)
{
Element url = DocumentFactory.getInstance().createElement("url");
url.setText(a.getUrl());
announcement.add(url);
}
}
}
}
 
if( userSession.getUser().isSuperuserOrAdmin() || userSession.getUser() instanceof Teacher)
{
if(courseUnit.getBlogs() != null)
{
Element blogs = DocumentFactory.getInstance().createElement("blogs");
blogs.addAttribute("number",""+courseUnit.getBlogs().size());
rootElement.add(blogs);
for(Blog b: courseUnit.getBlogs())
{
Element blog = DocumentFactory.getInstance().createElement("blog");
blogs.add(blog);
blog.addAttribute("id",""+b.getId());
blog.addAttribute("title",""+b.getTitle());
if(b.getDescription() != null)
{
Element desc = DocumentFactory.getInstance().createElement("description");
desc.setText(b.getDescription());
blog.add(desc);
}
Element posts = DocumentFactory.getInstance().createElement("posts");
posts.addAttribute("number",""+b.getPosts().size());
blog.add(posts);
if(b.getPosts() != null)
{
for(BlogPost bp: b.getPosts())
{
Element post = DocumentFactory.getInstance().createElement("post");
posts.add(post);
post.addAttribute("id",""+bp.getId());
post.addAttribute("saveDate",""+bp.getId());
blog.addAttribute("title",""+bp.getTitle());
blog.addAttribute("from",""+bp.getOwner().getName());
if(bp.getText() != null)
{
Element descP = DocumentFactory.getInstance().createElement("description");
descP.setText(bp.getText());
post.add(descP);
}
}
}
}
}
}
return dom;
}
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitWorksBackupService.java
31,10 → 31,9
*/
/**
* @author Jorge Machado
*
*
* Created at 17/Out/2003 , 23:45:24
*
* <p/>
* <p/>
* Created at 17/Out/2003 , 23:45:24
*/
public class CreateCourseUnitWorksBackupService implements IService
{
45,96 → 44,149
 
public String createSystemActualYearBackup(String importYear, UserSession userSession) throws ServiceException
{
if(importYear == null || importYear.trim().length() == 0)
return createSystemImportYearBackup(DatesUtils.getImportYear(),userSession);
}
 
public String createSystemImportYearBackup(String importYear, UserSession userSession) throws ServiceException
{
if (importYear == null || importYear.trim().length() == 0)
importYear = DatesUtils.getImportYear();
String importYearIntranet = DatesUtils.getImportYearIntranet();
String tmpName = BytesUtils.generateHexKey();
String tmpName = BytesUtils.generateHexKey();
String tmpDir = Globals.TMP_DIR + "/" + tmpName;
new File(tmpDir).mkdirs();
List<Course> courses = DaoFactory.getCourseDaoImpl().findAll(importYear);
try
{
for(Course c: courses)
for (Course c : courses)
{
String couseDirPath = tmpDir + "/" + StringsUtils.normalizeResourceName(c.getName()) + '.' + c.getCode();
try
createCourseBackup(tmpDir,c,userSession);
}
FilesUtils.zipFolder(tmpDir, tmpDir + ".zip");
FilesUtils.delete(tmpDir);
return tmpName + ".zip";
}
catch (IOException e)
{
logger.error(e, e);
}
return null;
}
 
public String createSystemBackup(String importYear, UserSession userSession) throws ServiceException
{
String tmpName = BytesUtils.generateHexKey();
String tmpDir = Globals.TMP_DIR + "/" + tmpName;
new File(tmpDir).mkdirs();
List<Course> courses = DaoFactory.getCourseDaoImpl().findAll();
try
{
for (Course c : courses)
{
createCourseBackup(tmpDir,c,userSession);
}
FilesUtils.zipFolder(tmpDir, tmpDir + ".zip");
FilesUtils.delete(tmpDir);
return tmpName + ".zip";
}
catch (IOException e)
{
logger.error(e, e);
}
return null;
}
 
private void createCourseBackup(String tmpDir, Course c, UserSession userSession)
{
String couseDirPath = tmpDir + "/" + StringsUtils.normalizeResourceName(c.getName()) + '.' + c.getCode();
try
{
String importYearIntranet = DatesUtils.getImportYearIntranet(c.getImportYear());
String courseImportYearPath = couseDirPath + "/" + importYearIntranet;
File courseImportYearDir = new File(courseImportYearPath);
courseImportYearDir.mkdirs();
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadByCourse(c.getId(), c.getImportYear());
for (CourseUnit courseUnit : courseUnits)
{
String semestre;
if (courseUnit.getSemestre().equals("S1"))
{
String courseImportYearPath = couseDirPath + "/" + importYearIntranet;
File courseImportYearDir = new File(courseImportYearPath);
courseImportYearDir.mkdirs();
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadByCourse(c.getId(),importYear);
for(CourseUnit courseUnit: courseUnits)
semestre = Globals.INTRANET_SEMESTRE_S1;
}
else
{
semestre = Globals.INTRANET_SEMESTRE_S2;
}
 
String normalizedName = StringsUtils.normalizeResourceName(courseUnit.getName());
String unitPath = courseImportYearPath + "/" + semestre + "/" + normalizedName;
copyProgram(courseUnit,unitPath,userSession);
new CreateCourseUnitXML().run(unitPath+"/desc.xml",courseUnit,userSession);
for (CourseUnitAssignement assignement : courseUnit.getAssignements())
{
String assignementDir = unitPath + "/assignement" + assignement.getId();
createAssignementCopy(assignement, assignementDir, userSession);
if (!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
{
String semestre;
if(courseUnit.getSemestre().equals("S1"))
for (CourseUnitDeliverable deliverable : assignement.getDeliverables())
{
semestre = Globals.INTRANET_SEMESTRE_S1;
copyDeliverableVersions(deliverable, assignementDir, userSession);
}
else
{
semestre = Globals.INTRANET_SEMESTRE_S2;
}
String normalizedName = StringsUtils.normalizeResourceName(courseUnit.getName());
String unitPath = courseImportYearPath + "/" + semestre + "/" + normalizedName;
 
for(CourseUnitAssignement assignement : courseUnit.getAssignements())
{
String assignementDir = unitPath + "/assignement" + assignement.getId();
createAssignementCopy(assignement,assignementDir,userSession);
if(!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
{
for(CourseUnitDeliverable deliverable: assignement.getDeliverables())
{
copyDeliverableVersions(deliverable,assignementDir,userSession);
}
}
}
}
}
catch (IOException e)
{
logger.error(e,e);
}
}
FilesUtils.zipFolder(tmpDir,tmpDir + ".zip");
FilesUtils.delete(tmpDir);
return tmpName + ".zip";
}
catch (IOException e)
{
logger.error(e,e);
logger.error(e, e);
}
return null;
}
 
/**
* In case of student create a backup with student deliverables in actual year subscribed units, in case of teacher create a backup of all deliverables in actual year teached units
* In case of student create a backup with student deliverables in actual year subscribed units, in case of teacher create a backup of all deliverables in actual year teached units
*
* @param userSession
* @return
* @throws ServiceException
*/
public String createImportYearBackup(String importYear, UserSession userSession) throws ServiceException
{
if(importYear == null)
importYear = DatesUtils.getImportYear();
if (userSession.getUser() instanceof Teacher)
return createLoginTeacherActualYearBackup(importYear,userSession);
else if (userSession.getUser() instanceof Student)
return createLoginStudentActualYearBackup(importYear,userSession);
return null;
}
/**
* In case of student create a backup with student deliverables in actual year subscribed units, in case of teacher create a backup of all deliverables in actual year teached units
*
* @param userSession
* @return
* @throws ServiceException
*/
public String createActualYearBackup(UserSession userSession) throws ServiceException
{
if(userSession.getUser() instanceof Teacher)
return createLoginTeacherActualYearBackup(userSession);
else if(userSession.getUser() instanceof Student)
return createLoginStudentActualYearBackup(userSession);
if (userSession.getUser() instanceof Teacher)
return createLoginTeacherActualYearBackup(DatesUtils.getImportYear(),userSession);
else if (userSession.getUser() instanceof Student)
return createLoginStudentActualYearBackup(DatesUtils.getImportYear(), userSession);
return null;
}
 
 
/**
* In case of student create a backup with student deliverables subscribed units, in case of teacher create a backup of all deliverables of teached units
*
* In case of student create a backup with student deliverables subscribed units, in case of teacher create a backup of all deliverables of teached units
* @param userSession
* @return
* @throws ServiceException
*/
public String createBackup(UserSession userSession) throws ServiceException
{
if(userSession.getUser() instanceof Teacher)
if (userSession.getUser() instanceof Teacher)
return createLoginTeacherBackup(userSession);
else if(userSession.getUser() instanceof Student)
else if (userSession.getUser() instanceof Student)
return createLoginStudentBackup(userSession);
return null;
}
142,97 → 194,93
public String createLoginStudentBackup(UserSession userSession) throws ServiceException
{
Student s = (Student) userSession.getUser();
return createStudentBackup(s,userSession);
return createStudentBackup(s, userSession);
}
 
 
public String createLoginTeacherBackup(UserSession userSession) throws ServiceException
{
Teacher t = (Teacher) userSession.getUser();
return createTeacherBackup(t,userSession);
return createTeacherBackup(t, userSession);
}
 
 
public String createLoginStudentActualYearBackup(UserSession userSession) throws ServiceException
public String createLoginStudentActualYearBackup(String importYear,UserSession userSession) throws ServiceException
{
Student s = (Student) userSession.getUser();
return createStudentActualYearBackup(s,userSession);
return createStudentActualYearBackup(s,importYear, userSession);
}
 
 
public String createLoginTeacherActualYearBackup(UserSession userSession) throws ServiceException
public String createLoginTeacherActualYearBackup(String importYear,UserSession userSession) throws ServiceException
{
Teacher t = (Teacher) userSession.getUser();
return createTeacherActualYearBackup(t,userSession);
return createTeacherActualYearBackup(t,importYear, userSession);
}
 
public String createStudentActualYearBackup(long studentId, UserSession userSession) throws ServiceException
public String createStudentActualYearBackup(long studentId,String importYear, UserSession userSession) throws ServiceException
{
Student s = DaoFactory.getStudentDaoImpl().get(studentId);
return createStudentActualYearBackup(s,userSession);
return createStudentActualYearBackup(s,importYear, userSession);
}
 
public String createTeacherActualYearBackup(long teacherId, UserSession userSession) throws ServiceException
public String createTeacherActualYearBackup(long teacherId,String importYear, UserSession userSession) throws ServiceException
{
Teacher t = DaoFactory.getTeacherDaoImpl().get(teacherId);
return createTeacherActualYearBackup(t,userSession);
return createTeacherActualYearBackup(t,importYear, userSession);
}
 
 
public String createStudentBackup(long studentId, UserSession userSession) throws ServiceException
{
Student s = DaoFactory.getStudentDaoImpl().get(studentId);
return createStudentBackup(s,userSession);
return createStudentBackup(s, userSession);
}
 
public String createTeacherBackup(long teacherId, UserSession userSession) throws ServiceException
{
Teacher t = DaoFactory.getTeacherDaoImpl().get(teacherId);
return createTeacherBackup(t,userSession);
return createTeacherBackup(t, userSession);
}
 
 
 
private String createStudentActualYearBackup(Student s, UserSession userSession) throws ServiceException
private String createStudentActualYearBackup(Student s,String importYear, UserSession userSession) throws ServiceException
{
List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadSubscribedImportYearUnits(s.getId(),DatesUtils.getImportYear());
if(units == null || units.size() == 0)
List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadSubscribedImportYearUnits(s.getId(), importYear);
if (units == null || units.size() == 0)
return null;
return createStudentBackup(units,s,userSession);
return createStudentBackup(units, s, userSession);
}
 
private String createTeacherActualYearBackup(Teacher t, UserSession userSession) throws ServiceException
private String createTeacherActualYearBackup(Teacher t,String importYear, UserSession userSession) throws ServiceException
{
List units = DaoFactory.getCourseUnitDaoImpl().loadTeachedImportYearUnits(t.getId(),DatesUtils.getImportYear());
if(units == null || units.size() == 0)
List units = DaoFactory.getCourseUnitDaoImpl().loadTeachedImportYearUnits(t.getId(), DatesUtils.getImportYear());
if (units == null || units.size() == 0)
return null;
return createTeacherBackup(units,t,userSession);
return createTeacherBackup(units, t, userSession);
}
 
 
 
private String createStudentBackup(Student s, UserSession userSession) throws ServiceException
{
List<CourseUnit> units = new ArrayList<CourseUnit>(s.getSubscribedUnits());
if(units == null || units.size() == 0)
if (units == null || units.size() == 0)
return null;
return createStudentBackup(units,s,userSession);
return createStudentBackup(units, s, userSession);
}
 
private String createTeacherBackup(Teacher t, UserSession userSession) throws ServiceException
{
List<CourseUnit> units = new ArrayList<CourseUnit>(t.getTeachedUnits());
if(units == null || units.size() == 0)
if (units == null || units.size() == 0)
return null;
return createTeacherBackup(units,t,userSession);
return createTeacherBackup(units, t, userSession);
}
 
 
 
 
private String createStudentBackup(List<CourseUnit> courseUnits, Student s, UserSession userSession) throws ServiceException
{
String tmpName = BytesUtils.generateHexKey();
String tmpName = BytesUtils.generateHexKey();
String tmpDir = Globals.TMP_DIR + "/" + tmpName;
new File(tmpDir).mkdirs();
 
240,12 → 288,12
{
try
{
for(CourseUnit courseUnit: courseUnits)
for (CourseUnit courseUnit : courseUnits)
{
String courseDirPath = tmpDir + "/" + StringsUtils.normalizeResourceName(courseUnit.getCourse().getName()) + '.' + courseUnit.getCourse().getCode();
String courseImportYearPath = courseDirPath + "/" + courseUnit.getImportYear();
String semestre;
if(courseUnit.getSemestre().equals("S1"))
if (courseUnit.getSemestre().equals("S1"))
{
semestre = Globals.INTRANET_SEMESTRE_S1;
}
255,37 → 303,39
}
String normalizedName = StringsUtils.normalizeResourceName(courseUnit.getName());
String unitPath = courseImportYearPath + "/" + semestre + "/" + normalizedName;
 
for(CourseUnitAssignement assignement : courseUnit.getAssignements())
copyProgram(courseUnit,unitPath,userSession);
new CreateCourseUnitXML().run(unitPath+"/desc.xml",courseUnit,userSession);
for (CourseUnitAssignement assignement : courseUnit.getAssignements())
{
String assignementDir = unitPath + "/assignement" + assignement.getId();
createAssignementCopy(assignement,assignementDir,userSession);
if(!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
createAssignementCopy(assignement, assignementDir, userSession);
if (!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
{
CourseUnitDeliverable deliverable = DaoFactory.getCourseUnitDeliverableDaoImpl().loadDeliverable(s.getId(),assignement.getId());
copyDeliverableVersions(deliverable,assignementDir,userSession);
CourseUnitDeliverable deliverable = DaoFactory.getCourseUnitDeliverableDaoImpl().loadDeliverable(s.getId(), assignement.getId());
if(deliverable != null)
copyDeliverableVersions(deliverable, assignementDir, userSession);
}
}
}
}
catch (IOException e)
{
logger.error(e,e);
logger.error(e, e);
}
FilesUtils.zipFolder(tmpDir,tmpDir + ".zip");
FilesUtils.zipFolder(tmpDir, tmpDir + ".zip");
FilesUtils.delete(tmpDir);
return tmpName + ".zip";
}
catch (IOException e)
{
logger.error(e,e);
logger.error(e, e);
}
return null;
}
 
private String createTeacherBackup(List<CourseUnit> courseUnits, Teacher t, UserSession userSession) throws ServiceException
{
String tmpName = BytesUtils.generateHexKey();
String tmpName = BytesUtils.generateHexKey();
String tmpDir = Globals.TMP_DIR + "/" + tmpName;
new File(tmpDir).mkdirs();
 
293,12 → 343,12
{
try
{
for(CourseUnit courseUnit: courseUnits)
for (CourseUnit courseUnit : courseUnits)
{
String courseDirPath = tmpDir + "/" + StringsUtils.normalizeResourceName(courseUnit.getCourse().getName()) + '.' + courseUnit.getCourse().getCode();
String courseImportYearPath = courseDirPath + "/" + courseUnit.getImportYear();
String semestre;
if(courseUnit.getSemestre().equals("S1"))
if (courseUnit.getSemestre().equals("S1"))
{
semestre = Globals.INTRANET_SEMESTRE_S1;
}
308,16 → 358,17
}
String normalizedName = StringsUtils.normalizeResourceName(courseUnit.getName());
String unitPath = courseImportYearPath + "/" + semestre + "/" + normalizedName;
 
for(CourseUnitAssignement assignement : courseUnit.getAssignements())
copyProgram(courseUnit,unitPath,userSession);
new CreateCourseUnitXML().run(unitPath+"/desc.xml",courseUnit,userSession);
for (CourseUnitAssignement assignement : courseUnit.getAssignements())
{
String assignementDir = unitPath + "/assignement" + assignement.getId();
createAssignementCopy(assignement,assignementDir,userSession);
if(!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
createAssignementCopy(assignement, assignementDir, userSession);
if (!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
{
for(CourseUnitDeliverable deliverable: assignement.getDeliverables())
for (CourseUnitDeliverable deliverable : assignement.getDeliverables())
{
copyDeliverableVersions(deliverable,assignementDir,userSession);
copyDeliverableVersions(deliverable, assignementDir, userSession);
}
}
}
325,36 → 376,64
}
catch (IOException e)
{
logger.error(e,e);
logger.error(e, e);
}
FilesUtils.zipFolder(tmpDir,tmpDir + ".zip");
FilesUtils.zipFolder(tmpDir, tmpDir + ".zip");
FilesUtils.delete(tmpDir);
return tmpName + ".zip";
}
catch (IOException e)
{
logger.error(e,e);
logger.error(e, e);
}
return null;
}
 
 
private void copyProgram(CourseUnit courseUnit, String toDir, UserSession userSession)
{
if (courseUnit.getProgramStreamId() != null && courseUnit.getProgramStreamId().length() > 0)
{
String deliverDir = toDir + "/program.zip";
new File(deliverDir).mkdirs();
List<IRepositoryFile> iRepositoryFiles = repositoryService.loadVersions(courseUnit.getProgramStreamId(), userSession);
for (IRepositoryFile iRepositoryFile : iRepositoryFiles)
{
try
{
if(iRepositoryFile.getInput() != null)
FilesUtils.copy(iRepositoryFile.getInput(), toDir + "/program." + FilesUtils.getExtension(iRepositoryFile.getName()));
else
logger.error("Repository File have no candidate file version, coming null inputStream:" + iRepositoryFile.getIdentifier());
 
}
catch (IOException e)
{
logger.error(e, e);
}
}
}
}
 
private void copyDeliverableVersions(CourseUnitDeliverable deliverable, String toDir, UserSession userSession)
{
if(deliverable.getDeliverableRepositoryStream() != null && deliverable.getDeliverableRepositoryStream().length() > 0)
if (deliverable.getDeliverableRepositoryStream() != null && deliverable.getDeliverableRepositoryStream().length() > 0)
{
String deliverDir = toDir + "/deliverable" + deliverable.getId() + "-" + deliverable.getStudent().getId() + "numero" + deliverable.getStudent().getSigesCode();
new File(deliverDir).mkdirs();
List<IRepositoryFile> iRepositoryFiles = repositoryService.loadVersions(deliverable.getDeliverableRepositoryStream(),userSession);
for(IRepositoryFile iRepositoryFile: iRepositoryFiles)
List<IRepositoryFile> iRepositoryFiles = repositoryService.loadVersions(deliverable.getDeliverableRepositoryStream(), userSession);
for (IRepositoryFile iRepositoryFile : iRepositoryFiles)
{
try
{
FilesUtils.copy(iRepositoryFile.getInput(),deliverDir + "/version" + getResourceFileName(iRepositoryFile.getName()));
if(iRepositoryFile.getInput() != null)
FilesUtils.copy(iRepositoryFile.getInput(), deliverDir + "/version" + getResourceFileName(iRepositoryFile.getName()));
else
logger.error("Repository File have no candidate file version, coming null inputStream:" + iRepositoryFile.getIdentifier());
}
catch (IOException e)
{
logger.error(e,e);
logger.error(e, e);
}
}
}
362,12 → 441,12
 
public String getResourceFileName(String resourceName)
{
String extension = FilesUtils.getExtension( resourceName);
if(extension != null)
String extension = FilesUtils.getExtension(resourceName);
if (extension != null)
{
resourceName = resourceName.substring(0,resourceName.length() - extension.length());
resourceName = resourceName.substring(0, resourceName.length() - extension.length());
}
if(extension == null)
if (extension == null)
extension = ".unknown";
return resourceName + extension;
}
379,17 → 458,20
FileWriter assignementDesc = new FileWriter(assignementDir + "/description.txt");
assignementDesc.write(fileContent);
assignementDesc.close();
if(assignement.getRepositoryStream() != null && assignement.getRepositoryStream().length() > 0)
if (assignement.getRepositoryStream() != null && assignement.getRepositoryStream().length() > 0)
{
IRepositoryFile iRepositoryFile = repositoryService.load(assignement.getRepositoryStream(),userSession);
FilesUtils.copy(iRepositoryFile.getInput(),assignementDir + "/" + getResourceFileName(iRepositoryFile.getName()));
IRepositoryFile iRepositoryFile = repositoryService.load(assignement.getRepositoryStream(), userSession);
 
if(iRepositoryFile.getInput() != null)
FilesUtils.copy(iRepositoryFile.getInput(), assignementDir + "/" + getResourceFileName(iRepositoryFile.getName()));
else
logger.error("Repository File have no candidate file version, coming null inputStream:" + iRepositoryFile.getIdentifier());
 
}
}
 
public String buildAssignementTemplate(CourseUnitAssignement assignement)
{
String assignementDir = StringsUtils.normalizeResourceName(assignement.getTitle()) + assignement.getId();
new File(assignementDir).mkdirs();
String[] args = new String[]
{
assignement.getCourseUnit().getName(),
398,16 → 480,15
assignement.getDescription()
};
String content = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_ASSIGNEMENT_PATH + "/Assignement.txt");
// Format the mail message
// Format the mail message
return MessageFormat.format(content, args);
}
 
 
 
public static void main(String[] args) throws ServiceException
{
AbstractDao.getCurrentSession().beginTransaction();
new CreateCourseUnitWorksBackupService().createSystemActualYearBackup(null,null);
new CreateCourseUnitWorksBackupService().createSystemActualYearBackup(null, null);
AbstractDao.getCurrentSession().getTransaction().commit();
}
 
/impl/src/java/pt/estgp/estgweb/services/courseunits/LoadCourseUnitService.java
41,7 → 41,7
{
CourseUnit c = DaoFactory.getCourseUnitDaoImpl().get(id);
 
 
if(c == null)
return null;
CourseUnitView cV = new CourseUnitView(c,initTeachers,initStudents,initBlog);
60,6 → 60,16
{
List<AnnouncementView> announcementViews = loadCourseUnitAnnouncements.run(id,userSession);
cV.setAnnouncements(announcementViews);
 
List<CourseUnitSummaryView> summaryViews = new ArrayList<CourseUnitSummaryView>();
if(c.getSummaries() != null)
{
for(CourseUnitSummary summary: c.getSummaries())
{
summaryViews.add(new CourseUnitSummaryView(summary));
}
}
cV.setSummaries(summaryViews);
}
return cV;
}
/impl/src/java/pt/estgp/estgweb/services/email/SendEmailService.java
3,10 → 3,10
import jomm.utils.TemplateUtils;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.web.utils.DatesUtils;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.domain.enums.LangEnum;
import pt.estgp.estgweb.domain.CourseUnitAnnouncement;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.utils.Email;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
158,7 → 158,40
return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
}
 
public Email getCourseUnitBlogPostEmail(BlogPost post, LangEnum langEnum, String from, List<User> users)
{
List<String> arguments = new ArrayList<String>();
arguments.add(((CourseUnitBlog)post.getBlog()).getCourseUnit().getName());
arguments.add(post.getTitle());
arguments.add(post.getText());
arguments.add(from);
 
String subjectTxt;
String template;
 
if(langEnum == LangEnum.PORTUGUESE)
{
template = Globals.EMAIL_COURSEUNIT_BLOGPOST_TEMPLATE_PT;
subjectTxt = Globals.EMAIL_COURSEUNIT_BLOGPOST_SUBJECT_PT;
}
else
{
template = Globals.EMAIL_COURSEUNIT_BLOGPOST_TEMPLATE_EN;
subjectTxt = Globals.EMAIL_COURSEUNIT_BLOGPOST_SUBJECT_EN;
}
 
List<String> recipients = new ArrayList<String>();
for(User u: users)
{
if(Email.validEmail(u.getEmail()))
recipients.add(u.getEmail());
}
 
String subject = java.text.MessageFormat.format(subjectTxt,new String[]{((CourseUnitBlog)post.getBlog()).getCourseUnit().getNormalizedName(),post.getTitle()});
return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
}
 
 
public Email getNewGradesEmail(List<String[]> grades, LangEnum langEnum, String studentEmail, String studentName)
{
List<String> arguments = new ArrayList<String>();
192,6 → 225,38
return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
}
 
public Email getSummaryEmail(List<String> emails, CourseUnitSummary cUS, CourseUnit c, LangEnum langEnum)
{
List<String> arguments = new ArrayList<String>();
 
String data = DatesUtils.getStringFromDate(cUS.getDataAula());
String subject;
String template;
 
if(langEnum == LangEnum.PORTUGUESE)
{
template = Globals.EMAIL_SUMMARY_TEMPLATE_PT;
subject = Globals.EMAIL_SUMMARY_SUBJECT_PT;
}
else
{
template = Globals.EMAIL_SUMMARY_TEMPLATE_EN;
subject = Globals.EMAIL_SUMMARY_SUBJECT_EN;
}
subject = TemplateUtils.formatMessageTemplate(subject,new String[]{c.getName()});
 
arguments.add(c.getName());
arguments.add(""+cUS.getNumeroAula());
arguments.add(data);
arguments.add(cUS.getTitulo());
arguments.add(cUS.getDescricao());
 
List<String> recipients = new ArrayList<String>();
for(String email:emails)
recipients.add(email);
return new Email(subject ,recipients, Globals.SYSTEM_EMAIL_BOX,template,arguments);
}
 
public boolean sendNewGrades(List<String[]> grades, LangEnum langEnum, String studentEmail, String studentName)
{
try
/impl/src/java/pt/estgp/estgweb/services/common/impl/DefaultToDo.java
19,6 → 19,7
private String catKey = null;
private String from;
private String to;
private String catArg0;
 
 
public DefaultToDo(String description, String url)
43,6 → 44,15
this.catKey = catKey;
this.url = url;
}
public DefaultToDo(String description, String to, String from, String catKey,String catArg0, String url)
{
this.description = description;
this.to = to;
this.from = from;
this.catKey = catKey;
this.url = url;
this.catArg0 = catArg0;
}
 
public String getDescription()
{
95,7 → 105,10
{
if(getFrom() == null || getFrom().length() == 0)
{
return "(" + getCatKey() + ")"+ "\t" + getDescription();
if(catArg0 == null)
return "(" + getCatKey() + ")"+ "\t" + getDescription();
else
return "(" + getCatKey() + ")"+ "\t" + getDescription();
}
else
{
119,4 → 132,14
{
this.to = to;
}
 
public String getCatArg0()
{
return catArg0;
}
 
public void setCatArg0(String catArg0)
{
this.catArg0 = catArg0;
}
}
/impl/src/java/pt/estgp/estgweb/services/common/IToDo.java
13,6 → 13,7
public String getUrl();
public String getDescription();
public String getCatKey();
public String getCatArg0();
public String getFrom();
public String getTo();
public String getLabel(HttpServletRequest request);
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportGradesService.java
135,11 → 135,13
}
catch (Throwable e)
{
logger.error(e, e);
 
AbstractDao.getCurrentSession().getTransaction().rollback();
logMessages.addMessage(new DefaultLogMessage("import.error", e.toString(), "see log for details", LogMessageTypeEnum.ERROR));
logger.error(e, e);
throw new ServiceException(e.toString(), e);
}
 
logMessages.addMessage(new DefaultLogMessage("import.teachers.terminating", LogMessageTypeEnum.INFO));
logger.info("terminating grades import");
return logMessages;
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportSumaries.java
New file
0,0 → 1,185
package pt.estgp.estgweb.services.sigesimports;
 
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.CourseUnitSummary;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.enums.LangEnum;
import pt.estgp.estgweb.services.email.EMAILJob;
import pt.estgp.estgweb.services.email.SendEmailService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.jobs.JobScheduleService;
import pt.estgp.estgweb.services.logresults.ILogMessages;
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.ipportalegre.siges.web.services.ArrayOfAula;
import pt.ipportalegre.siges.web.services.Aula;
import pt.ipportalegre.siges.web.services.SiGesWEB;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import javax.xml.namespace.QName;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
 
/**
* @author Jorge Machado
* @date 11/May/2008
* @time 12:51:32
* @see pt.estgp.estgweb
*/
public class ImportSumaries implements IService
{
 
private static final Logger logger = Logger.getLogger(ImportSumaries.class);
 
private static final int MAX_COMMIT = 100;
 
private List<Long> newSummaries = new ArrayList<Long>();
 
public ILogMessages run(String year) throws ServiceException
{
DefaultLogMessages logMessages = new DefaultLogMessages();
logMessages.addMessage(new DefaultLogMessage("import.summaries", LogMessageTypeEnum.INFO, "instituicao " + Globals.SIGES_INSTITUTION_CODE));
logger.info("starting summaries import");
try
{
AbstractDao.getCurrentSession().beginTransaction();
SiGesWEB service;
try
{
service = new SiGesWEB(new URL(Globals.SIGES_WEBSERVICE_WSDL), new QName(Globals.SIGES_WEBSERVICE_TARGET_NAMESPACE, "SiGesWEB"));
}
catch (MalformedURLException e)
{
logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(),"erro na configuracao do WEB Service", LogMessageTypeEnum.INFO));
logger.fatal(e, e);
return logMessages;
}
 
int i = 0;
List<Long> cUs = DaoFactory.getCourseUnitDaoImpl().loadIds(year,DatesUtils.getSemestre());
for(Long cId: cUs)
{
if (i++ > MAX_COMMIT)
{
i = 0;
AbstractDao.getCurrentSession().getTransaction().commit();
AbstractDao.getCurrentSession().beginTransaction();
}
CourseUnit c = DaoFactory.getCourseUnitDaoImpl().load(cId);
logMessages.addMessage(new DefaultLogMessage("import.info","","Importing Summaries to CourseUnit: " + c.getCode() + ": course: " + c.getCourse(), LogMessageTypeEnum.INFO));
logger.info("Importing Summaries to CourseUnit: " + c.getCode() + ": course: " + c.getCourse());
 
int tries = 3;
ArrayOfAula arrayOfAulas = null;
while(tries > 0)
{
try
{
arrayOfAulas = service.getSiGesWEBSoap().getAulas(Globals.SIGES_INSTITUTION_CODE, year,c.getCode(),DatesUtils.getSemestre());
break;
}
catch(Throwable t)
{
if(tries-- == 0)
{
logger.error("Giving up of courseUnit:" + cId + " ( " + c.getName() + " ) ",t);
break;
}
 
logger.error("WebService Fail, trying " + tries + " times sleeping a while");
Thread.sleep(5000);
}
}
if(arrayOfAulas != null && arrayOfAulas.getAula() != null)
{
HashMap<String, CourseUnitSummary> map = new HashMap<String, CourseUnitSummary>();
if(c.getSummaries() != null && c.getSummaries().size() > 0)
for(CourseUnitSummary s: c.getSummaries())
map.put(s.getCodigoAula() + ":" + s.getCodigoSumario(),s);
else
c.setSummaries(new HashSet<CourseUnitSummary>());
for(Aula aula: arrayOfAulas.getAula())
{
CourseUnitSummary s = map.get(aula.getSumNumeroAula() + ":" + aula.getCodigoSumario());
if(s == null)
{
s = DomainObjectFactory.createCourseUnitSummaryImpl();
s.setCourseUnit(c);
c.getSummaries().add(s);
DaoFactory.getCourseUnitSummaryDaoImpl().save(s);
newSummaries.add(s.getId());
}
s.setCodigoSumario(""+aula.getCodigoSumario().intValue());
s.setCodigoAula(""+aula.getSumNumeroAula().intValue());
s.setNumeroAula(aula.getSumNumeroAula().intValue());
s.setDataAula(aula.getData().toGregorianCalendar().getTime());
s.setTipoAula(aula.getSumTipoAula());
s.setCodigoSalaAula("" + aula.getAulaCodigoSalaAula().intValue());
s.setAlunosPresentes(aula.getSumNumeroAlunos().intValue());
s.setTitulo(aula.getSumTitulo());
s.setDescricao(aula.getSumDescricao());
s.setcEstado(""+aula.getSumCdEstado().intValue());
}
}
else
logger.error("Summaries come null in unit:" + c.getCode());
}
sendEmail(null);
AbstractDao.getCurrentSession().getTransaction().commit();
}
catch (Throwable e)
{
logger.error(e, e);
AbstractDao.getCurrentSession().getTransaction().rollback();
logMessages.addMessage(new DefaultLogMessage("import.error", e.toString(), "see log for details", LogMessageTypeEnum.ERROR));
throw new ServiceException(e.toString(), e);
}
 
logMessages.addMessage(new DefaultLogMessage("import.summaries.terminating", LogMessageTypeEnum.INFO));
logger.info("terminating summaries import");
return logMessages;
}
 
 
public static SendEmailService sendEmailService = new SendEmailService();
 
private void sendEmail(UserSession userSession)
{
if(Globals.EMAIL_SUMMARIES && newSummaries.size() > 0)
{
for(long id: newSummaries)
{
CourseUnitSummary summary = DaoFactory.getCourseUnitSummaryDaoImpl().load(id);
List<String> emails = DaoFactory.getCourseUnitSummaryDaoImpl().getStudentsEmails(summary.getId());
if(emails == null)
logger.warn("No students emails in unit: code:" + summary.getCourseUnit().getCode() + " " + summary.getCourseUnit().getName());
EMAILJob emailJob = new EMAILJob(sendEmailService.getSummaryEmail(emails,summary,summary.getCourseUnit(), LangEnum.PORTUGUESE));
JobScheduleService.getInstance().scheduleNow(emailJob,"New Summary EMAIL from: " + summary.getCourseUnit().getName() + " aula: " +summary.getNumeroAula() ,userSession);
}
}
}
 
/**
* Testar por aqui poi requer Super Role e assim e' autmatico
*
* @param args of main
* @throws pt.estgp.estgweb.services.expceptions.ServiceException on error
*/
public static void main(String[] args) throws ServiceException
{
new ImportSumaries().run(DatesUtils.getImportYear());
}
 
 
}
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportStudentsService.java
100,9 → 100,10
}
catch(Throwable e)
{
logger.error(e,e);
AbstractDao.getCurrentSession().getTransaction().rollback();
logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(), "see log for details", LogMessageTypeEnum.ERROR));
logger.error(e,e);
 
}
return logMessages;
}
149,7 → 150,9
while (iter.hasNext())
{
CourseUnit courseUnit = iter.next();
if(((StudentImpl)student).isLocalRemovedUnit(courseUnit))
//In case of a comming proxy
StudentImpl sImpl = (StudentImpl) DaoFactory.getStudentDaoImpl().narrow(student);
if(sImpl.isLocalRemovedUnit(courseUnit))
iter.remove();
}
 
185,7 → 188,6
 
public static void main(String[] args) throws ServiceException
{
 
new ImportStudentsService().run(DatesUtils.getImportYear());
}
}
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportTeachersService.java
1,28 → 1,35
package pt.estgp.estgweb.services.sigesimports;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.TeacherImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.common.CommonServicesManager;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.logresults.ILogMessages;
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
import pt.estgp.estgweb.services.logresults.ILogMessages;
import pt.estgp.estgweb.services.common.CommonServicesManager;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.*;
import pt.ipportalegre.siges.web.services.*;
import org.apache.log4j.Logger;
import pt.ipportalegre.siges.web.services.ArrayOfDecimal;
import pt.ipportalegre.siges.web.services.Disciplina;
import pt.ipportalegre.siges.web.services.Docente;
import pt.ipportalegre.siges.web.services.SiGesWEB;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.*;
import javax.xml.namespace.QName;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.MalformedURLException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
 
import jomm.dao.impl.AbstractDao;
 
import javax.xml.namespace.QName;
 
/**
* @author Jorge Machado
* @date 11/May/2008
48,7 → 55,7
}
catch (MalformedURLException e)
{
logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(),"erro na configuracao do WEB Service", LogMessageTypeEnum.INFO));
logMessages.addMessage(new DefaultLogMessage("import.error", e.toString(), "erro na configuracao do WEB Service", LogMessageTypeEnum.INFO));
logger.fatal(e, e);
return logMessages;
}
65,7 → 72,16
DaoFactory.getTeacherDaoImpl().save(t);
newUser = true;
}
persist(d, t);
logger.info("Importing: (" + t.getUsername() + ") " + t.getName());
try
{
persist(d, t);
}
catch (Exception e)
{
logger.error(e, e);
throw e;
}
if (newUser)
CommonServicesManager.getInstance().adviseNew(t);
else
94,68 → 110,87
*
* @param d docente
* @param t teacher
* @throws Exception .
*/
private void persist(Docente d, Teacher t)
private void persist(Docente d, Teacher t) throws Exception
{
t.setName(d.getNomeFuncionarioInt());
t.setEmail(d.getEmail());
if(d.getEmail() != null && d.getEmail().endsWith(Globals.EMAIL_LOCAL_SUFFIX))
try
{
int atIndex = d.getEmail().indexOf("@");
if(atIndex > 0)
t.setUsername(d.getEmail().substring(0,atIndex));
}
t.setSigesCode(d.getCodigoFuncionario().intValue());
t.setAddress(d.getMorada());
t.setZip("" + d.getCodigoPostal().intValue());
t.setBi(d.getNumeroBi());
t.setEmployerName(d.getNomeFuncionario());
t.setAcademicName(d.getNomeAcademico());
t.setBirthDate(d.getDataNascimento().toGregorianCalendar().getTime());
//Desta forma as relacoes antigas sao ignoradas cria-se uma lista nova e atribui-se ao Teacher, o Hibernate faz resto e apaga as chaves estrangeiras antigas
if (d.getDisciplinas() == null || d.getDisciplinas().getDisciplina() == null || d.getDisciplinas().getDisciplina().size() == 0)
logger.warn("ATENTION TEACHER WITH ZERO UNITS: codigoFuncionario " + d.getCodigoFuncionario());
else
{
Set<CourseUnit> units = new HashSet<CourseUnit>();
for (Disciplina disciplina : d.getDisciplinas().getDisciplina())
if(t.getName() == null || t.getName().length() == 0)
t.setName(d.getNomeFuncionarioInt());
//Email instituicao
t.setEmail(d.getEmail());
if (d.getEmail() != null && d.getEmail().endsWith(Globals.EMAIL_LOCAL_SUFFIX))
{
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(),"" + disciplina.getCodigoCurso(),"" + disciplina.getCdDuracao(),"" + disciplina.getCdLectivo());
int atIndex = d.getEmail().indexOf("@");
if (atIndex > 0)
t.setUsername(d.getEmail().substring(0, atIndex));
 
if(courseUnit == null)
{
logger.warn("Unit not found: semestre:" + disciplina.getCdDuracao() + " codigo:" + disciplina.getCodigo() + " course:" + disciplina.getCodigoCurso() + " year:" + disciplina.getCdLectivo());
}
else
units.add(courseUnit);
}
Iterator<CourseUnit> iter = units.iterator();
while (iter.hasNext())
t.setSigesCode(d.getCodigoFuncionario().intValue());
if(t.getAddress() == null || t.getAddress().length() == 0)
t.setAddress(d.getMorada());
if(t.getZip() == null || t.getZip().length() == 0)
t.setZip("" + d.getCodigoPostal().intValue());
if(t.getBi() == null || t.getBi().length() == 0)
t.setBi(d.getNumeroBi());
t.setEmployerName(d.getNomeFuncionario());
t.setAcademicName(d.getNomeAcademico());
if(t.getBirthDate() == null || t.getBirthDate().getTime() == 0)
t.setBirthDate(d.getDataNascimento().toGregorianCalendar().getTime());
//Desta forma as relacoes antigas sao ignoradas cria-se uma lista nova e atribui-se ao Teacher, o Hibernate faz resto e apaga as chaves estrangeiras antigas
if (d.getDisciplinas() == null || d.getDisciplinas().getDisciplina() == null || d.getDisciplinas().getDisciplina().size() == 0)
logger.warn("ATENTION TEACHER WITH ZERO UNITS: codigoFuncionario " + d.getCodigoFuncionario());
else
{
CourseUnit courseUnit = iter.next();
if(((TeacherImpl)t).isLocalRemovedUnit(courseUnit))
iter.remove();
}
if(t.getTeachedUnits() != null)
{
for(CourseUnit c: units)
Set<CourseUnit> units = new HashSet<CourseUnit>();
for (Disciplina disciplina : d.getDisciplinas().getDisciplina())
{
boolean isIn = false;
for(CourseUnit tc : t.getTeachedUnits())
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo());
 
if (courseUnit == null)
{
if(tc.equals(c))
logger.warn("Unit not found: semestre:" + disciplina.getCdDuracao() + " codigo:" + disciplina.getCodigo() + " course:" + disciplina.getCodigoCurso() + " year:" + disciplina.getCdLectivo());
}
else
units.add(courseUnit);
}
Iterator<CourseUnit> iter = units.iterator();
while (iter.hasNext())
{
CourseUnit courseUnit = iter.next();
//In case of a comming proxy
TeacherImpl tImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(t);
if (tImpl.isLocalRemovedUnit(courseUnit))
iter.remove();
}
if (t.getTeachedUnits() != null)
{
for (CourseUnit c : units)
{
boolean isIn = false;
for (CourseUnit tc : t.getTeachedUnits())
{
isIn = true;
break;
if (tc.equals(c))
{
isIn = true;
break;
}
}
if (!isIn)
t.getTeachedUnits().add(c);
}
if(!isIn)
t.getTeachedUnits().add(c);
}
else
t.setTeachedUnits(units);
}
else
t.setTeachedUnits(units);
}
catch (Exception e)
{
logger.error(e, e);
throw e;
}
 
}
 
/**
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java
48,7 → 48,7
HashMap<String, Disciplina> disciplinasMap = new HashMap<String, Disciplina>();
HashMap<String, Disciplina> disciplinasMapS1 = new HashMap<String, Disciplina>();
HashMap<String, Disciplina> disciplinasMapS2 = new HashMap<String, Disciplina>();
HashMap<Integer, Disciplina> cursosMap = new HashMap<Integer, Disciplina>();
HashMap<String, Disciplina> cursosMap = new HashMap<String, Disciplina>();
 
/**
* Build Course Units Maps
73,8 → 73,8
*/
logMessages.addMessage(new DefaultLogMessage("import.semestre.updating.courses", LogMessageTypeEnum.INFO));
logger.info("updating courses");
Set<Map.Entry<Integer, Disciplina>> set2 = cursosMap.entrySet();
for (Map.Entry<Integer, Disciplina> entry : set2)
Set<Map.Entry<String, Disciplina>> set2 = cursosMap.entrySet();
for (Map.Entry<String, Disciplina> entry : set2)
{
Disciplina d = entry.getValue();
CourseView c = coursesService.loadCourseByCode("" + d.getCodigoCurso().intValue(),false);
101,11 → 101,11
}
catch (Throwable e)
{
logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(), "see log for details", LogMessageTypeEnum.ERROR));
logger.error(e,e);
logger.error(e,e);
logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(), "see log for details", LogMessageTypeEnum.ERROR));
}
logMessages.addMessage(new DefaultLogMessage("import.course.terminating", LogMessageTypeEnum.INFO));
logger.info("terminating course import");
logMessages.addMessage(new DefaultLogMessage("import.course.terminating", LogMessageTypeEnum.INFO));
return logMessages;
}
 
114,7 → 114,7
String year,
HashMap<String, Disciplina> disciplinasMap,
HashMap<String, Disciplina> disciplinasMapSemestre,
HashMap<Integer, Disciplina> cursosMap,
HashMap<String, Disciplina> cursosMap,
DefaultLogMessages logMessages)
{
logMessages.addMessage(new DefaultLogMessage("import.semestre.course.units." + semestre, LogMessageTypeEnum.INFO));
130,8 → 130,7
}
disciplinasMap.put(d.getCodigo().intValue() + ":" + d.getCodigoCurso() + ":" + semestre, d);
disciplinasMapSemestre.put(d.getCodigo().intValue() + ":" + d.getCodigoCurso() + ":" + semestre, d);
cursosMap.put(d.getCodigoCurso().intValue(), d);
 
cursosMap.put(d.getCodigoCurso().intValue()+":"+year, d);
}
}
 
/impl/src/java/pt/estgp/estgweb/services/urlstat/ResetRelativePathsService.java
New file
0,0 → 1,84
package pt.estgp.estgweb.services.urlstat;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import org.apache.log4j.Logger;
import org.apache.commons.httpclient.util.URIUtil;
import org.apache.commons.httpclient.URIException;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.Day;
import org.jfree.data.time.Month;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.plot.XYPlot;
 
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Date;
import java.util.ArrayList;
import java.io.File;
import java.io.IOException;
import java.awt.*;
import java.text.SimpleDateFormat;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;
 
import jomm.utils.MyCalendar;
import jomm.utils.DatesUtils;
import jomm.utils.MessageResources;
import jomm.dao.impl.AbstractDao;
import jomm.dao.utils.HibernateUtils;
 
/**
* @author Jorge Machado
* @date 15/Mar/2008
* @time 6:55:38
* @see pt.estgp.estgweb.services.urlstat
*/
public class ResetRelativePathsService implements IService
{
private static final Logger logger = Logger.getLogger(ResetRelativePathsService.class);
 
 
public static void main(String[] args) throws ServiceException, URIException, SQLException
{
 
AbstractDao.getCurrentSession().beginTransaction();
PreparedStatement ps = AbstractDao.getCurrentSession().connection().prepareStatement("select relativePath from urlstat");
ResultSet rs = ps.executeQuery();
while(rs.next())
{
PreparedStatement ps1 = AbstractDao.getCurrentSession().connection().prepareStatement("update urlstat set relativePath = ? where relativePath=?");
String relativePath = rs.getString("relativePath");
String encoded=URIUtil.encodeWithinQuery(relativePath,"ISO-8859-1");
ps1.setString(1,encoded);
ps1.setString(2,relativePath);
ps1.executeUpdate();
ps1.close();
ps1 = AbstractDao.getCurrentSession().connection().prepareStatement("update urlstatday set relativePath = ? where relativePath=?");
ps1.setString(1,encoded);
ps1.setString(2,relativePath);
ps1.executeUpdate();
ps1.close();
ps1 = AbstractDao.getCurrentSession().connection().prepareStatement("update urlstatmonth set relativePath = ? where relativePath=?");
ps1.setString(1,encoded);
ps1.setString(2,relativePath);
ps1.executeUpdate();
ps1.close();
ps1 = AbstractDao.getCurrentSession().connection().prepareStatement("update urlstatyear set relativePath = ? where relativePath=?");
ps1.setString(1,encoded);
ps1.setString(2,relativePath);
ps1.executeUpdate();
ps1.close();
}
AbstractDao.getCurrentSession().getTransaction().commit();
}
 
}
/impl/src/java/pt/estgp/estgweb/services/urlstat/ChartBuilderService.java
115,6 → 115,15
TimeSeriesCollection dataset = new TimeSeriesCollection();
for(String relativePath: relativePaths)
{
try
{
relativePath = URIUtil.encodeWithinQuery(relativePath,"ISO-8859-1");
}
catch (URIException e)
{
logger.error(e,e);
return null;
}
UrlStat urlStat = DaoFactory.getUrlStatDaoImpl().loadOrNull(relativePath);
if(urlStat != null)
{
194,7 → 203,7
String dates = sp.format(startDate) + "_UNTIL_" + sp.format(endDate) + "_" + seriesScaleEnum.getType();
String path;
if(encode)
path = URIUtil.encodePath(relativePathName.replaceAll("/","_"),"ISO-8859-1");
path = URIUtil.encodeWithinQuery(relativePathName.replaceAll("/","_"),"ISO-8859-1");
else
path = relativePathName.replaceAll("/","_");
return LINK_CHART_TMP_DIR + "/" + path + "_" + dates + ".png";
213,23 → 222,24
* @throws ServiceException
*/
 
public static void main(String[] args) throws ServiceException
public static void main(String[] args) throws ServiceException, URIException
{
// UrlStatService.main(null);
AbstractDao.getCurrentSession().beginTransaction();
List<String> relativePaths = new ArrayList<String>();
relativePaths.add("/public/announcements/getFlashNews.jsp?sid=0.9998549583612295");
// AbstractDao.getCurrentSession().beginTransaction();
// List<String> relativePaths = new ArrayList<String>();
// relativePaths.add("/public/announcements/getFlashNews.jsp?sid=0.9998549583612295");
System.out.println(URIUtil.decode(URIUtil.encodeWithinQuery("/public/announcements/getFlashNews.jsp?sid=0.9998549583612295&jorge=j","ISO-8859-1")));
// relativePaths.add("/teste2");
System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.weekDays));
System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.monthDays));
System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.trimestreDays));
System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.semestreDays));
System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.yearDays));
System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.trimestreMonths));
System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.semestreMonths));
System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.yearMonths));
System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.twoYearsMonths));
AbstractDao.getCurrentSession().getTransaction().commit();
// System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.weekDays));
// System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.monthDays));
// System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.trimestreDays));
// System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.semestreDays));
// System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.yearDays));
// System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.trimestreMonths));
// System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.semestreMonths));
// System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.yearMonths));
// System.out.println(new ChartBuilderService().run(new TestHttpServletRequest(),relativePaths, ChartTypeEnum.twoYearsMonths));
// AbstractDao.getCurrentSession().getTransaction().commit();
}
 
}
/impl/src/java/pt/estgp/estgweb/services/profile/EditUserService.java
8,6 → 8,8
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.expceptions.FieldException;
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException;
import org.apache.log4j.Logger;
 
public class EditUserService implements IService
18,6 → 20,21
 
public UserView run(UserView userView, String userToCreate, UserSession userSession) throws ServiceException
{
// if (userView.getUsername() == null || user.getPassword() == null || user.getUsername().length() < 4 || user.getPassword().length() < 4)
// throw new FieldException("bad.fields");
 
 
User u = DaoFactory.getUserDaoImpl().loadByUsername(userView.getUsername());
if (u != null && u.getId() != userView.getId())
{
throw new AlreadyExistsException(AlreadyExistsException.ALREADY_EXISTS_USERNAME);
}
u = DaoFactory.getUserDaoImpl().loadByUsername(userView.getEmail());
if (u != null && u.getId() != userView.getId())
{
throw new AlreadyExistsException(AlreadyExistsException.ALREADY_EXISTS_EMAIL);
}
 
User user;
if (userView.getId() > 0)
user = DaoFactory.getUserDaoImpl().get(userView.getSerializable());
/impl/src/java/pt/estgp/estgweb/services/profile/SearchUserService.java
4,8 → 4,11
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.domain.views.UserView;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
import org.apache.log4j.Logger;
import org.hibernate.criterion.Criterion;
 
import java.util.List;
import java.util.ArrayList;
16,7 → 19,8
 
public List<UserView> run(String textToSearch,String typeToSearch)
{
List<User> users =DaoFactory.getUserDaoImpl().findUsers(textToSearch,typeToSearch);
 
List<User> users = DaoFactory.getUserDaoImpl().findUsers(textToSearch,typeToSearch);
if(users == null)
return null;
List<UserView> userViews = new ArrayList<UserView>();
/impl/src/java/pt/estgp/estgweb/services/profile/CurriculumService.java
66,12 → 66,15
{
r = RecordEnum.parse(recordView.getType()).createInstance();
r.setOwner(userSession.getUser());
r.setCreators(new HashSet<User>());
r.getCreators().add(userSession.getUser());
// r.setCreators(new HashSet<User>());
// r.getCreators().add(userSession.getUser());
userSession.getUser().getCreatorRecords().add(r);
if(userSession.getUser().getCreatorRecords() == null)
userSession.getUser().setCreatorRecords(new HashSet<Record>());
userSession.getUser().getCreatorRecords().add(r);
 
DaoFactory.getRecordDaoImpl().save(r);
DaoFactory.getRecordDaoImpl().refresh(r);
System.out.println(r.getCreators().size());
}
else
r = DaoFactory.getRecordDaoImpl().get(recordView.getId());
/impl/src/java/pt/estgp/estgweb/services/blogs/CreateBlogPostService.java
4,13 → 4,21
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.domain.views.BlogPostView;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.enums.LangEnum;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.data.ImageManager;
import pt.estgp.estgweb.services.sms.SMSJob;
import pt.estgp.estgweb.services.jobs.JobScheduleService;
import pt.estgp.estgweb.services.email.SendEmailService;
import pt.estgp.estgweb.services.email.EMAILJob;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.Email;
import org.apache.log4j.Logger;
 
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
 
import jomm.utils.MyCalendar;
 
63,12 → 71,36
{
bPV.setStatus(true);
}
 
bPV.persistViewInObject(bP);
bP.setOwner(userSession.getUser());
bP.setBlog(b);
bP.setSaveDate(new Date());
DaoFactory.getBlogPostDaoImpl().save(bP);
trySendPostEmail(bP,userSession);
return new BlogPostView(bP);
}
 
 
private void trySendPostEmail(BlogPost post, UserSession userSession)
{
if(post.getBlog() instanceof CourseUnitBlog && Globals.EMAIL_COURSEUNIT_BLOGS)
{
CourseUnit c = ((CourseUnitBlog)post.getBlog()).getCourseUnit();
List<User> users = new ArrayList<User>();
if(c.getStudents() != null)
users.addAll(c.getStudents());
if(c.getTeachers() != null)
users.addAll(c.getTeachers());
sendPostEmail(post,post.getTitle(), userSession, users);
}
}
 
private void sendPostEmail(BlogPost p, String desc, UserSession userSession, List<User> users)
{
SendEmailService sendEmailService = new SendEmailService();
Email e = sendEmailService.getCourseUnitBlogPostEmail(p, LangEnum.PORTUGUESE,userSession.getName(),users);
EMAILJob emailJob = new EMAILJob(e);
JobScheduleService.getInstance().scheduleNow(emailJob,"CourseUnit BlogPost Email:" + desc,userSession);
}
}
/impl/src/java/pt/estgp/estgweb/services/data/RepositoryService.java
1,10 → 1,7
package pt.estgp.estgweb.services.data;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.RepositoryFileImpl;
import pt.estgp.estgweb.domain.RepositoryFileVersionImpl;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
import pt.estgp.estgweb.services.data.impl.DefaultRepositoryFile;
16,6 → 13,10
import java.util.List;
import java.util.ArrayList;
 
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.Document;
 
/**
* @author Jorge Machado
* @date 4/Jun/2008
25,15 → 26,17
{
 
/**
*
* @param stream
* @param contentType
* @param size
* @param name
* @param description
* @param stream .
* @param contentType .
* @param size .
* @param name .
* @param description .
* @param extension .
* @param accessControl .
* @param userSession .
* @return the identifier to retrieve the document
*/
public String storeRepositoryFile(InputStream stream, String contentType, String extension,int size, String name, String description, ResourceAccessControlEnum accessControl, UserSession userSession)
public String storeRepositoryFile(InputStream stream, String contentType, String extension, int size, String name, String description, ResourceAccessControlEnum accessControl, UserSession userSession)
{
RepositoryFileImpl repositoryFile = DomainObjectFactory.createRepositoryFileImpl();
repositoryFile.setSaveDate(new Date());
49,53 → 52,49
repositoryFileVersion.setContentType(contentType);
repositoryFileVersion.setExtension(extension);
 
RepositoryManager.store(stream,repositoryFileVersion.getId());
Document dom = createXMLdescription(repositoryFileVersion);
RepositoryManager.storeDescription(dom, repositoryFileVersion.getId());
RepositoryManager.store(stream, repositoryFileVersion.getId());
return new StringBuilder().append(repositoryFile.getId()).toString();
}
 
 
 
/**
*
* @param stream
* @param contentType
* @param size
* @param name
* @param description
* @return the identifier to retrieve the document
* @param stream .
* @param contentType .
* @param size .
* @param name .
* @param description .
* @param identifier .
* @param extension .
* @param accessControl .
*/
public void updateRepositoryFile(String identifier, InputStream stream, String contentType, String extension, int size, String name, String description, ResourceAccessControlEnum accessControl)
{
 
RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().get(Long.parseLong(identifier));
 
repositoryFile.setSaveDate(new Date());
repositoryFile.setAccessControl(accessControl.getKey());
 
 
 
RepositoryFileVersionImpl repositoryFileVersion = createVersion(repositoryFile);
repositoryFileVersion.setName(name);
repositoryFileVersion.setSize(size);
repositoryFileVersion.setDescription(description);
repositoryFileVersion.setContentType(contentType);
repositoryFileVersion.setExtension(extension);
 
RepositoryManager.store(stream,repositoryFileVersion.getId());
Document dom = createXMLdescription(repositoryFileVersion);
RepositoryManager.storeDescription(dom, repositoryFileVersion.getId());
RepositoryManager.store(stream, repositoryFileVersion.getId());
}
 
 
 
/**
*
* @param identifier
* @param identifier .
* @return a view of a document
*/
public RepositoryFileImpl loadView(String identifier)
{
RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().get(Long.parseLong(identifier));
for(RepositoryFileVersionImpl version: repositoryFile.getRepositoryFileVersions())
for (RepositoryFileVersionImpl version : repositoryFile.getRepositoryFileVersions())
{
version.getSaveDate();
}
103,11 → 102,11
}
 
/**
*
* @param identifier
* @param identifier .
* @param userSession .
* @return a view with an inputStream for document
*/
public IRepositoryFile load(String identifier,UserSession userSession)
public IRepositoryFile load(String identifier, UserSession userSession)
{
DefaultRepositoryFile iRepositoryFile = new DefaultRepositoryFile();
RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().load(Long.parseLong(identifier));
119,15 → 118,15
}
 
/**
*
* @param identifier
* @param identifier .
* @param userSession .
* @return a view with an inputStream for document
*/
public List<IRepositoryFile> loadVersions(String identifier,UserSession userSession)
public List<IRepositoryFile> loadVersions(String identifier, UserSession userSession)
{
RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().load(Long.parseLong(identifier));
List<IRepositoryFile> versions = new ArrayList<IRepositoryFile>();
for(RepositoryFileVersionImpl version : repositoryFile.getRepositoryFileVersions())
for (RepositoryFileVersionImpl version : repositoryFile.getRepositoryFileVersions())
{
DefaultRepositoryFile iRepositoryFile = new DefaultRepositoryFile();
iRepositoryFile.setContentType(version.getContentType());
141,18 → 140,141
 
/**
* Create a new File Version
* @param repositoryFile
* @return
*
* @param repositoryFile .
* @return .
*/
private RepositoryFileVersionImpl createVersion(RepositoryFileImpl repositoryFile)
{
RepositoryFileVersionImpl repositoryFileVersion = DomainObjectFactory.createRepositoryFileVersionImpl();
repositoryFileVersion.setRepositoryFile(repositoryFile);
if(repositoryFile.getRepositoryFileVersions() == null)
if (repositoryFile.getRepositoryFileVersions() == null)
repositoryFile.setRepositoryFileVersions(new HashSet<RepositoryFileVersionImpl>());
repositoryFile.getRepositoryFileVersions().add(repositoryFileVersion);
repositoryFile.setLastVersion(repositoryFileVersion);
DaoFactory.getRepositoryFileVersionDaoImpl().save(repositoryFileVersion);
return repositoryFileVersion;
}
 
public static Document createXMLdescription(RepositoryFileVersionImpl repositoryFile)
{
org.dom4j.Document dom = DocumentFactory.getInstance().createDocument();
Element rootElement = DocumentFactory.getInstance().createElement("repositoryFileVersion");
dom.setRootElement(rootElement);
rootElement.addAttribute("id", "" + repositoryFile.getId());
 
Element saveDate = DocumentFactory.getInstance().createElement("saveDate");
saveDate.setText(""+DatesUtils.getStringFromDateForFilename(repositoryFile.getSaveDate()));
 
Element name = DocumentFactory.getInstance().createElement("name");
name.setText("" + repositoryFile.getName());
 
Element contentType = DocumentFactory.getInstance().createElement("contentType");
contentType.setText(""+repositoryFile.getContentType());
 
Element extension = DocumentFactory.getInstance().createElement("extension");
extension.setText("" + repositoryFile.getExtension());
 
Element size = DocumentFactory.getInstance().createElement("sizeKb");
size.setText("" + repositoryFile.getSizeKb());
 
Element description = DocumentFactory.getInstance().createElement("description");
description.setText(repositoryFile.getDescription());
 
rootElement.add(saveDate);
rootElement.add(name);
rootElement.add(contentType);
rootElement.add(extension);
rootElement.add(size);
rootElement.add(description);
 
//Repository File Generics
Element repositoryFileElem = DocumentFactory.getInstance().createElement("repositoryFile");
rootElement.add(repositoryFileElem);
 
repositoryFileElem.addAttribute("id", "" + repositoryFile.getRepositoryFile().getId());
Element rSaveDate = DocumentFactory.getInstance().createElement("saveDate");
rSaveDate.setText(""+DatesUtils.getStringFromDateForFilename(repositoryFile.getRepositoryFile().getSaveDate()));
 
Element rUpdateDate = DocumentFactory.getInstance().createElement("updateDate");
rUpdateDate.setText(""+DatesUtils.getStringFromDateForFilename(repositoryFile.getRepositoryFile().getUpdateDate()));
 
 
Element accessControl = DocumentFactory.getInstance().createElement("accessControl");
accessControl.setText(repositoryFile.getRepositoryFile().getAccessControl());
 
Element deleted = DocumentFactory.getInstance().createElement("deleted");
deleted.setText("" + repositoryFile.getRepositoryFile().isDeleted());
 
repositoryFileElem.add(rSaveDate);
repositoryFileElem.add(rUpdateDate);
repositoryFileElem.add(accessControl);
repositoryFileElem.add(deleted);
 
Element owner = DocumentFactory.getInstance().createElement("owner");
repositoryFileElem.add(owner);
owner.addAttribute("id", "" + repositoryFile.getRepositoryFile().getOwner().getId());
 
if (repositoryFile.getRepositoryFile().getOwner().getName() != null)
{
Element oName = DocumentFactory.getInstance().createElement("name");
oName.setText(repositoryFile.getRepositoryFile().getOwner().getName());
owner.add(oName);
}
 
if (DocumentFactory.getInstance().createElement("roles") != null)
{
Element oRoles = DocumentFactory.getInstance().createElement("roles");
oRoles.setText(repositoryFile.getRepositoryFile().getOwner().getRoles());
owner.add(oRoles);
}
 
Element oClass = DocumentFactory.getInstance().createElement("class");
oClass.setText(repositoryFile.getRepositoryFile().getOwner().getClass().getSimpleName());
 
 
owner.add(oClass);
if (repositoryFile.getRepositoryFile().getOwner() instanceof User)
{
Element oUsername = DocumentFactory.getInstance().createElement("username");
oUsername.setText(((User) repositoryFile.getRepositoryFile().getOwner()).getUsername());
owner.add(oUsername);
 
if (((User) repositoryFile.getRepositoryFile().getOwner()).getEmail() != null)
{
Element oEmail = DocumentFactory.getInstance().createElement("email");
oEmail.setText(((User) repositoryFile.getRepositoryFile().getOwner()).getEmail());
owner.add(oEmail);
}
 
if (((User) repositoryFile.getRepositoryFile().getOwner()).getOutEmail() != null)
{
Element outEmail = DocumentFactory.getInstance().createElement("outEmail");
outEmail.setText(((User) repositoryFile.getRepositoryFile().getOwner()).getOutEmail());
owner.add(outEmail);
}
 
if (((User) repositoryFile.getRepositoryFile().getOwner()).getBi() != null)
{
Element biEmail = DocumentFactory.getInstance().createElement("bi");
biEmail.setText(((User) repositoryFile.getRepositoryFile().getOwner()).getBi());
owner.add(biEmail);
}
 
 
if (repositoryFile.getRepositoryFile().getOwner() instanceof Teacher)
{
Element code = DocumentFactory.getInstance().createElement("teacherCode");
code.setText("" + ((Teacher) repositoryFile.getRepositoryFile().getOwner()).getSigesCode());
owner.add(code);
}
if (repositoryFile.getRepositoryFile().getOwner() instanceof Student)
{
Element code = DocumentFactory.getInstance().createElement("studentCode");
code.setText("" + ((Student) repositoryFile.getRepositoryFile().getOwner()).getSigesCode());
owner.add(code);
}
}
return dom;
}
}
/impl/src/java/pt/estgp/estgweb/services/data/ResourceManager.java
1,12 → 1,12
package pt.estgp.estgweb.services.data;
 
import jomm.utils.StreamsUtils;
import org.dom4j.Document;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.Dom4jUtil;
 
import java.io.*;
 
import jomm.utils.StreamsUtils;
import org.apache.log4j.Logger;
 
/**
* @author Jorge Machado
* @date 28/Mai/2008
15,14 → 15,25
public class ResourceManager
{
 
 
 
 
public static final int DOCS_IN_PATH = 1000;
public static final int DOCS_FIRST_DIR_LEN = 20;
public static final int DOCS_IN_PATH_LEVEL1 = DOCS_IN_PATH * DOCS_IN_PATH;
public static final int DOCS_IN_PATH_LEVEL2 = DOCS_IN_PATH * DOCS_IN_PATH * DOCS_IN_PATH;
public static final int DOCS_FIRST_DIR_LEN = 10;
 
public static void saveResource(InputStream stream, String resourcePath, long id) throws IOException
{
StreamsUtils.inputStream2File(stream, new File(Globals.DATA_DIR + resourcePath + getDocumentPathById(id)));
}
 
public static void saveResource(Document dom, String resourcePath, long id) throws IOException
{
new File(Globals.DATA_DIR + resourcePath + getDocumentPathById(id)+".xml").getParentFile().mkdirs();
Dom4jUtil.write(dom,Globals.DATA_DIR + resourcePath + getDocumentPathById(id)+".xml");
}
 
public static InputStream getResource(String resourcePath, long id) throws FileNotFoundException
{
return new FileInputStream(Globals.DATA_DIR + resourcePath + getDocumentPathById(id));
49,14 → 60,33
 
public static String getDocumentPathById(long id)
{
char[] dir = new char[DOCS_FIRST_DIR_LEN];
setAllChars('0', dir);
long dirNumber = id / DOCS_IN_PATH;
dirNumber = dirNumber * DOCS_IN_PATH;
String dirNumberStr = "" + dirNumber;
copyCharsToArray(dir, dirNumberStr);
dirNumberStr = new String(dir);
return "/" + dirNumberStr + "/" + id;
char[] dir0 = new char[DOCS_FIRST_DIR_LEN];
setAllChars('0', dir0);
char[] dir1 = new char[DOCS_FIRST_DIR_LEN];
setAllChars('0', dir1);
char[] dir2 = new char[DOCS_FIRST_DIR_LEN];
setAllChars('0', dir2);
 
long dirNumber0 = id / DOCS_IN_PATH_LEVEL2;
long dirNumber1 = id / DOCS_IN_PATH_LEVEL1;
long dirNumber2 = id / DOCS_IN_PATH;
 
 
dirNumber0 = dirNumber0 * DOCS_IN_PATH_LEVEL2;
dirNumber1 = dirNumber1 * DOCS_IN_PATH_LEVEL1;
dirNumber2 = dirNumber2 * DOCS_IN_PATH;
 
 
String dirNumberStr0 = "" + dirNumber0;
String dirNumberStr1 = "" + dirNumber1;
String dirNumberStr2 = "" + dirNumber2;
copyCharsToArray(dir0, dirNumberStr0);
copyCharsToArray(dir1, dirNumberStr1);
copyCharsToArray(dir2, dirNumberStr2);
dirNumberStr0 = new String(dir0);
dirNumberStr1 = new String(dir1);
dirNumberStr2 = new String(dir2);
return "/" + dirNumberStr0 + "/" + dirNumberStr1 + "/" + dirNumberStr2 + "/" + id;
}
 
}
/impl/src/java/pt/estgp/estgweb/services/data/RepositoryManager.java
1,6 → 1,7
package pt.estgp.estgweb.services.data;
 
import org.apache.log4j.Logger;
import org.dom4j.Document;
import pt.estgp.estgweb.domain.Image;
 
import java.io.ByteArrayInputStream;
32,6 → 33,20
return false;
}
 
public static boolean storeDescription(Document dom, long identifier)
{
try
{
ResourceManager.saveResource(dom, RESOURCE_PATH, identifier);
return true;
}
catch (IOException e)
{
logger.error(e,e);
}
return false;
}
 
public static InputStream load(long identifier)
{
try
/impl/src/java/pt/estgp/estgweb/services/data/CreateDescriptionsXML.java
New file
0,0 → 1,34
package pt.estgp.estgweb.services.data;
 
import jomm.dao.impl.AbstractDao;
import pt.estgp.estgweb.domain.dao.impl.RepositoryFileDao;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.RepositoryFileVersion;
import pt.estgp.estgweb.domain.RepositoryFileVersionImpl;
 
import java.util.List;
 
import org.dom4j.Document;
import org.apache.log4j.Logger;
 
/**
* @author Jorge Machado
* @date 23/Out/2008
* @see pt.estgp.estgweb.services.data
*/
public class CreateDescriptionsXML
{
private static final Logger logger = Logger.getLogger(CreateDescriptionsXML.class);
public static void main(String[]args)
{
AbstractDao.getCurrentSession().beginTransaction();
List<RepositoryFileVersion> repoList = AbstractDao.getCurrentSession().createCriteria(RepositoryFileVersion.class).list();
for(RepositoryFileVersion repositoryFileVersion: repoList)
{
logger.info("Creating description for file:" + repositoryFileVersion.getId() + ":" + repositoryFileVersion.getName());
Document dom = RepositoryService.createXMLdescription((RepositoryFileVersionImpl) repositoryFileVersion);
RepositoryManager.storeDescription(dom, repositoryFileVersion.getId());
}
AbstractDao.getCurrentSession().getTransaction().commit();
}
}
/impl/src/java/pt/estgp/estgweb/services/announcements/CreateAnnouncementService.java
131,6 → 131,8
logger.info("ImageSmall form announcement:" + announcementView.getId() + "do not exist!");
}
}
if(a.getOwner().getId() != userSession.getUser().getId())
announcementView.setChoosedOwnerRole(a.getChoosedOwnerRole());
announcementView.persistViewInObject(a);
if(announcementView.getTargetRoles() == null || announcementView.getTargetRoles().size() == 0)
a.setTargetRoles(ALL_ROLE);
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseDaoImpl.java
1,8 → 1,10
package pt.estgp.estgweb.domain.dao.impl;
 
import static org.hibernate.criterion.Restrictions.*;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Criterion;
import org.hibernate.Criteria;
import org.hibernate.Query;
import pt.estgp.estgweb.domain.Course;
import pt.estgp.estgweb.domain.CourseImpl;
import pt.estgp.estgweb.domain.CourseUnit;
29,12 → 31,12
 
public CourseImpl findCourseByCode(String code)
{
return (CourseImpl) createCriteria().add(eq("code",code)).uniqueResult();
return (CourseImpl) createCriteria().add(eq("code", code)).uniqueResult();
}
 
public int countCoursesActualYear(String query, SearchTypeEnum searchType)
{
Criterion c = DaoUtils.createSearchQuery(query,searchType,"name","description");
Criterion c = DaoUtils.createSearchQuery(query, searchType, "name", "description");
return createCriteria()
.add(c)
.add(eq("importYear", DatesUtils.getImportYear()))
64,14 → 66,46
public List<Course> findAllOrderByName(String importYear)
{
return createCriteria()
.add(eq("importYear",importYear))
.add(eq("importYear", importYear))
.addOrder(Order.asc("name"))
.list();
}
 
public List<String> loadImportYears()
{
Query q = createQuery("select distinct c.importYear from c in class " + Course.class.getName() + " order by c.importYear desc");
return q.list();
}
 
public List<Course> loadAllCourses(long teacherId, String importYear)
{
return
createCriteria()
.add(eq("importYear", importYear))
.list();
}
 
public List<Course> loadCoordinatedCourses(long teacherId, String importYear)
{
return
createCriteria()
.add(eq("coordinator.id", teacherId))
.add(eq("importYear", importYear))
.list();
}
 
public List<Course> loadDirectorCourses(long teacherId, String importYear)
{
return
createCriteria()
.add(eq("director.id", teacherId))
.add(eq("importYear", importYear))
.list();
}
 
public List<Course> findAll(String importYear)
{
return createCriteria().add(eq("importYear",importYear))
return createCriteria().add(eq("importYear", importYear))
.list();
}
 
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/TeacherDaoImpl.java
3,7 → 3,9
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.CourseUnitImpl;
import pt.estgp.estgweb.domain.TeacherImpl;
import static org.hibernate.criterion.Restrictions.*;
import org.hibernate.exception.GenericJDBCException;
 
import java.util.List;
 
17,6 → 19,10
{
private TeacherDaoImpl(){}
 
// protected Class getReferenceClass() {
// return TeacherImpl.class;
// }
 
public static TeacherDaoImpl getInstance()
{
if (myInstance == null)
26,7 → 32,14
 
public Teacher loadBySigesCode(int sigesCode)
{
return (Teacher) createCriteria().add(eq("sigesCode",sigesCode)).uniqueResult();
try
{
return (Teacher) createCriteria().add(eq("sigesCode",sigesCode)).uniqueResult();
}
catch(GenericJDBCException e)
{
throw e;
}
}
 
public Teacher loadByBi(String bi)
34,7 → 47,7
return (Teacher) createCriteria().add(eq("bi",bi)).uniqueResult();
}
 
 
 
 
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/UserDaoImpl.java
1,27 → 1,20
package pt.estgp.estgweb.domain.dao.impl;
 
import jomm.dao.DaoException;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Hibernate;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import static org.hibernate.criterion.Restrictions.*;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.SimpleExpression;
import org.hibernate.criterion.Order;
import org.apache.log4j.Logger;
 
 
import java.util.List;
import java.util.Date;
import java.io.Serializable;
 
import static org.hibernate.criterion.Restrictions.*;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.Announcement;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
 
import java.io.Serializable;
import java.util.Date;
import java.util.List;
 
/**
* @author Jorge Machado
* @date 28/Fev/2008
53,11 → 46,11
{
List list =
createCriteria()
.add(eq("username",username))
.add(eq("username", username))
.setMaxResults(1)
.list();
 
if(list.size() == 0)
if (list.size() == 0)
return null;
return (User) list.get(0);
}
66,6 → 59,7
throw new DaoException(e);
}
}
 
/**
* Used by the base DAO classes but here for your modification Load object
* matching the given key and return it.
78,7 → 72,7
try
{
return (User) createCriteria()
.add(eq("email",email))
.add(eq("email", email))
.uniqueResult();
}
catch (HibernateException e)
99,7 → 93,7
try
{
return (User) createCriteria()
.add(eq("id",ID))
.add(eq("id", ID))
.uniqueResult();
}
catch (HibernateException e)
121,7 → 115,7
try
{
return (User) createCriteria()
.add(eq("username",username))
.add(eq("username", username))
.add(eq("password", jomm.utils.BytesUtils.getDigestMD5Hex(password)))
.uniqueResult();
}
131,52 → 125,49
}
}
 
public List<User> loadRoleUsers (String role)
public List<User> loadRoleUsers(String role)
{
return createCriteria().add(like("roles","%" + role + "%")).addOrder(Order.asc("name")).list();
return createCriteria().add(like("roles", "%" + role + "%")).addOrder(Order.asc("name")).list();
}
 
public List<User> findUsers (String textToSearch)
public List<User> findUsers(String textToSearch)
{
return findUsers(textToSearch,null);
return findUsers(textToSearch, null);
}
 
public List<User> findUsers (String textToSearch,String typeToSearch)
public List<User> findUsers(String textToSearch, String typeToSearch)
{
Criteria criteria=null;
if(typeToSearch!=null && typeToSearch.trim().length()!=0)
{
Criteria criteria;
if (typeToSearch != null && typeToSearch.trim().length() != 0)
try
{
criteria = createCriteria(Class.forName(typeToSearch));
}
catch (ClassNotFoundException e)
{
logger.error(e,e);
logger.error(e, e);
return null;
}
}
else
{
criteria=createCriteria();
}
Criterion name= or(like("name","%"+textToSearch+"%"),like("name","%"+textToSearch+"%"));
Criterion username = or(like("username", "%" + textToSearch + "%"), like("username", "%" + textToSearch + "%"));
Criterion email = or(like("email", "%" + textToSearch + "%"), like("email", "%" + textToSearch + "%"));
criteria.add(or(or(name,username),email))
.addOrder(Order.desc("name"));
 
return criteria.list();
criteria = createCriteria();
Criterion textSearch = DaoUtils.createSearchQuery(textToSearch, SearchTypeEnum.parse(typeToSearch), "name", "username");
Criterion text2Search = DaoUtils.createSearchQuery(textToSearch, SearchTypeEnum.parse(typeToSearch), "email");
Criterion fields = or(textSearch, text2Search);
return criteria.add(fields)
.addOrder(Order.desc("name"))
.list();
}
 
 
 
public Serializable save(User obj)
{
try {
try
{
obj.setSaveDate(new Date());
return super.save(obj);
}
catch (HibernateException e) {
catch (HibernateException e)
{
throw new DaoException(e);
}
 
184,7 → 175,7
 
public int countUsers(String query, SearchTypeEnum searchType)
{
Criterion c = DaoUtils.createSearchQuery(query,searchType,"name","username");
Criterion c = DaoUtils.createSearchQuery(query, searchType, "name", "username");
return createCriteria()
.add(c)
.list().size();
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/RepositoryFileDaoImpl.java
24,7 → 24,7
 
public RepositoryFile loadByIdentifier(String identifier)
{
return (RepositoryFile) createCriteria().add(eq("identifier",identifier)).uniqueResult();
return (RepositoryFile) createCriteria().add(eq("id",identifier)).uniqueResult();
}
 
// public boolean hasTeacherFile(String identifier)
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitDaoImpl.java
12,6 → 12,7
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.apache.log4j.Logger;
 
import java.util.List;
49,6 → 50,19
return createCriteria().add(eq("importYear",importYear)).add(eq("course.id", course)).list();
}
 
public List<CourseUnit> load( String importYear, String semestre)
{
return createCriteria().add(eq("importYear",importYear)).add(eq("semestre", semestre)).list();
}
 
public List<Long> loadIds( String importYear, String semestre)
{
Query q= createQuery("select c.id from c in class " + CourseUnit.class.getName() + " where c.importYear = ? and c.semestre = ?");
q.setString(0,importYear);
q.setString(1,semestre);
return q.list();
}
 
public List<CourseUnit> loadSubscribedImportYearUnits(long studentId, String importYear)
{
return createCriteria().add(eq("importYear",importYear))
62,7 → 76,7
.createAlias("students","st")
.add(eq("st.id", studentId)).addOrder(Order.asc("name")).list();
}
 
public List<CourseUnitImpl> loadTeachedImportYearUnits(long teacherId, String importYear)
{
return createCriteria().add(eq("importYear",importYear))
183,6 → 197,7
.add(eq("importYear", DatesUtils.getImportYear()))
.add((or(isNull("objectives"),eq("objectives",""))))
.createAlias("teachers", "th")
.add(eq("semestre",DatesUtils.getSemestre()))
.add(eq("th.id",teacherId))
.list();
}
194,17 → 209,31
.add(eq("importYear", DatesUtils.getImportYear()))
.add((or(isNull("programStreamId"),eq("programStreamId",""))))
.createAlias("teachers", "th")
.add(eq("semestre",DatesUtils.getSemestre()))
.add(eq("th.id",teacherId))
.list();
}
 
public List<CourseUnit> loadMissingObjectivesOrPrograms(long teacherId)
{
//todo falta a projeccao do teacher id
return createCriteria()
.add(eq("importYear", DatesUtils.getImportYear()))
.add(or(or(isNull("objectives"),eq("objectives","")),or(isNull("programStreamId"),eq("programStreamId",""))))
.add(eq("semestre",DatesUtils.getSemestre()))
.createAlias("teachers", "th")
.add(eq("th.id",teacherId))
.list();
}
 
 
public List<CourseUnit> loadMissingObjectivesGivenCourse(long courseId)
{
return createCriteria()
.createAlias("course", "c")
.add(eq("c.id",courseId))
.add(eq("importYear", DatesUtils.getImportYear()))
.add(eq("semestre",DatesUtils.getSemestre()))
.add((or(isNull("objectives"),eq("objectives",""))))
.list();
}
215,6 → 244,7
.createAlias("course", "c")
.add(eq("c.id",courseId))
.add(eq("importYear", DatesUtils.getImportYear()))
.add(eq("semestre",DatesUtils.getSemestre()))
.add((or(isNull("programStreamId"),eq("programStreamId",""))))
.list();
}
225,12 → 255,22
.createAlias("course", "c")
.add(eq("c.id",courseId))
.add(eq("importYear", DatesUtils.getImportYear()))
.add(eq("semestre",DatesUtils.getSemestre()))
.add((or(or(isNull("objectives"),eq("objectives","")),or(isNull("programStreamId"),eq("programStreamId","")))))
.list();
}
 
public int countMissingProgramGivenCourse(long courseId)
{
return loadMissingProgramGivenCourse(courseId).size();
}
 
 
 
 
 
 
 
 
 
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitSummaryDaoImpl.java
New file
0,0 → 1,53
package pt.estgp.estgweb.domain.dao.impl;
 
import java.util.List;
 
import pt.estgp.estgweb.domain.Student;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.CourseUnitSummary;
import org.hibernate.Query;
import jomm.dao.impl.AbstractDao;
 
/**
* @author Jorge Machado
* @date 28/Fev/2008
* @time 2:51:06
* @see pt.estgp.estgweb.domain.dao.impl
*/
public class CourseUnitSummaryDaoImpl extends CourseUnitSummaryDao
{
 
 
 
private CourseUnitSummaryDaoImpl()
{
}
 
public static CourseUnitSummaryDaoImpl getInstance()
{
if (myInstance == null)
myInstance = new CourseUnitSummaryDaoImpl();
return (CourseUnitSummaryDaoImpl) myInstance;
}
 
 
public List<String> getStudentsEmails(long summaryId)
{
Query q = createQuery("select e.email from "
+ Student.class.getName() + " e join e.subscribedUnits as unit join unit.summaries as s "
+ " where "
+ " s.id = ? "
 
);
q.setLong(0,summaryId);
return q.list();
}
 
public static void main(String[] args)
{
AbstractDao.getCurrentSession().beginTransaction();
List l = new CourseUnitSummaryDaoImpl().getStudentsEmails(2);
 
AbstractDao.getCurrentSession().getTransaction().commit();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/DaoUtils.java
21,7 → 21,7
c = or(like(field1, "%" + query + "%"), like(field2, "%" + query + "%"));
else if (searchTypeEnum == SearchTypeEnum.AllWords)
{
String[] fields = query.split(" ");
String[] fields = query.trim().split(" ");
for (String field : fields)
{
if (c == null)
32,7 → 32,7
}
else
{
String[] fields = query.split(" ");
String[] fields = query.trim().split(" ");
for (String field : fields)
{
if (c == null)
43,4 → 43,34
}
return c;
}
 
public static Criterion createSearchQuery(String query, SearchTypeEnum searchTypeEnum, String field1)
{
Criterion c = null;
if (searchTypeEnum == SearchTypeEnum.ExactPhrase)
c = like(field1, "%" + query + "%");
else if (searchTypeEnum == SearchTypeEnum.AllWords)
{
String[] fields = query.trim().split(" ");
for (String field : fields)
{
if (c == null)
c = like(field1, "%" + field + "%");
else
c = and(c, like(field1, "%" + field + "%"));
}
}
else
{
String[] fields = query.trim().split(" ");
for (String field : fields)
{
if (c == null)
c = like(field1, "%" + field + "%");
else
c = or(c,like(field1, "%" + field + "%"));
}
}
return c;
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/DaoFactory.java
16,7 → 16,12
return JobDaoImpl.getInstance();
}
 
public static CourseUnitSummaryDaoImpl getCourseUnitSummaryDaoImpl()
{
return CourseUnitSummaryDaoImpl.getInstance();
}
 
 
public static CourseUnitGradeDaoImpl getCourseUnitGradeDaoImpl()
{
return CourseUnitGradeDaoImpl.getInstance();
/impl/src/java/pt/estgp/estgweb/domain/TeacherImpl.java
34,8 → 34,15
setScholarDegree(Globals.PROFILE_SCHOLAR_DEGREE_SUPERIOR);
}
 
public String getManagedRole() {
return TEACHER_ROLE;
public String getManagedRole()
{
List<String> roles = new ArrayList<String>();
if(getDirectorCourses() != null && getDirectorCourses().size() > 0)
roles.add(Globals.COURSE_DIRECTOR_ROLE);
if(getCoordinatorCourses() != null && getCoordinatorCourses().size() > 0)
roles.add(Globals.COURSE_COORDINATOR_ROLE);
roles.add(TEACHER_ROLE);
return RoleManager.getSerialRoles(roles);
}
 
public List<Course> getTeachedCoursesView()
/impl/src/java/pt/estgp/estgweb/domain/UserManagedRoleImpl.java
4,11 → 4,13
 
import java.util.*;
 
import pt.estgp.estgweb.utils.RoleManager;
 
 
public abstract class UserManagedRoleImpl extends UserImpl
{
 
public static List<CourseUnit> getUnitsSemestre(String semestre, List<CourseUnit> s1)
public static List<CourseUnit> getUnitsSemestre(String semestre, List<CourseUnit> s1)
{
if(s1 != null)
{
24,12 → 26,12
}
return s1;
}
 
public UserManagedRoleImpl()
{
 
}
 
/**
*
* @return the managed role of implementation object
42,14 → 44,23
*/
public String getRoles()
{
if(super.getRoles() == null)
super.setRoles(getManagedRole());
else if(super.getRoles().indexOf(getManagedRole()) < 0)
String managedRole = getManagedRole();
if(managedRole != null)
{
addRole(getManagedRole());
if(super.getRoles() == null)
super.setRoles(getManagedRole());
else
{
List<String> roles = RoleManager.getRolesFromSerial(managedRole);
for(String role:roles)
{
if(super.getRoles().indexOf(role) < 0)
{
addRole(getManagedRole());
}
}
}
}
return super.getRoles();
}
 
}
/impl/src/java/pt/estgp/estgweb/domain/CourseUnitSummaryImpl.java
New file
0,0 → 1,28
package pt.estgp.estgweb.domain;
 
import org.apache.log4j.Logger;
 
import java.util.List;
import java.util.Date;
import java.io.Serializable;
 
import pt.estgp.estgweb.domain.enums.AnnouncementStyleEnum;
import pt.estgp.estgweb.utils.RoleManager;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
* @time 10:27:25
* @see pt.estgp.estgweb.domain
*/
public class CourseUnitSummaryImpl extends CourseUnitSummary
{
 
private static final Logger logger = Logger.getLogger(CourseUnitSummaryImpl.class);
 
 
public Serializable getSerializable()
{
return getId();
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitSummaryView.java
New file
0,0 → 1,90
package pt.estgp.estgweb.domain.views;
 
import pt.estgp.estgweb.domain.CourseUnitSummary;
import pt.estgp.estgweb.web.utils.DatesUtils;
 
import java.io.Serializable;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
* @time 19:34:49
* @see pt.estgp.estgweb.domain.views
*/
public class CourseUnitSummaryView extends DomainObjectView
{
 
 
private CourseUnitSummary summary;
private long id;
private String title;
private String description;
private int number;
private String date;
private int students;
 
 
 
 
public CourseUnitSummaryView(CourseUnitSummary summary)
{
super(summary);
init(summary);
}
public void init(CourseUnitSummary summary)
{
this.summary = summary;
this.id = summary.getId();
this.title = summary.getTitulo();
this.description = summary.getDescricao();
this.date = DatesUtils.getStringFromDate(summary.getDataAula());
this.number = summary.getNumeroAula();
this.students = summary.getAlunosPresentes();
}
 
// public void persistViewInObject(Announcement announcement)
// {
// }
 
 
public Class getReferenceClass()
{
return CourseUnitSummary.class;
}
 
public Serializable getSerializable()
{
return id;
}
 
 
public long getId()
{
return id;
}
 
public String getTitle()
{
return title;
}
 
public String getDescription()
{
return description;
}
 
public int getNumber()
{
return number;
}
 
public String getDate()
{
return date;
}
 
public int getStudents()
{
return students;
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/RecordView.java
36,6 → 36,7
private String copyright;
private String identifier;
private String repositoryStream;
private String creatorsStr;
private List<UserView> creators = new ArrayList<UserView>();
private List<UserView> contributors = new ArrayList<UserView>();
private RepositoryFileImpl repositoryFile;
91,6 → 92,8
this.copyright = record.getCopyright();
this.identifier = record.getIdentifier();
this.repositoryStream = record.getRepositoryStream();
 
this.creators = UserView.getViews(new ArrayList<User>(record.getCreators()));
this.contributors = UserView.getViews(new ArrayList<User>(record.getContributors()));
if(repositoryStream != null)
120,7 → 123,8
r.setDescripion(description);
r.setPublisher(publisher);
r.setIdentifier(identifier);
r.setCreators(UserView.loadUsers(creators));
if(creators != null && creators.size() > 0)
r.setCreators(UserView.loadUsers(creators));
r.setContributors(UserView.loadUsers(contributors));
}
 
/impl/src/java/pt/estgp/estgweb/domain/views/BlogView.java
10,6 → 10,7
import java.util.List;
 
import jomm.dao.impl.AbstractDao;
import jomm.utils.StringsUtils;
 
/**
* @author Jorge Machado
243,6 → 244,10
{
return title;
}
public String getFormatedaaTitle()
{
return StringsUtils.getEscapeHtmlText(title);
}
 
public void setTitle(String title)
{
254,6 → 259,11
return description;
}
 
public String getFormatedDescription()
{
return StringsUtils.getFormatedText(description);
}
 
public void setDescription(String description)
{
this.description = description;
/impl/src/java/pt/estgp/estgweb/domain/views/BlogPostView.java
1,6 → 1,7
package pt.estgp.estgweb.domain.views;
 
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.RoleManager;
import org.apache.log4j.Logger;
8,6 → 9,8
import java.util.List;
import java.io.Serializable;
 
import jomm.utils.StringsUtils;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
26,6 → 29,9
private String text;
private Image image;
private GenericUser owner;
private String ownerUsername;
private String ownerName;
private String ownerEmail;
private boolean status;
private BlogPost blogPost;
private long blogId;
45,6 → 51,9
this.status = blogPost.isStatus();
this.id = blogPost.getId();
this.owner = blogPost.getOwner();
ownerUsername = owner.getUsername();
ownerName = owner.getName();
ownerEmail = owner.getEmail();
this.blogId = blogPost.getBlog().getId();
this.internal = blogPost.getBlog().isInternal();
}
114,6 → 123,11
return title;
}
 
public String getFormatedTitle()
{
return StringsUtils.getEscapeHtmlText(title);
}
 
public void setTitle(String title)
{
this.title = title;
124,6 → 138,11
return text;
}
 
public String getFormatedText()
{
return StringsUtils.getFormatedText(text);
}
 
public void setText(String text)
{
this.text = text;
176,20 → 195,19
 
public String getOwnerEmail()
{
if (owner instanceof User)
return ((User) owner).getEmail();
else
return null;
return ownerEmail;
}
 
public String getOwnerUsername()
{
if (owner instanceof User)
return ((User) owner).getUsername();
else
return null;
return ownerUsername;
}
 
public String getOwnerName()
{
return ownerName;
}
 
public boolean isInternal()
{
return internal;
/impl/src/java/pt/estgp/estgweb/domain/views/AnnouncementView.java
14,6 → 14,8
import org.apache.log4j.Logger;
import jomm.utils.StringsUtils;
 
import javax.servlet.http.HttpServletRequest;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
46,6 → 48,9
private boolean status = true;
private boolean internal;
private GenericUser owner;
private String ownerUsername;
private String ownerName;
private String ownerEmail;
private String style;
private String internalUrlServer;
private String internalUrlPath;
70,8 → 75,6
}
public void init(Announcement announcement)
{
 
 
this.announcement = announcement;
this.title = announcement.getTitle();
this.text = announcement.getText();
81,8 → 84,8
this.bigImageId = announcement.getBigImage().getId();
if(announcement.getSmallImage() != null)
this.smallImageId = announcement.getSmallImage().getId();
this.url =announcement.getUrl();
this.type =announcement.getType();
this.url = announcement.getUrl();
this.type = announcement.getType();
this.targetRoles = RoleManager.getRolesFromSerial(announcement.getTargetRoles());
this.status=announcement.isStatus();
this.id = announcement.getId();
91,6 → 94,9
this.expireDate = announcement.getExpireDate();
this.choosedOwnerRole = announcement.getChoosedOwnerRole();
this.owner = announcement.getOwner();
this.ownerUsername = owner.getUsername();
this.ownerName = owner.getName();
this.ownerEmail = owner.getEmail();
this.internalUrlServer = announcement.getInternalUrlServer();
this.internalUrlPath = announcement.getInternalUrlPath();
this.style = announcement.getStyle();
130,7 → 136,7
((CourseUnitAnnouncement)announcement).setCourseUnitInternal(courseUnitInternal);
}
}
 
public boolean isCourseUnitInternal()
{
return courseUnitInternal;
308,6 → 314,14
return url;
}
 
public String getUrl(HttpServletRequest request) {
if(url != null && url.startsWith("/"))
return request.getContextPath() + url;
else
return url;
}
 
 
public void setUrl(String url) {
this.url = url;
}
357,8 → 371,10
return StringsUtils.getFormatedText(text);
}
 
public Boolean getHaveAllText()
public Boolean getTextBiggerThenPermited()
{
if(getInternalUrlPath() != null && getInternalUrlPath().trim().length()>0)
return false;
if(getType().equals("top.flash.news"))
{
return getText().length() > TEXT_SUMMARY_SIZE;
416,10 → 432,17
 
public String getOwnerUsername()
{
if (owner instanceof User)
return ((User) owner).getUsername();
else
return null;
return ownerUsername;
}
 
 
public String getOwnerName()
{
return ownerName;
}
 
public String getOwnerEmail()
{
return ownerEmail;
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitAssignementView.java
229,9 → 229,11
this.courseUnitDeliverableView = courseUnitDeliverableView;
}
 
private static final long milisecondsof24Hours=24*60*60*1000;
public boolean isActive()
{
return courseUnitAssignement.getDeliverDate() != null && courseUnitAssignement.getDeliverDate().getTime() >= System.currentTimeMillis();
return courseUnitAssignement.getDeliverDate() != null && courseUnitAssignement.getDeliverDate().getTime() + milisecondsof24Hours >= System.currentTimeMillis();
}
 
 
263,7 → 265,7
userSession.getUser() != null &&
((UserImpl) userSession.getUser()).isInCourseUnit(courseUnitId) &&
!deliverType.equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) &&
(lateDelivers || courseUnitAssignement.getDeliverDate().getTime() >= System.currentTimeMillis());
(lateDelivers || courseUnitAssignement.getDeliverDate().getTime() + milisecondsof24Hours >= System.currentTimeMillis());
}
 
public boolean isLateDeliver()
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitDeliverableView.java
148,8 → 148,10
this.deliverDateStr = deliverDateStr;
}
 
private static final long milisecondsof24Hours=24*60*60*1000;
 
public boolean isLateDeliver()
{
return getDeliverDate().getTime() > courseUnitAssignementView.getDeliverDateDate().getTime();
return getDeliverDate().getTime() > milisecondsof24Hours + courseUnitAssignementView.getDeliverDateDate().getTime();
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java
37,6 → 37,7
private String pathIntranet;
private String normalizedName;
private List<AnnouncementView> announcements;
private List<CourseUnitSummaryView> summaries;
 
private CourseUnit courseUnit;
private Set<UserView> teachers;
44,6 → 45,8
 
private String objectives;
private String programStreamId;
private boolean validProgram;
private UserView validatorUser;
private int programSize;
private String extension;
private List<CourseUnitAssignementView> courseUnitAssignements;
68,29 → 71,35
public CourseUnitView(CourseUnit courseUnit, boolean initTeachers, boolean initStudents )
{
super(courseUnit);
init(courseUnit, initTeachers, initStudents,false);
init(courseUnit, initTeachers, initStudents,false,false);
}
 
public CourseUnitView(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog )
{
super(courseUnit);
init(courseUnit, initTeachers, initStudents, initBlog);
init(courseUnit, initTeachers, initStudents, initBlog,false);
}
 
public CourseUnitView(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog, boolean validatorPerson )
{
super(courseUnit);
init(courseUnit, initTeachers, initStudents, initBlog, validatorPerson);
}
 
public CourseUnitView(CourseUnit courseUnit)
{
super(courseUnit);
init(courseUnit, false,false,false);
init(courseUnit, false,false,false,false);
}
 
public CourseUnitView(CourseUnit courseUnit, BlogView b)
{
super(courseUnit);
this.blog = b;
init(courseUnit, false,false,false);
init(courseUnit, false,false,false,false);
}
 
private void init(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog)
private void init(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog, boolean validatorUser)
{
this.pathIntranet = courseUnit.getPathIntranet();
this.normalizedName = courseUnit.getNormalizedName();
103,7 → 112,16
this.courseCode = courseUnit.getCourseCode();
this.objectives = courseUnit.getObjectives();
if(courseUnit.getProgramStreamId() != null)
{
programStreamId = courseUnit.getProgramStreamId();
validProgram = courseUnit.isValidProgram();
if(validatorUser)
{
if(courseUnit.getValidatorUser() != null)
this.validatorUser = new UserView(courseUnit.getValidatorUser());
}
}
 
// if(courseUnit.getBlog() != null)
// this.blog = new BlogView(courseUnit.getBlog());
this.id = courseUnit.getId();
133,6 → 151,7
{
courseId = courseUnit.getCourse().getId();
}
 
}
 
public long getCourseId()
293,6 → 312,11
 
public String getSemestre()
{
if(semestre == null)
{
logger.error("Unit" + getId() + " " + getName() + "" + " - " + getCourseName() + " " + getImportYear() + " with no SEMESTRE SET, returning S1");
return "S1";
}
return semestre;
}
 
412,5 → 436,54
}
 
 
public boolean isValidProgram()
{
return validProgram;
}
 
public void setValidProgram(boolean validProgram)
{
this.validProgram = validProgram;
}
 
public UserView getValidatorUser()
{
return validatorUser;
}
 
public void setValidatorUser(UserView validatorUser)
{
this.validatorUser = validatorUser;
}
 
 
public void setSummaries(List<CourseUnitSummaryView> summaries)
{
this.summaries = summaries;
}
 
public List<CourseUnitSummaryView> getSummaries()
{
return summaries;
}
 
public String getTeachersSnipet()
{
StringBuilder strBuilder = new StringBuilder();
if(teachers != null && teachers.size() > 0)
{
for(UserView userView: teachers)
{
strBuilder
.append(" <a href=\"mailto:")
.append(userView.getEmail())
.append("\">")
.append(userView.getName())
.append("</a>")
.append(" ");
 
}
}
return strBuilder.toString();
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/CourseView.java
10,6 → 10,8
import java.util.ArrayList;
import java.io.Serializable;
 
import jomm.utils.AutoFillArrayList;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
31,6 → 33,12
private UserView coordinator;
private UserView director;
private List<CourseUnitView> courseUnits;
private List<CourseUnitView> courseUnitsWithNoProgramS1;
private List<CourseUnitView> courseUnitsWithProgramCheckedS1;
private List<CourseUnitView> courseUnitsWithProgramNotCheckedS1;
private List<CourseUnitView> courseUnitsWithNoProgramS2;
private List<CourseUnitView> courseUnitsWithProgramCheckedS2;
private List<CourseUnitView> courseUnitsWithProgramNotCheckedS2;
private String studiesPlanStreamId;
private RepositoryFileImpl studiesPlan;
private String htmlResult;
98,7 → 106,7
courseUnits = new ArrayList<CourseUnitView>();
for(CourseUnit c: course.getCourseUnits())
{
CourseUnitView cUV = new CourseUnitView(c);
CourseUnitView cUV = new CourseUnitView(c,true,false,false,false);
courseUnits.add(cUV);
}
}
334,4 → 342,75
{
this.externalSitePath = externalSitePath;
}
 
 
public List<CourseUnitView> getCourseUnitsWithNoProgramS1()
{
return courseUnitsWithNoProgramS1;
}
 
public void setCourseUnitsWithNoProgramS1(List<CourseUnitView> courseUnitsWithNoProgramS1)
{
this.courseUnitsWithNoProgramS1 = courseUnitsWithNoProgramS1;
}
 
public List<CourseUnitView> getCourseUnitsWithProgramCheckedS1()
{
if(courseUnitsWithProgramCheckedS1==null)
courseUnitsWithProgramCheckedS1 = new AutoFillArrayList<CourseUnitView>(CourseUnitView.class);
return courseUnitsWithProgramCheckedS1;
}
 
public void setCourseUnitsWithProgramCheckedS1(List<CourseUnitView> courseUnitsWithProgramCheckedS1)
{
this.courseUnitsWithProgramCheckedS1 = courseUnitsWithProgramCheckedS1;
}
 
public List<CourseUnitView> getCourseUnitsWithProgramNotCheckedS1()
{
if(courseUnitsWithProgramNotCheckedS1==null)
courseUnitsWithProgramNotCheckedS1 = new AutoFillArrayList<CourseUnitView>(CourseUnitView.class);
return courseUnitsWithProgramNotCheckedS1;
}
 
public void setCourseUnitsWithProgramNotCheckedS1(List<CourseUnitView> courseUnitsWithProgramNotCheckedS1)
{
this.courseUnitsWithProgramNotCheckedS1 = courseUnitsWithProgramNotCheckedS1;
}
 
public List<CourseUnitView> getCourseUnitsWithNoProgramS2()
{
return courseUnitsWithNoProgramS2;
}
 
public void setCourseUnitsWithNoProgramS2(List<CourseUnitView> courseUnitsWithNoProgramS2)
{
this.courseUnitsWithNoProgramS2 = courseUnitsWithNoProgramS2;
}
 
public List<CourseUnitView> getCourseUnitsWithProgramCheckedS2()
{
if(courseUnitsWithProgramCheckedS2==null)
courseUnitsWithProgramCheckedS2 = new AutoFillArrayList<CourseUnitView>(CourseUnitView.class);
return courseUnitsWithProgramCheckedS2;
}
 
public void setCourseUnitsWithProgramCheckedS2(List<CourseUnitView> courseUnitsWithProgramCheckedS2)
{
this.courseUnitsWithProgramCheckedS2 = courseUnitsWithProgramCheckedS2;
}
 
public List<CourseUnitView> getCourseUnitsWithProgramNotCheckedS2()
{
if(courseUnitsWithProgramNotCheckedS2==null)
courseUnitsWithProgramNotCheckedS2 = new AutoFillArrayList<CourseUnitView>(CourseUnitView.class);
return courseUnitsWithProgramNotCheckedS2;
}
 
public void setCourseUnitsWithProgramNotCheckedS2(List<CourseUnitView> courseUnitsWithProgramNotCheckedS2)
{
this.courseUnitsWithProgramNotCheckedS2 = courseUnitsWithProgramNotCheckedS2;
}
 
 
}
/impl/src/java/pt/estgp/estgweb/domain/UrlStatImpl.java
1,5 → 1,9
package pt.estgp.estgweb.domain;
 
import org.apache.commons.httpclient.util.URIUtil;
import org.apache.commons.httpclient.URIException;
import org.apache.log4j.Logger;
 
import java.io.Serializable;
import java.util.HashSet;
import java.util.Date;
12,6 → 16,7
*/
public class UrlStatImpl extends UrlStat
{
private static final Logger logger = Logger.getLogger(UrlStatImpl.class);
 
public UrlStatImpl()
{
34,7 → 39,14
public String getName()
{
if(super.getName() == null)
return getRelativePath();
try
{
return URIUtil.decode(getRelativePath());
}
catch (URIException e)
{
logger.error(e,e);
}
return super.getName();
}
}
/impl/src/java/pt/estgp/estgweb/domain/DomainObjectFactory.java
66,6 → 66,11
return new CourseUnitAnnouncementImpl();
}
 
public static CourseUnitSummaryImpl createCourseUnitSummaryImpl()
{
return new CourseUnitSummaryImpl();
}
 
public static CourseImpl createCourseImpl()
{
return new CourseImpl();
/impl/src/java/pt/estgp/estgweb/domain/GenericUserImpl.java
97,6 → 97,4
{
return isSuperuser() || isAdmin();
}
 
public abstract String getUsername();
}
/impl/src/java/pt/estgp/estgweb/web/tags/CanNotAddContentTag.java
New file
0,0 → 1,80
package pt.estgp.estgweb.web.tags;
 
import org.apache.log4j.Logger;
import org.apache.struts.util.RequestUtils;
 
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
 
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.IAddContents;
 
public class CanNotAddContentTag extends BodyTagSupport
{
 
private static final Logger logger = Logger.getLogger(CanNotAddContentTag.class);
 
private String name;
 
private String property;
 
public String getName()
{
return name;
}
 
public void setName(String name)
{
this.name = name;
}
 
public String getProperty()
{
return property;
}
 
public void setProperty(String property)
{
this.property = property;
}
 
public int doStartTag() throws JspException
{
if (!go())
{
return EVAL_BODY_TAG;
}
else
return SKIP_BODY;
}
 
public boolean go() throws JspException
{
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(pt.estgp.estgweb.Globals.USER_SESSION_KEY);
IAddContents iAddContents = (IAddContents) RequestUtils.lookup(pageContext, name, property, null);
return iAddContents != null && userSession.getUser() != null && (iAddContents.canAddContent(userSession.getUser()));
}
 
public int doEndTag() throws JspException
{
if (go())
{
String toPage = bodyContent.getString().trim();
JspWriter writer = pageContext.getOut();
try
{
writer.write(toPage);
}
catch (Exception e)
{
logger.error(e, e);
throw new JspException(e);
}
}
// Continue processing this page
return EVAL_PAGE;
}
 
 
}
/impl/src/java/pt/estgp/estgweb/web/tags/PageUrlStatTag.java
51,7 → 51,7
if(attributes == null)
attributes = "";
 
String url = "<a " + attributes + " href=\"" + hrequest.getContextPath() + "/urlstat/startUrlStat.do?relativePaths[0].value=" + URIUtil.encodePath(relativePath,"ISO-8859-1") + "\">";
String url = "<a " + attributes + " href=\"" + hrequest.getContextPath() + "/urlstat/startUrlStat.do?relativePaths[0].value=" + URIUtil.encodeWithinQuery(relativePath,"ISO-8859-1") + "\">";
String endUrl = "</a>";
String toPage = bodyContent.getString().trim();
JspWriter writer = pageContext.getOut();
77,5 → 77,10
return EVAL_PAGE;
}
 
public static void main(String[] args)
{
}
 
 
}
/impl/src/java/pt/estgp/estgweb/web/tags/RealOwnerTag.java
New file
0,0 → 1,99
package pt.estgp.estgweb.web.tags;
 
import org.apache.log4j.Logger;
import org.apache.struts.util.RequestUtils;
 
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
 
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.IOwned;
import pt.estgp.estgweb.Globals;
 
public class RealOwnerTag extends BodyTagSupport
{
 
private static final Logger logger = Logger.getLogger(RealOwnerTag.class);
 
private String name;
 
private String property;
 
private String valid;
 
public String getName()
{
return name;
}
 
public void setName(String name)
{
this.name = name;
}
 
public String getProperty()
{
return property;
}
 
public void setProperty(String property)
{
this.property = property;
}
 
 
public String getValid()
{
return valid;
}
 
public void setValid(String valid)
{
this.valid = valid;
}
 
public int doStartTag() throws JspException
{
if (go())
{
return EVAL_BODY_TAG;
}
else
return SKIP_BODY;
}
 
public boolean go() throws JspException
{
 
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(Globals.USER_SESSION_KEY);
 
IOwned owned = (IOwned) RequestUtils.lookup(pageContext, name, property, null);
 
return owned.getOwner() == null || userSession.getUser() != null && (owned.getOwner().getId() == userSession.getUser().getId());
 
}
 
public int doEndTag() throws JspException
{
if(go())
{
String toPage = bodyContent.getString().trim();
JspWriter writer = pageContext.getOut();
try
{
writer.write(toPage);
}
catch (Exception e)
{
logger.error(e, e);
throw new JspException(e);
}
}
 
// Continue processing this page
return EVAL_PAGE;
}
 
 
}
/impl/src/java/pt/estgp/estgweb/web/WebProxy.java
40,12 → 40,17
String server = (String) request.getAttribute("server");
String useOutputStream = (String) request.getAttribute("useOutputStream");
String encoding = (String) request.getAttribute("encoding");
String proxyHost = (String) request.getAttribute("proxy.host");
String proxyPort = (String) request.getAttribute("proxy.port");
logger.info("server:" + server);
logger.info("path:" + path);
logger.info("proxyHost:" + proxyHost);
logger.info("proxyPort:" + proxyPort);
if(path != null)
{
try
{
 
URL url = new URL(server + URIUtil.encodePath(path,"ISO-8859-1"));
 
URLConnection con = url.openConnection();
/impl/src/java/pt/estgp/estgweb/web/LayoutController.java
65,6 → 65,11
request.setAttribute("path", path);
request.setAttribute("server", server);
 
String proxyHost = ConfigProperties.getProperty(serverParameter + ".proxy.host");
String proxyPort = ConfigProperties.getProperty(serverParameter + ".proxy.port");
request.setAttribute("proxy.host",proxyHost);
request.setAttribute("proxy.port",proxyPort);
 
try
{
// URL url = new URL(server + path);
/impl/src/java/pt/estgp/estgweb/web/form/profile/ProfileForm.java
153,6 → 153,14
public ActionErrors validate(org.apache.struts.action.ActionMapping actionMapping, javax.servlet.http.HttpServletRequest httpServletRequest)
{
ActionErrors errors = new ActionErrors();
if(userView.getUsername() == null || userView.getUsername().length() == 0)
{
addMessageWithKeys(errors, httpServletRequest, "errors.required","username");
}
if(userView.getEmail() == null || userView.getEmail().length() == 0)
{
addMessageWithKeys(errors, httpServletRequest, "errors.required","email");
}
if (userView.getPop3password().length() > 0 && !userView.getPop3password().equals(userView.getPop3passwordAgain()))
addMessage(errors, httpServletRequest, "errors.diferent.passwords.pop");
else
/impl/src/java/pt/estgp/estgweb/web/form/courses/CourseForm.java
1,9 → 1,9
package pt.estgp.estgweb.web.form.courses;
 
import pt.estgp.estgweb.web.form.ApplicationForm;
import pt.estgp.estgweb.web.form.commons.TeachersForm;
import pt.estgp.estgweb.domain.views.CourseView;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.services.courseunits.DirectedCoordinatedCourses;
 
import java.util.List;
 
18,6 → 18,8
{
private CourseView courseView;
private FormFile studiesPlan;
private DirectedCoordinatedCourses directedCoordinatedCourses = new DirectedCoordinatedCourses();
private String importYear;
 
 
public CourseForm()
30,6 → 32,26
return courseView;
}
 
public DirectedCoordinatedCourses getDirectedCoordinatedCourses()
{
return directedCoordinatedCourses;
}
 
public void setDirectedCoordinatedCourses(DirectedCoordinatedCourses directedCoordinatedCourses)
{
this.directedCoordinatedCourses = directedCoordinatedCourses;
}
 
public String getImportYear()
{
return importYear;
}
 
public void setImportYear(String importYear)
{
this.importYear = importYear;
}
 
public void setCourseView(CourseView courseView)
{
this.courseView = courseView;
/impl/src/java/pt/estgp/estgweb/web/controllers/profile/ProfileController.java
11,6 → 11,7
import pt.estgp.estgweb.domain.views.UserView;
import pt.estgp.estgweb.domain.views.RecordView;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException;
50,8 → 51,14
ActionErrors errors = profileForm.validate(mapping, request);
if (!errors.isEmpty())
{
UserView uV = loadUser(profileForm.getUserView().getId(), request, response);
profileForm.getUserView().setPasswordLocal(uV.isPasswordLocal());
if(profileForm.getUserView().getId() > 0)
{
UserView uV = loadUser(profileForm.getUserView().getId(), request, response);
profileForm.getUserView().setPasswordLocal(uV.isPasswordLocal());
UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);
uV.setUserRoles((List<String>) userSession.get(TARGET_ROLES_KEY));
profileForm.setSelectedRoles(uV.getUserRoles());
}
saveMessages(request, errors);
return mapping.getInputForward();
}
63,7 → 70,20
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"object"};
Object[] args = new Object[]{userView, profileForm.getTypeClass()};
userView = (UserView) sm.execute(RequestUtils.getRequester(request, response), "SubmitUser", args, names);
try
{
userView = (UserView) sm.execute(RequestUtils.getRequester(request, response), "SubmitUser", args, names);
}
catch (AlreadyExistsException e)
{
if(profileForm.getUserView().getId() > 0)
{
UserView uV = loadUser(profileForm.getUserView().getId(), request, response);
profileForm.getUserView().setPasswordLocal(uV.isPasswordLocal());
}
addErrorWithKeys(request,"user.exists",e.getMessage());
return mapping.getInputForward();
}
profileForm.setUserView(userView);
if (userSession.getUser().getId() == userView.getId())
{
177,6 → 197,7
throw e;
}
}
 
public ActionForward home(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
188,7 → 209,7
ProfileForm pF = (ProfileForm) form;
UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);
long userToLoad;
if(pF.getUserView().getId() > 0)
if (pF.getUserView().getId() > 0)
userToLoad = pF.getUserView().getId();
else
userToLoad = userSession.getUser().getId();
206,10 → 227,11
throw e;
}
}
 
public ActionForward grades(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try
217,7 → 239,7
ProfileForm pF = (ProfileForm) form;
UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);
long userToLoad;
if(pF.getUserView().getId() > 0)
if (pF.getUserView().getId() > 0)
userToLoad = pF.getUserView().getId();
else
userToLoad = userSession.getUser().getId();
238,9 → 260,9
 
 
public ActionForward homeCode(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try
306,6 → 328,7
UserView uV = (UserView) sm.execute(RequestUtils.getRequester(request, response), "LoadUserWithRecordsById", args, names);
return uV;
}
 
private UserView loadUserWithGrades(long id, HttpServletRequest request, HttpServletResponse response) throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
{
IServiceManager sm = ServiceManager.getInstance();
314,6 → 337,7
UserView uV = (UserView) sm.execute(RequestUtils.getRequester(request, response), "LoadUserWithGradesById", args, names);
return uV;
}
 
public UserView loadUserWithRecordsCode(int code, HttpServletRequest request, HttpServletResponse response) throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
{
IServiceManager sm = ServiceManager.getInstance();
335,7 → 359,7
ProfileForm profileForm = new ProfileForm();
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{fromRequest.getTextToSearch(),fromRequest.getTypeToSearch()};
Object[] args = new Object[]{fromRequest.getTextToSearch(), fromRequest.getTypeToSearch()};
List<UserView> uVs = (List<UserView>) sm.execute(RequestUtils.getRequester(request, response), "SearchUser", args, names);
profileForm.setUsersFind(uVs);
request.setAttribute("ProfileForm", profileForm);
357,7 → 381,7
}
 
public ActionForward delete(ActionMapping mapping,
ActionForm form ,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
368,33 → 392,33
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{new Long(request.getParameter("id"))};
Boolean status= (Boolean) sm.execute(RequestUtils.getRequester(request, response),"DeleteUser",args,names);
if(status)
Boolean status = (Boolean) sm.execute(RequestUtils.getRequester(request, response), "DeleteUser", args, names);
if (status)
{
addMessage(request,"user.deleted.sucess");
addMessage(request, "user.deleted.sucess");
return mapping.findForward("success");
}
else
{
addMessage(request,"user.deleted.fail");
addMessage(request, "user.deleted.fail");
return mapping.findForward("success");
}
}
catch(FilterChainFailedException e)
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e,e);
logger.error(e, e);
throw e;
}
}
 
public ActionForward createRecord(ActionMapping mapping,
ActionForm form ,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try
404,36 → 428,42
String[] names = new String[]{"object"};
 
Object[] args;
if(profileForm.getUploadFile() != null)
args = new Object[]{profileForm.getRecordView(),profileForm.getUploadFile().getInputStream(),profileForm.getUploadFile().getFileName(),profileForm.getUploadFile().getContentType(),profileForm.getUploadFile().getFileSize()};
if (profileForm.getUploadFile() != null)
args = new Object[]{profileForm.getRecordView(), profileForm.getUploadFile().getInputStream(), profileForm.getUploadFile().getFileName(), profileForm.getUploadFile().getContentType(), profileForm.getUploadFile().getFileSize()};
else
args = new Object[]{profileForm.getRecordView(),null,null,null,0};
args = new Object[]{profileForm.getRecordView(), null, null, null, 0};
 
boolean newRecord = false;
if(profileForm.getRecordView().getId() <= 0)
newRecord = true;
UserView userView;
if(profileForm.getRecordView().getId() > 0)
userView = (UserView) sm.execute(RequestUtils.getRequester(request, response),"EditUserProfileRecord",args,names);
else
userView = (UserView) sm.execute(RequestUtils.getRequester(request, response),"CreateUserProfileRecord",args,names);
if (profileForm.getRecordView().getId() > 0)
userView = (UserView) sm.execute(RequestUtils.getRequester(request, response), "EditUserProfileRecord", args, names);
else
userView = (UserView) sm.execute(RequestUtils.getRequester(request, response), "CreateUserProfileRecord", args, names);
 
addMessage(request,"profile.record.add.sucess",profileForm.getRecordView().getTitle());
if(newRecord)
addMessage(request, "profile.record.add.sucess", profileForm.getRecordView().getTitle());
else
addMessage(request, "profile.record.updated.sucess", profileForm.getRecordView().getTitle());
profileForm.setUserView(userView);
return mapping.findForward("home");
}
catch(FilterChainFailedException e)
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e,e);
logger.error(e, e);
throw e;
}
}
 
public ActionForward deleteRecord(ActionMapping mapping,
ActionForm form ,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try
442,28 → 472,28
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args;
args = new Object[]{profileForm.getRecordView().getId()};
args = new Object[]{profileForm.getRecordView().getId()};
 
UserView userView = (UserView) sm.execute(RequestUtils.getRequester(request, response),"DeleteUserProfileRecord",args,names);
addMessage(request,"profile.record.deleted.sucess");
UserView userView = (UserView) sm.execute(RequestUtils.getRequester(request, response), "DeleteUserProfileRecord", args, names);
addMessage(request, "profile.record.deleted.sucess");
profileForm.setUserView(userView);
return mapping.findForward("home");
}
catch(FilterChainFailedException e)
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e,e);
logger.error(e, e);
throw e;
}
}
 
public ActionForward loadEditRecord(ActionMapping mapping,
ActionForm form ,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try
472,22 → 502,22
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args;
args = new Object[]{profileForm.getRecordView().getId()};
args = new Object[]{profileForm.getRecordView().getId()};
 
RecordView recordView = (RecordView) sm.execute(RequestUtils.getRequester(request, response),"LoadEditUserProfileRecord",args,names);
RecordView recordView = (RecordView) sm.execute(RequestUtils.getRequester(request, response), "LoadEditUserProfileRecord", args, names);
UserView uV = recordView.getOwnerUserView();
addMessage(request,"profile.record.deleted.sucess");
// addMessage(request, "profile.record.deleted.sucess");
profileForm.setUserView(uV);
profileForm.setRecordView(recordView);
return mapping.findForward("curriculum");
}
catch(FilterChainFailedException e)
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e,e);
logger.error(e, e);
throw e;
}
}
/impl/src/java/pt/estgp/estgweb/web/controllers/courses/CoursesController.java
11,6 → 11,7
import pt.estgp.estgweb.filters.exceptions.NotFoundException;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.services.common.ISearchResults;
import pt.estgp.estgweb.services.courseunits.DirectedCoordinatedCourses;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException;
175,4 → 176,102
return mapping.findForward("error500");
}
}
 
 
public ActionForward loadCoursesPrograms(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
CourseForm cF = (CourseForm) form;
String importYear = cF.getImportYear();
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"importYear"};
Object[] args = new String[]{importYear};
DirectedCoordinatedCourses directedCoordinatedCourses = (DirectedCoordinatedCourses) sm.execute(RequestUtils.getRequester(request, response), "LoadCoursesProgramsForServices", args, names);
cF.setDirectedCoordinatedCourses(directedCoordinatedCourses);
return mapping.findForward("load.courses.programs");
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (NotFoundException e)
{
return mapping.findForward("error404");
}
catch (Throwable e)
{
logger.error(e, e);
return mapping.findForward("error500");
}
}
 
public ActionForward loadDirectedCoordininatedCourses(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
 
CourseForm cF = (CourseForm) form;
String importYear = cF.getImportYear();
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"importYear"};
Object[] args = new String[]{importYear};
DirectedCoordinatedCourses directedCoordinatedCourses = (DirectedCoordinatedCourses) sm.execute(RequestUtils.getRequester(request, response), "LoadDirectedCoordinatedCoursesForUserInSession", args, names);
cF.setDirectedCoordinatedCourses(directedCoordinatedCourses);
return mapping.findForward("load.directed.coordinated.courses");
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (NotFoundException e)
{
return mapping.findForward("error404");
}
catch (Throwable e)
{
logger.error(e, e);
return mapping.findForward("error500");
}
}
 
public ActionForward updateDirectedCoordininatedCourses(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
CourseForm cF = (CourseForm) form;
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"directedCoordinatedCourses"};
Object[] args = new Object[]{cF.getDirectedCoordinatedCourses()};
DirectedCoordinatedCourses directedCoordinatedCourses = (DirectedCoordinatedCourses) sm.execute(RequestUtils.getRequester(request, response), "UpdateDirectedCoordinatedCoursesForUserInSession", args, names);
cF.setDirectedCoordinatedCourses(directedCoordinatedCourses);
addMessage(request,"course.directed.coordinated.courses.updated.success",""+directedCoordinatedCourses.getUpdated());
return mapping.findForward("confirm.courses.programs");
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (NotFoundException e)
{
return mapping.findForward("error404");
}
catch (Throwable e)
{
logger.error(e, e);
return mapping.findForward("error500");
}
}
}
/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsAdminController.java
61,7 → 61,7
}
}
 
public ActionForward createCourseUnitWorksBackup(ActionMapping mapping,
public ActionForward createAllCourseUnitWorksBackup(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
92,6 → 92,37
}
}
 
public ActionForward createImportYearCourseUnitWorksBackup(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
String importYear = request.getParameter("importYear");
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{importYear};
String tmpFile = (String) sm.execute(RequestUtils.getRequester(request, response), "CreateImportYearCourseUnitWorksBackup", args, names);
request.getRequestDispatcher("/tmpStream/" + tmpFile).forward(request,response);
return null;
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (NotFoundException e)
{
return mapping.findForward("error404");
}
catch (Throwable e)
{
logger.error(e, e);
return mapping.findForward("error500");
}
}
 
 
public ActionForward createOrUpdateAdmin(ActionMapping mapping,
/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsController.java
50,6 → 50,7
private static final Logger logger = Logger.getLogger(CourseUnitsController.class);
 
private ActionForward createBackup(String service,
Object[] args,
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
60,7 → 61,6
{
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{};
String tmpFile = (String) sm.execute(RequestUtils.getRequester(request, response), service, args, names);
request.getRequestDispatcher("/tmpStream/" + tmpFile).forward(request,response);
return null;
85,7 → 85,8
HttpServletResponse response)
throws ServletException
{
return createBackup("CreateUserAllCourseUnitWorksBackup",mapping,form,request,response);
String[] args = new String[]{};
return createBackup("CreateUserAllCourseUnitWorksBackup",args,mapping,form,request,response);
}
public ActionForward createUserCourseUnitActualYearWorksBackup(ActionMapping mapping,
94,7 → 95,9
HttpServletResponse response)
throws ServletException
{
return createBackup("CreateUserActualYearCourseUnitWorksBackup",mapping,form,request,response);
String importYear = request.getParameter("importYear");
String[] args = new String[]{importYear};
return createBackup("CreateUserImportYearCourseUnitWorksBackup",args,mapping,form,request,response);
}
 
private ActionForward loadCourseUnitAndForward(CourseUnitsForm cUF, long id, boolean initTeachers, boolean initStudents, ActionMapping mapping, HttpServletRequest request, HttpServletResponse response)
/impl/src/java/pt/estgp/estgweb/web/controllers/announcements/AnnouncementsController.java
54,7 → 54,7
AnnouncementsForm announcementForm = (AnnouncementsForm) form;
AnnouncementView view = announcementForm.getAnnouncementView();
String finalUrl = "";
if (announcementForm.getUrl() != null && !announcementForm.getUrl().equals(""))
if (announcementForm.getUrl() != null && announcementForm.getUrl().length() > 0)
{
finalUrl = announcementForm.getUrlProtocol() + announcementForm.getUrl();
view.setUrl(finalUrl);
139,6 → 139,20
announcementsForm.setStartDate(DatesUtils.getStringFromDate(aV.getStartDate()));
announcementsForm.setExpireDate(DatesUtils.getStringFromDate(aV.getExpireDate()));
announcementsForm.setSelectedRoles(aV.getTargetRoles());
if(aV.getUrl() != null)
{
int indexProtocol = aV.getUrl().indexOf("://");
if(indexProtocol > 0)
{
announcementsForm.setUrl(aV.getUrl().substring(indexProtocol+3));
announcementsForm.setUrlProtocol(aV.getUrl().substring(0,indexProtocol+3));
}
else
{
announcementsForm.setUrlProtocol("");
announcementsForm.setUrl(aV.getUrl());
}
}
sess.put(TARGET_ROLES_KEY, (Serializable) aV.getTargetRoles());
sess.serialize(request,response);
return mapping.getInputForward();
233,6 → 247,8
{
try
{
AnnouncementsForm announcementForm = (AnnouncementsForm) form;
 
String id = request.getParameter("id");
AnnouncementView announcementView = load(request,response,Long.parseLong(id));
request.setAttribute("Announcement", announcementView);
/impl/src/java/pt/estgp/estgweb/web/filters/UrlStatFilter.java
1,6 → 1,7
package pt.estgp.estgweb.web.filters;
 
import org.apache.log4j.Logger;
import org.apache.commons.httpclient.util.URIUtil;
 
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
140,6 → 141,9
}
}
logger.info("accessing " + relativePath);
relativePath = URIUtil.encodeWithinQuery(relativePath,"ISO-8859-1");
logger.info("coded to " + relativePath);
 
IntegerContainer count = urlStat.get(relativePath);
 
if (count == null)
/impl/src/java/pt/estgp/estgweb/web/RepositoryStream.java
12,6 → 12,7
 
import jomm.dao.impl.AbstractDao;
import jomm.utils.StreamsUtils;
import jomm.utils.StringsUtils;
import pt.estgp.estgweb.domain.Image;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.dao.impl.ImageDaoImpl;
69,7 → 70,7
}
response.setContentLength(iRepositoryFile.getSize());
response.setContentType(iRepositoryFile.getContentType());
response.setHeader("Content-disposition","filename=" + iRepositoryFile.getName());
response.setHeader("Content-disposition","inline; filename=" + iRepositoryFile.getName());
StreamsUtils.inputStream2OutputStream(iRepositoryFile.getInput(),response.getOutputStream());
}
catch(FilterChainFailedException fail)
/impl/src/doc/deploy.doc
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/impl/src/doc/estgweb.eap
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/impl/src/doc/Concurso.ppt
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/impl/src/updates/db/update1.sql
New file
0,0 → 1,9
 
ALTER TABLE courseunit ENGINE = myisam;
ALTER TABLE `courseunit` ADD COLUMN `validatorUser` BIGINT(20) UNSIGNED AFTER `course`, ADD COLUMN `validProgram` BIT(1) DEFAULT 0 AFTER `validatorUser`, ADD INDEX `validatorUserIndex`(`validatorUser`);
ALTER TABLE `courseunit` ADD CONSTRAINT `FK_validatorUser` FOREIGN KEY `FK_validatorUser` (`validatorUser`)
REFERENCES `user` (`id`)
ON DELETE SET NULL
ON UPDATE SET NULL;
update courseunit set validProgram = 0;
ALTER TABLE courseunit ENGINE = ndb;
/impl/src/updates/db/update2.sql
New file
0,0 → 1,23
 
DROP TABLE IF EXISTS `courseunitsummary`;
CREATE TABLE `courseunitsummary` (
`id` bigint(20) NOT NULL auto_increment,
`discrimitator` varchar(255) NOT NULL,
`updateDate` datetime NOT NULL,
`saveDate` datetime default NULL,
`dataAula` datetime default NULL,
`tipoAula` varchar(255) default NULL,
`codigoAula` varchar(255) default NULL,
`codigoSumario` varchar(255) default NULL,
`codigoSalaAula` varchar(255) default NULL,
`alunosPresentes` int(11) default NULL,
`numeroAula` int(11) default NULL,
`titulo` varchar(255) default NULL,
`descricao` text,
`cEstado` varchar(255) default NULL,
`courseUnit` bigint(20) default NULL,
PRIMARY KEY (`id`),
KEY `tituloIndex` (`titulo`),
KEY `FK4B6262A7DF034EA4` (`courseUnit`),
CONSTRAINT `FK4B6262A7DF034EA4` FOREIGN KEY (`courseUnit`) REFERENCES `courseunit` (`id`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
/impl/src/hbm/pt/estgp/estgweb/domain/GenericUser.hbm.xml
14,7 → 14,9
<timestamp name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="superuser" type="boolean"/>
<property name="username" type="string" unique="true" length="50" index="usernameIndex"/>
<property name="name" type="string" index="nameIndex"/>
<property name="email" type="string" index="emailIndex"/>
<property name="roles" type="string" index="rolesIndex"/>
<many-to-one name="image" column="image" class="pt.estgp.estgweb.domain.Image" lazy="no-proxy" outer-join="false" cascade="all"/>
<subclass name="pt.estgp.estgweb.domain.GenericUserImpl">
28,12 → 30,10
</subclass>
<subclass name="pt.estgp.estgweb.domain.User">
<meta attribute="scope-class">public abstract</meta>
<property name="username" type="string" unique="true" length="50" index="usernameIndex"/>
<property name="password" type="string"/>
<property name="address" type="text"/>
<property name="zip" type="string"/>
<property name="country" type="string"/>
<property name="email" type="string" index="emailIndex"/>
<property name="outEmail" type="string"/>
<property name="phonenumber" type="string"/>
<property name="sex" type="string"/>
/impl/src/hbm/pt/estgp/estgweb/domain/Course.hbm.xml
31,7 → 31,7
<key column="course_id"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUserAssociation"/>
</set>
<set name="courseUnits" order-by="courseYear asc" lazy="true">
<set name="courseUnits" order-by="name asc" lazy="true">
<key column="course"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUnit"/>
</set>
/impl/src/hbm/pt/estgp/estgweb/domain/CourseUnit.hbm.xml
25,7 → 25,9
<property name="normalizedName" type="string" />
<property name="objectives" type="text"/>
<property name="programStreamId" type="string" index="programStreamIdIndex" />
<property name="validProgram" type="boolean" index="validProgramIndex"/>
<property name="status" type="boolean" index="statusIndex" />
<many-to-one name="validatorUser" class="pt.estgp.estgweb.domain.Teacher" lazy="false" outer-join="true"/>
<many-to-one name="course" class="pt.estgp.estgweb.domain.Course" lazy="false" outer-join="true"/>
<set name="blogs" cascade="delete" lazy="true" order-by="saveDate asc">
<key column="courseUnit"/>
51,6 → 53,10
<key column="courseUnit"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUnitAssignement"/>
</set>
<set name="summaries" cascade="delete" lazy="true" order-by="dataAula desc">
<key column="courseUnit"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUnitSummary"/>
</set>
<subclass name="pt.estgp.estgweb.domain.CourseUnitImpl" discriminator-value="CourseUnitImpl"/>
</class>
 
132,6 → 138,29
<subclass name="pt.estgp.estgweb.domain.CourseUnitGradeImpl" discriminator-value="CourseUnitGradeImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.CourseUnitSummary" table="courseunitsummary" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.DomainSerializableObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
<generator class="native"/>
</id>
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="dataAula" type="timestamp"/>
<property name="tipoAula" type="string"/>
<property name="codigoAula" type="string"/>
<property name="codigoSumario" type="string"/>
<property name="codigoSalaAula" type="string"/>
<property name="alunosPresentes" type="int"/>
<property name="numeroAula" type="int"/>
<property name="titulo" type="string" index="tituloIndex"/>
<property name="descricao" type="text"/>
<property name="cEstado" type="string"/>
<many-to-one name="courseUnit" class="pt.estgp.estgweb.domain.CourseUnit" lazy="false" outer-join="true"/>
<subclass name="pt.estgp.estgweb.domain.CourseUnitSummaryImpl" discriminator-value="CourseUnitSummaryImpl"/>
</class>
 
<!--<class name="pt.estgp.estgweb.domain.CourseUnit" table="courseunitassignement" abstract="true">-->
<!--<meta attribute="extends">pt.estgp.estgweb.domain.DomainSerializableObject</meta>-->
<!--<meta attribute="scope-class">public abstract</meta>-->
/impl/src/web/imgs/rolesIcons/student.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/impl/src/web/imgs/topFundoTijolo.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/impl/src/web/admin/profile/profileCurriculum.jsp
33,15 → 33,20
<bean:message key="profile.record.type"/>
</th>
<td>
<html:select property="recordView.type">
<html:option value="RecordThesisImpl" key="profile.RecordThesisImpl"/>
<html:option value="RecordPaperImpl" key="profile.RecordPaperImpl"/>
<%--todo Falta Artigo de Opinião e falta meter artigo cientifico, revista, conferencia, workshop--%>
<html:option value="RecordJobImpl" key="profile.RecordJobImpl"/>
<html:option value="RecordEventOrganizationImpl" key="profile.RecordEventOrganizationImpl"/>
<html:option value="RecordProjectImpl" key="profile.RecordProjectImpl"/>
<html:option value="RecordOtherImpl" key="profile.RecordOtherImpl"/>
</html:select>
<logic:greaterThan value="0" name="ProfileForm" property="recordView.id">
<bean:message key="profile.${ProfileForm.recordView.type}"/>
</logic:greaterThan>
<logic:lessEqual value="0" name="ProfileForm" property="recordView.id">
<html:select property="recordView.type">
<html:option value="RecordThesisImpl" key="profile.RecordThesisImpl"/>
<html:option value="RecordPaperImpl" key="profile.RecordPaperImpl"/>
<%--todo Falta Artigo de Opinião e falta meter artigo cientifico, revista, conferencia, workshop--%>
<html:option value="RecordJobImpl" key="profile.RecordJobImpl"/>
<html:option value="RecordEventOrganizationImpl" key="profile.RecordEventOrganizationImpl"/>
<html:option value="RecordProjectImpl" key="profile.RecordProjectImpl"/>
<html:option value="RecordOtherImpl" key="profile.RecordOtherImpl"/>
</html:select>
</logic:lessEqual>
</td>
</tr>
<tr>
98,7 → 103,12
</tr>
<tr>
<th>
<bean:message key="profile.record.publisher"/>
<logic:equal value="RecordPaperImpl" name="ProfileForm" property="recordView.type">
<bean:message key="profile.record.publisher.paper"/>
</logic:equal>
<logic:notEqual value="RecordPaperImpl" name="ProfileForm" property="recordView.type">
<bean:message key="profile.record.publisher.all"/>
</logic:notEqual>
</th>
<td>
<html:text styleClass="text" property="recordView.publisher"/>
/impl/src/web/admin/profile/profilePersonalData.jsp
10,6 → 10,7
<div id="contentPane">
 
<jomm:messages/>
<html:errors/>
<%--<jsp:useBean id="ProfileForm" class="pt.estgp.estgweb.web.form.profile.ProfileForm"/>--%>
 
 
136,7 → 137,7
<bean:message key="profile.scholar.degree"/>
</th>
<td>
<html:select property="userView.academicDegree">
<html:select property="userView.scholarDegree">
<html:option value="less"><bean:message key="profile.scholar.degree.less"/></html:option>
<html:option value="9"><bean:message key="profile.scholar.degree.9"/></html:option>
<html:option value="12"><bean:message key="profile.scholar.degree.12"/></html:option>
/impl/src/web/admin/announcements/submitAnnouncement.jsp
91,25 → 91,29
</html:select>
</td>
</tr>
 
<logic:present name="UserSession" property="user">
<logic:notEmpty name="UserSession" property="user.ownerRoles">
<tr>
<th>
<bean:message key="announcement.sendAnnouncementLike"/>
</th>
<td>
<html:select property="announcementView.choosedOwnerRole">
<logic:iterate id="item" name="UserSession" property="user.ownerRoles">
<jomm:option itemName="item" comparableObjectName="AnnouncementsForm"
comparableObjectProperty="announcementView.choosedOwnerRole">
<bean:message key="user.role.${item}"/>
</jomm:option>
</logic:iterate>
</html:select>
</td>
</tr>
</logic:notEmpty>
<baco:isRealOwner name="AnnouncementsForm" property="announcementView">
<logic:notEmpty name="UserSession" property="user.ownerRoles">
<tr>
<th>
<bean:message key="announcement.sendAnnouncementLike"/>
</th>
<td>
<html:select property="announcementView.choosedOwnerRole">
<logic:iterate id="item" name="UserSession" property="user.ownerRoles">
<jomm:option itemName="item" comparableObjectName="AnnouncementsForm"
comparableObjectProperty="announcementView.choosedOwnerRole">
<bean:message key="user.role.${item}"/>
</jomm:option>
</logic:iterate>
</html:select>
</td>
</tr>
</logic:notEmpty>
</baco:isRealOwner>
</logic:present>
 
<tr>
<th>
<bean:message key="announcement.target.roles"/>
307,6 → 311,7
<html:option value="http://">Http://</html:option>
<html:option value="ftp://">ftp://</html:option>
<html:option value="https://">Https://</html:option>
<html:option value="">Relativo ao Baco (exemplo: /blog/bugs</html:option>
</html:select>
<html:text property="url" maxlength="250"/>
</td>
318,7 → 323,7
<bean:message key="announcement.internalLinkAnnouncement"/>
</th>
<td>
<html:select property="announcementView.internalUrlServer">
<html:select property="announcementView.internalUrlInclude">
<html:option value="true">
<bean:message key="announcement.internal.url.include.yes"/>
</html:option>
/impl/src/web/css/style.css
1,4 → 1,4
/*********** Site Struture *************/
/*********** Site Struture *************/
BODY *, .contentPortal, .contentPortal p, .contentPortal li, div {
FONT-FAMILY: "bitstream vera sans", Verdana, Arial, Helvetica, sans-serif;
FONT-SIZE: 11px;
566,7 → 566,7
 
.portalAnnouncementTitle
{
white-space:nowrap;
/*white-space:nowrap;*/
}
.portalAnnouncementTitle a {
color: #000000;
580,6 → 580,11
color: #4d4d4d;
}
 
.portalAnnouncementText, .portalAnnouncementTitle {
/*table-layout: fixed;*/
width: 180px;
}
 
/* todo FABIO
todo Left Manus???? ao pe de portalMenus isto esta uma confusao*/
.navleftMenu {
/impl/src/web/errors/503.jsp
New file
0,0 → 1,10
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%
response.sendError(500);
%>
<h3 class="statusWARNING"><bean:message key="error.503"/></h3>
/impl/src/web/layout/header.jsp
6,7 → 6,7
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<table width="100%">
<table width="100%" style="background-image:url(<%=request.getContextPath()%>/imgs/topFundoTijolo.jpg)">
<tr>
<td>
 
/impl/src/web/public/profile/recordViews.jsp
52,7 → 52,14
</logic:present>
<logic:present name="recordView" property="publisher">
<tr>
<th><bean:message key="profile.record.publisher"/></th>
<th>
<logic:equal value="RecordPaperImpl" name="recordView" property="type">
<bean:message key="profile.record.publisher.paper"/>
</logic:equal>
<logic:notEqual value="RecordPaperImpl" name="ProfileForm" property="recordView.type">
<bean:message key="profile.record.publisher"/>
</logic:notEqual>
</th>
<td>${recordView.publisher}</td>
</tr>
</logic:present>
/impl/src/web/public/index.jsp
76,7 → 76,7
</p>
</logic:empty>
<logic:notEmpty name="item" property="url">
<logic:equal value="false" name="item" property="haveAllText">
<logic:equal value="false" name="item" property="textBiggerThenPermited">
<h2>
<html:link href="${item.url}">${item.title}</html:link>
</h2>
84,7 → 84,7
<html:link href="${item.url}">${item.textSummarySmall}</html:link>
</p>
</logic:equal>
<logic:equal value="true" name="item" property="haveAllText">
<logic:equal value="true" name="item" property="textBiggerThenPermited">
<h2>
<html:link action="/loadAnnouncement?id=${item.id}&dispatch=load">${item.title}</html:link>
</h2>
136,7 → 136,7
</p>
</logic:empty>
<logic:notEmpty name="item" property="url">
<logic:equal value="false" name="item" property="haveAllText">
<logic:equal value="false" name="item" property="textBiggerThenPermited">
<h2>
<html:link href="${item.url}">${item.title}</html:link>
</h2>
144,7 → 144,7
<html:link href="${item.url}">${item.textSummarySmall}</html:link>
</p>
</logic:equal>
<logic:equal value="true" name="item" property="haveAllText">
<logic:equal value="true" name="item" property="textBiggerThenPermited">
<h2>
<html:link action="/loadAnnouncement?id=${item.id}&dispatch=load">${item.title}</html:link>
</h2>
/impl/src/web/public/blogs/blog.jsp
30,7 → 30,7
<div class="seccao">
<div class="postHeader">
<h1>
<bean:write name="BlogView" property="title"/>
${BlogView.formatedaaTitle}
</h1>
<baco:canManage name="BlogView">
 
64,7 → 64,7
%>
</td>
<td valign="top">
${BlogView.description}
${BlogView.formatedDescription}
</td>
</tr>
</table>
75,8 → 75,17
<baco:canAddContent name="BlogView">
<a href="<%=request.getContextPath()%>${user}/startAddPost${fromAction}.do?id=<%=BlogView.getId()%>"><bean:message key="blog.add.post"/></a>
</baco:canAddContent>
<%--<baco:canNotAddContent name="BlogView">--%>
<%--<baco:isAuthenticated>--%>
<%--<bean:message key="blog.add.post.cant.add"/>--%>
<%--</baco:isAuthenticated>--%>
<%--<baco:isNotAuthenticated>--%>
<%--<bean:message key="blog.add.post.cant.add.login"/>--%>
<%--</baco:isNotAuthenticated>--%>
<%--</baco:canNotAddContent>--%>
</div>
</div>
 
<baco:canAddContent name="BlogView">
<logic:present name="BlogPostView">
<html:form action="${user}/blogsController${fromAction}${from}" enctype="multipart/form-data">
137,7 → 146,8
<baco:canLoad name="post">
<tr>
<td colspan="2" class="title">
<a name="post${post.id}"></a>${post.title}
<a name="post${post.id}"></a>
<h3>${post.formatedTitle}</h3>
<baco:canManage name="post">
<a onclick="return confirm('${confirmDeletePost}')" href="<%=request.getContextPath()%>${user}/startDeletePost${fromAction}.do?id=${post.id}&blogId=${BlogView.id}"><bean:message key="blog.delete.post"/></a>
<baco:canManage name="BlogView">
161,7 → 171,7
</tr>
<tr>
<td valign="top">
${post.text}
${post.formatedText}
</td>
<td valign="top">
<%
179,7 → 189,7
</tr>
<tr>
<td colspan="2" class="pFooter">
Posted by: ${post.ownerUsername} AT ${post.formatedSaveDate}
Posted by: (${post.ownerUsername}) ${post.ownerName} [AT] ${post.formatedSaveDate}
</td>
</tr>
</baco:canLoad>
/impl/src/web/public/announcements/announcementsPortalLeft.jsp
80,7 → 80,7
</logic:empty>
<logic:notEmpty name="item" property="url">
<%
if (!item.getHaveAllText())
if (!item.getTextBiggerThenPermited())
{
%>
<div class="portalAnnouncementTitle">
/impl/src/web/public/announcements/getFlashNews.jsp
31,7 → 31,7
<h2><a href="<%=request.getContextPath()%>/loadAnnouncement.do?id=<%=announcementView.getId()%>&dispatch=load"><%=announcementView.getTitle()%></a></h2>
<p><a href="<%=request.getContextPath()%>/loadAnnouncement.do?id=<%=announcementView.getId()%>&dispatch=load"><%=announcementView.getTextSummary()%></a></p>
<%}
else if(!announcementView.getHaveAllText())
else if (!announcementView.getTextBiggerThenPermited())
{%>
<h2><a href="<%=announcementView.getUrl()%>"><%=announcementView.getTitle()%></a></h2>
<p><a href="<%=announcementView.getUrl()%>"><%=announcementView.getText()%></a></p>
/impl/src/web/public/announcements/loadAnnouncement.jsp
3,6 → 3,7
<%@ page import="pt.estgp.estgweb.domain.enums.AnnouncementStyleEnum" %>
<%@ page import="pt.estgp.estgweb.web.UserSessionProxy" %>
<%@ page import="jomm.utils.MessageResources" %>
<%@ page import="pt.estgp.estgweb.web.WebProxy" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
12,8 → 13,23
<jsp:useBean id="Announcement" type="pt.estgp.estgweb.domain.views.AnnouncementView" scope="request"/>
<% UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);%>
<table class="seccao">
<tr><td>
<h2>${Announcement.title}
<tr>
<td>
<h2>
<%
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<a href="<%=Announcement.getUrl(request)%>">${Announcement.title}</a>
<%
}
else
{
%>
${Announcement.title}
<%
}
%>
<baco:canManage name="Announcement">
<!--valid="false">-->
<%
66,31 → 82,49
<%
if (Announcement.getBigImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img align="<%=align%>" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
<%
}
}
else if (Announcement.getSmallImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img align="<%=align%>" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
<%
}
}
%>
</div>
${Announcement.formatedText}
<%
if (Announcement.getUrl() != null)
{
%>
&nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">Ver +</html:link>
<%
}%>
 
<logic:notEmpty name="Announcement" property="url">
&nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link>
</logic:notEmpty>
<div class="pFooter">
Posted by: ${Announcement.ownerUsername} AT ${Announcement.formatedSaveDate}
Posted by: (${Announcement.ownerUsername}) ${Announcement.ownerName} [AT] ${Announcement.formatedSaveDate}
</div>
</p>
<%
105,31 → 139,55
<%
if (Announcement.getBigImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
<%
}
}
else if (Announcement.getSmallImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
<%
}
}
%>
</div>
</td>
</tr>
<tr>
<td>${Announcement.formatedText}</td>
<td valign="<%=valign%>" >${Announcement.formatedText}</td>
</tr>
<logic:notEmpty name="Announcement" property="url">
<tr>
<td> &nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link></td>
</tr>
</logic:notEmpty>
<tr>
<td class="pFooter">
Posted by: ${Announcement.ownerUsername} AT ${Announcement.formatedSaveDate}
Posted by: (${Announcement.ownerUsername}) ${Announcement.ownerName} [AT] ${Announcement.formatedSaveDate}
</td>
</tr>
</table>
145,29 → 203,54
<%
if (Announcement.getBigImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
<%
}
}
else if (Announcement.getSmallImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
<%
}
}
%>
</div>
</td>
<td>${Announcement.formatedText}</td>
<td valign="<%=valign%>">${Announcement.formatedText}</td>
</tr>
<logic:notEmpty name="Announcement" property="url">
<tr>
<td colspan="2"> &nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link></td>
</tr>
</logic:notEmpty>
 
<tr>
<td colspan="2" class="pFooter">
Posted by: ${Announcement.ownerUsername} AT ${Announcement.formatedSaveDate}
Posted by: (${Announcement.ownerUsername}) ${Announcement.ownerName} [AT] ${Announcement.formatedSaveDate}
</td>
</tr>
</table>
178,38 → 261,98
%>
<table>
<tr>
<td>${Announcement.formatedText}</td>
<td valign="<%=valign%>">${Announcement.formatedText}</td>
<td valign="<%=valign%>">
<div class="imageAnnouncement">
 
<%
if (Announcement.getBigImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img alt="<%=Announcement.getTitle()%>"
<a href="${Announcement.url}">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
<%
}
}
else if (Announcement.getSmallImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img alt="<%=Announcement.getTitle()%>"
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
<%
}
}
%>
</div>
</td>
</tr>
<logic:notEmpty name="Announcement" property="url">
<tr>
<td colspan="2"> &nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link></td>
</tr>
</logic:notEmpty>
<tr>
<td colspan="2" class="pFooter">
Posted by: ${Announcement.ownerUsername} AT ${Announcement.formatedSaveDate}
Posted by: (${Announcement.ownerUsername}) ${Announcement.ownerName} [AT] ${Announcement.formatedSaveDate}
</td>
</tr>
</table>
<%
}
%>
</td></tr></table>
</td>
</tr>
<tr>
<td>
 
<logic:notEmpty name="Announcement" property="internalUrlPath">
<logic:notEmpty name="Announcement" property="internalUrlServer">
<logic:equal name="Announcement" property="internalUrlInclude" value="true">
<%
WebProxy.processHttpRequestService(out, Announcement.getInternalUrlServer(), Announcement.getInternalUrlPath());
%>
</logic:equal>
<logic:notEqual name="Announcement" property="internalUrlInclude" value="true">
<%
if(Announcement.getInternalUrlPath().startsWith("/"))
{
%>
<a href="<%=request.getContextPath()%>/proxy/layout1/${Announcement.internalUrlServer}${Announcement.internalUrlPath}"><bean:message key="search.see.more.content"/></a>
<%
}
else
{
%>
<a href="<%=request.getContextPath()%>/proxy/layout1/${Announcement.internalUrlServer}/${Announcement.internalUrlPath}"><bean:message key="search.see.more.content"/></a>
<%
}
%>
 
</logic:notEqual>
</logic:notEmpty>
</logic:notEmpty>
</td>
</tr>
 
</table>
/impl/src/web/public/announcements/announcements.jsp
29,7 → 29,7
<html:link action="/loadAnnouncement?id=${item.id}&dispatch=load">${item.title}</html:link>
</logic:empty>
<logic:notEmpty name="item" property="url">
<%if(!item.getHaveAllText())
<%if (!item.getTextBiggerThenPermited())
{%>
<html:link href="${item.url}">${item.title}</html:link>
<%}
/impl/src/web/public/announcements/announcementsPortalRight.jsp
77,7 → 77,7
</logic:empty>
<logic:notEmpty name="item" property="url">
<%
if (!item.getHaveAllText())
if (!item.getTextBiggerThenPermited())
{
%>
<div class="portalAnnouncementTitle">
/impl/src/web/public/announcements/loadTodoAnnouncement.jsp
42,5 → 42,10
</td>
<td valign="top">${Announcement.formatedText}</td>
</tr>
<logic:notEmpty name="Announcement" property="url">
<tr>
<td colspan="2"> &nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link></td>
</tr>
</logic:notEmpty>
</table>
</div>
/impl/src/web/user/courses/topnavDirectedCoordinatedCourses.jsp
New file
0,0 → 1,12
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.util.*"%>
<%@ page import="jomm.web.utils.NavPlace" %>
<%@ page import="jomm.web.utils.NavPlaceServer" %>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "course.directed.coordinated.courses");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/courses/directedCoordinatedCourses.jsp
New file
0,0 → 1,190
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %>
<%@ page import="pt.estgp.estgweb.domain.views.CourseView" %>
<%@ page import="java.util.List" %>
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
 
<jsp:useBean id="CourseForm" type="pt.estgp.estgweb.web.form.courses.CourseForm" scope="request"/>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<jomm:messages/>
<html:errors/>
<%
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{};
List<String> importYears = (List<String>) sm.execute(RequestUtils.getRequester(request, response), "LoadCoursesImportYears", args, names);
request.setAttribute("importYears", importYears);
 
request.setAttribute("fromDispatch",request.getParameter("fromDispatch"));
 
String fromAction = "";
String from = "?fromDispatch="+request.getParameter("fromDispatch");;
String user = "";
if (request.getParameter("from") != null)
{
user = "/user";
fromAction = "From" + request.getParameter("from");
from = "?from=" + request.getParameter("from") + "&fromDispatch="+request.getParameter("fromDispatch");
}
request.setAttribute("from", from);
request.setAttribute("user", user);
request.setAttribute("fromAction", fromAction);
 
boolean canChange=false;
%>
 
<html:form action="${user}/courseController${fromAction}${from}" enctype="multipart/form-data">
<input type="hidden" name="dispatch" value="updateDirectedCoordininatedCourses">
<input type="hidden" name="fromDispatch" value="${fromDispatch}"/>
<div class="seccao">
<h2><bean:message key="course.directed.coordinated"/> </h2>
<p>
<bean:message key="course.program.courses.choose.year"/>
<html:select property="importYear" onchange="set(this.form,'${fromDispatch}');this.form.submit()">
<logic:iterate id="importYear" name="importYears">
<html:option value="${importYear}"/>
</logic:iterate>
</html:select>
</p>
<div class="seccao">
<ul>
<nested:iterate id="courseView" property="directedCoordinatedCourses.merge" type="pt.estgp.estgweb.domain.views.CourseView">
<li>
<a name="${courseView.id}"></a>
<nested:hidden property="id"/>
<h3>(${courseView.code}) ${courseView.name}</h3>
<ul>
<li><h3><bean:message key="courseunit.semestre"/> 1</h3>
<ul>
<logic:notEmpty name="courseView" property="courseUnitsWithNoProgramS1">
<li><h3 class="statusERROR"><bean:message key="course.units.no.program"/></h3>
<ul>
<nested:iterate id="courseUnitView" property="courseUnitsWithNoProgramS1" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
(${courseUnitView.code}) ${courseUnitView.name} - ${courseUnitView.teachersSnipet}
</li>
</nested:iterate>
</ul>
</li>
</logic:notEmpty>
<logic:notEmpty name="courseView" property="courseUnitsWithProgramNotCheckedS1">
<%--<html:hidden property="courseUnitsWithProgramNotCheckedS1size"/>--%>
<li><h3 class="statusWARNING"><bean:message key="course.units.with.program.not.checked"/></h3>
<ul>
<nested:iterate id="courseUnitView" property="courseUnitsWithProgramNotCheckedS1" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
<logic:equal value="${courseView.coordinator.id}" name="UserSession" property="user.id">
<%
canChange=true;
%>
<nested:hidden property="programStreamId"/>
<nested:hidden property="id"/>
<nested:checkbox property="validProgram"/>
</logic:equal>
(${courseUnitView.code}) <a href="<%=request.getContextPath()%>/repositoryStream/${courseUnitView.programStreamId}">${courseUnitView.name}</a> - ${courseUnitView.teachersSnipet}
</li>
</nested:iterate>
</ul>
</li>
</logic:notEmpty>
<logic:notEmpty name="courseView" property="courseUnitsWithProgramCheckedS1">
<%--<html:hidden property="courseUnitsWithProgramCheckedS1size"/>--%>
<li><h3 class="statusOK"><bean:message key="course.units.with.program.checked"/></h3>
<ul>
<nested:iterate id="courseUnitView" property="courseUnitsWithProgramCheckedS1" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
<logic:equal value="${courseView.coordinator.id}" name="UserSession" property="user.id">
<nested:hidden property="programStreamId"/>
<nested:hidden property="id"/>
<nested:checkbox property="validProgram"/>
</logic:equal>
(${courseUnitView.code}) <a href="<%=request.getContextPath()%>/repositoryStream/${courseUnitView.programStreamId}">${courseUnitView.name}</a> - ${courseUnitView.teachersSnipet}
</li>
</nested:iterate>
</ul>
</li>
</logic:notEmpty>
</ul>
</li>
 
 
<li><h3><bean:message key="courseunit.semestre"/> 2</h3>
<ul>
<logic:notEmpty name="courseView" property="courseUnitsWithNoProgramS2">
 
<li><h3 class="statusERROR"><bean:message key="course.units.no.program"/></h3>
<ul>
<nested:iterate id="courseUnitView" property="courseUnitsWithNoProgramS2" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
(${courseUnitView.code}) ${courseUnitView.name} - ${courseUnitView.teachersSnipet}
</li>
</nested:iterate>
</ul>
</li>
</logic:notEmpty>
<logic:notEmpty name="courseView" property="courseUnitsWithProgramNotCheckedS2">
<%--<html:hidden property="courseUnitsWithProgramNotCheckedS2size"/>--%>
<li><h3 class="statusWARNING"><bean:message key="course.units.with.program.not.checked"/></h3>
<ul>
<nested:iterate id="courseUnitView" property="courseUnitsWithProgramNotCheckedS2" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
<logic:equal value="${courseView.coordinator.id}" name="UserSession" property="user.id">
<nested:hidden property="programStreamId"/>
<nested:hidden property="id"/>
<nested:checkbox property="validProgram"/>
</logic:equal>
(${courseUnitView.code}) ${courseUnitView.name} - ${courseUnitView.teachersSnipet}
</li>
</nested:iterate>
</ul>
</li>
</logic:notEmpty>
<logic:notEmpty name="courseView" property="courseUnitsWithProgramCheckedS2">
<%--<html:hidden property="courseUnitsWithProgramCheckedS2size"/>--%>
<li><h3 class="statusOK"><bean:message key="course.units.with.program.checked"/></h3>
<ul>
<nested:iterate id="courseUnitView" property="courseUnitsWithProgramCheckedS2" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
<logic:equal value="${courseView.coordinator.id}" name="UserSession" property="user.id">
<nested:hidden property="programStreamId"/>
<nested:hidden property="id"/>
<nested:checkbox property="validProgram"/>
</logic:equal>
(${courseUnitView.code}) ${courseUnitView.name} - ${courseUnitView.teachersSnipet}
</li>
</nested:iterate>
</ul>
</li>
</logic:notEmpty>
</ul>
</li>
 
</ul>
</li>
</nested:iterate>
</ul>
</div>
</div>
<%
if(canChange)
{
%>
<table>
<tr class="buttons">
<td colspan="2">
<input type="submit" value="<bean:message key="confirm"/>"/>
</td>
</tr>
</table>
<%
}
%>
</html:form>
/impl/src/web/user/courseunits/courseunitworks.jsp
83,7 → 83,7
<bean:message key="courseunit.description"/>
</th>
<td>
<html:textarea styleClass="textarea" property="courseUnitAssignementView.formatedDescription"/>
<html:textarea styleClass="textarea" property="courseUnitAssignementView.description"/>
</td>
</tr>
<tr>
215,9 → 215,14
request.setAttribute("confirmDelete", confirmDelete);
%>
<td>
<html:link onclick="return confirm('${confirmDelete}')" action="/user/startDeleteCourseUnitWorksFromHome?courseUnitAssignementView.id=${work.id}">
<bean:message key="delete"/>
</html:link>
<logic:equal value="0" name="work" property="delivers">
<html:link onclick="return confirm('${confirmDelete}')" action="/user/startDeleteCourseUnitWorksFromHome?courseUnitAssignementView.id=${work.id}">
<bean:message key="delete"/>
</html:link>
</logic:equal>
<logic:notEqual value="0" name="work" property="delivers">
<%--<bean:message key="delete"/>--%>
</logic:notEqual>
</td>
</baco:canManage>
<baco:isStudentOfCourseUnit courseUnitId="${CourseUnitView.id}">
276,7 → 281,7
</tr>
<tr id="assignement${work.id}" style="<%=Globals.HIDDEN%>">
<td colspan="${colspanAssignement}">
${work.description}
${work.formatedDescription}
</td>
</tr>
</logic:iterate>
/impl/src/web/user/courseunits/courseunitassignement.jsp
67,7 → 67,7
<bean:message key="courseunit.description"/>
</th>
<td>
<bean:write name="CourseUnitAssignementView" property="description"/>
${CourseUnitAssignementView.formatedDescription}
</td>
</tr>
<tr>
124,7 → 124,7
<bean:message key="courseunit.assignement.deliver.time.ok"/>
</td>
</logic:notEqual>
<td>${deliverable.student.code}</td>
<td align="right">${deliverable.student.code}</td>
<td>${deliverable.student.name}</td>
<td><a target="_blank" href="<%=request.getContextPath()%>/repositoryStream/${deliverable.fileStreamId}"><bean:message key="courseunit.assignement.deliver.version"/> (${deliverable.deliverDateStr})</a></td>
<td>
/impl/src/web/user/courseunits/courseunit.jsp
51,11 → 51,16
</p>
<p>
<baco:canManage name="CourseUnitView">
<html:file property="programFile"/>
<logic:equal value="false" name="CourseUnitView" property="validProgram">
<html:file property="programFile"/>
</logic:equal>
</baco:canManage>
<logic:present name="CourseUnitView" property="programStreamId">
<a href="<%=request.getContextPath()%>/repositoryStream/${CourseUnitView.programStreamId}"><bean:message key="courseunit.programfilepath"/></a> (${CourseUnitView.programSize} Kb)
</logic:present>
(<logic:equal value="true" name="CourseUnitView" property="validProgram">
<bean:message key="courseunit.programfile.valid"/>
</logic:equal>)
<logic:notPresent name="CourseUnitView" property="programStreamId">
<bean:message key="courseunit.programfilepath.not.available"/>
</logic:notPresent>
94,7 → 99,7
</tr>
<baco:isAuthenticated>
<tr>
<td colspan="2" class="seccao">
<td class="seccao" valign="top">
<h2><bean:message key="module.Announcements"/></h2>
<logic:notEmpty name="CourseUnitView" property="announcements">
<div class="listCircleWhite">
113,6 → 118,25
<p><bean:message key="announcement.zero.placed"/></p>
</logic:empty>
</td>
<td class="seccao" valign="top">
<h2><bean:message key="courseunit.summaries"/></h2>
<logic:notEmpty name="CourseUnitView" property="summaries">
<div class="listCircleWhite">
<ul>
<logic:iterate id="summary" name="CourseUnitView" property="summaries" type="pt.estgp.estgweb.domain.views.CourseUnitSummaryView">
<li>
<h3>(${summary.date}) - ${summary.title}</h3>
<p>${summary.description}</p>
<p class="pFooterSeccao">${summary.students} <bean:message key="courseunit.summary.present.students"/> </p>
</li>
</logic:iterate>
</ul>
</div>
</logic:notEmpty>
<logic:empty name="CourseUnitView" property="summaries">
<p><bean:message key="courseunit.summaries.zero.placed"/></p>
</logic:empty>
</td>
</tr>
</baco:isAuthenticated>
</table>
/impl/src/web/user/courseunits/submitAnnouncement.jsp
43,7 → 43,7
<html:hidden property="announcementView.courseUnitView.name"/>
<input type="hidden" name="expireDate" value="<%=calendar.getWebDateString()%>"/>
<html:hidden property="announcementView.courseUnitView.courseName"/>
<html:hidden property="targetRolesStr" value="student"/>
<html:hidden property="targetRolesStr" value="all"/>
<baco:hasRole role="student">
<html:hidden property="announcementView.choosedOwnerRole" value="student"/>
</baco:hasRole>
/impl/src/web/user/home/student.jsp
75,28 → 75,7
<jsp:include page="/user/home/todos.jsp"/>
</baco:isModuleOn>
</td>
<td class="column">
<div class="block">
<p>Ficheiros Úteis</p>
<ul>
<li>
<a href="#">Modelo de comunicação interna</a>
</li>
<li>
<a href="#">Justificação de Presença</a>
</li>
<li>
<a href="#">Justificação de Faltas</a>
</li>
<li>
<a href="#">Modelo de Bolsa</a>
</li>
<li>
<a href="#">Modelo de Bolsa</a>
</li>
</ul>
</div>
</td>
 
</tr>
</tbody>
</table>
/impl/src/web/user/home/todos.jsp
103,10 → 103,15
<a href="<%=request.getContextPath() + todo.getUrl()%>">
<font class="<%=styleClass%>">
<%
if(todo.getCatKey() != null)
if(todo.getCatArg0() == null && todo.getCatKey() != null)
{
out.print(MessageResources.getMessage(request,todo.getCatKey()) + ":");
}
else if(todo.getCatArg0() != null && todo.getCatKey() != null)
{
out.print(MessageResources.getMessage(request,todo.getCatKey(),todo.getCatArg0()) + ":");
}
 
%>
<%=todo.getLabelInsideCat(request)%>
</font>
/impl/src/web/user/home/teacher.jsp
73,28 → 73,6
<jsp:include page="/user/home/todos.jsp"/>
</baco:isModuleOn>
</td>
<td class="column">
<div class="block">
<p>Ficheiros Úteis</p>
<ul>
<li>
<a href="#">Modelo de comunicação interna</a>
</li>
<li>
<a href="#">Justificação de Presença</a>
</li>
<li>
<a href="#">Justificação de Faltas</a>
</li>
<li>
<a href="#">Modelo de Bolsa</a>
</li>
<li>
<a href="#">Modelo de Bolsa</a>
</li>
</ul>
</div>
</td>
</tr>
</tbody>
</table>
/impl/src/web/user/home/user.jsp
16,28 → 16,6
<jsp:include page="/user/home/todos.jsp"/>
</baco:isModuleOn>
</td>
<td class="column">
<div class="block">
<p>Ficheiros Úteis</p>
<ul>
<li>
<a href="#">Modelo de comunicação interna</a>
</li>
<li>
<a href="#">Justificação de Presença</a>
</li>
<li>
<a href="#">Justificação de Faltas</a>
</li>
<li>
<a href="#">Modelo de Bolsa</a>
</li>
<li>
<a href="#">Modelo de Bolsa</a>
</li>
</ul>
</div>
</td>
</tr>
</tbody>
</table>
/impl/src/web/user/serviceZone/topnavCoursesPrograms.jsp
New file
0,0 → 1,12
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.util.*"%>
<%@ page import="jomm.web.utils.NavPlace" %>
<%@ page import="jomm.web.utils.NavPlaceServer" %>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startServiceZone.do", "intranet.separator.service.zone.back");
topNav.addNavPlace(null, "course.program.courses");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/serviceZone/topnavDirectedCoordinatedCourses.jsp
New file
0,0 → 1,12
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.util.*"%>
<%@ page import="jomm.web.utils.NavPlace" %>
<%@ page import="jomm.web.utils.NavPlaceServer" %>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.service.zone.back");
topNav.addNavPlace(null, "course.directed.coordinated.courses");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/serviceZone/serviceZone.jsp
7,6 → 7,7
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %>
<%@ page import="java.util.List" %>
<%@ page import="pt.estgp.estgweb.Globals" %>
<%@ page import="pt.estgp.estgweb.domain.CourseUnitAnnouncement" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
76,7 → 77,7
</li>
</baco:isModuleOn>
<baco:isModuleOn module="todos">
<baco:hasRole role="admin,super,services,administrativeCouncil,courseCoordinator,courseDirector,scientificCouncil,pedagogicCouncil">
<baco:hasRole role="admin,all,services,administrativeCouncil,courseCoordinator,courseDirector,scientificCouncil,pedagogicCouncil">
<li>
<html:link action="/user/startSubmitTodoAnnouncementFromServiceZone">
<bean:message key="submit.todo.announcement"/>
117,10 → 118,12
</baco:isAdmin>
 
<baco:isModuleOn module="courseunits">
<baco:isAdmin>
 
<baco:hasRole role="admin,all,services,administrativeCouncil,courseCoordinator,courseDirector,scientificCouncil,pedagogicCouncil">
<li>
<bean:message key="courses"/>
<ul>
<baco:isAdmin>
<li>
<html:link action="/user/startNewCourseFromServiceZone">
<bean:message key="course.new"/>
141,33 → 144,52
<bean:message key="courseunit.search"/>
</html:link>
</li>
 
</baco:isAdmin>
<%--<li>--%>
<%--<html:link action="/user/startFindCourseUnitAdminFromServiceZone">--%>
<%--<bean:message key="courseunit.program.archive"/>--%>
<%--</html:link>--%>
<%--</li>--%>
<li>
<baco:hasRole role="admin,all,servicesPrograms,administrativeCouncil,scientificCouncil,pedagogicCouncil">
<html:link action="/user/startLoadCoursesProgramsFromServiceZone">
<bean:message key="course.program.courses"/>
</html:link>
</baco:hasRole>
</li>
<li>
<baco:hasRole role="courseCoordinator,courseDirector">
<html:link action="/user/startLoadDirectedCoordinatedCoursesFromServiceZone">
<bean:message key="course.program.coordinated.directed.courses"/>
</html:link>
</baco:hasRole>
</li>
</ul>
</li>
</baco:isAdmin>
</baco:hasRole>
<li>
<bean:message key="backups"/>
<ul>
<baco:isAdmin>
<li>
<html:link target="_blank" action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createCourseUnitWorksBackup">
<html:link action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createAllCourseUnitWorksBackup">
<bean:message key="courseunits.backups"/>
</html:link>
</li>
<li>
<html:link action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createImportYearCourseUnitWorksBackup">
<bean:message key="courseunits.backups.actual.year"/>
</html:link>
</li>
</baco:isAdmin>
<baco:hasRole role="student,teacher">
<li>
<html:link target="_blank" action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createUserAllCourseUnitWorksBackup">
<html:link action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createUserAllCourseUnitWorksBackup">
<bean:message key="courseunits.all.backup"/>
</html:link>
</li>
<li>
<html:link target="_blank" action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createUserCourseUnitActualYearWorksBackup">
<html:link action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createUserCourseUnitActualYearWorksBackup">
<bean:message key="courseunits.actual.year.backup"/>
</html:link>
</li>
234,8 → 256,18
%>
<tr>
<td>
<a href="<%=request.getContextPath()%>/user/startLoadAnnouncementFromServiceZone.do?id=<%=a.getId()%>"><%=a.getTitle()%>
</a></td>
<a href="<%=request.getContextPath()%>/user/startLoadAnnouncementFromServiceZone.do?id=<%=a.getId()%>"><%=a.getTitle()%></a>
 
<%
if (a.getCourseUnitView() != null)
{
%>
(<%=a.getCourseUnitView().getName()%>)
<%
}
%>
 
</td>
<td>
<%
String message;
/impl/build.xml
97,6 → 97,12
config="file://${basedir}/${dist.dir}/estgweb.xml"
username="${tomcat.username}" password="${tomcat.password}" />
</target>
<target name="tomcat.deployContextOnly" depends="">
<echo message="${tomcat.manager}"/>
<tomcat.install url="${tomcat.manager}" path="${tomcat.context.path.install}"
config="file://${basedir}/${dist.dir}/estgweb.xml"
username="${tomcat.username}" password="${tomcat.password}" />
</target>
<target name="tomcat.redeployContext" depends="tomcat.undeploy,build.war" >
<echo message="${tomcat.manager}"/>
<tomcat.install url="${tomcat.manager}" path="${tomcat.context.path.install}"
146,7 → 152,7
<antcall target="createConfigurationFiles"/>
</target>
<target name="compile" depends="initDirs" description="Compile All">
<javac encoding="UTF-8" source="1.5" target="1.5" destdir="${build.dir.classes}" debug="true" optimize="true" fork="true" deprecation="true" verbose="true" failonerror="true">
<javac encoding="UTF-8" source="1.5" target="1.5" destdir="${build.dir.classes}" debug="true" optimize="true" fork="true" failonerror="true">
<src path="${src.dir}"/>
<src path="${gen.dir.java}"/>
<classpath refid="pathToToolsLib"/>
332,15 → 338,15
<mkdir dir="${build.dir.intranet.setup.folders.file}"/>
<copy overwrite="true" todir="${build.dir.intranet.setup.folders.file}" file="${intranet.setup.folders.file.src}"/>
 
<java classname="${scripts.buider.class}" classpath="${build.dir.classes}">
<arg value="${basedir}${file.separator}..${file.separator}common"/>
<arg value="${basedir}${file.separator}build${file.separator}ant${file.separator}classes"/>
<arg value="${build.dir.scripts}"/>
<arg value="${scripts.target.libs.file}"/>
</java>
<copy overwrite="true" todir="${build.dir.scripts}">
<fileset dir="${src.scripts}" includes="*.*"/>
</copy>
<!--<java classname="${scripts.buider.class}" classpath="${build.dir.classes}">-->
<!--<arg value="${basedir}${file.separator}..${file.separator}common"/>-->
<!--<arg value="${basedir}${file.separator}build${file.separator}ant${file.separator}classes"/>-->
<!--<arg value="${build.dir.scripts}"/>-->
<!--<arg value="${scripts.target.libs.file}"/>-->
<!--</java>-->
<!--<copy overwrite="true" todir="${build.dir.scripts}">-->
<!--<fileset dir="${src.scripts}" includes="*.*"/>-->
<!--</copy>-->
 
</target>
 
378,9 → 384,9
<replacefilter token="@log.file@" value="${log.file}"/>
<replacefilter token="@log.level@" value="${log.level}"/>
</replace>
<replace file="${build.dir.scripts}/${scripts.setenv.file}">
<!--<replace file="${build.dir.scripts}/${scripts.setenv.file}">
<replacefilter token="@tomcat.home@" value="${tomcat.home}"/>
</replace>
</replace>-->
<replace file="${jdbc.properties.build}/${jdbc.properties.filename}">
<replacefilter token="@database.username@" value="${database.username}"/>
<replacefilter token="@database.password@" value="${database.password}"/>
497,5 → 503,12
<!--<java classname="mitra.oaiharvest.harvest.HarvestEngine" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>-->
<!--<java classname="mitra.oaiharvest.index.IndexEngine" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>-->
<!--</target>-->
<target name="util.task.createRepositoryXML">
<java classname="pt.estgp.estgweb.services.data.CreateDescriptionsXML" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
<target name="util.task.reset.urlsstats">
<java classname="pt.estgp.estgweb.services.urlstat.ResetRelativePathsService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
 
 
</project>