Subversion Repositories bacoAlunos

Compare Revisions

Regard whitespace Rev 300 → Rev 344

/impl/importRoutines.xml
14,6 → 14,7
<target name="students">
<java classname="pt.estgp.estgweb.services.sigesimports.ImportStudentsService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
 
 
<target name="jobs">
<java classname="pt.estgp.estgweb.services.jobs.JobDeamon" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
</project>
/impl/conf/language/MessageResourcesCommon.properties
9,6 → 9,7
search.next=Próxima Página
search.previous=Página Anterior
search.see.more=ver mais
search.see.more.content=Clique aqui para ver mais acerca deste conteudo
search.type.phrase=Frase Exacta
search.type.any=Algumas Palavras
search.type.all=Todas as Palavras
/impl/conf/language/MessageResourcesCourse.properties
22,11 → 22,12
course.director=Director de Curso
course.studies.plan=Plano de Estudos (XML válido no planoEstudos.xsd)
course.studies.plan.not.available=Não disponivel
course.courseunit.program.objectives.todo=Unidade em Falta (programa ou objectivos)
course.courseunit.program.objectives.todo={0} Unidades em Falta (programa)
course.externalSite=Site Externo
course.studies.plan=Plano de Estudos
course.directed.coordinated.courses=Gestão de Unidades Curriculares
course.directed.coordinated.courses.updated.success={0} unidades curriculares actualizadas com sucesso
 
 
course.B=Bacharlato
course.L=Lincenciatura
course.M=Mestrado
40,6 → 41,15
course.Es=CET's
 
course.units.no.program=Unidades sem programa entregue
course.units.with.program.not.checked=Unidades com programa por validar
course.units.with.program.checked=Unidades com programa válido
course.valid.program=Programa Validado
course.directed.coordinated=Cursos que coordena e/ou dirige (Apenas os coordenadores tem permissão para alterar o estado de um programa)
course.directed.courses=Cursos que dirige
course.coordinated.courses=Cursos que coordena
course.unit.directed=Unidades Curriculares
course.unit.coordinated=Unidades Coordenadas
 
 
 
48,3 → 58,4
 
 
 
 
/impl/conf/language/MessageResourcesProfile.properties
7,6 → 7,11
 
profile=Perfil Pessoal
 
 
profile.bad.profile.teacher.iregular.user.class=Existe um problema com o seu perfil. Aparentemente o papel de professor que lhe foi atribuido não foi reconhecido pelo sistema central. Por favor dirija-se ao centro informatico e reporte o problema para que a situação seja corrigida. Pedimos desculpa pelo incómodo.
profile.bad.profile.student.iregular.user.class=Existe um problema com o seu perfil. Aparentemente o papel de estudante que lhe foi atribuido não foi reconhecido pelo sistema central. Por favor dirija-se ao centro informatico e reporte o problema para que a situação seja corrigida. Pedimos desculpa pelo incómodo.
 
user.exists=Já existe um utilizador com o {0} escolhido
#Degrees
profile.scholar.degree.notset=Não disponivel
profile.scholar.degree=Escolaridade
/impl/conf/language/MessageResources.properties
47,6 → 47,7
 
error.no.cookies=Por favor ligue os cookies do seu browser para poder continuar a usar este sistema. Obrigado
error.500=Ocorreu um erro interno
error.503=O serviço de monmento encontra-se indisponivel, por favor volte a tentar mais tarde.
error.404=A página solicitada não está disponível
error.404.explain=Caro utilizador, a página que pretende visualizar não se encontra disponível neste endereço.<br>O erro pode ter ocorrido por uma das seguintes razões:
error.404.item.1=Escreveu mal o endereço (URL) do documento a que pretende aceder
90,6 → 91,7
user.role.worker=Funcionário
user.role.invited=Convidado
user.role.services=Serviços
user.role.servicesPrograms=Gestão de Programas Curriculares
user.role.administrativeCouncil=Conselho Directivo
user.role.representativeCouncil=Assembleia de Representantes
user.role.scientificCouncil=Conselho Científico
/impl/conf/language/MessageResourcesCourseUnits.properties
24,6 → 24,7
courseunit.zero.units=Nenhuma Unidade Curricular
courseunit.objectives.todo=Peenchimento dos objectivos da unidade
courseunit.program.todo=Upload do programa da unidade
courseunit.program.objectives.todo=Programa e/ou Objectivos
courseunit.question.todo=Dúvida
courseunit.assignement.todo=Trabalho por entregar
course.unit.works=Trabalhos
/impl/conf/WEB-INF/struts/struts-courses.xml
48,8 → 48,22
<forward name="submit" path="page.submit.course.from.service.zone"/>
</action>
 
<action path="/user/startLoadCoursesProgramsFromHome" forward="/user/courseControllerFromHome.do?dispatch=loadCoursesPrograms&amp;from=Home"/>
<action path="/user/startLoadDirectedCoordinatedCoursesFromHome" forward="/user/courseControllerFromHome.do?dispatch=loadDirectedCoordininatedCourses&amp;from=Home"/>
<action path="/user/courseControllerFromHome"
type="pt.estgp.estgweb.web.controllers.courses.CoursesController"
name="CourseForm"
scope="request"
parameter="dispatch"
validate="false"
input="page.separators.serviceZone">
<forward name="load.courses.programs" path="page.courses.programs.from.home"/>
<forward name="load.directed.coordinated.courses" path="page.directed.coordinated.courses.from.home"/>
<forward name="home" path="page.separators.home"/>
</action>
 
 
</action-mappings>
 
</struts-config>
/impl/conf/WEB-INF/struts/tiles-courses.xml
34,8 → 34,20
</definition>
 
<definition name="page.directed.coordinated.courses.from.home" extends="page.separators.home">
<put name="title" value="Ver Cursos e Unidades"/>
<put name="topnav" value="/user/courses/topnavDirectedCoordinatedCourses.jsp"/>
<put name="body" value="/user/courses/directedCoordinatedCourses.jsp"/>
</definition>
<definition name="page.courses.programs.from.home" extends="page.separators.home">
<put name="title" value="Ver Cursos e Unidades"/>
<put name="topnav" value="/user/courses/topnavDirectedCoordinatedCourses.jsp"/>
<put name="body" value="/user/courses/directedCoordinatedCourses.jsp"/>
</definition>
 
 
 
 
 
 
</tiles-definitions>
/impl/conf/WEB-INF/struts/struts-default.xml
21,6 → 21,7
 
<global-forwards>
<forward name="welcome" path="/Welcome.do"/>
<forward name="error503" path="/error503.do"/>
<forward name="error500" path="/error500.do"/>
<forward name="error404" path="/error404.do"/>
<forward name="error401" path="/error401.do"/>
47,6 → 48,7
<action path="/error401" forward="page.error.401"/>
<action path="/error404" forward="page.error.404"/>
<action path="/error500" forward="page.error.500"/>
<action path="/error503" forward="page.error.503"/>
 
<!--Layout Forward-->
<action path="/layout"
/impl/conf/WEB-INF/struts/tiles-default.xml
324,6 → 324,10
<put name="title" value="internal error" />
<put name="body" value="/errors/500.jsp" />
</definition>
<definition name="page.error.503" extends="base.error.definition">
<put name="title" value="indisponivel" />
<put name="body" value="/errors/503.jsp" />
</definition>
<definition name="page.error.401" extends="base.error.definition">
<put name="title" value="not authorized" />
<put name="body" value="/errors/401.jsp" />
/impl/conf/WEB-INF/tlds/baco.tld
121,6 → 121,20
</attribute>
</tag>
<tag>
<name>isRealOwner</name>
<tagclass>pt.estgp.estgweb.web.tags.RealOwnerTag</tagclass>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>property</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
<tag>
<name>isValid</name>
<tagclass>pt.estgp.estgweb.web.tags.IsValidTag</tagclass>
<attribute>
/impl/conf/WEB-INF/web.xml
294,6 → 294,10
<error-code>500</error-code>
<location>/error500.do</location>
</error-page>
<error-page>
<error-code>503</error-code>
<location>/error503.do</location>
</error-page>
 
<!--TLDS-->
<jsp-config>
/impl/conf/app.properties
8,7 → 8,7
 
 
email.local.suffix=estgp.pt
email.server=mail.estgp.pt
email.server=localhost
email.user=
email.password=
email.from=bacodev@estgp.pt
49,7 → 49,7
module.reminders=true
module.intranet=true
module.profile=true
module.sms=true
module.sms=false
 
##################################################
# SMS
75,12 → 75,12
ionline.pass=baco
ionline.user=Baco_web
 
server.estgp=http://www.estgp.pt
estgp.encoding=ISO-8859-1
server.estgp.start.path=/testes/nova_web
server.estgp=http://localhost:8180
#estgp.encoding=ISO-8859-1
server.estgp.start.path=/static
 
#server.estgp=http://www.estgp.pt/testes/nova_web
#estgp.encoding=UTF-8
estgp.encoding=UTF-8
 
##server.estgp=http://localhost:8080/estgweb
server.estgweb=http://www.estgp.pt/testes/estgweb
106,6 → 106,7
user.courseCoordinator=courseCoordinator
user.courseDirector=courseDirector
user.identifiersManagers=identifiersManager
user.servicesPrograms=servicesPrograms
 
user.role.00=all
user.role.01=admin
133,9 → 134,9
user.role.23=courseDirector
user.role.24=identifiersManager
user.role.25=identifiersCollectionCreator
user.role.26=servicesPrograms
 
 
 
#########################################################################
#
# Modules
145,7 → 146,7
#########################################################################
# Announcements
#
announcements.text.summary.size=250
announcements.text.summary.size=500
announcements.text.summary.size.small=100
announcements.max.visible=10
announcements.top.flash.news.timeout.miliseconds=7000
171,7 → 172,7
announcements.automatic.validation.role.5=services
 
studentAssociation.auto.validation.targets=student,oldStudent,futureStudent,erasmusStudent
studentAssociation.auto.validation.types=news,top.flash.news
studentAssociation.auto.validation.types=news
 
services.auto.validation.targets=student,oldStudent,futureStudent,erasmusStudent,teacher,teacher.eg,teacher.dg,teacher.ce
services.auto.validation.types=news,top.flash.news,bottom.flash.news,todo
194,7 → 195,8
 
 
#role images for announcements
announcement.default.img=/imgs/rolesIcons/nd.gif
announcement.default.img=/imgs/rolesIcons/estg.gif
role.student.img=/imgs/rolesIcons/student.gif
role.admin.img=/imgs/rolesIcons/estg.gif
role.sudentAssociation.img=/imgs/rolesIcons/ae.gif
role.administrativeCouncil.img=/imgs/rolesIcons/c_directivo.gif
/impl/conf/template/email/courseUnitAnnouncement_pt.txt
1,4 → 1,4
# 0 : Course Unit Name
# 0 : Course Unit Name
# 1 : Title
# 2 : Text
# 3 : Teacher
7,7 → 7,7
#
Caro estudante
 
Um novo anuncio foi publicado na unidade:
Um novo anúncio foi publicado na unidade:
{0}
 
{1}
/impl/conf/template/assignement/Assignement.txt
1,7 → 1,10
Unidade Curricular:{0}
Unidade Curricular:{0}
 
Titulo:{1}
 
Data de Entrega: {2}
 
Descrição:
 
{3}
 
/impl/conf/berserk/sd.xml
833,6 → 833,42
</filterChains>
</service>
<service>
<name>LoadDirectedCoordinatedCoursesForUserInSession</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.DirectedCoordinatedUnitsService</implementationClass>
<description>Load coordinated directed courses</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadForUserSession</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="DirectorsCoordinators"/>
</filterChains>
</service>
<service>
<name>LoadCoursesProgramsForServices</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.DirectedCoordinatedUnitsService</implementationClass>
<description>Load coordinated directed courses</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadForServices</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="Services"/>
</filterChains>
</service>
<service>
<name>UpdateDirectedCoordinatedCoursesForUserInSession</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.DirectedCoordinatedUnitsService</implementationClass>
<description>Load coordinated directed courses</description>
<isTransactional>true</isTransactional>
<defaultMethod>update</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="DirectorsCoordinators"/>
</filterChains>
</service>
<service>
<name>LoadTeachedUnits</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.LoadTeachedUnitsService</implementationClass>
<description>Load teacher units</description>
/impl/conf/berserk/fcd.xml
35,6 → 35,20
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass>
</filterChain>
<filterChain>
<name>DirectorsCoordinators</name>
<expression>AuthenticatedUsers &amp;&amp; (RoleUsers("courseDirector") || RoleUsers("courseCoordinator"))</expression>
<description>Validate if a user is coordinator or director</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass>
</filterChain>
<filterChain>
<name>Services</name>
<expression>AuthenticatedUsers &amp;&amp; RoleUsers("servicesPrograms")</expression>
<description>Validate if a user is coordinator or director</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass>
</filterChain>
<filterChain>
<name>IdentifiersManager</name>
<expression>AuthenticatedUsers &amp;&amp; RoleUsers("identifiersManager")</expression>
<description>Admins Control Chain</description>
/impl/src/java/jomm/utils/StreamsUtils.java
53,6 → 53,4
stream.close();
out.close();
}
 
 
}
/impl/src/java/jomm/utils/AutoFillArrayList.java
New file
0,0 → 1,63
package jomm.utils;
 
import org.apache.log4j.Logger;
 
import java.util.ArrayList;
 
/**
* @author Jorge Machado
* @date 24/Out/2008
* @see jomm.utils
*/
public class AutoFillArrayList<CLAZZ> extends ArrayList<CLAZZ>
{
 
private static final Logger logger = Logger.getLogger(AutoFillArrayList.class);
 
Class c;
 
public AutoFillArrayList(Class c)
{
super();
// this.c = c;
for(int i=0;i<600;i++)
{
try
{
super.add((CLAZZ) c.newInstance());
}
catch (InstantiationException e)
{
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
catch (IllegalAccessException e)
{
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
 
// public CLAZZ get(int n)
// {
// while(super.size()-1 < n)
// {
// super.add(null);
// }
// if(super.get(n)==null)
// try
// {
// super.add(n, (CLAZZ) c.newInstance());
// }
// catch (InstantiationException e)
// {
// logger.error(e,e);
// }
// catch (IllegalAccessException e)
// {
// logger.error(e,e);
// }
// return super.get(n);
// }
 
 
}
/impl/src/java/jomm/utils/StringsUtils.java
50,6 → 50,14
{
finalFormatedText.append("&nbsp;&nbsp;&nbsp;&nbsp;");
}
else if (text.charAt(i) == '<')
{
finalFormatedText.append("&lt;");
}
else if (text.charAt(i) == '>')
{
finalFormatedText.append("&gt;");
}
else
{
finalFormatedText.append(text.charAt(i));
59,6 → 67,31
return finalFormatedText.toString();
}
 
public static String getEscapeHtmlText(String text)
{
if (text == null || text.trim().length() == 0)
return "";
 
StringBuilder finalFormatedText = new StringBuilder();
boolean newLine = true;
for (int i = 0; i < text.length(); i++)
{
if (text.charAt(i) == '<')
{
finalFormatedText.append("&lt;");
}
else if (text.charAt(i) == '>')
{
finalFormatedText.append("&gt;");
}
else
{
finalFormatedText.append(text.charAt(i));
}
}
return finalFormatedText.toString();
}
 
public static boolean checkLetters09AZazHiffenUnderScore(String candidate)
{
if (candidate == null)
/impl/src/java/jomm/dao/impl/AbstractDao.java
5,12 → 5,14
import jomm.dao.IDomainObjectDao;
import jomm.dao.utils.HibernateUtils;
import org.hibernate.*;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import static org.hibernate.criterion.Restrictions.eq;
import pt.estgp.estgweb.domain.DomainObject;
import pt.estgp.estgweb.domain.DomainSerializableObject;
import pt.estgp.estgweb.domain.Teacher;
 
import java.io.Serializable;
import java.sql.SQLException;
324,6 → 326,20
}
 
/**
*
* @param o
* @return
*/
public CLAZZ narrow(CLAZZ o)
{
if (o instanceof HibernateProxy)
{
return (CLAZZ) ((HibernateProxy)o).getHibernateLazyInitializer().getImplementation();
}
return o;
}
 
/**
* Used by the base DAO classes but here for your modification Load object
* matching the given key and return it.
*
/impl/src/java/pt/estgp/estgweb/utils/DatesUtils.java
49,6 → 49,20
return getFormatedImportYear(firstYearStr,secondYearStr,SIGES_importFinalFormat);
}
 
public static String getSemestre()
{
MyCalendar mc = new MyCalendar();
int month = mc.getMonth();
if((month > 8 && month <=12) || (month >= 1 && month <=2))
{
return "S1";
}
else
{
return "S2";
}
}
 
public static String getImportYearIntranet()
{
MyCalendar mc = new MyCalendar();
/impl/src/java/pt/estgp/estgweb/utils/CourseViewComparator.java
New file
0,0 → 1,39
package pt.estgp.estgweb.utils;
 
import jomm.utils.StringComparator;
import pt.estgp.estgweb.domain.views.CourseView;
 
/**
*
* @author User
*/
public class CourseViewComparator implements java.util.Comparator<CourseView>
{
 
 
private static CourseViewComparator instance = null;
 
public static CourseViewComparator getInstance()
{
if(instance == null)
{
instance = new CourseViewComparator();
}
return instance;
}
 
/** Creates a new instance of LongComparator */
private CourseViewComparator() {
}
 
 
public int compare(CourseView s1, CourseView s2)
{
int compareResult = s2.getName().compareTo(s1.getName());
if(compareResult > 0)
return -1;
else if(compareResult < 0)
return 1;
return 0;
}
}
/impl/src/java/pt/estgp/estgweb/Globals.java
33,6 → 33,8
public static final int SEARCH_BEST_FRAGMENTS_MAX_FRAGMENTS = ConfigProperties.getIntProperty("search.best.fragments.max.fragments");
 
public static final String ALL_ROLE = ConfigProperties.getProperty("user.super");
public static final String SERVICES_PROGRAMS_ROLE = ConfigProperties.getProperty("user.servicesPrograms");
 
public static final String ACTUAL_RELATIVE_PATH = "ACTUAL_RELATIVE_PATH";
public static final String ADMIN_ROLE = ConfigProperties.getProperty("user.admin");
public static final String SUPER_USER_ROLE = ConfigProperties.getProperty("user.super");
/impl/src/java/pt/estgp/estgweb/services/courses/CoursesCommonServices.java
8,6 → 8,8
import pt.estgp.estgweb.services.courseunits.CourseUnitsCommonServices;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.DatesUtils;
import org.apache.log4j.Logger;
 
import java.util.*;
96,21 → 98,36
coordinatorCourses = new HashSet<Course>();
if(directorCourses == null)
directorCourses = new HashSet<Course>();
coordinatorCourses = new HashSet<Course>(coordinatorCourses);
directorCourses = new HashSet<Course>(directorCourses);
coordinatorCourses.removeAll(directorCourses);
directorCourses.addAll(coordinatorCourses);
for(Course course: directorCourses)
{
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadMissingObjectivesOrProgramGivenCourse(course.getId());
for(CourseUnit c: courseUnits)
int missing = DaoFactory.getCourseUnitDaoImpl().countMissingProgramGivenCourse(course.getId());
if(missing > 0)
{
DefaultToDo defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "course.courseunit.program.objectives.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
DefaultToDo defaultToDo = new DefaultToDo(course.getName(),null,null, "course.courseunit.program.objectives.todo",""+missing,"/user/startLoadDirectedCoordinatedCoursesFromHome.do#" + course.getId());
todos.add(defaultToDo);
}
}
}
}
if(userSession.getUser().hasRole(Globals.SERVICES_PROGRAMS_ROLE))
{
List<Course> courses = DaoFactory.getCourseDaoImpl().findAll(DatesUtils.getImportYear());
for(Course course: courses)
{
int missing = DaoFactory.getCourseUnitDaoImpl().countMissingProgramGivenCourse(course.getId());
if(missing > 0)
{
DefaultToDo defaultToDo = new DefaultToDo(course.getName(),null,null, "course.courseunit.program.objectives.todo",""+missing,"/user/startLoadCoursesProgramsFromHome.do#" + course.getId());
todos.add(defaultToDo);
}
}
}/*This method is invoked from object creation*/
return todos;
}/*This method is invoked from object creation*/
}
 
public void adviseNew(DomainObject object)
{
/impl/src/java/pt/estgp/estgweb/services/courseunits/CourseUnitsCommonServices.java
88,30 → 88,30
 
if(userSession.getUser() != null && userSession.getUser() instanceof Teacher)
{
HashMap<Long,Long> doneProgramCodes = new HashMap<Long,Long>();
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadMissingObjectives(userSession.getUser().getId());
// HashMap<Long,Long> doneProgramCodes = new HashMap<Long,Long>();
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadMissingObjectivesOrPrograms(userSession.getUser().getId());
for(CourseUnit c: courseUnits)
{
DefaultToDo defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "courseunit.objectives.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
DefaultToDo defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "courseunit.program.objectives.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
todos.add(defaultToDo);
if(c.getProgramStreamId() == null || c.getProgramStreamId().length() == 0)
{
doneProgramCodes.put(c.getId(),c.getId());
defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "courseunit.program.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
todos.add(defaultToDo);
// if(c.getProgramStreamId() == null || c.getProgramStreamId().length() == 0)
// {
//// doneProgramCodes.put(c.getId(),c.getId());
// defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "courseunit.program.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
// todos.add(defaultToDo);
// }
}
}
 
courseUnits = DaoFactory.getCourseUnitDaoImpl().loadMissingPrograms(userSession.getUser().getId());
for(CourseUnit c: courseUnits)
{
if(doneProgramCodes.get(c.getId()) == null) //is not in missing objectives units
{
doneProgramCodes.put(c.getId(),c.getId());
DefaultToDo defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "courseunit.program.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
todos.add(defaultToDo);
}
}
// courseUnits = DaoFactory.getCourseUnitDaoImpl().loadMissingPrograms(userSession.getUser().getId());
// for(CourseUnit c: courseUnits)
// {
// if(doneProgramCodes.get(c.getId()) == null) //is not in missing objectives units
// {
// doneProgramCodes.put(c.getId(),c.getId());
// DefaultToDo defaultToDo = new DefaultToDo(c.getName(),null,c.getCourseName(), "courseunit.program.todo","/user/startLoadCourseUnitFromHome.do?id=" + c.getId());
// todos.add(defaultToDo);
// }
// }
 
List<CourseUnitQuestion> courseUnitQuestions = DaoFactory.getCourseUnitQuestionDaoImpl().loadMissingQuestions(userSession.getUser().getId());
for(CourseUnitQuestion c: courseUnitQuestions)
/impl/src/java/pt/estgp/estgweb/services/courseunits/DirectedCoordinatedCourses.java
New file
0,0 → 1,82
package pt.estgp.estgweb.services.courseunits;
 
import jomm.utils.AutoFillArrayList;
import pt.estgp.estgweb.domain.views.CourseView;
 
import java.util.List;
 
/**
* @author Jorge Machado
* @date 24/Out/2008
* @see pt.estgp.estgweb.services.courseunits
*/
public class DirectedCoordinatedCourses
{
private List<CourseView> directedCourses;
private List<CourseView> coordinatedCourses;
private List<CourseView> merge;
private int updated;
private int missing;
 
public DirectedCoordinatedCourses()
{
System.out.println("");
}
 
public List<CourseView> getDirectedCourses()
{
return directedCourses;
}
 
public void setDirectedCourses(List<CourseView> directedCourses)
{
this.directedCourses = directedCourses;
}
 
public List<CourseView> getCoordinatedCourses()
{
return coordinatedCourses;
}
 
public void setCoordinatedCourses(List<CourseView> coordinatedCourses)
{
this.coordinatedCourses = coordinatedCourses;
}
 
public int getUpdated()
{
return updated;
}
 
public void setUpdated(int updated)
{
this.updated = updated;
}
 
 
public int getMissing()
{
return missing;
}
 
public void setMissing(int missing)
{
this.missing = missing;
}
 
 
public void setMerge(List<CourseView> merge)
{
this.merge = merge;
}
 
public List<CourseView> getMerge()
{
if(merge == null)
merge = new AutoFillArrayList<CourseView>(CourseView.class);
return merge;
}
 
 
 
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/DirectedCoordinatedUnitsService.java
New file
0,0 → 1,155
package pt.estgp.estgweb.services.courseunits;
 
import pt.estgp.estgweb.domain.Course;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.CourseView;
import pt.estgp.estgweb.utils.CourseViewComparator;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
import java.util.List;
 
/**
* @author Jorge Machado
* @date 2/Jun/2008
* @see pt.estgp.estgweb.services.courseunits
*/
public class DirectedCoordinatedUnitsService implements IService
{
public DirectedCoordinatedCourses loadForUserSession(UserSession userSession)
{
return loadForUser(userSession.getUser().getId(), userSession);
}
 
public DirectedCoordinatedCourses loadForUser(long teacherId, UserSession userSession)
{
Teacher t = DaoFactory.getTeacherDaoImpl().load(teacherId);
Set<Course> directorCourses = t.getDirectorCourses();
Set<Course> coordinatorCourses = t.getCoordinatorCourses();
 
HashMap<Course, Boolean> map = new HashMap<Course, Boolean>();
 
DirectedCoordinatedCourses directedCoordinatedCourses = new DirectedCoordinatedCourses();
directedCoordinatedCourses.setCoordinatedCourses(new ArrayList<CourseView>());
directedCoordinatedCourses.setDirectedCourses(new ArrayList<CourseView>());
directedCoordinatedCourses.setMerge(new ArrayList<CourseView>());
for (Course c : directorCourses)
{
CourseView cV = new CourseView(c, true);
directedCoordinatedCourses.getDirectedCourses().add(cV);
if (map.get(c) == null)
{
directedCoordinatedCourses.getMerge().add(cV);
map.put(c, true);
}
}
for (Course c : coordinatorCourses)
{
CourseView cV = new CourseView(c, true);
directedCoordinatedCourses.getCoordinatedCourses().add(cV);
if (map.get(c) == null)
{
directedCoordinatedCourses.getMerge().add(cV);
map.put(c, true);
}
}
java.util.Collections.sort(directedCoordinatedCourses.getMerge(), CourseViewComparator.getInstance());
fill(directedCoordinatedCourses.getMerge());
return directedCoordinatedCourses;
}
 
public DirectedCoordinatedCourses loadForServices(UserSession userSession)
{
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByName(DatesUtils.getImportYear());
 
List<CourseView> courseViews = new ArrayList<CourseView>();
for(Course c : courses)
{
CourseView cV = new CourseView(c, true);
courseViews.add(cV);
}
fill(courseViews);
DirectedCoordinatedCourses directedCoordinatedCourses = new DirectedCoordinatedCourses();
directedCoordinatedCourses.setMerge(courseViews);
return directedCoordinatedCourses;
}
 
private void fill(List<CourseView> courseViews)
{
for (CourseView cV : courseViews)
{
cV.setCourseUnitsWithNoProgramS1(new ArrayList<CourseUnitView>());
cV.setCourseUnitsWithNoProgramS2(new ArrayList<CourseUnitView>());
cV.setCourseUnitsWithProgramCheckedS1(new ArrayList<CourseUnitView>());
cV.setCourseUnitsWithProgramCheckedS2(new ArrayList<CourseUnitView>());
cV.setCourseUnitsWithProgramNotCheckedS1(new ArrayList<CourseUnitView>());
cV.setCourseUnitsWithProgramNotCheckedS2(new ArrayList<CourseUnitView>());
for (CourseUnitView cUV : cV.getCourseUnits())
{
if (cUV.getProgramStreamId() == null)
if (cUV.getSemestre().equals("S1"))
cV.getCourseUnitsWithNoProgramS1().add(cUV);
else
cV.getCourseUnitsWithNoProgramS2().add(cUV);
else if (cUV.isValidProgram())
if (cUV.getSemestre().equals("S1"))
cV.getCourseUnitsWithProgramCheckedS1().add(cUV);
else
cV.getCourseUnitsWithProgramCheckedS2().add(cUV);
else if (cUV.getSemestre().equals("S1"))
cV.getCourseUnitsWithProgramNotCheckedS1().add(cUV);
else
cV.getCourseUnitsWithProgramNotCheckedS2().add(cUV);
}
}
}
 
public DirectedCoordinatedCourses update(DirectedCoordinatedCourses directedCoordinatedCourses, UserSession userSession)
{
int counter = 0;
for(CourseView courseView: directedCoordinatedCourses.getMerge())
{
if(courseView.getId()>0)
{
Course c = DaoFactory.getCourseDaoImpl().load(courseView.getId());
if(userSession.getUser().getId() == c.getCoordinator().getId())
{
counter+=updateList(courseView.getCourseUnitsWithProgramCheckedS1());
counter+=updateList(courseView.getCourseUnitsWithProgramCheckedS2());
counter+=updateList(courseView.getCourseUnitsWithProgramNotCheckedS1());
counter+=updateList(courseView.getCourseUnitsWithProgramNotCheckedS2());
}
}
}
directedCoordinatedCourses.setUpdated(counter);
return directedCoordinatedCourses;
}
 
private int updateList(List<CourseUnitView> views)
{
int counter = 0;
for(CourseUnitView courseUnitView: views)
{
if(courseUnitView != null && courseUnitView.getId()>0)
{
if(courseUnitView.getProgramStreamId() != null && courseUnitView.getProgramStreamId().length() > 0)
{
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().load(courseUnitView.getId());
if(courseUnit.isValidProgram() != courseUnitView.isValidProgram())
{
courseUnit.setValidProgram(courseUnitView.isValidProgram());
counter++;
}
}
}
}
return counter;
}
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitWorksBackupService.java
31,10 → 31,9
*/
/**
* @author Jorge Machado
*
*
* <p/>
* <p/>
* Created at 17/Out/2003 , 23:45:24
*
*/
public class CreateCourseUnitWorksBackupService implements IService
{
109,6 → 108,7
 
/**
* In case of student create a backup with student deliverables in actual year subscribed units, in case of teacher create a backup of all deliverables in actual year teached units
*
* @param userSession
* @return
* @throws ServiceException
124,8 → 124,8
 
 
/**
* In case of student create a backup with student deliverables subscribed units, in case of teacher create a backup of all deliverables of teached units
*
* In case of student create a backup with student deliverables subscribed units, in case of teacher create a backup of all deliverables of teached units
* @param userSession
* @return
* @throws ServiceException
192,7 → 192,6
}
 
 
 
private String createStudentActualYearBackup(Student s, UserSession userSession) throws ServiceException
{
List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadSubscribedImportYearUnits(s.getId(),DatesUtils.getImportYear());
210,7 → 209,6
}
 
 
 
private String createStudentBackup(Student s, UserSession userSession) throws ServiceException
{
List<CourseUnit> units = new ArrayList<CourseUnit>(s.getSubscribedUnits());
228,8 → 226,6
}
 
 
 
 
private String createStudentBackup(List<CourseUnit> courseUnits, Student s, UserSession userSession) throws ServiceException
{
String tmpName = BytesUtils.generateHexKey();
350,7 → 346,7
{
try
{
FilesUtils.copy(iRepositoryFile.getInput(),deliverDir + "/version" + StringsUtils.normalizeResourceName(iRepositoryFile.getName()));
FilesUtils.copy(iRepositoryFile.getInput(), deliverDir + "/version" + getResourceFileName(iRepositoryFile.getName()));
}
catch (IOException e)
{
360,6 → 356,18
}
}
 
public String getResourceFileName(String resourceName)
{
String extension = FilesUtils.getExtension(resourceName);
if (extension != null)
{
resourceName = resourceName.substring(0, resourceName.length() - extension.length());
}
if (extension == null)
extension = ".unknown";
return resourceName + extension;
}
 
private void createAssignementCopy(CourseUnitAssignement assignement, String assignementDir, UserSession userSession) throws IOException
{
String fileContent = buildAssignementTemplate(assignement);
370,14 → 378,12
if(assignement.getRepositoryStream() != null && assignement.getRepositoryStream().length() > 0)
{
IRepositoryFile iRepositoryFile = repositoryService.load(assignement.getRepositoryStream(),userSession);
FilesUtils.copy(iRepositoryFile.getInput(),assignementDir + "/" + StringsUtils.normalizeResourceName(iRepositoryFile.getName()));
FilesUtils.copy(iRepositoryFile.getInput(), assignementDir + "/" + getResourceFileName(iRepositoryFile.getName()));
}
}
 
public String buildAssignementTemplate(CourseUnitAssignement assignement)
{
String assignementDir = StringsUtils.normalizeResourceName(assignement.getTitle()) + assignement.getId();
new File(assignementDir).mkdirs();
String[] args = new String[]
{
assignement.getCourseUnit().getName(),
391,7 → 397,6
}
 
 
 
public static void main(String[] args) throws ServiceException
{
AbstractDao.getCurrentSession().beginTransaction();
/impl/src/java/pt/estgp/estgweb/services/common/impl/DefaultToDo.java
19,6 → 19,7
private String catKey = null;
private String from;
private String to;
private String catArg0;
 
 
public DefaultToDo(String description, String url)
43,6 → 44,15
this.catKey = catKey;
this.url = url;
}
public DefaultToDo(String description, String to, String from, String catKey,String catArg0, String url)
{
this.description = description;
this.to = to;
this.from = from;
this.catKey = catKey;
this.url = url;
this.catArg0 = catArg0;
}
 
public String getDescription()
{
95,7 → 105,10
{
if(getFrom() == null || getFrom().length() == 0)
{
if(catArg0 == null)
return "(" + getCatKey() + ")"+ "\t" + getDescription();
else
return "(" + getCatKey() + ")"+ "\t" + getDescription();
}
else
{
119,4 → 132,14
{
this.to = to;
}
 
public String getCatArg0()
{
return catArg0;
}
 
public void setCatArg0(String catArg0)
{
this.catArg0 = catArg0;
}
}
/impl/src/java/pt/estgp/estgweb/services/common/IToDo.java
13,6 → 13,7
public String getUrl();
public String getDescription();
public String getCatKey();
public String getCatArg0();
public String getFrom();
public String getTo();
public String getLabel(HttpServletRequest request);
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportStudentsService.java
149,7 → 149,9
while (iter.hasNext())
{
CourseUnit courseUnit = iter.next();
if(((StudentImpl)student).isLocalRemovedUnit(courseUnit))
//In case of a comming proxy
StudentImpl sImpl = (StudentImpl) DaoFactory.getStudentDaoImpl().narrow(student);
if(sImpl.isLocalRemovedUnit(courseUnit))
iter.remove();
}
 
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportTeachersService.java
1,28 → 1,35
package pt.estgp.estgweb.services.sigesimports;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.TeacherImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.common.CommonServicesManager;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.logresults.ILogMessages;
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
import pt.estgp.estgweb.services.logresults.ILogMessages;
import pt.estgp.estgweb.services.common.CommonServicesManager;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.*;
import pt.ipportalegre.siges.web.services.*;
import org.apache.log4j.Logger;
import pt.ipportalegre.siges.web.services.ArrayOfDecimal;
import pt.ipportalegre.siges.web.services.Disciplina;
import pt.ipportalegre.siges.web.services.Docente;
import pt.ipportalegre.siges.web.services.SiGesWEB;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.*;
import javax.xml.namespace.QName;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.MalformedURLException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
 
import jomm.dao.impl.AbstractDao;
 
import javax.xml.namespace.QName;
 
/**
* @author Jorge Machado
* @date 11/May/2008
65,7 → 72,16
DaoFactory.getTeacherDaoImpl().save(t);
newUser = true;
}
logger.info("Importing: (" + t.getUsername() + ") " + t.getName());
try
{
persist(d, t);
}
catch (Exception e)
{
logger.error(e, e);
throw e;
}
if (newUser)
CommonServicesManager.getInstance().adviseNew(t);
else
94,23 → 110,33
*
* @param d docente
* @param t teacher
* @throws Exception .
*/
private void persist(Docente d, Teacher t)
private void persist(Docente d, Teacher t) throws Exception
{
try
{
if(t.getName() == null || t.getName().length() == 0)
t.setName(d.getNomeFuncionarioInt());
//Email instituicao
t.setEmail(d.getEmail());
if(d.getEmail() != null && d.getEmail().endsWith(Globals.EMAIL_LOCAL_SUFFIX))
{
int atIndex = d.getEmail().indexOf("@");
if(atIndex > 0)
t.setUsername(d.getEmail().substring(0,atIndex));
 
}
t.setSigesCode(d.getCodigoFuncionario().intValue());
if(t.getAddress() == null || t.getAddress().length() == 0)
t.setAddress(d.getMorada());
if(t.getZip() == null || t.getZip().length() == 0)
t.setZip("" + d.getCodigoPostal().intValue());
if(t.getBi() == null || t.getBi().length() == 0)
t.setBi(d.getNumeroBi());
t.setEmployerName(d.getNomeFuncionario());
t.setAcademicName(d.getNomeAcademico());
if(t.getBirthDate() == null || t.getBirthDate().getTime() == 0)
t.setBirthDate(d.getDataNascimento().toGregorianCalendar().getTime());
//Desta forma as relacoes antigas sao ignoradas cria-se uma lista nova e atribui-se ao Teacher, o Hibernate faz resto e apaga as chaves estrangeiras antigas
if (d.getDisciplinas() == null || d.getDisciplinas().getDisciplina() == null || d.getDisciplinas().getDisciplina().size() == 0)
133,7 → 159,9
while (iter.hasNext())
{
CourseUnit courseUnit = iter.next();
if(((TeacherImpl)t).isLocalRemovedUnit(courseUnit))
//In case of a comming proxy
TeacherImpl tImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(t);
if (tImpl.isLocalRemovedUnit(courseUnit))
iter.remove();
}
if(t.getTeachedUnits() != null)
157,7 → 185,14
t.setTeachedUnits(units);
}
}
catch (Exception e)
{
logger.error(e, e);
throw e;
}
 
}
 
/**
* Testar por aqui poi requer Super Role e assim e' autmatico
*
/impl/src/java/pt/estgp/estgweb/services/profile/EditUserService.java
8,6 → 8,8
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.expceptions.FieldException;
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException;
import org.apache.log4j.Logger;
 
public class EditUserService implements IService
18,6 → 20,21
 
public UserView run(UserView userView, String userToCreate, UserSession userSession) throws ServiceException
{
// if (userView.getUsername() == null || user.getPassword() == null || user.getUsername().length() < 4 || user.getPassword().length() < 4)
// throw new FieldException("bad.fields");
 
 
User u = DaoFactory.getUserDaoImpl().loadByUsername(userView.getUsername());
if (u != null && u.getId() != userView.getId())
{
throw new AlreadyExistsException(AlreadyExistsException.ALREADY_EXISTS_USERNAME);
}
u = DaoFactory.getUserDaoImpl().loadByUsername(userView.getEmail());
if (u != null && u.getId() != userView.getId())
{
throw new AlreadyExistsException(AlreadyExistsException.ALREADY_EXISTS_EMAIL);
}
 
User user;
if (userView.getId() > 0)
user = DaoFactory.getUserDaoImpl().get(userView.getSerializable());
/impl/src/java/pt/estgp/estgweb/services/profile/SearchUserService.java
4,8 → 4,11
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.domain.views.UserView;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
import org.apache.log4j.Logger;
import org.hibernate.criterion.Criterion;
 
import java.util.List;
import java.util.ArrayList;
16,6 → 19,7
 
public List<UserView> run(String textToSearch,String typeToSearch)
{
 
List<User> users =DaoFactory.getUserDaoImpl().findUsers(textToSearch,typeToSearch);
if(users == null)
return null;
/impl/src/java/pt/estgp/estgweb/services/data/RepositoryService.java
1,10 → 1,7
package pt.estgp.estgweb.services.data;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.RepositoryFileImpl;
import pt.estgp.estgweb.domain.RepositoryFileVersionImpl;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
import pt.estgp.estgweb.services.data.impl.DefaultRepositoryFile;
16,6 → 13,10
import java.util.List;
import java.util.ArrayList;
 
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.Document;
 
/**
* @author Jorge Machado
* @date 4/Jun/2008
25,12 → 26,14
{
 
/**
*
* @param stream
* @param contentType
* @param size
* @param name
* @param description
* @param stream .
* @param contentType .
* @param size .
* @param name .
* @param description .
* @param extension .
* @param accessControl .
* @param userSession .
* @return the identifier to retrieve the document
*/
public String storeRepositoryFile(InputStream stream, String contentType, String extension,int size, String name, String description, ResourceAccessControlEnum accessControl, UserSession userSession)
49,47 → 52,43
repositoryFileVersion.setContentType(contentType);
repositoryFileVersion.setExtension(extension);
 
Document dom = createXMLdescription(repositoryFileVersion);
RepositoryManager.storeDescription(dom, repositoryFileVersion.getId());
RepositoryManager.store(stream,repositoryFileVersion.getId());
return new StringBuilder().append(repositoryFile.getId()).toString();
}
 
 
 
/**
*
* @param stream
* @param contentType
* @param size
* @param name
* @param description
* @return the identifier to retrieve the document
* @param stream .
* @param contentType .
* @param size .
* @param name .
* @param description .
* @param identifier .
* @param extension .
* @param accessControl .
*/
public void updateRepositoryFile(String identifier, InputStream stream, String contentType, String extension, int size, String name, String description, ResourceAccessControlEnum accessControl)
{
 
RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().get(Long.parseLong(identifier));
 
repositoryFile.setSaveDate(new Date());
repositoryFile.setAccessControl(accessControl.getKey());
 
 
 
RepositoryFileVersionImpl repositoryFileVersion = createVersion(repositoryFile);
repositoryFileVersion.setName(name);
repositoryFileVersion.setSize(size);
repositoryFileVersion.setDescription(description);
repositoryFileVersion.setContentType(contentType);
repositoryFileVersion.setExtension(extension);
 
Document dom = createXMLdescription(repositoryFileVersion);
RepositoryManager.storeDescription(dom, repositoryFileVersion.getId());
RepositoryManager.store(stream,repositoryFileVersion.getId());
}
 
 
 
/**
*
* @param identifier
* @param identifier .
* @return a view of a document
*/
public RepositoryFileImpl loadView(String identifier)
103,8 → 102,8
}
 
/**
*
* @param identifier
* @param identifier .
* @param userSession .
* @return a view with an inputStream for document
*/
public IRepositoryFile load(String identifier,UserSession userSession)
119,8 → 118,8
}
 
/**
*
* @param identifier
* @param identifier .
* @param userSession .
* @return a view with an inputStream for document
*/
public List<IRepositoryFile> loadVersions(String identifier,UserSession userSession)
141,8 → 140,9
 
/**
* Create a new File Version
* @param repositoryFile
* @return
*
* @param repositoryFile .
* @return .
*/
private RepositoryFileVersionImpl createVersion(RepositoryFileImpl repositoryFile)
{
155,4 → 155,126
DaoFactory.getRepositoryFileVersionDaoImpl().save(repositoryFileVersion);
return repositoryFileVersion;
}
 
public static Document createXMLdescription(RepositoryFileVersionImpl repositoryFile)
{
org.dom4j.Document dom = DocumentFactory.getInstance().createDocument();
Element rootElement = DocumentFactory.getInstance().createElement("repositoryFileVersion");
dom.setRootElement(rootElement);
rootElement.addAttribute("id", "" + repositoryFile.getId());
 
Element saveDate = DocumentFactory.getInstance().createElement("saveDate");
saveDate.setText(""+DatesUtils.getStringFromDateForFilename(repositoryFile.getSaveDate()));
 
Element name = DocumentFactory.getInstance().createElement("name");
name.setText("" + repositoryFile.getName());
 
Element contentType = DocumentFactory.getInstance().createElement("contentType");
contentType.setText(""+repositoryFile.getContentType());
 
Element extension = DocumentFactory.getInstance().createElement("extension");
extension.setText("" + repositoryFile.getExtension());
 
Element size = DocumentFactory.getInstance().createElement("sizeKb");
size.setText("" + repositoryFile.getSizeKb());
 
Element description = DocumentFactory.getInstance().createElement("description");
description.setText(repositoryFile.getDescription());
 
rootElement.add(saveDate);
rootElement.add(name);
rootElement.add(contentType);
rootElement.add(extension);
rootElement.add(size);
rootElement.add(description);
 
//Repository File Generics
Element repositoryFileElem = DocumentFactory.getInstance().createElement("repositoryFile");
rootElement.add(repositoryFileElem);
 
repositoryFileElem.addAttribute("id", "" + repositoryFile.getRepositoryFile().getId());
Element rSaveDate = DocumentFactory.getInstance().createElement("saveDate");
rSaveDate.setText(""+DatesUtils.getStringFromDateForFilename(repositoryFile.getRepositoryFile().getSaveDate()));
 
Element rUpdateDate = DocumentFactory.getInstance().createElement("updateDate");
rUpdateDate.setText(""+DatesUtils.getStringFromDateForFilename(repositoryFile.getRepositoryFile().getUpdateDate()));
 
 
Element accessControl = DocumentFactory.getInstance().createElement("accessControl");
accessControl.setText(repositoryFile.getRepositoryFile().getAccessControl());
 
Element deleted = DocumentFactory.getInstance().createElement("deleted");
deleted.setText("" + repositoryFile.getRepositoryFile().isDeleted());
 
repositoryFileElem.add(rSaveDate);
repositoryFileElem.add(rUpdateDate);
repositoryFileElem.add(accessControl);
repositoryFileElem.add(deleted);
 
Element owner = DocumentFactory.getInstance().createElement("owner");
repositoryFileElem.add(owner);
owner.addAttribute("id", "" + repositoryFile.getRepositoryFile().getOwner().getId());
 
if (repositoryFile.getRepositoryFile().getOwner().getName() != null)
{
Element oName = DocumentFactory.getInstance().createElement("name");
oName.setText(repositoryFile.getRepositoryFile().getOwner().getName());
owner.add(oName);
}
 
if (DocumentFactory.getInstance().createElement("roles") != null)
{
Element oRoles = DocumentFactory.getInstance().createElement("roles");
oRoles.setText(repositoryFile.getRepositoryFile().getOwner().getRoles());
owner.add(oRoles);
}
 
Element oClass = DocumentFactory.getInstance().createElement("class");
oClass.setText(repositoryFile.getRepositoryFile().getOwner().getClass().getSimpleName());
 
 
owner.add(oClass);
if (repositoryFile.getRepositoryFile().getOwner() instanceof User)
{
Element oUsername = DocumentFactory.getInstance().createElement("username");
oUsername.setText(((User) repositoryFile.getRepositoryFile().getOwner()).getUsername());
owner.add(oUsername);
 
if (((User) repositoryFile.getRepositoryFile().getOwner()).getEmail() != null)
{
Element oEmail = DocumentFactory.getInstance().createElement("email");
oEmail.setText(((User) repositoryFile.getRepositoryFile().getOwner()).getEmail());
owner.add(oEmail);
}
 
if (((User) repositoryFile.getRepositoryFile().getOwner()).getOutEmail() != null)
{
Element outEmail = DocumentFactory.getInstance().createElement("outEmail");
outEmail.setText(((User) repositoryFile.getRepositoryFile().getOwner()).getOutEmail());
owner.add(outEmail);
}
 
if (((User) repositoryFile.getRepositoryFile().getOwner()).getBi() != null)
{
Element biEmail = DocumentFactory.getInstance().createElement("bi");
biEmail.setText(((User) repositoryFile.getRepositoryFile().getOwner()).getBi());
owner.add(biEmail);
}
 
 
if (repositoryFile.getRepositoryFile().getOwner() instanceof Teacher)
{
Element code = DocumentFactory.getInstance().createElement("teacherCode");
code.setText("" + ((Teacher) repositoryFile.getRepositoryFile().getOwner()).getSigesCode());
owner.add(code);
}
if (repositoryFile.getRepositoryFile().getOwner() instanceof Student)
{
Element code = DocumentFactory.getInstance().createElement("studentCode");
code.setText("" + ((Student) repositoryFile.getRepositoryFile().getOwner()).getSigesCode());
owner.add(code);
}
}
return dom;
}
}
/impl/src/java/pt/estgp/estgweb/services/data/ResourceManager.java
1,12 → 1,12
package pt.estgp.estgweb.services.data;
 
import jomm.utils.StreamsUtils;
import org.dom4j.Document;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.Dom4jUtil;
 
import java.io.*;
 
import jomm.utils.StreamsUtils;
import org.apache.log4j.Logger;
 
/**
* @author Jorge Machado
* @date 28/Mai/2008
15,14 → 15,25
public class ResourceManager
{
 
 
 
 
public static final int DOCS_IN_PATH = 1000;
public static final int DOCS_FIRST_DIR_LEN = 20;
public static final int DOCS_IN_PATH_LEVEL1 = DOCS_IN_PATH * DOCS_IN_PATH;
public static final int DOCS_IN_PATH_LEVEL2 = DOCS_IN_PATH * DOCS_IN_PATH * DOCS_IN_PATH;
public static final int DOCS_FIRST_DIR_LEN = 10;
 
public static void saveResource(InputStream stream, String resourcePath, long id) throws IOException
{
StreamsUtils.inputStream2File(stream, new File(Globals.DATA_DIR + resourcePath + getDocumentPathById(id)));
}
 
public static void saveResource(Document dom, String resourcePath, long id) throws IOException
{
new File(Globals.DATA_DIR + resourcePath + getDocumentPathById(id)+".xml").getParentFile().mkdirs();
Dom4jUtil.write(dom,Globals.DATA_DIR + resourcePath + getDocumentPathById(id)+".xml");
}
 
public static InputStream getResource(String resourcePath, long id) throws FileNotFoundException
{
return new FileInputStream(Globals.DATA_DIR + resourcePath + getDocumentPathById(id));
49,14 → 60,33
 
public static String getDocumentPathById(long id)
{
char[] dir = new char[DOCS_FIRST_DIR_LEN];
setAllChars('0', dir);
long dirNumber = id / DOCS_IN_PATH;
dirNumber = dirNumber * DOCS_IN_PATH;
String dirNumberStr = "" + dirNumber;
copyCharsToArray(dir, dirNumberStr);
dirNumberStr = new String(dir);
return "/" + dirNumberStr + "/" + id;
char[] dir0 = new char[DOCS_FIRST_DIR_LEN];
setAllChars('0', dir0);
char[] dir1 = new char[DOCS_FIRST_DIR_LEN];
setAllChars('0', dir1);
char[] dir2 = new char[DOCS_FIRST_DIR_LEN];
setAllChars('0', dir2);
 
long dirNumber0 = id / DOCS_IN_PATH_LEVEL2;
long dirNumber1 = id / DOCS_IN_PATH_LEVEL1;
long dirNumber2 = id / DOCS_IN_PATH;
 
 
dirNumber0 = dirNumber0 * DOCS_IN_PATH_LEVEL2;
dirNumber1 = dirNumber1 * DOCS_IN_PATH_LEVEL1;
dirNumber2 = dirNumber2 * DOCS_IN_PATH;
 
 
String dirNumberStr0 = "" + dirNumber0;
String dirNumberStr1 = "" + dirNumber1;
String dirNumberStr2 = "" + dirNumber2;
copyCharsToArray(dir0, dirNumberStr0);
copyCharsToArray(dir1, dirNumberStr1);
copyCharsToArray(dir2, dirNumberStr2);
dirNumberStr0 = new String(dir0);
dirNumberStr1 = new String(dir1);
dirNumberStr2 = new String(dir2);
return "/" + dirNumberStr0 + "/" + dirNumberStr1 + "/" + dirNumberStr2 + "/" + id;
}
 
}
/impl/src/java/pt/estgp/estgweb/services/data/RepositoryManager.java
1,6 → 1,7
package pt.estgp.estgweb.services.data;
 
import org.apache.log4j.Logger;
import org.dom4j.Document;
import pt.estgp.estgweb.domain.Image;
 
import java.io.ByteArrayInputStream;
32,6 → 33,20
return false;
}
 
public static boolean storeDescription(Document dom, long identifier)
{
try
{
ResourceManager.saveResource(dom, RESOURCE_PATH, identifier);
return true;
}
catch (IOException e)
{
logger.error(e,e);
}
return false;
}
 
public static InputStream load(long identifier)
{
try
/impl/src/java/pt/estgp/estgweb/services/data/CreateDescriptionsXML.java
New file
0,0 → 1,34
package pt.estgp.estgweb.services.data;
 
import jomm.dao.impl.AbstractDao;
import pt.estgp.estgweb.domain.dao.impl.RepositoryFileDao;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.RepositoryFileVersion;
import pt.estgp.estgweb.domain.RepositoryFileVersionImpl;
 
import java.util.List;
 
import org.dom4j.Document;
import org.apache.log4j.Logger;
 
/**
* @author Jorge Machado
* @date 23/Out/2008
* @see pt.estgp.estgweb.services.data
*/
public class CreateDescriptionsXML
{
private static final Logger logger = Logger.getLogger(CreateDescriptionsXML.class);
public static void main(String[]args)
{
AbstractDao.getCurrentSession().beginTransaction();
List<RepositoryFileVersion> repoList = AbstractDao.getCurrentSession().createCriteria(RepositoryFileVersion.class).list();
for(RepositoryFileVersion repositoryFileVersion: repoList)
{
logger.info("Creating description for file:" + repositoryFileVersion.getId() + ":" + repositoryFileVersion.getName());
Document dom = RepositoryService.createXMLdescription((RepositoryFileVersionImpl) repositoryFileVersion);
RepositoryManager.storeDescription(dom, repositoryFileVersion.getId());
}
AbstractDao.getCurrentSession().getTransaction().commit();
}
}
/impl/src/java/pt/estgp/estgweb/services/announcements/CreateAnnouncementService.java
131,6 → 131,8
logger.info("ImageSmall form announcement:" + announcementView.getId() + "do not exist!");
}
}
if(a.getOwner().getId() != userSession.getUser().getId())
announcementView.setChoosedOwnerRole(a.getChoosedOwnerRole());
announcementView.persistViewInObject(a);
if(announcementView.getTargetRoles() == null || announcementView.getTargetRoles().size() == 0)
a.setTargetRoles(ALL_ROLE);
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/TeacherDaoImpl.java
3,7 → 3,9
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.CourseUnitImpl;
import pt.estgp.estgweb.domain.TeacherImpl;
import static org.hibernate.criterion.Restrictions.*;
import org.hibernate.exception.GenericJDBCException;
 
import java.util.List;
 
17,6 → 19,10
{
private TeacherDaoImpl(){}
 
// protected Class getReferenceClass() {
// return TeacherImpl.class;
// }
 
public static TeacherDaoImpl getInstance()
{
if (myInstance == null)
26,8 → 32,15
 
public Teacher loadBySigesCode(int sigesCode)
{
try
{
return (Teacher) createCriteria().add(eq("sigesCode",sigesCode)).uniqueResult();
}
catch(GenericJDBCException e)
{
throw e;
}
}
 
public Teacher loadByBi(String bi)
{
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/UserDaoImpl.java
1,27 → 1,20
package pt.estgp.estgweb.domain.dao.impl;
 
import jomm.dao.DaoException;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Hibernate;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import static org.hibernate.criterion.Restrictions.*;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.SimpleExpression;
import org.hibernate.criterion.Order;
import org.apache.log4j.Logger;
 
 
import java.util.List;
import java.util.Date;
import java.io.Serializable;
 
import static org.hibernate.criterion.Restrictions.*;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.Announcement;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
 
import java.io.Serializable;
import java.util.Date;
import java.util.List;
 
/**
* @author Jorge Machado
* @date 28/Fev/2008
66,6 → 59,7
throw new DaoException(e);
}
}
 
/**
* Used by the base DAO classes but here for your modification Load object
* matching the given key and return it.
143,9 → 137,8
 
public List<User> findUsers (String textToSearch,String typeToSearch)
{
Criteria criteria=null;
Criteria criteria;
if(typeToSearch!=null && typeToSearch.trim().length()!=0)
{
try
{
criteria = createCriteria(Class.forName(typeToSearch));
153,30 → 146,28
catch (ClassNotFoundException e)
{
logger.error(e,e);
return null;
}
}
else
{
criteria=createCriteria();
Criterion textSearch = DaoUtils.createSearchQuery(textToSearch, SearchTypeEnum.parse(typeToSearch), "name", "username");
Criterion text2Search = DaoUtils.createSearchQuery(textToSearch, SearchTypeEnum.parse(typeToSearch), "email");
Criterion fields = or(textSearch, text2Search);
return criteria.add(fields)
.addOrder(Order.desc("name"))
.list();
}
Criterion name= or(like("name","%"+textToSearch+"%"),like("name","%"+textToSearch+"%"));
Criterion username = or(like("username", "%" + textToSearch + "%"), like("username", "%" + textToSearch + "%"));
Criterion email = or(like("email", "%" + textToSearch + "%"), like("email", "%" + textToSearch + "%"));
criteria.add(or(or(name,username),email))
.addOrder(Order.desc("name"));
 
return criteria.list();
}
 
 
 
public Serializable save(User obj)
{
try {
try
{
obj.setSaveDate(new Date());
return super.save(obj);
}
catch (HibernateException e) {
catch (HibernateException e)
{
throw new DaoException(e);
}
 
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/AnnouncementDaoImpl.java
131,8 → 131,25
{
coSubTargets = eq("subTargets", subTarget);
}
 
if (type != null)
{
String[] types = type.split(",");
if(types.length == 1)
criteria.add(eq("type", type));
else if(types.length > 1)
{
Criterion orCriteron = null;
for(String typeAux: types)
{
if(orCriteron == null)
orCriteron = eq("type", typeAux);
else
orCriteron = or(orCriteron,eq("type",typeAux));
}
criteria.add(orCriteron);
}
}
 
if (!internal)
criteria.add(eq("internal", false));
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitDaoImpl.java
183,6 → 183,7
.add(eq("importYear", DatesUtils.getImportYear()))
.add((or(isNull("objectives"),eq("objectives",""))))
.createAlias("teachers", "th")
.add(eq("semestre",DatesUtils.getSemestre()))
.add(eq("th.id",teacherId))
.list();
}
194,17 → 195,31
.add(eq("importYear", DatesUtils.getImportYear()))
.add((or(isNull("programStreamId"),eq("programStreamId",""))))
.createAlias("teachers", "th")
.add(eq("semestre",DatesUtils.getSemestre()))
.add(eq("th.id",teacherId))
.list();
}
 
public List<CourseUnit> loadMissingObjectivesOrPrograms(long teacherId)
{
//todo falta a projeccao do teacher id
return createCriteria()
.add(eq("importYear", DatesUtils.getImportYear()))
.add(or(or(isNull("objectives"),eq("objectives","")),or(isNull("programStreamId"),eq("programStreamId",""))))
.add(eq("semestre",DatesUtils.getSemestre()))
.createAlias("teachers", "th")
.add(eq("th.id",teacherId))
.list();
}
 
 
public List<CourseUnit> loadMissingObjectivesGivenCourse(long courseId)
{
return createCriteria()
.createAlias("course", "c")
.add(eq("c.id",courseId))
.add(eq("importYear", DatesUtils.getImportYear()))
.add(eq("semestre",DatesUtils.getSemestre()))
.add((or(isNull("objectives"),eq("objectives",""))))
.list();
}
215,6 → 230,7
.createAlias("course", "c")
.add(eq("c.id",courseId))
.add(eq("importYear", DatesUtils.getImportYear()))
.add(eq("semestre",DatesUtils.getSemestre()))
.add((or(isNull("programStreamId"),eq("programStreamId",""))))
.list();
}
225,12 → 241,22
.createAlias("course", "c")
.add(eq("c.id",courseId))
.add(eq("importYear", DatesUtils.getImportYear()))
.add(eq("semestre",DatesUtils.getSemestre()))
.add((or(or(isNull("objectives"),eq("objectives","")),or(isNull("programStreamId"),eq("programStreamId","")))))
.list();
}
 
public int countMissingProgramGivenCourse(long courseId)
{
return loadMissingProgramGivenCourse(courseId).size();
}
 
 
 
 
 
 
 
 
 
}
/impl/src/java/pt/estgp/estgweb/domain/dao/DaoUtils.java
43,4 → 43,34
}
return c;
}
 
public static Criterion createSearchQuery(String query, SearchTypeEnum searchTypeEnum, String field1)
{
Criterion c = null;
if (searchTypeEnum == SearchTypeEnum.ExactPhrase)
c = like(field1, "%" + query + "%");
else if (searchTypeEnum == SearchTypeEnum.AllWords)
{
String[] fields = query.split(" ");
for (String field : fields)
{
if (c == null)
c = like(field1, "%" + field + "%");
else
c = and(c, like(field1, "%" + field + "%"));
}
}
else
{
String[] fields = query.split(" ");
for (String field : fields)
{
if (c == null)
c = like(field1, "%" + field + "%");
else
c = or(c,like(field1, "%" + field + "%"));
}
}
return c;
}
}
/impl/src/java/pt/estgp/estgweb/domain/TeacherImpl.java
34,8 → 34,15
setScholarDegree(Globals.PROFILE_SCHOLAR_DEGREE_SUPERIOR);
}
 
public String getManagedRole() {
return TEACHER_ROLE;
public String getManagedRole()
{
List<String> roles = new ArrayList<String>();
if(getDirectorCourses() != null && getDirectorCourses().size() > 0)
roles.add(Globals.COURSE_DIRECTOR_ROLE);
if(getCoordinatorCourses() != null && getCoordinatorCourses().size() > 0)
roles.add(Globals.COURSE_COORDINATOR_ROLE);
roles.add(TEACHER_ROLE);
return RoleManager.getSerialRoles(roles);
}
 
public List<Course> getTeachedCoursesView()
/impl/src/java/pt/estgp/estgweb/domain/UserManagedRoleImpl.java
4,7 → 4,9
 
import java.util.*;
 
import pt.estgp.estgweb.utils.RoleManager;
 
 
public abstract class UserManagedRoleImpl extends UserImpl
{
 
42,14 → 44,23
*/
public String getRoles()
{
String managedRole = getManagedRole();
if(managedRole != null)
{
if(super.getRoles() == null)
super.setRoles(getManagedRole());
else if(super.getRoles().indexOf(getManagedRole()) < 0)
else
{
List<String> roles = RoleManager.getRolesFromSerial(managedRole);
for(String role:roles)
{
if(super.getRoles().indexOf(role) < 0)
{
addRole(getManagedRole());
}
}
}
}
return super.getRoles();
}
 
}
/impl/src/java/pt/estgp/estgweb/domain/views/BlogPostView.java
1,6 → 1,7
package pt.estgp.estgweb.domain.views;
 
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.RoleManager;
import org.apache.log4j.Logger;
8,6 → 9,8
import java.util.List;
import java.io.Serializable;
 
import jomm.utils.StringsUtils;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
26,6 → 29,9
private String text;
private Image image;
private GenericUser owner;
private String ownerUsername;
private String ownerName;
private String ownerEmail;
private boolean status;
private BlogPost blogPost;
private long blogId;
45,6 → 51,9
this.status = blogPost.isStatus();
this.id = blogPost.getId();
this.owner = blogPost.getOwner();
ownerUsername = owner.getUsername();
ownerName = owner.getName();
ownerEmail = owner.getEmail();
this.blogId = blogPost.getBlog().getId();
this.internal = blogPost.getBlog().isInternal();
}
114,6 → 123,11
return title;
}
 
public String getFormatedTitle()
{
return StringsUtils.getEscapeHtmlText(title);
}
 
public void setTitle(String title)
{
this.title = title;
124,6 → 138,11
return text;
}
 
public String getFormatedText()
{
return StringsUtils.getFormatedText(text);
}
 
public void setText(String text)
{
this.text = text;
176,20 → 195,19
 
public String getOwnerEmail()
{
if (owner instanceof User)
return ((User) owner).getEmail();
else
return null;
return ownerEmail;
}
 
public String getOwnerUsername()
{
if (owner instanceof User)
return ((User) owner).getUsername();
else
return null;
return ownerUsername;
}
 
public String getOwnerName()
{
return ownerName;
}
 
public boolean isInternal()
{
return internal;
/impl/src/java/pt/estgp/estgweb/domain/views/AnnouncementView.java
14,6 → 14,8
import org.apache.log4j.Logger;
import jomm.utils.StringsUtils;
 
import javax.servlet.http.HttpServletRequest;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
46,6 → 48,9
private boolean status = true;
private boolean internal;
private GenericUser owner;
private String ownerUsername;
private String ownerName;
private String ownerEmail;
private String style;
private String internalUrlServer;
private String internalUrlPath;
70,8 → 75,6
}
public void init(Announcement announcement)
{
 
 
this.announcement = announcement;
this.title = announcement.getTitle();
this.text = announcement.getText();
91,6 → 94,9
this.expireDate = announcement.getExpireDate();
this.choosedOwnerRole = announcement.getChoosedOwnerRole();
this.owner = announcement.getOwner();
this.ownerUsername = owner.getUsername();
this.ownerName = owner.getName();
this.ownerEmail = owner.getEmail();
this.internalUrlServer = announcement.getInternalUrlServer();
this.internalUrlPath = announcement.getInternalUrlPath();
this.style = announcement.getStyle();
308,6 → 314,14
return url;
}
 
public String getUrl(HttpServletRequest request) {
if(url != null && url.startsWith("/"))
return request.getContextPath() + url;
else
return url;
}
 
 
public void setUrl(String url) {
this.url = url;
}
359,6 → 373,8
 
public Boolean getHaveAllText()
{
if(getInternalUrlPath() != null)
return false;
if(getType().equals("top.flash.news"))
{
return getText().length() > TEXT_SUMMARY_SIZE;
414,4 → 430,19
return ((AnnouncementImpl)announcement).canLoadInOpenTransaction(u);
}
 
public String getOwnerUsername()
{
return ownerUsername;
}
 
 
public String getOwnerName()
{
return ownerName;
}
 
public String getOwnerEmail()
{
return ownerEmail;
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitAssignementView.java
10,6 → 10,8
import java.util.List;
import java.util.Date;
 
import jomm.utils.StringsUtils;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
165,6 → 167,11
return description;
}
 
public String getFormatedDescription()
{
return StringsUtils.getFormatedText(description);
}
 
public void setDescription(String description)
{
this.description = description;
222,9 → 229,11
this.courseUnitDeliverableView = courseUnitDeliverableView;
}
 
private static final long milisecondsof24Hours=24*60*60*1000;
public boolean isActive()
{
return courseUnitAssignement.getDeliverDate() != null && courseUnitAssignement.getDeliverDate().getTime() >= System.currentTimeMillis();
return courseUnitAssignement.getDeliverDate() != null && courseUnitAssignement.getDeliverDate().getTime() + milisecondsof24Hours >= System.currentTimeMillis();
}
 
 
256,7 → 265,7
userSession.getUser() != null &&
((UserImpl) userSession.getUser()).isInCourseUnit(courseUnitId) &&
!deliverType.equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) &&
(lateDelivers || courseUnitAssignement.getDeliverDate().getTime() >= System.currentTimeMillis());
(lateDelivers || courseUnitAssignement.getDeliverDate().getTime() + milisecondsof24Hours >= System.currentTimeMillis());
}
 
public boolean isLateDeliver()
/impl/src/java/pt/estgp/estgweb/domain/views/UserView.java
360,6 → 360,7
 
public String getSafeEmail()
{
String email = username + "@" + Globals.EMAIL_LOCAL_SUFFIX;
if(email != null)
{
String safe =email.replace("@", " [ AT ] ").replace("."," [ DOT ] ");
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitDeliverableView.java
148,8 → 148,10
this.deliverDateStr = deliverDateStr;
}
 
private static final long milisecondsof24Hours=24*60*60*1000;
 
public boolean isLateDeliver()
{
return getDeliverDate().getTime() > courseUnitAssignementView.getDeliverDateDate().getTime();
return getDeliverDate().getTime() > milisecondsof24Hours + courseUnitAssignementView.getDeliverDateDate().getTime();
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java
44,6 → 44,8
 
private String objectives;
private String programStreamId;
private boolean validProgram;
private UserView validatorUser;
private int programSize;
private String extension;
private List<CourseUnitAssignementView> courseUnitAssignements;
68,29 → 70,35
public CourseUnitView(CourseUnit courseUnit, boolean initTeachers, boolean initStudents )
{
super(courseUnit);
init(courseUnit, initTeachers, initStudents,false);
init(courseUnit, initTeachers, initStudents,false,false);
}
 
public CourseUnitView(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog )
{
super(courseUnit);
init(courseUnit, initTeachers, initStudents, initBlog);
init(courseUnit, initTeachers, initStudents, initBlog,false);
}
 
public CourseUnitView(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog, boolean validatorPerson )
{
super(courseUnit);
init(courseUnit, initTeachers, initStudents, initBlog, validatorPerson);
}
 
public CourseUnitView(CourseUnit courseUnit)
{
super(courseUnit);
init(courseUnit, false,false,false);
init(courseUnit, false,false,false,false);
}
 
public CourseUnitView(CourseUnit courseUnit, BlogView b)
{
super(courseUnit);
this.blog = b;
init(courseUnit, false,false,false);
init(courseUnit, false,false,false,false);
}
 
private void init(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog)
private void init(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog, boolean validatorUser)
{
this.pathIntranet = courseUnit.getPathIntranet();
this.normalizedName = courseUnit.getNormalizedName();
103,7 → 111,16
this.courseCode = courseUnit.getCourseCode();
this.objectives = courseUnit.getObjectives();
if(courseUnit.getProgramStreamId() != null)
{
programStreamId = courseUnit.getProgramStreamId();
validProgram = courseUnit.isValidProgram();
if(validatorUser)
{
if(courseUnit.getValidatorUser() != null)
this.validatorUser = new UserView(courseUnit.getValidatorUser());
}
}
 
// if(courseUnit.getBlog() != null)
// this.blog = new BlogView(courseUnit.getBlog());
this.id = courseUnit.getId();
133,6 → 150,7
{
courseId = courseUnit.getCourse().getId();
}
 
}
 
public long getCourseId()
293,6 → 311,11
 
public String getSemestre()
{
if(semestre == null)
{
logger.error("Unit" + getId() + " " + getName() + "" + " - " + getCourseName() + " " + getImportYear() + " with no SEMESTRE SET, returning S1");
return "S1";
}
return semestre;
}
 
412,5 → 435,43
}
 
 
public boolean isValidProgram()
{
return validProgram;
}
 
public void setValidProgram(boolean validProgram)
{
this.validProgram = validProgram;
}
 
public UserView getValidatorUser()
{
return validatorUser;
}
 
public void setValidatorUser(UserView validatorUser)
{
this.validatorUser = validatorUser;
}
 
public String getTeachersSnipet()
{
StringBuilder strBuilder = new StringBuilder();
if(teachers != null && teachers.size() > 0)
{
for(UserView userView: teachers)
{
strBuilder
.append(" <a href=\"mailto:")
.append(userView.getEmail())
.append("\">")
.append(userView.getName())
.append("</a>")
.append(" ");
 
}
}
return strBuilder.toString();
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/CourseView.java
10,6 → 10,8
import java.util.ArrayList;
import java.io.Serializable;
 
import jomm.utils.AutoFillArrayList;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
31,6 → 33,12
private UserView coordinator;
private UserView director;
private List<CourseUnitView> courseUnits;
private List<CourseUnitView> courseUnitsWithNoProgramS1;
private List<CourseUnitView> courseUnitsWithProgramCheckedS1;
private List<CourseUnitView> courseUnitsWithProgramNotCheckedS1;
private List<CourseUnitView> courseUnitsWithNoProgramS2;
private List<CourseUnitView> courseUnitsWithProgramCheckedS2;
private List<CourseUnitView> courseUnitsWithProgramNotCheckedS2;
private String studiesPlanStreamId;
private RepositoryFileImpl studiesPlan;
private String htmlResult;
98,7 → 106,7
courseUnits = new ArrayList<CourseUnitView>();
for(CourseUnit c: course.getCourseUnits())
{
CourseUnitView cUV = new CourseUnitView(c);
CourseUnitView cUV = new CourseUnitView(c,true,false,false,false);
courseUnits.add(cUV);
}
}
334,4 → 342,75
{
this.externalSitePath = externalSitePath;
}
 
 
public List<CourseUnitView> getCourseUnitsWithNoProgramS1()
{
return courseUnitsWithNoProgramS1;
}
 
public void setCourseUnitsWithNoProgramS1(List<CourseUnitView> courseUnitsWithNoProgramS1)
{
this.courseUnitsWithNoProgramS1 = courseUnitsWithNoProgramS1;
}
 
public List<CourseUnitView> getCourseUnitsWithProgramCheckedS1()
{
if(courseUnitsWithProgramCheckedS1==null)
courseUnitsWithProgramCheckedS1 = new AutoFillArrayList<CourseUnitView>(CourseUnitView.class);
return courseUnitsWithProgramCheckedS1;
}
 
public void setCourseUnitsWithProgramCheckedS1(List<CourseUnitView> courseUnitsWithProgramCheckedS1)
{
this.courseUnitsWithProgramCheckedS1 = courseUnitsWithProgramCheckedS1;
}
 
public List<CourseUnitView> getCourseUnitsWithProgramNotCheckedS1()
{
if(courseUnitsWithProgramNotCheckedS1==null)
courseUnitsWithProgramNotCheckedS1 = new AutoFillArrayList<CourseUnitView>(CourseUnitView.class);
return courseUnitsWithProgramNotCheckedS1;
}
 
public void setCourseUnitsWithProgramNotCheckedS1(List<CourseUnitView> courseUnitsWithProgramNotCheckedS1)
{
this.courseUnitsWithProgramNotCheckedS1 = courseUnitsWithProgramNotCheckedS1;
}
 
public List<CourseUnitView> getCourseUnitsWithNoProgramS2()
{
return courseUnitsWithNoProgramS2;
}
 
public void setCourseUnitsWithNoProgramS2(List<CourseUnitView> courseUnitsWithNoProgramS2)
{
this.courseUnitsWithNoProgramS2 = courseUnitsWithNoProgramS2;
}
 
public List<CourseUnitView> getCourseUnitsWithProgramCheckedS2()
{
if(courseUnitsWithProgramCheckedS2==null)
courseUnitsWithProgramCheckedS2 = new AutoFillArrayList<CourseUnitView>(CourseUnitView.class);
return courseUnitsWithProgramCheckedS2;
}
 
public void setCourseUnitsWithProgramCheckedS2(List<CourseUnitView> courseUnitsWithProgramCheckedS2)
{
this.courseUnitsWithProgramCheckedS2 = courseUnitsWithProgramCheckedS2;
}
 
public List<CourseUnitView> getCourseUnitsWithProgramNotCheckedS2()
{
if(courseUnitsWithProgramNotCheckedS2==null)
courseUnitsWithProgramNotCheckedS2 = new AutoFillArrayList<CourseUnitView>(CourseUnitView.class);
return courseUnitsWithProgramNotCheckedS2;
}
 
public void setCourseUnitsWithProgramNotCheckedS2(List<CourseUnitView> courseUnitsWithProgramNotCheckedS2)
{
this.courseUnitsWithProgramNotCheckedS2 = courseUnitsWithProgramNotCheckedS2;
}
 
 
}
/impl/src/java/pt/estgp/estgweb/domain/views/BlogView.java
10,6 → 10,7
import java.util.List;
 
import jomm.dao.impl.AbstractDao;
import jomm.utils.StringsUtils;
 
/**
* @author Jorge Machado
243,6 → 244,10
{
return title;
}
public String getFormatedaaTitle()
{
return StringsUtils.getEscapeHtmlText(title);
}
 
public void setTitle(String title)
{
254,6 → 259,11
return description;
}
 
public String getFormatedDescription()
{
return StringsUtils.getFormatedText(description);
}
 
public void setDescription(String description)
{
this.description = description;
/impl/src/java/pt/estgp/estgweb/domain/GenericUserImpl.java
97,6 → 97,4
{
return isSuperuser() || isAdmin();
}
 
public abstract String getUsername();
}
/impl/src/java/pt/estgp/estgweb/web/tags/RealOwnerTag.java
New file
0,0 → 1,99
package pt.estgp.estgweb.web.tags;
 
import org.apache.log4j.Logger;
import org.apache.struts.util.RequestUtils;
 
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
 
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.IOwned;
import pt.estgp.estgweb.Globals;
 
public class RealOwnerTag extends BodyTagSupport
{
 
private static final Logger logger = Logger.getLogger(RealOwnerTag.class);
 
private String name;
 
private String property;
 
private String valid;
 
public String getName()
{
return name;
}
 
public void setName(String name)
{
this.name = name;
}
 
public String getProperty()
{
return property;
}
 
public void setProperty(String property)
{
this.property = property;
}
 
 
public String getValid()
{
return valid;
}
 
public void setValid(String valid)
{
this.valid = valid;
}
 
public int doStartTag() throws JspException
{
if (go())
{
return EVAL_BODY_TAG;
}
else
return SKIP_BODY;
}
 
public boolean go() throws JspException
{
 
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(Globals.USER_SESSION_KEY);
 
IOwned owned = (IOwned) RequestUtils.lookup(pageContext, name, property, null);
 
return owned.getOwner() == null || userSession.getUser() != null && (owned.getOwner().getId() == userSession.getUser().getId());
 
}
 
public int doEndTag() throws JspException
{
if(go())
{
String toPage = bodyContent.getString().trim();
JspWriter writer = pageContext.getOut();
try
{
writer.write(toPage);
}
catch (Exception e)
{
logger.error(e, e);
throw new JspException(e);
}
}
 
// Continue processing this page
return EVAL_PAGE;
}
 
 
}
/impl/src/java/pt/estgp/estgweb/web/WebProxy.java
76,7 → 76,8
}
catch(FileNotFoundException e)
{
throw new FileNotFoundException("url not found for server:" + server + " and path:" + path);
logger.warn("url not found for server:" + server + " and path:" + path);
response.sendError(404);
}
catch(Exception e)
{
85,7 → 86,8
}
else
{
throw new FileNotFoundException("url not found for server:" + server + " and path:" + path);
logger.warn("url not found for server:" + server + " and path:" + path);
response.sendError(404);
}
 
}
/impl/src/java/pt/estgp/estgweb/web/form/profile/ProfileForm.java
153,6 → 153,14
public ActionErrors validate(org.apache.struts.action.ActionMapping actionMapping, javax.servlet.http.HttpServletRequest httpServletRequest)
{
ActionErrors errors = new ActionErrors();
if(userView.getUsername() == null || userView.getUsername().length() == 0)
{
addMessageWithKeys(errors, httpServletRequest, "errors.required","username");
}
if(userView.getEmail() == null || userView.getEmail().length() == 0)
{
addMessageWithKeys(errors, httpServletRequest, "errors.required","email");
}
if (userView.getPop3password().length() > 0 && !userView.getPop3password().equals(userView.getPop3passwordAgain()))
addMessage(errors, httpServletRequest, "errors.diferent.passwords.pop");
else
/impl/src/java/pt/estgp/estgweb/web/form/courses/CourseForm.java
1,9 → 1,9
package pt.estgp.estgweb.web.form.courses;
 
import pt.estgp.estgweb.web.form.ApplicationForm;
import pt.estgp.estgweb.web.form.commons.TeachersForm;
import pt.estgp.estgweb.domain.views.CourseView;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.services.courseunits.DirectedCoordinatedCourses;
 
import java.util.List;
 
18,6 → 18,7
{
private CourseView courseView;
private FormFile studiesPlan;
private DirectedCoordinatedCourses directedCoordinatedCourses = new DirectedCoordinatedCourses();
 
 
public CourseForm()
30,6 → 31,16
return courseView;
}
 
public DirectedCoordinatedCourses getDirectedCoordinatedCourses()
{
return directedCoordinatedCourses;
}
 
public void setDirectedCoordinatedCourses(DirectedCoordinatedCourses directedCoordinatedCourses)
{
this.directedCoordinatedCourses = directedCoordinatedCourses;
}
 
public void setCourseView(CourseView courseView)
{
this.courseView = courseView;
/impl/src/java/pt/estgp/estgweb/web/controllers/profile/ProfileController.java
11,6 → 11,7
import pt.estgp.estgweb.domain.views.UserView;
import pt.estgp.estgweb.domain.views.RecordView;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException;
50,8 → 51,14
ActionErrors errors = profileForm.validate(mapping, request);
if (!errors.isEmpty())
{
if(profileForm.getUserView().getId() > 0)
{
UserView uV = loadUser(profileForm.getUserView().getId(), request, response);
profileForm.getUserView().setPasswordLocal(uV.isPasswordLocal());
UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);
uV.setUserRoles((List<String>) userSession.get(TARGET_ROLES_KEY));
profileForm.setSelectedRoles(uV.getUserRoles());
}
saveMessages(request, errors);
return mapping.getInputForward();
}
63,7 → 70,20
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"object"};
Object[] args = new Object[]{userView, profileForm.getTypeClass()};
try
{
userView = (UserView) sm.execute(RequestUtils.getRequester(request, response), "SubmitUser", args, names);
}
catch (AlreadyExistsException e)
{
if(profileForm.getUserView().getId() > 0)
{
UserView uV = loadUser(profileForm.getUserView().getId(), request, response);
profileForm.getUserView().setPasswordLocal(uV.isPasswordLocal());
}
addErrorWithKeys(request,"user.exists",e.getMessage());
return mapping.getInputForward();
}
profileForm.setUserView(userView);
if (userSession.getUser().getId() == userView.getId())
{
177,6 → 197,7
throw e;
}
}
 
public ActionForward home(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
206,6 → 227,7
throw e;
}
}
 
public ActionForward grades(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
306,6 → 328,7
UserView uV = (UserView) sm.execute(RequestUtils.getRequester(request, response), "LoadUserWithRecordsById", args, names);
return uV;
}
 
private UserView loadUserWithGrades(long id, HttpServletRequest request, HttpServletResponse response) throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
{
IServiceManager sm = ServiceManager.getInstance();
314,6 → 337,7
UserView uV = (UserView) sm.execute(RequestUtils.getRequester(request, response), "LoadUserWithGradesById", args, names);
return uV;
}
 
public UserView loadUserWithRecordsCode(int code, HttpServletRequest request, HttpServletResponse response) throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
{
IServiceManager sm = ServiceManager.getInstance();
/impl/src/java/pt/estgp/estgweb/web/controllers/courses/CoursesController.java
11,6 → 11,7
import pt.estgp.estgweb.filters.exceptions.NotFoundException;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.services.common.ISearchResults;
import pt.estgp.estgweb.services.courseunits.DirectedCoordinatedCourses;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException;
175,4 → 176,99
return mapping.findForward("error500");
}
}
 
 
public ActionForward loadCoursesPrograms(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
CourseForm cF = (CourseForm) form;
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new String[]{};
DirectedCoordinatedCourses directedCoordinatedCourses = (DirectedCoordinatedCourses) sm.execute(RequestUtils.getRequester(request, response), "LoadCoursesProgramsForServices", args, names);
cF.setDirectedCoordinatedCourses(directedCoordinatedCourses);
return mapping.findForward("load.courses.programs");
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (NotFoundException e)
{
return mapping.findForward("error404");
}
catch (Throwable e)
{
logger.error(e, e);
return mapping.findForward("error500");
}
}
 
public ActionForward loadDirectedCoordininatedCourses(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
CourseForm cF = (CourseForm) form;
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new String[]{};
DirectedCoordinatedCourses directedCoordinatedCourses = (DirectedCoordinatedCourses) sm.execute(RequestUtils.getRequester(request, response), "LoadDirectedCoordinatedCoursesForUserInSession", args, names);
cF.setDirectedCoordinatedCourses(directedCoordinatedCourses);
return mapping.findForward("load.directed.coordinated.courses");
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (NotFoundException e)
{
return mapping.findForward("error404");
}
catch (Throwable e)
{
logger.error(e, e);
return mapping.findForward("error500");
}
}
 
public ActionForward updateDirectedCoordininatedCourses(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
CourseForm cF = (CourseForm) form;
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"directedCoordinatedCourses"};
Object[] args = new Object[]{cF.getDirectedCoordinatedCourses()};
DirectedCoordinatedCourses directedCoordinatedCourses = (DirectedCoordinatedCourses) sm.execute(RequestUtils.getRequester(request, response), "UpdateDirectedCoordinatedCoursesForUserInSession", args, names);
cF.setDirectedCoordinatedCourses(directedCoordinatedCourses);
addMessage(request,"course.directed.coordinated.courses.updated.success",""+directedCoordinatedCourses.getUpdated());
return mapping.findForward("home");
}
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/announcements/AnnouncementsController.java
54,7 → 54,7
AnnouncementsForm announcementForm = (AnnouncementsForm) form;
AnnouncementView view = announcementForm.getAnnouncementView();
String finalUrl = "";
if (announcementForm.getUrl() != null && !announcementForm.getUrl().equals(""))
if (announcementForm.getUrl() != null && announcementForm.getUrl().length() > 0)
{
finalUrl = announcementForm.getUrlProtocol() + announcementForm.getUrl();
view.setUrl(finalUrl);
139,6 → 139,20
announcementsForm.setStartDate(DatesUtils.getStringFromDate(aV.getStartDate()));
announcementsForm.setExpireDate(DatesUtils.getStringFromDate(aV.getExpireDate()));
announcementsForm.setSelectedRoles(aV.getTargetRoles());
if(aV.getUrl() != null)
{
int indexProtocol = aV.getUrl().indexOf("://");
if(indexProtocol > 0)
{
announcementsForm.setUrl(aV.getUrl().substring(indexProtocol+3));
announcementsForm.setUrlProtocol(aV.getUrl().substring(0,indexProtocol+3));
}
else
{
announcementsForm.setUrlProtocol("");
announcementsForm.setUrl(aV.getUrl());
}
}
sess.put(TARGET_ROLES_KEY, (Serializable) aV.getTargetRoles());
sess.serialize(request,response);
return mapping.getInputForward();
233,6 → 247,8
{
try
{
AnnouncementsForm announcementForm = (AnnouncementsForm) form;
 
String id = request.getParameter("id");
AnnouncementView announcementView = load(request,response,Long.parseLong(id));
request.setAttribute("Announcement", announcementView);
/impl/src/doc/estgweb.eap
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/impl/src/updates/db/update1.sql
New file
0,0 → 1,9
 
ALTER TABLE courseunit ENGINE = myisam;
ALTER TABLE `courseunit` ADD COLUMN `validatorUser` BIGINT(20) UNSIGNED AFTER `course`, ADD COLUMN `validProgram` BIT(1) DEFAULT 0 AFTER `validatorUser`, ADD INDEX `validatorUserIndex`(`validatorUser`);
ALTER TABLE `courseunit` ADD CONSTRAINT `FK_validatorUser` FOREIGN KEY `FK_validatorUser` (`validatorUser`)
REFERENCES `user` (`id`)
ON DELETE SET NULL
ON UPDATE SET NULL;
update courseunit set validProgram = 0;
ALTER TABLE courseunit ENGINE = ndb;
/impl/src/hbm/pt/estgp/estgweb/domain/GenericUser.hbm.xml
14,7 → 14,9
<timestamp name="updateDate" unsaved-value="null"/>
<property name="saveDate" type="timestamp"/>
<property name="superuser" type="boolean"/>
<property name="username" type="string" unique="true" length="50" index="usernameIndex"/>
<property name="name" type="string" index="nameIndex"/>
<property name="email" type="string" index="emailIndex"/>
<property name="roles" type="string" index="rolesIndex"/>
<many-to-one name="image" column="image" class="pt.estgp.estgweb.domain.Image" lazy="no-proxy" outer-join="false" cascade="all"/>
<subclass name="pt.estgp.estgweb.domain.GenericUserImpl">
28,12 → 30,10
</subclass>
<subclass name="pt.estgp.estgweb.domain.User">
<meta attribute="scope-class">public abstract</meta>
<property name="username" type="string" unique="true" length="50" index="usernameIndex"/>
<property name="password" type="string"/>
<property name="address" type="text"/>
<property name="zip" type="string"/>
<property name="country" type="string"/>
<property name="email" type="string" index="emailIndex"/>
<property name="outEmail" type="string"/>
<property name="phonenumber" type="string"/>
<property name="sex" type="string"/>
/impl/src/hbm/pt/estgp/estgweb/domain/Course.hbm.xml
31,7 → 31,7
<key column="course_id"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUserAssociation"/>
</set>
<set name="courseUnits" order-by="courseYear asc" lazy="true">
<set name="courseUnits" order-by="name asc" lazy="true">
<key column="course"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUnit"/>
</set>
/impl/src/hbm/pt/estgp/estgweb/domain/CourseUnit.hbm.xml
25,7 → 25,9
<property name="normalizedName" type="string" />
<property name="objectives" type="text"/>
<property name="programStreamId" type="string" index="programStreamIdIndex" />
<property name="validProgram" type="boolean" index="validProgramIndex"/>
<property name="status" type="boolean" index="statusIndex" />
<many-to-one name="validatorUser" class="pt.estgp.estgweb.domain.Teacher" lazy="false" outer-join="true"/>
<many-to-one name="course" class="pt.estgp.estgweb.domain.Course" lazy="false" outer-join="true"/>
<set name="blogs" cascade="delete" lazy="true" order-by="saveDate asc">
<key column="courseUnit"/>
/impl/src/web/imgs/rolesIcons/student.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/impl/src/web/imgs/topFundoTijolo.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/impl/src/web/admin/profile/profilePersonalData.jsp
10,6 → 10,7
<div id="contentPane">
 
<jomm:messages/>
<html:errors/>
<%--<jsp:useBean id="ProfileForm" class="pt.estgp.estgweb.web.form.profile.ProfileForm"/>--%>
 
 
136,7 → 137,7
<bean:message key="profile.scholar.degree"/>
</th>
<td>
<html:select property="userView.academicDegree">
<html:select property="userView.scholarDegree">
<html:option value="less"><bean:message key="profile.scholar.degree.less"/></html:option>
<html:option value="9"><bean:message key="profile.scholar.degree.9"/></html:option>
<html:option value="12"><bean:message key="profile.scholar.degree.12"/></html:option>
/impl/src/web/admin/announcements/submitAnnouncement.jsp
91,7 → 91,9
</html:select>
</td>
</tr>
 
<logic:present name="UserSession" property="user">
<baco:isRealOwner name="AnnouncementsForm" property="announcementView">
<logic:notEmpty name="UserSession" property="user.ownerRoles">
<tr>
<th>
109,7 → 111,9
</td>
</tr>
</logic:notEmpty>
</baco:isRealOwner>
</logic:present>
 
<tr>
<th>
<bean:message key="announcement.target.roles"/>
307,6 → 311,7
<html:option value="http://">Http://</html:option>
<html:option value="ftp://">ftp://</html:option>
<html:option value="https://">Https://</html:option>
<html:option value="">Relativo ao Baco (exemplo: /blog/bugs</html:option>
</html:select>
<html:text property="url" maxlength="250"/>
</td>
318,7 → 323,7
<bean:message key="announcement.internalLinkAnnouncement"/>
</th>
<td>
<html:select property="announcementView.internalUrlServer">
<html:select property="announcementView.internalUrlInclude">
<html:option value="true">
<bean:message key="announcement.internal.url.include.yes"/>
</html:option>
/impl/src/web/errors/503.jsp
New file
0,0 → 1,10
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%
response.sendError(500);
%>
<h3 class="statusWARNING"><bean:message key="error.503"/></h3>
/impl/src/web/layout/header.jsp
6,7 → 6,7
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<table width="100%">
<table width="100%" style="background-image:url(<%=request.getContextPath()%>/imgs/topFundoTijolo.jpg)">
<tr>
<td>
 
/impl/src/web/layout/headerIntranet.jsp
7,7 → 7,9
<table width="100%" id="headerIntranet">
<tr>
<td class="title">
<logic:present name="UserSession">
INTRANET - ESTG (<bean:write name="UserSession" property="user.name"/> online)
</logic:present>
</td>
<td class="links">
<ul>
/impl/src/web/public/blogs/blog.jsp
30,7 → 30,7
<div class="seccao">
<div class="postHeader">
<h1>
<bean:write name="BlogView" property="title"/>
${BlogView.formatedaaTitle}
</h1>
<baco:canManage name="BlogView">
 
64,7 → 64,7
%>
</td>
<td valign="top">
${BlogView.description}
${BlogView.formatedDescription}
</td>
</tr>
</table>
137,7 → 137,8
<baco:canLoad name="post">
<tr>
<td colspan="2" class="title">
<a name="post${post.id}"></a>${post.title}
<a name="post${post.id}"></a>
<h3>${post.formatedTitle}</h3>
<baco:canManage name="post">
<a onclick="return confirm('${confirmDeletePost}')" href="<%=request.getContextPath()%>${user}/startDeletePost${fromAction}.do?id=${post.id}&blogId=${BlogView.id}"><bean:message key="blog.delete.post"/></a>
<baco:canManage name="BlogView">
161,7 → 162,7
</tr>
<tr>
<td valign="top">
${post.text}
${post.formatedText}
</td>
<td valign="top">
<%
179,7 → 180,7
</tr>
<tr>
<td colspan="2" class="pFooter">
Posted by: ${post.ownerUsername} AT ${post.formatedSaveDate}
Posted by: (${post.ownerUsername}) ${post.ownerName} [AT] ${post.formatedSaveDate}
</td>
</tr>
</baco:canLoad>
/impl/src/web/public/announcements/announcementsPortalLeft.jsp
21,7 → 21,7
IServiceManager sm = ServiceManager.getInstance();
String subTarget = null;
String[] names = new String[]{};
Object[] args = new Object[]{request.getParameter("role"), Globals.ANNOUNCEMENT_TYPE_TOP_FLASH_NEWS, subTarget};
Object[] args = new Object[]{request.getParameter("role"), Globals.ANNOUNCEMENT_TYPE_TOP_FLASH_NEWS + "," +Globals.ANNOUNCEMENT_TYPE_BOTTOM_FLASH_NEWS, subTarget};
List<AnnouncementView> announcementViews = (List<AnnouncementView>) sm.execute(RequestUtils.getRequester(request, response), "LoadRoleTypeMaxAnnouncements", args, names);
request.setAttribute("Announcements", announcementViews);
 
/impl/src/web/public/announcements/loadAnnouncement.jsp
3,6 → 3,7
<%@ page import="pt.estgp.estgweb.domain.enums.AnnouncementStyleEnum" %>
<%@ page import="pt.estgp.estgweb.web.UserSessionProxy" %>
<%@ page import="jomm.utils.MessageResources" %>
<%@ page import="pt.estgp.estgweb.web.WebProxy" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
12,8 → 13,23
<jsp:useBean id="Announcement" type="pt.estgp.estgweb.domain.views.AnnouncementView" scope="request"/>
<% UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);%>
<table class="seccao">
<tr><td>
<h2>${Announcement.title}
<tr>
<td>
<h2>
<%
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<a href="<%=Announcement.getUrl(request)%>">${Announcement.title}</a>
<%
}
else
{
%>
${Announcement.title}
<%
}
%>
<baco:canManage name="Announcement">
<!--valid="false">-->
<%
66,28 → 82,50
<%
if (Announcement.getBigImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img align="<%=align%>" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
</a>
<%
}
else if (Announcement.getSmallImage() != null)
else
{
%>
<img align="<%=align%>" alt="<%=Announcement.getTitle()%>"
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
<%
}
}
else if (Announcement.getSmallImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
</div>
${Announcement.formatedText}
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
</a>
<%
if (Announcement.getUrl() != null)
}
else
{
%>
<html:link href="${Announcement.url}">Ver +</html:link>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
<%
}%>
}
}
%>
</div>
${Announcement.formatedText}
 
<logic:notEmpty name="Announcement" property="url">
&nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link>
</logic:notEmpty>
<div class="pFooter">
Posted by: (${Announcement.ownerUsername}) ${Announcement.ownerName} [AT] ${Announcement.formatedSaveDate}
</div>
</p>
<%
}
101,25 → 139,57
<%
if (Announcement.getBigImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img alt="<%=Announcement.getTitle()%>"
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
<%
}
}
else if (Announcement.getSmallImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img alt="<%=Announcement.getTitle()%>"
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
<%
}
}
%>
</div>
</td>
</tr>
<tr>
<td>${Announcement.formatedText}</td>
<td valign="<%=valign%>" >${Announcement.formatedText}</td>
</tr>
<logic:notEmpty name="Announcement" property="url">
<tr>
<td> &nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link></td>
</tr>
</logic:notEmpty>
<tr>
<td class="pFooter">
Posted by: (${Announcement.ownerUsername}) ${Announcement.ownerName} [AT] ${Announcement.formatedSaveDate}
</td>
</tr>
</table>
<%
}
133,23 → 203,56
<%
if (Announcement.getBigImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img alt="<%=Announcement.getTitle()%>"
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
<%
}
}
else if (Announcement.getSmallImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img alt="<%=Announcement.getTitle()%>"
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
<%
}
}
%>
</div>
</td>
<td>${Announcement.formatedText}</td>
<td valign="<%=valign%>">${Announcement.formatedText}</td>
</tr>
<logic:notEmpty name="Announcement" property="url">
<tr>
<td colspan="2"> &nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link></td>
</tr>
</logic:notEmpty>
 
<tr>
<td colspan="2" class="pFooter">
Posted by: (${Announcement.ownerUsername}) ${Announcement.ownerName} [AT] ${Announcement.formatedSaveDate}
</td>
</tr>
</table>
<%
}
158,30 → 261,98
%>
<table>
<tr>
<td>${Announcement.formatedText}</td>
<td valign="<%=valign%>">${Announcement.formatedText}</td>
<td valign="<%=valign%>">
<div class="imageAnnouncement">
 
<%
if (Announcement.getBigImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img alt="<%=Announcement.getTitle()%>"
<a href="${Announcement.url}">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getBigImage().getId()%>">
<%
}
}
else if (Announcement.getSmallImage() != null)
{
if(Announcement.getUrl() != null && Announcement.getUrl().length()>0)
{
%>
<img alt="<%=Announcement.getTitle()%>"
<a href="<%=Announcement.getUrl(request)%>">
<img border="0" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
</a>
<%
}
else
{
%>
<img border="0" alt="<%=Announcement.getTitle()%>"
src="<%=request.getContextPath()%>/imageStream/<%=Announcement.getSmallImage().getId()%>">
<%
}
}
%>
</div>
</td>
</tr>
<logic:notEmpty name="Announcement" property="url">
<tr>
<td colspan="2"> &nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link></td>
</tr>
</logic:notEmpty>
<tr>
<td colspan="2" class="pFooter">
Posted by: (${Announcement.ownerUsername}) ${Announcement.ownerName} [AT] ${Announcement.formatedSaveDate}
</td>
</tr>
</table>
<%
}
%>
</td></tr></table>
</td>
</tr>
<tr>
<td>
 
<logic:notEmpty name="Announcement" property="internalUrlPath">
<logic:notEmpty name="Announcement" property="internalUrlServer">
<logic:equal name="Announcement" property="internalUrlInclude" value="true">
<%
WebProxy.processHttpRequestService(out, Announcement.getInternalUrlServer(), Announcement.getInternalUrlPath());
%>
</logic:equal>
<logic:notEqual name="Announcement" property="internalUrlInclude" value="true">
<%
if(Announcement.getInternalUrlPath().startsWith("/"))
{
%>
<a href="<%=request.getContextPath()%>/proxy/layout1/${Announcement.internalUrlServer}${Announcement.internalUrlPath}"><bean:message key="search.see.more.content"/></a>
<%
}
else
{
%>
<a href="<%=request.getContextPath()%>/proxy/layout1/${Announcement.internalUrlServer}/${Announcement.internalUrlPath}"><bean:message key="search.see.more.content"/></a>
<%
}
%>
 
</logic:notEqual>
</logic:notEmpty>
</logic:notEmpty>
</td>
</tr>
 
</table>
/impl/src/web/public/announcements/loadTodoAnnouncement.jsp
42,5 → 42,10
</td>
<td valign="top">${Announcement.formatedText}</td>
</tr>
<logic:notEmpty name="Announcement" property="url">
<tr>
<td colspan="2"> &nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link></td>
</tr>
</logic:notEmpty>
</table>
</div>
/impl/src/web/user/courses/topnavDirectedCoordinatedCourses.jsp
New file
0,0 → 1,12
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.util.*"%>
<%@ page import="jomm.web.utils.NavPlace" %>
<%@ page import="jomm.web.utils.NavPlaceServer" %>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "course.directed.coordinated.courses");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/courses/directedCoordinatedCourses.jsp
New file
0,0 → 1,155
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
 
<jsp:useBean id="CourseForm" type="pt.estgp.estgweb.web.form.courses.CourseForm" scope="request"/>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<jomm:messages/>
<html:errors/>
<%
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}/courseController${fromAction}${from}" enctype="multipart/form-data">
<input type="hidden" name="dispatch" value="updateDirectedCoordininatedCourses">
<div class="seccao">
<h2><bean:message key="course.directed.coordinated"/></h2>
<div class="seccao">
<ul>
<nested:iterate id="courseView" property="directedCoordinatedCourses.merge" type="pt.estgp.estgweb.domain.views.CourseView">
<li>
<a name="${courseView.id}"></a>
<nested:hidden property="id"/>
<h3>(${courseView.code}) ${courseView.name}</h3>
<ul>
<li><h3><bean:message key="courseunit.semestre"/> 1</h3>
<ul>
<logic:notEmpty name="courseView" property="courseUnitsWithNoProgramS1">
<li><h3 class="statusERROR"><bean:message key="course.units.no.program"/></h3>
<ul>
<nested:iterate id="courseUnitView" property="courseUnitsWithNoProgramS1" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
(${courseUnitView.code}) ${courseUnitView.name} - ${courseUnitView.teachersSnipet}
</li>
</nested:iterate>
</ul>
</li>
</logic:notEmpty>
<logic:notEmpty name="courseView" property="courseUnitsWithProgramNotCheckedS1">
<%--<html:hidden property="courseUnitsWithProgramNotCheckedS1size"/>--%>
<li><h3 class="statusWARNING"><bean:message key="course.units.with.program.not.checked"/></h3>
<ul>
<nested:iterate id="courseUnitView" property="courseUnitsWithProgramNotCheckedS1" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
<logic:equal value="${courseView.coordinator.id}" name="UserSession" property="user.id">
<nested:hidden property="programStreamId"/>
<nested:hidden property="id"/>
<nested:checkbox property="validProgram"/>
</logic:equal>
(${courseUnitView.code}) <a href="<%=request.getContextPath()%>/repositoryStream/${courseUnitView.programStreamId}">${courseUnitView.name}</a> - ${courseUnitView.teachersSnipet}
</li>
</nested:iterate>
</ul>
</li>
</logic:notEmpty>
<logic:notEmpty name="courseView" property="courseUnitsWithProgramCheckedS1">
<%--<html:hidden property="courseUnitsWithProgramCheckedS1size"/>--%>
<li><h3 class="statusOK"><bean:message key="course.units.with.program.checked"/></h3>
<ul>
<nested:iterate id="courseUnitView" property="courseUnitsWithProgramCheckedS1" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
<logic:equal value="${courseView.coordinator.id}" name="UserSession" property="user.id">
<nested:hidden property="programStreamId"/>
<nested:hidden property="id"/>
<nested:checkbox property="validProgram"/>
</logic:equal>
(${courseUnitView.code}) <a href="<%=request.getContextPath()%>/repositoryStream/${courseUnitView.programStreamId}">${courseUnitView.name}</a> - ${courseUnitView.teachersSnipet}
</li>
</nested:iterate>
</ul>
</li>
</logic:notEmpty>
</ul>
</li>
 
 
<li><h3><bean:message key="courseunit.semestre"/> 2</h3>
<ul>
<logic:notEmpty name="courseView" property="courseUnitsWithNoProgramS2">
<li><h3 class="statusERROR"><bean:message key="course.units.no.program"/></h3>
<ul>
<nested:iterate id="courseUnitView" property="courseUnitsWithNoProgramS2" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
(${courseUnitView.code}) ${courseUnitView.name} - ${courseUnitView.teachersSnipet}
</li>
</nested:iterate>
</ul>
</li>
</logic:notEmpty>
<logic:notEmpty name="courseView" property="courseUnitsWithProgramNotCheckedS2">
<%--<html:hidden property="courseUnitsWithProgramNotCheckedS2size"/>--%>
<li><h3 class="statusWARNING"><bean:message key="course.units.with.program.not.checked"/></h3>
<ul>
<nested:iterate id="courseUnitView" property="courseUnitsWithProgramNotCheckedS2" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
<logic:equal value="${courseView.coordinator.id}" name="UserSession" property="user.id">
<nested:hidden property="programStreamId"/>
<nested:hidden property="id"/>
<nested:checkbox property="validProgram"/>
</logic:equal>
(${courseUnitView.code}) ${courseUnitView.name} - ${courseUnitView.teachersSnipet}
</li>
</nested:iterate>
</ul>
</li>
</logic:notEmpty>
<logic:notEmpty name="courseView" property="courseUnitsWithProgramCheckedS2">
<%--<html:hidden property="courseUnitsWithProgramCheckedS2size"/>--%>
<li><h3 class="statusOK"><bean:message key="course.units.with.program.checked"/></h3>
<ul>
<nested:iterate id="courseUnitView" property="courseUnitsWithProgramCheckedS2" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
<logic:equal value="${courseView.coordinator.id}" name="UserSession" property="user.id">
<nested:hidden property="programStreamId"/>
<nested:hidden property="id"/>
<nested:checkbox property="validProgram"/>
</logic:equal>
(${courseUnitView.code}) ${courseUnitView.name} - ${courseUnitView.teachersSnipet}
</li>
</nested:iterate>
</ul>
</li>
</logic:notEmpty>
</ul>
</li>
 
</ul>
</li>
</nested:iterate>
</ul>
</div>
</div>
<table>
<tr class="buttons">
<td colspan="2">
<input type="submit" value="<bean:message key="confirm"/>"/>
</td>
</tr>
</table>
</html:form>
/impl/src/web/user/courseunits/courseunitworks.jsp
215,9 → 215,14
request.setAttribute("confirmDelete", confirmDelete);
%>
<td>
<logic:equal value="0" name="work" property="delivers">
<html:link onclick="return confirm('${confirmDelete}')" action="/user/startDeleteCourseUnitWorksFromHome?courseUnitAssignementView.id=${work.id}">
<bean:message key="delete"/>
</html:link>
</logic:equal>
<logic:notEqual value="0" name="work" property="delivers">
<%--<bean:message key="delete"/>--%>
</logic:notEqual>
</td>
</baco:canManage>
<baco:isStudentOfCourseUnit courseUnitId="${CourseUnitView.id}">
276,7 → 281,7
</tr>
<tr id="assignement${work.id}" style="<%=Globals.HIDDEN%>">
<td colspan="${colspanAssignement}">
${work.description}
${work.formatedDescription}
</td>
</tr>
</logic:iterate>
/impl/src/web/user/courseunits/courseunitassignement.jsp
67,7 → 67,7
<bean:message key="courseunit.description"/>
</th>
<td>
<bean:write name="CourseUnitAssignementView" property="description"/>
${CourseUnitAssignementView.formatedDescription}
</td>
</tr>
<tr>
124,7 → 124,7
<bean:message key="courseunit.assignement.deliver.time.ok"/>
</td>
</logic:notEqual>
<td>${deliverable.student.code}</td>
<td align="right">${deliverable.student.code}</td>
<td>${deliverable.student.name}</td>
<td><a target="_blank" href="<%=request.getContextPath()%>/repositoryStream/${deliverable.fileStreamId}"><bean:message key="courseunit.assignement.deliver.version"/> (${deliverable.deliverDateStr})</a></td>
<td>
/impl/src/web/user/courseunits/courseunit.jsp
102,7 → 102,7
<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>${announcement.formatedText}</p>
<p class="pFooterSeccao"><bean:message key="from"/>: ${announcement.owner.name} (${announcement.owner.username}) <bean:message key="at"/> ${announcement.formatedSaveDate} </p>
</li>
</logic:iterate>
/impl/src/web/user/courseunits/submitAnnouncement.jsp
43,7 → 43,7
<html:hidden property="announcementView.courseUnitView.name"/>
<input type="hidden" name="expireDate" value="<%=calendar.getWebDateString()%>"/>
<html:hidden property="announcementView.courseUnitView.courseName"/>
<html:hidden property="targetRolesStr" value="student"/>
<html:hidden property="targetRolesStr" value="all"/>
<baco:hasRole role="student">
<html:hidden property="announcementView.choosedOwnerRole" value="student"/>
</baco:hasRole>
/impl/src/web/user/home.jsp
4,6 → 4,7
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<jomm:messages/>
<html:errors/>
 
11,7 → 12,8
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td id="leftPage">
<jsp:include page="/public/announcements/announcementsPortalLeft.jsp?role=student&from=Home"/>
 
<jsp:include page="/public/announcements/announcementsPortalLeft.jsp?role=${UserSession.user.roles}&from=Home"/>
</td>
<td class="contentPortal">
<jsp:include page="/user/home/student.jsp"/>
22,7 → 24,7
<%--</table>--%>
</td>
<td id="rightPagePortal">
<jsp:include page="/public/announcements/announcementsPortalRight.jsp?role=student&from=Home"/>
<jsp:include page="/public/announcements/announcementsPortalRight.jsp?role=${UserSession.user.roles}&from=Home"/>
</td>
</tr>
</table>
31,7 → 33,7
<table>
<tr>
<td id="leftPage">
<jsp:include page="/public/announcements/announcementsPortalLeft.jsp?role=teacher&from=Home"/>
<jsp:include page="/public/announcements/announcementsPortalLeft.jsp?role=${UserSession.user.roles}&from=Home"/>
</td>
<td class="contentPortal">
<jsp:include page="/user/home/teacher.jsp"/>
42,7 → 44,7
<%--</table>--%>
</td>
<td id="rightPagePortal">
<jsp:include page="/public/announcements/announcementsPortalRight.jsp?role=teacher&from=Home"/>
<jsp:include page="/public/announcements/announcementsPortalRight.jsp?role=${UserSession.user.roles}&from=Home"/>
</td>
</tr>
</table>
/impl/src/web/user/home/student.jsp
8,19 → 8,29
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<div class="portal">
<ul>
<li class="WARNING">
<logic:notMatch value="StudentImpl" name="UserSession" property="user.class.name">
<bean:message key="profile.bad.profile.student.iregular.user.class"/>
</logic:notMatch>
</li>
</ul>
<table class="columnTable" width="100%">
<tbody>
<tr>
<baco:isModuleOn module="courseunits">
<td class="column">
 
<div class="block">
<p><bean:message key="intranet.course.units"/></p>
<ul>
<li>
<p><bean:message key="courseunit.semestre"/> 1</p>
<logic:present name="UserSession" property="user.subscribedUnitsCurrentYearViewS1">
<logic:empty name="UserSession" property="user.subscribedUnitsCurrentYearViewS1">
<bean:message key="courseunit.zero.units"/>
</logic:empty>
</logic:present>
<logic:present name="UserSession" property="user.subscribedUnitsCurrentYearViewS1">
<logic:notEmpty name="UserSession" property="user.subscribedUnitsCurrentYearViewS1">
<ul>
35,9 → 45,11
</li>
<li>
<p><bean:message key="courseunit.semestre"/> 2</p>
<logic:present name="UserSession" property="user.subscribedUnitsCurrentYearViewS2">
<logic:empty name="UserSession" property="user.subscribedUnitsCurrentYearViewS2">
<bean:message key="courseunit.zero.units"/>
</logic:empty>
</logic:present>
<logic:present name="UserSession" property="user.subscribedUnitsCurrentYearViewS2">
<logic:notEmpty name="UserSession" property="user.subscribedUnitsCurrentYearViewS2">
<ul>
63,28 → 75,7
<jsp:include page="/user/home/todos.jsp"/>
</baco:isModuleOn>
</td>
<td class="column">
<div class="block">
<p>Ficheiros Úteis</p>
<ul>
<li>
<a href="#">Modelo de comunicação interna</a>
</li>
<li>
<a href="#">Justificação de Presença</a>
</li>
<li>
<a href="#">Justificação de Faltas</a>
</li>
<li>
<a href="#">Modelo de Bolsa</a>
</li>
<li>
<a href="#">Modelo de Bolsa</a>
</li>
</ul>
</div>
</td>
 
</tr>
</tbody>
</table>
/impl/src/web/user/home/todos.jsp
103,10 → 103,15
<a href="<%=request.getContextPath() + todo.getUrl()%>">
<font class="<%=styleClass%>">
<%
if(todo.getCatKey() != null)
if(todo.getCatArg0() == null && todo.getCatKey() != null)
{
out.print(MessageResources.getMessage(request,todo.getCatKey()) + ":");
}
else if(todo.getCatArg0() != null && todo.getCatKey() != null)
{
out.print(MessageResources.getMessage(request,todo.getCatKey(),todo.getCatArg0()) + ":");
}
 
%>
<%=todo.getLabelInsideCat(request)%>
</font>
/impl/src/web/user/home/teacher.jsp
8,6 → 8,13
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<div class="portal">
<ul>
<li class="WARNING">
<logic:notMatch value="TeacherImpl" name="UserSession" property="user.class.name">
<bean:message key="profile.bad.profile.teacher.iregular.user.class"/>
</logic:notMatch>
</li>
</ul>
<table class="columnTable" width="100%">
<tbody>
<tr>
18,9 → 25,11
<ul>
<li>
<p><bean:message key="courseunit.semestre"/> 1</p>
<logic:present name="UserSession" property="user.teachedUnitsCurrentYearViewS1">
<logic:empty name="UserSession" property="user.teachedUnitsCurrentYearViewS1">
<bean:message key="courseunit.zero.units"/>
</logic:empty>
</logic:present>
<logic:present name="UserSession" property="user.teachedUnitsCurrentYearViewS1">
<logic:notEmpty name="UserSession" property="user.teachedUnitsCurrentYearViewS1">
<ul>
35,9 → 44,11
</li>
<li>
<p><bean:message key="courseunit.semestre"/> 2</p>
<logic:present name="UserSession" property="user.teachedUnitsCurrentYearViewS2">
<logic:empty name="UserSession" property="user.teachedUnitsCurrentYearViewS2">
<bean:message key="courseunit.zero.units"/>
</logic:empty>
</logic:present>
<logic:present name="UserSession" property="user.teachedUnitsCurrentYearViewS2">
<logic:notEmpty name="UserSession" property="user.teachedUnitsCurrentYearViewS2">
<ul>
62,28 → 73,6
<jsp:include page="/user/home/todos.jsp"/>
</baco:isModuleOn>
</td>
<td class="column">
<div class="block">
<p>Ficheiros Úteis</p>
<ul>
<li>
<a href="#">Modelo de comunicação interna</a>
</li>
<li>
<a href="#">Justificação de Presença</a>
</li>
<li>
<a href="#">Justificação de Faltas</a>
</li>
<li>
<a href="#">Modelo de Bolsa</a>
</li>
<li>
<a href="#">Modelo de Bolsa</a>
</li>
</ul>
</div>
</td>
</tr>
</tbody>
</table>
/impl/src/web/user/serviceZone/serviceZone.jsp
85,8 → 85,9
</baco:hasRole>
</baco:isModuleOn>
 
 
<baco:isAdmin>
<li>
<baco:isAdmin>
<bean:message key="users"/>
<ul>
<li>
112,14 → 113,14
</li>
</baco:isModuleOn>
</ul>
</li>
</baco:isAdmin>
</li>
 
<baco:isModuleOn module="courseunits">
<baco:isAdmin>
<li>
 
<bean:message key="courses"/>
<ul>
<baco:isAdmin>
<li>
<html:link action="/user/startNewCourseFromServiceZone">
<bean:message key="course.new"/>
140,13 → 141,16
<bean:message key="courseunit.search"/>
</html:link>
</li>
 
<%--<li>--%>
<%--<html:link action="/user/startFindCourseUnitAdminFromServiceZone">--%>
<%--<bean:message key="courseunit.program.archive"/>--%>
<%--</html:link>--%>
<%--</li>--%>
</ul>
</li>
</baco:isAdmin>
<li>
<html:link action="/user/startFindCourseUnitAdminFromServiceZone">
<bean:message key="courseunit.program.archive"/>
</html:link>
</li>
</ul>
<bean:message key="backups"/>
<ul>
<baco:isAdmin>
168,7 → 172,6
</html:link>
</li>
</baco:hasRole>
 
</ul>
</li>
</baco:isModuleOn>
/impl/build.xml
97,6 → 97,12
config="file://${basedir}/${dist.dir}/estgweb.xml"
username="${tomcat.username}" password="${tomcat.password}" />
</target>
<target name="tomcat.deployContextOnly" depends="">
<echo message="${tomcat.manager}"/>
<tomcat.install url="${tomcat.manager}" path="${tomcat.context.path.install}"
config="file://${basedir}/${dist.dir}/estgweb.xml"
username="${tomcat.username}" password="${tomcat.password}" />
</target>
<target name="tomcat.redeployContext" depends="tomcat.undeploy,build.war" >
<echo message="${tomcat.manager}"/>
<tomcat.install url="${tomcat.manager}" path="${tomcat.context.path.install}"
497,5 → 503,9
<!--<java classname="mitra.oaiharvest.harvest.HarvestEngine" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>-->
<!--<java classname="mitra.oaiharvest.index.IndexEngine" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>-->
<!--</target>-->
<target name="util.task.createRepositoryXML">
<java classname="pt.estgp.estgweb.services.data.CreateDescriptionsXML" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
 
 
</project>