Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 206 → Rev 214

/impl/conf/language/MessageResourcesIntranet.properties
3,6 → 3,7
# INTRANET MESSAGE RESOURCES
#
################################################################################
intranet=Intranet
intranet.services=Os Meus Serviços
intranet.todo=Os Meus Afazeres
intranet.editable.blogs=Os Blogs Onde Posso Publicar
22,7 → 23,7
 
intranet.my.blog.posts=Os Meus Posts
 
intranet.course.unit.announcements=Os anúncios das minhas Unidades
intranet.course.unit.announcements=Últimos anúncios das minhas Unidades
course.unit.announcements.zero.announcements=Zero anúncios
 
courseunit.works.zero=Não existem trabalhos
30,3 → 31,6
courseunit.title=Titulo
courseunit.description=Descrição
courseunit.status=Estado
 
intranet.create.folders=Criar Pastas Para a Intranet
 
/impl/conf/language/MessageResourcesCourse.properties
New file
0,0 → 1,35
################################################################################
#
# COURSE UNITS MESSAGE RESOURCES
#
################################################################################
module.Courses=Cursos
course.new=Criar Curso
course.submit.edit=Editar Curso {0}
course.submit.new=Novo Curso
course.updated.success=Curso {0} actualizado com sucesso
course.created.success=Curso {0} criado com sucesso
 
course.select=Escolha Curso
course.select.message=Por favor selecione o curso que deseja editar
 
course.code=Código
course.degree=Grau académico
course.importYear=Ano de Importação
course.institutionalCode=Código de Instituição
course.description=Descrição
course.coordinator=Coordenador de Curso
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)
 
 
 
 
 
 
 
 
 
 
/impl/conf/language/MessageResourcesAnnouncements.properties
6,7 → 6,10
announcement.expire.date.date=A data em que o anúncio expira obrigatória
 
module.Announcements=Anúncios
module.TodoAnnouncements=Urgentes
 
 
 
announcement.exceed.bigmage.max.size=Excedeu o tamanho maximo da imagem grande
announcement.exceed.smallmage.max.size=Excedeu o tamanho maximo da imagem pequena
announcement.image.max=Tamanho Maximo:
33,12 → 36,13
announcement.internal=Dominio
announcement.internal.yes=Interno
announcement.internal.no=Público
announcement.courseunit.internal=Interno aos alunos e docentes da unidade
 
 
announcements.type.news=Notícias
announcements.type.top.flash.news=Destaques
announcements.type.bottom.flash.news=Destaques Secundarios
 
announcements.type.todo=Trabalho a fazer
announcements.type.courseUnitAnnouncement=Anúncio de Unidade Curricular
announcement.protocol.error.http=http
announcement.protocol.error.https=https
announcement.protocol.error.ftp=ftp
/impl/conf/language/MessageResources.properties
80,13 → 80,14
user.role.scientificCouncil=Concelho Científico
user.role.erasmusCouncil=Concelho Erasmus
user.role.pedagogicCouncil=Concelho Pedagógico
user.role.courseCoordinator=Coordenador
user.role.courseCoordinator=Coordenadores
user.role.futureStudent=Futuros Alunos
user.role.oldStudent=Antigos Alunos
user.role.sudentAssociation=Associação de Estudantes
user.role.studentAssociation=Associação de Estudantes
user.role.computerCenter=Centro Informático
user.role.courseCoordinator=Coordenador
user.role.courseDirector=Directores de Curso
 
 
#Filter Errors
fail.role=Lamentamos o incómodo, mas necessita de permissões especiais para aceder a esta área.
fail.owner=Lamentamos o incómodo, mas não tem permissões sobre o objecto ao qual tentou aceder.
94,6 → 95,8
fail.authenticate=Falhou a autênticação
 
#palavras comuns
none=Nenhum
number=Número
at=a
from=de
to=para
109,6 → 112,8
authenticate=Entrar
logout=Sair
submit.announcement=Colocar Anúncio
submit.todo.announcement=Colocar a fazer
todo.announcement=A fazer
edit.profile=Editar Meu Perfil
edit.user.profile=Editar Utilizador
services=Serviços
122,7 → 127,15
status.invalid=Inválido
status.active=Activo
status.inactive=Inactivo
validate=Validar
invalidate=Invalidar
activate=Activar
deactivate=Desactivar
manage=Gerir
replace=Substituir
work=Trabalho
 
 
#Menus Portais
portal.orgaos=Orgãos
portal.conselho.pedagogico=Conselho Pedagógico
261,6 → 274,7
email.institucion2=E-mail Institucional
email.secundary=E-mail Secundário
phone.number=Telefone
new=Novo
 
#Profile
profile.created.sucess=Utilizador criado com sucesso
/impl/conf/language/MessageResourcesBlog.properties
50,6 → 50,7
 
blog.intro.message=O Serviço de criação de Blogs requer validação por parte da administração. Depois de criar o seu blog aguarde que este seja validado pelo Administrador. Só assim os outros utilizadores terão acesso ao mesmo.
 
blog.courseunit.internal=Interno à Unidade Curricular
blog.courseunit=Blog da Unidade Curricular {0}
 
 
 
/impl/conf/language/MessageResourcesCourseUnits.properties
4,9 → 4,10
#
################################################################################
module.CourseUnits=Unidades Curriculares
course=Curso ({0})
courseunit=Unidade Curricular ({0})
course={0} &gt
courseunit={0}
 
courseunit.teachers=Corpo Docente
courseunit.objectives=Objectivos da Unidade
courseunit.programfilepath=Programa Curricular
courseunit.programfilepath.not.available=O Programa Curricular não está disponivel
17,7 → 18,8
courseunit.objectives.todo=Peenchimento dos objectivos da unidade
courseunit.program.todo=Upload do programa da unidade
courseunit.question.todo=Dúvida
course.unit.works=(Trabalhos)
courseunit.assignement.todo=Trabalho por entregar
course.unit.works=Trabalhos
courseunit.works=Trabalhos
courseunit.new=Criar Unidade Curricular
courseunit.edit=Editar Unidade Curricular
34,10 → 36,76
courseunit.created.success=Unidade Curricular {0} criada com sucesso
courseunit.updated.success=Unidade Curricular {0} actualizada com sucesso
 
courseunit.assignement.deliver.date=Data de Entrega
courseunit.assignement=Trabalho: {0}
 
courseunit.assignement.delivered.date=Data de Entrega
courseunit.assignement.deliver.date=Data Limite de Entrega
courseunit.assignement.deliver.type=Tipo de entrega
courseunit.assignement.deliver.type.zipfile=Ficheiro Comprimido (ZIP)
courseunit.assignement.deliver.grade=Nota
courseunit.assignement.deliver.show.obs=Adicionar observações
courseunit.assignement.deliver.obs=obs
courseunit.assignement.deliver.type.nofile=Entrega não controlada pelo sistema
courseunit.assignement.deliver.late.permission=Permitir entregas atrasadas
courseunit.assignement.delivers=Número de Entregas
courseunit.assignement.deliver.version=Versão Entregue
courseunit.assignement.deliver=Entregar Trabalho
courseunit.search=Procurar Unidade Curricular
courseunitwork.confirm.delete=Atenção: Todas as entregas de alunos serão também removidas. Pode Invalidar o trabalho para este não ficar visivel aos alunos e desta forma mantém a informação relativa a entregas. De certeza que pretende apagar o Trabalho selecionado?
courseunit.assignement.deliver.sucess=Trabalho {0} entregue com sucesso
errors.courseunit.assignement.deliver.file=O Ficheiro que escolheu não existe ou estão vazio
errors.courseunit.assignement.deliver.zip=Por favor escolha um ficheiro comprimido em formato ZIP
errors.courseunit.assignement.file.type=Por favor escolha um ficheiro comprimido em formato ZIP
courseunit.students=Estudantes
 
courseunit.search=Procurar Unidade Curricular
courseunit.assignement.deliver.time=Entregue
courseunit.assignement.deliver.time.ok=Entregue a Horas
courseunit.assignement.deliver.time.late=Entrega atrasada
courseunit.assignement.deliver.time.no=Por Entregar
 
courseunit.menu.home=Inicio
courseunit.menu.put.question=Colocar dúvida
courseunit.menu.put.announcement=Colocar Anúncio
courseunit.menu.assignements=Trabalhos
courseunit.menu.blog=Blog da Unidade
courseunit.menu.presences=Presenças
courseunit.menu.contents=Conteúdos
courseunit.menu.grades=Avaliação
 
replace=Substituir
 
courseunit.assignement.file=Enunciado
 
error.courseunit.student.not.found=Estudante não encontrado
error.courseunit.teacher.not.found=Professor não encontrado
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/impl/conf/WEB-INF/struts/struts-blog.xml
90,5 → 90,29
<forward name="from.add.role" path="page.submit.blog.from.serviceZone"/>
</action>
 
 
<action path="/user/startAddPostFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=addPost&amp;from=CourseUnit"/>
<action path="/user/startEditPostFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=editPost&amp;from=CourseUnit"/>
<action path="/user/startDeletePostFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=deletePost&amp;from=CourseUnit"/>
<action path="/user/startValidatePostFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=validatePost&amp;from=CourseUnit"/>
 
<action path="/user/startSubmitBlogFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=start&amp;from=CourseUnit"/>
<action path="/user/startDeleteBlogFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=delete&amp;from=CourseUnit"/>
<action path="/user/startEditBlogFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=edit&amp;from=CourseUnit"/>
<action path="/user/startLoadBlogFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=load&amp;from=CourseUnit"/>
<action path="/user/startLoadBlogMonthFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=loadMonth&amp;from=CourseUnit"/>
<action path="/user/blogsControllerFromCourseUnit"
type="pt.estgp.estgweb.web.controllers.blogs.BlogsController"
name="BlogForm"
scope="request"
parameter="dispatch"
validate="false"
input="page.separators.home">
<forward name="load" path="page.load.blog.from.courseUnit"/>
<forward name="submit" path="page.submit.blog.from.courseUnit"/>
<forward name="loadMonth" path="page.load.blog.month.from.courseUnit"/>
<forward name="from.add.role" path="page.submit.blog.from.courseUnit"/>
</action>
 
</action-mappings>
</struts-config>
/impl/conf/WEB-INF/struts/struts-courses.xml
New file
0,0 → 1,53
<?xml version="1.0" encoding="UTF-8"?>
 
<!--<!DOCTYPE struts-config PUBLIC-->
<!--"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"-->
<!--"http://struts.apache.org/dtds/struts-config_1_3.dtd">-->
 
<struts-config>
 
<form-beans>
<form-bean type="pt.estgp.estgweb.web.form.courses.CourseForm" name="CourseForm"/>
</form-beans>
 
<global-exceptions>
 
</global-exceptions>
 
<global-forwards>
 
</global-forwards>
 
 
<action-mappings>
 
<action path="/startLoadCourse" forward="/courseController.do?dispatch=load"/>
<action path="/courseController"
type="pt.estgp.estgweb.web.controllers.courses.CoursesController"
name="CourseForm"
scope="request"
parameter="dispatch"
validate="false"
input="page.welcome">
<forward name="load" path="page.load.course"/>
</action>
 
<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"/>
<action path="/user/startSubmitCourseFromServiceZone" forward="/user/courseControllerFromServiceZone.do?dispatch=submit&amp;from=ServiceZone"/>
<action path="/user/courseControllerFromServiceZone"
type="pt.estgp.estgweb.web.controllers.courses.CoursesController"
name="CourseForm"
scope="request"
parameter="dispatch"
validate="false"
input="page.separators.serviceZone">
<forward name="submit" path="page.submit.course.from.service.zone"/>
</action>
 
 
</action-mappings>
 
</struts-config>
/impl/conf/WEB-INF/struts/struts-courseunits.xml
24,6 → 24,8
<action path="/startTeste2" forward="page.separators.home"/>
 
 
<action path="/startLoadCourseUnitStudents" forward="/courseUnitController.do?dispatch=loadStudents"/>
<action path="/startCourseUnitBlog" forward="/courseUnitController.do?dispatch=startBlog"/>
<action path="/startLoadCourseUnitWorks" forward="/courseUnitController.do?dispatch=loadWorks"/>
<action path="/startLoadCourseUnit" forward="/courseUnitController.do?dispatch=load"/>
<action path="/courseUnitController"
35,10 → 37,19
input="page.welcome">
<forward name="load" path="page.load.courseunit"/>
<forward name="load.works" path="page.load.courseunit.works"/>
<forward name="load.blog" path="page.load.courseunit.blog"/>
<forward name="load.students" path="page.load.courseunit.students"/>
</action>
 
<!--<action path="/user/startLoadCourseUnitFromHome" forward="page.load.courseunit.from.home"/>-->
 
<action path="/user/startCourseUnitBlogFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=startBlog&amp;from=CourseUnit"/>
<action path="/user/startLoadCourseUnitAssignementFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=loadAssignement&amp;from=Home"/>
<action path="/user/startValidateInvalidateCourseUnitWorksFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=validateInvalidateAssignement&amp;from=Home"/>
<action path="/user/startDeleteCourseUnitWorksFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=deleteAssignement&amp;from=Home"/>
<action path="/user/startEditCourseUnitWorksFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=editAssignement&amp;from=Home"/>
<action path="/user/startLoadCourseUnitWorksFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=loadWorks&amp;from=Home"/>
<action path="/user/startLoadCourseUnitStudentsFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=loadStudents&amp;from=Home"/>
<action path="/user/startLoadCourseUnitFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=load&amp;from=Home"/>
<action path="/user/courseUnitControllerFromHome"
type="pt.estgp.estgweb.web.controllers.courseunits.CourseUnitsController"
49,6 → 60,9
input="page.welcome">
<forward name="load" path="page.load.courseunit.from.home"/>
<forward name="load.works" path="page.load.courseunit.works.from.home"/>
<forward name="load.assignement" path="page.load.courseunit.assignement.from.home"/>
<forward name="load.blog" path="page.load.blog.from.courseUnit"/>
<forward name="load.students" path="page.load.courseunit.students.from.home"/>
<forward name="submit" path="page.submit.courseunit.from.home"/>
</action>
 
/impl/conf/WEB-INF/struts/struts-default.xml
135,6 → 135,7
/WEB-INF/struts/tiles-announcements.xml,
/WEB-INF/struts/tiles-banners.xml,
/WEB-INF/struts/tiles-courseunits.xml,
/WEB-INF/struts/tiles-courses.xml,
/WEB-INF/struts/tiles-events.xml,
/WEB-INF/struts/tiles-ftpclient.xml,
/WEB-INF/struts/tiles-processworkflow.xml,
/impl/conf/WEB-INF/struts/tiles-announcements.xml
8,40 → 8,73
<tiles-definitions>
 
<definition name="page.load.announcement" extends="base.layout1">
<put name="title" value="Load Announcement" />
<put name="title" value="Anuncio" />
<put name="body" value="/public/announcements/loadAnnouncement.jsp" />
</definition>
<definition name="page.submit.announcement" extends="base.layout2">
<put name="title" value="Submit Announcement"/>
<put name="title" value="Anuncio"/>
<put name="topnav" value="/admin/announcements/topnavCreateAnnouncement.jsp"/>
<put name="body" value="/admin/announcements/submitAnnouncement.jsp"/>
</definition>
 
 
<definition name="page.submit.announcement.from.home" extends="base.separators">
<put name="title" value="Submit Announcement"/>
<put name="separator" value="1" type="string" />
<definition name="page.submit.announcement.from.home" extends="page.separators.home">
<put name="title" value="Anuncio"/>
<put name="topnav" value="/user/home/topnavCreateAnnouncement.jsp"/>
<put name="body" value="/admin/announcements/submitAnnouncement.jsp"/>
</definition>
<definition name="page.submit.announcement.from.serviceZone" extends="base.separators">
<put name="title" value="Submit Announcement"/>
<put name="separator" value="4" type="string" />
<definition name="page.load.announcement.from.home" extends="page.separators.home">
<put name="title" value="Anuncio"/>
<put name="topnav" value="/user/home/topnavLoadAnnouncement.jsp"/>
<put name="body" value="/public/announcements/loadAnnouncement.jsp"/>
</definition>
 
<definition name="page.submit.announcement.from.serviceZone" extends="page.separators.serviceZone">
<put name="title" value="Anuncio"/>
<put name="topnav" value="/user/serviceZone/topnavCreateAnnouncement.jsp"/>
<put name="body" value="/admin/announcements/submitAnnouncement.jsp"/>
</definition>
<definition name="page.load.announcement.from.home" extends="base.separators">
<put name="title" value="Load Announcement"/>
<put name="separator" value="1" type="string" />
<put name="topnav" value="/user/home/topnavLoadAnnouncement.jsp"/>
<put name="body" value="/public/announcements/loadAnnouncement.jsp"/>
</definition>
<definition name="page.load.announcement.from.serviceZone" extends="base.separators">
<put name="title" value="Load Announcement"/>
<put name="separator" value="4" type="string" />
<definition name="page.load.announcement.from.serviceZone" extends="page.separators.serviceZone">
<put name="title" value="Anuncio"/>
<put name="topnav" value="/user/serviceZone/topnavLoadAnnouncement.jsp"/>
<put name="body" value="/public/announcements/loadAnnouncement.jsp"/>
</definition>
 
<!--Unidades Curriculares-->
<definition name="page.submit.announcement.from.courseUnit" extends="page.separators.home">
<put name="title" value="Anuncio"/>
<put name="topnav" value="/user/courseunits/topnavCreateAnnouncement.jsp"/>
<put name="left" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/submitAnnouncement.jsp"/>
</definition>
<definition name="page.load.announcement.from.courseUnit" extends="page.separators.home">
<put name="title" value="Anuncio"/>
<put name="topnav" value="/user/courseunits/topnavLoadAnnouncement.jsp"/>
<put name="left" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/loadAnnouncement.jsp"/>
</definition>
 
<!-- Particularizacao para Afazeres -->
 
<definition name="page.submit.todo.announcement.from.home" extends="page.separators.home">
<put name="title" value="Trabalho a fazer"/>
<put name="topnav" value="/user/home/topnavCreateTodoAnnouncement.jsp"/>
<put name="body" value="/admin/announcements/submitTodoAnnouncement.jsp"/>
</definition>
<definition name="page.load.todo.announcement.from.home" extends="page.separators.home">
<put name="title" value="Trabalho a fazer"/>
<put name="topnav" value="/user/home/topnavLoadTodoAnnouncement.jsp"/>
<put name="body" value="/public/announcements/loadTodoAnnouncement.jsp"/>
</definition>
 
<definition name="page.submit.todo.announcement.from.serviceZone" extends="page.separators.serviceZone">
<put name="title" value="Trabalho a fazer"/>
<put name="topnav" value="/user/serviceZone/topnavCreateTodoAnnouncement.jsp"/>
<put name="body" value="/admin/announcements/submitTodoAnnouncement.jsp"/>
</definition>
<definition name="page.load.todo.announcement.from.serviceZone" extends="page.separators.serviceZone">
<put name="title" value="Trabalho a fazer"/>
<put name="topnav" value="/user/serviceZone/topnavLoadTodoAnnouncement.jsp"/>
<put name="body" value="/public/announcements/loadTodoAnnouncement.jsp"/>
</definition>
</tiles-definitions>
/impl/conf/WEB-INF/struts/tiles-blog.xml
12,13 → 12,11
<put name="topnav" value="/admin/blogs/topnavCreateBlog.jsp"/>
<put name="body" value="/admin/blogs/submitBlog.jsp"/>
</definition>
 
<definition name="page.load.blog" extends="base.layout1">
<put name="title" value="Blog"/>
<put name="topnav" value="/public/blogs/topnavLoadBlog.jsp"/>
<put name="body" value="/public/blogs/blog.jsp"/>
</definition>
 
<definition name="page.load.blog.month" extends="base.layout1">
<put name="title" value="Blog"/>
<put name="body" value="/public/blogs/blog.jsp"/>
31,11 → 29,6
<put name="topnav" value="/user/home/topnavCreateBlog.jsp"/>
<put name="body" value="/admin/blogs/submitBlog.jsp"/>
</definition>
<definition name="page.submit.blog.from.serviceZone" extends="page.separators.serviceZone">
<put name="title" value="Submit Blog"/>
<put name="topnav" value="/user/serviceZone/topnavCreateBlog.jsp"/>
<put name="body" value="/admin/blogs/submitBlog.jsp"/>
</definition>
<definition name="page.load.blog.from.home" extends="page.separators.home">
<put name="title" value="Load Blog"/>
<put name="topnav" value="/user/home/topnavLoadBlog.jsp"/>
46,6 → 39,13
<put name="topnav" value="/user/home/topnavLoadBlogMonth.jsp"/>
<put name="body" value="/public/blogs/blog.jsp"/>
</definition>
 
 
<definition name="page.submit.blog.from.serviceZone" extends="page.separators.serviceZone">
<put name="title" value="Submit Blog"/>
<put name="topnav" value="/user/serviceZone/topnavCreateBlog.jsp"/>
<put name="body" value="/admin/blogs/submitBlog.jsp"/>
</definition>
<definition name="page.load.blog.from.serviceZone" extends="page.separators.serviceZone">
<put name="title" value="Load Blog"/>
<put name="topnav" value="/user/serviceZone/topnavLoadBlog.jsp"/>
/impl/conf/WEB-INF/struts/tiles-courses.xml
New file
0,0 → 1,35
<?xml version="1.0" encoding="UTF-8" ?>
 
<!--<!DOCTYPE tiles-definitions PUBLIC-->
<!--"-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"-->
<!--"http://struts.apache.org/dtds/tiles-config_1_1.dtd">-->
 
 
<tiles-definitions>
 
<definition name="page.load.course" extends="base.layout1">
<put name="title" value="Curso"/>
<put name="topnav" value="/public/courses/topnavCourse.jsp"/>
<put name="navigation" value="/public/courses/courses.jsp"/>
<put name="body" value="/public/courses/course.jsp"/>
</definition>
 
 
 
<definition name="page.select.course.from.service.zone" extends="page.separators.serviceZone">
<put name="title" value="Selecção de Curso"/>
<put name="topnav" value="/user/serviceZone/topnavSelectCourse.jsp"/>
<put name="body" value="/user/courses/selectCourse.jsp"/>
</definition>
<definition name="page.submit.course.from.service.zone" extends="page.separators.serviceZone">
<put name="title" value="Editar Curso"/>
<put name="topnav" value="/user/serviceZone/topnavSubmitCourse.jsp"/>
<put name="body" value="/admin/courses/course.jsp"/>
</definition>
 
 
 
 
 
</tiles-definitions>
/impl/conf/WEB-INF/struts/tiles-courseunits.xml
19,18 → 19,30
<put name="navigation" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/courseunitworks.jsp"/>
</definition>
<definition name="page.load.courseunit.blog" extends="base.layout1">
<put name="title" value="Blog da Unidade Curricular"/>
<put name="topnav" value="/public/courseunits/topnavCourseUnitBlog.jsp"/>
<put name="navigation" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/blog.jsp"/>
</definition>
<definition name="page.load.courseunit.students" extends="base.layout1">
<put name="title" value="Alunos Inscritos da Unidade Curricular"/>
<put name="topnav" value="/public/courseunits/topnavCourseUnitStudents.jsp"/>
<put name="navigation" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/students.jsp"/>
</definition>
 
 
<definition name="page.load.courseunit.from.home" extends="page.separators.home">
<put name="title" value="Unidade Curricular"/>
<put name="topnav" value="/user/home/topnavCourseUnit.jsp"/>
<put name="left" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/courseunit.jsp"/>
<put name="body" value="/user/courseunits/courseunitIntranet.jsp"/>
</definition>
<definition name="page.submit.courseunit.from.home" extends="page.separators.home">
<put name="title" value="Unidade Curricular"/>
<put name="topnav" value="/user/home/topnavSubmitCourseUnit.jsp"/>
<put name="body" value="/user/courseunits/courseunit.jsp"/>
<put name="body" value="/user/courseunits/courseunitIntranet.jsp"/>
</definition>
<definition name="page.load.courseunit.works.from.home" extends="page.separators.home">
<put name="title" value="Trabalhos da Unidade Curricular"/>
38,12 → 50,47
<put name="left" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/courseunitworks.jsp"/>
</definition>
<definition name="page.load.courseunit.assignement.from.home" extends="page.separators.home">
<put name="title" value="Trabalho da Unidade Curricular"/>
<put name="topnav" value="/user/home/topnavCourseUnitAssignement.jsp"/>
<put name="left" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/courseunitassignement.jsp"/>
</definition>
<definition name="page.load.courseunit.students.from.home" extends="page.separators.home">
<put name="title" value="Alunos Inscritos da Unidade Curricular"/>
<put name="topnav" value="/user/home/topnavCourseUnitStudents.jsp"/>
<put name="left" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/students.jsp"/>
</definition>
 
 
 
 
 
<definition name="page.submit.blog.from.courseUnit" extends="page.separators.home">
<put name="title" value="Blog da Unidade Curricular"/>
<put name="topnav" value="/user/courseunits/topnavCreateBlog.jsp"/>
<put name="left" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/submitBlog.jsp"/>
</definition>
<definition name="page.load.blog.from.courseUnit" extends="page.separators.home">
<put name="title" value="Blog da Unidade Curricular"/>
<put name="topnav" value="/user/courseunits/topnavLoadBlog.jsp"/>
<put name="left" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/blogIntranet.jsp"/>
</definition>
<definition name="page.load.blog.month.from.courseUnit" extends="page.separators.home">
<put name="title" value="Blog da Unidade Curricular"/>
<put name="topnav" value="/user/courseunits/topnavLoadBlogMonth.jsp"/>
<put name="left" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/blogIntranet.jsp"/>
</definition>
 
 
 
 
 
 
<!--Administrative pages-->
 
<definition name="page.submit.courseunit.admin.from.service.zone" extends="page.separators.serviceZone">
/impl/conf/WEB-INF/struts/struts-announcements.xml
1,8 → 1,8
<?xml version="1.0" encoding="UTF-8"?>
 
<!--<!DOCTYPE struts-config PUBLIC-->
<!--"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"-->
<!--"http://struts.apache.org/dtds/struts-config_1_3.dtd">-->
<!--"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"-->
<!--"http://struts.apache.org/dtds/struts-config_1_3.dtd">-->
 
<struts-config>
 
50,6 → 50,26
<forward name="success" path="page.separators.serviceZone"/>
<forward name="from.add.role" path="page.submit.announcement.from.serviceZone"/>
</action>
<action path="/user/submitAnnouncementFromCourseUnit"
type="pt.estgp.estgweb.web.controllers.courseunits.CourseUnitsAnnouncementsController"
name="AnnouncementsForm"
scope="request"
parameter="dispatch"
input="page.submit.announcement.from.courseUnit"
validate="true">
<forward name="success" path="page.load.courseunit.from.home"/>
<forward name="from.add.role" path="page.submit.announcement.from.courseUnit"/>
</action>
<action path="/user/submitTodoAnnouncementFromServiceZone"
type="pt.estgp.estgweb.web.controllers.announcements.AnnouncementsController"
name="AnnouncementsForm"
scope="request"
parameter="dispatch"
input="page.submit.todo.announcement.from.serviceZone"
validate="true">
<forward name="success" path="page.separators.serviceZone"/>
<forward name="from.add.role" path="page.submit.todo.announcement.from.serviceZone"/>
</action>
 
 
<action path="/startDeleteAnnouncement" forward="/loadAnnouncement.do?dispatch=delete"/>
79,6 → 99,8
<forward name="submit" path="page.submit.announcement.from.home"/>
<forward name="from.add.role" path="page.submit.announcement.from.home"/>
</action>
 
 
<action path="/user/startSubmitAnnouncementFromServiceZone" forward="/user/loadAnnouncementFromServiceZone.do?dispatch=start&amp;from=ServiceZone"/>
<action path="/user/startLoadAnnouncementFromServiceZone" forward="/user/loadAnnouncementFromServiceZone.do?dispatch=load&amp;from=ServiceZone"/>
<action path="/user/startEditAnnouncementFromServiceZone" forward="/user/loadAnnouncementFromServiceZone.do?dispatch=edit&amp;from=ServiceZone"/>
96,7 → 118,59
<forward name="from.add.role" path="page.submit.announcement.from.serviceZone"/>
</action>
 
<action path="/user/startSubmitTodoAnnouncementFromServiceZone" forward="/user/loadTodoAnnouncementFromServiceZone.do?dispatch=start&amp;from=ServiceZone"/>
<action path="/user/startLoadTodoAnnouncementFromServiceZone" forward="/user/loadTodoAnnouncementFromServiceZone.do?dispatch=load&amp;from=ServiceZone"/>
<action path="/user/startEditTodoAnnouncementFromServiceZone" forward="/user/loadTodoAnnouncementFromServiceZone.do?dispatch=edit&amp;from=ServiceZone"/>
<action path="/user/startDeleteTodoAnnouncementFromServiceZone" forward="/user/loadTodoAnnouncementFromServiceZone.do?dispatch=delete&amp;from=ServiceZone"/>
<action path="/user/loadTodoAnnouncementFromServiceZone"
type="pt.estgp.estgweb.web.controllers.announcements.AnnouncementsController"
name="AnnouncementsForm"
scope="request"
parameter="dispatch"
input="page.submit.todo.announcement.from.serviceZone"
validate="false">
<forward name="load" path="page.load.todo.announcement.from.serviceZone"/>
<forward name="submit" path="page.submit.todo.announcement.from.serviceZone"/>
<forward name="success" path="page.separators.serviceZone"/>
<forward name="from.add.role" path="page.submit.todo.announcement.from.serviceZone"/>
</action>
 
<action path="/user/startSubmitTodoAnnouncementFromHome" forward="/user/loadTodoAnnouncementFromHome.do?dispatch=start&amp;from=Home"/>
<action path="/user/startLoadTodoAnnouncementFromHome" forward="/user/loadTodoAnnouncementFromHome.do?dispatch=load&amp;from=Home"/>
<action path="/user/startEditTodoAnnouncementFromHome" forward="/user/loadTodoAnnouncementFromHome.do?dispatch=edit&amp;from=Home"/>
<action path="/user/startDeleteTodoAnnouncementFromHome" forward="/user/loadTodoAnnouncementFromHome.do?dispatch=delete&amp;from=Home"/>
<action path="/user/loadTodoAnnouncementFromHome"
type="pt.estgp.estgweb.web.controllers.announcements.AnnouncementsController"
name="AnnouncementsForm"
scope="request"
parameter="dispatch"
input="page.submit.todo.announcement.from.home"
validate="false">
<forward name="load" path="page.load.todo.announcement.from.home"/>
<forward name="submit" path="page.submit.todo.announcement.from.home"/>
<forward name="success" path="page.separators.home"/>
<forward name="from.add.role" path="page.submit.todo.announcement.from.home"/>
</action>
 
 
<action path="/user/startSubmitAnnouncementFromCourseUnit" forward="/user/loadAnnouncementFromCourseUnit.do?dispatch=start&amp;from=CourseUnit"/>
<action path="/user/startLoadAnnouncementFromCourseUnit" forward="/user/loadAnnouncementFromCourseUnit.do?dispatch=load&amp;from=CourseUnit"/>
<action path="/user/startEditAnnouncementFromCourseUnit" forward="/user/loadAnnouncementFromCourseUnit.do?dispatch=edit&amp;from=CourseUnit"/>
<action path="/user/startDeleteAnnouncementFromCourseUnit" forward="/user/loadAnnouncementFromCourseUnit.do?dispatch=delete&amp;from=CourseUnit"/>
<action path="/user/loadAnnouncementFromCourseUnit"
type="pt.estgp.estgweb.web.controllers.courseunits.CourseUnitsAnnouncementsController"
name="AnnouncementsForm"
scope="request"
parameter="dispatch"
input="page.submit.announcement.from.courseUnit"
validate="false">
<forward name="load" path="page.load.announcement.from.courseUnit"/>
<forward name="submit" path="page.submit.announcement.from.courseUnit"/>
<forward name="success" path="/user/startLoadCourseUnitFromHome.do"/>
<forward name="from.add.role" path="page.submit.announcement.from.courseUnit"/>
</action>
 
 
</action-mappings>
 
</struts-config>
/impl/conf/WEB-INF/tlds/baco.tld
15,6 → 15,24
</attribute>
</tag>
<tag>
<name>isTeacherOfCourseUnit</name>
<tagclass>pt.estgp.estgweb.web.tags.IsTeacherOfCourseUnitTag</tagclass>
<attribute>
<name>courseUnitId</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>isStudentOfCourseUnit</name>
<tagclass>pt.estgp.estgweb.web.tags.IsStudentOfCourseUnitTag</tagclass>
<attribute>
<name>courseUnitId</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>hasRole</name>
<tagclass>pt.estgp.estgweb.web.tags.HasRoleTag</tagclass>
<attribute>
/impl/conf/WEB-INF/web.xml
81,6 → 81,7
/WEB-INF/struts/struts-announcements.xml,
/WEB-INF/struts/struts-banners.xml,
/WEB-INF/struts/struts-courseunits.xml,
/WEB-INF/struts/struts-courses.xml,
/WEB-INF/struts/struts-events.xml,
/WEB-INF/struts/struts-ftpclient.xml,
/WEB-INF/struts/struts-processworkflow.xml,
/impl/conf/log4j.properties
20,7 → 20,11
log4j.appender.hibernate.sessionServiceClass=HibernateHelper
log4j.appender.hibernate.loggingEventClass=LogEvent
 
# suppress warnings from the SessionImpl (like Narrowing proxy to class com.atlassian.confluence.pages.Page - this operation breaks ==)
log4j.logger.org.hibernate.engine.StatefulPersistenceContext.ProxyWarnLog=ERROR
log4j.additivity.org.hibernate.engine.StatefulPersistenceContext.ProxyWarnLog=false
 
 
#default category
log4j.rootLogger = info, defaultLog, stdout
 
/impl/conf/app.properties
7,7 → 7,6
site.url=@site.url@
 
 
 
email.server=mail.estgp.pt
email.user=
email.password=
33,6 → 32,8
user.super=all
user.student=student
user.teacher=teacher
user.courseCoordinator=courseCoordinator
user.courseDirector=courseDirector
 
user.role.00=all
user.role.01=admin
53,9 → 54,11
user.role.16=pedagogicCouncil
user.role.17=erasmusCouncil
user.role.18=courseCoordinator
user.role.19=sudentAssociation
user.role.19=studentAssociation
user.role.20=representativeCouncil
user.role.21=computerCenter
user.role.22=courseCoordinator
user.role.23=courseDirector
 
 
#########################################################################
69,23 → 72,52
#
announcements.text.summary.size=250
announcements.text.summary.size.small=100
announcements.max.visible=10
announcements.top.flash.news.timeout.miliseconds=7000
 
announcements.type.0=news
announcements.type.1=top.flash.news
announcements.type.2=bottom.flash.news
announcements.type.3=todo
announcements.type.4=courseUnitAnnouncement
 
#separate with , example helpdocs,reunions
announcements.not.standard.0=todo
announcements.not.standard.1=courseUnitAnnouncement
 
#Roles that can validate invalid announcements
announcements.validator.role.01=admin
announcements.validator.role.02=computerCenter
 
announcements.automatic.validation.role.1=all
announcements.automatic.validation.role.2=admin
announcements.automatic.validation.role.3=ci
announcements.automatic.validation.role.4=administrativeCouncil
announcements.automatic.validation.role.5=services
 
sudentAssociation.auto.validation.targets=student,oldStudent,futureStudent,erasmusStudent
sudentAssociation.auto.validation.types=news,top.flash.news
studentAssociation.auto.validation.targets=student,oldStudent,futureStudent,erasmusStudent
studentAssociation.auto.validation.types=news,top.flash.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
 
announcements.max.visible=10
announcements.top.flash.news.timeout.miliseconds=7000
administrativeCouncil.auto.validation.targets=student,oldStudent,futureStudent,erasmusStudent,teacher,teacher.eg,teacher.dg,teacher.ce
administrativeCouncil.auto.validation.types=news,top.flash.news,bottom.flash.news,todo
 
announcements.type.0=news
announcements.type.1=top.flash.news
announcements.type.2=bottom.flash.news
courseDirector.auto.validation.targets=student,oldStudent,futureStudent,erasmusStudent,teacher,teacher.eg,teacher.dg,teacher.ce
courseDirector.auto.validation.types=news,top.flash.news,bottom.flash.news,todo
 
courseCoordinator.auto.validation.targets=student,oldStudent,futureStudent,erasmusStudent,teacher,teacher.eg,teacher.dg,teacher.ce
courseCoordinator.auto.validation.types=news,top.flash.news,bottom.flash.news,todo
 
scientificCouncil.auto.validation.targets=student,oldStudent,futureStudent,erasmusStudent,teacher,teacher.eg,teacher.dg,teacher.ce
scientificCouncil.auto.validation.types=news,top.flash.news,bottom.flash.news,todo
 
pedagogicCouncil.auto.validation.targets=student,oldStudent,futureStudent,erasmusStudent,teacher,teacher.eg,teacher.dg,teacher.ce
pedagogicCouncil.auto.validation.types=news,top.flash.news,bottom.flash.news,todo
 
 
 
#role images for announcements
announcement.default.img=/imgs/rolesIcons/nd.gif
role.admin.img=/imgs/rolesIcons/estg.gif
98,9 → 130,6
role.services.img=/imgs/rolesIcons/secretaria.gif
 
 
announcements.validator.role.01=admin
announcements.validator.role.02=computerCenter
 
#########################################################################
#
# reminders
113,7 → 142,7
#
 
blog.desc.summary.size=250
 
blog.type.courseunit=courseunit
#########################################################################
# Link Analysis
#
193,7 → 222,18
#importSecondYearFormat {1}
importFinalFormat={0}{1}
 
importFirstYearFormatIntranet=yyyy
importSecondYearFormatIntranet=yyyy
importFinalFormatIntranet=AnoLectivo.{0}-{1}
 
intranet.semestre.S1=Semestre1
intranet.semestre.S2=Semestre2
 
intranet.setup.file=@intranet.setup.folders.file@
intranet.setup.users.filename=cursos.txt
intranet.setup.filename=@intranet.setup.folders.filename@
 
 
#########################################################################
#
#PopService
/impl/conf/berserk/sd.xml
52,12 → 52,10
<service>
<name>LoadUsers</name>
<implementationClass>pt.estgp.estgweb.services.users.LoadUsersService</implementationClass>
<description>Load student units</description>
<description>Load user of some class</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="Admins"/>
</filterChains>
</service>
 
104,6 → 102,7
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="IsInCourseUnit"/>
</filterChains>
</service>
<service>
116,6 → 115,7
<chain name="Session"/>
<!--<chain name="Admins"/>-->
<chain name="OwnersEdit"/>
<chain name="IsInCourseUnit"/>
<!--<chain name="OwnersEditOnlyIfNotValid"/>-->
<!--<chain name="ContextObjectTimer"/>-->
<!--<chain name="ContextStaticTimerExample"/>-->
624,25 → 624,111
</service>
<service>
<name>LoadCourseUnitWorks</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.LoadCourseUnitWorksService</implementationClass>
<implementationClass>pt.estgp.estgweb.services.courseunits.CourseUnitWorkService</implementationClass>
<description>Load course unit works</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadCourseUnitWorks</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
</filterChains>
</service>
<service>
<name>LoadCourseUnitWorkAssignement</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CourseUnitWorkService</implementationClass>
<description>Load course unit works</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadAssignement</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="OwnerCourseUnitFromWorkAssignement"/>
</filterChains>
</service>
<service>
<name>CreateCourseUnitWork</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CreateCourseUnitWorkService</implementationClass>
<implementationClass>pt.estgp.estgweb.services.courseunits.CourseUnitWorkService</implementationClass>
<description>Load course unit works</description>
<isTransactional>true</isTransactional>
<defaultMethod>create</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="OwnerCourseUnit"/>
</filterChains>
</service>
<service>
<name>EditCourseUnitWork</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CourseUnitWorkService</implementationClass>
<description>Load course unit works</description>
<isTransactional>true</isTransactional>
<defaultMethod>create</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="OwnerCourseUnitFromWorkAssignementObject"/>
</filterChains>
</service>
<service>
<name>StartCourseUnitBlog</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CourseUnitBlogService</implementationClass>
<description>start course unit blog creating if don't exist</description>
<isTransactional>true</isTransactional>
<defaultMethod>startUnitBlog</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
</filterChains>
</service>
<service>
<name>DeliverCourseUnitWork</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CourseUnitWorkService</implementationClass>
<description>Load course unit works</description>
<isTransactional>true</isTransactional>
<defaultMethod>deliverWork</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="IsStudentInCourseUnitFromWorkAssignement"/>
</filterChains>
</service>
<service>
<name>UpdateCourseUnitDeliverables</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CourseUnitWorkService</implementationClass>
<description>update deliverables with grade and observations</description>
<isTransactional>true</isTransactional>
<defaultMethod>updateDeliverables</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="OwnerCourseUnit"/>
</filterChains>
</service>
<service>
<name>ValidateInvalidateCourseUnitWork</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CourseUnitWorkService</implementationClass>
<description>Load course unit works</description>
<isTransactional>true</isTransactional>
<defaultMethod>validateInvalidate</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="OwnerCourseUnitFromWorkAssignement"/>
</filterChains>
</service>
<service>
<name>DeleteCourseUnitWork</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CourseUnitWorkService</implementationClass>
<description>Load course unit works</description>
<isTransactional>true</isTransactional>
<defaultMethod>delete</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="OwnerCourseUnitFromWorkAssignement"/>
</filterChains>
</service>
<service>
<name>SearchCourseUnit</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.SearchCourseUnitService</implementationClass>
<description>Load course unit works</description>
739,7 → 825,69
</service>
 
 
<service>
<name>CreateCourseUnitDirPackage</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CreateCourseUnitDirPackageService</implementationClass>
<description>Create a zip file with Intranet folders</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="Admins"/>
</filterChains>
</service>
 
 
 
 
<!--COURSES-->
<service>
<name>LoadCourseByCode</name>
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass>
<description>Load course by String code</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadCourseByCode</defaultMethod>
<filterChains>
<chain name="Logger"/>
</filterChains>
</service>
<service>
<name>LoadCourse</name>
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass>
<description>Load course by String code</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadCourse</defaultMethod>
<filterChains>
<chain name="Logger"/>
</filterChains>
</service>
<service>
<name>SubmitCourse</name>
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass>
<description>Create or Update a new course</description>
<isTransactional>true</isTransactional>
<defaultMethod>submitCourse</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="Admins"/>
</filterChains>
</service>
<service>
<name>LoadCourses</name>
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass>
<description>Load All Courses</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadCourses</defaultMethod>
<filterChains>
<chain name="Logger"/>
</filterChains>
</service>
 
 
 
 
 
<!--Administratives-->
<service>
<name>CreateCourseUnitAdmin</name>
/impl/conf/berserk/fd.xml
45,17 → 45,47
<name>OwnerUsersClass</name>
<implementationClass>pt.estgp.estgweb.filters.filters.OwnerUsersClass</implementationClass>
<description>
Checks if the requester is owner of the requested bead
Checks if the requester is owner of the requested bean
filter parameter: bean serializable id
filter parameter: bean class
</description>
<isTransactional>false</isTransactional>
</filter>
<filter>
<name>IsInCourseUnit</name>
<implementationClass>pt.estgp.estgweb.filters.filters.IsInCourseUnit</implementationClass>
<description>
Checks if the requester is in course unit of the requested bean
filter parameter: bean serializable id
filter parameter: bean class
</description>
<isTransactional>false</isTransactional>
</filter>
<filter>
<name>IsStudentInCourseUnitUsersClass</name>
<implementationClass>pt.estgp.estgweb.filters.filters.IsStudentInCourseUnitUsersClass</implementationClass>
<description>
Checks if the requester is student in course unit of the requested bean
filter parameter: bean serializable id
filter parameter: bean class
</description>
<isTransactional>false</isTransactional>
</filter>
<filter>
<name>IsTeacherInCourseUnitUsersClass</name>
<implementationClass>pt.estgp.estgweb.filters.filters.IsTeacherInCourseUnitUsersClass</implementationClass>
<description>
Checks if the requester is teacher in course unit of the requested bean
filter parameter: bean serializable id
filter parameter: bean class
</description>
<isTransactional>false</isTransactional>
</filter>
<filter>
<name>OwnerUsersClassBean</name>
<implementationClass>pt.estgp.estgweb.filters.filters.OwnerUsersClassBean</implementationClass>
<description>
Checks if the requester is owner of the requested bean inside the loaded bean
Checks if the requester is in course unit of the requested bean inside the loaded bean
filter parameter: bean serializable id
filter parameter: bean class
filter parameter: bean path to owned object from loaded bean
63,6 → 93,39
<isTransactional>false</isTransactional>
</filter>
<filter>
<name>IsInCourseUnitUsersClassBean</name>
<implementationClass>pt.estgp.estgweb.filters.filters.IsInCourseUnitUsersClassBean</implementationClass>
<description>
Checks if the requester is in of the requested bean inside the loaded bean
filter parameter: bean serializable id
filter parameter: bean class
filter parameter: bean path to owned object from loaded bean
</description>
<isTransactional>false</isTransactional>
</filter>
<filter>
<name>IsStudentInCourseUnitUsersClassBean</name>
<implementationClass>pt.estgp.estgweb.filters.filters.IsStudentInCourseUnitUsersClassBean</implementationClass>
<description>
Checks if the requester is student of the requested bean inside the loaded bean
filter parameter: bean serializable id
filter parameter: bean class
filter parameter: bean path to owned object from loaded bean
</description>
<isTransactional>false</isTransactional>
</filter>
<filter>
<name>IsTeacherInCourseUnitUsersClassBean</name>
<implementationClass>pt.estgp.estgweb.filters.filters.IsTeacherInCourseUnitUsersClassBean</implementationClass>
<description>
Checks if the requester is teacher of the requested bean inside the loaded bean
filter parameter: bean serializable id
filter parameter: bean class
filter parameter: bean path to owned object from loaded bean
</description>
<isTransactional>false</isTransactional>
</filter>
<filter>
<name>CanAddContentClass</name>
<implementationClass>pt.estgp.estgweb.filters.filters.CanAddContentClass</implementationClass>
<description>Checks if the requester can add content to specified object</description>
104,4 → 167,10
<description>Check if a resource can be loaded</description>
<isTransactional>false</isTransactional>
</filter>
<filter>
<name>ResourceAccessControlCourseUnit</name>
<implementationClass>pt.estgp.estgweb.filters.filters.ResourceAccessControlCourseUnitFilter</implementationClass>
<description>Check if a resource can be loaded</description>
<isTransactional>false</isTransactional>
</filter>
</filterDefinitions>
/impl/conf/berserk/fcd.xml
232,5 → 232,55
</filterChain>
 
 
<!--CourseUnits-->
<filterChain>
<name>OwnerCourseUnit</name>
<expression>OwnerUsersClass("serializable","pt.estgp.estgweb.domain.CourseUnitImpl")</expression>
<description>Owner of an object Control Chain</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>
</filterChain>
<filterChain>
<name>OwnerCourseUnitFromWorkAssignement</name>
<expression>OwnerUsersClassBean("serializable","pt.estgp.estgweb.domain.CourseUnitAssignementImpl","courseUnit")</expression>
<description>Owner of an object Control Chain</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>
</filterChain>
<filterChain>
<name>OwnerCourseUnitFromWorkAssignementObject</name>
<expression>OwnerUsersClassBean("object.serializable","pt.estgp.estgweb.domain.CourseUnitAssignementImpl","courseUnit")</expression>
<description>Owner of an object Control Chain</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>
</filterChain>
<filterChain>
<name>IsInCourseUnitFromWorkAssignement</name>
<expression>IsInCourseUnitUsersClassBean("serializable","pt.estgp.estgweb.domain.CourseUnitAssignementImpl","courseUnit")</expression>
<description>Owner of an object Control Chain</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>
</filterChain>
<filterChain>
<name>IsStudentInCourseUnitFromWorkAssignement</name>
<expression>IsStudentInCourseUnitUsersClassBean("serializable","pt.estgp.estgweb.domain.CourseUnitAssignementImpl","courseUnit")</expression>
<description>Owner of an object Control Chain</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>
</filterChain>
<filterChain>
<name>IsInCourseUnit</name>
<expression>IsInCourseUnit("object.courseUnitView.id")</expression>
<description>Owner of an object Control Chain</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>
</filterChain>
<!--<filterChain>-->
<!--<name>InternalCourseUnitBlog</name>-->
<!--<expression>!(BooleanCheck("serializable","pt.estgp.estgweb.domain.CourseUnitImpl","unitBlog.courseUnitInternal")) || ResourceAccessControlCourseUnit</expression>-->
<!--<description>Check if the the boolean is true</description>-->
<!--<invocationTiming>1</invocationTiming>-->
<!--<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>-->
<!--</filterChain>-->
 
</filterChainsDefinitions>
/impl/src/java/jomm/utils/DiacriticFilter.java
New file
0,0 → 1,123
 
package jomm.utils;
 
import org.apache.lucene.analysis.TokenFilter;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Token;
 
import java.io.*;
 
 
/**
* Normalizes token text to lower case.
*
* @version $Id: DiacriticFilter.java,v 1.2 2007/12/27 01:45:58 jmachado Exp $
*/
public final class DiacriticFilter extends TokenFilter
{
public DiacriticFilter(TokenStream in)
{
super(in);
}
 
public final Token next() throws IOException
{
Token t = input.next();
 
if (t == null)
return null;
String value = t.termText();
return new Token(clean(value),t.startOffset(),t.endOffset());
}
 
public static String clean(String value)
{
StringBuilder finalTerm = new StringBuilder();
for (int j=0 ; j < value.length() ; j++)
{
char c = value.charAt(j);
switch(c)
{
case 131: c = 'f'; break;
case 138: c = 'S'; break;
case 140: c = 'E'; break;
case 154: c = 'S'; break;
case 156: c = 'e'; break;
case 159: c = 'Y'; break;
case 167: c = 'S'; break;
case 169: c = 'c'; break;
case 192: c = 'A'; break;
case 193: c = 'A'; break;
case 194: c = 'A'; break;
case 195: c = 'A'; break;
case 196: c = 'A'; break;
case 197: c = 'A'; break;
case 198: c = 'A'; break;
case 199: c = 'C'; break;
case 200: c = 'E'; break;
case 201: c = 'E'; break;
case 202: c = 'E'; break;
case 203: c = 'E'; break;
case 204: c = 'I'; break;
case 205: c = 'I'; break;
case 206: c = 'I'; break;
case 207: c = 'I'; break;
case 208: c = 'D'; break;
case 209: c = 'N'; break;
case 210: c = 'O'; break;
case 211: c = 'O'; break;
case 212: c = 'O'; break;
case 213: c = 'O'; break;
case 214: c = 'O'; break;
case 215: c = 'X'; break;
case 216: c = 'O'; break;
case 217: c = 'U'; break;
case 218: c = 'U'; break;
case 219: c = 'U'; break;
case 220: c = 'U'; break;
case 221: c = 'Y'; break;
case 222: c = 'P'; break;
case 223: c = 'B'; break;
case 224: c = 'a'; break;
case 225: c = 'a'; break;
case 226: c = 'a'; break;
case 227: c = 'a'; break;
case 228: c = 'a'; break;
case 229: c = 'a'; break;
case 230: c = 'a'; break;
case 231: c = 'c'; break;
case 232: c = 'e'; break;
case 233: c = 'e'; break;
case 234: c = 'e'; break;
case 235: c = 'e'; break;
case 236: c = 'i'; break;
case 237: c = 'i'; break;
case 238: c = 'i'; break;
case 239: c = 'i'; break;
case 240: c = 'o'; break;
case 241: c = 'n'; break;
case 242: c = 'o'; break;
case 243: c = 'o'; break;
case 244: c = 'o'; break;
case 245: c = 'o'; break;
case 246: c = 'o'; break;
case 247: break;
case 248: c = 'o'; break;
case 249: c = 'u'; break;
case 250: c = 'u'; break;
case 251: c = 'u'; break;
case 252: c = 'u'; break;
case 253: c = 'y'; break;
case 254: c = 'p'; break;
}
finalTerm.append(c);
}
return finalTerm.toString();
}
 
public static void main(String args[])
{
for(int i = 0; i < 255;i++)
System.out.println(i + ":" + (char)i);
}
}
/impl/src/java/jomm/utils/StringsUtils.java
1,5 → 1,7
package jomm.utils;
 
import java.util.StringTokenizer;
 
/**
* @author Jorge Machado
* @date 21/Mai/2008
65,10 → 67,10
char c = candidate.charAt(i);
if (
(c >= '0' && c <= '9') ||
(c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z') ||
(c == '-') ||
(c == '_'))
(c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z') ||
(c == '-') ||
(c == '_'))
{
 
}
77,4 → 79,38
}
return true;
}
 
public static String normalizeResourceName(String name)
{
StringTokenizer tokenizer = new StringTokenizer(name);
StringBuilder finalName = new StringBuilder();
while(tokenizer.hasMoreTokens())
{
String token = tokenizer.nextToken();
if(!token.equals("-"))
{
String lowerToken = token.toLowerCase();
String cleanToken = clearDiacritics(lowerToken);
StringBuilder finalToken = new StringBuilder();
for(int i = 0; i< cleanToken.length();i++)
{
if(i == 0)
{
finalToken.append(("" + cleanToken.charAt(0)).toUpperCase());
}
else
finalToken.append(cleanToken.charAt(i));
}
finalName.append(finalToken);
if(tokenizer.hasMoreTokens())
finalName.append('.');
}
}
return finalName.toString();
}
 
public static String clearDiacritics(String lowerToken)
{
return DiacriticFilter.clean(lowerToken);
}
}
/impl/src/java/jomm/utils/MyCalendar.java
13,6 → 13,7
 
public class MyCalendar extends java.util.GregorianCalendar implements java.io.Serializable
{
SimpleDateFormat webTextDate = new SimpleDateFormat("yyyy/MM/dd");
public static final String simpleDateTimeFormat = "dd-MM-yyyy HH-mm-ss";
public static final String TimestampFormat = "yyyyMMddHHmmss";
public static final String GmtTimezone = "GMT";
311,6 → 312,10
formatter.setTimeZone(TimeZone.getTimeZone(MyCalendar.GmtTimezone));
return formatter.format(getTime());
}
public String getWebDateString()
{
return webTextDate.format(getTime());
}
 
public String getGMTDateTimeString(Locale locale)
{
434,4 → 439,6
return (int)Math.round(millisDifference / millisInOneHour);
}
 
 
 
}
/impl/src/java/jomm/utils/FilesUtils.java
New file
0,0 → 1,88
package jomm.utils;
 
import java.io.*;
import java.util.zip.ZipFile;
import java.util.zip.ZipException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import java.util.Date;
import java.util.Enumeration;
 
/**
* @author Jorge Machado
* @date 20/Jun/2008
* @see jomm.utils
*/
public class FilesUtils
{
public static String getExtension(String filename)
{
String extension = "";
if(filename == null)
return extension;
if(filename.indexOf(".")>=0)
extension = filename.substring(filename.lastIndexOf(".") + 1);
return extension;
}
 
public static void copy(InputStream src, String outputPath) throws IOException
{
FileOutputStream out = new FileOutputStream(new File(outputPath));
StreamsUtils.inputStream2OutputStream(src,out);
}
 
public static void zipFolder(String folder, String outFilename) throws IOException
{
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename));
zipFolder(folder,"",out);
out.close();
}
 
private static void zipFolder(String folder, String relativePath, ZipOutputStream out) throws IOException
{
File zipFolder = new File(folder);
// Compress the files
File[] files = zipFolder.listFiles();
for(File file : files)
{
if (file.isDirectory())
{
zipFolder(folder + "/" + file.getName(), relativePath + "/" + file.getName(),out);
}
else
{
FileInputStream in = new FileInputStream(file);
// Add ZIP entry to output stream.
out.putNextEntry(new ZipEntry(relativePath + "/" + file.getName()));
// Transfer bytes from the file to the ZIP file
int len;
byte[] buf = new byte[1024];
while ((len = in.read(buf)) > 0)
{
out.write(buf, 0, len);
}
// Complete the entry
out.closeEntry();
in.close();
}
}
}
 
public static void delete(String deleteFile)
{
delete(new File(deleteFile));
}
public static void delete(File toDelete)
{
if(toDelete.isFile())
toDelete.delete();
else
{
for(File f : toDelete.listFiles())
{
delete(f);
}
toDelete.delete();
}
}
}
/impl/src/java/jomm/dao/impl/AbstractDao.java
26,7 → 26,7
public abstract class AbstractDao<CLAZZ> implements IDomainObjectDao<CLAZZ>
{
 
 
/**
* Return the number of results that match the given criteria.
*
55,9 → 55,9
public CLAZZ getLast(String maxField)
{
List<CLAZZ> objs = createCriteria()
.addOrder( Order.desc(maxField) )
.setMaxResults(1)
.list();
.addOrder( Order.desc(maxField) )
.setMaxResults(1)
.list();
if(objs != null && objs.size() > 0)
return objs.get(0);
else
107,18 → 107,18
 
}
public static void commit() {
try
{
getCurrentSession().connection().commit();
}
catch (HibernateException e)
{
throw new DaoException(e);
}
catch (SQLException e)
{
throw new DaoException(e);
}
try
{
getCurrentSession().connection().commit();
}
catch (HibernateException e)
{
throw new DaoException(e);
}
catch (SQLException e)
{
throw new DaoException(e);
}
}
 
 
184,7 → 184,7
 
/**
* Create an SQLQuery based on the given query string.
*
*
* @param queryString an SQL query
* @return an SQLQuery
*/
225,12 → 225,12
throw new DaoException(e);
}
}
 
/**
* Returns results as a page.
*
*
* Finds "sizeOfPage" objects, starting from the page "pageIndex".
*
*
* @param pageIndex page number
* @param sizeOfPage results in page
* @return persistent objects
243,10 → 243,10
try
{
Criteria criteria = createCriteria();
 
criteria.setFirstResult(pageIndex * sizeOfPage);
criteria.setMaxResults(sizeOfPage);
 
return criteria.list();
}
catch (HibernateException e)
278,10 → 278,106
*
* @SuppressWarnings("unchecked")
*/
public static Object load( Class cl, Serializable dbKey) {
try
{
Object c = getCurrentSession().load(cl, dbKey);
if(c!=null && !((DomainObject)c).getReferenceClass().getName().equals(cl.getName()))
{
Class cC = ((DomainObject)c).getReferenceClass();
return getCurrentSession().load(cC,dbKey);
}
return c;
}
catch (HibernateException e)
{
throw new DaoException(e);
}
}
/**
* Used by the base DAO classes but here for your modification Load object
* matching the given key and return it.
*
* @SuppressWarnings("unchecked")
*/
public static Object get( Class cl, Serializable dbKey) {
try
{
Object c = getCurrentSession().get(cl, dbKey);
if(c!=null && !((DomainObject)c).getReferenceClass().getName().equals(cl.getName()))
{
Class cC = ((DomainObject)c).getReferenceClass();
return getCurrentSession().get(cC,dbKey);
}
return c;
}
catch (HibernateException e)
{
throw new DaoException(e);
}
}
 
/**
* Used by the base DAO classes but here for your modification Load object
* matching the given key and return it.
*
* @SuppressWarnings("unchecked")
*/
public static Object load( String cl, Serializable dbKey) {
try
{
Object c = getCurrentSession().load(cl, dbKey);
if(c!=null && !((DomainObject)c).getReferenceClass().getName().equals(cl))
{
Class cC = ((DomainObject)c).getReferenceClass();
return getCurrentSession().load(cC,dbKey);
}
return c;
}
catch (HibernateException e)
{
throw new DaoException(e);
}
}
/**
* Used by the base DAO classes but here for your modification Load object
* matching the given key and return it.
*
* @SuppressWarnings("unchecked")
*/
public static Object get( String cl, Serializable dbKey) {
try
{
Object c = getCurrentSession().get(cl, dbKey);
if(c!=null && !((DomainObject)c).getReferenceClass().getName().equals(cl))
{
Class cC = ((DomainObject)c).getReferenceClass();
return getCurrentSession().get(cC,dbKey);
}
return c;
}
catch (HibernateException e)
{
throw new DaoException(e);
}
}
 
/**
* Used by the base DAO classes but here for your modification Load object
* matching the given key and return it.
*
* @SuppressWarnings("unchecked")
*/
public final CLAZZ load(Serializable dbKey) {
try
{
return (CLAZZ) getCurrentSession().load(getReferenceClass(), dbKey);
CLAZZ c = (CLAZZ) getCurrentSession().load(getReferenceClass(), dbKey);
if(c != null && !((DomainObject)c).getReferenceClass().getName().equals(getReferenceClass().getName()))
{
Class cC = ((DomainObject)c).getReferenceClass();
return (CLAZZ) getCurrentSession().load(cC,dbKey);
}
return c;
}
catch (HibernateException e)
{
337,14 → 433,14
{
return loadOrNullLockWrite("id",dbKey);
}
/**
/**
* Used by the base DAO classes but here for your modification Load object
* matching the given key and return it.
*
* @SuppressWarnings("unchecked")
*/
public CLAZZ loadOrNullLockWrite(String field, Serializable dbKey)
{
{
try
{
return (CLAZZ) createCriteria().add(eq(field,dbKey)).uniqueResult();
384,7 → 480,13
*/
public final CLAZZ get(Serializable dbKey) {
try {
return (CLAZZ) getCurrentSession().get(getReferenceClass(), dbKey);
CLAZZ c = (CLAZZ) getCurrentSession().get(getReferenceClass(), dbKey);
if(c!=null && !((DomainObject)c).getReferenceClass().getName().equals(getReferenceClass().getName()))
{
Class cC = ((DomainObject)c).getReferenceClass();
return (CLAZZ) getCurrentSession().get(cC,dbKey);
}
return c;
}
catch (HibernateException e) {
throw new DaoException(e);
399,7 → 501,7
* using the current value of the identifier property if the assigned
* generator is used.)
*/
public Serializable save(CLAZZ obj)
public Serializable save(CLAZZ obj)
{
try {
DomainObject o = (DomainObject) obj;
431,9 → 533,9
 
/**
* Saves a collection of objects without returning the DbKey.
*
*
* To obtain the DbKey, use the object itself.
*
*
* @param objs List of objects to save
*/
public final void save(Collection<CLAZZ> objs)
612,7 → 714,7
 
/**
* Deletes a collection of objects.
*
*
* @param objs Objects to delete
*/
public final void delete(Collection<CLAZZ> objs)
704,7 → 806,7
 
if (pageSize >= 0 && pageSize < count) {
return criteria.setFirstResult(pageSize * pageNumber)
.setMaxResults(pageSize);
.setMaxResults(pageSize);
}
 
return criteria;
/impl/src/java/pt/estgp/estgweb/utils/DatesUtils.java
22,6 → 22,10
static SimpleDateFormat SIGES_importSecondYearFormat = new SimpleDateFormat(Globals.SIGES_importSecondYearFormat);
static MessageFormat SIGES_importFinalFormat = new MessageFormat(Globals.SIGES_importFinalFormat);
 
static SimpleDateFormat SIGES_importFirstYearFormatIntranet = new SimpleDateFormat(Globals.SIGES_importFirstYearFormatIntranet);
static SimpleDateFormat SIGES_importSecondYearFormatIntranet = new SimpleDateFormat(Globals.SIGES_importSecondYearFormatIntranet);
static MessageFormat SIGES_importFinalFormatIntranet = new MessageFormat(Globals.SIGES_importFinalFormatIntranet);
 
public static String getImportYear()
{
MyCalendar mc = new MyCalendar();
42,13 → 46,36
String firstYearStr = SIGES_importFirstYearFormat.format(firstYear.getTime());
String secondYearStr = SIGES_importSecondYearFormat.format(secondYear.getTime());
 
return getFormatedImportYear(firstYearStr,secondYearStr);
return getFormatedImportYear(firstYearStr,secondYearStr,SIGES_importFinalFormat);
}
 
public static String getFormatedImportYear(String firstYearStr, String secondYearStr)
public static String getImportYearIntranet()
{
MyCalendar mc = new MyCalendar();
int month = mc.getMonth();
MyCalendar firstYear;
MyCalendar secondYear;
if(month <= 8)
{
firstYear = new MyCalendar(mc.getYear() - 1,1,1);
secondYear = new MyCalendar(mc.getYear(),1,1);
}
else
{
firstYear = new MyCalendar(mc.getYear(),1,1);
secondYear = new MyCalendar(mc.getYear()+1,1,1);
}
 
String firstYearStr = SIGES_importFirstYearFormatIntranet.format(firstYear.getTime());
String secondYearStr = SIGES_importSecondYearFormatIntranet.format(secondYear.getTime());
 
return getFormatedImportYear(firstYearStr,secondYearStr,SIGES_importFinalFormatIntranet);
}
 
public static String getFormatedImportYear(String firstYearStr, String secondYearStr, MessageFormat finalFormat)
{
String[] years = {firstYearStr,secondYearStr};
return MessageFormat.format(Globals.SIGES_importFinalFormat,years);
return finalFormat.format(years);
}
 
public static List<String> getImportYears(int size)
72,7 → 99,7
String secondYearStr = SIGES_importSecondYearFormat.format(secondYear.getTime());
 
List<String> importYears = new ArrayList<String>();
importYears.add(getFormatedImportYear(firstYearStr,secondYearStr));
importYears.add(getFormatedImportYear(firstYearStr,secondYearStr,SIGES_importFinalFormat));
 
for(int i = 0; i < size;i++)
{
80,7 → 107,7
secondYear = new MyCalendar(secondYear.getYear() - 1,1,1);
firstYearStr = SIGES_importFirstYearFormat.format(firstYear.getTime());
secondYearStr = SIGES_importSecondYearFormat.format(secondYear.getTime());
importYears.add(getFormatedImportYear(firstYearStr,secondYearStr));
importYears.add(getFormatedImportYear(firstYearStr,secondYearStr,SIGES_importFinalFormat));
}
return importYears;
}
/impl/src/java/pt/estgp/estgweb/utils/RoleManager.java
53,17 → 53,17
}
 
public static boolean hasRole(List<String> roles, String requiredRole)
{
if(roles == null || roles.size() == 0)
return false;
 
for(String role: roles)
{
if(roles == null || roles.size() == 0)
return false;
 
for(String role: roles)
{
if(role.equals(requiredRole))
return true;
}
return false;
if(role.equals(requiredRole))
return true;
}
return false;
}
 
 
public static List readRoles()
97,7 → 97,7
 
public static List<String> getRolesFromSerial(String rolesStr)
{
if(rolesStr == null)
if(rolesStr == null)
return null;
String[] roles = rolesStr.split(ROLE_SEPARATOR);
List<String> l = new ArrayList<String>();
108,6 → 108,35
return l;
}
 
public static String addRole(String old, String newRole)
{
if(old == null || old.length() == 0)
return newRole;
else
{
List<String> oldRoles = getRolesFromSerial(old);
if(!oldRoles.contains(newRole))
oldRoles.add(newRole);
else
return old;
return getSerialRoles(oldRoles);
}
}
 
public static String removeRole(String old, String toRemoveRole)
{
if(old == null || old.length() == 0)
return "";
else
{
List<String> oldRoles = getRolesFromSerial(old);
while(oldRoles.contains(toRemoveRole))
oldRoles.remove(toRemoveRole);
return getSerialRoles(oldRoles);
}
}
 
 
public static String catRole(String old, String newRole)
{
if(old == null || old.length() == 0)
115,4 → 144,5
else
return old + ROLE_SEPARATOR + newRole;
}
 
}
/impl/src/java/pt/estgp/estgweb/Globals.java
5,6 → 5,7
import pt.estgp.estgweb.domain.User;
 
import java.util.List;
import java.util.ArrayList;
import java.math.BigDecimal;
 
/**
33,15 → 34,25
public static final String ANNOUNCEMENT_TYPE_NEWS = "news";
public static final String ANNOUNCEMENT_TYPE_TOP_FLASH_NEWS = "top.flash.news";
public static final String ANNOUNCEMENT_TYPE_BOTTOM_FLASH_NEWS = "bottom.flash.news";
public static final String ANNOUNCEMENT_TYPE_TODO = "todo";
public static final String ANNOUNCEMENT_TYPE_COURSE_UNIT = "courseUnitAnnouncement";
public static final int NUMBER_ANNOUNCEMENT_TYPE_NEW_INDEX = 5;
public static final int NUMBER_ANNOUNCEMENT_TYPE_TOP_FLASH_NEWS_INDEX = 1;
public static final int NUMBER_ANNOUNCEMENT_TYPE_BOTTOM_FLASH_NEWS_INDEX = 2;
public static final int ANNOUNCEMENT_TYPE_TOP_FLASH_NEWS_TIMEOUT = ConfigProperties.getIntProperty("announcements.top.flash.news.timeout.miliseconds");
public static final List<String> ANNOUNCEMENT_NOT_STANDARD = ConfigProperties.getListValues("announcements.not.standard");
public static final int HOME_MAX_COURSE_UNIT_ANNOUNCEMENTS = 3;
public static List<String> USER_ROLES = ConfigProperties.getListValues("user.role");
 
public static final String STUDENT_ROLE = ConfigProperties.getProperty("user.student");
public static final String TEACHER_ROLE = ConfigProperties.getProperty("user.teacher");
 
public static final String COURSE_COORDINATOR_ROLE = ConfigProperties.getProperty("user.courseCoordinator");
public static final String COURSE_DIRECTOR_ROLE = ConfigProperties.getProperty("user.courseDirector");
 
 
public static final String BLOG_TYPE_COURSE_UNIT = ConfigProperties.getProperty("blog.type.courseunit");
 
/*SIGES WEB SERVICES*/
public static final BigDecimal SIGES_INSTITUTION_CODE = new BigDecimal(ConfigProperties.getIntProperty("siges.institution.code"));
public static final String SIGES_WEBSERVICE_WSDL = ConfigProperties.getProperty("ws.siges.wsdl");
88,5 → 99,20
public static final String SIGES_importSecondYearFormat = ConfigProperties.getProperty("importSecondYearFormat");
public static final String SIGES_importFinalFormat = ConfigProperties.getProperty("importFinalFormat");
 
public static final String SIGES_importFirstYearFormatIntranet = ConfigProperties.getProperty("importFirstYearFormatIntranet");
public static final String SIGES_importSecondYearFormatIntranet = ConfigProperties.getProperty("importSecondYearFormatIntranet");
public static final String SIGES_importFinalFormatIntranet = ConfigProperties.getProperty("importFinalFormatIntranet");
 
public static final String INTRANET_SEMESTRE_S1 = ConfigProperties.getProperty("intranet.semestre.S1");
public static final String INTRANET_SEMESTRE_S2 = ConfigProperties.getProperty("intranet.semestre.S2");
 
 
public static final String INTRANET_SETUP_FILE = ConfigProperties.getProperty("intranet.setup.file");
public static final String INTRANET_USERS_SETUP_FILE_NAME = ConfigProperties.getProperty("intranet.setup.users.filename");
public static final String INTRANET_SETUP_FILE_NAME = ConfigProperties.getProperty("intranet.setup.filename");
 
 
 
 
 
}
/impl/src/java/pt/estgp/estgweb/services/courses/CoursesCommonServices.java
New file
0,0 → 1,124
package pt.estgp.estgweb.services.courses;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.services.common.*;
import pt.estgp.estgweb.services.common.impl.DefaultSearchResults;
import pt.estgp.estgweb.services.common.impl.DefaultResult;
import pt.estgp.estgweb.services.common.impl.DefaultToDo;
import pt.estgp.estgweb.services.courseunits.CourseUnitsCommonServices;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import org.apache.log4j.Logger;
 
import java.util.*;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
/**
* @author Jorge Machado
* <p/>
* <p/>
* Created at 17/Out/2003 , 23:45:24
*/
public class CoursesCommonServices implements IService, IModuleCommonServices
{
private static final Logger logger = Logger.getLogger(CoursesCommonServices.class);
 
 
public int countSearch(String search, SearchTypeEnum searchType, UserSession userSession)
{
return 0;
}
 
public ISearchResults search(String search, SearchTypeEnum searchType, int page, int maxResults, UserSession userSession)
{
return search(null, search, searchType, page, maxResults, userSession);
}
 
public ISearchResults search(String from, String search, SearchTypeEnum searchType, int page, int maxResults, UserSession userSession)
{
DefaultSearchResults searchResults = new DefaultSearchResults();
searchResults.setModule(ModuleEnum.Courses);
 
searchResults.setTotalResults(DaoFactory.getCourseDaoImpl().countCoursesActualYear(search, searchType));
if (searchResults.getTotalResults() > 0)
{
List<Course> courses = DaoFactory.getCourseDaoImpl().searchActualYear(search, searchType, maxResults, page);
if (courses == null)
return searchResults;
for (Course course : courses)
{
DefaultResult defaultResult = new DefaultResult();
defaultResult.setTitle(course.getName());
defaultResult.setText(course.getDescription());
if (from == null)
defaultResult.setUrl("/startLoadCourse.do?id=" + course.getId());
else
defaultResult.setUrl("/user/startLoadCourseFrom" + from + ".do?id=" + course.getId());
searchResults.addResult(defaultResult);
}
}
return searchResults;
}
 
 
 
 
public int countToDo(UserSession userSession)
{
return 0;
}
 
public IToDoCat getToDo(UserSession userSession)
{
return null;
}
 
public List<IToDo> getAllToDos(UserSession userSession)
{
List<IToDo> todos = new ArrayList<IToDo>();
 
if(userSession.getUser() != null
&& userSession.getUser() instanceof Teacher)
 
{
Teacher teacher = (Teacher) userSession.getUser();
if(teacher.getCoordinatorCourses() != null && teacher.getCoordinatorCourses().size() > 0 || teacher.getDirectorCourses() != null && teacher.getDirectorCourses().size() > 0)
{
Set<Course> coordinatorCourses = teacher.getCoordinatorCourses();
Set<Course> directorCourses = teacher.getDirectorCourses();
if(coordinatorCourses == null)
coordinatorCourses = new HashSet<Course>();
if(directorCourses == null)
directorCourses = new HashSet<Course>();
coordinatorCourses.removeAll(directorCourses);
directorCourses.addAll(coordinatorCourses);
for(Course course: directorCourses)
{
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadMissingObjectivesOrProgramGivenCourse(course.getId());
for(CourseUnit c: courseUnits)
{
DefaultToDo defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "course.courseunit.program.objectives.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
todos.add(defaultToDo);
}
}
}
}
return todos;
}/*This method is invoked from object creation*/
 
public void adviseNew(DomainObject object)
{
//To change body of implemented methods use File | Settings | File Templates.
}
 
public void adviseUpdate(DomainObject object)
{
//To change body of implemented methods use File | Settings | File Templates.
}
}
/impl/src/java/pt/estgp/estgweb/services/courses/CoursesService.java
New file
0,0 → 1,123
package pt.estgp.estgweb.services.courses;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.services.data.RepositoryService;
import pt.estgp.estgweb.services.courseunits.LoadCourseUnitAnnouncements;
import pt.estgp.estgweb.services.courseunits.LoadCourseUnitService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.AnnouncementView;
import pt.estgp.estgweb.domain.views.CourseView;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
import org.apache.log4j.Logger;
 
import java.util.List;
import java.util.ArrayList;
import java.io.InputStream;
 
import jomm.utils.FilesUtils;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
/**
* @author Jorge Machado
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
public class CoursesService implements IService
{
private static final Logger logger = Logger.getLogger(CoursesService.class);
 
RepositoryService repositoryService = new RepositoryService();
 
 
public CourseView loadCourse(long id, boolean initUnits) throws ServiceException
{
Course c = DaoFactory.getCourseDaoImpl().get(id);
 
if(c != null)
{
CourseView cV = new CourseView(c,initUnits);
if(c.getStudiesPlan() != null)
{
RepositoryFileImpl repositoryFile = repositoryService.loadView(c.getStudiesPlan());
cV.setStudiesPlan(repositoryFile);
}
 
return cV;
}
return null;
}
 
public CourseView loadCourseByCode(String code, boolean initUnits) throws ServiceException
{
Course c = DaoFactory.getCourseDaoImpl().findCourseByCode(code);
if(c != null)
{
CourseView cV = new CourseView(c,initUnits);
if(c.getStudiesPlan() != null)
{
RepositoryFileImpl repositoryFile = repositoryService.loadView(c.getStudiesPlan());
cV.setStudiesPlan(repositoryFile);
}
return cV;
}
return null;
}
 
public CourseView submitCourse(CourseView courseView,
InputStream stream,
String name,
int size,
String contentType,
UserSession userSession) throws ServiceException
{
Course c;
if(courseView.getId() > 0)
c = DaoFactory.getCourseDaoImpl().get(courseView.getId());
else
{
c = DomainObjectFactory.createCourseImpl();
DaoFactory.getCourseDaoImpl().save(c);
}
 
if(stream != null && size > 0)
{
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);
c.setStudiesPlan(identifier);
}
else
{
repositoryService.updateRepositoryFile(c.getStudiesPlan(), stream, contentType, extension, size, name, "course.studies.plan " + c.getName(), ResourceAccessControlEnum.publicDomain);
}
}
courseView.persistViewInObject(c);
return loadCourse(c.getId(),false);
}
 
public List<CourseView> loadCourses() throws ServiceException
{
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByName();
List<CourseView> courseViews = new ArrayList<CourseView>();
for(Course c: courses)
{
CourseView courseView = new CourseView(c);
courseViews.add(courseView);
}
return courseViews;
}
 
 
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/LoadCourseUnitWorksService.java
File deleted
/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitWorkService.java
File deleted
/impl/src/java/pt/estgp/estgweb/services/courseunits/LoadTeachedUnitsAnnouncementsService.java
5,6 → 5,7
import pt.estgp.estgweb.domain.views.AnnouncementView;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.courseunits.impl.DefaultCourseUnitAnnouncements;
import pt.estgp.estgweb.Globals;
 
import java.util.List;
import java.util.ArrayList;
36,6 → 37,8
List<AnnouncementView> announcementViews = new ArrayList<AnnouncementView>();
for(Announcement a :c.getAnnouncements())
{
if(announcementViews.size() > Globals.HOME_MAX_COURSE_UNIT_ANNOUNCEMENTS)
break;
AnnouncementView aV = new AnnouncementView(a);
announcementViews.add(aV);
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/CourseUnitsCommonServices.java
11,6 → 11,7
 
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
68,9 → 69,9
return searchResults;
}
 
 
 
 
public int countToDo(UserSession userSession)
{
return 0;
87,6 → 88,7
 
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());
for(CourseUnit c: courseUnits)
{
94,18 → 96,43
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);
}
}
 
List<CourseUnitQuestion> courseUnitQuestions = DaoFactory.getCourseUnitQuestionDaoImpl().loadMissingQuestions(userSession.getUser().getId());
for(CourseUnitQuestion c: courseUnitQuestions)
{
DefaultToDo defaultToDo = new DefaultToDo(c.getQuestion(),null,c.getCourseUnit().getName(), "courseunit.question.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
todos.add(defaultToDo);
}
 
 
}
if(userSession.getUser() != null && userSession.getUser() instanceof Student)
{
List<CourseUnitAssignementImpl> courseUnitAssignements = DaoFactory.getCourseUnitAssignementDaoImpl().loadActiveAssignements(userSession.getUser().getId());
List<CourseUnitAssignementImpl> courseUnitAssignementsDelivered = DaoFactory.getCourseUnitAssignementDaoImpl().loadDeliveredAssignements(userSession.getUser().getId());
courseUnitAssignements.removeAll(courseUnitAssignementsDelivered);
for(CourseUnitAssignementImpl c: courseUnitAssignements)
{
DefaultToDo defaultToDo = new DefaultToDo(c.getTitle(),null,c.getCourseUnit().getName(), "courseunit.assignement.todo","/user/startLoadCourseUnitWorksFromHome.do?courseUnitView.id=" + c.getCourseUnit().getId());
todos.add(defaultToDo);
}
}
return todos;
}/*This method is invoked from object creation*/
 
/impl/src/java/pt/estgp/estgweb/services/courseunits/LoadTeachedUnitsService.java
3,9 → 3,12
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.CourseUnitImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
 
import java.util.Set;
import java.util.List;
import java.util.ArrayList;
 
/**
* @author Jorge Machado
14,10 → 17,10
*/
public class LoadTeachedUnitsService implements IService
{
public Set<CourseUnit> run(long teacherId)
public List<CourseUnitImpl> run(long teacherId)
{
Teacher t = DaoFactory.getTeacherDaoImpl().load(teacherId);
Set<CourseUnit> units = t.getTeachedUnits();
List<CourseUnitImpl> units = new ArrayList(t.getTeachedUnits());
for(CourseUnit c: units)
{
c.getName();
/impl/src/java/pt/estgp/estgweb/services/courseunits/UsersUnitsService.java
29,10 → 29,18
{
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId);
TeacherImpl t = (TeacherImpl) DaoFactory.getTeacherDaoImpl().get(teacherId);
t.getId();
courseUnit.getTeachers().remove(t);
courseUnit.getTeachers().add(t);
return loadCourseUnitService.run(courseUnitId,true,true,userSession);
if(t != null)
{
courseUnit.getTeachers().remove(t);
courseUnit.getTeachers().add(t);
return loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
}
else
{
CourseUnitView cV = loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
cV.setNotFound(true);
return cV;
}
}
 
public CourseUnitView removeTeacher(long teacherId,long courseUnitId, UserSession userSession) throws ServiceException
40,16 → 48,25
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId);
TeacherImpl t = (TeacherImpl) DaoFactory.getTeacherDaoImpl().get(teacherId);
courseUnit.getTeachers().remove(t);
return loadCourseUnitService.run(courseUnitId,true,true,userSession);
return loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
}
 
public CourseUnitView addStudent(int code,long courseUnitId, UserSession userSession) throws ServiceException
public CourseUnitView addStudent(int code, long courseUnitId, UserSession userSession) throws ServiceException
{
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId);
StudentImpl s = (StudentImpl) DaoFactory.getStudentDaoImpl().loadBySigesCode(code);
courseUnit.getStudents().remove(s);
courseUnit.getStudents().add(s);
return loadCourseUnitService.run(courseUnitId,true,true,userSession);
if(s != null)
{
courseUnit.getStudents().remove(s);
courseUnit.getStudents().add(s);
return loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
}
else
{
CourseUnitView cV = loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
cV.setNotFound(true);
return cV;
}
}
 
public CourseUnitView removeStudent(int code,long courseUnitId, UserSession userSession) throws ServiceException
57,6 → 74,6
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId);
StudentImpl s = (StudentImpl) DaoFactory.getStudentDaoImpl().loadBySigesCode(code);
courseUnit.getStudents().remove(s);
return loadCourseUnitService.run(courseUnitId,true,true,userSession);
return loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
}
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitAdminService.java
29,7 → 29,7
public class CreateCourseUnitAdminService implements IService
{
 
LoadCourseUnitWorksService loadCourseUnitWorksService = new LoadCourseUnitWorksService();
CourseUnitWorkService loadCourseUnitWorksService = new CourseUnitWorkService();
 
private static final Logger logger = Logger.getLogger(CreateCourseUnitAdminService.class);
 
54,6 → 54,6
 
 
 
return loadCourseUnitWorksService.run(courseUnit.getId(),userSession);
return loadCourseUnitWorksService.loadCourseUnitWorks(courseUnit.getId(),userSession);
}
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitDirPackageService.java
New file
0,0 → 1,151
package pt.estgp.estgweb.services.courseunits;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.Globals;
import org.apache.log4j.Logger;
 
import java.util.List;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
 
import jomm.utils.BytesUtils;
import jomm.utils.StringsUtils;
import jomm.utils.FilesUtils;
import jomm.dao.impl.AbstractDao;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
/**
* @author Jorge Machado
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
public class CreateCourseUnitDirPackageService implements IService
{
private static final Logger logger = Logger.getLogger(CreateCourseUnitDirPackageService.class);
 
public String run(UserSession userSession) throws ServiceException
{
String importYear = DatesUtils.getImportYear();
String importYearIntranet = DatesUtils.getImportYearIntranet();
String tmpName = BytesUtils.generateHexKey();
String tmpDir = Globals.TMP_DIR + "/" + tmpName;
new File(tmpDir).mkdirs();
List<Course> courses = DaoFactory.getCourseDaoImpl().findAll(importYear);
try
{
FileWriter batRunner = new FileWriter(tmpDir + "/create.bat");
 
String back = "";
for(Course c: courses)
{
String couseDirPath = tmpDir + "/" + StringsUtils.normalizeResourceName(c.getName()) + '.' + c.getCode();
File courseDir = new File(couseDirPath);
courseDir.mkdirs();
try
{
String courseImportYearPathDos = couseDirPath + "\\" + importYearIntranet;
String courseImportYearPath = couseDirPath + "/" + importYearIntranet;
File courseImportYearDir = new File(courseImportYearPath);
courseImportYearDir.mkdirs();
new File(courseImportYearPath + "/" + Globals.INTRANET_SEMESTRE_S1).mkdirs();
new File(courseImportYearPath + "/" + Globals.INTRANET_SEMESTRE_S2).mkdirs();
FilesUtils.copy(CreateCourseUnitDirPackageService.class.getResourceAsStream(Globals.INTRANET_SETUP_FILE),courseImportYearPath + "/" + Globals.INTRANET_SEMESTRE_S1 + "/" + Globals.INTRANET_SETUP_FILE_NAME);
FilesUtils.copy(CreateCourseUnitDirPackageService.class.getResourceAsStream(Globals.INTRANET_SETUP_FILE),courseImportYearPath + "/" + Globals.INTRANET_SEMESTRE_S2 + "/" + Globals.INTRANET_SETUP_FILE_NAME);
 
String callPathS1 = (courseImportYearPathDos + "\\" + Globals.INTRANET_SEMESTRE_S1 + "\\").substring(tmpDir.length() + 1);
String callPathS2 = (courseImportYearPathDos + "\\" + Globals.INTRANET_SEMESTRE_S2 + "\\").substring(tmpDir.length() + 1);
batRunner.write("cd " + back + callPathS1);
back = "..\\..\\..\\";
batRunner.write("\n");
batRunner.write(Globals.INTRANET_SETUP_FILE_NAME + " " + Globals.INTRANET_USERS_SETUP_FILE_NAME);
batRunner.write("\n");
batRunner.write("cd " + back + callPathS2);
batRunner.write("\n");
batRunner.write(Globals.INTRANET_SETUP_FILE_NAME + " " + Globals.INTRANET_USERS_SETUP_FILE_NAME);
batRunner.write("\n");
FileWriter confWriterSemestre1 = new FileWriter(courseImportYearPath + "/" + Globals.INTRANET_SEMESTRE_S1 + "/" + Globals.INTRANET_USERS_SETUP_FILE_NAME);
FileWriter confWriterSemestre2 = new FileWriter(courseImportYearPath + "/" + Globals.INTRANET_SEMESTRE_S2 + "/" + Globals.INTRANET_USERS_SETUP_FILE_NAME);
 
 
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadByCourse(c.getId(),importYear);
for(CourseUnit courseUnit: courseUnits)
{
FileWriter nowWriter;
String semestre;
if(courseUnit.getSemestre().equals("S1"))
{
nowWriter = confWriterSemestre1;
semestre = Globals.INTRANET_SEMESTRE_S1;
}
else
{
nowWriter = confWriterSemestre2;
semestre = Globals.INTRANET_SEMESTRE_S2;
}
 
String normalizedName = StringsUtils.normalizeResourceName(courseUnit.getName());
String unitPath = courseImportYearPath + "/" + semestre + "/" + normalizedName;
courseUnit.setNormalizedName(normalizedName);
courseUnit.setPathIntranet(unitPath.substring(tmpDir.length()));
nowWriter.write(normalizedName);
 
if(courseUnit.getTeachers() != null)
{
String users = "";
int counter = 0;
for(Teacher t: courseUnit.getTeachers())
{
if(t.getUsername() != null)
{
users += " " + t.getUsername();
counter++;
}
}
nowWriter.write(" " + counter + users);
nowWriter.write("\n");
}
}
confWriterSemestre1.close();
confWriterSemestre2.close();
}
catch (IOException e)
{
logger.error(e,e);
}
}
batRunner.write("cd " + back);
batRunner.close();
FilesUtils.zipFolder(tmpDir,tmpDir + ".zip");
FilesUtils.delete(tmpDir);
return tmpName + ".zip";
}
catch (IOException e)
{
logger.error(e,e);
}
return null;
}
 
public static void main(String[] args) throws ServiceException
{
AbstractDao.getCurrentSession().beginTransaction();
new CreateCourseUnitDirPackageService().run(null);
AbstractDao.getCurrentSession().getTransaction().commit();
}
 
 
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/LoadCourseUnitService.java
5,10 → 5,7
import pt.estgp.estgweb.services.blogs.LoadBlogPostsService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.data.RepositoryService;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.domain.views.BlogPostView;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.UserView;
import pt.estgp.estgweb.domain.views.*;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import org.apache.log4j.Logger;
36,17 → 33,18
{
 
RepositoryService repositoryService = new RepositoryService();
LoadCourseUnitAnnouncements loadCourseUnitAnnouncements = new LoadCourseUnitAnnouncements();
 
private static final Logger logger = Logger.getLogger(LoadCourseUnitService.class);
 
public CourseUnitView run(long id, boolean initTeachers, boolean initStudents, UserSession userSession) throws ServiceException
public CourseUnitView run(long id, boolean initTeachers, boolean initStudents, boolean initBlog, UserSession userSession) throws ServiceException
{
CourseUnit c = DaoFactory.getCourseUnitDaoImpl().get(id);
 
if(c == null)
return null;
CourseUnitView cV = new CourseUnitView(c,initTeachers,initStudents);
CourseUnitView cV = new CourseUnitView(c,initTeachers,initStudents,initBlog);
 
if(c.getProgramStreamId()!= null)
{
57,6 → 55,12
cV.setExtension(repositoryFile.getLastVersion().getExtension());
}
}
 
if(initTeachers)
{
List<AnnouncementView> announcementViews = loadCourseUnitAnnouncements.run(id,userSession);
cV.setAnnouncements(announcementViews);
}
return cV;
}
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/CourseUnitWorkService.java
New file
0,0 → 1,213
package pt.estgp.estgweb.services.courseunits;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.CourseUnitAssignementView;
import pt.estgp.estgweb.domain.views.CourseUnitDeliverableView;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.data.RepositoryService;
import pt.estgp.estgweb.services.blogs.CreateBlogService;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedException;
import org.apache.log4j.Logger;
 
import java.util.List;
import java.util.ArrayList;
import java.util.Date;
import java.io.InputStream;
 
import jomm.utils.FilesUtils;
import jomm.utils.MessageResources;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
/**
* @author Jorge Machado
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
public class CourseUnitWorkService implements IService
{
 
RepositoryService repositoryService = new RepositoryService();
LoadCourseUnitService loadCourseUnitService = new LoadCourseUnitService();
 
 
 
private static final Logger logger = Logger.getLogger(CourseUnitWorkService.class);
 
 
public CourseUnitView create(CourseUnitAssignementView cUV, long id, InputStream file, String name, int size, String contentType, UserSession userSession) throws ServiceException
{
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(id);
CourseUnitAssignement assignement;
if(cUV.getId() > 0)
assignement = DaoFactory.getCourseUnitAssignementDaoImpl().get(cUV.getId());
else
{
assignement = DomainObjectFactory.createCourseUnitAssignementImpl();
assignement.setCourseUnit(courseUnit);
}
cUV.persistViewInObject(assignement);
 
if(name != null && name.length() > 0 && size > 0 && file != null)
{
 
String extension = FilesUtils.getExtension(name);
if(assignement.getRepositoryStream() == null || assignement.getRepositoryStream().trim().length() == 0)
{
String identifier = repositoryService.storeRepositoryFile(file, contentType, extension, size, name, "courseunit.assignement.file " + courseUnit.getName() + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.courseunitDomain,userSession);
assignement.setRepositoryStream(identifier);
}
else
repositoryService.updateRepositoryFile(assignement.getRepositoryStream(), file, contentType, extension, size, name, "courseunit.assignement.file " + courseUnit.getName() + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.courseunitDomain);
}
 
DaoFactory.getCourseUnitAssignementDaoImpl().save(assignement);
return loadCourseUnitWorks(id,userSession);
}
 
public CourseUnitView loadCourseUnitWorks(long id, UserSession userSession) throws ServiceException
{
CourseUnitView cV = loadCourseUnitService.run(id,false,false,false,userSession);
 
if(cV == null)
return null;
 
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(id);
 
if(courseUnit.getAssignements() != null)
{
boolean invalids = false;
List<CourseUnitAssignementView> views = new ArrayList<CourseUnitAssignementView>();
if(userSession.getUser() != null && ((CourseUnitImpl)courseUnit).isOwnedBy(userSession.getUser(),true))
{
invalids = true;
}
for(CourseUnitAssignement a: courseUnit.getAssignements())
{
if(invalids || a.isStatus())
{
long delivers = DaoFactory.getCourseUnitDeliverableDaoImpl().countAssignements(a.getId());
CourseUnitAssignementView view = new CourseUnitAssignementView(a,delivers);
if(view.getWorkFile() != null && view.getWorkFile().length() > 0)
{
RepositoryFileImpl repositoryFile = repositoryService.loadView(a.getRepositoryStream());
view.setRepositoryFile(repositoryFile);
}
views.add(view);
}
}
 
if(userSession.getUser() != null && userSession.getUser() instanceof StudentImpl && ((StudentImpl)userSession.getUser()).hasCourseUnit(id,true))
{
for(CourseUnitAssignementView view: views)
{
CourseUnitDeliverable deliverable = DaoFactory.getCourseUnitDeliverableDaoImpl().loadDeliverable(userSession.getUser().getId(),view.getId());
if(deliverable != null)
{
view.setCourseUnitDeliverableView(new CourseUnitDeliverableView(deliverable, view));
}
}
}
 
cV.setCourseUnitAssignements(views);
}
return cV;
}
 
public CourseUnitView delete(long courseUnitWorkId, UserSession userSession) throws ServiceException
{
CourseUnitAssignement assignement = DaoFactory.getCourseUnitAssignementDaoImpl().load(courseUnitWorkId);
long courseUnitId = assignement.getCourseUnit().getId();
assignement.getCourseUnit().getAssignements().remove(assignement);
assignement.setCourseUnit(null);
DaoFactory.getCourseUnitAssignementDaoImpl().delete(assignement);
return loadCourseUnitWorks(courseUnitId,userSession);
}
 
public CourseUnitView validateInvalidate(long courseUnitWorkId, UserSession userSession) throws ServiceException
{
CourseUnitAssignement assignement = DaoFactory.getCourseUnitAssignementDaoImpl().load(courseUnitWorkId);
long courseUnitId = assignement.getCourseUnit().getId();
assignement.setStatus(!assignement.isStatus());
return loadCourseUnitWorks(courseUnitId,userSession);
}
 
public CourseUnitView deliverWork(long courseUnitWorkId,InputStream file, String name, String contentType, int size, UserSession userSession) throws ServiceException
{
CourseUnitAssignement assignement = DaoFactory.getCourseUnitAssignementDaoImpl().load(courseUnitWorkId);
long courseUnitId = assignement.getCourseUnit().getId();
CourseUnitDeliverable deliverable = DaoFactory.getCourseUnitDeliverableDaoImpl().loadDeliverable(userSession.getUser().getId(),courseUnitWorkId);
String extension = FilesUtils.getExtension(name);
if(deliverable == null)
{
deliverable = DomainObjectFactory.createCourseUnitDeliverableImpl();
String identifier = repositoryService.storeRepositoryFile(file, contentType, extension, size, name, "courseunit.assignement " + assignement.getCourseUnit().getName() + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.courseunitDeliverableDomain,userSession);
deliverable.setDeliverableRepositoryStream(identifier);
deliverable.setCourseUnitAssignement(assignement);
deliverable.setStudent((Student) userSession.getUser());
DaoFactory.getCourseUnitDeliverableDaoImpl().save(deliverable);
}
else
{
repositoryService.updateRepositoryFile(deliverable.getDeliverableRepositoryStream(), file, contentType, extension, size, name, "courseunit.assignement " + assignement.getCourseUnit().getName() + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.courseunitDeliverableDomain);
}
deliverable.setDeliverDate(new Date());
return loadCourseUnitWorks(courseUnitId,userSession);
}
//todo alterar o dominio de filtragem
 
 
public CourseUnitAssignementView loadAssignement(long courseUnitAssignementId, UserSession userSession) throws ServiceException
{
CourseUnitAssignement assignement = DaoFactory.getCourseUnitAssignementDaoImpl().load(courseUnitAssignementId);
List<CourseUnitDeliverableView> views = new ArrayList<CourseUnitDeliverableView>();
CourseUnitAssignementView courseUnitAssignementView = new CourseUnitAssignementView(assignement,assignement.getDeliverables().size());
for(CourseUnitDeliverable d: assignement.getDeliverables())
{
views.add(new CourseUnitDeliverableView(d,courseUnitAssignementView));
}
courseUnitAssignementView.setDeliverables(views);
courseUnitAssignementView.setCourseUnitView(new CourseUnitView(assignement.getCourseUnit()));
if(courseUnitAssignementView.getWorkFile() != null && courseUnitAssignementView.getWorkFile().length() > 0)
{
RepositoryFileImpl repositoryFile = repositoryService.loadView(assignement.getRepositoryStream());
courseUnitAssignementView.setRepositoryFile(repositoryFile);
}
return courseUnitAssignementView;
}
 
public CourseUnitAssignementView updateDeliverables(long courseUnitId, long courseUnitAssignementId, List<CourseUnitDeliverableView> deliverableViews, UserSession userSession) throws ServiceException
{
CourseUnitAssignement assignement = DaoFactory.getCourseUnitAssignementDaoImpl().load(courseUnitAssignementId);
if(assignement.getCourseUnit().getId() != courseUnitId)
{
logger.warn("Trying change deliverable of a not owned course unit:" + userSession.getUser().getId() + " " + userSession.getUser().getName());
throw new ServiceException("Access Denied", new AccessDeniedException("Trying change deliverable of a not owned course unit"));
}
for(CourseUnitDeliverableView deliverable: deliverableViews)
{
CourseUnitDeliverable courseUnitDeliverable = DaoFactory.getCourseUnitDeliverableDaoImpl().load(deliverable.getId());
if(courseUnitDeliverable.getCourseUnitAssignement().getId() != assignement.getId())
{
logger.warn("Trying change deliverable of a not owned course unit:" + userSession.getUser().getId() + " " + userSession.getUser().getName());
throw new ServiceException("Access Denied", new AccessDeniedException("Trying change deliverable of a not owned course unit"));
}
deliverable.persistViewInObject(courseUnitDeliverable);
}
return loadAssignement(courseUnitAssignementId,userSession);
}
 
 
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/UpdateCourseUnitService.java
15,6 → 15,7
 
import jomm.utils.MessageResources;
import jomm.utils.MimeTypeGuesser;
import jomm.utils.FilesUtils;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
34,6 → 35,7
{
 
RepositoryService repositoryService = new RepositoryService();
LoadCourseUnitService loadCourseUnitService = new LoadCourseUnitService();
 
private static final Logger logger = Logger.getLogger(UpdateCourseUnitService.class);
 
53,9 → 55,7
RepositoryFileImpl repositoryFile = null;
if(stream != null && size > 0)
{
String extension = "";
if(name.indexOf(".")>=0)
extension = name.substring(name.lastIndexOf(".") + 1);
String extension = FilesUtils.getExtension(name);
if(c.getProgramStreamId() == null)
{
String identifier = repositoryService.storeRepositoryFile(stream, contentType, extension, size, name, "courseunit.program.description" + c.getName(), ResourceAccessControlEnum.publicDomain,userSession);
77,6 → 77,6
cV.setProgramSize(repositoryFile.getLastVersion().getSize()/1024);
cV.setExtension(repositoryFile.getLastVersion().getExtension());
}
return cV;
return loadCourseUnitService.run(cV.getId(),true,false,false,userSession);
}
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/CourseUnitBlogService.java
New file
0,0 → 1,54
package pt.estgp.estgweb.services.courseunits;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.services.data.RepositoryService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.blogs.CreateBlogService;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.CourseUnitAssignementView;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import org.apache.log4j.Logger;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
/**
* @author Jorge Machado
*
*
* Created at 17/Out/2003 , 23:45:24
*
*/
public class CourseUnitBlogService implements IService
{
CreateBlogService createBlogService = new CreateBlogService();
LoadCourseUnitService loadCourseUnitService = new LoadCourseUnitService();
 
private static final Logger logger = Logger.getLogger(CourseUnitBlogService.class);
 
public CourseUnitView startUnitBlog(long courseUnitId, UserSession userSession) throws ServiceException
{
CourseUnitImpl courseUnit = (CourseUnitImpl) DaoFactory.getCourseUnitDaoImpl().get(courseUnitId);
 
if(courseUnit.getUnitBlog() == null)
{
BlogView b = new BlogView();
b.setTitle(courseUnit.getName() + " Blog");
b.setInternal(true);
b.setAutoValidation(true);
b.setStatus(true);
b.setCourseUnitInternal(true);
b.setCourseUnitView(new CourseUnitView(courseUnit));
b = createBlogService.run(b,userSession);
Blog blog = DaoFactory.getCourseUnitBlogDaoImpl().load(b.getId());
blog.setStatus(true);
}
return loadCourseUnitService.run(courseUnitId,false,false,true,userSession);
}
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/LoadSubscribedUnitsAnnouncementsService.java
8,6 → 8,7
import pt.estgp.estgweb.domain.views.AnnouncementView;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.courseunits.impl.DefaultCourseUnitAnnouncements;
import pt.estgp.estgweb.Globals;
 
import java.util.Set;
import java.util.List;
32,13 → 33,15
return courseUnitAnnouncementsLst;
for(CourseUnit c: units)
{
if(c.getAnnouncements() != null && c.getAnnouncements().size()>0)
if(c.getAnnouncements() != null && c.getAnnouncements().size() > 0)
{
DefaultCourseUnitAnnouncements courseUnitAnnouncements = new DefaultCourseUnitAnnouncements();
courseUnitAnnouncements.setCourseUnit(c);
List<AnnouncementView> announcementViews = new ArrayList<AnnouncementView>();
for(Announcement a :c.getAnnouncements())
{
if(announcementViews.size() > Globals.HOME_MAX_COURSE_UNIT_ANNOUNCEMENTS)
break;
AnnouncementView aV = new AnnouncementView(a);
announcementViews.add(aV);
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/LoadSubscribedUnitsService.java
6,6 → 6,8
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.Set;
import java.util.List;
import java.util.ArrayList;
 
/**
* @author Jorge Machado
14,10 → 16,10
*/
public class LoadSubscribedUnitsService implements IService
{
public Set<CourseUnit> run(long studentId)
public List<CourseUnit> run(long studentId)
{
Student t = DaoFactory.getStudentDaoImpl().load(studentId);
Set<CourseUnit> units = t.getSubscribedUnits();
List<CourseUnit> units = new ArrayList(t.getSubscribedUnits());
for(CourseUnit c: units)
{
c.getName();
/impl/src/java/pt/estgp/estgweb/services/courseunits/LoadCourseUnitAnnouncements.java
New file
0,0 → 1,46
package pt.estgp.estgweb.services.courseunits;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.services.blogs.LoadBlogService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.domain.views.AnnouncementView;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.AnnouncementImpl;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.domain.CourseUnitAnnouncementImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import org.apache.log4j.Logger;
 
import java.util.List;
import java.util.ArrayList;
 
/**
* @author Jorge Machado
* @date 19/Mai/2008
* @see pt.estgp.estgweb.services.blogs
*/
public class LoadCourseUnitAnnouncements implements IService
{
private static final Logger logger = Logger.getLogger(LoadBlogService.class);
 
public List<AnnouncementView> run(long courseUnit, UserSession userSession) throws ServiceException
{
 
List<CourseUnitAnnouncementImpl> announcements;
if(userSession.getUser() != null && ((UserImpl)userSession.getUser()).isInCourseUnit(courseUnit,true))
{
announcements = DaoFactory.getCourseUnitAnnouncementDaoImpl().loadCourseUnitAnnouncements(courseUnit);
}
else
{
announcements = DaoFactory.getCourseUnitAnnouncementDaoImpl().loadExternalCourseUnitAnnouncements(courseUnit);
}
 
List<AnnouncementView> announcementViews = new ArrayList<AnnouncementView>();
for(AnnouncementImpl announcement: announcements)
{
announcementViews.add(new AnnouncementView(announcement));
}
return announcementViews;
}
}
/impl/src/java/pt/estgp/estgweb/services/common/ModuleEnum.java
1,11 → 1,13
package pt.estgp.estgweb.services.common;
 
import pt.estgp.estgweb.services.announcements.AnnouncementsCommonServices;
import pt.estgp.estgweb.services.announcements.TodoAnnouncementsCommonServices;
import pt.estgp.estgweb.services.email.EmailCommonServices;
import pt.estgp.estgweb.services.reminders.RemindersCommonServices;
import pt.estgp.estgweb.services.blogs.BlogsCommonServices;
import pt.estgp.estgweb.services.blogs.BlogPostsCommonServices;
import pt.estgp.estgweb.services.courseunits.CourseUnitsCommonServices;
import pt.estgp.estgweb.services.courses.CoursesCommonServices;
 
/**
* @author Jorge Machado
17,12 → 19,14
{
 
 
TodoAnnouncements("module.TodoAnnouncements", new TodoAnnouncementsCommonServices()),
Announcements("module.Announcements", new AnnouncementsCommonServices()),
Email("module.Email", new EmailCommonServices()),
Reminders("module.Reminders", new RemindersCommonServices()),
Blogs("module.Blogs", new BlogsCommonServices()),
BlogPosts("module.BlogPosts", new BlogPostsCommonServices()),
CourseUnits("module.CourseUnits", new CourseUnitsCommonServices());
CourseUnits("module.CourseUnits", new CourseUnitsCommonServices()),
Courses("module.Courses", new CoursesCommonServices());
// Questionarios("module.Qustionarios", new QuestionariosCommonServices());
 
// Events("module.Events",null),
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java
6,12 → 6,14
import pt.estgp.estgweb.domain.Course;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.views.CourseView;
import pt.estgp.estgweb.domain.dao.DaoFactory;
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.courses.CoursesService;
import pt.ipportalegre.siges.web.services.ArrayOfDisciplina;
import pt.ipportalegre.siges.web.services.Disciplina;
import pt.ipportalegre.siges.web.services.SiGesWEB;
32,6 → 34,8
{
private static final Logger logger = Logger.getLogger(ImportCourseService.class);
 
private CoursesService coursesService = new CoursesService();
 
public ILogMessages run(String year) throws ServiceException
{
 
72,17 → 76,20
for (Map.Entry<Integer, Disciplina> entry : set2)
{
Disciplina d = entry.getValue();
Course c = DaoFactory.getCourseDaoImpl().findCourseByCode("" + d.getCodigoCurso());
if (c == null)
{
c = DomainObjectFactory.createCourseImpl();
DaoFactory.getCourseDaoImpl().save(c);
}
CourseView c = coursesService.loadCourseByCode("" + d.getCodigoCurso().intValue(),false);
 
// Course c = DaoFactory.getCourseDaoImpl().findCourseByCode("" + d.getCodigoCurso());
// if (c == null)
// {
// c = DomainObjectFactory.createCourseImpl();
// DaoFactory.getCourseDaoImpl().save(c);
// }
c.setName(d.getNomeCurso());
c.setDegree(d.getGrauCurso());
c.setCode("" + d.getCodigoCurso().intValue());
c.setImportYear(year);
c.setInstitutionalCode("" + d.getCodigoInstituicao().intValue());
coursesService.submitCourse(c,null,null,0,null,null);
}
 
/**
/impl/src/java/pt/estgp/estgweb/services/profile/EditUserService.java
46,7 → 46,7
 
logger.info("Editing user:" + userView.getId());
 
if ((userSession.getUser()).isSuperuserOrAdmin())
if (userSession.getUser() != null && userSession.getUser().isSuperuserOrAdmin())
{
userView.persistViewInObjectAdmin(user);
logger.info("User Edited by:" + userSession.getUser().getName());
/impl/src/java/pt/estgp/estgweb/services/users/LoadUsersService.java
37,7 → 37,7
{
private static final Logger logger = Logger.getLogger(LoadUsersService.class);
 
public List<UserView> run(Class c, UserSession userSession) throws ServiceException
public List<UserView> run(Class c) throws ServiceException
{
List<UserImpl> users = AbstractDao.getCurrentSession().createCriteria(c).addOrder(Order.asc("name")).list();
List<UserView> userViews = new ArrayList<UserView>();
/impl/src/java/pt/estgp/estgweb/services/blogs/BlogsCommonServices.java
14,6 → 14,8
import java.util.List;
import java.util.ArrayList;
 
import jomm.utils.MyCalendar;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
*
71,7 → 73,9
defaultResult.setSubTitle(null);
defaultResult.setSubTitleKey(true);
defaultResult.setText(blog.getDescription());
if(from == null)
if(blog instanceof CourseUnitBlog)
defaultResult.setUrl("/user/startLoadBlogFromCourseUnit.do?id=" + blog.getId());
else if(from == null)
defaultResult.setUrl("/startLoadBlog.do?id=" + blog.getId());
else
defaultResult.setUrl("/user/startLoadBlogFrom" + from + ".do?id=" + blog.getId());
93,7 → 97,7
public List<IToDo> getAllToDos(UserSession userSession)
{
List<IToDo> todos = new ArrayList<IToDo>();
if(userSession.getUser().isSuperuserOrAdmin())
if(userSession.getUser() != null && userSession.getUser().isSuperuserOrAdmin())
{
List<Blog> invalidBlogs = DaoFactory.getBlogDaoImpl().loadInvalidBlogs();
for(Blog b: invalidBlogs)
102,6 → 106,8
if(b.getOwner() instanceof UserImpl)
username = ((UserImpl)b.getOwner()).getUsername();
DefaultToDo defaultToDo = new DefaultToDo(b.getTitle(),b.getTargetRoles(),username, "blog.validate.blog.todo","/user/startLoadBlogFromHome.do?id=" + b.getId());
if(b instanceof CourseUnitBlog)
defaultToDo.setUrl("/user/startLoadBlogFromCourseUnit.do?id=" + b.getId());
todos.add(defaultToDo);
}
}
112,7 → 118,25
String username = null;
if(b.getOwner() instanceof UserImpl)
username = ((UserImpl)b.getOwner()).getUsername();
DefaultToDo defaultToDo = new DefaultToDo(b.getTitle(),null,username, "blog.validate.post.todo","/user/startLoadBlogFromHome.do?id=" + b.getBlog().getId());
 
String url;
if(new MyCalendar().getMonth() == b.getMonth())
{
if(b.getBlog() instanceof CourseUnitBlog)
url = "/user/startLoadBlogFromCourseUnit.do?id=" + b.getBlog().getId() + "#post" + b.getId();
else
url = "/user/startLoadBlogFromHome.do?id=" + b.getBlog().getId() + "#post" + b.getId();
}
else
{
if(b.getBlog() instanceof CourseUnitBlog)
url = "/user/startLoadBlogMonthFromCourseUnit.do?id=" + b.getBlog().getId() + "&month=" + b.getMonth() + "&year=" + b.getYear() + "#post" + b.getId();
else
url = "/user/startLoadBlogMonthFromHome.do?id=" + b.getBlog().getId() + "&month=" + b.getMonth() + "&year=" + b.getYear() + "#post" + b.getId();
}
 
DefaultToDo defaultToDo = new DefaultToDo(b.getTitle(),null,username, "blog.validate.post.todo",url);
 
todos.add(defaultToDo);
}
return todos;
/impl/src/java/pt/estgp/estgweb/services/blogs/LoadBlogService.java
3,9 → 3,8
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.domain.views.BlogPostView;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.Blog;
import pt.estgp.estgweb.domain.BlogImpl;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import org.apache.log4j.Logger;
14,6 → 13,7
import java.util.ArrayList;
 
import jomm.utils.MyCalendar;
import jomm.dao.impl.AbstractDao;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
40,14 → 40,17
{
 
Blog b = DaoFactory.getBlogDaoImpl().get(id);
 
if(b == null)
return null;
BlogView bV = new BlogView(b);
 
List<BlogView.MonthPosts> monthIds = getMonths(id);
List<BlogPostView> posts = loadBlogPostsService.loadLastPosts(id,userSession);
bV.setLastPosts(posts);
bV.setMonths(monthIds);
 
return bV;
}
 
/impl/src/java/pt/estgp/estgweb/services/blogs/CreateBlogService.java
2,15 → 2,14
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.Blog;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.Globals;
import org.apache.log4j.Logger;
 
import java.util.Date;
import java.util.HashSet;
 
/*
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
37,8 → 36,22
Blog b;
if(bV.getId() <= 0)
{
b = DomainObjectFactory.createBlogImpl();
b.setOwner(userSession.getUser());
if(bV.getCourseUnitView() != null)
{
CourseUnit c = DaoFactory.getCourseUnitDaoImpl().get(bV.getCourseUnitView().getId());
b = DomainObjectFactory.createCourseUnitBlogImpl();
((CourseUnitBlogImpl)b).setCourseUnit(c);
if(c.getBlogs() == null)
c.setBlogs(new HashSet());
c.getBlogs().add((CourseUnitBlog) b);
if(c.getTeachers()!=null && c.getTeachers().size() > 0)
b.setOwner(c.getTeachers().iterator().next());
}
else
{
b = DomainObjectFactory.createBlogImpl();
b.setOwner(userSession.getUser());
}
b.setSaveDate(new Date());
DaoFactory.getBlogDaoImpl().save(b);
}
46,7 → 59,7
{
b = DaoFactory.getBlogDaoImpl().get(bV.getSerializable());
}
if(userSession.getUser().isSuperuserOrAdmin())
if(userSession.getUser() != null && userSession.getUser().isSuperuserOrAdmin())
bV.persistViewInObjectByAdmin(b);
else
bV.persistViewInObject(b);
/impl/src/java/pt/estgp/estgweb/services/blogs/BlogPostsCommonServices.java
75,7 → 75,9
MyCalendar myCalendar = new MyCalendar();
if (myCalendar.getMonth() != blogPost.getMonth() || myCalendar.getYear() != blogPost.getYear())
{
if (from == null)
if(blogPost.getBlog() instanceof CourseUnitBlog)
defaultResult.setUrl("/user/startLoadBlogMonthFromCourseUnit.do?month=" + blogPost.getMonth() + "&year=" + blogPost.getYear() + "&id=" + blogPost.getBlog().getId() + "#post" + blogPost.getId());
else if (from == null)
defaultResult.setUrl("/startLoadBlogMonth.do?month=" + blogPost.getMonth() + "&year=" + blogPost.getYear() + "&id=" + blogPost.getBlog().getId() + "#post" + blogPost.getId());
else
defaultResult.setUrl("/user/startLoadBlogMonthFrom" + from + ".do?month=" + blogPost.getMonth() + "&year=" + blogPost.getYear() + "&id=" + blogPost.getBlog().getId() + "#post" + blogPost.getId());
/impl/src/java/pt/estgp/estgweb/services/blogs/CreateBlogPostService.java
66,7 → 66,7
 
Blog b = DaoFactory.getBlogDaoImpl().load(blogId);
 
if(b.isAutoValidation() || b.isOwnedBy(userSession.getUser()) || userSession.getUser().isSuperuserOrAdmin())
if(b.isAutoValidation() || b.isOwnedBy(userSession.getUser(),true) || (userSession.getUser() != null && userSession.getUser().isSuperuserOrAdmin()))
{
bPV.setStatus(true);
}
/impl/src/java/pt/estgp/estgweb/services/announcements/CreateAnnouncementService.java
2,10 → 2,7
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.Announcement;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.Image;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.impl.ImageDaoImpl;
import pt.estgp.estgweb.domain.views.AnnouncementView;
34,7 → 31,12
 
if(announcementView.getId() <= 0)
{
a = DomainObjectFactory.createAnnouncementImpl();
if(announcementView.getCourseUnitView()!=null && announcementView.getCourseUnitView().getId() > 0)
{
a = DomainObjectFactory.createCourseUnitAnnouncementImpl();
}
else
a = DomainObjectFactory.createAnnouncementImpl();
announcementView.persistViewInObject(a);
a.setOwner(userSession.getUser());
a.setSaveDate(new Date());
105,10 → 107,12
 
if(RoleManager.hasRole(userSession.getUser(),Globals.AUTOMATIC_VALIDATION_ROLES))
a.setStatus(announcementView.isStatus());
else if(a instanceof CourseUnitAnnouncement && ((UserImpl)userSession.getUser()).isTeacherOfCourseUnit(announcementView.getCourseUnitView().getId(),true))
a.setStatus(announcementView.isStatus());
else
{
String[] userRoles=a.getChoosedOwnerRole().split(",");
Boolean validation=false;
String[] userRoles = a.getChoosedOwnerRole().split(",");
Boolean validation = false;
 
for(String role: userRoles)
{
118,60 → 122,63
{
String validationTargets=role+".auto.validation.targets";
String userAutoValitation=ConfigProperties.getProperty(validationTargets);
String[] userAutoValitationRoles=userAutoValitation.split(",");
int validTargetRoles=0;
if(a.getTargetRoles().contains(","))
if(userAutoValitation != null)
{
String[] targetRolesAnnouncementSplited=a.getTargetRoles().split(",");
String[] userAutoValitationRoles=userAutoValitation.split(",");
int validTargetRoles=0;
if(a.getTargetRoles().contains(","))
{
String[] targetRolesAnnouncementSplited=a.getTargetRoles().split(",");
 
//Percorre os targets todos a quem se destina
for(String target: targetRolesAnnouncementSplited)
{
//Percorre todos os validation targets
for(String userTargetRoles: userAutoValitationRoles)
//Percorre os targets todos a quem se destina
for(String target: targetRolesAnnouncementSplited)
{
//Se o target a quem se destina constar na lista dos validation targets ent�o incrementa
//o validTargetRoles
if(target.equals(userTargetRoles))
//Percorre todos os validation targets
for(String userTargetRoles: userAutoValitationRoles)
{
validTargetRoles++;
//Se o target a quem se destina constar na lista dos validation targets entao incrementa
//o validTargetRoles
if(target.equals(userTargetRoles))
{
validTargetRoles++;
}
}
}
}
//Se o numero de roles validados for igual ao numero de targets a quem se destina
//Vai verificar se possui validationType para o type announcement
if(validTargetRoles==targetRolesAnnouncementSplited.length)
{
String validationTypes=role +".auto.validation.types";
String userAutoTypes=ConfigProperties.getProperty(validationTypes);
String[] userAutoValitationTypes=userAutoTypes.split(",");
for(String types: userAutoValitationTypes)
//Se o numero de roles validados for igual ao numero de targets a quem se destina
//Vai verificar se possui validationType para o type announcement
if(validTargetRoles==targetRolesAnnouncementSplited.length)
{
if(types.equals(a.getType()))
validation=true;
String validationTypes=role +".auto.validation.types";
String userAutoTypes=ConfigProperties.getProperty(validationTypes);
String[] userAutoValitationTypes=userAutoTypes.split(",");
for(String types: userAutoValitationTypes)
{
if(types.equals(a.getType()))
validation=true;
}
}
}
}
else
{
String targetRolesAnnouncement=a.getTargetRoles();
//Percorre todos os validation targets
for(String userTargetRoles: userAutoValitationRoles)
else
{
if(targetRolesAnnouncement.equals(userTargetRoles))
String targetRolesAnnouncement=a.getTargetRoles();
//Percorre todos os validation targets
for(String userTargetRoles: userAutoValitationRoles)
{
validTargetRoles++;
if(targetRolesAnnouncement.equals(userTargetRoles))
{
validTargetRoles++;
}
}
}
if(validTargetRoles==1)
{
String validationTypes=role +".auto.validation.types";
String userAutoTypes=ConfigProperties.getProperty(validationTypes);
String[] userAutoValitationTypes=userAutoTypes.split(",");
for(String types: userAutoValitationTypes)
if(validTargetRoles==1)
{
if(types.equals(a.getType()))
validation=true;
String validationTypes=role +".auto.validation.types";
String userAutoTypes=ConfigProperties.getProperty(validationTypes);
String[] userAutoValitationTypes=userAutoTypes.split(",");
for(String types: userAutoValitationTypes)
{
if(types.equals(a.getType()))
validation=true;
}
}
}
}
185,16 → 192,18
a.setStatus(validation);
}
 
AnnouncementView aView;
if(announcementView.getId() <= 0)
{
DaoFactory.getAnnouncementDaoImpl().save(a);
logger.info("Creating announcement:" + a.getId());
return new AnnouncementView(a);
aView = new AnnouncementView(a);
}
else
{
logger.info("Updating announcement:" + a.getId());
return new AnnouncementView(a);
aView = new AnnouncementView(a);
}
return aView;
}
}
/impl/src/java/pt/estgp/estgweb/services/announcements/TodoAnnouncementsCommonServices.java
New file
0,0 → 1,84
package pt.estgp.estgweb.services.announcements;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.services.common.*;
import pt.estgp.estgweb.services.common.impl.DefaultSearchResults;
import pt.estgp.estgweb.services.common.impl.DefaultResult;
import pt.estgp.estgweb.services.common.impl.DefaultToDo;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.Globals;
import org.apache.log4j.Logger;
 
import java.util.List;
import java.util.ArrayList;
 
import jomm.dao.impl.AbstractDao;
 
/**
* @author Jorge Machado
* @date 25/Apr/2008
* @time 18:01:54
* @see pt.estgp.estgweb.web
*/
public class TodoAnnouncementsCommonServices implements IService, IModuleCommonServices
{
 
private static final Logger logger = Logger.getLogger(TodoAnnouncementsCommonServices.class);
 
public int countSearch(String search, SearchTypeEnum searchType, UserSession userSession)
{
return 0; // todo To change body of implemented methods use File | Settings | File Templates.
}
 
public ISearchResults search(String search, SearchTypeEnum searchType, int page, int maxResults, UserSession userSession)
{
return search(null,search, searchType,page,maxResults,userSession);
}
 
public ISearchResults search(String from, String search, SearchTypeEnum searchType, int page, int maxResults, UserSession userSession)
{
return null;
}
 
public int countToDo(UserSession userSession)
{
return 0; //todo To change body of implemented methods use File | Settings | File Templates.
}
 
/**
* Not implemented
* @param userSession
* @return
*/
public IToDoCat getToDo(UserSession userSession)
{
return null;
}
 
public List<IToDo> getAllToDos(UserSession userSession)
{
List<IToDo> todos = new ArrayList<IToDo>();
if(userSession.getUser() != null)
{
List<Announcement> todosAnnouncements = DaoFactory.getAnnouncementDaoImpl().loadTargetTodos(userSession.getUser().getRolesList());
for(Announcement a: todosAnnouncements)
{
DefaultToDo defaultToDo = new DefaultToDo(a.getTitle(),a.getTargetRoles(),((UserImpl)a.getOwner()).getUsername(), "announcements.type." + a.getType(),"/user/startLoadTodoAnnouncementFromHome.do?id=" + a.getId());
todos.add(defaultToDo);
}
}
return todos;
}
 
/*This method is invoked from object creation*/
public void adviseNew(DomainObject object)
{
//To change body of implemented methods use File | Settings | File Templates.
}
 
public void adviseUpdate(DomainObject object)
{
//To change body of implemented methods use File | Settings | File Templates.
}
}
/impl/src/java/pt/estgp/estgweb/domain/UserImpl.java
1,5 → 1,7
package pt.estgp.estgweb.domain;
 
import jomm.dao.impl.AbstractDao;
 
import java.io.Serializable;
import java.util.Date;
import java.util.Set;
62,14 → 64,44
{
if(this instanceof TeacherImpl)
{
((TeacherImpl)this).hasCourseUnit(id,transaction);
return ((TeacherImpl)this).hasCourseUnit(id,transaction);
}
else if(this instanceof StudentImpl)
{
((StudentImpl)this).hasCourseUnit(id,transaction);
return ((StudentImpl)this).hasCourseUnit(id,transaction);
}
return false;
}
 
public boolean isTeacherOfCourseUnit(long id)
{
return isTeacherOfCourseUnit(id,false);
}
 
public boolean isTeacherOfCourseUnit(long id, boolean transaction)
{
if(this instanceof TeacherImpl)
{
return ((TeacherImpl)this).hasCourseUnit(id,transaction);
}
return false;
}
 
public boolean isStudentfCourseUnit(long id)
{
return isStudentfCourseUnit(id,false);
}
 
public boolean isStudentfCourseUnit(long id, boolean transaction)
{
if(this instanceof StudentImpl)
{
return ((StudentImpl)this).hasCourseUnit(id,transaction);
}
return false;
}
 
 
 
 
}
/impl/src/java/pt/estgp/estgweb/domain/StudentImpl.java
6,6 → 6,8
 
import java.util.Set;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;
 
import org.apache.log4j.Logger;
 
22,14 → 24,14
 
public static final Logger logger = Logger.getLogger(StudentImpl.class);
 
private Set<CourseUnit> subscribedUnitsView = null;
private Set<CourseUnitAnnouncementImpl> courseUnitAnnouncementsView = null;
private List<CourseUnit> subscribedUnitsView = null;
private List<CourseUnitAnnouncementImpl> courseUnitAnnouncementsView = null;
 
public String getManagedRole() {
return STUDENT_ROLE;
}
 
public Set<CourseUnit> getSubscribedUnitsView()
public List<CourseUnit> getSubscribedUnitsView()
{
if(subscribedUnitsView == null)
{
38,9 → 40,9
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{getId()};
subscribedUnitsView = (Set<CourseUnit>) sm.execute(null, "LoadSubscribedUnits", args, names);
subscribedUnitsView = (List<CourseUnit>) sm.execute(null, "LoadSubscribedUnits", args, names);
if(subscribedUnitsView == null)
subscribedUnitsView = new HashSet<CourseUnit>();
subscribedUnitsView = new ArrayList<CourseUnit>();
}
catch (Throwable e)
{
51,7 → 53,7
}
 
 
public Set<CourseUnitAnnouncementImpl> getCourseUnitAnnouncementsView()
public List<CourseUnitAnnouncementImpl> getCourseUnitAnnouncementsView()
{
if(courseUnitAnnouncementsView == null)
{
60,9 → 62,9
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{getId()};
courseUnitAnnouncementsView = (Set<CourseUnitAnnouncementImpl>) sm.execute(null, "LoadSubscribedUnitsAnnouncements", args, names);
courseUnitAnnouncementsView = (List<CourseUnitAnnouncementImpl>) sm.execute(null, "LoadSubscribedUnitsAnnouncements", args, names);
if(courseUnitAnnouncementsView == null)
courseUnitAnnouncementsView = new HashSet<CourseUnitAnnouncementImpl>();
courseUnitAnnouncementsView = new ArrayList<CourseUnitAnnouncementImpl>();
}
catch (Throwable e)
{
79,9 → 81,9
 
public boolean hasCourseUnit(long id, boolean transaction)
{
Set<CourseUnit> cUnits;
List<CourseUnit> cUnits;
if(transaction)
cUnits = getSubscribedUnits();
cUnits = new ArrayList<CourseUnit>(getSubscribedUnits());
else
cUnits = getSubscribedUnitsView();
if(cUnits == null)
/impl/src/java/pt/estgp/estgweb/domain/AnnouncementImpl.java
20,12 → 20,17
 
private static final Logger logger = Logger.getLogger(AnnouncementImpl.class);
 
public boolean isOwnedBy(GenericUser u)
 
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
return u.getId() == getOwner().getId();
}
 
public boolean isOwnedBy(GenericUser u)
{
return isOwnedBy(u,false);
}
 
public GenericUser getOwner()
{
return super.getOwner();
/impl/src/java/pt/estgp/estgweb/domain/IAddContents.java
10,5 → 10,6
{
 
public boolean canAddContent(GenericUserImpl u);
public boolean canAddContent(GenericUserImpl u, boolean transaction);
 
}
/impl/src/java/pt/estgp/estgweb/domain/CourseUnitImpl.java
24,9 → 24,14
 
public boolean isOwnedBy(GenericUser u)
{
return u != null && u instanceof TeacherImpl && ((TeacherImpl)u).hasCourseUnit(getId(),true);
return isOwnedBy(u, false);
}
 
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
return u != null && u instanceof TeacherImpl && ((TeacherImpl)u).hasCourseUnit(getId(),transaction);
}
 
/**
* Not implemented can be variuous teachers
* @return null
58,4 → 63,11
{
return true;
}
 
public CourseUnitBlogImpl getUnitBlog()
{
if(getBlogs()!=null && getBlogs().size() > 0)
return (CourseUnitBlogImpl) getBlogs().iterator().next();
return null;
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/AnnouncementDaoImpl.java
4,6 → 4,7
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.ISearchResults;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
import pt.estgp.estgweb.Globals;
 
import java.util.List;
import java.util.ArrayList;
174,6 → 175,10
Criterion c = createSearchQuery(query, searchTypeEnum);
Criteria criteria = createMaxAnnouncementsPageRolesTypeCriteria(page, maxAnnouncements, roles, null, null, internal);
criteria.add(c);
for(String notSearchable : Globals.ANNOUNCEMENT_NOT_STANDARD)
{
criteria.add(not(eq("type",notSearchable)));
}
return criteria.list();
}
 
196,12 → 201,24
return createCriteria().add(eq("owner.id", ownerId)).addOrder(Order.desc("updateDate")).list();
}
 
 
 
public List<Announcement> loadInvalidAnnouncements()
{
return createCriteria()
Criteria c = createCriteria()
.add(eq("status",false))
.add(isNull("subTargets"))
.addOrder(Order.asc("id")).list();
.add(isNull("subTargets"));
for(String notSearchable : Globals.ANNOUNCEMENT_NOT_STANDARD)
{
c.add(not(eq("type",notSearchable)));
}
return c.addOrder(Order.asc("id"))
.list();
}
 
public List<Announcement> loadTargetTodos(List<String> roles)
{
return createRolesTypeCriteria(roles,Globals.ANNOUNCEMENT_TYPE_TODO,null,true).list();
}
 
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitAssignementDaoImpl.java
2,7 → 2,11
 
import static org.hibernate.criterion.Restrictions.*;
import org.hibernate.Query;
import pt.estgp.estgweb.domain.CourseUnitAssignement;
import pt.estgp.estgweb.domain.CourseUnitAssignementImpl;
 
import java.util.List;
 
/**
* @author Jorge Machado
* @date 28/Fev/2008
24,6 → 28,35
return (CourseUnitAssignementDaoImpl) myInstance;
}
 
public List<CourseUnitAssignementImpl> loadActiveAssignements(long userID)
{
return createCriteria()
.createAlias("courseUnit","cu")
.createAlias("cu.students","cus")
.add(eq("status",true))
.add(eq("cus.id",userID)).list();
}
 
public List<CourseUnitAssignementImpl> loadDeliveredAssignements(long userID)
{
return createCriteria()
.createAlias("courseUnit","cu")
.createAlias("cu.students","cus")
.createAlias("deliverables","de")
.createAlias("de.student","des")
.add(eq("des.id",userID))
.add(eq("status",true))
.add(eq("cus.id",userID)).list();
}
 
 
 
public CourseUnitAssignement loadByRepositoryId(String identifier)
{
return
(CourseUnitAssignement)
createCriteria()
.add(eq("repositoryStream",identifier))
.uniqueResult();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitDeliverableDaoImpl.java
1,6 → 1,8
package pt.estgp.estgweb.domain.dao.impl;
 
import org.hibernate.Query;
import static org.hibernate.criterion.Restrictions.*;
import pt.estgp.estgweb.domain.CourseUnitDeliverable;
 
/**
* @author Jorge Machado
31,4 → 33,23
// return createCriteria().add(eq("courseUnitAssignement.id",courseUnitAssignementId)).list().size();
}
 
 
 
public CourseUnitDeliverable loadDeliverable(long studentId, long workId)
{
return
(CourseUnitDeliverable)
createCriteria()
.add(eq("courseUnitAssignement.id",workId))
.add(eq("student.id",studentId)).uniqueResult();
}
 
public CourseUnitDeliverable loadDeliverableByRepositoryId(String repositoryStreamId)
{
return
(CourseUnitDeliverable)
createCriteria()
.add(eq("deliverableRepositoryStream",repositoryStreamId))
.uniqueResult();
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseDaoImpl.java
1,8 → 1,17
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 pt.estgp.estgweb.domain.Course;
import pt.estgp.estgweb.domain.CourseImpl;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
 
import java.util.List;
 
/**
* @author Jorge Machado
* @date 28/Fev/2008
23,4 → 32,37
return (CourseImpl) createCriteria().add(eq("code",code)).uniqueResult();
}
 
public int countCoursesActualYear(String query, SearchTypeEnum searchType)
{
Criterion c = DaoUtils.createSearchQuery(query,searchType,"name","description");
return createCriteria()
.add(c)
.add(eq("importYear", DatesUtils.getImportYear()))
.list().size();
}
 
public List<Course> searchActualYear(String query, SearchTypeEnum searchTypeEnum, int max, int page)
{
Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "name", "description");
Criteria criteria = createCriteria();
criteria.add(c)
.add(eq("importYear", DatesUtils.getImportYear()))
.addOrder(Order.asc("name"))
.setMaxResults(max)
.setFirstResult(page * max);
return criteria.list();
}
 
 
public List<Course> findAllOrderByName()
{
return createCriteria().addOrder(Order.asc("name")).list();
}
 
public List<Course> findAll(String importYear)
{
return createCriteria().add(eq("importYear",importYear)).list();
}
 
 
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitDaoImpl.java
40,6 → 40,11
return createCriteria().add(eq("code", sigesCode)).list();
}
 
public List<CourseUnit> loadByCourse(long course, String importYear)
{
return createCriteria().add(eq("importYear",importYear)).add(eq("course.id", course)).list();
}
 
public CourseUnit loadBySigesCodeUnique(String sigesCode)
{
return (CourseUnit) createCriteria().add(eq("code", sigesCode)).uniqueResult();
105,6 → 110,47
.list();
}
 
public List<CourseUnit> loadMissingPrograms(long teacherId)
{
//todo falta a projeccao do teacher id
return createCriteria()
.add(eq("importYear", DatesUtils.getImportYear()))
.add((or(isNull("programStreamId"),eq("programStreamId",""))))
.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((or(isNull("objectives"),eq("objectives",""))))
.list();
}
 
public List<CourseUnit> loadMissingProgramGivenCourse(long courseId)
{
return createCriteria()
.createAlias("course", "c")
.add(eq("c.id",courseId))
.add(eq("importYear", DatesUtils.getImportYear()))
.add((or(isNull("programStreamId"),eq("programStreamId",""))))
.list();
}
 
public List<CourseUnit> loadMissingObjectivesOrProgramGivenCourse(long courseId)
{
return createCriteria()
.createAlias("course", "c")
.add(eq("c.id",courseId))
.add(eq("importYear", DatesUtils.getImportYear()))
.add((or(or(isNull("objectives"),eq("objectives","")),or(isNull("programStreamId"),eq("programStreamId","")))))
.list();
}
 
 
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitAnnouncementDaoImpl.java
New file
0,0 → 1,50
package pt.estgp.estgweb.domain.dao.impl;
 
import pt.estgp.estgweb.domain.Announcement;
import pt.estgp.estgweb.domain.AnnouncementImpl;
import pt.estgp.estgweb.domain.CourseUnitAnnouncementImpl;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
 
import java.util.List;
import java.util.ArrayList;
import java.util.Date;
 
import org.hibernate.Criteria;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import jomm.utils.MyCalendar;
 
/**
* @author Jorge Machado
* @date 28/Fev/2008
* @time 2:51:06
* @see pt.estgp.estgweb.domain.dao.impl
*/
public class CourseUnitAnnouncementDaoImpl extends CourseUnitAnnouncementDao
{
public static CourseUnitAnnouncementDaoImpl getInstance()
{
if (myInstance == null)
myInstance = new CourseUnitAnnouncementDaoImpl();
return (CourseUnitAnnouncementDaoImpl) myInstance;
}
 
 
public List<CourseUnitAnnouncementImpl> loadCourseUnitAnnouncements(long courseUnit)
{
return createCriteria()
.add(Restrictions.eq("courseUnit.id", courseUnit))
.addOrder(Order.desc("saveDate")).list();
}
 
public List<CourseUnitAnnouncementImpl> loadExternalCourseUnitAnnouncements(long courseUnit)
{
return createCriteria()
.add(Restrictions.eq("courseUnit.id", courseUnit))
.add(Restrictions.eq("courseUnitInternal",false))
.addOrder(Order.desc("saveDate")).list();
}
 
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/BlogDaoImpl.java
77,6 → 77,7
public List<Blog> loadInvalidBlogs()
{
return createCriteria()
.add(isNull("type"))
.add(eq("status",false))
.addOrder(Order.asc("id")).list();
}
/impl/src/java/pt/estgp/estgweb/domain/dao/DaoFactory.java
21,6 → 21,11
return AnnouncementDaoImpl.getInstance();
}
 
public static CourseUnitAnnouncementDaoImpl getCourseUnitAnnouncementDaoImpl()
{
return CourseUnitAnnouncementDaoImpl.getInstance();
}
 
public static CourseDaoImpl getCourseDaoImpl()
{
return CourseDaoImpl.getInstance();
/impl/src/java/pt/estgp/estgweb/domain/TeacherImpl.java
8,6 → 8,8
 
import java.util.Set;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;
 
import org.apache.log4j.Logger;
 
24,13 → 26,13
 
public static final Logger logger = Logger.getLogger(TeacherImpl.class);
 
private Set<CourseUnit> teachedUnitsView = null;
private List<CourseUnit> teachedUnitsView = null;
 
public String getManagedRole() {
return TEACHER_ROLE;
}
 
public Set<CourseUnit> getTeachedUnitsView()
public List<CourseUnit> getTeachedUnitsView()
{
if(teachedUnitsView == null)
{
39,9 → 41,9
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{getId()};
teachedUnitsView = (Set<CourseUnit>) sm.execute(null, "LoadTeachedUnits", args, names);
teachedUnitsView = (List<CourseUnit>) sm.execute(null, "LoadTeachedUnits", args, names);
if(teachedUnitsView == null)
teachedUnitsView = new HashSet<CourseUnit>();
teachedUnitsView = new ArrayList<CourseUnit>();
}
catch (Throwable e)
{
63,9 → 65,9
 
public boolean hasCourseUnit(long id, boolean transaction)
{
Set<CourseUnit> cUnits;
List<CourseUnit> cUnits;
if(transaction)
cUnits = getTeachedUnits();
cUnits = new ArrayList<CourseUnit>(getTeachedUnits());
else
cUnits = getTeachedUnitsView();
if(cUnits == null)
/impl/src/java/pt/estgp/estgweb/domain/CourseUnitAnnouncementImpl.java
1,5 → 1,7
package pt.estgp.estgweb.domain;
 
import pt.estgp.estgweb.Globals;
 
/**
* @author Jorge Machado
* @date 2/Jun/2008
8,6 → 10,11
public class CourseUnitAnnouncementImpl extends CourseUnitAnnouncement
{
 
public CourseUnitAnnouncementImpl()
{
setType(Globals.ANNOUNCEMENT_TYPE_COURSE_UNIT);
}
 
public boolean belongsUnit(GenericUserImpl user)
{
return belongsUnit(user,false);
44,4 → 51,12
return !isCourseUnitInternal() || belongsUnit(user,true);
}
 
public String getType()
{
return Globals.ANNOUNCEMENT_TYPE_COURSE_UNIT;
}
public void setType(String type)
{}
 
}
/impl/src/java/pt/estgp/estgweb/domain/DomainObject.java
39,4 → 39,5
{
return this.getClass();
}
}
/impl/src/java/pt/estgp/estgweb/domain/BlogImpl.java
23,18 → 23,27
 
public BlogImpl()
{
super.setType(null);
}
 
 
public boolean canAddPost(GenericUserImpl user)
{
return RoleManager.hasRole(getTargetRolesList(), Globals.ALL_ROLE) || user.hasRole(getTargetRolesList()) || user.isSuperuserOrAdmin() || isOwnedBy(user);
return canAddPost(user,false);
}
 
public boolean canAddPost(GenericUserImpl user, boolean transaction)
{
return RoleManager.hasRole(getTargetRolesList(), Globals.ALL_ROLE) || (user != null && (user.hasRole(getTargetRolesList()) || user.isSuperuserOrAdmin())) || isOwnedBy(user,transaction);
}
 
public boolean canAddContent(GenericUserImpl u)
{
return canAddPost(u);
}
public boolean canAddContent(GenericUserImpl u, boolean transaction)
{
return canAddPost(u,transaction);
}
 
public List<String> getTargetRolesList()
{
75,7 → 84,7
 
public boolean canLoad(GenericUserImpl u)
{
return isStatus() || isOwnedBy(u) || u.isSuperuserOrAdmin();
return isStatus() || isOwnedBy(u) || (u != null && u.isSuperuserOrAdmin());
}
 
public boolean canLoadInOpenTransaction(GenericUserImpl u)
/impl/src/java/pt/estgp/estgweb/domain/RepositoryFileVersionImpl.java
13,4 → 13,9
{
return getId();
}
 
public int getSizeKb()
{
return getSize() / 1024;
}
}
/impl/src/java/pt/estgp/estgweb/domain/BlogPostImpl.java
26,8 → 26,8
}
 
/**
* Not implemented
*/
* Not implemented
*/
public String getChoosedOwnerRole()
{
return null;
45,7 → 45,7
 
public boolean canLoad(GenericUserImpl u)
{
return isStatus() || isOwnedBy(u) || u.isSuperuserOrAdmin();
return isStatus() || isOwnedBy(u) || (u != null && u.isSuperuserOrAdmin());
}
 
public boolean canLoadInOpenTransaction(GenericUserImpl u)
55,6 → 55,11
 
public boolean isOwnedBy(GenericUser u)
{
return super.isOwnedBy(u) || getBlog().isOwnedBy(u);
return isOwnedBy(u, false);
}
 
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
return super.isOwnedBy(u,transaction) || getBlog().isOwnedBy(u,transaction);
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/ReminderView.java
190,8 → 190,15
return null;
}
 
 
public boolean isOwnedBy(GenericUser u)
{
return reminder.isOwnedBy(u);
return isOwnedBy(u, false);
}
 
 
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
return reminder.isOwnedBy(u,transaction);
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/BlogPostView.java
76,9 → 76,14
 
public boolean isOwnedBy(GenericUser u)
{
return blogPost.isOwnedBy(u);
return blogPost.isOwnedBy(u,false);
}
 
public boolean isOwnedBy(GenericUser u, boolean transaction )
{
return blogPost.isOwnedBy(u,transaction);
}
 
public GenericUser getOwner()
{
return owner;
/impl/src/java/pt/estgp/estgweb/domain/views/AnnouncementView.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.domain.enums.AnnouncementStyleEnum;
import pt.estgp.estgweb.utils.RoleManager;
import pt.estgp.estgweb.utils.ConfigProperties;
42,7 → 43,7
private Date startDate;
private Date expireDate;
private Integer counter;
private boolean status;
private boolean status = true;
private boolean internal;
private GenericUser owner;
private String style;
52,13 → 53,25
private long bigImageId;
private long smallImageId;
 
private boolean courseUnitInternal;
 
 
private CourseUnitView courseUnitView;
 
public AnnouncementView()
{}
{
courseUnitView = new CourseUnitView();
}
 
public AnnouncementView(Announcement announcement)
{
super(announcement);
init(announcement);
}
public void init(Announcement announcement)
{
 
super(announcement);
 
this.announcement = announcement;
this.title = announcement.getTitle();
this.text = announcement.getText();
85,6 → 98,11
this.internal = announcement.isInternal();
this.updateDate = announcement.getUpdateDate();
this.saveDate = announcement.getSaveDate();
if(announcement instanceof CourseUnitAnnouncementImpl)
{
courseUnitView = new CourseUnitView(((CourseUnitAnnouncement)announcement).getCourseUnit());
courseUnitInternal = ((CourseUnitAnnouncement)announcement).isCourseUnitInternal();
}
}
 
public void persistViewInObject(Announcement announcement)
106,9 → 124,33
announcement.setStyle(style);
announcement.setInternalUrlInclude(internalUrlInclude);
announcement.setInternal(internal);
if(announcement instanceof CourseUnitAnnouncement && courseUnitView != null && courseUnitView.getId() > 0)
{
((CourseUnitAnnouncement)announcement).setCourseUnit(DaoFactory.getCourseUnitDaoImpl().load(courseUnitView.getId()));
((CourseUnitAnnouncement)announcement).setCourseUnitInternal(courseUnitInternal);
}
}
public boolean isCourseUnitInternal()
{
return courseUnitInternal;
}
 
public void setCourseUnitInternal(boolean courseUnitInternal)
{
this.courseUnitInternal = courseUnitInternal;
}
 
public CourseUnitView getCourseUnitView()
{
return courseUnitView;
}
 
public void setCourseUnitView(CourseUnitView courseUnitView)
{
this.courseUnitView = courseUnitView;
}
 
public long getBigImageId()
{
return bigImageId;
149,7 → 191,7
return style;
}
 
public AnnouncementStyleEnum getStyleEnum()
public AnnouncementStyleEnum getStyleEnum()
{
return AnnouncementStyleEnum.parse(style);
}
310,7 → 352,7
return StringsUtils.getFragment(getText(),TEXT_SUMMARY_SIZE_SMALL);
}
 
public String getFormatedText()
public String getFormatedText()
{
return StringsUtils.getFormatedText(text);
}
342,9 → 384,14
return null;
}
 
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
return announcement.isOwnedBy(u,transaction);
}
 
public boolean isOwnedBy(GenericUser u)
{
return announcement.isOwnedBy(u);
return announcement.isOwnedBy(u,false);
}
 
public List<String> getTargetRolesList()
366,4 → 413,5
{
return ((AnnouncementImpl)announcement).canLoadInOpenTransaction(u);
}
 
}
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitAssignementView.java
1,10 → 1,13
package pt.estgp.estgweb.domain.views;
 
import pt.estgp.estgweb.domain.CourseUnitAssignement;
import pt.estgp.estgweb.domain.CourseUnitAssignementImpl;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.web.utils.DatesUtils;
import pt.estgp.estgweb.web.UserSessionProxy;
 
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.List;
import java.util.Date;
 
/**
* @author Jorge Machado
16,13 → 19,21
{
 
private long id;
private long courseUnitId;
private String title;
private String description;
private long delivers;
private boolean status;
private boolean status = true;
private String deliverType;
private boolean lateDelivers;
private String deliverDate;
private Date deliverDateDate;
private String workFile;
private CourseUnitDeliverableView courseUnitDeliverableView;
private List<CourseUnitDeliverableView> deliverables;
private CourseUnitView courseUnitView;
private RepositoryFileImpl repositoryFile;
 
private CourseUnitAssignement courseUnitAssignement;
 
public Class getReferenceClass()
39,17 → 50,23
{
}
 
 
public CourseUnitAssignementView(CourseUnitAssignement courseUnitAssignement, long delivers)
{
super(courseUnitAssignement);
this.courseUnitAssignement = courseUnitAssignement;
this.courseUnitId = courseUnitAssignement.getCourseUnit().getId();
this.id = courseUnitAssignement.getId();
this.title = courseUnitAssignement.getTitle();
this.description = courseUnitAssignement.getDescription();
this.status = courseUnitAssignement.isStatus();
this.delivers = delivers;
this.deliverType = courseUnitAssignement.getDeliverType();
this.deliverDate = DatesUtils.getStringFromDate(courseUnitAssignement.getDeliverDate());
this.deliverDateDate = courseUnitAssignement.getDeliverDate();
this.lateDelivers = courseUnitAssignement.isLateDelivers();
this.workFile = courseUnitAssignement.getRepositoryStream();
}
 
public void persistViewInObject(CourseUnitAssignement c)
62,16 → 79,56
c.setDeliverType(deliverType);
}
 
public RepositoryFileImpl getRepositoryFile()
{
return repositoryFile;
}
 
public void setRepositoryFile(RepositoryFileImpl repositoryFile)
{
this.repositoryFile = repositoryFile;
}
 
public Date getDeliverDateDate()
{
return deliverDateDate;
}
 
public void setDeliverDateDate(Date deliverDateDate)
{
this.deliverDateDate = deliverDateDate;
}
 
public long getId()
{
return id;
}
 
public String getWorkFile()
{
return workFile;
}
 
public void setWorkFile(String workFile)
{
this.workFile = workFile;
}
 
public void setId(long id)
{
this.id = id;
}
 
public CourseUnitView getCourseUnitView()
{
return courseUnitView;
}
 
public void setCourseUnitView(CourseUnitView courseUnitView)
{
this.courseUnitView = courseUnitView;
}
 
public CourseUnitAssignement getCourseUnitAssignement()
{
return courseUnitAssignement;
152,4 → 209,57
{
this.deliverDate = deliverDate;
}
 
 
public CourseUnitDeliverableView getCourseUnitDeliverableView()
{
return courseUnitDeliverableView;
}
 
public void setCourseUnitDeliverableView(CourseUnitDeliverableView courseUnitDeliverableView)
{
this.courseUnitDeliverableView = courseUnitDeliverableView;
}
 
public boolean isActive()
{
return courseUnitAssignement.getDeliverDate() != null && courseUnitAssignement.getDeliverDate().getTime() >= System.currentTimeMillis();
}
 
 
public long getCourseUnitId()
{
return courseUnitId;
}
 
public void setCourseUnitId(long courseUnitId)
{
this.courseUnitId = courseUnitId;
}
 
 
public List<CourseUnitDeliverableView> getDeliverables()
{
return deliverables;
}
 
public void setDeliverables(List<CourseUnitDeliverableView> deliverables)
{
this.deliverables = deliverables;
}
 
public boolean canDeliver(HttpServletRequest request)
{
UserSession userSession = UserSessionProxy.loadUserSessionFromRequest(request);
return
userSession.getUser() != null &&
((UserImpl) userSession.getUser()).isInCourseUnit(courseUnitId) &&
!deliverType.equals("nofile") &&
(lateDelivers || courseUnitAssignement.getDeliverDate().getTime() >= System.currentTimeMillis());
}
 
public boolean isLateDeliver()
{
return courseUnitDeliverableView != null && courseUnitDeliverableView.isLateDeliver();
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/UserView.java
368,6 → 368,11
 
public boolean isOwnedBy(GenericUser u)
{
return isOwnedBy(u,false);
}
 
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
return u.getId() == id;
}
 
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitDeliverableView.java
New file
0,0 → 1,155
package pt.estgp.estgweb.domain.views;
 
import pt.estgp.estgweb.domain.CourseUnitAssignement;
import pt.estgp.estgweb.domain.CourseUnitAssignementImpl;
import pt.estgp.estgweb.domain.CourseUnitDeliverableImpl;
import pt.estgp.estgweb.domain.CourseUnitDeliverable;
import pt.estgp.estgweb.web.utils.DatesUtils;
 
import java.io.Serializable;
import java.util.Date;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
* @time 19:34:49
* @see pt.estgp.estgweb.domain.views
*/
public class CourseUnitDeliverableView extends DomainObjectView
{
 
private long id;
private String fileStreamId;
private Date deliverDate;
private String deliverDateStr;
private UserView student;
private String grade;
private String obs;
 
private CourseUnitDeliverable courseUnitDeliverable;
private CourseUnitAssignementView courseUnitAssignementView;
 
 
 
public Class getReferenceClass()
{
return CourseUnitDeliverableImpl.class;
}
 
public Serializable getSerializable()
{
return id;
}
 
public CourseUnitDeliverableView()
{
}
 
public CourseUnitDeliverableView(CourseUnitDeliverable courseUnitDeliverable, CourseUnitAssignementView courseUnitAssignementView)
{
super(courseUnitDeliverable);
this.courseUnitDeliverable = courseUnitDeliverable;
this.id = courseUnitDeliverable.getId();
this.grade = courseUnitDeliverable.getGrade();
this.obs = courseUnitDeliverable.getObs();
this.fileStreamId = courseUnitDeliverable.getDeliverableRepositoryStream();
this.deliverDate = courseUnitDeliverable.getDeliverDate();
this.deliverDateStr = DatesUtils.getStringFromDate(deliverDate);
if(courseUnitDeliverable.getStudent() != null)
this.student = new UserView(courseUnitDeliverable.getStudent());
this.courseUnitAssignementView = courseUnitAssignementView;
}
 
public void persistViewInObject(CourseUnitDeliverable c)
{
c.setGrade(grade);
c.setObs(obs);
}
 
public String getGrade()
{
return grade;
}
 
public void setGrade(String grade)
{
this.grade = grade;
}
 
public UserView getStudent()
{
return student;
}
 
public void setStudent(UserView student)
{
this.student = student;
}
 
public long getId()
{
return id;
}
 
public void setId(long id)
{
this.id = id;
}
 
 
public String getObs()
{
return obs;
}
 
public void setObs(String obs)
{
this.obs = obs;
}
 
public String getFileStreamId()
{
return fileStreamId;
}
 
public void setFileStreamId(String fileStreamId)
{
this.fileStreamId = fileStreamId;
}
 
public Date getDeliverDate()
{
return deliverDate;
}
 
public void setDeliverDate(Date deliverDate)
{
this.deliverDate = deliverDate;
}
 
public CourseUnitDeliverable getCourseUnitDeliverable()
{
return courseUnitDeliverable;
}
 
public void setCourseUnitDeliverable(CourseUnitDeliverable courseUnitDeliverable)
{
this.courseUnitDeliverable = courseUnitDeliverable;
}
 
 
public String getDeliverDateStr()
{
return deliverDateStr;
}
 
public void setDeliverDateStr(String deliverDateStr)
{
this.deliverDateStr = deliverDateStr;
}
 
public boolean isLateDeliver()
{
return getDeliverDate().getTime() > courseUnitAssignementView.getDeliverDateDate().getTime();
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java
2,6 → 2,9
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.courseunits.LoadCourseUnitAnnouncements;
import pt.estgp.estgweb.services.expceptions.ServiceException;
 
import java.io.Serializable;
import java.util.Set;
19,15 → 22,20
{
private static final Logger logger = Logger.getLogger(CourseUnitView.class);
 
 
LoadCourseUnitAnnouncements loadCourseUnitAnnouncements = new LoadCourseUnitAnnouncements();
 
private long id;
private String name;
private String code;
private long courseId;
private String courseCode;
private String courseName;
private String semestre;
private String importYear;
private BlogView blog;
private Set<CourseUnitAnnouncement> announcements;
private List<AnnouncementView> announcements;
 
private CourseUnit courseUnit;
private Set<UserView> teachers;
private Set<UserView> students;
36,8 → 44,12
private String programStreamId;
private int programSize;
private String extension;
private Set<CourseUnitAssignementView> courseUnitAssignements;
private List<CourseUnitAssignementView> courseUnitAssignements;
 
private boolean notFound = false;
 
private CourseView courseView;
 
public Class getReferenceClass()
{
return CourseUnitImpl.class;
54,16 → 66,30
public CourseUnitView(CourseUnit courseUnit, boolean initTeachers, boolean initStudents )
{
super(courseUnit);
init(courseUnit, initTeachers, initStudents);
init(courseUnit, initTeachers, initStudents,false);
}
 
public CourseUnitView(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog )
{
super(courseUnit);
init(courseUnit, initTeachers, initStudents, initBlog);
}
 
public CourseUnitView(CourseUnit courseUnit)
{
super(courseUnit);
init(courseUnit, false,false);
init(courseUnit, false,false,false);
}
private void init(CourseUnit courseUnit, boolean initTeachers, boolean initStudents)
 
public CourseUnitView(CourseUnit courseUnit, BlogView b)
{
super(courseUnit);
this.blog = b;
init(courseUnit, false,false,false);
}
 
private void init(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog)
{
this.courseUnit = courseUnit;
this.courseName = courseUnit.getCourseName();
this.name = courseUnit.getName();
72,6 → 98,9
this.semestre = courseUnit.getSemestre();
this.importYear = courseUnit.getImportYear();
this.courseCode = courseUnit.getCourseCode();
this.objectives = courseUnit.getObjectives();
if(courseUnit.getProgramStreamId() != null)
programStreamId = courseUnit.getProgramStreamId();
// if(courseUnit.getBlog() != null)
// this.blog = new BlogView(courseUnit.getBlog());
this.id = courseUnit.getId();
93,8 → 122,51
students.add(u);
}
}
if(initBlog)
{
blog = new BlogView(((CourseUnitImpl)courseUnit).getUnitBlog(),this);
}
if(courseUnit.getCourse() != null)
{
courseId = courseUnit.getCourse().getId();
}
}
 
public long getCourseId()
{
return courseId;
}
 
public void setCourseId(long courseId)
{
this.courseId = courseId;
}
 
public CourseView getCourseView()
{
return courseView;
}
 
public void setCourseView(CourseView courseView)
{
this.courseView = courseView;
}
 
public void setNotFound(boolean notFound)
{
this.notFound = notFound;
}
 
public boolean isNotFound()
{
return notFound;
}
 
public void setAnnouncements(List<AnnouncementView> announcements)
{
this.announcements = announcements;
}
 
public int getTeachersSize()
{
if(teachers != null)
108,13 → 180,13
return students.size();
return 0;
}
public void setCourseUnitAssignements(Set<CourseUnitAssignementView> courseUnitAssignements)
 
public void setCourseUnitAssignements(List<CourseUnitAssignementView> courseUnitAssignements)
{
this.courseUnitAssignements = courseUnitAssignements;
}
 
public Set<CourseUnitAssignementView> getCourseUnitAssignements()
public List<CourseUnitAssignementView> getCourseUnitAssignements()
{
return courseUnitAssignements;
}
155,6 → 227,10
c.setName(name);
c.setCode(code);
c.setSemestre(semestre);
if(courseId > 0)
{
c.setCourse(DaoFactory.getCourseDaoImpl().load(courseId));
}
}
 
public String getObjectives()
249,7 → 325,7
this.extension = extension;
}
 
public Set<CourseUnitAnnouncement> getAnnouncements()
public List<AnnouncementView> getAnnouncements()
{
return announcements;
}
266,9 → 342,14
 
public boolean isOwnedBy(GenericUser u)
{
return u != null && u instanceof TeacherImpl && ((TeacherImpl)u).hasCourseUnit(getId());
return isOwnedBy(u, false);
}
 
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
return u != null && u instanceof TeacherImpl && ((TeacherImpl)u).hasCourseUnit(getId(), transaction);
}
 
/**
* Not implemented can be variuous teachers
* @return null
/impl/src/java/pt/estgp/estgweb/domain/views/CourseView.java
New file
0,0 → 1,286
package pt.estgp.estgweb.domain.views;
 
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.web.utils.DatesUtils;
import pt.estgp.estgweb.Globals;
import org.apache.log4j.Logger;
 
import java.util.List;
import java.util.Set;
import java.util.HashSet;
import java.util.ArrayList;
import java.io.Serializable;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
* @time 19:34:49
* @see pt.estgp.estgweb.domain.views
*/
public class CourseView extends DomainObjectView
{
private static final Logger logger = Logger.getLogger(CourseView.class);
 
 
private long id;
private String code;
private String name;
private String degree;
private String importYear;
private String description;
private String institutionalCode;
private UserView coordinator;
private UserView director;
private List<CourseUnitView> courseUnits;
private String studiesPlanStreamId;
private RepositoryFileImpl studiesPlan;
 
 
private Course course;
 
 
public Class getReferenceClass()
{
return CourseImpl.class;
}
 
public Serializable getSerializable()
{
return id;
}
 
public CourseView()
{
coordinator = new UserView();
director = new UserView();
}
 
public CourseView(Course course)
{
super(course);
init(course,false);
}
 
public CourseView(Course course, boolean initCourseUnits)
{
super(course);
init(course, initCourseUnits);
}
 
private void init(Course course, boolean initCourseUnits)
{
this.course = course;
this.id = course.getId();
this.code = course.getCode();
this.name = course.getName();
this.degree = course.getDegree();
this.description = course.getDescription();
this.importYear = course.getImportYear();
this.institutionalCode = course.getInstitutionalCode();
if(course.getStudiesPlan() != null)
this.studiesPlanStreamId = course.getStudiesPlan();
if(course.getCoordinator() != null)
coordinator = new UserView(course.getCoordinator());
if(course.getDirector() != null)
director = new UserView(course.getDirector());
if(initCourseUnits)
{
if(course.getCourseUnits() != null)
{
courseUnits = new ArrayList<CourseUnitView>();
for(CourseUnit c: course.getCourseUnits())
{
CourseUnitView cUV = new CourseUnitView(c);
courseUnits.add(cUV);
}
}
}
}
 
public void persistViewInObject(Course c)
{
c.setCode(code);
c.setDegree(degree);
c.setDescription(description);
c.setImportYear(importYear);
c.setInstitutionalCode(institutionalCode);
c.setName(name);
if(coordinator != null && coordinator.getId() > 0)
{
Teacher u = DaoFactory.getTeacherDaoImpl().load(coordinator.getId());
if(c.getCoordinator() == null || c.getCoordinator().getId() != coordinator.getId())
{
if(c.getCoordinator() != null)
{
Teacher oldCoordinator = c.getCoordinator();
oldCoordinator.getCoordinatorCourses().remove(c);
if(oldCoordinator.getCoordinatorCourses().size() == 0)
{
oldCoordinator.removeRole(Globals.COURSE_COORDINATOR_ROLE);
}
}
c.setCoordinator(u);
u.addRole(Globals.COURSE_COORDINATOR_ROLE);
}
}
if(director != null && director.getId() > 0)
{
Teacher u = DaoFactory.getTeacherDaoImpl().load(director.getId());
if(c.getDirector() == null || c.getDirector().getId() != director.getId())
{
if(c.getDirector() != null)
{
Teacher oldDirector = c.getDirector();
oldDirector.getDirectorCourses().remove(c);
if(oldDirector.getDirectorCourses().size() == 0)
{
oldDirector.removeRole(Globals.COURSE_DIRECTOR_ROLE);
}
}
c.setDirector(u);
u.addRole(Globals.COURSE_DIRECTOR_ROLE);
}
}
}
 
 
public long getId()
{
return id;
}
 
public void setId(long id)
{
this.id = id;
}
 
public String getCode()
{
return code;
}
 
public void setCode(String code)
{
this.code = code;
}
 
public String getName()
{
return name;
}
 
public void setName(String name)
{
this.name = name;
}
 
public String getDegree()
{
return degree;
}
 
public void setDegree(String degree)
{
this.degree = degree;
}
 
public String getImportYear()
{
return importYear;
}
 
public void setImportYear(String importYear)
{
this.importYear = importYear;
}
 
public String getDescription()
{
return description;
}
 
public void setDescription(String description)
{
this.description = description;
}
 
public String getInstitutionalCode()
{
return institutionalCode;
}
 
public void setInstitutionalCode(String institutionalCode)
{
this.institutionalCode = institutionalCode;
}
 
public UserView getCoordinator()
{
if(coordinator == null)
coordinator = new UserView();
return coordinator;
}
 
public void setCoordinator(UserView coordinator)
{
this.coordinator = coordinator;
}
 
 
public List<CourseUnitView> getCourseUnits()
{
return courseUnits;
}
 
public void setCourseUnits(List<CourseUnitView> courseUnits)
{
this.courseUnits = courseUnits;
}
 
public String getStudiesPlanStreamId()
{
return studiesPlanStreamId;
}
 
public void setStudiesPlanStreamId(String studiesPlanStreamId)
{
this.studiesPlanStreamId = studiesPlanStreamId;
}
 
public RepositoryFileImpl getStudiesPlan()
{
return studiesPlan;
}
 
public void setStudiesPlan(RepositoryFileImpl studiesPlan)
{
this.studiesPlan = studiesPlan;
}
 
public int getStudiesPlanSizeKb()
{
if(studiesPlan != null)
return studiesPlan.getLastVersion().getSize() / 1024;
return 0;
}
 
public String getStudiesPlanDate()
{
if(studiesPlan != null)
return DatesUtils.getStringFromDate(studiesPlan.getLastVersion().getSaveDate());
return "";
}
 
public UserView getDirector()
{
if(director == null)
director = new UserView();
return director;
}
 
public void setDirector(UserView director)
{
this.director = director;
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/BlogView.java
2,12 → 2,15
 
import org.apache.log4j.Logger;
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 java.io.Serializable;
import java.util.List;
 
import jomm.dao.impl.AbstractDao;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
34,8 → 37,11
private List<MonthPosts> months;
private int month;
private int year;
boolean autoValidation;
private boolean autoValidation;
private boolean courseUnitInternal;
private CourseUnitView courseUnitView;
 
 
private List<BlogPostView> lastPosts;
 
public BlogView()
45,6 → 51,16
public BlogView(Blog blog)
{
super(blog);
init(blog,null);
}
public BlogView(Blog blog, CourseUnitView c)
{
super(blog);
init(blog,c);
}
private void init(Blog blog, CourseUnitView c)
{
 
this.blog = blog;
this.title = blog.getTitle();
this.description = blog.getDescription();
56,6 → 72,19
this.name = blog.getName();
this.internal = blog.isInternal();
autoValidation = blog.isAutoValidation();
if(blog instanceof CourseUnitBlogImpl)
{
if(c != null)
{
courseUnitView = c;
courseUnitInternal = ((CourseUnitBlog)blog).isCourseUnitInternal();
}
else
{
courseUnitInternal = ((CourseUnitBlog)blog).isCourseUnitInternal();
courseUnitView = new CourseUnitView(((CourseUnitBlog)blog).getCourseUnit(),this);
}
}
}
 
public void persistViewInObject(Blog blog)
68,6 → 97,10
blog.setImage(image);
blog.setInternal(internal);
blog.setAutoValidation(autoValidation);
if(blog instanceof CourseUnitBlog)
{
((CourseUnitBlog)blog).setCourseUnitInternal(courseUnitInternal);
}
}
public void persistViewInObjectByAdmin(Blog blog)
{
86,6 → 119,16
this.autoValidation = autoValidation;
}
 
public CourseUnitView getCourseUnitView()
{
return courseUnitView;
}
 
public void setCourseUnitView(CourseUnitView courseUnitView)
{
this.courseUnitView = courseUnitView;
}
 
public String getName()
{
return name;
136,6 → 179,16
this.lastPosts = lastPosts;
}
 
public boolean isCourseUnitInternal()
{
return courseUnitInternal;
}
 
public void setCourseUnitInternal(boolean courseUnitInternal)
{
this.courseUnitInternal = courseUnitInternal;
}
 
public void setInternal(boolean internal)
{
this.internal = internal;
153,9 → 206,14
 
public boolean isOwnedBy(GenericUser u)
{
return blog.isOwnedBy(u);
return blog.isOwnedBy(u,false);
}
 
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
return blog.isOwnedBy(u,transaction);
}
 
public GenericUser getOwner()
{
return owner;
263,6 → 321,10
{
return ((BlogImpl)blog).canAddContent(u);
}
public boolean canAddContent(GenericUserImpl u, boolean transaction)
{
return ((BlogImpl)blog).canAddContent(u,transaction);
}
 
public boolean isInternal()
{
/impl/src/java/pt/estgp/estgweb/domain/IOwned.java
12,6 → 12,7
{
public boolean isOwnedBy(GenericUser u);
public boolean isOwnedBy(GenericUser u, boolean openTransaction);
public GenericUser getOwner();
public List<String> getOwnerRoles();
public String getChoosedOwnerRole();
/impl/src/java/pt/estgp/estgweb/domain/CourseUnitBlogImpl.java
1,5 → 1,7
package pt.estgp.estgweb.domain;
 
import pt.estgp.estgweb.Globals;
 
/**
* @author Jorge Machado
* @date 21/Abr/2008
8,6 → 10,13
*/
public class CourseUnitBlogImpl extends CourseUnitBlog
{
 
 
public CourseUnitBlogImpl()
{
super.setType(Globals.BLOG_TYPE_COURSE_UNIT);
}
 
public boolean canAddPost(GenericUserImpl user)
{
return canAddPost(user,false);
20,7 → 29,7
*/
public boolean canAddPost(GenericUserImpl user, boolean transaction)
{
if(!super.canAddPost(user))
if(!super.canAddPost(user,transaction))
return false;
if(user == null)
return false;
44,4 → 53,17
{
return !isCourseUnitInternal() || canAddPost(user,true);
}
 
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
if(u instanceof UserImpl)
if(((UserImpl) u).isTeacherOfCourseUnit(getCourseUnit().getId(),transaction))
return true;
return false;
}
 
public boolean isOwnedBy(GenericUser u)
{
return isOwnedBy(u,false);
}
}
/impl/src/java/pt/estgp/estgweb/domain/ReminderImpl.java
23,6 → 23,11
 
public boolean isOwnedBy(GenericUser u)
{
return isOwnedBy(u, false);
}
 
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
return u.getId() == getOwner().getId();
}
 
/impl/src/java/pt/estgp/estgweb/domain/OwnedDomainObject.java
23,6 → 23,12
*/
public abstract List<String> getOwnerRoles();
 
 
public boolean isOwnedBy(GenericUser u)
{
return isOwnedBy(u, false);
}
 
/**
* Check if this object is owned by this user or
* if this user is in group of owners or
31,9 → 37,10
* @param u user to check
* @return true if user is owner
*/
public boolean isOwnedBy(GenericUser u)
public boolean isOwnedBy(GenericUser u, boolean transaction)
{
if(getOwner() == null && getOwnerRoles() == null)
 
if(u == null || getOwner() == null && getOwnerRoles() == null)
return false;
if(getOwner() != null)
{
/impl/src/java/pt/estgp/estgweb/domain/GenericUserImpl.java
31,8 → 31,12
 
public void addRole(String role)
{
setRoles(RoleManager.catRole(super.getRoles(), role));
setRoles(RoleManager.addRole(super.getRoles(), role));
}
public void removeRole(String role)
{
setRoles(RoleManager.removeRole(super.getRoles(), role));
}
 
public boolean hasRole(String r)
{
93,4 → 97,6
{
return isSuperuser() || isAdmin();
}
 
public abstract String getUsername();
}
/impl/src/java/pt/estgp/estgweb/filters/chains/ResourceAccessControlEnum.java
12,7 → 12,9
publicDomain("resource.access.publicDomain", new ResourceAccessControlPublicDomainFilter()),
authenticatedDomain("resource.access.authenticatedDomain", new ResourceAccessControlPublicDomainFilter()),
adminDomain("resource.access.adminDomain",new ResourceAccessControlAdminDomainFilter()),
superUserDomain("resource.access.superDomain",new ResourceAccessControlSuperDomainFilter());
superUserDomain("resource.access.superDomain",new ResourceAccessControlSuperDomainFilter()),
courseunitDeliverableDomain("resource.access.courseunitDeliverableDomain",new ResourceAccessControlCourseUnitDeliverableFilter()),
courseunitDomain("resource.access.courseunitDomain",new ResourceAccessControlCourseUnitFilter());
 
private String key;
private ResourceAccessControlFilter filter;
/impl/src/java/pt/estgp/estgweb/filters/chains/ResourceAccessControlFilter.java
1,7 → 1,14
package pt.estgp.estgweb.filters.chains;
 
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.utl.ist.berserk.logic.filterManager.IFilter;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import org.apache.log4j.Logger;
 
/**
* @author Jorge Machado
10,5 → 17,23
*/
public abstract class ResourceAccessControlFilter implements IFilter
{
public abstract boolean canAccessResource(UserSession user, String identifier);
 
private static final Logger logger = Logger.getLogger(ResourceAccessControlFilter.class);
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY);
String identifier = (String) request.getServiceParameters().getParameter("identifier");
if(!canAccessResource(userSession,identifier))
{
if(userSession.getUser() != null)
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
else
logger.warn(userSession.getIpAddress() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
}
 
}
 
public abstract boolean canAccessResource(UserSession userSession, String identifier);
}
/impl/src/java/pt/estgp/estgweb/filters/filters/ResourceAccessControlCourseUnitDeliverableFilter.java
New file
0,0 → 1,34
package pt.estgp.estgweb.filters.filters;
 
import pt.estgp.estgweb.filters.chains.ResourceAccessControlFilter;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.Globals;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
import org.apache.log4j.Logger;
 
/**
* @author Jorge Machado
* @date 4/Jun/2008
* @see pt.estgp.estgweb.filters.filters
*/
public class ResourceAccessControlCourseUnitDeliverableFilter extends ResourceAccessControlFilter
{
 
private static final Logger logger = Logger.getLogger(ResourceAccessControlCourseUnitDeliverableFilter.class);
 
public boolean canAccessResource(UserSession userSession, String identifier)
{
CourseUnitDeliverable d = DaoFactory.getCourseUnitDeliverableDaoImpl().loadDeliverableByRepositoryId(identifier);
CourseUnit c = d.getCourseUnitAssignement().getCourseUnit();
return userSession.getUser()!= null &&
(((UserImpl) userSession.getUser()).isTeacherOfCourseUnit(c.getId(), true)
||
userSession.getUser().getId() == d.getStudent().getId());
}
 
}
/impl/src/java/pt/estgp/estgweb/filters/filters/ResourceAccessControlCourseUnitFilter.java
New file
0,0 → 1,30
package pt.estgp.estgweb.filters.filters;
 
import pt.estgp.estgweb.filters.chains.ResourceAccessControlFilter;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.Globals;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
import org.apache.log4j.Logger;
 
/**
* @author Jorge Machado
* @date 4/Jun/2008
* @see pt.estgp.estgweb.filters.filters
*/
public class ResourceAccessControlCourseUnitFilter extends ResourceAccessControlFilter
{
 
private static final Logger logger = Logger.getLogger(ResourceAccessControlCourseUnitFilter.class);
 
public boolean canAccessResource(UserSession userSession, String identifier)
{
CourseUnitAssignement cA = DaoFactory.getCourseUnitAssignementDaoImpl().loadByRepositoryId(identifier);
CourseUnit c = cA.getCourseUnit();
return userSession.getUser()!= null && ((UserImpl) userSession.getUser()).isInCourseUnit(c.getId(), true);
}
}
/impl/src/java/pt/estgp/estgweb/filters/filters/OwnerUsersClass.java
33,7 → 33,7
 
IOwned iOwned = (IOwned) LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1),filterParameters,request.getServiceParameters());
 
if(!iOwned.isOwnedBy(userSession.getUser()))
if(!iOwned.isOwnedBy(userSession.getUser(),true))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
/impl/src/java/pt/estgp/estgweb/filters/filters/IsStudentInCourseUnitUsersClass.java
New file
0,0 → 1,43
package pt.estgp.estgweb.filters.filters;
 
import pt.estgp.estgweb.filters.chains.LoadControlFilter;
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.Globals;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
import org.apache.log4j.Logger;
 
public class IsStudentInCourseUnitUsersClass extends LoadControlFilter
{
private static final Logger logger = Logger.getLogger(IsStudentInCourseUnitUsersClass.class);
 
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
 
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY);
 
if(userSession.getUser() == null)
{
logger.info("try access restricted area:" + request.getRequester());
throw new NeedAuthenticationException();
}
 
if(userSession.getUser().isSuperuser())
return;
 
CourseUnit courseUnit = (CourseUnit) LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1),filterParameters,request.getServiceParameters());
 
if(!((UserImpl)userSession.getUser()).isStudentfCourseUnit(courseUnit.getId(),true))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
}
}
}
/impl/src/java/pt/estgp/estgweb/filters/filters/OwnerUsers.java
41,7 → 41,7
 
IOwned iOwned = (IOwned) LoadObjectFromParameters.loadObject(filterParameters,request.getServiceParameters());
 
if(!iOwned.isOwnedBy(userSession.getUser()))
if(!iOwned.isOwnedBy(userSession.getUser(),true))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
/impl/src/java/pt/estgp/estgweb/filters/filters/BooleanCheck.java
New file
0,0 → 1,28
package pt.estgp.estgweb.filters.filters;
 
import pt.estgp.estgweb.filters.chains.LoadControlFilter;
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters;
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.IInternal;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.ReflectionBean;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
import org.apache.log4j.Logger;
 
public class BooleanCheck extends LoadControlFilter
{
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
Object container = LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1),filterParameters,request.getServiceParameters());
ReflectionBean rbean = new ReflectionBean("o." + filterParameters.getParameter(2));
Boolean bool = (Boolean) rbean.invoke(container);
if(!bool)
{
throw new NeedAuthenticationException();
}
}
}
/impl/src/java/pt/estgp/estgweb/filters/filters/IsTeacherInCourseUnitUsersClassBean.java
New file
0,0 → 1,48
package pt.estgp.estgweb.filters.filters;
 
import pt.estgp.estgweb.filters.chains.LoadControlFilter;
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.ReflectionBean;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
import org.apache.log4j.Logger;
 
public class IsTeacherInCourseUnitUsersClassBean extends LoadControlFilter
{
private static final Logger logger = Logger.getLogger(IsTeacherInCourseUnitUsersClassBean.class);
 
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
 
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY);
 
if(userSession.getUser() == null)
{
logger.info("try access restricted area:" + request.getRequester());
throw new NeedAuthenticationException();
}
 
if(userSession.getUser().isSuperuser())
return;
 
Object bean = LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1),filterParameters,request.getServiceParameters());
 
ReflectionBean rbean = new ReflectionBean("o."+(String) filterParameters.getParameter(2));
CourseUnit courseUnit = (CourseUnit) rbean.invoke(bean);
 
 
if(!((UserImpl)userSession.getUser()).isTeacherOfCourseUnit(courseUnit.getId(),true))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
}
}
}
/impl/src/java/pt/estgp/estgweb/filters/filters/utils/LoadObjectFromParameters.java
10,6 → 10,7
 
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
 
/**
* @author Jorge Machado
45,7 → 46,7
 
Object classNameObjectContainer = serviceParameters.getParameter(classNameBean.getName());
Class className = (Class) classNameBean.invoke(classNameObjectContainer);
return AbstractDao.getCurrentSession().load(className,serializable);
return AbstractDao.load(className,serializable);
}
catch (NoSuchMethodException e)
{
99,7 → 100,7
ReflectionBean serializableBean = new ReflectionBean(serializableBeanId);
Object serializableObjectContainer = serviceParameters.getParameter(serializableBean.getName());
Serializable serializable = (Serializable) serializableBean.invoke(serializableObjectContainer);
return AbstractDao.getCurrentSession().load(c,serializable);
return AbstractDao.load(c,serializable);
}
catch (NoSuchMethodException e)
{
123,8 → 124,13
ReflectionBean serializableBean = new ReflectionBean(serializableBeanId);
Object serializableObjectContainer = serviceParameters.getParameter(serializableBean.getName());
Serializable serializable = (Serializable) serializableBean.invoke(serializableObjectContainer);
return AbstractDao.getCurrentSession().load(className,serializable);
return AbstractDao.load(className,serializable);
}
catch(HibernateException h)
{
logger.error(h,h);
throw h;
}
catch (NoSuchMethodException e)
{
logger.fatal(e,e);
/impl/src/java/pt/estgp/estgweb/filters/filters/IsInCourseUnitUsersClassBean.java
New file
0,0 → 1,49
package pt.estgp.estgweb.filters.filters;
 
import pt.estgp.estgweb.filters.chains.LoadControlFilter;
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.IOwned;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.ReflectionBean;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
import org.apache.log4j.Logger;
 
public class IsInCourseUnitUsersClassBean extends LoadControlFilter
{
private static final Logger logger = Logger.getLogger(IsInCourseUnitUsersClassBean.class);
 
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
 
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY);
 
if(userSession.getUser() == null)
{
logger.info("try access restricted area:" + request.getRequester());
throw new NeedAuthenticationException();
}
 
if(userSession.getUser().isSuperuser())
return;
 
Object bean = LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1),filterParameters,request.getServiceParameters());
 
ReflectionBean rbean = new ReflectionBean("o."+(String) filterParameters.getParameter(2));
CourseUnit courseUnit = (CourseUnit) rbean.invoke(bean);
 
 
if(!((UserImpl)userSession.getUser()).isInCourseUnit(courseUnit.getId(),true))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
}
}
}
/impl/src/java/pt/estgp/estgweb/filters/filters/IsInCourseUnit.java
New file
0,0 → 1,52
package pt.estgp.estgweb.filters.filters;
 
import pt.estgp.estgweb.filters.chains.LoadControlFilter;
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.ReflectionBean;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
import org.apache.log4j.Logger;
 
import java.io.Serializable;
 
public class IsInCourseUnit extends LoadControlFilter
{
private static final Logger logger = Logger.getLogger(IsInCourseUnit.class);
 
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
 
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY);
 
if(userSession.getUser() == null)
{
logger.info("try access restricted area:" + request.getRequester());
throw new NeedAuthenticationException();
}
 
if(userSession.getUser().isSuperuser())
return;
 
ReflectionBean serializableBean = new ReflectionBean((String) filterParameters.parametersArray()[0]);
Object serializableObjectContainer = request.getServiceParameters().getParameter(serializableBean.getName());
Serializable serializable = (Serializable) serializableBean.invoke(serializableObjectContainer);
if(serializable != null && serializable instanceof Long && ((Long)serializable).intValue() > 0)
{
CourseUnit courseUnit = (CourseUnit) LoadObjectFromParameters.loadObjectFromClassName(CourseUnit.class.getName(),filterParameters,request.getServiceParameters());
 
if(!((UserImpl)userSession.getUser()).isInCourseUnit(courseUnit.getId(),true))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
}
}
}
}
/impl/src/java/pt/estgp/estgweb/filters/filters/IsTeacherInCourseUnitUsersClass.java
New file
0,0 → 1,43
package pt.estgp.estgweb.filters.filters;
 
import pt.estgp.estgweb.filters.chains.LoadControlFilter;
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.Globals;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
import org.apache.log4j.Logger;
 
public class IsTeacherInCourseUnitUsersClass extends LoadControlFilter
{
private static final Logger logger = Logger.getLogger(IsTeacherInCourseUnitUsersClass.class);
 
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
 
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY);
 
if(userSession.getUser() == null)
{
logger.info("try access restricted area:" + request.getRequester());
throw new NeedAuthenticationException();
}
 
if(userSession.getUser().isSuperuser())
return;
 
CourseUnit courseUnit = (CourseUnit) LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1),filterParameters,request.getServiceParameters());
 
if(!((UserImpl)userSession.getUser()).isTeacherOfCourseUnit(courseUnit.getId(),true))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
}
}
}
/impl/src/java/pt/estgp/estgweb/filters/filters/IsStudentInCourseUnitUsersClassBean.java
New file
0,0 → 1,48
package pt.estgp.estgweb.filters.filters;
 
import pt.estgp.estgweb.filters.chains.LoadControlFilter;
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.ReflectionBean;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
import org.apache.log4j.Logger;
 
public class IsStudentInCourseUnitUsersClassBean extends LoadControlFilter
{
private static final Logger logger = Logger.getLogger(IsStudentInCourseUnitUsersClassBean.class);
 
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
 
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY);
 
if(userSession.getUser() == null)
{
logger.info("try access restricted area:" + request.getRequester());
throw new NeedAuthenticationException();
}
 
if(userSession.getUser().isSuperuser())
return;
 
Object bean = LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1),filterParameters,request.getServiceParameters());
 
ReflectionBean rbean = new ReflectionBean("o."+(String) filterParameters.getParameter(2));
CourseUnit courseUnit = (CourseUnit) rbean.invoke(bean);
 
 
if(!((UserImpl)userSession.getUser()).isStudentfCourseUnit(courseUnit.getId(),true))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
}
}
}
/impl/src/java/pt/estgp/estgweb/filters/filters/OwnerUsersClassBean.java
38,7 → 38,7
IOwned iOwned = (IOwned) rbean.invoke(bean);
 
 
if(!iOwned.isOwnedBy(userSession.getUser()))
if(!iOwned.isOwnedBy(userSession.getUser(),true))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
/impl/src/java/pt/estgp/estgweb/filters/filters/CanAddContentClass.java
34,7 → 34,7
 
IAddContents iAddContents = (IAddContents) LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1),filterParameters,request.getServiceParameters());
 
if(!iAddContents.canAddContent(userSession.getUser()))
if(!iAddContents.canAddContent(userSession.getUser(),true))
{
logger.warn(userSession.getUser().getUsername() + ": try access restricted area");
throw new AccessDeniedOperationException("fail.owner");
/impl/src/java/pt/estgp/estgweb/web/TmpStream.java
37,6 → 37,7
String mimeType = MimeTypeGuesser.getInstance().guessMimeType(f);
response.setContentType(mimeType);
response.setContentLength((int) f.length());
response.setHeader("Content-disposition","filename=" + path);
logger.info("Opening tmp file:" + f.getAbsolutePath() + " with mime-type:" + mimeType);
InputStream stream = new FileInputStream(new File(Globals.TMP_DIR + path));
byte[] buf = new byte[1024];
/impl/src/java/pt/estgp/estgweb/web/tags/IsNotAdminTag.java
27,7 → 27,7
public boolean go()
{
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(Globals.USER_SESSION_KEY);
return !(userSession != null && userSession.getUser() != null && (((UserImpl) userSession.getUser()).isSuperuserOrAdmin()));
return !(userSession != null && userSession.getUser() != null && ((userSession.getUser()).isSuperuserOrAdmin()));
}
 
public int doEndTag() throws JspException
/impl/src/java/pt/estgp/estgweb/web/tags/CanManageTag.java
78,10 → 78,10
{
boolean valid = Boolean.parseBoolean(this.valid);
IValid iValid = (IValid) owned;
return owned != null && userSession.getUser() != null && (iValid.isValid() == valid && owned.isOwnedBy(userSession.getUser()) || (userSession.getUser()).isSuperuserOrAdmin());
return owned != null && userSession.getUser() != null && (iValid.isValid() == valid && owned.isOwnedBy(userSession.getUser(),false) || (userSession.getUser()).isSuperuserOrAdmin());
}
else
return owned != null && userSession.getUser() != null && (owned.isOwnedBy(userSession.getUser()) || (userSession.getUser()).isSuperuserOrAdmin());
return owned != null && userSession.getUser() != null && (owned.isOwnedBy(userSession.getUser(),false) || (userSession.getUser()).isSuperuserOrAdmin());
 
}
 
/impl/src/java/pt/estgp/estgweb/web/tags/IsTeacherOfCourseUnitTag.java
New file
0,0 → 1,76
package pt.estgp.estgweb.web.tags;
 
import org.apache.log4j.Logger;
 
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.UserImpl;
import pt.estgp.estgweb.Globals;
 
public class IsTeacherOfCourseUnitTag extends BodyTagSupport
{
 
private static final Logger logger = Logger.getLogger(IsTeacherOfCourseUnitTag.class);
 
 
private long courseUnitId;
 
public long getCourseUnitId()
{
return courseUnitId;
}
 
public void setCourseUnitId(long courseUnitId)
{
this.courseUnitId = courseUnitId;
}
 
/**
*
* @return
* @throws javax.servlet.jsp.JspException
*/
public int doStartTag() throws JspException
{
if (go())
{
return EVAL_BODY_BUFFERED;
}
else
return SKIP_BODY;
 
}
 
public boolean go()
{
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(Globals.USER_SESSION_KEY);
return userSession != null && userSession.getUser() != null && ((UserImpl)((userSession.getUser()))).isTeacherOfCourseUnit(courseUnitId);
}
 
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/IsStudentOfCourseUnitTag.java
New file
0,0 → 1,76
package pt.estgp.estgweb.web.tags;
 
import org.apache.log4j.Logger;
 
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.UserImpl;
import pt.estgp.estgweb.Globals;
 
public class IsStudentOfCourseUnitTag extends BodyTagSupport
{
 
private static final Logger logger = Logger.getLogger(IsStudentOfCourseUnitTag.class);
 
 
private long courseUnitId;
 
public long getCourseUnitId()
{
return courseUnitId;
}
 
public void setCourseUnitId(long courseUnitId)
{
this.courseUnitId = courseUnitId;
}
 
/**
*
* @return
* @throws javax.servlet.jsp.JspException
*/
public int doStartTag() throws JspException
{
if (go())
{
return EVAL_BODY_BUFFERED;
}
else
return SKIP_BODY;
 
}
 
public boolean go()
{
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(Globals.USER_SESSION_KEY);
return userSession != null && userSession.getUser() != null && ((UserImpl)((userSession.getUser()))).isStudentfCourseUnit(courseUnitId);
}
 
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/HasRoleTag.java
42,7 → 42,17
public boolean go()
{
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(Globals.USER_SESSION_KEY);
return userSession != null && userSession.getUser() != null && userSession.getUser().hasRole(role);
 
if(userSession != null && userSession.getUser() != null)
{
String[] roles = role.split(",");
for(String role: roles)
{
if(userSession.getUser().hasRole(role))
return true;
}
}
return false;
}
 
public int doEndTag() throws JspException
/impl/src/java/pt/estgp/estgweb/web/tags/CantManageTag.java
84,10 → 84,10
{
boolean valid = Boolean.parseBoolean(this.valid);
IValid iValid = (IValid) owned;
return owned != null && userSession.getUser() != null && (iValid.isValid() == valid && owned.isOwnedBy(userSession.getUser()) || (userSession.getUser()).isSuperuserOrAdmin());
return owned != null && userSession.getUser() != null && (iValid.isValid() == valid && owned.isOwnedBy(userSession.getUser(),false) || (userSession.getUser()).isSuperuserOrAdmin());
}
else
return owned != null && userSession.getUser() != null && (owned.isOwnedBy(userSession.getUser()) || (userSession.getUser()).isSuperuserOrAdmin());
return owned != null && userSession.getUser() != null && (owned.isOwnedBy(userSession.getUser(),false) || (userSession.getUser()).isSuperuserOrAdmin());
 
}
 
/impl/src/java/pt/estgp/estgweb/web/utils/RequestUtils.java
22,6 → 22,8
{
public static String getRequester(HttpServletRequest request, HttpServletResponse response) throws NoCookiesException
{
if(request == null)
return "unknown";
if (request.getCookies() == null || request.getCookies().length == 0)
{
Cookie cookie = new Cookie(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE, request.getSession().getId());
/impl/src/java/pt/estgp/estgweb/web/form/courses/CourseForm.java
New file
0,0 → 1,53
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 java.util.List;
 
import org.apache.struts.upload.FormFile;
 
/**
* @author Jorge Machado
* @date 25/Jun/2008
* @see pt.estgp.estgweb.web.form.courses
*/
public class CourseForm extends TeachersForm
{
private CourseView courseView;
private FormFile studiesPlan;
 
 
public CourseForm()
{
courseView = new CourseView();
}
 
public CourseView getCourseView()
{
return courseView;
}
 
public void setCourseView(CourseView courseView)
{
this.courseView = courseView;
}
 
public List<String> getImportYears()
{
return DatesUtils.getImportYears(5);
}
 
 
public FormFile getStudiesPlan()
{
return studiesPlan;
}
 
public void setStudiesPlan(FormFile studiesPlan)
{
this.studiesPlan = studiesPlan;
}
}
/impl/src/java/pt/estgp/estgweb/web/form/courseunits/CourseUnitsForm.java
4,10 → 4,13
import org.apache.struts.action.ActionErrors;
import org.apache.struts.upload.FormFile;
import pt.estgp.estgweb.web.form.AddRolesForm;
import pt.estgp.estgweb.web.form.ApplicationForm;
import pt.estgp.estgweb.web.form.commons.TeachersForm;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.CourseUnitAssignementView;
import pt.estgp.estgweb.domain.views.UserView;
import pt.estgp.estgweb.domain.views.CourseUnitDeliverableView;
import pt.estgp.estgweb.domain.TeacherImpl;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.utils.DatesUtils;
20,6 → 23,8
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
 
/**
* @author Jorge Machado
27,30 → 32,49
* @time 14:28:59
* @see pt.estgp.estgweb.web.form.blogs
*/
public class CourseUnitsForm extends AddRolesForm
public class CourseUnitsForm extends TeachersForm
{
private static final Logger logger = Logger.getLogger(CourseUnitsForm.class);
 
CourseUnitView courseUnitView = new CourseUnitView();
 
//aux
long courseId;
long id;
long teacherId;
int studentCode;
boolean showNewWorkForm = false;
FormFile uploadFile;
 
 
//courseunit
FormFile programFile;
CourseUnitAssignementView courseUnitAssignementView = new CourseUnitAssignementView();
 
//search
String textToSearch;
String searchType = SearchTypeEnum.AllWords.getMessageKey();
int page;
 
//lists
List<UserView> teachers = null;
 
public CourseUnitsForm(boolean initDeliverables)
{
if(initDeliverables)
initDeliverables();
}
public CourseUnitsForm()
{
initDeliverables();
}
 
public void initDeliverables()
{
courseUnitAssignementView.setDeliverables(new ArrayList<CourseUnitDeliverableView>());
for(int i = 0; i < 200; i++)
{
courseUnitAssignementView.getDeliverables().add(new CourseUnitDeliverableView());
}
}
 
public CourseUnitView getCourseUnitView()
{
return courseUnitView;
77,6 → 101,16
}
 
 
public boolean isShowNewWorkForm()
{
return showNewWorkForm;
}
 
public void setShowNewWorkForm(boolean showNewWorkForm)
{
this.showNewWorkForm = showNewWorkForm;
}
 
public CourseUnitAssignementView getCourseUnitAssignementView()
{
return courseUnitAssignementView;
161,41 → 195,70
this.page = page;
}
 
public void initTeachers(HttpServletRequest request, HttpServletResponse response)
 
 
 
public FormFile getUploadFile()
{
if(teachers == null)
{
IServiceManager sm = null;
try
{
sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{Teacher.class};
teachers = (List<UserView>) sm.execute(RequestUtils.getRequester(request, response), "LoadUsers", args, names);
}
catch (Throwable e)
{
logger.error(e,e);
}
}
return uploadFile;
}
 
public List<UserView> getTeachers()
public void setUploadFile(FormFile uploadFile)
{
return teachers;
this.uploadFile = uploadFile;
}
 
public void setTeachers(List<UserView> teachers)
public ActionErrors validate(org.apache.struts.action.ActionMapping actionMapping, javax.servlet.http.HttpServletRequest httpServletRequest)
{
this.teachers = teachers;
ActionErrors errors = new ActionErrors();
 
return errors;
}
 
public ActionErrors validate(org.apache.struts.action.ActionMapping actionMapping, javax.servlet.http.HttpServletRequest httpServletRequest)
public ActionErrors validateCreateAssignement(org.apache.struts.action.ActionMapping actionMapping, javax.servlet.http.HttpServletRequest httpServletRequest)
{
ActionErrors errors = new ActionErrors();
if(courseUnitAssignementView.getDeliverDate() == null || courseUnitAssignementView.getDeliverDate().length() == 0)
{
addMessageWithKeys(errors,httpServletRequest,"errors.required","courseunit.assignement.deliver.date");
}
if(courseUnitAssignementView.getTitle() == null || courseUnitAssignementView.getTitle().trim().length() == 0)
{
addMessageWithKeys(errors,httpServletRequest,"errors.required","courseunit.title");
}
if(uploadFile != null && uploadFile.getFileSize() > 0 && !uploadFile.getFileName().endsWith(".zip"))
{
addMessage(errors,httpServletRequest,"errors.courseunit.assignement.file.type");
}
return errors;
}
 
public ActionErrors validateDeliverWork(org.apache.struts.action.ActionMapping actionMapping, javax.servlet.http.HttpServletRequest httpServletRequest)
{
ActionErrors errors = new ActionErrors();
if(uploadFile == null || uploadFile.getFileSize() == 0)
{
addMessage(errors,httpServletRequest,"errors.courseunit.assignement.deliver.file");
}
if(uploadFile != null && uploadFile.getFileName() !=null && !uploadFile.getFileName().endsWith(".zip"))
{
addMessage(errors,httpServletRequest,"errors.courseunit.assignement.deliver.zip");
}
return errors;
}
 
public void validateUpdateDeliverables()
{
Iterator<CourseUnitDeliverableView> iter = courseUnitAssignementView.getDeliverables().iterator();
while (iter.hasNext())
{
CourseUnitDeliverableView courseUnitDeliverableView = iter.next();
if(courseUnitDeliverableView.getId() <= 0)
{
iter.remove();
}
}
}
 
 
}
/impl/src/java/pt/estgp/estgweb/web/form/commons/TeachersForm.java
New file
0,0 → 1,74
package pt.estgp.estgweb.web.form.commons;
 
import pt.estgp.estgweb.web.form.ApplicationForm;
import pt.estgp.estgweb.web.form.courseunits.CourseUnitsForm;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.CourseUnitAssignementView;
import pt.estgp.estgweb.domain.views.UserView;
import pt.estgp.estgweb.domain.views.CourseUnitDeliverableView;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import org.apache.log4j.Logger;
import org.apache.struts.upload.FormFile;
import org.apache.struts.action.ActionErrors;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
 
/**
* @author Jorge Machado
* @date 2/Jun/2008
* @time 14:28:59
* @see pt.estgp.estgweb.web.form.blogs
*/
public class TeachersForm extends ApplicationForm
{
private static final Logger logger = Logger.getLogger(TeachersForm.class);
 
 
//lists
List<UserView> teachers = null;
 
 
public TeachersForm()
{
}
 
 
public void initTeachers(HttpServletRequest request, HttpServletResponse response)
{
if(teachers == null)
{
IServiceManager sm;
try
{
sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{Teacher.class};
teachers = (List<UserView>) sm.execute(RequestUtils.getRequester(request, response), "LoadUsers", args, names);
}
catch (Throwable e)
{
logger.error(e,e);
}
}
}
 
public List<UserView> getTeachers()
{
if(teachers == null)
{
initTeachers(null,null);
if(teachers == null)
teachers = new ArrayList<UserView>();
}
return teachers;
}
}
/impl/src/java/pt/estgp/estgweb/web/form/announcements/AnnouncementsForm.java
28,8 → 28,7
 
 
private AnnouncementView announcementView;
 
 
private String startDate;
private String expireDate;
private String urlProtocol;
206,15 → 205,15
if(httpServletRequest.getParameter("dispatch").equals("addRole") || httpServletRequest.getParameter("dispatch").equals("removeRole"))
return null;
ActionErrors errors = new ActionErrors();
if(url.contains("http://"))
if(url != null && url.contains("http://"))
addMessageWithKeys(errors,httpServletRequest,"errors.notrequired","announcement.protocol.error.http","announcement.linkAnnouncement");
if(url.contains("https://"))
if(url != null && url.contains("https://"))
addMessageWithKeys(errors,httpServletRequest,"errors.notrequired","announcement.protocol.error.https","announcement.linkAnnouncement");
if(url.contains("ftp://"))
if(url != null && url.contains("ftp://"))
addMessageWithKeys(errors,httpServletRequest,"errors.notrequired","announcement.protocol.error.ftp","announcement.linkAnnouncement");
if(bigImage.getFileSize() != 0 && bigImage.getFileSize()>(Globals.MAX_BIGMAGE_FILE_SIZE_KBYTES*1024))
if(bigImage != null && bigImage.getFileSize() != 0 && bigImage.getFileSize()>(Globals.MAX_BIGMAGE_FILE_SIZE_KBYTES*1024))
addMessage(errors,httpServletRequest,"announcement.exceed.bigmage.max.size");
if(smallImage.getFileSize() != 0 && smallImage.getFileSize()>(Globals.MAX_SMALLIMAGE_FILE_SIZE_KBYTES*1024))
if(smallImage != null && smallImage.getFileSize() != 0 && smallImage.getFileSize()>(Globals.MAX_SMALLIMAGE_FILE_SIZE_KBYTES*1024))
addMessage(errors,httpServletRequest,"announcement.exceed.smallmage.max.size");
if(announcementView.getTitle() == null || announcementView.getTitle().trim().length() == 0)
addMessageWithKeys(errors,httpServletRequest,"errors.required","announcement.title");
/impl/src/java/pt/estgp/estgweb/web/controllers/courses/CoursesController.java
New file
0,0 → 1,173
package pt.estgp.estgweb.web.controllers.courses;
 
import pt.estgp.estgweb.web.controllers.courseunits.CourseUnitsController;
import pt.estgp.estgweb.web.controllers.courseunits.CourseUnitsAdminController;
import pt.estgp.estgweb.web.form.courseunits.CourseUnitsForm;
import pt.estgp.estgweb.web.form.courses.CourseForm;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.CourseView;
import pt.estgp.estgweb.filters.exceptions.NotFoundException;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.services.common.ISearchResults;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.ServiceManagerException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.*;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
 
/**
* @author Jorge Machado
* @author Fabio Velez
* @date 26/Fev/2008
* @time 18:01:54
* @see pt.estgp.estgweb.web
*/
public class CoursesController extends CourseUnitsController
{
 
private static final Logger logger = Logger.getLogger(CoursesController.class);
 
 
public ActionForward startNew(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
CourseForm cF = (CourseForm) form;
CourseView cV = cF.getCourseView();
request.setAttribute("CourseView",cV);
cF.setCourseView(cV);
return mapping.findForward("submit");
}
 
private void load(CourseForm cF, HttpServletRequest request, HttpServletResponse response)
throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
{
String code = cF.getCourseView().getCode();
long id = cF.getCourseView().getId();
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args;
String serviceName;
if(code != null)
{
args = new Object[]{code,true};
serviceName = "LoadCourseByCode";
}
else
{
args = new Object[]{id,true};
serviceName = "LoadCourse";
}
CourseView cV = (CourseView) sm.execute(RequestUtils.getRequester(request, response), serviceName, args, names);
request.setAttribute("CourseView",cV);
cF.setCourseView(cV);
}
 
public ActionForward load(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
load((CourseForm) form,request,response);
return mapping.findForward("load");
}
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 edit(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
load((CourseForm) form,request,response);
return mapping.findForward("submit");
}
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 submit(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
CourseForm cF = (CourseForm) form;
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"object"};
Object[] args;
 
if(cF.getStudiesPlan() == null || cF.getStudiesPlan().getFileSize() <= 0)
args = new Object[]{cF.getCourseView(),null,null,0,null};
else //ring name, int size, String contentType, String extensio
args = new Object[]{cF.getCourseView(),cF.getStudiesPlan().getInputStream(),cF.getStudiesPlan().getFileName(),cF.getStudiesPlan().getFileSize(),cF.getStudiesPlan().getContentType()};
 
long id = cF.getCourseView().getId();
CourseView cV = (CourseView) sm.execute(RequestUtils.getRequester(request, response), "SubmitCourse", args, names);
request.setAttribute("CourseView",cV);
cF.setCourseView(cV);
if(id > 0)
addMessage(request,"course.updated.success","" + cV.getCode());
else
addMessage(request,"course.created.success","" + cV.getCode());
return mapping.getInputForward();
}
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
30,6 → 30,36
private static final Logger logger = Logger.getLogger(CourseUnitsAdminController.class);
 
 
public ActionForward createIntranetFolders(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{};
String tmpFile = (String) sm.execute(RequestUtils.getRequester(request, response), "CreateCourseUnitDirPackage", 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,
ActionForm form,
HttpServletRequest request,
78,7 → 108,7
CourseUnitsForm cUF = (CourseUnitsForm) form;
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{cUF.getId(),true,true};
Object[] args = new Object[]{cUF.getId(),true,true,false};
 
CourseUnitView cV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "LoadCourseUnit", args, names);
request.setAttribute("CourseUnitView",cV);
118,6 → 148,8
Object[] args = new Object[]{teacherId,courseUnitId};
 
CourseUnitView cV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "AddTeacherCourseUnit", args, names);
if(cV.isNotFound())
addError(request,"error.courseunit.teacher.not.found");
request.setAttribute("CourseUnitView",cV);
cUF.setCourseUnitView(cV);
cUF.initTeachers(request,response);
155,6 → 187,8
Object[] args = new Object[]{studentCode,courseUnitId};
 
CourseUnitView cV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "AddStudentCourseUnit", args, names);
if(cV.isNotFound())
addError(request,"error.courseunit.student.not.found");
request.setAttribute("CourseUnitView",cV);
cUF.setCourseUnitView(cV);
cUF.initTeachers(request,response);
/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsAnnouncementsController.java
New file
0,0 → 1,96
package pt.estgp.estgweb.web.controllers.courseunits;
 
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController;
import pt.estgp.estgweb.web.controllers.announcements.AnnouncementsController;
import pt.estgp.estgweb.web.controllers.blogs.BlogsController;
import pt.estgp.estgweb.web.form.courseunits.CourseUnitsForm;
import pt.estgp.estgweb.web.form.blogs.BlogForm;
import pt.estgp.estgweb.web.form.announcements.AnnouncementsForm;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.CourseUnitAssignementView;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.domain.views.AnnouncementView;
import pt.estgp.estgweb.filters.exceptions.NotFoundException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.InvalidFilterException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.InvalidFilterExpressionException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.IncompatibleFilterException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterRetrieveException;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.ServiceManagerException;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.ExecutedFilterException;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.upload.FormFile;
import org.hibernate.ObjectNotFoundException;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
 
/**
* @author Jorge Machado
* @author Fabio Velez
* @date 26/Fev/2008
* @time 18:01:54
* @see pt.estgp.estgweb.web
*/
public class CourseUnitsAnnouncementsController extends AnnouncementsController
{
private static final Logger logger = Logger.getLogger(CourseUnitsAnnouncementsController.class);
 
private CourseUnitsController courseUnitsController = new CourseUnitsController();
 
public ActionForward save(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
ActionForward forward = super.save(mapping,form,request,response);
if(forward.getName().equals("success"))
{
AnnouncementsForm aF = (AnnouncementsForm) form;
CourseUnitsForm cUF = new CourseUnitsForm(false);
request.setAttribute("CourseUnitsForm",cUF);
cUF.setCourseUnitView(aF.getAnnouncementView().getCourseUnitView());
ActionForward forwardUnit = courseUnitsController.load(mapping,cUF,request,response);
if(forwardUnit == null) //load forward will be not found because mapping is from another action
return forward;
//on error will be found
return forwardUnit;
}
return forward;
}
 
public ActionForward delete(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
 
AnnouncementView announcementsView = super.load(request,response,new Long(request.getParameter("id")));
CourseUnitView courseUnitsView = announcementsView.getCourseUnitView();
ActionForward forward = super.delete(mapping,form,request,response);
if(forward.getName().equals("success"))
{
CourseUnitsForm cUF = new CourseUnitsForm(false);
request.setAttribute("CourseUnitsForm", cUF);
cUF.setCourseUnitView(courseUnitsView);
ActionForward forwardUnit = courseUnitsController.load(mapping,cUF,request,response);
if(forwardUnit.getName().equals("load")) //load forward will be not found because mapping is from another action
return forward;
//on error will be found
return forwardUnit;
}
return forward;
}
 
}
/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsController.java
4,12 → 4,18
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.upload.FormFile;
import org.hibernate.ObjectNotFoundException;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.CourseUnitAssignementView;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.filters.exceptions.NotFoundException;
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController;
import pt.estgp.estgweb.web.controllers.blogs.BlogsController;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.web.form.courseunits.CourseUnitsForm;
import pt.estgp.estgweb.web.form.blogs.BlogForm;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterRetrieveException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.IncompatibleFilterException;
37,21 → 43,21
{
private static final Logger logger = Logger.getLogger(CourseUnitsController.class);
 
private ActionForward loadCourseUnitAndForward(CourseUnitsForm cUF, long id, ActionMapping mapping, HttpServletRequest request, HttpServletResponse response)
private ActionForward loadCourseUnitAndForward(CourseUnitsForm cUF, long id, boolean initTeachers, boolean initStudents, ActionMapping mapping, HttpServletRequest request, HttpServletResponse response)
throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
{
CourseUnitView cV = loadCourseUnitView(id, mapping, request, response);
CourseUnitView cV = loadCourseUnitView(id,initTeachers,initStudents, mapping, request, response);
cUF.setCourseUnitView(cV);
request.setAttribute("CourseUnitView", cV);
return mapping.findForward("load");
}
 
private CourseUnitView loadCourseUnitView(long id, ActionMapping mapping, HttpServletRequest request, HttpServletResponse response)
private CourseUnitView loadCourseUnitView(long id, boolean initTeachers, boolean initStudents, ActionMapping mapping, HttpServletRequest request, HttpServletResponse response)
throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
{
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{id,false,false};
Object[] args = new Object[]{id,initTeachers,initStudents,false};
try
{
CourseUnitView cV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "LoadCourseUnit", args, names);
67,6 → 73,7
}
}
 
 
public ActionForward load(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
76,7 → 83,13
try
{
CourseUnitsForm cUF = (CourseUnitsForm) form;
return loadCourseUnitAndForward(cUF, Long.parseLong(request.getParameter("id")), mapping, request, response);
long id;
if(cUF.getCourseUnitView() != null && cUF.getCourseUnitView().getId() > 0)
id = cUF.getCourseUnitView().getId();
else
id = Long.parseLong(request.getParameter("id"));
 
return loadCourseUnitAndForward(cUF,id ,true,false, mapping, request, response);
}
catch (FilterChainFailedException e)
{
93,6 → 106,40
}
}
 
public ActionForward loadStudents(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
CourseUnitsForm cUF = (CourseUnitsForm) form;
long id;
if(request.getParameter("id")!=null)
id = Long.parseLong(request.getParameter("id"));
else
id = cUF.getCourseUnitView().getId();
CourseUnitView cV = loadCourseUnitView(id,false,true, mapping, request, response);
cUF.setCourseUnitView(cV);
request.setAttribute("CourseUnitView", cV);
return mapping.findForward("load.students");
}
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 loadWorks(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
102,7 → 149,7
try
{
CourseUnitsForm cUF = (CourseUnitsForm) form;
long id = Long.parseLong(request.getParameter("id"));
long id = cUF.getCourseUnitView().getId();
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{id};
139,23 → 186,37
 
 
public ActionForward createAssignement(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
CourseUnitsForm cUF = (CourseUnitsForm) form;
ActionErrors errors = cUF.validateCreateAssignement(mapping,request);
if(!errors.isEmpty())
{
saveErrors(request, errors);
cUF.setShowNewWorkForm(true);
return loadWorks(mapping,form,request,response);
}
long id = cUF.getCourseUnitView().getId();
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"object"};
Object[] args = new Object[]{cUF.getCourseUnitAssignementView(), id};
String[] names = new String[]{"object","serializable"};
Object[] args = new Object[]{cUF.getCourseUnitAssignementView(), id, cUF.getUploadFile().getInputStream(),cUF.getUploadFile().getFileName(),cUF.getUploadFile().getFileSize(),cUF.getUploadFile().getContentType()};
try
{
CourseUnitView cV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "CreateCourseUnitWork", args, names);
String service;
if(cUF.getCourseUnitAssignementView().getId() <= 0)
service = "CreateCourseUnitWork";
else
service = "EditCourseUnitWork";
 
CourseUnitView cV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), service, args, names);
cUF.setCourseUnitView(cV);
request.setAttribute("CourseUnitView", cV);
cUF.setCourseUnitAssignementView(new CourseUnitAssignementView());
return mapping.findForward("load.works");
}
catch (ExecutedFilterException e)
182,6 → 243,147
}
}
 
public ActionForward validateInvalidateAssignement(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
CourseUnitsForm cUF = (CourseUnitsForm) form;
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{cUF.getCourseUnitAssignementView().getId()};
try
{
CourseUnitView cV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "ValidateInvalidateCourseUnitWork", args, names);
cUF.setCourseUnitView(cV);
request.setAttribute("CourseUnitView", cV);
cUF.setCourseUnitAssignementView(new CourseUnitAssignementView());
return mapping.findForward("load.works");
}
catch (ExecutedFilterException e)
{
if (e.getCause() instanceof ObjectNotFoundException)
{
throw new NotFoundException(e.getCause().toString());
}
throw e;
}
}
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 deleteAssignement(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
CourseUnitsForm cUF = (CourseUnitsForm) form;
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{cUF.getCourseUnitAssignementView().getId()};
try
{
CourseUnitView cV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "DeleteCourseUnitWork", args, names);
cUF.setCourseUnitView(cV);
request.setAttribute("CourseUnitView", cV);
cUF.setCourseUnitAssignementView(new CourseUnitAssignementView());
return mapping.findForward("load.works");
}
catch (ExecutedFilterException e)
{
if (e.getCause() instanceof ObjectNotFoundException)
{
throw new NotFoundException(e.getCause().toString());
}
throw e;
}
}
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 editAssignement(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
 
try
{
CourseUnitsForm cUF = (CourseUnitsForm) form;
long id = cUF.getCourseUnitView().getId();
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{id};
try
{
CourseUnitView cV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "LoadCourseUnitWorks", args, names);
cUF.setCourseUnitView(cV);
cUF.setShowNewWorkForm(true);
for(CourseUnitAssignementView aV: cV.getCourseUnitAssignements())
{
if(cUF.getCourseUnitAssignementView().getId() == aV.getId())
{
cUF.setCourseUnitAssignementView(aV);
}
}
request.setAttribute("CourseUnitView", cV);
return mapping.findForward("load.works");
}
catch (ExecutedFilterException e)
{
if (e.getCause() instanceof ObjectNotFoundException)
{
throw new NotFoundException(e.getCause().toString());
}
throw e;
}
}
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 update(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
195,7 → 397,7
String[] names = new String[]{"object"};
Object[] args;
 
if(cUF.getProgramFile() == null)
if(cUF.getProgramFile() == null || cUF.getProgramFile().getFileSize() <= 0)
args = new Object[]{cUF.getCourseUnitView(),null,null,0,null};
else //ring name, int size, String contentType, String extensio
args = new Object[]{cUF.getCourseUnitView(),cUF.getProgramFile().getInputStream(),cUF.getProgramFile().getFileName(),cUF.getProgramFile().getFileSize(),cUF.getProgramFile().getContentType()};
221,5 → 423,147
}
 
 
public ActionForward deliverWork(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try
{
CourseUnitsForm cUF = (CourseUnitsForm) form;
ActionErrors errors = cUF.validateDeliverWork(mapping, request);
if (!errors.isEmpty())
{
saveErrors(request, errors);
return loadWorks(mapping,form,request,response);
}
 
IServiceManager sm = ServiceManager.getInstance();
FormFile work = cUF.getUploadFile();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{cUF.getCourseUnitAssignementView().getId(),work.getInputStream(),work.getFileName(),work.getContentType(),work.getFileSize()};
CourseUnitView cV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "DeliverCourseUnitWork", args, names);
cUF.setCourseUnitView(cV);
request.setAttribute("CourseUnitView", cV);
cUF.setCourseUnitAssignementView(new CourseUnitAssignementView());
addMessage(request,"courseunit.assignement.deliver.sucess",work.getFileName());
return mapping.findForward("load.works");
 
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e, e);
throw e;
}
}
 
public ActionForward updateDeliverables(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try
{
CourseUnitsForm cUF = (CourseUnitsForm) form;
cUF.validateUpdateDeliverables();
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable","deliverables"};
Object[] args = new Object[]{cUF.getCourseUnitView().getId(),cUF.getCourseUnitAssignementView().getId(), cUF.getCourseUnitAssignementView().getDeliverables()};
CourseUnitAssignementView cAV = (CourseUnitAssignementView) sm.execute(RequestUtils.getRequester(request, response), "UpdateCourseUnitDeliverables", args, names);
cUF.setCourseUnitView(cAV.getCourseUnitView());
cUF.setCourseUnitAssignementView(cAV);
request.setAttribute("CourseUnitView", cAV.getCourseUnitView());
request.setAttribute("CourseUnitAssignementView", cAV);
return mapping.findForward("load.assignement");
 
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e, e);
throw e;
}
}
 
 
public ActionForward loadAssignement(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try
{
CourseUnitsForm cUF = (CourseUnitsForm) form;
 
IServiceManager sm = ServiceManager.getInstance();
FormFile work = cUF.getUploadFile();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{cUF.getCourseUnitAssignementView().getId()};
CourseUnitAssignementView cAV = (CourseUnitAssignementView) sm.execute(RequestUtils.getRequester(request, response), "LoadCourseUnitWorkAssignement", args, names);
cUF.setCourseUnitView(cAV.getCourseUnitView());
cUF.setCourseUnitAssignementView(cAV);
request.setAttribute("CourseUnitView", cAV.getCourseUnitView());
request.setAttribute("CourseUnitAssignementView", cAV);
return mapping.findForward("load.assignement");
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e, e);
throw e;
}
}
 
public ActionForward startBlog(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try
{
CourseUnitsForm cUF = (CourseUnitsForm) form;
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{cUF.getCourseUnitView().getId()};
CourseUnitView cUV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "StartCourseUnitBlog", args, names);
cUF.setCourseUnitView(cUV);
request.setAttribute("CourseUnitView", cUV);
BlogForm bForm = new BlogForm();
bForm.setBlogView(new BlogView());
bForm.getBlogView().setId(cUV.getBlog().getId());
ActionForward forward = new BlogsController().load(mapping,bForm,request,response);
if(forward.getName().equals("load"))
return mapping.findForward("load.blog");
else
return forward;
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (Throwable e)
{
logger.error(e, e);
throw e;
}
}
 
 
 
 
}
/impl/src/java/pt/estgp/estgweb/web/controllers/blogs/BlogServlet.java
40,7 → 40,7
try
{
id = Long.parseLong(identifier.trim());
request.getRequestDispatcher("/startLoadBlog.do?id=" + id).forward(request, response);
request.getRequestDispatcher("/startLoadBlog.do?blogView.id=" + id).forward(request, response);
}
catch (NumberFormatException e)
{
/impl/src/java/pt/estgp/estgweb/web/controllers/blogs/BlogsController.java
61,6 → 61,7
return mapping.findForward("load");
}
 
 
/**
* Load and forward a blog given a name
* @param name
173,6 → 174,8
if (!errors.isEmpty())
{
saveErrors(request, errors);
BlogView bV = loadBlogView(blogForm.getBlogView().getId(), mapping, request, response);
request.setAttribute("BlogView", bV);
return mapping.findForward("submit");
}
 
219,7 → 222,13
{
try
{
return loadBlogAndForward(Long.parseLong(request.getParameter("id")), mapping, request, response);
BlogForm bf = (BlogForm) form;
long id;
if(request.getParameter("id") !=null)
id = Long.parseLong(request.getParameter("id"));
else
id = bf.getBlogView().getId();
return loadBlogAndForward(id, mapping, request, response);
}
catch (FilterChainFailedException e)
{
391,6 → 400,7
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{new Long(request.getParameter("id"))};
BlogView bV = (BlogView) sm.execute(RequestUtils.getRequester(request, response), "LoadEditBlog", args, names);
request.setAttribute("BlogView", bV);
BlogForm blogForm = (BlogForm) form;
blogForm.setBlogView(bV);
blogForm.setSelectedRoles(bV.getTargetRoles());
445,9 → 455,9
}
 
public ActionForward validatePost(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
try
/impl/src/java/pt/estgp/estgweb/web/controllers/announcements/AnnouncementsController.java
18,6 → 18,8
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.ServiceManagerException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.*;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
52,7 → 54,7
AnnouncementsForm announcementForm = (AnnouncementsForm) form;
AnnouncementView view = announcementForm.getAnnouncementView();
String finalUrl = "";
if (!announcementForm.getUrl().equals(""))
if (announcementForm.getUrl() != null && !announcementForm.getUrl().equals(""))
{
finalUrl = announcementForm.getUrlProtocol() + announcementForm.getUrl();
view.setUrl(finalUrl);
62,13 → 64,13
view.setUrl(null);
}
 
if (announcementForm.getBigImage().getFileSize() != 0)
if (announcementForm.getBigImage() != null && announcementForm.getBigImage().getFileSize() != 0)
{
FormFile image = announcementForm.getBigImage();
i = DomainUtils.getNewImage(image,view.getTitle());
FormFile image = announcementForm.getBigImage();
i = DomainUtils.getNewImage(image,view.getTitle());
}
 
if (announcementForm.getSmallImage().getFileSize() != 0)
if (announcementForm.getSmallImage() != null && announcementForm.getSmallImage().getFileSize() != 0)
{
FormFile smallImage = announcementForm.getSmallImage();
i2 = DomainUtils.getNewImage(smallImage,view.getTitle());
87,7 → 89,7
else
aV = (AnnouncementView) sm.execute(RequestUtils.getRequester(request, response), "EditAnnouncement", args, names);
 
 
announcementForm.setAnnouncementView(aV);
String user = "";
String fromAction = "";
if(request.getParameter("from")!=null && request.getParameter("from").length() > 0)
214,6 → 216,15
}
}
 
protected AnnouncementView load(HttpServletRequest request, HttpServletResponse response, long id)
throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException
{
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{id};
return (AnnouncementView) sm.execute(RequestUtils.getRequester(request, response), "LoadAnnouncementView", args, names);
}
 
public ActionForward load(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
223,10 → 234,7
try
{
String id = request.getParameter("id");
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{new Long(id)};
AnnouncementView announcementView = (AnnouncementView) sm.execute(RequestUtils.getRequester(request, response), "LoadAnnouncementView", args, names);
AnnouncementView announcementView = load(request,response,Long.parseLong(id));
request.setAttribute("Announcement", announcementView);
return mapping.findForward("load");
}
/impl/src/doc/projecto.eap.xml
File deleted
/impl/src/doc/intranetresources/intranetpastas.zip
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/listagemDosPortais.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/planoTrabalho.xls
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/impl/src/hbm/pt/estgp/estgweb/domain/GenericUser.hbm.xml
59,7 → 59,7
<meta attribute="scope-class">public abstract</meta>
<property name="sigesCode" type="int"/>
<property name="userNameNetpa" type="string"/>
<set name="subscribedUnits" lazy="true">
<set name="subscribedUnits" lazy="true" order-by="courseUnitId">
<key column="studentId"/>
<many-to-many class="pt.estgp.estgweb.domain.CourseUnit" column="courseUnitId"/>
</set>
77,6 → 77,14
<key column="teacherId"/>
<many-to-many class="pt.estgp.estgweb.domain.CourseUnit" column="courseUnitId"/>
</set>
<set name="coordinatorCourses" order-by="name asc" lazy="true">
<key column="coordinator"/>
<one-to-many class="pt.estgp.estgweb.domain.Course"/>
</set>
<set name="directorCourses" order-by="name asc" lazy="true">
<key column="director"/>
<one-to-many class="pt.estgp.estgweb.domain.Course"/>
</set>
<subclass name="pt.estgp.estgweb.domain.TeacherImpl" discriminator-value="TeacherImpl"/>
</subclass>
</subclass>
/impl/src/hbm/pt/estgp/estgweb/domain/Blog.hbm.xml
15,6 → 15,7
<property name="saveDate" type="timestamp"/>
<property name="name" type="string" unique="true" index="nameIndex"/>
<property name="title" type="string"/>
<property name="type" type="string"/>
<property name="description" type="text"/>
<property name="targetRoles" type="string"/>
<property name="internal" type="boolean"/>
31,7 → 32,7
<meta attribute="extends">pt.estgp.estgweb.domain.BlogImpl</meta>
<meta attribute="scope-class">public abstract</meta>
<property name="courseUnitInternal" type="boolean" />
<many-to-one name="courseUnit" class="pt.estgp.estgweb.domain.CourseUnit" lazy="proxy" outer-join="false"/>
<many-to-one name="courseUnit" class="pt.estgp.estgweb.domain.CourseUnit" lazy="proxy" outer-join="true"/>
<subclass name="pt.estgp.estgweb.domain.CourseUnitBlogImpl" discriminator-value="CourseUnitBlogImpl"/>
</subclass>
</subclass>
/impl/src/hbm/pt/estgp/estgweb/domain/Course.hbm.xml
21,7 → 21,9
<property name="externalSiteServer" type="string"/>
<property name="externalSitePath" type="string"/>
<property name="degree" type="string"/>
<many-to-one name="coordinator" class="pt.estgp.estgweb.domain.User" outer-join="false" lazy="proxy"/>
<property name="studiesPlan" type="string" index="studiesPlanIndex"/>
<many-to-one name="director" class="pt.estgp.estgweb.domain.Teacher" outer-join="false" lazy="proxy"/>
<many-to-one name="coordinator" class="pt.estgp.estgweb.domain.Teacher" outer-join="false" lazy="proxy"/>
<set name="users" order-by="user.name asc" lazy="true">
<key column="course_id"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUserAssociation"/>
/impl/src/hbm/pt/estgp/estgweb/domain/CourseUnit.hbm.xml
21,17 → 21,17
<property name="courseYear" type="string"/>
<property name="importYear" type="string" index="importYearIndex"/>
<property name="institutionCode" type="string" />
<property name="pathIntranet" type="string" />
<property name="normalizedName" type="string" />
<property name="objectives" type="text"/>
<property name="programStreamId" type="string"/>
 
<property name="status" type="boolean" />
<set name="blogs" cascade="delete" lazy="true" order-by="name desc">
<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"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUnitBlog" />
</set>
<many-to-one name="course" class="pt.estgp.estgweb.domain.Course" lazy="false" outer-join="true"/>
<set name="teachers" lazy="true" table="teachedunits">
<set name="teachers" lazy="true" table="teachedUnits">
<key column="courseUnitId"/>
<many-to-many class="pt.estgp.estgweb.domain.TeacherImpl" column="teacherId"/>
</set>
47,7 → 47,7
<key column="courseUnit"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUnitQuestion" />
</set>
<set name="assignements" cascade="delete" lazy="true" order-by="saveDate desc">
<set name="assignements" cascade="delete" lazy="true" order-by="deliverDate desc">
<key column="courseUnit"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUnitAssignement"/>
</set>
84,8 → 84,13
<property name="lateDelivers" type="boolean"/>
<property name="title" type="string"/>
<property name="description" type="text"/>
<property name="repositoryStream" type="string" index="repositoryStreamIndex"/>
<property name="status" type="boolean"/>
<many-to-one name="courseUnit" class="pt.estgp.estgweb.domain.CourseUnit" lazy="false" outer-join="true"/>
<set name="deliverables" cascade="delete" lazy="true" order-by="deliverDate asc">
<key column="courseUnitAssignement"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUnitDeliverable"/>
</set>
<subclass name="pt.estgp.estgweb.domain.CourseUnitAssignementImpl" discriminator-value="CourseUnitAssignementImpl"/>
</class>
 
98,7 → 103,10
<discriminator column="discrimitator"/>
<timestamp name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="deliverableFilePath" type="string"/>
<property name="deliverDate" type="timestamp"/>
<property name="grade" type="string"/>
<property name="obs" type="text"/>
<property name="deliverableRepositoryStream" type="string" index="deliverableRepositoryStreamIndex"/>
<many-to-one name="courseUnitAssignement" class="pt.estgp.estgweb.domain.CourseUnitAssignement" lazy="false" outer-join="true"/>
<many-to-one name="student" class="pt.estgp.estgweb.domain.Student" lazy="false" outer-join="true"/>
<subclass name="pt.estgp.estgweb.domain.CourseUnitDeliverableImpl" discriminator-value="CourseUnitDeliverableImpl"/>
/impl/src/web/imgs/closedboxNeg.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/openedboxNeg.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/todo.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/imgs/todoMini.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/courses/course.jsp
New file
0,0 → 1,134
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<jsp:useBean id="CourseView" type="pt.estgp.estgweb.domain.views.CourseView" scope="request"/>
<html:form action="/user/courseControllerFromServiceZone" enctype="multipart/form-data">
<input type="hidden" name="dispatch" value="submit"/>
<html:hidden property="courseView.id"/>
<table class="form">
<tr>
<th>
<bean:message key="course.code"/>
</th>
<td>
<html:text property="courseView.code"/>
</td>
</tr>
<tr>
<th>
<bean:message key="name"/>
</th>
<td>
<html:text property="courseView.name"/>
</td>
</tr>
<tr>
<th>
<bean:message key="course.degree"/>
</th>
<td>
<html:select property="courseView.degree">
<html:option value="B">Bacharlato</html:option>
<html:option value="L">Lincenciatura</html:option>
<html:option value="M">Mestrado</html:option>
<html:option value="P">Pós Graduação</html:option>
</html:select>
* SIGES: <bean:write name="CourseForm" property="courseView.degree"/> - Confirmar Mestrados e Pos graduacoes e informar equipa de desenvolvimento
</td>
</tr>
<tr>
<th>
<bean:message key="course.importYear"/>
</th>
<td>
<html:select property="courseView.importYear">
<logic:iterate id="item" name="CourseForm" property="importYears">
<html:option value="${item}">${item}</html:option>
</logic:iterate>
</html:select>
</td>
</tr>
<tr>
<th>
<bean:message key="course.institutionalCode"/>
</th>
<td>
<html:text property="courseView.institutionalCode"/>
</td>
</tr>
<tr>
<th>
<bean:message key="course.description"/>
</th>
<td>
<html:textarea property="courseView.description"/>
</td>
</tr>
<tr>
<th>
<bean:message key="course.coordinator"/>
</th>
<td>
<html:select property="courseView.coordinator.id">
<html:option value="0">
<bean:message key="none"/>
</html:option>
<logic:present name="CourseForm" property="teachers">
<logic:iterate id="teacher" name="CourseForm" property="teachers" type="pt.estgp.estgweb.domain.views.UserView">
<html:option value="${teacher.id}">
(${teacher.code}) ${teacher.name}
</html:option>
</logic:iterate>
</logic:present>
</html:select>
</td>
</tr>
<tr>
<th>
<bean:message key="course.director"/>
</th>
<td>
<html:select property="courseView.director.id">
<html:option value="0">
<bean:message key="none"/>
</html:option>
<logic:present name="CourseForm" property="teachers">
<logic:iterate id="teacher" name="CourseForm" property="teachers" type="pt.estgp.estgweb.domain.views.UserView">
<html:option value="${teacher.id}">
(${teacher.code}) ${teacher.name}
</html:option>
</logic:iterate>
</logic:present>
</html:select>
</td>
</tr>
<tr>
<th>
<bean:message key="course.studies.plan"/>
</th>
<td>
<html:file property="studiesPlan"/>
<logic:present name="CourseView" property="studiesPlan">
<a href="<%=request.getContextPath()%>/repositoryStream/${CourseView.studiesPlanStreamId}"><bean:message key="course.studies.plan"/></a> (${CourseView.studiesPlanSizeKb} Kb - ${CourseView.studiesPlanDate})
</logic:present>
<logic:notPresent name="CourseView" property="studiesPlan">
<bean:message key="course.studies.plan.not.available"/>
</logic:notPresent>
</td>
</tr>
<tr class="buttons">
<td colspan="2">
<input type="button"
onclick="set(this.form,'submit');this.form.submit()"
value="<bean:message key="confirm"/>"/>
</td>
</tr>
</table>
 
</html:form>
/impl/src/web/admin/courseunits/courseunit.jsp
1,3 → 1,8
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %>
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
<%@ page import="pt.estgp.estgweb.domain.views.CourseView" %>
<%@ page import="java.util.List" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
6,126 → 11,146
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{};
List<CourseView> courseViews = (List<CourseView>) sm.execute(RequestUtils.getRequester(request, response), "LoadCourses", args, names);
request.setAttribute("Courses", courseViews);
%>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
 
<html:errors/>
<jomm:messages/>
<html:form styleClass="form" action="/user/courseUnitControllerAdminFromServiceZone" enctype="multipart/form-data">
<input type="hidden" name="dispatch" value="createOrUpdateAdmin"/>
<html:hidden property="courseUnitView.id"/>
<html:hidden property="id"/>
<table>
<tr>
<th>
<bean:message key="courseunit.name"/>
</th>
<td>
<html:text styleClass="text" property="courseUnitView.name"/>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.code"/>
</th>
<td>
<html:text styleClass="text" property="courseUnitView.code"/>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.semestre"/>
</th>
<td>
<html:select property="courseUnitView.semestre">
<html:option value="S1">S1</html:option>
<html:option value="S2">S2</html:option>
</html:select>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.importYear"/>
</th>
<td>
<html:select property="courseUnitView.importYear">
<logic:iterate id="item" name="CourseUnitsForm" property="importYears">
<html:option value="${item}">${item}</html:option>
</logic:iterate>
</html:select>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.teachers"/>
</th>
<td>
<html:select property="teacherId">
<logic:present name="CourseUnitsForm" property="teachers">
<logic:iterate id="teacher" name="CourseUnitsForm" property="teachers" type="pt.estgp.estgweb.domain.views.UserView">
<jomm:option itemName="teacher" itemProperty="id" comparableObjectName="CourseUnitsForm"
comparableObjectProperty="teacherId">
(${teacher.code}) ${teacher.name}
</jomm:option>
</logic:iterate>
<input type="button" value="<bean:message key="add"/>"
onclick="set(this.form,'addTeacher');this.form.submit();">
</logic:present>
</html:select>
<logic:greaterThan name="CourseUnitView" property="teachersSize" value="0">
<table class="dataTable removeButton">
<logic:iterate id="userView" name="CourseUnitView" property="teachers" type="pt.estgp.estgweb.domain.views.UserView">
<tr>
<th>
${userView.code}
</th>
<th>
${userView.name}
</th>
<td><input type="button" class="removeButton"
onclick="CourseUnitsForm.id.value='${userView.id}';set(this.form,'removeTeacher');this.form.submit();">
</td>
</tr>
</logic:iterate>
</table>
</logic:greaterThan>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.students"/>
</th>
<td>
<html:text styleClass="text" property="studentCode"/>
<input type="hidden" name="dispatch" value="createOrUpdateAdmin">
<html:hidden property="courseUnitView.id"/>
<html:hidden property="id"/>
<table>
<tr>
<th>
<bean:message key="courseunit.name"/>
</th>
<td>
<html:text styleClass="text" property="courseUnitView.name"/>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.course"/>
</th>
<td>
<html:select property="courseUnitView.courseId">
<logic:iterate id="course" name="Courses" type="pt.estgp.estgweb.domain.views.CourseView">
<html:option value="${course.id}">(${course.code}) ${course.name}</html:option>
</logic:iterate>
</html:select>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.code"/>
</th>
<td>
<html:text styleClass="text" property="courseUnitView.code"/>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.semestre"/>
</th>
<td>
<html:select property="courseUnitView.semestre">
<html:option value="S1">S1</html:option>
<html:option value="S2">S2</html:option>
</html:select>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.importYear"/>
</th>
<td>
<html:select property="courseUnitView.importYear">
<logic:iterate id="item" name="CourseUnitsForm" property="importYears">
<html:option value="${item}">${item}</html:option>
</logic:iterate>
</html:select>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.teachers"/>
</th>
<td>
<html:select property="teacherId">
<logic:present name="CourseUnitsForm" property="teachers">
<logic:iterate id="teacher" name="CourseUnitsForm" property="teachers" type="pt.estgp.estgweb.domain.views.UserView">
<jomm:option itemName="teacher" itemProperty="id" comparableObjectName="CourseUnitsForm"
comparableObjectProperty="teacherId">
(${teacher.code}) ${teacher.name}
</jomm:option>
</logic:iterate>
<input type="button" value="<bean:message key="add"/>"
onclick="set(this.form,'addStudent');this.form.submit();">
<logic:greaterThan name="CourseUnitView" property="studentsSize" value="0">
<table class="dataTable removeButton">
<logic:iterate id="userView" name="CourseUnitView" property="students" type="pt.estgp.estgweb.domain.views.UserView">
<tr>
<th>
${userView.code}
</th>
<th>
${userView.username}
</th>
<th>
${userView.name}
</th>
<th>
${userView.email}
</th>
<th>
${userView.address}
</th>
<td><input type="button" class="removeButton"
onclick="CourseUnitsForm.id.value='${userView.code}';set(this.form,'removeStudent');this.form.submit();">
</td>
</tr>
</logic:iterate>
</table>
</logic:greaterThan>
</td>
</tr>
onclick="set(this.form,'addTeacher');this.form.submit();">
</logic:present>
</html:select>
<logic:greaterThan name="CourseUnitView" property="teachersSize" value="0">
<table class="dataTable removeButton">
<logic:iterate id="userView" name="CourseUnitView" property="teachers" type="pt.estgp.estgweb.domain.views.UserView">
<tr>
<th>
${userView.code}
</th>
<th>
${userView.name}
</th>
<td><input type="button" class="removeButton"
onclick="CourseUnitsForm.id.value='${userView.id}';set(this.form,'removeTeacher');this.form.submit();">
</td>
</tr>
</logic:iterate>
</table>
</logic:greaterThan>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.students"/>
</th>
<td>
<html:text styleClass="text" property="studentCode"/>
<input type="button" value="<bean:message key="add"/>"
onclick="set(this.form,'addStudent');this.form.submit();">
<logic:greaterThan name="CourseUnitView" property="studentsSize" value="0">
<table class="dataTable removeButton">
<logic:iterate id="userView" name="CourseUnitView" property="students" type="pt.estgp.estgweb.domain.views.UserView">
<tr>
<th>
${userView.code}
</th>
<th>
${userView.username}
</th>
<th>
${userView.name}
</th>
<th>
${userView.email}
</th>
<th>
${userView.address}
</th>
<td><input type="button" class="removeButton"
onclick="CourseUnitsForm.id.value='${userView.code}';set(this.form,'removeStudent');this.form.submit();">
</td>
</tr>
</logic:iterate>
</table>
</logic:greaterThan>
</td>
</tr>
 
</table>
<input type="button" onclick="set(form,'createOrUpdateAdmin');form.submit()" value="<bean:message key="confirm"/>">
</table>
<input type="button" onclick="set(form,'createOrUpdateAdmin');form.submit()" value="<bean:message key="confirm"/>">
</html:form>
/impl/src/web/admin/blogs/submitBlog.jsp
25,7 → 25,7
%>
 
<baco:isNotAdmin>
<p></p><bean:message key="blog.intro.message"/></p>
<p><bean:message key="blog.intro.message"/></p>
</baco:isNotAdmin>
<html:form action="${user}/blogsController${fromAction}${from}" enctype="multipart/form-data">
<html:hidden property="role"/>
50,6 → 50,23
</td>
</tr>
</baco:isAdmin>
<logic:present name="BlogForm" property="blogView.courseUnitView">
<tr>
<th>
<bean:message key="blog.courseunit.internal"/>
</th>
<td>
<html:select property="blogView.courseUnitInternal">
<html:option value="true">
<bean:message key="yes"/>
</html:option>
<html:option value="false">
<bean:message key="no"/>
</html:option>
</html:select>
</td>
</tr>
</logic:present>
<tr>
<th>
<bean:message key="blog.autoValidation"/>
/impl/src/web/admin/blogs/topnavCreateBlog.jsp
2,9 → 2,17
<%@page pageEncoding="UTF-8"%>
<%@ page import="jomm.web.utils.NavPlaceServer" %>
<%@ page import="jomm.web.utils.TopNav" %>
<jsp:useBean id="BlogForm" type="pt.estgp.estgweb.web.form.blogs.BlogForm" scope="request"/>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/Welcome.do", "Home");
topNav.addNavPlace(null, "submit.blog");
if(BlogForm.getBlogView().getCourseUnitView() != null)
{
topNav.addNavPlace(null, "blog.courseunit", BlogForm.getBlogView().getCourseUnitView().getName());
}
else
{
topNav.addNavPlace(null, "submit.blog");
}
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/admin/announcements/submitTodoAnnouncement.jsp
New file
0,0 → 1,164
<%@ page import="pt.estgp.estgweb.Globals" %>
<%@ 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="AnnouncementsForm" type="pt.estgp.estgweb.web.form.announcements.AnnouncementsForm" scope="request"/>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<jomm:messages/>
<html:errors/>
<%
String fromAction = "";
String from = "";
String user = "";
if (request.getParameter("from") != null)
{
user = "/user";
fromAction = "From" + request.getParameter("from");
from = "?from=" + request.getParameter("from");
}
request.setAttribute("from", from);
request.setAttribute("user", user);
request.setAttribute("fromAction", fromAction);
%>
 
<html:form action="${user}/submitTodoAnnouncement${fromAction}${from}" enctype="multipart/form-data">
<html:hidden property="role"/>
<html:hidden property="announcementView.id"/>
<html:hidden property="smallImageStr"/>
<html:hidden property="bigImageStr"/>
<html:hidden property="announcementView.internal" value="true"/>
<html:hidden property="announcementView.type" value="todo"/>
 
<input type="hidden" name="dispatch" value="removeRole">
<table class="form">
 
<baco:isAdmin>
<tr>
<th>
<bean:message key="announcement.status"/>
</th>
<td>
<html:select property="announcementView.status">
<html:option value="true">
<bean:message key="yes"/>
</html:option>
<html:option value="false">
<bean:message key="no"/>
</html:option>
</html:select>
</td>
</tr>
</baco:isAdmin>
 
<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>
</logic:present>
<tr>
<th>
<bean:message key="announcement.target.roles"/>
</th>
<td>
<html:select property="targetRolesStr">
<logic:present name="AnnouncementsForm" property="targetRoles">
<logic:iterate id="item" name="AnnouncementsForm" property="targetRoles">
<jomm:option itemName="item" comparableObjectName="AnnouncementsForm"
comparableObjectProperty="targetRolesStr">
<jomm:message patternMessage="user.role.{0}" name0="item"/>
</jomm:option>
</logic:iterate>
<input type="button" value="<bean:message key="add"/>"
onclick="set(this.form,'addRole');this.form.submit();">
</logic:present>
</html:select>
 
 
<logic:present name="AnnouncementsForm" property="selectedRoles">
<logic:notEmpty name="AnnouncementsForm" property="selectedRoles">
<table class="dataTable removeButton">
<logic:iterate id="item" name="AnnouncementsForm" property="selectedRoles">
<tr>
<th>
<jomm:message patternMessage="user.role.{0}" name0="item"/>
</th>
<td><input type="button" class="removeButton"
onclick="AnnouncementsForm.role.value='${item}';set(this.form,'removeRole');this.form.submit();">
</td>
</tr>
</logic:iterate>
</table>
</logic:notEmpty>
</logic:present>
</td>
</tr>
 
<tr>
<th>
<bean:message key="announcement.title"/>
*
</th>
<td>
<html:text styleClass="text" property="announcementView.title" maxlength="250"/>
</td>
</tr>
<tr>
<th>
<bean:message key="announcement.expireDate"/>
*
</th>
<td>
<a href="javascript:cal.select(getObjectById('expireDate'),'anchor2','yyyy/MM/dd')" name="anchor2" id="anchor2"><html:text styleClass="date" property="expireDate" styleId="expireDate" readonly="true"/></a>
<input type="button" class="removeButton" onClick="AnnouncementsForm.expireDate.value=null">
</td>
</tr>
<tr>
<th>
<bean:message key="announcement.linkAnnouncement"/>
</th>
<td>
<html:select property="urlProtocol">
<html:option value="http://">Http://</html:option>
<html:option value="ftp://">ftp://</html:option>
<html:option value="https://">Https://</html:option>
</html:select>
<html:text property="url" maxlength="250"/>
</td>
</tr>
<tr>
<th>
<bean:message key="announcement.text"/>
*
</th>
<td>
<html:textarea styleClass="textarea" property="announcementView.text"/>
</td>
</tr>
<tr class="buttons">
<td colspan="2">
<input type="button"
onclick="set(this.form,'save');this.form.submit()"
value="<bean:message key="confirm"/>"/>
</td>
</tr>
</table>
</html:form>
/impl/src/web/admin/announcements/topnavEditAnnouncement.jsp
7,6 → 7,6
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/Welcome.do", "Home");
topNav.addNavPlace(null, "submit.announcement");
topNav.addNavPlace(null, "submit.todo.announcement");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/admin/announcements/topnavCreateTodoAnnouncement.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("/Welcome.do", "Home");
topNav.addNavPlace(null, "submit.announcement");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/admin/announcements/submitAnnouncement.jsp
75,10 → 75,17
<html:select property="announcementView.type">
<logic:present name="AnnouncementsForm" property="announcementTypes">
<logic:iterate id="item" name="AnnouncementsForm" property="announcementTypes">
<%
if(!Globals.ANNOUNCEMENT_NOT_STANDARD.contains(item))
{
%>
<jomm:option itemName="item" comparableObjectName="AnnouncementsForm"
comparableObjectProperty="announcementView.type">
<bean:message key="announcements.type.${item}"/>
</jomm:option>
<%
}
%>
</logic:iterate>
</logic:present>
</html:select>
/impl/src/web/admin/announcements/topnavEditTodoAnnouncement.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("/Welcome.do", "Home");
topNav.addNavPlace(null, "submit.todo.announcement");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/css/style.css
4,27 → 4,37
FONT-SIZE: 11px;
}
 
.homebox img
{
}
 
.homebox img:hover
{
cursor:pointer;
}
 
 
/*Errors and Warnings*/
.statusOK {
.statusOK, .active {
padding: 2px;
list-style-type: none;
color: green;
background-color: #FFEEDD;
}
 
.statusERROR * {
.statusERROR *, .statusERROR, .inactive {
color: red;
}
 
.statusWARNING * {
.statusWARNING *, .statusWARNING {
padding: 2px;
list-style-type: none;
color: yellow;
background-color: black;
}
 
 
 
.requiredField * {
color: red;
}
32,6 → 42,8
.statusSearch {
color: lightblue;
}
 
a
/****************************Text Size*************************************************/
 
 
72,12 → 84,21
text-align: right;
clear: both;
margin-top:10px;
 
}
 
.pFooter a {
font-style: italic;
}
 
.pFooterSeccao {
background-color: white;
font-size: 0.8em;
border-top: 1px solid #cccccc;
text-align: left;
clear: both;
margin-top:10px;
}
 
#content .pFooter a:hover
{
color:white;
178,7 → 199,9
text-align:left;
}
 
#content a:link, .content a:visited {
#content a
/*, .content a:visited*/
{
color: #4d4d4d;
}
 
194,14 → 217,23
VERTICAL-ALIGN: top;
}
 
#contentCourseUnit
#contentCourseUnitIntranet
{
width:100%;
height:100%;
height:100%;
border: #8EC73F solid 1px;
}
#contentCourseUnitIntranet #contentCourseUnit
{
 
padding:10px;
}
 
#contentCourseUnit .seccao
{
border: #8EC73F solid 1px;
padding:10px;
}
 
.contentPortal {
border: #8EC73F solid 1px;
padding:5px;
287,7 → 319,9
#footer #sponsors {
}
 
#footer a:link, #footer a:visited {
#footer a
/*, #footer a:visited */
{
color: #4d4d4d;
}
 
467,7 → 501,7
padding-left: 10px;
}
 
.block a:link {
.block a {
color: #4d4d4d;
text-decoration: none;
}
498,7 → 532,7
vertical-align:top;
}
 
.portalAnnouncement a:link, .portalAnnouncement a:visited {
.portalAnnouncement a {
margin: 0;
}
 
514,7 → 548,7
text-decoration: none;
}
 
.portalAnnouncementText a:link, .portalAnnouncementText a:visited {
.portalAnnouncementText a {
color: #4d4d4d;
}
 
563,7 → 597,7
margin-bottom: 10px;
}
 
.contentPortal li a:link, .contentPortal a:visited, .contentPortal li {
.contentPortal li a .contentPortal li {
color: #4d4d4d;
}
 
680,13 → 714,13
margin-top: 1px;
}
 
#flashTopNews h2 a:link, #flashTopNews h2 a:visited {
#flashTopNews h2 a {
color: #8EC73F;
font-weight: bold;
text-decoration: none;
}
 
#flashTopNews p a:link, #flashTopNews p a:visited {
#flashTopNews p a{
color: #FFFFFF;
text-decoration: none;
}
707,13 → 741,13
padding-top: 10px;
}
 
#flashCenterNews h2 a:link, #flashCenterNews h2 a:visited {
#flashCenterNews h2 a{
color: #8EC73F;
font-weight: bold;
text-decoration: none;
}
 
#flashCenterNews p a:link, #flashCenterNews p a:visited {
#flashCenterNews p a {
color: #4d4d4d;
text-decoration: none;
}
729,12 → 763,12
height: 100px;
}
 
#flashBottomNews h2 a:link, #flashBottomNews h2 a:visited {
#flashBottomNews h2 a {
color: #8EC73F;
font-weight: bold;
}
 
#flashBottomNews p a:link, #flashBottomNews p a:visited {
#flashBottomNews p a {
color: #4d4d4d;
}
 
763,7 → 797,7
text-decoration: none;
}
 
#lastnews li a:link, .linkLeftMenu a:link, .linkRightMenu a:link {
#lastnews li a, .linkLeftMenu a, .linkRightMenu a {
color: #4d4d4d;
}
 
834,7 → 868,7
color: #793B0D;
background-color: #FFFFFF;
border: 0 solid #793B0D;
font-size: 0.8em;
font-size: 0.9em;
font-family: Helvetica, sans-serif;
vertical-align: top;
}
887,7 → 921,6
 
.seccao, .seccao p {
margin: 10px;
font-size: 0.95em;
font-family: Helvetica, sans-serif;
}
 
1203,6 → 1236,10
border:1px solid #8ec73f;
 
}
.number
{
text-align:right;
}
.messages th, .dataTable th
{
border:1px solid darkgray;
1358,4 → 1395,19
padding-right: 3px;
padding-left: 3px;
margin:0;
}
}
 
 
.WARNING *, .WARNING p, .WARNING * p, .WARNING, .WARNING a
{
color: yellow;
background-color: black;
}
 
 
.WARNING a:hover
{
color: yellow;
background-color: black;
}
 
/impl/src/web/css/intranet.css
95,3 → 95,5
{
COLOR:BLACK;
}
 
 
/impl/src/web/layout/layout1.jsp
24,7 → 24,7
<div id="header">
<tiles:insert attribute="header"/>
</div>
<table class="pageDefault">
<table class="pageDefault" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2">
<tiles:insert attribute="navigationTop"/>
/impl/src/web/public/courses/topnavCourse.jsp
New file
0,0 → 1,11
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="jomm.web.utils.NavPlaceServer" %>
<%@ page import="jomm.web.utils.TopNav" %>
<jsp:useBean id="CourseView" type="pt.estgp.estgweb.domain.views.CourseView" scope="request"/>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/Welcome.do", "Home");
topNav.addNavPlace(null, "course", CourseView.getName());
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/public/courses/course.jsp
New file
0,0 → 1,41
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %>
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
<%@ page import="pt.estgp.estgweb.domain.views.CourseView" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<jsp:useBean id="CourseView" type="pt.estgp.estgweb.domain.views.CourseView" scope="request"/>
 
<div class="seccao">
<h2>${CourseView.name}</h2>
<table class="dataTable">
<tr>
<th>
Nome
</th>
<td>
${CourseView.name}
</td>
</tr>
</table>
</div>
 
<div class="seccao">
<h2>Unidades Curriculares</h2>
<ul>
<logic:iterate id="courseUnitView" name="CourseView" property="courseUnits" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
${courseUnitView.name}
</li>
</logic:iterate>
</ul>
</div>
 
 
 
/impl/src/web/public/courses/courses.jsp
New file
0,0 → 1,31
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %>
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
<%@ page import="pt.estgp.estgweb.domain.views.CourseView" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{};
List<CourseView> courseViews = (List<CourseView>) sm.execute(RequestUtils.getRequester(request, response), "LoadCourses", args, names);
request.setAttribute("Courses", courseViews);
%>
<jsp:useBean id="Courses" type="java.util.List" scope="request"/>
<div class="linkLeftMenu">
<div class="listClean">
<ul>
<logic:iterate id="courseView" name="Courses" type="pt.estgp.estgweb.domain.views.CourseView">
<li>
<html:link action="/startLoadCourse?courseView.id=${courseView.id}">${courseView.name}</html:link>
</li>
</logic:iterate>
</ul>
</div>
</div>
/impl/src/web/public/courseunits/topnavCourseUnitBlog.jsp
New file
0,0 → 1,13
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="jomm.web.utils.NavPlaceServer" %>
<%@ page import="jomm.web.utils.TopNav" %>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/Welcome.do", "Home");
topNav.addNavPlace(null, "course", CourseUnitView.getCourseName());
topNav.addNavPlace("/startLoadCourseUnit.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName());
topNav.addNavPlace(null, "blog");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/public/courseunits/topnavCourseUnitStudents.jsp
New file
0,0 → 1,13
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="jomm.web.utils.NavPlaceServer" %>
<%@ page import="jomm.web.utils.TopNav" %>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/Welcome.do", "Home");
topNav.addNavPlace(null, "course", CourseUnitView.getCourseName());
topNav.addNavPlace("/startLoadCourseUnit.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName());
topNav.addNavPlace(null, "courseunit.students");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/public/announcements/loadTodoAnnouncement.jsp
New file
0,0 → 1,46
<%@ page import="pt.estgp.estgweb.domain.UserImpl" %>
<%@ page import="pt.estgp.estgweb.domain.UserSessionImpl" %>
<%@ page import="pt.estgp.estgweb.domain.enums.AnnouncementStyleEnum" %>
<%@ page import="pt.estgp.estgweb.web.UserSessionProxy" %>
<%@ 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/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<jsp:useBean id="Announcement" type="pt.estgp.estgweb.domain.views.AnnouncementView" scope="request"/>
<% UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);%>
<div class="seccao">
 
<h2>${Announcement.title}
<baco:canManage name="Announcement">
<!--valid="false">-->
<%
String fromAction = "";
String user = "";
if(request.getParameter("from")!=null)
{
user = "/user";
fromAction = "From" + request.getParameter("from");
}
request.setAttribute("user",user);
request.setAttribute("fromAction",fromAction);
%>
<html:link action="${user}/startEditAnnouncement${fromAction}?id=${Announcement.id}">
<bean:message key="edit"/>
</html:link>
<html:link action="${user}/startDeleteAnnouncement${fromAction}?id=${Announcement.id}">
<bean:message key="delete"/>
</html:link>
</baco:canManage>
</h2>
 
<table>
<tr>
<td valign="top">
<img width="150px" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imgs/todoMini.jpg">
</td>
<td valign="top">${Announcement.formatedText}</td>
</tr>
</table>
</div>
/impl/src/web/user/courses/selectCourse.jsp
New file
0,0 → 1,34
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %>
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
<%@ page import="pt.estgp.estgweb.domain.views.CourseView" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{};
List<CourseView> courseViews = (List<CourseView>) sm.execute(RequestUtils.getRequester(request, response), "LoadCourses", args, names);
request.setAttribute("Courses", courseViews);
%>
<jsp:useBean id="Courses" type="java.util.List" scope="request"/>
<div class="seccao">
<h2><bean:message key="course.select.message"/> </h2>
<div class="form">
<html:form action="/user/courseControllerFromServiceZone">
<input type="hidden" name="dispatch" value="edit"/>
<html:select property="courseView.id">
<logic:iterate id="course" name="Courses" type="pt.estgp.estgweb.domain.views.CourseView">
<html:option value="${course.id}">(${course.code}) ${course.name}</html:option>
</logic:iterate>
</html:select>
<input type="submit" value="<bean:message key="edit"/>">
</html:form>
</div>
</div>
/impl/src/web/user/courseunits/courseunitworks.jsp
1,5 → 1,6
<%@ page import="pt.estgp.estgweb.domain.Teacher" %>
<%@ page import="pt.estgp.estgweb.domain.TeacherImpl" %>
<%@ page import="jomm.utils.MessageResources" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
8,116 → 9,283
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<jsp:useBean id="CourseUnitsForm" type="pt.estgp.estgweb.web.form.courseunits.CourseUnitsForm" scope="request"/>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<div id="contentCourseUnitIntranet">
<div id="contentCourseUnit">
 
<html:errors/>
<jomm:messages/>
<div class="seccao">
<h2><bean:message key="courseunit.works"/></h2>
<h2>
<bean:message key="courseunit.works"/>
<baco:canManage name="CourseUnitView">
<a href="javascript:showOrHide('assignements')"><bean:message key="new"/></a>
</baco:canManage>
</h2>
<baco:canManage name="CourseUnitView">
<%
String visibility;
if(CourseUnitsForm.isShowNewWorkForm())
visibility = "position:relative;visibility:visible";
else
visibility = "position:absolute;visibility:hidden";
request.setAttribute("visibility",visibility);
%>
<html:form styleId="assignements" style="${visibility}" action="/user/courseUnitControllerFromHome" enctype="multipart/form-data">
<input type="hidden" name="dispatch" value="createAssignement">
<html:hidden property="courseUnitView.id"/>
<html:hidden property="courseUnitAssignementView.id"/>
<div class="form blockForm">
<table>
<tr>
<th>
<bean:message key="courseunit.title"/>
</th>
<td>
<html:text styleClass="text" property="courseUnitAssignementView.title"/>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.assignement.deliver.date"/>
</th>
<td>
<a href="javascript:cal.select(getObjectById('deliverDate'),'anchor1','yyyy/MM/dd')" name="anchor1" id="anchor1"><html:text styleClass="date" property="courseUnitAssignementView.deliverDate" styleId="deliverDate" readonly="true"/></a>
<input type="button" class="removeButton" onClick="CourseUnitsForm.deliverDate.value=null">
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.assignement.deliver.type"/>
</th>
<td>
<html:select property="courseUnitAssignementView.deliverType">
<html:option value="zipfile" key="courseunit.assignement.deliver.type.zipfile"/>
<html:option value="nofile" key="courseunit.assignement.deliver.type.nofile"/>
</html:select>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.assignement.deliver.late.permission"/>
</th>
<td>
<html:select property="courseUnitAssignementView.lateDelivers">
<html:option value="true" key="yes"/>
<html:option value="false" key="no"/>
</html:select>
</td>
</tr>
 
<a href="javascript:showOrHide('assignements')">Criar Novo</a>
 
<html:form styleId="assignements" style="position:absolute;visibility:hidden;" action="/user/courseUnitControllerFromHome">
<input type="hidden" name="dispatch" value="createAssignement">
<html:hidden property="courseUnitView.id"/>
<div class="form blockForm">
<table>
<tr>
<th>
<bean:message key="courseunit.title"/>
</th>
<td>
<html:text styleClass="text" property="courseUnitAssignementView.title"/>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.assignement.deliver.date"/>
</th>
<td>
<a href="javascript:cal.select(getObjectById('deliverDate'),'anchor1','yyyy/MM/dd')" name="anchor1" id="anchor1"><html:text styleClass="date" property="courseUnitAssignementView.deliverDate" styleId="deliverDate" readonly="true"/></a>
<input type="button" class="removeButton" onClick="CourseUnitsForm.deliverDate.value=null">
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.assignement.deliver.type"/>
</th>
<td>
<html:select property="courseUnitAssignementView.deliverType">
<html:option value="zipfile" key="courseunit.assignement.deliver.type.zipfile"/>
<html:option value="nofile" key="courseunit.assignement.deliver.type.nofile"/>
</html:select>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.assignement.deliver.late.permission"/>
</th>
<td>
<html:select property="courseUnitAssignementView.lateDelivers">
<html:option value="true" key="yes"/>
<html:option value="false" key="no"/>
</html:select>
</td>
</tr>
 
<tr>
<th>
<bean:message key="courseunit.description"/>
</th>
<td>
<html:textarea styleClass="textarea" property="courseUnitAssignementView.description"/>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.status"/>
</th>
<td>
<html:select property="courseUnitAssignementView.status">
<html:option value="true">
<bean:message key="status.active"/>
</html:option>
<html:option value="false">
<bean:message key="status.inactive"/>
</html:option>
</html:select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="button" onclick="this.form.submit()" value="<bean:message key="confirm"/>"/>
</td>
</tr>
</table>
</div>
</html:form>
<p>
<logic:notEmpty name="CourseUnitView" property="courseUnitAssignements">
 
 
<table class="dataTable">
<tr>
<th>Trabalho</th>
<th>Entregues</th>
</tr>
<logic:iterate id="work" name="CourseUnitView" property="courseUnitAssignements" type="pt.estgp.estgweb.domain.views.CourseUnitAssignementView">
<tr>
<th>
<bean:message key="courseunit.description"/>
</th>
<td>
${work.title}
<html:textarea styleClass="textarea" property="courseUnitAssignementView.description"/>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.assignement.file"/>
</th>
<td>
${work.delivers}
<html:file property="uploadFile"/>
</td>
</tr>
</logic:iterate>
</table>
 
<tr>
<th>
<bean:message key="courseunit.status"/>
</th>
<td>
<html:select property="courseUnitAssignementView.status">
<html:option value="true">
<bean:message key="status.active"/>
</html:option>
<html:option value="false">
<bean:message key="status.inactive"/>
</html:option>
</html:select>
</td>
</tr>
<tr>
<td colspan="2">
<input type="button" onclick="this.form.submit()" value="<bean:message key="confirm"/>"/>
</td>
</tr>
</table>
</div>
</html:form>
</baco:canManage>
<p>
<logic:notEmpty name="CourseUnitView" property="courseUnitAssignements">
<table class="dataTable">
<tr>
<th><bean:message key="courseunit.title"/></th>
<th><bean:message key="courseunit.assignement.file"/></th>
<th><bean:message key="courseunit.assignement.deliver.date"/></th>
<th><bean:message key="courseunit.assignement.deliver.late.permission"/></th>
<th><bean:message key="courseunit.assignement.deliver.type"/></th>
<baco:canManage name="CourseUnitView">
<%
request.setAttribute("colspanAssignement",6);
%>
<th><bean:message key="courseunit.status"/></th>
<th><bean:message key="courseunit.assignement.delivers"/></th>
<th colspan="3"><bean:message key="manage"/></th>
</baco:canManage>
<baco:isStudentOfCourseUnit courseUnitId="${CourseUnitView.id}">
<%
request.setAttribute("colspanAssignement",8);
%>
<th><bean:message key="courseunit.assignement.deliver"/></th>
<th><bean:message key="courseunit.assignement.deliver.time"/></th>
<th><bean:message key="courseunit.assignement.deliver.grade"/></th>
<th><bean:message key="courseunit.assignement.deliver.obs"/></th>
</baco:isStudentOfCourseUnit>
</tr>
<logic:iterate id="work" name="CourseUnitView" property="courseUnitAssignements" type="pt.estgp.estgweb.domain.views.CourseUnitAssignementView">
<tr>
<td>
<a href="javascript:showOrHide('assignement${work.id}')">${work.title}</a>
</td>
<td>
<logic:notEmpty name="work" property="workFile">
<a target="_blank" href="<%=request.getContextPath()%>/repositoryStream/${work.workFile}">${work.repositoryFile.lastVersion.name} (${work.repositoryFile.lastVersion.sizeKb} Kb)</a>
</logic:notEmpty>
<logic:empty name="CourseUnitView" property="courseUnitAssignements">
<bean:message key="courseunit.works.zero"/>
</td>
<%
String deliverDateStyleClass;
if(work.isActive())
deliverDateStyleClass = "active";
else
deliverDateStyleClass = "inactive";
%>
<td class="<%=deliverDateStyleClass%> number">
${work.deliverDate}
</td>
<td>
<logic:equal value="true" name="work" property="lateDelivers">
<bean:message key="yes"/>
</logic:equal>
<logic:notEqual value="true" name="work" property="lateDelivers">
<bean:message key="no"/>
</logic:notEqual>
</td>
<td>
<bean:message key="courseunit.assignement.deliver.type.${work.deliverType}"/>
</td>
<baco:canManage name="CourseUnitView">
<td>
<logic:equal value="true" name="work" property="status">
<bean:message key="status.active"/>
</logic:equal>
<logic:notEqual value="true" name="work" property="status">
<bean:message key="status.inactive"/>
</logic:notEqual>
</td>
<td class="number">
<logic:greaterThan value="0" name="work" property="delivers">
<html:link action="/user/startLoadCourseUnitAssignementFromHome?courseUnitAssignementView.id=${work.id}">${work.delivers}</html:link>
</logic:greaterThan>
<logic:equal value="0" name="work" property="delivers">
${work.delivers}
</logic:equal>
</td>
<td>
<html:link action="/user/startEditCourseUnitWorksFromHome?courseUnitAssignementView.id=${work.id}&courseUnitView.id=${CourseUnitView.id}">
<bean:message key="edit"/>
</html:link>
</td>
<td>
<a href="<%=request.getContextPath()%>/user/startValidateInvalidateCourseUnitWorksFromHome.do?courseUnitAssignementView.id=${work.id}">
<logic:equal value="true" name="work" property="status">
<bean:message key="deactivate"/>
</logic:equal>
<logic:notEqual value="true" name="work" property="status">
<bean:message key="activate"/>
</logic:notEqual>
</a>
</td>
<%
String confirmDelete = MessageResources.getMessage(request, "courseunitwork.confirm.delete");
request.setAttribute("confirmDelete", confirmDelete);
%>
<td>
<html:link onclick="return confirm('${confirmDelete}')" action="/user/startDeleteCourseUnitWorksFromHome?courseUnitAssignementView.id=${work.id}">
<bean:message key="delete"/>
</html:link>
</td>
</baco:canManage>
<baco:isStudentOfCourseUnit courseUnitId="${CourseUnitView.id}">
<td nowrap="nowrap">
 
<%
if(work.canDeliver(request))
{
%>
<html:form action="/user/courseUnitControllerFromHome" enctype="multipart/form-data">
<input type="hidden" name="dispatch" value="deliverWork">
<html:hidden property="courseUnitAssignementView.id" value="${work.id}"/>
<html:hidden property="courseUnitView.id" value="${CourseUnitView.id}"/>
<html:file property="uploadFile"/>
<logic:notEmpty name="work" property="courseUnitDeliverableView">
<input type="submit" value="<bean:message key="replace"/>"/>
</logic:notEmpty>
<logic:empty name="work" property="courseUnitDeliverableView">
<input type="submit" value="<bean:message key="courseunit.assignement.deliver"/>"/>
</logic:empty>
</html:form>
<%
}
%>
 
</td>
<logic:empty name="work" property="courseUnitDeliverableView">
<td class="statusWARNING">
<bean:message key="courseunit.assignement.deliver.time.no"/>
</td>
</logic:empty>
<logic:notEmpty name="work" property="courseUnitDeliverableView">
<logic:equal name="work" property="lateDeliver" value="true">
<td class="statusERROR">
<bean:message key="courseunit.assignement.deliver.time.late"/>
</td>
</logic:equal>
<logic:notEqual name="work" property="lateDeliver" value="true">
<td class="statusOK">
<bean:message key="courseunit.assignement.deliver.time.ok"/>
</td>
</logic:notEqual>
</logic:notEmpty>
<td>
${work.courseUnitDeliverableView.grade}
</td>
<td>
${work.courseUnitDeliverableView.obs}
</td>
</baco:isStudentOfCourseUnit>
<logic:notEmpty name="work" property="courseUnitDeliverableView">
<td>
<a target="_blank" href="<%=request.getContextPath()%>/repositoryStream/${work.courseUnitDeliverableView.fileStreamId}"><bean:message key="courseunit.assignement.deliver.version"/> (${work.courseUnitDeliverableView.deliverDateStr})</a>
</td>
</logic:notEmpty>
</tr>
<tr id="assignement${work.id}" style="position:absolute;visibility:hidden;">
<td colspan="${colspanAssignement}">
${work.description}
</td>
</tr>
</logic:iterate>
</table>
</logic:notEmpty>
<logic:empty name="CourseUnitView" property="courseUnitAssignements">
<bean:message key="courseunit.works.zero"/>
</logic:empty>
</p>
</div>
 
</div>
</div>
/impl/src/web/user/courseunits/blogIntranet.jsp
New file
0,0 → 1,14
<%@ page import="pt.estgp.estgweb.domain.Teacher" %>
<%@ page import="pt.estgp.estgweb.domain.TeacherImpl" %>
<%@ page import="jomm.utils.MessageResources" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<div id="contentCourseUnitIntranet">
<jsp:include page="/user/courseunits/blog.jsp"/>
</div>
/impl/src/web/user/courseunits/loadAnnouncement.jsp
New file
0,0 → 1,16
<%@ page import="pt.estgp.estgweb.domain.Teacher" %>
<%@ page import="pt.estgp.estgweb.domain.TeacherImpl" %>
<%@ page import="jomm.utils.MessageResources" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<div id="contentCourseUnitIntranet">
<div id="contentCourseUnit">
<jsp:include page="/public/announcements/loadAnnouncement.jsp"/>
</div>
</div>
/impl/src/web/user/courseunits/courseunitassignement.jsp
New file
0,0 → 1,151
<%@ page import="pt.estgp.estgweb.domain.Teacher" %>
<%@ page import="pt.estgp.estgweb.domain.TeacherImpl" %>
<%@ page import="jomm.utils.MessageResources" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<jsp:useBean id="CourseUnitsForm" type="pt.estgp.estgweb.web.form.courseunits.CourseUnitsForm" scope="request"/>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<jsp:useBean id="CourseUnitAssignementView" type="pt.estgp.estgweb.domain.views.CourseUnitAssignementView" scope="request"/>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<div id="contentCourseUnitIntranet">
<div id="contentCourseUnit">
<html:errors/>
<jomm:messages/>
<div class="seccao">
<h2>
<bean:message key="courseunit.assignement" arg0="${CourseUnitAssignementView.title}"/>
</h2>
 
 
<div class="form blockForm">
<table>
<tr>
<th>
<bean:message key="courseunit.title"/>
</th>
<td>
<bean:write name="CourseUnitAssignementView" property="title"/>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.assignement.deliver.date"/>
</th>
<td>
<bean:write name="CourseUnitAssignementView" property="deliverDate"/>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.assignement.deliver.type"/>
</th>
<td>
<bean:message key="courseunit.assignement.deliver.type.${CourseUnitAssignementView.deliverType}"/>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.assignement.deliver.late.permission"/>
</th>
<td>
<logic:equal value="true" name="CourseUnitAssignementView" property="lateDelivers">
<bean:message key="yes"/>
</logic:equal>
<logic:notEqual value="true" name="CourseUnitAssignementView" property="lateDelivers">
<bean:message key="no"/>
</logic:notEqual>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.description"/>
</th>
<td>
<bean:write name="CourseUnitAssignementView" property="description"/>
</td>
</tr>
<tr>
<th>
<bean:message key="courseunit.status"/>
</th>
<td>
<logic:equal value="true" name="CourseUnitAssignementView" property="status">
<bean:message key="status.active"/>
</logic:equal>
<logic:notEqual value="true" name="CourseUnitAssignementView" property="status">
<bean:message key="status.inactive"/>
</logic:notEqual>
</td>
</tr>
<logic:notEmpty name="CourseUnitAssignementView" property="workFile">
<tr>
<th>
<bean:message key="courseunit.assignement.file"/>
</th>
<td>
<a target="_blank" href="<%=request.getContextPath()%>/repositoryStream/${CourseUnitAssignementView.workFile}"><bean:message key="courseunit.assignement.file"/></a>
</td>
</tr>
</logic:notEmpty>
</table>
</div>
<nested:form action="/user/courseUnitControllerFromHome">
<input type="hidden" name="dispatch" value="updateDeliverables">
<html:hidden property="courseUnitAssignementView.id" value="${CourseUnitAssignementView.id}"/>
 
<html:hidden property="courseUnitView.id" value="${CourseUnitView.id}"/>
 
<table class="dataTable">
<tr>
<th><bean:message key="courseunit.assignement.delivered.date"/></th>
<th><bean:message key="courseunit.assignement.deliver.time"/></th>
<th><bean:message key="number"/></th>
<th><bean:message key="name"/></th>
<th><bean:message key="courseunit.assignement.deliver.version"/></th>
<th><bean:message key="courseunit.assignement.deliver.grade"/></th>
<th><bean:message key="courseunit.assignement.deliver.obs"/></th>
</tr>
<nested:iterate id="deliverable" property="courseUnitAssignementView.deliverables" type="pt.estgp.estgweb.domain.views.CourseUnitDeliverableView">
<tr>
<td>${deliverable.deliverDateStr} </td>
<logic:equal name="deliverable" property="lateDeliver" value="true">
<td class="statusERROR">
<bean:message key="courseunit.assignement.deliver.time.late"/>
</td>
</logic:equal>
<logic:notEqual name="deliverable" property="lateDeliver" value="true">
<td class="statusOK">
<bean:message key="courseunit.assignement.deliver.time.ok"/>
</td>
</logic:notEqual>
<td>${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>
<nested:hidden property="id"/>
<nested:text property="grade"/>
</td>
<td>
<%--<a href="javascript:showOrHide('obs${deliverable.id}')"><bean:message key="courseunit.assignement.deliver.show.obs"/></a>--%>
 
<nested:textarea styleId="obs${deliverable.id}" styleClass="textarea" property="obs"/>
 
</td>
</tr>
</nested:iterate>
<tr>
<td colspan="7">
<input type="button" onclick="this.form.submit()" value="<bean:message key="confirm"/>"/>
</td>
</tr>
</table>
</nested:form>
</div>
</div>
</div>
/impl/src/web/user/courseunits/topnavCreateBlog.jsp
New file
0,0 → 1,21
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%@ page import="pt.estgp.estgweb.domain.views.BlogView" %>
<%
if (request.getAttribute("BlogView") != null)
{
BlogView bV = (BlogView) request.getAttribute("BlogView");
request.setAttribute("CourseUnitView", bV.getCourseUnitView());
}
%>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName());
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName());
topNav.addNavPlace(null, "submit.blog");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/courseunits/courseunit.jsp
11,40 → 11,92
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<div id="contentCourseUnit">
<html:form styleClass="form" action="/user/courseUnitControllerFromHome" enctype="multipart/form-data">
<input type="hidden" name="dispatch" value="update"/>
<html:hidden property="courseUnitView.id"/>
<h1>${CourseUnitView.name}</h1>
<div class="seccao">
<h2><bean:message key="courseunit.objectives"/></h2>
<p>
<baco:cantManage name="CourseUnitView">
<logic:present name="CourseUnitView" property="objectives">
${CourseUnitView.objectives}
</logic:present>
<logic:notPresent name="CourseUnitView" property="objectives">
<bean:message key="courseunit.objectives.not.available"/>
</logic:notPresent>
</baco:cantManage>
<baco:canManage name="CourseUnitView">
<html:textarea styleClass="textarea" property="courseUnitView.objectives"/>
</baco:canManage>
</p>
<p>
<baco:canManage name="CourseUnitView">
<html:file property="programFile"/>
</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:notPresent name="CourseUnitView" property="programStreamId">
<bean:message key="courseunit.programfilepath.not.available"/>
</logic:notPresent>
</p>
</div>
<baco:canManage name="CourseUnitView">
<input type="button" onclick="set(form,'update');form.submit()" value="<bean:message key="confirm"/>">
</baco:canManage>
<h1>${CourseUnitView.name} (${CourseUnitView.code})</h1>
<table width="100%" cellpadding="0" cellspacing="2" border="0">
<tr>
<td valign="top" class="seccao">
<html:form styleClass="form" action="/user/courseUnitControllerFromHome" enctype="multipart/form-data">
<input type="hidden" name="dispatch" value="update"/>
<html:hidden property="courseUnitView.id"/>
<h2><bean:message key="courseunit.objectives"/></h2>
<p>
<baco:cantManage name="CourseUnitView">
<logic:present name="CourseUnitView" property="objectives">
${CourseUnitView.objectives}
</logic:present>
<logic:notPresent name="CourseUnitView" property="objectives">
<bean:message key="courseunit.objectives.not.available"/>
</logic:notPresent>
</baco:cantManage>
<baco:canManage name="CourseUnitView">
<html:textarea styleClass="textarea" property="courseUnitView.objectives"/>
</baco:canManage>
</p>
<p>
<baco:canManage name="CourseUnitView">
<html:file property="programFile"/>
</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:notPresent name="CourseUnitView" property="programStreamId">
<bean:message key="courseunit.programfilepath.not.available"/>
</logic:notPresent>
</p>
 
</html:form>
<baco:canManage name="CourseUnitView">
<input type="button" onclick="set(form,'update');form.submit()" value="<bean:message key="confirm"/>">
</baco:canManage>
 
</html:form>
</td>
<td valign="top" class="seccao">
 
<h2><bean:message key="courseunit.teachers"/></h2>
<table class="dataTable">
<tr>
<th><bean:message key="number"/></th>
<th><bean:message key="name"/></th>
<th><bean:message key="email"/></th>
</tr>
<logic:iterate id="teacher" name="CourseUnitView" property="teachers" type="pt.estgp.estgweb.domain.views.UserView">
<tr>
<td>
${teacher.code}
</td>
<td>
${teacher.name}
</td>
<td>
${teacher.email}
</td>
</tr>
</logic:iterate>
</table>
</td>
</tr>
<baco:isAuthenticated>
<tr>
<td colspan="2" class="seccao">
<h2><bean:message key="module.Announcements"/></h2>
<logic:notEmpty name="CourseUnitView" property="announcements">
<div class="listCircleWhite">
<ul>
<logic:iterate id="announcement" name="CourseUnitView" property="announcements" type="pt.estgp.estgweb.domain.views.AnnouncementView">
<li>
<h3><html:link action="/user/startLoadAnnouncementFromCourseUnit?id=${announcement.id}">${announcement.title}</html:link></h3>
<p>${announcement.text}</p>
<p class="pFooterSeccao"><bean:message key="from"/>: ${announcement.owner.name} (${announcement.owner.username}) <bean:message key="at"/> ${announcement.formatedSaveDate} </p>
</li>
</logic:iterate>
</ul>
</div>
</logic:notEmpty>
<logic:empty name="CourseUnitView" property="announcements">
<p><bean:message key="announcement.zero.placed"/></p>
</logic:empty>
</td>
</tr>
</baco:isAuthenticated>
</table>
</div>
/impl/src/web/user/courseunits/menu.jsp
1,36 → 1,86
<%@ page import="pt.estgp.estgweb.domain.views.BlogView" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%
if (request.getAttribute("BlogView") != null)
{
BlogView bV = (BlogView) request.getAttribute("BlogView");
request.setAttribute("CourseUnitView",bV.getCourseUnitView());
}
%>
 
 
 
<%
String fromAction = "";
String from = "";
String user = "";
if (request.getParameter("from") != null)
{
user = "/user";
fromAction = "From" + request.getParameter("from");
if(request.getParameter("from").equals("CourseUnit"))
{
fromAction = "FromHome";
}
}
request.setAttribute("user", user);
request.setAttribute("fromAction", fromAction);
%>
 
 
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<div class="linkLeftMenu">
<div class="listClean">
<ul>
<li>
<a href="<%=request.getContextPath()%>/">Inicio</a>
</li>
<li>
<a href="<%=request.getContextPath()%>/">Colocar Dúvidas</a>
</li>
<li>
<a href="<%=request.getContextPath()%>/">Blog</a>
</li>
<li>
<a href="<%=request.getContextPath()%>/user/startLoadCourseUnitWorksFromHome.do?id=${CourseUnitView.id}">Trabalhos</a>
</li>
<li>
<a href="<%=request.getContextPath()%>/">Notas</a>
</li>
<li>
<a href="<%=request.getContextPath()%>/">Corpo Docente</a>
</li>
<li>
<a href="<%=request.getContextPath()%>/">Conteúdos</a>
</li>
<li>
<a href="<%=request.getContextPath()%>/">Assiduidade</a>
</li>
<li>
<a href="<%=request.getContextPath()%>/">Avaliação</a>
</li>
</ul>
<div class="linkMenuBlock">
<div class="linkMenuBlockTitle">Unidade</div>
<div class="linkLeftMenu">
<div class="listClean">
<ul>
 
<li>
<html:link action="${user}/startLoadCourseUnit${fromAction}?courseUnitView.id=${CourseUnitView.id}"><bean:message key="courseunit.menu.home"/></html:link>
</li>
 
<baco:isInCourseUnit courseUnitId="${CourseUnitView.id}">
<li>
<html:link action="/user/startSubmitAnnouncementFromCourseUnit?announcementView.courseUnitView.id=${CourseUnitView.id}"><bean:message key="courseunit.menu.put.announcement"/></html:link>
</li>
<li>
<a href="<%=request.getContextPath()%>/"><bean:message key="courseunit.menu.put.question"/></a>
</li>
<li>
<a href="<%=request.getContextPath()%>${user}/startLoadCourseUnitWorks${fromAction}.do?courseUnitView.id=${CourseUnitView.id}"><bean:message key="courseunit.menu.assignements"/></a>
</li>
</baco:isInCourseUnit>
 
 
<li>
<html:link action="${user}/startCourseUnitBlog${fromAction}?courseUnitView.id=${CourseUnitView.id}"><bean:message key="courseunit.menu.blog"/></html:link>
</li>
 
 
 
<li>
<html:link action="${user}/startLoadCourseUnitStudents${fromAction}?courseUnitView.id=${CourseUnitView.id}"><bean:message key="courseunit.students"/></html:link>
</li>
 
 
<li>
<a href="<%=request.getContextPath()%>/"><bean:message key="courseunit.menu.contents"/></a>
</li>
<li>
<a href="<%=request.getContextPath()%>/"><bean:message key="courseunit.menu.presences"/></a>
</li>
<li>
<a href="<%=request.getContextPath()%>/"><bean:message key="courseunit.menu.grades"/></a>
</li>
 
</ul>
</div>
</div>
</div>
/impl/src/web/user/courseunits/courseunitIntranet.jsp
New file
0,0 → 1,15
<%@ page import="pt.estgp.estgweb.domain.Teacher" %>
<%@ page import="pt.estgp.estgweb.domain.TeacherImpl" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<div id="contentCourseUnitIntranet">
<jsp:include page="/user/courseunits/courseunit.jsp"/>
</div>
/impl/src/web/user/courseunits/topnavCreateAnnouncement.jsp
New file
0,0 → 1,36
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%@ page import="pt.estgp.estgweb.web.form.announcements.AnnouncementsForm" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %>
<%@ page import="pt.estgp.estgweb.domain.views.AnnouncementView" %>
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
<%@ page import="pt.estgp.estgweb.domain.views.CourseUnitView" %>
<%
 
if (request.getAttribute("AnnouncementsForm") != null)
{
AnnouncementsForm aF = (AnnouncementsForm) request.getAttribute("AnnouncementsForm");
request.setAttribute("CourseUnitView", aF.getAnnouncementView().getCourseUnitView());
if (aF.getAnnouncementView().getCourseUnitView().getName() == null)
{
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"serializable"};
Object[] args = new Object[]{aF.getAnnouncementView().getCourseUnitView().getId(),true,false,false};
CourseUnitView courseUnitView = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "LoadCourseUnit", args, names);
request.setAttribute("CourseUnitView", courseUnitView);
}
}
 
%>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName());
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName());
topNav.addNavPlace(null, "submit.announcement");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/courseunits/submitBlog.jsp
New file
0,0 → 1,16
<%@ page import="pt.estgp.estgweb.domain.Teacher" %>
<%@ page import="pt.estgp.estgweb.domain.TeacherImpl" %>
<%@ page import="jomm.utils.MessageResources" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<div id="contentCourseUnitIntranet">
<div id="contentCourseUnit">
<jsp:include page="/admin/blogs/submitBlog.jsp"/>
</div>
</div>
/impl/src/web/user/courseunits/students.jsp
New file
0,0 → 1,37
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<div id="contentCourseUnitIntranet">
<div id="contentCourseUnit">
<table class="dataTable">
<tr>
<th><bean:message key="number"/></th>
<th><bean:message key="name"/></th>
<th><bean:message key="user"/></th>
<th><bean:message key="email"/></th>
</tr>
<logic:iterate id="student" name="CourseUnitView" property="students" type="pt.estgp.estgweb.domain.views.UserView">
<tr>
<td>
${student.code}
</td>
<td>
${student.name}
</td>
<td>
${student.username}
</td>
<td>
${student.email}
</td>
</tr>
</logic:iterate>
</table>
</div>
</div>
/impl/src/web/user/courseunits/topnavLoadBlog.jsp
New file
0,0 → 1,21
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%@ page import="pt.estgp.estgweb.domain.views.BlogView" %>
<%
if (request.getAttribute("BlogView") != null)
{
BlogView bV = (BlogView) request.getAttribute("BlogView");
request.setAttribute("CourseUnitView", bV.getCourseUnitView());
}
%>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName());
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName());
topNav.addNavPlace(null, "blog");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/courseunits/submitAnnouncement.jsp
New file
0,0 → 1,113
<%@ page import="pt.estgp.estgweb.Globals" %>
<%@ page import="jomm.utils.MyCalendar" %>
<%@ page import="pt.estgp.estgweb.web.utils.DatesUtils" %>
<%@ 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="AnnouncementsForm" type="pt.estgp.estgweb.web.form.announcements.AnnouncementsForm" scope="request"/>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<jomm:messages/>
<html:errors/>
<%
String fromAction = "";
String from = "";
String user = "";
if (request.getParameter("from") != null)
{
user = "/user";
fromAction = "From" + request.getParameter("from");
from = "?from=" + request.getParameter("from");
}
request.setAttribute("from", from);
request.setAttribute("user", user);
request.setAttribute("fromAction", fromAction);
 
MyCalendar calendar = new MyCalendar();
calendar.setYear(calendar.getYear()+1);
%>
<div id="contentCourseUnitIntranet">
<div id="contentCourseUnit">
<html:form action="${user}/submitAnnouncement${fromAction}${from}" enctype="multipart/form-data">
<html:hidden property="courseUnitView.id" value="${AnnouncementsForm.announcementView.courseUnitView.id}"/>
<html:hidden property="role"/>
<html:hidden property="announcementView.id"/>
<html:hidden property="smallImageStr"/>
<html:hidden property="bigImageStr"/>
<html:hidden property="announcementView.internal" value="true"/>
<html:hidden property="announcementView.courseUnitView.id"/>
<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"/>
<baco:hasRole role="student">
<html:hidden property="announcementView.choosedOwnerRole" value="student"/>
</baco:hasRole>
<baco:hasRole role="teacher">
<html:hidden property="announcementView.choosedOwnerRole" value="teacher"/>
</baco:hasRole>
<input type="hidden" name="dispatch" value="removeRole">
<table class="form">
 
<baco:isAdmin>
<tr>
<th>
<bean:message key="announcement.status"/>
</th>
<td>
<html:select property="announcementView.status">
<html:option value="true">
<bean:message key="yes"/>
</html:option>
<html:option value="false">
<bean:message key="no"/>
</html:option>
</html:select>
</td>
</tr>
</baco:isAdmin>
<tr>
<th>
<bean:message key="announcement.courseunit.internal"/>
*
</th>
<td>
<html:select property="announcementView.courseUnitInternal">
<html:option value="true" key="announcement.internal.yes"></html:option>
<html:option value="false" key="announcement.internal.no"></html:option>
</html:select>
</td>
</tr>
<tr>
<th>
<bean:message key="announcement.title"/>
*
</th>
<td>
<html:text styleClass="text" property="announcementView.title" maxlength="250"/>
</td>
</tr>
<tr>
<th>
<bean:message key="announcement.text"/>
*
</th>
<td>
<html:textarea styleClass="textarea" property="announcementView.text"/>
</td>
</tr>
<tr class="buttons">
<td colspan="2">
<input type="button"
onclick="set(this.form,'save');this.form.submit()"
value="<bean:message key="confirm"/>"/>
</td>
</tr>
</table>
</html:form>
</div>
</div>
/impl/src/web/user/courseunits/topnavLoadBlogMonth.jsp
New file
0,0 → 1,18
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="jomm.web.utils.NavPlaceServer" %>
<%@ page import="jomm.web.utils.TopNav" %>
<jsp:useBean id="BlogView" type="pt.estgp.estgweb.domain.views.BlogView" scope="request"/>
<%
request.setAttribute("CourseUnitView",BlogView.getCourseUnitView());
%>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName());
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName());
topNav.addNavPlace("/user/startLoadBlogFromHome.do?id="+BlogView.getId(), "blog","(" + BlogView.getTitle() + ")");
topNav.addNavPlace(null, "month." + BlogView.getMonth() + ".year",""+ BlogView.getYear());
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/courseunits/topnavLoadAnnouncement.jsp
New file
0,0 → 1,21
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%@ page import="pt.estgp.estgweb.domain.views.AnnouncementView" %>
<%
if (request.getAttribute("Announcement") != null)
{
AnnouncementView aV = (AnnouncementView) request.getAttribute("Announcement");
request.setAttribute("CourseUnitView", aV.getCourseUnitView());
}
%>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName());
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName());
topNav.addNavPlace(null, "announcement");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/courseunits/blog.jsp
New file
0,0 → 1,14
<%@ page import="pt.estgp.estgweb.domain.Teacher" %>
<%@ page import="pt.estgp.estgweb.domain.TeacherImpl" %>
<%@ page import="jomm.utils.MessageResources" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<div id="contentCourseUnit">
<jsp:include page="/public/blogs/blog.jsp"/>
</div>
/impl/src/web/user/home/topnavCourseUnitAssignement.jsp
New file
0,0 → 1,15
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<jsp:useBean id="CourseUnitAssignementView" type="pt.estgp.estgweb.domain.views.CourseUnitAssignementView" scope="request"/>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName());
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName());
topNav.addNavPlace("/user/startLoadCourseUnitWorksFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "course.unit.works");
topNav.addNavPlace(null, "courseunit.assignement", CourseUnitAssignementView.getTitle());
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/home/todos.jsp
5,6 → 5,7
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
<%@ page import="jomm.utils.MessageResources" %>
<%@ page import="pt.estgp.estgweb.services.common.IToDo" %>
<%@ page import="pt.estgp.estgweb.services.common.ModuleEnum" %>
<%@ 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" %>
30,7 → 31,7
List<IToDoCat> todos = (List<IToDoCat>) sm.execute(RequestUtils.getRequester(request, response), "CommonServicesGetAllTodosCat", args, names);
%>
 
<div class="block">
<div class="block homebox">
<p>
<bean:message key="intranet.todo"/>
</p>
50,42 → 51,78
<%
for (IToDoCat toDoCat : todos)
{
String imgClose;
String imgOpen;
String style;
String img;
String styleClass;
if (toDoCat.getDescription().equals(ModuleEnum.TodoAnnouncements.getMessageKey()))
{
styleClass = "WARNING";
img = "/imgs/openedboxNeg.gif";
style="";
imgClose = "/imgs/closedboxNeg.gif";
imgOpen = "/imgs/openedboxNeg.gif";
 
}
else if(toDoCat.getDescription().equals(ModuleEnum.Reminders.getMessageKey()) || toDoCat.getDescription().equals(ModuleEnum.CourseUnits.getMessageKey()))
{
styleClass = "";
img = "/imgs/openedbox.gif";
style= "";
imgClose = "/imgs/closedbox.gif";
imgOpen = "/imgs/openedbox.gif";
}
else
{
styleClass = "";
img = "/imgs/closedbox.gif";
style= "visibility:hidden;position:absolute;";
imgClose = "/imgs/closedbox.gif";
imgOpen = "/imgs/openedbox.gif";
}
%>
<li>
<li class="<%=styleClass%>">
<p>
<%=MessageResources.getMessage(request, toDoCat.getDescription())%> (<%=toDoCat.getTotalToDo()%>)
<%=MessageResources.getMessage(request, toDoCat.getDescription())%> (<%=toDoCat.getTotalToDo()%>) <img alt="abrir" src="<%=request.getContextPath() + img%>" onclick="this.src=showOrHide('<%=toDoCat.getDescription()%>','<%=request.getContextPath() + imgClose%>','<%=request.getContextPath() + imgOpen%>')" >
</p>
<ul>
<%
for (IToDo todo : toDoCat.getAllToDos())
{
 
if (todo.getUrl() != null)
 
 
<ul id="<%=toDoCat.getDescription()%>" style="<%=style%>">
<%
for (IToDo todo : toDoCat.getAllToDos())
{
%>
<li>
<a href="<%=request.getContextPath() + todo.getUrl()%>">
 
if (todo.getUrl() != null)
{
%>
<li>
<a href="<%=request.getContextPath() + todo.getUrl()%>">
<font class="<%=styleClass%>">
<%
if(todo.getCatKey() != null)
{
out.print(MessageResources.getMessage(request,todo.getCatKey()) + ":");
}
%>
<%=todo.getLabelInsideCat(request)%></a>
<%=todo.getLabelInsideCat(request)%>
</font>
</a>
 
</li>
<%
</li>
<%
}
else
{
%>
<li>
<%=todo.getLabelInsideCat(request)%>
</li>
<%
}
}
else
{
%>
<li>
<%=todo.getLabelInsideCat(request)%>
</li>
<%
}
}
%>
%>
</ul>
</li>
<%
/impl/src/web/user/home/topnavLoadTodoAnnouncement.jsp
New file
0,0 → 1,10
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "todo.announcement");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/home/topnavLoadBlog.jsp
2,6 → 2,7
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%@ page import="pt.estgp.estgweb.domain.views.BlogView" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
/impl/src/web/user/home/topnavCreateTodoAnnouncement.jsp
New file
0,0 → 1,10
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "submit.todo.announcement");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/home/topnavCourseUnitWorks.jsp
7,7 → 7,7
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName());
topNav.addNavPlace(null, "courseunit",CourseUnitView.getName());
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName());
topNav.addNavPlace(null, "course.unit.works");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/home/courseUnitsAnnouncements.jsp
35,7 → 35,7
%>
 
 
<div class="block">
<div class="block homebox">
<p>
<bean:message key="intranet.course.unit.announcements"/>
</p>
53,25 → 53,29
%>
<ul>
<%
String img = "/imgs/openedbox.gif";
String imgClose = "/imgs/closedbox.gif";
String imgOpen = "/imgs/openedbox.gif";
for (ICourseUnitAnnouncements iCourseUnitAnnouncements : iCourseUnitAnnouncementsList)
{
request.setAttribute("iCourseUnitAnnouncements",iCourseUnitAnnouncements);
%>
<li>
<p>
<html:link action="/user/startLoadCourseUnitFromHome?id=${iCourseUnitAnnouncements.courseUnit.id}">${iCourseUnitAnnouncements.courseUnit.name}</html:link> (<%=iCourseUnitAnnouncements.getAnnouncements().size()%>)
<html:link action="/user/startLoadCourseUnitFromHome?id=${iCourseUnitAnnouncements.courseUnit.id}">${iCourseUnitAnnouncements.courseUnit.name}</html:link> (<%=iCourseUnitAnnouncements.getAnnouncements().size()%>)
<img alt="abrir" src="<%=request.getContextPath() + img%>" onclick="this.src=showOrHide('<%="CourseUnitAnnouncement" + iCourseUnitAnnouncements.getCourseUnit().getId()%>','<%=request.getContextPath() + imgClose%>','<%=request.getContextPath() + imgOpen%>')" >
</p>
<ul>
<%
for (AnnouncementView courseUnitAnnouncement : iCourseUnitAnnouncements.getAnnouncements())
{
%>
<li>
<a href="<%=request.getContextPath()%>/user/startLoadAnnouncementFromHome.do?id=<%=courseUnitAnnouncement.getId()%>"><%=courseUnitAnnouncement.getTitle()%></a>
</li>
<%
}
%>
<ul id="CourseUnitAnnouncement<%=iCourseUnitAnnouncements.getCourseUnit().getId()%>">
<%
for (AnnouncementView courseUnitAnnouncement : iCourseUnitAnnouncements.getAnnouncements())
{
%>
<li>
<a href="<%=request.getContextPath()%>/user/startLoadAnnouncementFromHome.do?id=<%=courseUnitAnnouncement.getId()%>"><%=courseUnitAnnouncement.getTitle()%></a>
</li>
<%
}
%>
</ul>
</li>
<%
/impl/src/web/user/home/topnavCourseUnitStudents.jsp
New file
0,0 → 1,13
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName());
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName());
topNav.addNavPlace(null, "courseunit.students");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/serviceZone/topnavSelectCourse.jsp
New file
0,0 → 1,10
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startServiceZone.do", "intranet.separator.service.zone.back");
topNav.addNavPlace(null, "course.select");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/serviceZone/serviceZone.jsp
58,6 → 58,13
<bean:message key="submit.blog"/>
</html:link>
</li>
<baco:hasRole role="admin,super,services,administrativeCouncil,courseCoordinator,courseDirector,scientificCouncil,pedagogicCouncil">
<li>
<html:link action="/user/startSubmitTodoAnnouncementFromServiceZone">
<bean:message key="submit.todo.announcement"/>
</html:link>
</li>
</baco:hasRole>
 
<baco:isAdmin>
<li>
89,6 → 96,16
<bean:message key="courses"/>
<ul>
<li>
<html:link action="/user/startNewCourseFromServiceZone">
<bean:message key="course.new"/>
</html:link>
</li>
<li>
<html:link action="/user/startSelectCourseFromServiceZone">
<bean:message key="course.select"/>
</html:link>
</li>
<li>
<html:link action="/user/startNewCourseUnitAdminFromServiceZone">
<bean:message key="courseunit.new"/>
</html:link>
100,22 → 117,36
</li>
</ul>
</li>
<li>
<bean:message key="intranet"/>
<ul>
<li>
<html:link target="_blank" action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createIntranetFolders">
<bean:message key="intranet.create.folders"/>
</html:link>
</li>
 
</ul>
</li>
</baco:isAdmin>
 
</ul>
</div>
</td>
<td class="column">
 
<div class="block">
<div class="head">
<bean:message key="intranet.editable.blogs"/>
<bean:message key="intranet.my.announcements"/>
</div>
<%
if (editableBlogs.size() == 0)
if (ownerAnnouncement.size() == 0)
{
%>
<div class="zerofound">
<bean:message key="blog.zero.editable"/>
<bean:message key="announcement.zero.placed"/>
</div>
 
<%
}
else
123,23 → 154,23
%>
<table>
<%
for (BlogView b : editableBlogs)
for (AnnouncementView a : ownerAnnouncement)
{
%>
<tr>
<td>
<a href="<%=request.getContextPath()%>/user/startLoadBlogFromServiceZone.do?id=<%=b.getId()%>"><%=b.getTitle()%>
<a href="<%=request.getContextPath()%>/user/startLoadAnnouncementFromServiceZone.do?id=<%=a.getId()%>"><%=a.getTitle()%>
</a></td>
<td>
<%
String message;
if (b.isStatus())
message = MessageResources.getMessage(request, "blog.status.valid");
else
message = MessageResources.getMessage(request, "blog.status.not.valid");
 
%>
String message;
if(a.isStatus())
message = MessageResources.getMessage(request,"announcement.status.valid");
else
message = MessageResources.getMessage(request,"announcement.status.not.valid");
%>
<%=message%>
<td><%=a.getFormatedUpdateDate()%>
</td>
</tr>
<%
244,82 → 275,51
 
<div class="block">
<div class="head">
<bean:message key="intranet.my.announcements"/>
<bean:message key="intranet.editable.blogs"/>
</div>
<%
if (ownerAnnouncement.size() == 0)
if (editableBlogs.size() == 0)
{
%>
<div class="zerofound">
<bean:message key="announcement.zero.placed"/>
<bean:message key="blog.zero.editable"/>
</div>
 
</div>
<%
 
 
 
 
 
<%
}
else
{
 
 
 
 
 
%>
<table>
<%
for (AnnouncementView a : ownerAnnouncement)
{
%>
<tr>
<td>
<a href="<%=request.getContextPath()%>/user/startLoadAnnouncementFromServiceZone.do?id=<%=a.getId()%>"><%=a.getTitle()%>
</a></td>
<td>
<%
<table>
<%
for (BlogView b : editableBlogs)
{
%>
<tr>
<td>
<a href="<%=request.getContextPath()%>/user/startLoadBlogFromServiceZone.do?id=<%=b.getId()%>"><%=b.getTitle()%>
</a></td>
<td>
<%
String message;
if (b.isStatus())
message = MessageResources.getMessage(request, "blog.status.valid");
else
message = MessageResources.getMessage(request, "blog.status.not.valid");
 
 
 
 
 
String message;
if(a.isStatus())
message = MessageResources.getMessage(request,"announcement.status.valid");
else
message = MessageResources.getMessage(request,"announcement.status.not.valid");
 
 
 
 
 
 
%>
<%=message%>
<td><%=a.getFormatedUpdateDate()%>
</td>
</tr>
%>
<%=message%>
</td>
</tr>
<%
}
%>
</table>
<%
}
%>
</table>
<%
</div>
 
 
 
 
 
}
 
 
 
 
 
%>
</div>
</td>
</tr>
</tbody>
/impl/src/web/user/serviceZone/topnavCreateTodoAnnouncement.jsp
New file
0,0 → 1,10
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startServiceZone.do", "intranet.separator.service.zone.back");
topNav.addNavPlace(null, "submit.todo.announcement");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/serviceZone/topnavLoadTodoAnnouncement.jsp
New file
0,0 → 1,10
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startServiceZone.do", "intranet.separator.service.zone.back");
topNav.addNavPlace(null, "todo.announcement");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/serviceZone/topnavSubmitCourse.jsp
New file
0,0 → 1,17
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="jomm.web.utils.NavPlaceServer"%>
<%@ page import="jomm.web.utils.TopNav" %>
<jsp:useBean id="CourseView" type="pt.estgp.estgweb.domain.views.CourseView" scope="request"/>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startServiceZone.do", "intranet.separator.service.zone.back");
if(CourseView.getId() > 0)
{
topNav.addNavPlace("/user/startSelectCourseFromServiceZone.do", "course.select");
topNav.addNavPlace(null, "course.submit.edit","(" + CourseView.getCode() + ")" + CourseView.getName());
}
else
topNav.addNavPlace(null, "course.submit.new");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/xsd/curso_EC.xml
New file
0,0 → 1,791
<?xml version="1.0" encoding="UTF-8"?>
<curso xmlns="http://www.estgp.pt/xsd/planoestudos/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.estgp.pt/xsd/planoestudos/1.0/ planoestudos.xsd">
<nome>Engenharia Civil</nome>
<area>EG</area>
<semestre id="S1">
<unidade>
<nome>Análise Matemática I</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Álgebra Linear e Geometria</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Física Geral</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Mineralogia e Geologia</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Topografia e Cartografia</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Desenho de Construção</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Unidade de Transferência I</nome>
<area>Engenharias</area>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</semestre>
<!--1º semestre de EC-->
<semestre id="S2">
<unidade>
<nome>Análise Matemática II</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Mecânica</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Impacto e Gestão Ambiental</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Química Geral</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Probabilidades e Estatística</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Hidráulica Geral</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Unidade de Transferência II</nome>
<area>Engenharias</area>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</semestre>
<!--2º semestre de EC-->
<semestre id="S3">
<unidade>
<nome>Análise Matemática III</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Resistência de Materiais I</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Hidráulica Aplicada</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Geologia da Engenharia</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Métodos e Tecnologias da Construção</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Planeamento Regional e Urbano</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Unidade de Transferência III</nome>
<area>Engenharias</area>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</semestre>
<!--\\3º semestre de EC-->
<semestre id="S4">
<perfil nome="Perfil de Estruturas e Construção">
<unidade>
<nome>Análise de Estruturas</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Física das Construções</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Mecânica de Solos</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Abastecimento de Água e Saneamento</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Materiais Construção</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Resistência de Materiais II</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Unidade de Transferência IV</nome>
<area>Engenharias</area>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</perfil>
<perfil nome="Planeamento e Infra-Estruturas">
<unidade>
<nome>Análise de Estruturas</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Física das Construções</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Mecânica de Solos</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Abastecimento de Água e Saneamento</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Materiais Construção</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Hidrologia e Infra-Estruturas Hidráulicas</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Unidade de Transferência IV</nome>
<area>Engenharias</area>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</perfil>
</semestre>
<semestre id="S5">
<perfil nome="Perfil de Estruturas e Construção">
<unidade>
<nome>Betão Armado</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Organização de Obras e Estaleiros</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Vias de Comunicação I</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Conservação e Reabilitação</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Estruturas Metálicas</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Engenharia Sísmica</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Unidade de Transferência V</nome>
<area>Engenharias</area>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</perfil>
<perfil nome="Planeamento e Infra-Estruturas">
<unidade>
<nome>Betão Armado</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Organização de Obras e Estaleiros</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Vias de Comunicação I</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Urbanização e Transportes</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Sistemas de Informação Geográfica</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Administração Pública e Gestão Municipal</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Unidade de Transferência V</nome>
<area>Engenharias</area>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</perfil>
</semestre>
<semestre id="S6">
<perfil nome="Perfil de Estruturas e Construção">
<unidade>
<nome>Qualidade na Construção</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Qualidade na Construção</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Fundações e Estruturas de Suporte</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Betão Armado e Pré-Esforçado</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Direcção de Obras</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Economia e Gestão de Empreendimentos</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Projecto de Construção</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Unidade de Transferência VI</nome>
<area>Engenharias</area>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</perfil>
<perfil nome="Planeamento e Infra-Estruturas">
<unidade>
<nome>Qualidade na Construção</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Qualidade na Construção</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Equipamentos Regionais e Urbanos</nome>
<area>Engenharias</area>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Vias de Comunicação II</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Gestão e Avaliação de Sistemas e Projectos</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Projecto de Planeamento/Infra-Estruturas</nome>
<area>Engenharias</area>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade>
<nome>Unidade de Transferência VI</nome>
<area>Engenharias</area>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</perfil>
</semestre>
</curso>
/impl/src/xsd/planoestudos.xsd
1,77 → 1,82
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2006 sp2 U (http://www.altova.com) by Jorge Machado (BN) -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.estgp.pt/xsd/planoestudos/1.0/"
targetNamespace="http://www.estgp.pt/xsd/planoestudos/1.0/" elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xsd:element name="curso">
<xsd:annotation>
<xsd:documentation></xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nome" type="xsd:string"/>
<xsd:element name="area">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="CH"/>
<xsd:enumeration value="CE"/>
<xsd:enumeration value="DG"/>
<xsd:enumeration value="EG"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="semestre" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="unidade" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nome" type="xsd:string"/>
<xsd:element name="area" type="xsd:string"/>
<xsd:element name="totalHoras" type="xsd:int"/>
<xsd:element name="horasContacto">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="T" type="xsd:int" minOccurs="0"/>
<xsd:element name="TP" type="xsd:int" minOccurs="0"/>
<xsd:element name="P" type="xsd:int" minOccurs="0"/>
<xsd:element name="PL" type="xsd:int" minOccurs="0"/>
<xsd:element name="PD" type="xsd:int" minOccurs="0"/>
<xsd:element name="OT" type="xsd:int" minOccurs="0"/>
<xsd:element name="E" type="xsd:int" minOccurs="0"/>
<xsd:element name="S" type="xsd:int" minOccurs="0"/>
<xsd:element name="TC" type="xsd:int" minOccurs="0"/>
<xsd:element name="O" type="xsd:int" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ECTS" type="xsd:int"/>
<xsd:element name="obs" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="S1"/>
<xsd:enumeration value="S2"/>
<xsd:enumeration value="S3"/>
<xsd:enumeration value="S4"/>
<xsd:enumeration value="S5"/>
<xsd:enumeration value="S6"/>
<xsd:enumeration value="S7"/>
<xsd:enumeration value="S8"/>
<xsd:enumeration value="S9"/>
<xsd:enumeration value="S10"/>
<xsd:enumeration value="S11"/>
<xsd:enumeration value="S12"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.estgp.pt/xsd/planoestudos/1.0/" targetNamespace="http://www.estgp.pt/xsd/planoestudos/1.0/" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xsd:element name="curso">
<xsd:annotation>
<xsd:documentation/>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nome" type="xsd:string"/>
<xsd:element name="area">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="CH"/>
<xsd:enumeration value="CE"/>
<xsd:enumeration value="DG"/>
<xsd:enumeration value="EG"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="semestre" maxOccurs="unbounded">
<xsd:complexType>
<xsd:choice>
<xsd:element name="unidade" type="unidadeType" maxOccurs="unbounded"></xsd:element>
<xsd:element name="perfil" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="unidade" type="unidadeType" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="nome" use="required" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
<xsd:attribute name="id" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="S1"/>
<xsd:enumeration value="S2"/>
<xsd:enumeration value="S3"/>
<xsd:enumeration value="S4"/>
<xsd:enumeration value="S5"/>
<xsd:enumeration value="S6"/>
<xsd:enumeration value="S7"/>
<xsd:enumeration value="S8"/>
<xsd:enumeration value="S9"/>
<xsd:enumeration value="S10"/>
<xsd:enumeration value="S11"/>
<xsd:enumeration value="S12"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="unidadeType">
<xsd:sequence>
<xsd:element name="nome" type="xsd:string"/>
<xsd:element name="area" type="xsd:string"/>
<xsd:element name="totalHoras" type="xsd:int"/>
<xsd:element name="horasContacto">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="T" type="xsd:int" minOccurs="0"/>
<xsd:element name="TP" type="xsd:int" minOccurs="0"/>
<xsd:element name="P" type="xsd:int" minOccurs="0"/>
<xsd:element name="PL" type="xsd:int" minOccurs="0"/>
<xsd:element name="PD" type="xsd:int" minOccurs="0"/>
<xsd:element name="OT" type="xsd:int" minOccurs="0"/>
<xsd:element name="E" type="xsd:int" minOccurs="0"/>
<xsd:element name="S" type="xsd:int" minOccurs="0"/>
<xsd:element name="TC" type="xsd:int" minOccurs="0"/>
<xsd:element name="O" type="xsd:int" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ECTS" type="xsd:float"/>
<xsd:element name="obs" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
/impl/build.properties
59,6 → 59,12
gen.dir =gen
gen.dir.java =${gen.dir}/java
 
intranet.setup.folders.filename=mkcursos.exe
intranet.setup.folders.file.src=etc/data/intranet/${intranet.setup.folders.filename}
build.dir.relative.intranet.setup.folders=/etc/data/intranet
build.dir.relative.intranet.setup.folders.file=${build.dir.relative.intranet.setup.folders}/${intranet.setup.folders.filename}
build.dir.intranet.setup.folders.file=${build.dir.classes}${build.dir.relative.intranet.setup.folders}
 
#conf files
app.properties.filename=app.properties
app.properties=${conf.dir}/${app.properties.filename}
/impl/etc/data/intranet/mkcursos.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/impl/etc/data/intranet/cursos.txt
New file
0,0 → 1,13
Gestao.Controlo.Qualidade 1 rpval
Gestao.Recursos.Humanos 1 asss
Mecanica 1 erelvas
Operacoes.Unitarias 1 luizrogo
Quimica.Analitica.Instrumental 2 luizrogo rutep
Seguranca.Trabalho 1 cameron
Unidade.Transferencia.IV 2 rutep cameron
Instrumentacao.Controlo.Processos 2 sousa luisilva
Manutencao.Fiabilidade 1 rpval
Metrologia.Normalizacao 1 rutep
Projecto 2 pbrito cameron
Sistemas.Gestao.Ambiental 1 fneves
Sistemas.Gestao.Qualidade.Auditorias 1 rpval
/impl/build.xml
246,6 → 246,7
<include name="**/*.properties"/>
<include name="**/*.txt"/>
<include name="**/*.xml"/>
<include name="**/*.exe"/>
</fileset>
</copy>
<copy todir="${build.dir.war}" overwrite="true">
302,6 → 303,8
<copy overwrite="true" todir="${jdbc.properties.build}" file="${jdbc.properties}"/>
<copy overwrite="true" todir="${ldap.properties.build}" file="${ldap.properties}"/>
<copy overwrite="true" todir="${build.dir.classes}" file="${log4j.properties}"/>
<mkdir dir="${build.dir.intranet.setup.folders.file}"/>
<copy overwrite="true" todir="${build.dir.intranet.setup.folders.file}" file="${intranet.setup.folders.file.src}"/>
</target>
 
<target name="replaceFiltersConfigurationFiles">
331,7 → 334,8
<replacefilter token="@site.url@" value="${site.url}"/>
<replacefilter token="@ws.siges.wsdl@" value="${ws.siges.wsdl}"/>
<replacefilter token="@ws.siges.target.namespace@" value="${ws.siges.target.namespace}"/>
 
<replacefilter token="@intranet.setup.folders.file@" value="${build.dir.relative.intranet.setup.folders.file}"/>
<replacefilter token="@intranet.setup.folders.filename@" value="${intranet.setup.folders.filename}"/>
</replace>
<replace file="${build.dir.classes}/${log4j.properties.filename}">
<replacefilter token="@log.file@" value="${log.file}"/>