/impl/conf/language/MessageResources.properties |
---|
129,7 → 129,9 |
deactivate=Desactivar |
manage=Gerir |
replace=Substituir |
work=Trabalho |
#Menus Portais |
portal.orgaos=Orgãos |
portal.conselho.pedagogico=Conselho Pedagógico |
/impl/conf/language/MessageResourcesCourseUnits.properties |
---|
4,9 → 4,10 |
# |
################################################################################ |
module.CourseUnits=Unidades Curriculares |
course=Curso ({0}) |
courseunit=Unidade Curricular ({0}) |
course={0} > |
courseunit={0} |
courseunit.teachers=Corpo Docente |
courseunit.objectives=Objectivos da Unidade |
courseunit.programfilepath=Programa Curricular |
courseunit.programfilepath.not.available=O Programa Curricular não está disponivel |
18,7 → 19,7 |
courseunit.program.todo=Upload do programa da unidade |
courseunit.question.todo=Dúvida |
courseunit.assignement.todo=Trabalho por entregar |
course.unit.works=(Trabalhos) |
course.unit.works=Trabalhos |
courseunit.works=Trabalhos |
courseunit.new=Criar Unidade Curricular |
courseunit.edit=Editar Unidade Curricular |
37,9 → 38,13 |
courseunit.assignement=Trabalho: {0} |
courseunit.assignement.delivered.date=Data de Entrega |
courseunit.assignement.deliver.date=Data Limite de Entrega |
courseunit.assignement.deliver.type=Tipo de entrega |
courseunit.assignement.deliver.type.zipfile=Ficheiro Comprimido (ZIP) |
courseunit.assignement.deliver.grade=Nota |
courseunit.assignement.deliver.show.obs=Adicionar observações |
courseunit.assignement.deliver.obs=obs |
courseunit.assignement.deliver.type.nofile=Entrega não controlada pelo sistema |
courseunit.assignement.deliver.late.permission=Permitir entregas atrasadas |
courseunit.assignement.delivers=Número de Entregas |
50,13 → 55,25 |
courseunit.assignement.deliver.sucess=Trabalho {0} entregue com sucesso |
errors.courseunit.assignement.deliver.file=O Ficheiro que escolheu não existe ou estão vazio |
errors.courseunit.assignement.deliver.zip=Por favor escolha um ficheiro comprimido em formato ZIP |
errors.courseunit.assignement.file.type=Por favor escolha um ficheiro comprimido em formato ZIP |
courseunit.students=Estudantes |
courseunit.assignement.deliver.time=Entregue |
courseunit.assignement.deliver.time.ok=Entregue a Horas |
courseunit.assignement.deliver.time.late=Entrega atrasada |
courseunit.assignement.deliver.time.no=Por Entregar |
courseunit.menu.home=Inicio |
courseunit.menu.put.question=Colocar dúvida |
courseunit.menu.assignements=Trabalhos |
courseunit.menu.blog=Blog da Unidade |
courseunit.menu.presences=Presenças |
courseunit.menu.contents=Conteúdos |
courseunit.menu.grades=Avaliação |
replace=Substituir |
courseunit.assignement.file=Enunciado |
93,3 → 110,6 |
/impl/conf/WEB-INF/struts/struts-blog.xml |
---|
90,5 → 90,29 |
<forward name="from.add.role" path="page.submit.blog.from.serviceZone"/> |
</action> |
<action path="/user/startAddPostFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=addPost&from=CourseUnit"/> |
<action path="/user/startEditPostFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=editPost&from=CourseUnit"/> |
<action path="/user/startDeletePostFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=deletePost&from=CourseUnit"/> |
<action path="/user/startValidatePostFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=validatePost&from=CourseUnit"/> |
<action path="/user/startSubmitBlogFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=start&from=CourseUnit"/> |
<action path="/user/startDeleteBlogFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=delete&from=CourseUnit"/> |
<action path="/user/startEditBlogFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=edit&from=CourseUnit"/> |
<action path="/user/startLoadBlogFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=load&from=CourseUnit"/> |
<action path="/user/startLoadBlogMonthFromCourseUnit" forward="/user/blogsControllerFromCourseUnit.do?dispatch=loadMonth&from=CourseUnit"/> |
<action path="/user/blogsControllerFromCourseUnit" |
type="pt.estgp.estgweb.web.controllers.blogs.BlogsController" |
name="BlogForm" |
scope="request" |
parameter="dispatch" |
validate="false" |
input="page.separators.home"> |
<forward name="load" path="page.load.blog.from.courseUnit"/> |
<forward name="submit" path="page.submit.blog.from.courseUnit"/> |
<forward name="loadMonth" path="page.load.blog.month.from.courseUnit"/> |
<forward name="from.add.role" path="page.submit.blog.from.courseUnit"/> |
</action> |
</action-mappings> |
</struts-config> |
/impl/conf/WEB-INF/struts/struts-courseunits.xml |
---|
38,12 → 38,14 |
</action> |
<!--<action path="/user/startLoadCourseUnitFromHome" forward="page.load.courseunit.from.home"/>--> |
startLoadCourseUnitAssignementFromHome |
<action path="/user/startCourseUnitBlogFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=startBlog&from=CourseUnit"/> |
<action path="/user/startLoadCourseUnitAssignementFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=loadAssignement&from=Home"/> |
<action path="/user/startValidateInvalidateCourseUnitWorksFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=validateInvalidateAssignement&from=Home"/> |
<action path="/user/startDeleteCourseUnitWorksFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=deleteAssignement&from=Home"/> |
<action path="/user/startEditCourseUnitWorksFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=editAssignement&from=Home"/> |
<action path="/user/startLoadCourseUnitWorksFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=loadWorks&from=Home"/> |
<action path="/user/startLoadCourseUnitStudentsFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=loadStudents&from=Home"/> |
<action path="/user/startLoadCourseUnitFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=load&from=Home"/> |
<action path="/user/courseUnitControllerFromHome" |
type="pt.estgp.estgweb.web.controllers.courseunits.CourseUnitsController" |
55,6 → 57,8 |
<forward name="load" path="page.load.courseunit.from.home"/> |
<forward name="load.works" path="page.load.courseunit.works.from.home"/> |
<forward name="load.assignement" path="page.load.courseunit.assignement.from.home"/> |
<forward name="load.blog" path="page.load.blog.from.courseUnit"/> |
<forward name="load.students" path="page.load.courseunit.students.from.home"/> |
<forward name="submit" path="page.submit.courseunit.from.home"/> |
</action> |
/impl/conf/WEB-INF/struts/tiles-courseunits.xml |
---|
44,12 → 44,40 |
<put name="left" value="/user/courseunits/menu.jsp"/> |
<put name="body" value="/user/courseunits/courseunitassignement.jsp"/> |
</definition> |
<definition name="page.load.courseunit.students.from.home" extends="page.separators.home"> |
<put name="title" value="Alunos Inscritos da Unidade Curricular"/> |
<put name="topnav" value="/user/home/topnavCourseUnitStudents.jsp"/> |
<put name="left" value="/user/courseunits/menu.jsp"/> |
<put name="body" value="/user/courseunits/students.jsp"/> |
</definition> |
<definition name="page.submit.blog.from.courseUnit" extends="page.separators.home"> |
<put name="title" value="Blog da Unidade Curricular"/> |
<put name="topnav" value="/user/courseunits/topnavCreateBlog.jsp"/> |
<put name="left" value="/user/courseunits/menu.jsp"/> |
<put name="body" value="/user/courseunits/submitBlog.jsp"/> |
</definition> |
<definition name="page.load.blog.from.courseUnit" extends="page.separators.home"> |
<put name="title" value="Blog da Unidade Curricular"/> |
<put name="topnav" value="/user/courseunits/topnavLoadBlog.jsp"/> |
<put name="left" value="/user/courseunits/menu.jsp"/> |
<put name="body" value="/user/courseunits/blog.jsp"/> |
</definition> |
<definition name="page.load.blog.month.from.courseUnit" extends="page.separators.home"> |
<put name="title" value="Blog da Unidade Curricular"/> |
<put name="topnav" value="/user/courseunits/topnavLoadBlogMonth.jsp"/> |
<put name="left" value="/user/courseunits/menu.jsp"/> |
<put name="body" value="/user/courseunits/blog.jsp"/> |
</definition> |
<!--Administrative pages--> |
<definition name="page.submit.courseunit.admin.from.service.zone" extends="page.separators.serviceZone"> |
/impl/conf/WEB-INF/struts/tiles-blog.xml |
---|
12,13 → 12,11 |
<put name="topnav" value="/admin/blogs/topnavCreateBlog.jsp"/> |
<put name="body" value="/admin/blogs/submitBlog.jsp"/> |
</definition> |
<definition name="page.load.blog" extends="base.layout1"> |
<put name="title" value="Blog"/> |
<put name="topnav" value="/public/blogs/topnavLoadBlog.jsp"/> |
<put name="body" value="/public/blogs/blog.jsp"/> |
</definition> |
<definition name="page.load.blog.month" extends="base.layout1"> |
<put name="title" value="Blog"/> |
<put name="body" value="/public/blogs/blog.jsp"/> |
31,11 → 29,6 |
<put name="topnav" value="/user/home/topnavCreateBlog.jsp"/> |
<put name="body" value="/admin/blogs/submitBlog.jsp"/> |
</definition> |
<definition name="page.submit.blog.from.serviceZone" extends="page.separators.serviceZone"> |
<put name="title" value="Submit Blog"/> |
<put name="topnav" value="/user/serviceZone/topnavCreateBlog.jsp"/> |
<put name="body" value="/admin/blogs/submitBlog.jsp"/> |
</definition> |
<definition name="page.load.blog.from.home" extends="page.separators.home"> |
<put name="title" value="Load Blog"/> |
<put name="topnav" value="/user/home/topnavLoadBlog.jsp"/> |
46,6 → 39,13 |
<put name="topnav" value="/user/home/topnavLoadBlogMonth.jsp"/> |
<put name="body" value="/public/blogs/blog.jsp"/> |
</definition> |
<definition name="page.submit.blog.from.serviceZone" extends="page.separators.serviceZone"> |
<put name="title" value="Submit Blog"/> |
<put name="topnav" value="/user/serviceZone/topnavCreateBlog.jsp"/> |
<put name="body" value="/admin/blogs/submitBlog.jsp"/> |
</definition> |
<definition name="page.load.blog.from.serviceZone" extends="page.separators.serviceZone"> |
<put name="title" value="Load Blog"/> |
<put name="topnav" value="/user/serviceZone/topnavLoadBlog.jsp"/> |
/impl/conf/log4j.properties |
---|
20,7 → 20,11 |
log4j.appender.hibernate.sessionServiceClass=HibernateHelper |
log4j.appender.hibernate.loggingEventClass=LogEvent |
# suppress warnings from the SessionImpl (like Narrowing proxy to class com.atlassian.confluence.pages.Page - this operation breaks ==) |
log4j.logger.org.hibernate.engine.StatefulPersistenceContext.ProxyWarnLog=ERROR |
log4j.additivity.org.hibernate.engine.StatefulPersistenceContext.ProxyWarnLog=false |
#default category |
log4j.rootLogger = info, defaultLog, stdout |
/impl/conf/berserk/sd.xml |
---|
670,6 → 670,17 |
</filterChains> |
</service> |
<service> |
<name>StartCourseUnitBlog</name> |
<implementationClass>pt.estgp.estgweb.services.courseunits.CourseUnitBlogService</implementationClass> |
<description>start course unit blog creating if don't exist</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>startUnitBlog</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
</filterChains> |
</service> |
<service> |
<name>DeliverCourseUnitWork</name> |
<implementationClass>pt.estgp.estgweb.services.courseunits.CourseUnitWorkService</implementationClass> |
<description>Load course unit works</description> |
682,6 → 693,18 |
</filterChains> |
</service> |
<service> |
<name>UpdateCourseUnitDeliverables</name> |
<implementationClass>pt.estgp.estgweb.services.courseunits.CourseUnitWorkService</implementationClass> |
<description>update deliverables with grade and observations</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>updateDeliverables</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="OwnerCourseUnit"/> |
</filterChains> |
</service> |
<service> |
<name>ValidateInvalidateCourseUnitWork</name> |
<implementationClass>pt.estgp.estgweb.services.courseunits.CourseUnitWorkService</implementationClass> |
<description>Load course unit works</description> |
/impl/conf/berserk/fd.xml |
---|
167,4 → 167,10 |
<description>Check if a resource can be loaded</description> |
<isTransactional>false</isTransactional> |
</filter> |
<filter> |
<name>ResourceAccessControlCourseUnit</name> |
<implementationClass>pt.estgp.estgweb.filters.filters.ResourceAccessControlCourseUnitFilter</implementationClass> |
<description>Check if a resource can be loaded</description> |
<isTransactional>false</isTransactional> |
</filter> |
</filterDefinitions> |
/impl/conf/berserk/fcd.xml |
---|
268,7 → 268,12 |
<invocationTiming>1</invocationTiming> |
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass> |
</filterChain> |
<!--<filterChain>--> |
<!--<name>InternalCourseUnitBlog</name>--> |
<!--<expression>!(BooleanCheck("serializable","pt.estgp.estgweb.domain.CourseUnitImpl","unitBlog.courseUnitInternal")) || ResourceAccessControlCourseUnit</expression>--> |
<!--<description>Check if the the boolean is true</description>--> |
<!--<invocationTiming>1</invocationTiming>--> |
<!--<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass>--> |
<!--</filterChain>--> |
</filterChainsDefinitions> |
/impl/src/java/jomm/utils/DiacriticFilter.java |
---|
New file |
0,0 → 1,123 |
package clef; |
import org.apache.lucene.analysis.TokenFilter; |
import org.apache.lucene.analysis.TokenStream; |
import org.apache.lucene.analysis.Token; |
import java.io.*; |
/** |
* Normalizes token text to lower case. |
* |
* @version $Id: DiacriticFilter.java,v 1.2 2007/12/27 01:45:58 jmachado Exp $ |
*/ |
public final class DiacriticFilter extends TokenFilter |
{ |
public DiacriticFilter(TokenStream in) |
{ |
super(in); |
} |
public final Token next() throws IOException |
{ |
Token t = input.next(); |
if (t == null) |
return null; |
String value = t.termText(); |
return new Token(clean(value),t.startOffset(),t.endOffset()); |
} |
public static String clean(String value) |
{ |
StringBuilder finalTerm = new StringBuilder(); |
for (int j=0 ; j < value.length() ; j++) |
{ |
char c = value.charAt(j); |
switch(c) |
{ |
case 131: c = 'f'; break; |
case 138: c = 'S'; break; |
case 140: c = 'E'; break; |
case 154: c = 'S'; break; |
case 156: c = 'e'; break; |
case 159: c = 'Y'; break; |
case 167: c = 'S'; break; |
case 169: c = 'c'; break; |
case 192: c = 'A'; break; |
case 193: c = 'A'; break; |
case 194: c = 'A'; break; |
case 195: c = 'A'; break; |
case 196: c = 'A'; break; |
case 197: c = 'A'; break; |
case 198: c = 'A'; break; |
case 199: c = 'C'; break; |
case 200: c = 'E'; break; |
case 201: c = 'E'; break; |
case 202: c = 'E'; break; |
case 203: c = 'E'; break; |
case 204: c = 'I'; break; |
case 205: c = 'I'; break; |
case 206: c = 'I'; break; |
case 207: c = 'I'; break; |
case 208: c = 'D'; break; |
case 209: c = 'N'; break; |
case 210: c = 'O'; break; |
case 211: c = 'O'; break; |
case 212: c = 'O'; break; |
case 213: c = 'O'; break; |
case 214: c = 'O'; break; |
case 215: c = 'X'; break; |
case 216: c = 'O'; break; |
case 217: c = 'U'; break; |
case 218: c = 'U'; break; |
case 219: c = 'U'; break; |
case 220: c = 'U'; break; |
case 221: c = 'Y'; break; |
case 222: c = 'P'; break; |
case 223: c = 'B'; break; |
case 224: c = 'a'; break; |
case 225: c = 'a'; break; |
case 226: c = 'a'; break; |
case 227: c = 'a'; break; |
case 228: c = 'a'; break; |
case 229: c = 'a'; break; |
case 230: c = 'a'; break; |
case 231: c = 'c'; break; |
case 232: c = 'e'; break; |
case 233: c = 'e'; break; |
case 234: c = 'e'; break; |
case 235: c = 'e'; break; |
case 236: c = 'i'; break; |
case 237: c = 'i'; break; |
case 238: c = 'i'; break; |
case 239: c = 'i'; break; |
case 240: c = 'o'; break; |
case 241: c = 'n'; break; |
case 242: c = 'o'; break; |
case 243: c = 'o'; break; |
case 244: c = 'o'; break; |
case 245: c = 'o'; break; |
case 246: c = 'o'; break; |
case 247: break; |
case 248: c = 'o'; break; |
case 249: c = 'u'; break; |
case 250: c = 'u'; break; |
case 251: c = 'u'; break; |
case 252: c = 'u'; break; |
case 253: c = 'y'; break; |
case 254: c = 'p'; break; |
} |
finalTerm.append(c); |
} |
return finalTerm.toString(); |
} |
public static void main(String args[]) |
{ |
for(int i = 0; i < 255;i++) |
System.out.println(i + ":" + (char)i); |
} |
} |
/impl/src/java/jomm/dao/impl/AbstractDao.java |
---|
26,7 → 26,7 |
public abstract class AbstractDao<CLAZZ> implements IDomainObjectDao<CLAZZ> |
{ |
/** |
* Return the number of results that match the given criteria. |
* |
55,9 → 55,9 |
public CLAZZ getLast(String maxField) |
{ |
List<CLAZZ> objs = createCriteria() |
.addOrder( Order.desc(maxField) ) |
.setMaxResults(1) |
.list(); |
.addOrder( Order.desc(maxField) ) |
.setMaxResults(1) |
.list(); |
if(objs != null && objs.size() > 0) |
return objs.get(0); |
else |
107,18 → 107,18 |
} |
public static void commit() { |
try |
{ |
getCurrentSession().connection().commit(); |
} |
catch (HibernateException e) |
{ |
throw new DaoException(e); |
} |
catch (SQLException e) |
{ |
throw new DaoException(e); |
} |
try |
{ |
getCurrentSession().connection().commit(); |
} |
catch (HibernateException e) |
{ |
throw new DaoException(e); |
} |
catch (SQLException e) |
{ |
throw new DaoException(e); |
} |
} |
184,7 → 184,7 |
/** |
* Create an SQLQuery based on the given query string. |
* |
* |
* @param queryString an SQL query |
* @return an SQLQuery |
*/ |
225,12 → 225,12 |
throw new DaoException(e); |
} |
} |
/** |
* Returns results as a page. |
* |
* |
* Finds "sizeOfPage" objects, starting from the page "pageIndex". |
* |
* |
* @param pageIndex page number |
* @param sizeOfPage results in page |
* @return persistent objects |
243,10 → 243,10 |
try |
{ |
Criteria criteria = createCriteria(); |
criteria.setFirstResult(pageIndex * sizeOfPage); |
criteria.setMaxResults(sizeOfPage); |
return criteria.list(); |
} |
catch (HibernateException e) |
278,10 → 278,106 |
* |
* @SuppressWarnings("unchecked") |
*/ |
public static Object load( Class cl, Serializable dbKey) { |
try |
{ |
Object c = getCurrentSession().load(cl, dbKey); |
if(c!=null && !((DomainObject)c).getReferenceClass().getName().equals(cl.getName())) |
{ |
Class cC = ((DomainObject)c).getReferenceClass(); |
return getCurrentSession().load(cC,dbKey); |
} |
return c; |
} |
catch (HibernateException e) |
{ |
throw new DaoException(e); |
} |
} |
/** |
* Used by the base DAO classes but here for your modification Load object |
* matching the given key and return it. |
* |
* @SuppressWarnings("unchecked") |
*/ |
public static Object get( Class cl, Serializable dbKey) { |
try |
{ |
Object c = getCurrentSession().get(cl, dbKey); |
if(c!=null && !((DomainObject)c).getReferenceClass().getName().equals(cl.getName())) |
{ |
Class cC = ((DomainObject)c).getReferenceClass(); |
return getCurrentSession().get(cC,dbKey); |
} |
return c; |
} |
catch (HibernateException e) |
{ |
throw new DaoException(e); |
} |
} |
/** |
* Used by the base DAO classes but here for your modification Load object |
* matching the given key and return it. |
* |
* @SuppressWarnings("unchecked") |
*/ |
public static Object load( String cl, Serializable dbKey) { |
try |
{ |
Object c = getCurrentSession().load(cl, dbKey); |
if(c!=null && !((DomainObject)c).getReferenceClass().getName().equals(cl)) |
{ |
Class cC = ((DomainObject)c).getReferenceClass(); |
return getCurrentSession().load(cC,dbKey); |
} |
return c; |
} |
catch (HibernateException e) |
{ |
throw new DaoException(e); |
} |
} |
/** |
* Used by the base DAO classes but here for your modification Load object |
* matching the given key and return it. |
* |
* @SuppressWarnings("unchecked") |
*/ |
public static Object get( String cl, Serializable dbKey) { |
try |
{ |
Object c = getCurrentSession().get(cl, dbKey); |
if(c!=null && !((DomainObject)c).getReferenceClass().getName().equals(cl)) |
{ |
Class cC = ((DomainObject)c).getReferenceClass(); |
return getCurrentSession().get(cC,dbKey); |
} |
return c; |
} |
catch (HibernateException e) |
{ |
throw new DaoException(e); |
} |
} |
/** |
* Used by the base DAO classes but here for your modification Load object |
* matching the given key and return it. |
* |
* @SuppressWarnings("unchecked") |
*/ |
public final CLAZZ load(Serializable dbKey) { |
try |
{ |
return (CLAZZ) getCurrentSession().load(getReferenceClass(), dbKey); |
CLAZZ c = (CLAZZ) getCurrentSession().load(getReferenceClass(), dbKey); |
if(c != null && !((DomainObject)c).getReferenceClass().getName().equals(getReferenceClass().getName())) |
{ |
Class cC = ((DomainObject)c).getReferenceClass(); |
return (CLAZZ) getCurrentSession().load(cC,dbKey); |
} |
return c; |
} |
catch (HibernateException e) |
{ |
337,14 → 433,14 |
{ |
return loadOrNullLockWrite("id",dbKey); |
} |
/** |
/** |
* Used by the base DAO classes but here for your modification Load object |
* matching the given key and return it. |
* |
* @SuppressWarnings("unchecked") |
*/ |
public CLAZZ loadOrNullLockWrite(String field, Serializable dbKey) |
{ |
{ |
try |
{ |
return (CLAZZ) createCriteria().add(eq(field,dbKey)).uniqueResult(); |
384,7 → 480,13 |
*/ |
public final CLAZZ get(Serializable dbKey) { |
try { |
return (CLAZZ) getCurrentSession().get(getReferenceClass(), dbKey); |
CLAZZ c = (CLAZZ) getCurrentSession().get(getReferenceClass(), dbKey); |
if(c!=null && !((DomainObject)c).getReferenceClass().getName().equals(getReferenceClass().getName())) |
{ |
Class cC = ((DomainObject)c).getReferenceClass(); |
return (CLAZZ) getCurrentSession().get(cC,dbKey); |
} |
return c; |
} |
catch (HibernateException e) { |
throw new DaoException(e); |
399,7 → 501,7 |
* using the current value of the identifier property if the assigned |
* generator is used.) |
*/ |
public Serializable save(CLAZZ obj) |
public Serializable save(CLAZZ obj) |
{ |
try { |
DomainObject o = (DomainObject) obj; |
431,9 → 533,9 |
/** |
* Saves a collection of objects without returning the DbKey. |
* |
* |
* To obtain the DbKey, use the object itself. |
* |
* |
* @param objs List of objects to save |
*/ |
public final void save(Collection<CLAZZ> objs) |
612,7 → 714,7 |
/** |
* Deletes a collection of objects. |
* |
* |
* @param objs Objects to delete |
*/ |
public final void delete(Collection<CLAZZ> objs) |
704,7 → 806,7 |
if (pageSize >= 0 && pageSize < count) { |
return criteria.setFirstResult(pageSize * pageNumber) |
.setMaxResults(pageSize); |
.setMaxResults(pageSize); |
} |
return criteria; |
/impl/src/java/pt/estgp/estgweb/services/courseunits/UsersUnitsService.java |
---|
32,7 → 32,7 |
t.getId(); |
courseUnit.getTeachers().remove(t); |
courseUnit.getTeachers().add(t); |
return loadCourseUnitService.run(courseUnitId,true,true,userSession); |
return loadCourseUnitService.run(courseUnitId,true,true,false,userSession); |
} |
public CourseUnitView removeTeacher(long teacherId,long courseUnitId, UserSession userSession) throws ServiceException |
40,16 → 40,16 |
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId); |
TeacherImpl t = (TeacherImpl) DaoFactory.getTeacherDaoImpl().get(teacherId); |
courseUnit.getTeachers().remove(t); |
return loadCourseUnitService.run(courseUnitId,true,true,userSession); |
return loadCourseUnitService.run(courseUnitId,true,true,false,userSession); |
} |
public CourseUnitView addStudent(int code,long courseUnitId, UserSession userSession) throws ServiceException |
public CourseUnitView addStudent(int code, long courseUnitId, UserSession userSession) throws ServiceException |
{ |
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId); |
StudentImpl s = (StudentImpl) DaoFactory.getStudentDaoImpl().loadBySigesCode(code); |
courseUnit.getStudents().remove(s); |
courseUnit.getStudents().add(s); |
return loadCourseUnitService.run(courseUnitId,true,true,userSession); |
return loadCourseUnitService.run(courseUnitId,true,true,false,userSession); |
} |
public CourseUnitView removeStudent(int code,long courseUnitId, UserSession userSession) throws ServiceException |
57,6 → 57,6 |
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId); |
StudentImpl s = (StudentImpl) DaoFactory.getStudentDaoImpl().loadBySigesCode(code); |
courseUnit.getStudents().remove(s); |
return loadCourseUnitService.run(courseUnitId,true,true,userSession); |
return loadCourseUnitService.run(courseUnitId,true,true,false,userSession); |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitAdminService.java |
---|
29,7 → 29,7 |
public class CreateCourseUnitAdminService implements IService |
{ |
LoadCourseUnitWorksService loadCourseUnitWorksService = new LoadCourseUnitWorksService(); |
CourseUnitWorkService loadCourseUnitWorksService = new CourseUnitWorkService(); |
private static final Logger logger = Logger.getLogger(CreateCourseUnitAdminService.class); |
54,6 → 54,6 |
return loadCourseUnitWorksService.run(courseUnit.getId(),userSession); |
return loadCourseUnitWorksService.loadCourseUnitWorks(courseUnit.getId(),userSession); |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/courseunits/LoadCourseUnitService.java |
---|
5,10 → 5,7 |
import pt.estgp.estgweb.services.blogs.LoadBlogPostsService; |
import pt.estgp.estgweb.services.expceptions.ServiceException; |
import pt.estgp.estgweb.services.data.RepositoryService; |
import pt.estgp.estgweb.domain.views.BlogView; |
import pt.estgp.estgweb.domain.views.BlogPostView; |
import pt.estgp.estgweb.domain.views.CourseUnitView; |
import pt.estgp.estgweb.domain.views.UserView; |
import pt.estgp.estgweb.domain.views.*; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import org.apache.log4j.Logger; |
36,17 → 33,18 |
{ |
RepositoryService repositoryService = new RepositoryService(); |
LoadCourseUnitAnnouncements loadCourseUnitAnnouncements = new LoadCourseUnitAnnouncements(); |
private static final Logger logger = Logger.getLogger(LoadCourseUnitService.class); |
public CourseUnitView run(long id, boolean initTeachers, boolean initStudents, UserSession userSession) throws ServiceException |
public CourseUnitView run(long id, boolean initTeachers, boolean initStudents, boolean initBlog, UserSession userSession) throws ServiceException |
{ |
CourseUnit c = DaoFactory.getCourseUnitDaoImpl().get(id); |
if(c == null) |
return null; |
CourseUnitView cV = new CourseUnitView(c,initTeachers,initStudents); |
CourseUnitView cV = new CourseUnitView(c,initTeachers,initStudents,initBlog); |
if(c.getProgramStreamId()!= null) |
{ |
57,6 → 55,12 |
cV.setExtension(repositoryFile.getLastVersion().getExtension()); |
} |
} |
if(initTeachers) |
{ |
List<AnnouncementView> announcementViews = loadCourseUnitAnnouncements.run(id,userSession); |
cV.setAnnouncements(announcementViews); |
} |
return cV; |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/courseunits/CourseUnitWorkService.java |
---|
4,11 → 4,14 |
import pt.estgp.estgweb.domain.views.CourseUnitView; |
import pt.estgp.estgweb.domain.views.CourseUnitAssignementView; |
import pt.estgp.estgweb.domain.views.CourseUnitDeliverableView; |
import pt.estgp.estgweb.domain.views.BlogView; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.services.expceptions.ServiceException; |
import pt.estgp.estgweb.services.data.RepositoryService; |
import pt.estgp.estgweb.services.blogs.CreateBlogService; |
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum; |
import pt.estgp.estgweb.filters.exceptions.AccessDeniedException; |
import org.apache.log4j.Logger; |
import java.util.List; |
17,6 → 20,7 |
import java.io.InputStream; |
import jomm.utils.FilesUtils; |
import jomm.utils.MessageResources; |
/* |
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt |
39,28 → 43,43 |
LoadCourseUnitService loadCourseUnitService = new LoadCourseUnitService(); |
private static final Logger logger = Logger.getLogger(CourseUnitWorkService.class); |
public CourseUnitView create(CourseUnitAssignementView cUV, long id, UserSession userSession) throws ServiceException |
public CourseUnitView create(CourseUnitAssignementView cUV, long id, InputStream file, String name, int size, String contentType, UserSession userSession) throws ServiceException |
{ |
CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(id); |
CourseUnitAssignement cU; |
CourseUnitAssignement assignement; |
if(cUV.getId() > 0) |
cU = DaoFactory.getCourseUnitAssignementDaoImpl().get(cUV.getId()); |
assignement = DaoFactory.getCourseUnitAssignementDaoImpl().get(cUV.getId()); |
else |
{ |
cU = DomainObjectFactory.createCourseUnitAssignementImpl(); |
cU.setCourseUnit(courseUnit); |
assignement = DomainObjectFactory.createCourseUnitAssignementImpl(); |
assignement.setCourseUnit(courseUnit); |
} |
cUV.persistViewInObject(cU); |
DaoFactory.getCourseUnitAssignementDaoImpl().save(cU); |
cUV.persistViewInObject(assignement); |
if(name != null && name.length() > 0 && size > 0 && file != null) |
{ |
String extension = FilesUtils.getExtension(name); |
if(assignement.getRepositoryStream() == null || assignement.getRepositoryStream().trim().length() == 0) |
{ |
String identifier = repositoryService.storeRepositoryFile(file, contentType, extension, size, name, "courseunit.assignement.file " + courseUnit.getName() + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.courseunitDomain,userSession); |
assignement.setRepositoryStream(identifier); |
} |
else |
repositoryService.updateRepositoryFile(assignement.getRepositoryStream(), file, contentType, extension, size, name, "courseunit.assignement.file " + courseUnit.getName() + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.courseunitDomain); |
} |
DaoFactory.getCourseUnitAssignementDaoImpl().save(assignement); |
return loadCourseUnitWorks(id,userSession); |
} |
public CourseUnitView loadCourseUnitWorks(long id, UserSession userSession) throws ServiceException |
{ |
CourseUnitView cV = loadCourseUnitService.run(id,false,false,userSession); |
CourseUnitView cV = loadCourseUnitService.run(id,false,false,false,userSession); |
if(cV == null) |
return null; |
71,7 → 90,7 |
{ |
boolean invalids = false; |
List<CourseUnitAssignementView> views = new ArrayList<CourseUnitAssignementView>(); |
if(userSession.getUser() != null && ((CourseUnitImpl)courseUnit).isOwnedBy(userSession.getUser())) |
if(userSession.getUser() != null && ((CourseUnitImpl)courseUnit).isOwnedBy(userSession.getUser(),true)) |
{ |
invalids = true; |
} |
81,6 → 100,11 |
{ |
long delivers = DaoFactory.getCourseUnitDeliverableDaoImpl().countAssignements(a.getId()); |
CourseUnitAssignementView view = new CourseUnitAssignementView(a,delivers); |
if(view.getWorkFile() != null && view.getWorkFile().length() > 0) |
{ |
RepositoryFileImpl repositoryFile = repositoryService.loadView(a.getRepositoryStream()); |
view.setRepositoryFile(repositoryFile); |
} |
views.add(view); |
} |
} |
129,17 → 153,17 |
if(deliverable == null) |
{ |
deliverable = DomainObjectFactory.createCourseUnitDeliverableImpl(); |
String identifier = repositoryService.storeRepositoryFile(file, contentType, extension, size, name, "courseunit.assignement " + assignement.getCourseUnit().getName() + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.courseunitDomain,userSession); |
deliverable.setDeliverableFilePath(identifier); |
String identifier = repositoryService.storeRepositoryFile(file, contentType, extension, size, name, "courseunit.assignement " + assignement.getCourseUnit().getName() + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.courseunitDeliverableDomain,userSession); |
deliverable.setDeliverableRepositoryStream(identifier); |
deliverable.setCourseUnitAssignement(assignement); |
deliverable.setStudent((Student) userSession.getUser()); |
DaoFactory.getCourseUnitDeliverableDaoImpl().save(deliverable); |
} |
else |
{ |
repositoryService.updateRepositoryFile(deliverable.getDeliverableFilePath(), file, contentType, extension, size, name, "courseunit.assignement " + assignement.getCourseUnit().getName() + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.courseunitDomain); |
repositoryService.updateRepositoryFile(deliverable.getDeliverableRepositoryStream(), file, contentType, extension, size, name, "courseunit.assignement " + assignement.getCourseUnit().getName() + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.courseunitDeliverableDomain); |
} |
deliverable.setUpdateDate(new Date()); |
deliverable.setDeliverDate(new Date()); |
return loadCourseUnitWorks(courseUnitId,userSession); |
} |
//todo alterar o dominio de filtragem |
156,6 → 180,34 |
} |
courseUnitAssignementView.setDeliverables(views); |
courseUnitAssignementView.setCourseUnitView(new CourseUnitView(assignement.getCourseUnit())); |
if(courseUnitAssignementView.getWorkFile() != null && courseUnitAssignementView.getWorkFile().length() > 0) |
{ |
RepositoryFileImpl repositoryFile = repositoryService.loadView(assignement.getRepositoryStream()); |
courseUnitAssignementView.setRepositoryFile(repositoryFile); |
} |
return courseUnitAssignementView; |
} |
public CourseUnitAssignementView updateDeliverables(long courseUnitId, long courseUnitAssignementId, List<CourseUnitDeliverableView> deliverableViews, UserSession userSession) throws ServiceException |
{ |
CourseUnitAssignement assignement = DaoFactory.getCourseUnitAssignementDaoImpl().load(courseUnitAssignementId); |
if(assignement.getCourseUnit().getId() != courseUnitId) |
{ |
logger.warn("Trying change deliverable of a not owned course unit:" + userSession.getUser().getId() + " " + userSession.getUser().getName()); |
throw new ServiceException("Access Denied", new AccessDeniedException("Trying change deliverable of a not owned course unit")); |
} |
for(CourseUnitDeliverableView deliverable: deliverableViews) |
{ |
CourseUnitDeliverable courseUnitDeliverable = DaoFactory.getCourseUnitDeliverableDaoImpl().load(deliverable.getId()); |
if(courseUnitDeliverable.getCourseUnitAssignement().getId() != assignement.getId()) |
{ |
logger.warn("Trying change deliverable of a not owned course unit:" + userSession.getUser().getId() + " " + userSession.getUser().getName()); |
throw new ServiceException("Access Denied", new AccessDeniedException("Trying change deliverable of a not owned course unit")); |
} |
deliverable.persistViewInObject(courseUnitDeliverable); |
} |
return loadAssignement(courseUnitAssignementId,userSession); |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/courseunits/CourseUnitBlogService.java |
---|
New file |
0,0 → 1,55 |
package pt.estgp.estgweb.services.courseunits; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import pt.estgp.estgweb.services.data.RepositoryService; |
import pt.estgp.estgweb.services.expceptions.ServiceException; |
import pt.estgp.estgweb.services.blogs.CreateBlogService; |
import pt.estgp.estgweb.domain.views.CourseUnitView; |
import pt.estgp.estgweb.domain.views.CourseUnitAssignementView; |
import pt.estgp.estgweb.domain.views.BlogView; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.CourseUnit; |
import pt.estgp.estgweb.domain.RepositoryFile; |
import pt.estgp.estgweb.domain.CourseUnitImpl; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import org.apache.log4j.Logger; |
/* |
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt |
* |
* |
* Created at 17/Out/2003 , 23:45:24 |
* |
*/ |
/** |
* @author Jorge Machado |
* |
* |
* Created at 17/Out/2003 , 23:45:24 |
* |
*/ |
public class CourseUnitBlogService implements IService |
{ |
CreateBlogService createBlogService = new CreateBlogService(); |
LoadCourseUnitService loadCourseUnitService = new LoadCourseUnitService(); |
private static final Logger logger = Logger.getLogger(CourseUnitBlogService.class); |
public CourseUnitView startUnitBlog(long courseUnitId, UserSession userSession) throws ServiceException |
{ |
CourseUnitImpl courseUnit = (CourseUnitImpl) DaoFactory.getCourseUnitDaoImpl().get(courseUnitId); |
if(courseUnit.getUnitBlog() == null) |
{ |
BlogView b = new BlogView(); |
b.setTitle(courseUnit.getName() + " Blog"); |
b.setInternal(true); |
b.setAutoValidation(true); |
b.setStatus(true); |
b.setCourseUnitInternal(true); |
b.setCourseUnitView(new CourseUnitView(courseUnit)); |
createBlogService.run(b,userSession); |
} |
return loadCourseUnitService.run(courseUnitId,false,false,true,userSession); |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/courseunits/LoadCourseUnitAnnouncements.java |
---|
New file |
0,0 → 1,45 |
package pt.estgp.estgweb.services.courseunits; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import pt.estgp.estgweb.services.blogs.LoadBlogService; |
import pt.estgp.estgweb.services.expceptions.ServiceException; |
import pt.estgp.estgweb.domain.views.AnnouncementView; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.AnnouncementImpl; |
import pt.estgp.estgweb.domain.UserImpl; |
import pt.estgp.estgweb.domain.CourseUnitAnnouncementImpl; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import org.apache.log4j.Logger; |
import java.util.List; |
import java.util.ArrayList; |
/** |
* @author Jorge Machado |
* @date 19/Mai/2008 |
* @see pt.estgp.estgweb.services.blogs |
*/ |
public class LoadCourseUnitAnnouncements implements IService |
{ |
private static final Logger logger = Logger.getLogger(LoadBlogService.class); |
public List<AnnouncementView> run(long courseUnit, UserSession userSession) throws ServiceException |
{ |
List<CourseUnitAnnouncementImpl> announcements; |
if(((UserImpl)userSession.getUser()).isInCourseUnit(courseUnit,true)) |
{ |
announcements = DaoFactory.getCourseUnitAnnouncementDaoImpl().loadCourseUnitAnnouncements(courseUnit); |
} |
else |
{ |
announcements = DaoFactory.getCourseUnitAnnouncementDaoImpl().loadExternalCourseUnitAnnouncements(courseUnit); |
} |
List<AnnouncementView> announcementViews = new ArrayList<AnnouncementView>(); |
for(AnnouncementImpl announcement: announcements) |
{ |
announcementViews.add(new AnnouncementView(announcement)); |
} |
return announcementViews; |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/blogs/LoadBlogService.java |
---|
3,9 → 3,8 |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import pt.estgp.estgweb.domain.views.BlogView; |
import pt.estgp.estgweb.domain.views.BlogPostView; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.Blog; |
import pt.estgp.estgweb.domain.BlogImpl; |
import pt.estgp.estgweb.domain.views.CourseUnitView; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.services.expceptions.ServiceException; |
import org.apache.log4j.Logger; |
14,6 → 13,7 |
import java.util.ArrayList; |
import jomm.utils.MyCalendar; |
import jomm.dao.impl.AbstractDao; |
/* |
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt |
40,9 → 40,11 |
{ |
Blog b = DaoFactory.getBlogDaoImpl().get(id); |
if(b == null) |
return null; |
BlogView bV = new BlogView(b); |
List<BlogView.MonthPosts> monthIds = getMonths(id); |
List<BlogPostView> posts = loadBlogPostsService.loadLastPosts(id,userSession); |
/impl/src/java/pt/estgp/estgweb/services/blogs/CreateBlogService.java |
---|
2,15 → 2,14 |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import pt.estgp.estgweb.services.expceptions.ServiceException; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.Blog; |
import pt.estgp.estgweb.domain.DomainObjectFactory; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.views.BlogView; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.Globals; |
import org.apache.log4j.Logger; |
import java.util.Date; |
import java.util.HashSet; |
/* |
* @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt |
37,8 → 36,22 |
Blog b; |
if(bV.getId() <= 0) |
{ |
b = DomainObjectFactory.createBlogImpl(); |
b.setOwner(userSession.getUser()); |
if(bV.getCourseUnitView() != null) |
{ |
CourseUnit c = DaoFactory.getCourseUnitDaoImpl().get(bV.getCourseUnitView().getId()); |
b = DomainObjectFactory.createCourseUnitBlogImpl(); |
((CourseUnitBlogImpl)b).setCourseUnit(c); |
if(c.getBlogs() == null) |
c.setBlogs(new HashSet()); |
c.getBlogs().add((CourseUnitBlog) b); |
if(c.getTeachers()!=null && c.getTeachers().size() > 0) |
b.setOwner(c.getTeachers().iterator().next()); |
} |
else |
{ |
b = DomainObjectFactory.createBlogImpl(); |
b.setOwner(userSession.getUser()); |
} |
b.setSaveDate(new Date()); |
DaoFactory.getBlogDaoImpl().save(b); |
} |
/impl/src/java/pt/estgp/estgweb/services/blogs/CreateBlogPostService.java |
---|
66,7 → 66,7 |
Blog b = DaoFactory.getBlogDaoImpl().load(blogId); |
if(b.isAutoValidation() || b.isOwnedBy(userSession.getUser()) || userSession.getUser().isSuperuserOrAdmin()) |
if(b.isAutoValidation() || b.isOwnedBy(userSession.getUser(),true) || userSession.getUser().isSuperuserOrAdmin()) |
{ |
bPV.setStatus(true); |
} |
/impl/src/java/pt/estgp/estgweb/domain/UserImpl.java |
---|
1,5 → 1,7 |
package pt.estgp.estgweb.domain; |
import jomm.dao.impl.AbstractDao; |
import java.io.Serializable; |
import java.util.Date; |
import java.util.Set; |
/impl/src/java/pt/estgp/estgweb/domain/AnnouncementImpl.java |
---|
20,12 → 20,17 |
private static final Logger logger = Logger.getLogger(AnnouncementImpl.class); |
public boolean isOwnedBy(GenericUser u) |
public boolean isOwnedBy(GenericUser u, boolean transaction) |
{ |
return u.getId() == getOwner().getId(); |
} |
public boolean isOwnedBy(GenericUser u) |
{ |
return isOwnedBy(u,false); |
} |
public GenericUser getOwner() |
{ |
return super.getOwner(); |
/impl/src/java/pt/estgp/estgweb/domain/IAddContents.java |
---|
10,5 → 10,6 |
{ |
public boolean canAddContent(GenericUserImpl u); |
public boolean canAddContent(GenericUserImpl u, boolean transaction); |
} |
/impl/src/java/pt/estgp/estgweb/domain/CourseUnitImpl.java |
---|
24,9 → 24,14 |
public boolean isOwnedBy(GenericUser u) |
{ |
return u != null && u instanceof TeacherImpl && ((TeacherImpl)u).hasCourseUnit(getId(),true); |
return isOwnedBy(u, false); |
} |
public boolean isOwnedBy(GenericUser u, boolean transaction) |
{ |
return u != null && u instanceof TeacherImpl && ((TeacherImpl)u).hasCourseUnit(getId(),transaction); |
} |
/** |
* Not implemented can be variuous teachers |
* @return null |
58,4 → 63,11 |
{ |
return true; |
} |
public CourseUnitBlogImpl getUnitBlog() |
{ |
if(getBlogs()!=null && getBlogs().size() > 0) |
return (CourseUnitBlogImpl) getBlogs().iterator().next(); |
return null; |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/AnnouncementDaoImpl.java |
---|
196,6 → 196,8 |
return createCriteria().add(eq("owner.id", ownerId)).addOrder(Order.desc("updateDate")).list(); |
} |
public List<Announcement> loadInvalidAnnouncements() |
{ |
return createCriteria() |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitAssignementDaoImpl.java |
---|
51,4 → 51,12 |
public CourseUnitAssignement loadByRepositoryId(String identifier) |
{ |
return |
(CourseUnitAssignement) |
createCriteria() |
.add(eq("repositoryStream",identifier)) |
.uniqueResult(); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitDeliverableDaoImpl.java |
---|
49,7 → 49,7 |
return |
(CourseUnitDeliverable) |
createCriteria() |
.add(eq("deliverableFilePath",repositoryStreamId)) |
.add(eq("deliverableRepositoryStream",repositoryStreamId)) |
.uniqueResult(); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitAnnouncementDaoImpl.java |
---|
New file |
0,0 → 1,50 |
package pt.estgp.estgweb.domain.dao.impl; |
import pt.estgp.estgweb.domain.Announcement; |
import pt.estgp.estgweb.domain.AnnouncementImpl; |
import pt.estgp.estgweb.domain.CourseUnitAnnouncementImpl; |
import pt.estgp.estgweb.domain.dao.DaoUtils; |
import pt.estgp.estgweb.services.common.SearchTypeEnum; |
import java.util.List; |
import java.util.ArrayList; |
import java.util.Date; |
import org.hibernate.Criteria; |
import org.hibernate.criterion.Criterion; |
import org.hibernate.criterion.Order; |
import org.hibernate.criterion.Restrictions; |
import jomm.utils.MyCalendar; |
/** |
* @author Jorge Machado |
* @date 28/Fev/2008 |
* @time 2:51:06 |
* @see pt.estgp.estgweb.domain.dao.impl |
*/ |
public class CourseUnitAnnouncementDaoImpl extends CourseUnitAnnouncementDao |
{ |
public static CourseUnitAnnouncementDaoImpl getInstance() |
{ |
if (myInstance == null) |
myInstance = new CourseUnitAnnouncementDaoImpl(); |
return (CourseUnitAnnouncementDaoImpl) myInstance; |
} |
public List<CourseUnitAnnouncementImpl> loadCourseUnitAnnouncements(long courseUnit) |
{ |
return createCriteria() |
.add(Restrictions.eq("courseUnit.id", courseUnit)) |
.addOrder(Order.desc("saveDate")).list(); |
} |
public List<CourseUnitAnnouncementImpl> loadExternalCourseUnitAnnouncements(long courseUnit) |
{ |
return createCriteria() |
.add(Restrictions.eq("courseUnit.id", courseUnit)) |
.add(Restrictions.eq("courseUnitInternal",false)) |
.addOrder(Order.desc("saveDate")).list(); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/DaoFactory.java |
---|
21,6 → 21,11 |
return AnnouncementDaoImpl.getInstance(); |
} |
public static CourseUnitAnnouncementDaoImpl getCourseUnitAnnouncementDaoImpl() |
{ |
return CourseUnitAnnouncementDaoImpl.getInstance(); |
} |
public static CourseDaoImpl getCourseDaoImpl() |
{ |
return CourseDaoImpl.getInstance(); |
/impl/src/java/pt/estgp/estgweb/domain/DomainObject.java |
---|
39,4 → 39,5 |
{ |
return this.getClass(); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/BlogImpl.java |
---|
25,16 → 25,24 |
{ |
} |
public boolean canAddPost(GenericUserImpl user) |
{ |
return RoleManager.hasRole(getTargetRolesList(), Globals.ALL_ROLE) || user.hasRole(getTargetRolesList()) || user.isSuperuserOrAdmin() || isOwnedBy(user); |
return canAddPost(user,false); |
} |
public boolean canAddPost(GenericUserImpl user, boolean transaction) |
{ |
return RoleManager.hasRole(getTargetRolesList(), Globals.ALL_ROLE) || user.hasRole(getTargetRolesList()) || user.isSuperuserOrAdmin() || isOwnedBy(user,transaction); |
} |
public boolean canAddContent(GenericUserImpl u) |
{ |
return canAddPost(u); |
} |
public boolean canAddContent(GenericUserImpl u, boolean transaction) |
{ |
return canAddPost(u,transaction); |
} |
public List<String> getTargetRolesList() |
{ |
/impl/src/java/pt/estgp/estgweb/domain/RepositoryFileVersionImpl.java |
---|
13,4 → 13,9 |
{ |
return getId(); |
} |
public int getSizeKb() |
{ |
return getSize() / 1024; |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/BlogPostImpl.java |
---|
55,6 → 55,11 |
public boolean isOwnedBy(GenericUser u) |
{ |
return super.isOwnedBy(u) || getBlog().isOwnedBy(u); |
return isOwnedBy(u, false); |
} |
public boolean isOwnedBy(GenericUser u, boolean transaction) |
{ |
return super.isOwnedBy(u,transaction) || getBlog().isOwnedBy(u,transaction); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/views/ReminderView.java |
---|
190,8 → 190,15 |
return null; |
} |
public boolean isOwnedBy(GenericUser u) |
{ |
return reminder.isOwnedBy(u); |
return isOwnedBy(u, false); |
} |
public boolean isOwnedBy(GenericUser u, boolean transaction) |
{ |
return reminder.isOwnedBy(u,transaction); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/views/BlogPostView.java |
---|
76,9 → 76,14 |
public boolean isOwnedBy(GenericUser u) |
{ |
return blogPost.isOwnedBy(u); |
return blogPost.isOwnedBy(u,false); |
} |
public boolean isOwnedBy(GenericUser u, boolean transaction ) |
{ |
return blogPost.isOwnedBy(u,transaction); |
} |
public GenericUser getOwner() |
{ |
return owner; |
/impl/src/java/pt/estgp/estgweb/domain/views/AnnouncementView.java |
---|
342,9 → 342,14 |
return null; |
} |
public boolean isOwnedBy(GenericUser u, boolean transaction) |
{ |
return announcement.isOwnedBy(u,transaction); |
} |
public boolean isOwnedBy(GenericUser u) |
{ |
return announcement.isOwnedBy(u); |
return announcement.isOwnedBy(u,false); |
} |
public List<String> getTargetRolesList() |
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitAssignementView.java |
---|
28,9 → 28,11 |
private boolean lateDelivers; |
private String deliverDate; |
private Date deliverDateDate; |
private String workFile; |
private CourseUnitDeliverableView courseUnitDeliverableView; |
private List<CourseUnitDeliverableView> deliverables; |
private CourseUnitView courseUnitView; |
private RepositoryFileImpl repositoryFile; |
private CourseUnitAssignement courseUnitAssignement; |
48,6 → 50,8 |
{ |
} |
public CourseUnitAssignementView(CourseUnitAssignement courseUnitAssignement, long delivers) |
{ |
super(courseUnitAssignement); |
62,6 → 66,7 |
this.deliverDate = DatesUtils.getStringFromDate(courseUnitAssignement.getDeliverDate()); |
this.deliverDateDate = courseUnitAssignement.getDeliverDate(); |
this.lateDelivers = courseUnitAssignement.isLateDelivers(); |
this.workFile = courseUnitAssignement.getRepositoryStream(); |
} |
public void persistViewInObject(CourseUnitAssignement c) |
74,6 → 79,16 |
c.setDeliverType(deliverType); |
} |
public RepositoryFileImpl getRepositoryFile() |
{ |
return repositoryFile; |
} |
public void setRepositoryFile(RepositoryFileImpl repositoryFile) |
{ |
this.repositoryFile = repositoryFile; |
} |
public Date getDeliverDateDate() |
{ |
return deliverDateDate; |
89,6 → 104,16 |
return id; |
} |
public String getWorkFile() |
{ |
return workFile; |
} |
public void setWorkFile(String workFile) |
{ |
this.workFile = workFile; |
} |
public void setId(long id) |
{ |
this.id = id; |
/impl/src/java/pt/estgp/estgweb/domain/views/UserView.java |
---|
368,6 → 368,11 |
public boolean isOwnedBy(GenericUser u) |
{ |
return isOwnedBy(u,false); |
} |
public boolean isOwnedBy(GenericUser u, boolean transaction) |
{ |
return u.getId() == id; |
} |
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitDeliverableView.java |
---|
23,6 → 23,8 |
private Date deliverDate; |
private String deliverDateStr; |
private UserView student; |
private String grade; |
private String obs; |
private CourseUnitDeliverable courseUnitDeliverable; |
private CourseUnitAssignementView courseUnitAssignementView; |
48,8 → 50,10 |
super(courseUnitDeliverable); |
this.courseUnitDeliverable = courseUnitDeliverable; |
this.id = courseUnitDeliverable.getId(); |
this.fileStreamId = courseUnitDeliverable.getDeliverableFilePath(); |
this.deliverDate = courseUnitDeliverable.getUpdateDate(); |
this.grade = courseUnitDeliverable.getGrade(); |
this.obs = courseUnitDeliverable.getObs(); |
this.fileStreamId = courseUnitDeliverable.getDeliverableRepositoryStream(); |
this.deliverDate = courseUnitDeliverable.getDeliverDate(); |
this.deliverDateStr = DatesUtils.getStringFromDate(deliverDate); |
if(courseUnitDeliverable.getStudent() != null) |
this.student = new UserView(courseUnitDeliverable.getStudent()); |
58,9 → 62,20 |
public void persistViewInObject(CourseUnitDeliverable c) |
{ |
c.setGrade(grade); |
c.setObs(obs); |
} |
public String getGrade() |
{ |
return grade; |
} |
public void setGrade(String grade) |
{ |
this.grade = grade; |
} |
public UserView getStudent() |
{ |
return student; |
82,6 → 97,16 |
} |
public String getObs() |
{ |
return obs; |
} |
public void setObs(String obs) |
{ |
this.obs = obs; |
} |
public String getFileStreamId() |
{ |
return fileStreamId; |
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java |
---|
27,7 → 27,8 |
private String semestre; |
private String importYear; |
private BlogView blog; |
private Set<CourseUnitAnnouncement> announcements; |
private List<AnnouncementView> announcements; |
private CourseUnit courseUnit; |
private Set<UserView> teachers; |
private Set<UserView> students; |
54,16 → 55,29 |
public CourseUnitView(CourseUnit courseUnit, boolean initTeachers, boolean initStudents ) |
{ |
super(courseUnit); |
init(courseUnit, initTeachers, initStudents); |
init(courseUnit, initTeachers, initStudents,false); |
} |
public CourseUnitView(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog ) |
{ |
super(courseUnit); |
init(courseUnit, initTeachers, initStudents, initBlog); |
} |
public CourseUnitView(CourseUnit courseUnit) |
{ |
super(courseUnit); |
init(courseUnit, false,false); |
init(courseUnit, false,false,false); |
} |
private void init(CourseUnit courseUnit, boolean initTeachers, boolean initStudents) |
public CourseUnitView(CourseUnit courseUnit, BlogView b) |
{ |
super(courseUnit); |
this.blog = b; |
init(courseUnit, false,false,false); |
} |
private void init(CourseUnit courseUnit, boolean initTeachers, boolean initStudents, boolean initBlog) |
{ |
this.courseUnit = courseUnit; |
this.courseName = courseUnit.getCourseName(); |
this.name = courseUnit.getName(); |
72,6 → 86,9 |
this.semestre = courseUnit.getSemestre(); |
this.importYear = courseUnit.getImportYear(); |
this.courseCode = courseUnit.getCourseCode(); |
this.objectives = courseUnit.getObjectives(); |
if(courseUnit.getProgramStreamId() != null) |
programStreamId = courseUnit.getProgramStreamId(); |
// if(courseUnit.getBlog() != null) |
// this.blog = new BlogView(courseUnit.getBlog()); |
this.id = courseUnit.getId(); |
93,8 → 110,17 |
students.add(u); |
} |
} |
if(initBlog) |
{ |
blog = new BlogView(((CourseUnitImpl)courseUnit).getUnitBlog(),this); |
} |
} |
public void setAnnouncements(List<AnnouncementView> announcements) |
{ |
this.announcements = announcements; |
} |
public int getTeachersSize() |
{ |
if(teachers != null) |
249,7 → 275,7 |
this.extension = extension; |
} |
public Set<CourseUnitAnnouncement> getAnnouncements() |
public List<AnnouncementView> getAnnouncements() |
{ |
return announcements; |
} |
266,8 → 292,13 |
public boolean isOwnedBy(GenericUser u) |
{ |
return u != null && u instanceof TeacherImpl && ((TeacherImpl)u).hasCourseUnit(getId()); |
return isOwnedBy(u, false); |
} |
public boolean isOwnedBy(GenericUser u, boolean transaction) |
{ |
return u != null && u instanceof TeacherImpl && ((TeacherImpl)u).hasCourseUnit(getId(), transaction); |
} |
/** |
* Not implemented can be variuous teachers |
/impl/src/java/pt/estgp/estgweb/domain/views/BlogView.java |
---|
2,12 → 2,15 |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.utils.RoleManager; |
import java.io.Serializable; |
import java.util.List; |
import jomm.dao.impl.AbstractDao; |
/** |
* @author Jorge Machado |
* @date 2/Mar/2008 |
34,7 → 37,9 |
private List<MonthPosts> months; |
private int month; |
private int year; |
boolean autoValidation; |
private boolean autoValidation; |
private boolean courseUnitInternal; |
private CourseUnitView courseUnitView; |
private List<BlogPostView> lastPosts; |
45,6 → 50,16 |
public BlogView(Blog blog) |
{ |
super(blog); |
init(blog,null); |
} |
public BlogView(Blog blog, CourseUnitView c) |
{ |
super(blog); |
init(blog,c); |
} |
private void init(Blog blog, CourseUnitView c) |
{ |
this.blog = blog; |
this.title = blog.getTitle(); |
this.description = blog.getDescription(); |
56,6 → 71,19 |
this.name = blog.getName(); |
this.internal = blog.isInternal(); |
autoValidation = blog.isAutoValidation(); |
if(blog instanceof CourseUnitBlogImpl) |
{ |
if(c != null) |
{ |
courseUnitView = c; |
courseUnitInternal = ((CourseUnitBlog)blog).isCourseUnitInternal(); |
} |
else |
{ |
courseUnitInternal = ((CourseUnitBlog)blog).isCourseUnitInternal(); |
courseUnitView = new CourseUnitView(((CourseUnitBlog)blog).getCourseUnit(),this); |
} |
} |
} |
public void persistViewInObject(Blog blog) |
68,6 → 96,10 |
blog.setImage(image); |
blog.setInternal(internal); |
blog.setAutoValidation(autoValidation); |
if(blog instanceof CourseUnitBlog) |
{ |
((CourseUnitBlog)blog).setCourseUnitInternal(courseUnitInternal); |
} |
} |
public void persistViewInObjectByAdmin(Blog blog) |
{ |
86,6 → 118,16 |
this.autoValidation = autoValidation; |
} |
public CourseUnitView getCourseUnitView() |
{ |
return courseUnitView; |
} |
public void setCourseUnitView(CourseUnitView courseUnitView) |
{ |
this.courseUnitView = courseUnitView; |
} |
public String getName() |
{ |
return name; |
136,6 → 178,16 |
this.lastPosts = lastPosts; |
} |
public boolean isCourseUnitInternal() |
{ |
return courseUnitInternal; |
} |
public void setCourseUnitInternal(boolean courseUnitInternal) |
{ |
this.courseUnitInternal = courseUnitInternal; |
} |
public void setInternal(boolean internal) |
{ |
this.internal = internal; |
153,9 → 205,14 |
public boolean isOwnedBy(GenericUser u) |
{ |
return blog.isOwnedBy(u); |
return blog.isOwnedBy(u,false); |
} |
public boolean isOwnedBy(GenericUser u, boolean transaction) |
{ |
return blog.isOwnedBy(u,transaction); |
} |
public GenericUser getOwner() |
{ |
return owner; |
263,6 → 320,10 |
{ |
return ((BlogImpl)blog).canAddContent(u); |
} |
public boolean canAddContent(GenericUserImpl u, boolean transaction) |
{ |
return ((BlogImpl)blog).canAddContent(u,transaction); |
} |
public boolean isInternal() |
{ |
/impl/src/java/pt/estgp/estgweb/domain/IOwned.java |
---|
12,6 → 12,7 |
{ |
public boolean isOwnedBy(GenericUser u); |
public boolean isOwnedBy(GenericUser u, boolean openTransaction); |
public GenericUser getOwner(); |
public List<String> getOwnerRoles(); |
public String getChoosedOwnerRole(); |
/impl/src/java/pt/estgp/estgweb/domain/CourseUnitBlogImpl.java |
---|
20,7 → 20,7 |
*/ |
public boolean canAddPost(GenericUserImpl user, boolean transaction) |
{ |
if(!super.canAddPost(user)) |
if(!super.canAddPost(user,transaction)) |
return false; |
if(user == null) |
return false; |
44,4 → 44,17 |
{ |
return !isCourseUnitInternal() || canAddPost(user,true); |
} |
public boolean isOwnedBy(GenericUser u, boolean transaction) |
{ |
if(u instanceof UserImpl) |
if(((UserImpl) u).isTeacherOfCourseUnit(getCourseUnit().getId(),transaction)) |
return true; |
return false; |
} |
public boolean isOwnedBy(GenericUser u) |
{ |
return isOwnedBy(u,false); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/ReminderImpl.java |
---|
23,6 → 23,11 |
public boolean isOwnedBy(GenericUser u) |
{ |
return isOwnedBy(u, false); |
} |
public boolean isOwnedBy(GenericUser u, boolean transaction) |
{ |
return u.getId() == getOwner().getId(); |
} |
/impl/src/java/pt/estgp/estgweb/domain/OwnedDomainObject.java |
---|
23,6 → 23,12 |
*/ |
public abstract List<String> getOwnerRoles(); |
public boolean isOwnedBy(GenericUser u) |
{ |
return isOwnedBy(u, false); |
} |
/** |
* Check if this object is owned by this user or |
* if this user is in group of owners or |
31,7 → 37,7 |
* @param u user to check |
* @return true if user is owner |
*/ |
public boolean isOwnedBy(GenericUser u) |
public boolean isOwnedBy(GenericUser u, boolean transaction) |
{ |
if(getOwner() == null && getOwnerRoles() == null) |
return false; |
/impl/src/java/pt/estgp/estgweb/filters/chains/ResourceAccessControlEnum.java |
---|
13,6 → 13,7 |
authenticatedDomain("resource.access.authenticatedDomain", new ResourceAccessControlPublicDomainFilter()), |
adminDomain("resource.access.adminDomain",new ResourceAccessControlAdminDomainFilter()), |
superUserDomain("resource.access.superDomain",new ResourceAccessControlSuperDomainFilter()), |
courseunitDeliverableDomain("resource.access.courseunitDeliverableDomain",new ResourceAccessControlCourseUnitDeliverableFilter()), |
courseunitDomain("resource.access.courseunitDomain",new ResourceAccessControlCourseUnitFilter()); |
private String key; |
/impl/src/java/pt/estgp/estgweb/filters/chains/ResourceAccessControlFilter.java |
---|
1,7 → 1,14 |
package pt.estgp.estgweb.filters.chains; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException; |
import pt.utl.ist.berserk.logic.filterManager.IFilter; |
import pt.utl.ist.berserk.logic.filterManager.FilterParameters; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException; |
import pt.utl.ist.berserk.ServiceRequest; |
import pt.utl.ist.berserk.ServiceResponse; |
import org.apache.log4j.Logger; |
/** |
* @author Jorge Machado |
10,5 → 17,23 |
*/ |
public abstract class ResourceAccessControlFilter implements IFilter |
{ |
public abstract boolean canAccessResource(UserSession user, String identifier); |
private static final Logger logger = Logger.getLogger(ResourceAccessControlFilter.class); |
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception |
{ |
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY); |
String identifier = (String) request.getServiceParameters().getParameter("identifier"); |
if(!canAccessResource(userSession,identifier)) |
{ |
if(userSession.getUser() != null) |
logger.warn(userSession.getUser().getUsername() + ": try access restricted area"); |
else |
logger.warn(userSession.getIpAddress() + ": try access restricted area"); |
throw new AccessDeniedOperationException("fail.owner"); |
} |
} |
public abstract boolean canAccessResource(UserSession userSession, String identifier); |
} |
/impl/src/java/pt/estgp/estgweb/filters/filters/ResourceAccessControlCourseUnitDeliverableFilter.java |
---|
New file |
0,0 → 1,34 |
package pt.estgp.estgweb.filters.filters; |
import pt.estgp.estgweb.filters.chains.ResourceAccessControlFilter; |
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.Globals; |
import pt.utl.ist.berserk.ServiceRequest; |
import pt.utl.ist.berserk.ServiceResponse; |
import pt.utl.ist.berserk.logic.filterManager.FilterParameters; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException; |
import org.apache.log4j.Logger; |
/** |
* @author Jorge Machado |
* @date 4/Jun/2008 |
* @see pt.estgp.estgweb.filters.filters |
*/ |
public class ResourceAccessControlCourseUnitDeliverableFilter extends ResourceAccessControlFilter |
{ |
private static final Logger logger = Logger.getLogger(ResourceAccessControlCourseUnitDeliverableFilter.class); |
public boolean canAccessResource(UserSession userSession, String identifier) |
{ |
CourseUnitDeliverable d = DaoFactory.getCourseUnitDeliverableDaoImpl().loadDeliverableByRepositoryId(identifier); |
CourseUnit c = d.getCourseUnitAssignement().getCourseUnit(); |
return userSession.getUser()!= null && |
(((UserImpl) userSession.getUser()).isTeacherOfCourseUnit(c.getId(), true) |
|| |
userSession.getUser().getId() == d.getStudent().getId()); |
} |
} |
/impl/src/java/pt/estgp/estgweb/filters/filters/ResourceAccessControlCourseUnitFilter.java |
---|
23,26 → 23,8 |
public boolean canAccessResource(UserSession userSession, String identifier) |
{ |
CourseUnitDeliverable d = DaoFactory.getCourseUnitDeliverableDaoImpl().loadDeliverableByRepositoryId(identifier); |
CourseUnit c = d.getCourseUnitAssignement().getCourseUnit(); |
return userSession.getUser()!= null && |
(((UserImpl) userSession.getUser()).isTeacherOfCourseUnit(c.getId(), true) |
|| |
userSession.getUser().getId() == d.getStudent().getId()); |
CourseUnitAssignement cA = DaoFactory.getCourseUnitAssignementDaoImpl().loadByRepositoryId(identifier); |
CourseUnit c = cA.getCourseUnit(); |
return userSession.getUser()!= null && ((UserImpl) userSession.getUser()).isInCourseUnit(c.getId(), true); |
} |
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception |
{ |
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY); |
String identifier = (String) request.getServiceParameters().getParameter("identifier"); |
if(!canAccessResource(userSession,identifier)) |
{ |
if(userSession.getUser() != null) |
logger.warn(userSession.getUser().getUsername() + ": try access restricted area"); |
else |
logger.warn(userSession.getIpAddress() + ": try access restricted area"); |
throw new AccessDeniedOperationException("fail.owner"); |
} |
} |
} |
/impl/src/java/pt/estgp/estgweb/filters/filters/OwnerUsersClass.java |
---|
33,7 → 33,7 |
IOwned iOwned = (IOwned) LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1),filterParameters,request.getServiceParameters()); |
if(!iOwned.isOwnedBy(userSession.getUser())) |
if(!iOwned.isOwnedBy(userSession.getUser(),true)) |
{ |
logger.warn(userSession.getUser().getUsername() + ": try access restricted area"); |
throw new AccessDeniedOperationException("fail.owner"); |
/impl/src/java/pt/estgp/estgweb/filters/filters/OwnerUsers.java |
---|
41,7 → 41,7 |
IOwned iOwned = (IOwned) LoadObjectFromParameters.loadObject(filterParameters,request.getServiceParameters()); |
if(!iOwned.isOwnedBy(userSession.getUser())) |
if(!iOwned.isOwnedBy(userSession.getUser(),true)) |
{ |
logger.warn(userSession.getUser().getUsername() + ": try access restricted area"); |
throw new AccessDeniedOperationException("fail.owner"); |
/impl/src/java/pt/estgp/estgweb/filters/filters/BooleanCheck.java |
---|
New file |
0,0 → 1,28 |
package pt.estgp.estgweb.filters.filters; |
import pt.estgp.estgweb.filters.chains.LoadControlFilter; |
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters; |
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.IInternal; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.utils.ReflectionBean; |
import pt.utl.ist.berserk.ServiceRequest; |
import pt.utl.ist.berserk.ServiceResponse; |
import pt.utl.ist.berserk.logic.filterManager.FilterParameters; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException; |
import org.apache.log4j.Logger; |
public class BooleanCheck extends LoadControlFilter |
{ |
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception |
{ |
Object container = LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1),filterParameters,request.getServiceParameters()); |
ReflectionBean rbean = new ReflectionBean("o." + filterParameters.getParameter(2)); |
Boolean bool = (Boolean) rbean.invoke(container); |
if(!bool) |
{ |
throw new NeedAuthenticationException(); |
} |
} |
} |
/impl/src/java/pt/estgp/estgweb/filters/filters/utils/LoadObjectFromParameters.java |
---|
10,6 → 10,7 |
import jomm.dao.impl.AbstractDao; |
import org.apache.log4j.Logger; |
import org.hibernate.HibernateException; |
/** |
* @author Jorge Machado |
45,7 → 46,7 |
Object classNameObjectContainer = serviceParameters.getParameter(classNameBean.getName()); |
Class className = (Class) classNameBean.invoke(classNameObjectContainer); |
return AbstractDao.getCurrentSession().load(className,serializable); |
return AbstractDao.load(className,serializable); |
} |
catch (NoSuchMethodException e) |
{ |
99,7 → 100,7 |
ReflectionBean serializableBean = new ReflectionBean(serializableBeanId); |
Object serializableObjectContainer = serviceParameters.getParameter(serializableBean.getName()); |
Serializable serializable = (Serializable) serializableBean.invoke(serializableObjectContainer); |
return AbstractDao.getCurrentSession().load(c,serializable); |
return AbstractDao.load(c,serializable); |
} |
catch (NoSuchMethodException e) |
{ |
123,8 → 124,13 |
ReflectionBean serializableBean = new ReflectionBean(serializableBeanId); |
Object serializableObjectContainer = serviceParameters.getParameter(serializableBean.getName()); |
Serializable serializable = (Serializable) serializableBean.invoke(serializableObjectContainer); |
return AbstractDao.getCurrentSession().load(className,serializable); |
return AbstractDao.load(className,serializable); |
} |
catch(HibernateException h) |
{ |
logger.error(h,h); |
throw h; |
} |
catch (NoSuchMethodException e) |
{ |
logger.fatal(e,e); |
/impl/src/java/pt/estgp/estgweb/filters/filters/OwnerUsersClassBean.java |
---|
38,7 → 38,7 |
IOwned iOwned = (IOwned) rbean.invoke(bean); |
if(!iOwned.isOwnedBy(userSession.getUser())) |
if(!iOwned.isOwnedBy(userSession.getUser(),true)) |
{ |
logger.warn(userSession.getUser().getUsername() + ": try access restricted area"); |
throw new AccessDeniedOperationException("fail.owner"); |
/impl/src/java/pt/estgp/estgweb/filters/filters/CanAddContentClass.java |
---|
34,7 → 34,7 |
IAddContents iAddContents = (IAddContents) LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1),filterParameters,request.getServiceParameters()); |
if(!iAddContents.canAddContent(userSession.getUser())) |
if(!iAddContents.canAddContent(userSession.getUser(),true)) |
{ |
logger.warn(userSession.getUser().getUsername() + ": try access restricted area"); |
throw new AccessDeniedOperationException("fail.owner"); |
/impl/src/java/pt/estgp/estgweb/web/tags/CanManageTag.java |
---|
78,10 → 78,10 |
{ |
boolean valid = Boolean.parseBoolean(this.valid); |
IValid iValid = (IValid) owned; |
return owned != null && userSession.getUser() != null && (iValid.isValid() == valid && owned.isOwnedBy(userSession.getUser()) || (userSession.getUser()).isSuperuserOrAdmin()); |
return owned != null && userSession.getUser() != null && (iValid.isValid() == valid && owned.isOwnedBy(userSession.getUser(),false) || (userSession.getUser()).isSuperuserOrAdmin()); |
} |
else |
return owned != null && userSession.getUser() != null && (owned.isOwnedBy(userSession.getUser()) || (userSession.getUser()).isSuperuserOrAdmin()); |
return owned != null && userSession.getUser() != null && (owned.isOwnedBy(userSession.getUser(),false) || (userSession.getUser()).isSuperuserOrAdmin()); |
} |
/impl/src/java/pt/estgp/estgweb/web/tags/CantManageTag.java |
---|
84,10 → 84,10 |
{ |
boolean valid = Boolean.parseBoolean(this.valid); |
IValid iValid = (IValid) owned; |
return owned != null && userSession.getUser() != null && (iValid.isValid() == valid && owned.isOwnedBy(userSession.getUser()) || (userSession.getUser()).isSuperuserOrAdmin()); |
return owned != null && userSession.getUser() != null && (iValid.isValid() == valid && owned.isOwnedBy(userSession.getUser(),false) || (userSession.getUser()).isSuperuserOrAdmin()); |
} |
else |
return owned != null && userSession.getUser() != null && (owned.isOwnedBy(userSession.getUser()) || (userSession.getUser()).isSuperuserOrAdmin()); |
return owned != null && userSession.getUser() != null && (owned.isOwnedBy(userSession.getUser(),false) || (userSession.getUser()).isSuperuserOrAdmin()); |
} |
/impl/src/java/pt/estgp/estgweb/web/form/courseunits/CourseUnitsForm.java |
---|
8,6 → 8,7 |
import pt.estgp.estgweb.domain.views.CourseUnitView; |
import pt.estgp.estgweb.domain.views.CourseUnitAssignementView; |
import pt.estgp.estgweb.domain.views.UserView; |
import pt.estgp.estgweb.domain.views.CourseUnitDeliverableView; |
import pt.estgp.estgweb.domain.TeacherImpl; |
import pt.estgp.estgweb.domain.Teacher; |
import pt.estgp.estgweb.utils.DatesUtils; |
20,6 → 21,8 |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
import java.util.List; |
import java.util.ArrayList; |
import java.util.Iterator; |
/** |
* @author Jorge Machado |
32,6 → 35,7 |
private static final Logger logger = Logger.getLogger(CourseUnitsForm.class); |
CourseUnitView courseUnitView = new CourseUnitView(); |
//aux |
long courseId; |
long id; |
40,10 → 44,10 |
boolean showNewWorkForm = false; |
FormFile uploadFile; |
//courseunit |
FormFile programFile; |
CourseUnitAssignementView courseUnitAssignementView = new CourseUnitAssignementView(); |
//search |
String textToSearch; |
String searchType = SearchTypeEnum.AllWords.getMessageKey(); |
53,6 → 57,16 |
List<UserView> teachers = null; |
public CourseUnitsForm() |
{ |
courseUnitAssignementView.setDeliverables(new ArrayList<CourseUnitDeliverableView>()); |
for(int i = 0; i < 200; i++) |
{ |
courseUnitAssignementView.getDeliverables().add(new CourseUnitDeliverableView()); |
} |
} |
public CourseUnitView getCourseUnitView() |
{ |
return courseUnitView; |
231,6 → 245,10 |
{ |
addMessageWithKeys(errors,httpServletRequest,"errors.required","courseunit.title"); |
} |
if(uploadFile != null && uploadFile.getFileSize() > 0 && !uploadFile.getFileName().endsWith(".zip")) |
{ |
addMessage(errors,httpServletRequest,"errors.courseunit.assignement.file.type"); |
} |
return errors; |
} |
248,5 → 266,18 |
return errors; |
} |
public void validateUpdateDeliverables() |
{ |
Iterator<CourseUnitDeliverableView> iter = courseUnitAssignementView.getDeliverables().iterator(); |
while (iter.hasNext()) |
{ |
CourseUnitDeliverableView courseUnitDeliverableView = iter.next(); |
if(courseUnitDeliverableView.getId() <= 0) |
{ |
iter.remove(); |
} |
} |
} |
} |
/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsAdminController.java |
---|
78,7 → 78,7 |
CourseUnitsForm cUF = (CourseUnitsForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{"serializable"}; |
Object[] args = new Object[]{cUF.getId(),true,true}; |
Object[] args = new Object[]{cUF.getId(),true,true,false}; |
CourseUnitView cV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "LoadCourseUnit", args, names); |
request.setAttribute("CourseUnitView",cV); |
/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsController.java |
---|
10,14 → 10,13 |
import pt.estgp.estgweb.domain.views.CourseUnitView; |
import pt.estgp.estgweb.domain.views.CourseUnitAssignementView; |
import pt.estgp.estgweb.domain.views.BlogView; |
import pt.estgp.estgweb.domain.Image; |
import pt.estgp.estgweb.filters.exceptions.NotFoundException; |
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController; |
import pt.estgp.estgweb.web.controllers.blogs.BlogsController; |
import pt.estgp.estgweb.web.exceptions.NoCookiesException; |
import pt.estgp.estgweb.web.form.courseunits.CourseUnitsForm; |
import pt.estgp.estgweb.web.form.blogs.BlogForm; |
import pt.estgp.estgweb.web.utils.RequestUtils; |
import pt.estgp.estgweb.web.utils.DomainUtils; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterRetrieveException; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.IncompatibleFilterException; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.InvalidFilterException; |
44,21 → 43,21 |
{ |
private static final Logger logger = Logger.getLogger(CourseUnitsController.class); |
private ActionForward loadCourseUnitAndForward(CourseUnitsForm cUF, long id, ActionMapping mapping, HttpServletRequest request, HttpServletResponse response) |
private ActionForward loadCourseUnitAndForward(CourseUnitsForm cUF, long id, boolean initTeachers, boolean initStudents, ActionMapping mapping, HttpServletRequest request, HttpServletResponse response) |
throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException |
{ |
CourseUnitView cV = loadCourseUnitView(id, mapping, request, response); |
CourseUnitView cV = loadCourseUnitView(id,initTeachers,initStudents, mapping, request, response); |
cUF.setCourseUnitView(cV); |
request.setAttribute("CourseUnitView", cV); |
return mapping.findForward("load"); |
} |
private CourseUnitView loadCourseUnitView(long id, ActionMapping mapping, HttpServletRequest request, HttpServletResponse response) |
private CourseUnitView loadCourseUnitView(long id, boolean initTeachers, boolean initStudents, ActionMapping mapping, HttpServletRequest request, HttpServletResponse response) |
throws Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException |
{ |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{"serializable"}; |
Object[] args = new Object[]{id,false,false}; |
Object[] args = new Object[]{id,initTeachers,initStudents,false}; |
try |
{ |
CourseUnitView cV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "LoadCourseUnit", args, names); |
74,6 → 73,7 |
} |
} |
public ActionForward load(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
83,7 → 83,12 |
try |
{ |
CourseUnitsForm cUF = (CourseUnitsForm) form; |
return loadCourseUnitAndForward(cUF, Long.parseLong(request.getParameter("id")), mapping, request, response); |
long id; |
if(request.getParameter("id")!=null) |
id = Long.parseLong(request.getParameter("id")); |
else |
id = cUF.getCourseUnitView().getId(); |
return loadCourseUnitAndForward(cUF,id ,true,false, mapping, request, response); |
} |
catch (FilterChainFailedException e) |
{ |
100,6 → 105,40 |
} |
} |
public ActionForward loadStudents(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
CourseUnitsForm cUF = (CourseUnitsForm) form; |
long id; |
if(request.getParameter("id")!=null) |
id = Long.parseLong(request.getParameter("id")); |
else |
id = cUF.getCourseUnitView().getId(); |
CourseUnitView cV = loadCourseUnitView(id,false,true, mapping, request, response); |
cUF.setCourseUnitView(cV); |
request.setAttribute("CourseUnitView", cV); |
return mapping.findForward("load.students"); |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
} |
catch (NotFoundException e) |
{ |
return mapping.findForward("error404"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
return mapping.findForward("error500"); |
} |
} |
public ActionForward loadWorks(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
164,7 → 203,7 |
long id = cUF.getCourseUnitView().getId(); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{"object","serializable"}; |
Object[] args = new Object[]{cUF.getCourseUnitAssignementView(), id}; |
Object[] args = new Object[]{cUF.getCourseUnitAssignementView(), id, cUF.getUploadFile().getInputStream(),cUF.getUploadFile().getFileName(),cUF.getUploadFile().getFileSize(),cUF.getUploadFile().getContentType()}; |
try |
{ |
String service; |
357,7 → 396,7 |
String[] names = new String[]{"object"}; |
Object[] args; |
if(cUF.getProgramFile() == null) |
if(cUF.getProgramFile() == null || cUF.getProgramFile().getFileSize() <= 0) |
args = new Object[]{cUF.getCourseUnitView(),null,null,0,null}; |
else //ring name, int size, String contentType, String extensio |
args = new Object[]{cUF.getCourseUnitView(),cUF.getProgramFile().getInputStream(),cUF.getProgramFile().getFileName(),cUF.getProgramFile().getFileSize(),cUF.getProgramFile().getContentType()}; |
384,9 → 423,9 |
public ActionForward deliverWork(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable, ServletException |
{ |
try |
422,16 → 461,50 |
} |
} |
public ActionForward updateDeliverables(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable, ServletException |
{ |
try |
{ |
CourseUnitsForm cUF = (CourseUnitsForm) form; |
cUF.validateUpdateDeliverables(); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{"serializable","deliverables"}; |
Object[] args = new Object[]{cUF.getCourseUnitView().getId(),cUF.getCourseUnitAssignementView().getId(), cUF.getCourseUnitAssignementView().getDeliverables()}; |
CourseUnitAssignementView cAV = (CourseUnitAssignementView) sm.execute(RequestUtils.getRequester(request, response), "UpdateCourseUnitDeliverables", args, names); |
cUF.setCourseUnitView(cAV.getCourseUnitView()); |
cUF.setCourseUnitAssignementView(cAV); |
request.setAttribute("CourseUnitView", cAV.getCourseUnitView()); |
request.setAttribute("CourseUnitAssignementView", cAV); |
return mapping.findForward("load.assignement"); |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
throw e; |
} |
} |
public ActionForward loadAssignement(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable, ServletException |
{ |
try |
{ |
CourseUnitsForm cUF = (CourseUnitsForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
FormFile work = cUF.getUploadFile(); |
String[] names = new String[]{"serializable"}; |
454,6 → 527,39 |
} |
} |
public ActionForward startBlog(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable, ServletException |
{ |
try |
{ |
CourseUnitsForm cUF = (CourseUnitsForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{"serializable"}; |
Object[] args = new Object[]{cUF.getCourseUnitView().getId()}; |
CourseUnitView cUV = (CourseUnitView) sm.execute(RequestUtils.getRequester(request, response), "StartCourseUnitBlog", args, names); |
cUF.setCourseUnitView(cUV); |
request.setAttribute("CourseUnitView", cUV); |
BlogForm bForm = new BlogForm(); |
bForm.setBlogView(new BlogView()); |
bForm.getBlogView().setId(cUV.getBlog().getId()); |
new BlogsController().load(mapping,bForm,request,response); |
return mapping.findForward("load.blog"); |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
throw e; |
} |
} |
} |
/impl/src/java/pt/estgp/estgweb/web/controllers/blogs/BlogServlet.java |
---|
40,7 → 40,7 |
try |
{ |
id = Long.parseLong(identifier.trim()); |
request.getRequestDispatcher("/startLoadBlog.do?id=" + id).forward(request, response); |
request.getRequestDispatcher("/startLoadBlog.do?blogView.id=" + id).forward(request, response); |
} |
catch (NumberFormatException e) |
{ |
/impl/src/java/pt/estgp/estgweb/web/controllers/blogs/BlogsController.java |
---|
61,6 → 61,7 |
return mapping.findForward("load"); |
} |
/** |
* Load and forward a blog given a name |
* @param name |
173,6 → 174,8 |
if (!errors.isEmpty()) |
{ |
saveErrors(request, errors); |
BlogView bV = loadBlogView(blogForm.getBlogView().getId(), mapping, request, response); |
request.setAttribute("BlogView", bV); |
return mapping.findForward("submit"); |
} |
219,7 → 222,13 |
{ |
try |
{ |
return loadBlogAndForward(Long.parseLong(request.getParameter("id")), mapping, request, response); |
BlogForm bf = (BlogForm) form; |
long id; |
if(request.getParameter("id") !=null) |
id = Long.parseLong(request.getParameter("id")); |
else |
id = bf.getBlogView().getId(); |
return loadBlogAndForward(id, mapping, request, response); |
} |
catch (FilterChainFailedException e) |
{ |
391,6 → 400,7 |
String[] names = new String[]{"serializable"}; |
Object[] args = new Object[]{new Long(request.getParameter("id"))}; |
BlogView bV = (BlogView) sm.execute(RequestUtils.getRequester(request, response), "LoadEditBlog", args, names); |
request.setAttribute("BlogView", bV); |
BlogForm blogForm = (BlogForm) form; |
blogForm.setBlogView(bV); |
blogForm.setSelectedRoles(bV.getTargetRoles()); |
445,9 → 455,9 |
} |
public ActionForward validatePost(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws Throwable, ServletException |
{ |
try |
/impl/src/hbm/pt/estgp/estgweb/domain/GenericUser.hbm.xml |
---|
61,7 → 61,7 |
<property name="userNameNetpa" type="string"/> |
<set name="subscribedUnits" lazy="true"> |
<key column="studentId"/> |
<many-to-many class="pt.estgp.estgweb.domain.CourseUnit" column="courseUnitId"/> |
<many-to-many class="pt.estgp.estgweb.domain.CourseUnitImpl" column="courseUnitId"/> |
</set> |
<subclass name="pt.estgp.estgweb.domain.StudentImpl" discriminator-value="StudentImpl"/> |
</subclass> |
75,7 → 75,7 |
<property name="unitCheck" type="boolean"/> |
<set name="teachedUnits" lazy="true" order-by="courseUnitId"> |
<key column="teacherId"/> |
<many-to-many class="pt.estgp.estgweb.domain.CourseUnit" column="courseUnitId"/> |
<many-to-many class="pt.estgp.estgweb.domain.CourseUnitImpl" column="courseUnitId"/> |
</set> |
<subclass name="pt.estgp.estgweb.domain.TeacherImpl" discriminator-value="TeacherImpl"/> |
</subclass> |
/impl/src/hbm/pt/estgp/estgweb/domain/Blog.hbm.xml |
---|
31,7 → 31,7 |
<meta attribute="extends">pt.estgp.estgweb.domain.BlogImpl</meta> |
<meta attribute="scope-class">public abstract</meta> |
<property name="courseUnitInternal" type="boolean" /> |
<many-to-one name="courseUnit" class="pt.estgp.estgweb.domain.CourseUnit" lazy="proxy" outer-join="false"/> |
<many-to-one name="courseUnit" class="pt.estgp.estgweb.domain.CourseUnit" lazy="proxy" outer-join="true"/> |
<subclass name="pt.estgp.estgweb.domain.CourseUnitBlogImpl" discriminator-value="CourseUnitBlogImpl"/> |
</subclass> |
</subclass> |
/impl/src/hbm/pt/estgp/estgweb/domain/CourseUnit.hbm.xml |
---|
23,15 → 23,13 |
<property name="institutionCode" type="string" /> |
<property name="objectives" type="text"/> |
<property name="programStreamId" type="string"/> |
<property name="status" type="boolean" /> |
<set name="blogs" cascade="delete" lazy="true" order-by="name desc"> |
<many-to-one name="course" class="pt.estgp.estgweb.domain.Course" lazy="false" outer-join="true"/> |
<set name="blogs" cascade="delete" lazy="true" order-by="saveDate asc"> |
<key column="courseUnit"/> |
<one-to-many class="pt.estgp.estgweb.domain.CourseUnitBlog" /> |
</set> |
<many-to-one name="course" class="pt.estgp.estgweb.domain.Course" lazy="false" outer-join="true"/> |
<set name="teachers" lazy="true" table="teachedunits"> |
<set name="teachers" lazy="true" table="teachedUnits"> |
<key column="courseUnitId"/> |
<many-to-many class="pt.estgp.estgweb.domain.TeacherImpl" column="teacherId"/> |
</set> |
84,9 → 82,10 |
<property name="lateDelivers" type="boolean"/> |
<property name="title" type="string"/> |
<property name="description" type="text"/> |
<property name="repositoryStream" type="string" index="repositoryStreamIndex"/> |
<property name="status" type="boolean"/> |
<many-to-one name="courseUnit" class="pt.estgp.estgweb.domain.CourseUnit" lazy="false" outer-join="true"/> |
<set name="deliverables" cascade="delete" lazy="true" order-by="updateDate desc"> |
<set name="deliverables" cascade="delete" lazy="true" order-by="deliverDate asc"> |
<key column="courseUnitAssignement"/> |
<one-to-many class="pt.estgp.estgweb.domain.CourseUnitDeliverable"/> |
</set> |
102,7 → 101,10 |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="deliverableFilePath" type="string" index="deliverableFilePathIndex"/> |
<property name="deliverDate" type="timestamp"/> |
<property name="grade" type="string"/> |
<property name="obs" type="text"/> |
<property name="deliverableRepositoryStream" type="string" index="deliverableRepositoryStreamIndex"/> |
<many-to-one name="courseUnitAssignement" class="pt.estgp.estgweb.domain.CourseUnitAssignement" lazy="false" outer-join="true"/> |
<many-to-one name="student" class="pt.estgp.estgweb.domain.Student" lazy="false" outer-join="true"/> |
<subclass name="pt.estgp.estgweb.domain.CourseUnitDeliverableImpl" discriminator-value="CourseUnitDeliverableImpl"/> |
/impl/src/web/css/style.css |
---|
889,7 → 889,6 |
.seccao, .seccao p { |
margin: 10px; |
font-size: 0.95em; |
font-family: Helvetica, sans-serif; |
} |
/impl/src/web/user/courseunits/menu.jsp |
---|
1,36 → 1,50 |
<%@ page import="pt.estgp.estgweb.domain.views.BlogView" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %> |
<% |
if (request.getAttribute("BlogView") != null) |
{ |
BlogView bV = (BlogView) request.getAttribute("BlogView"); |
request.setAttribute("CourseUnitView",bV.getCourseUnitView()); |
} |
%> |
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/> |
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/> |
<div class="linkLeftMenu"> |
<div class="listClean"> |
<ul> |
<li> |
<a href="<%=request.getContextPath()%>/">Inicio</a> |
</li> |
<li> |
<a href="<%=request.getContextPath()%>/">Colocar Dúvidas</a> |
</li> |
<li> |
<a href="<%=request.getContextPath()%>/">Blog</a> |
</li> |
<li> |
<a href="<%=request.getContextPath()%>/user/startLoadCourseUnitWorksFromHome.do?courseUnitView.id=${CourseUnitView.id}">Trabalhos</a> |
</li> |
<li> |
<a href="<%=request.getContextPath()%>/">Notas</a> |
</li> |
<li> |
<a href="<%=request.getContextPath()%>/">Corpo Docente</a> |
</li> |
<li> |
<a href="<%=request.getContextPath()%>/">Conteúdos</a> |
</li> |
<li> |
<a href="<%=request.getContextPath()%>/">Assiduidade</a> |
</li> |
<li> |
<a href="<%=request.getContextPath()%>/">Avaliação</a> |
</li> |
<baco:isAuthenticated> |
<li> |
<html:link action="/user/startLoadCourseUnitFromHome?courseUnitView.id=${CourseUnitView.id}"><bean:message key="courseunit.menu.home"/></html:link> |
</li> |
<li> |
<a href="<%=request.getContextPath()%>/"><bean:message key="courseunit.menu.put.question"/></a> |
</li> |
<li> |
<html:link action="/user/startCourseUnitBlogFromHome?courseUnitView.id=${CourseUnitView.id}"><bean:message key="courseunit.menu.blog"/></html:link> |
</li> |
<li> |
<a href="<%=request.getContextPath()%>/user/startLoadCourseUnitWorksFromHome.do?courseUnitView.id=${CourseUnitView.id}"><bean:message key="courseunit.menu.assignements"/></a> |
</li> |
<li> |
<html:link action="/user/startLoadCourseUnitStudentsFromHome?courseUnitView.id=${CourseUnitView.id}"><bean:message key="courseunit.students"/></html:link> |
</li> |
<li> |
<a href="<%=request.getContextPath()%>/"><bean:message key="courseunit.menu.contents"/></a> |
</li> |
<li> |
<a href="<%=request.getContextPath()%>/"><bean:message key="courseunit.menu.presences"/></a> |
</li> |
<li> |
<a href="<%=request.getContextPath()%>/"><bean:message key="courseunit.menu.grades"/></a> |
</li> |
</baco:isAuthenticated> |
</ul> |
</div> |
</div> |
/impl/src/web/user/courseunits/courseunitworks.jsp |
---|
23,97 → 23,107 |
</baco:canManage> |
</h2> |
<baco:canManage name="CourseUnitView"> |
<% |
String visibility; |
if(CourseUnitsForm.isShowNewWorkForm()) |
visibility = "position:relative;visibility:visible"; |
else |
visibility = "position:absolute;visibility:hidden"; |
request.setAttribute("visibility",visibility); |
%> |
<html:form styleId="assignements" style="${visibility}" action="/user/courseUnitControllerFromHome"> |
<input type="hidden" name="dispatch" value="createAssignement"> |
<html:hidden property="courseUnitView.id"/> |
<html:hidden property="courseUnitAssignementView.id"/> |
<div class="form blockForm"> |
<table> |
<tr> |
<th> |
<bean:message key="courseunit.title"/> |
</th> |
<td> |
<html:text styleClass="text" property="courseUnitAssignementView.title"/> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.deliver.date"/> |
</th> |
<td> |
<a href="javascript:cal.select(getObjectById('deliverDate'),'anchor1','yyyy/MM/dd')" name="anchor1" id="anchor1"><html:text styleClass="date" property="courseUnitAssignementView.deliverDate" styleId="deliverDate" readonly="true"/></a> |
<input type="button" class="removeButton" onClick="CourseUnitsForm.deliverDate.value=null"> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.deliver.type"/> |
</th> |
<td> |
<html:select property="courseUnitAssignementView.deliverType"> |
<html:option value="zipfile" key="courseunit.assignement.deliver.type.zipfile"/> |
<html:option value="nofile" key="courseunit.assignement.deliver.type.nofile"/> |
</html:select> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.deliver.late.permission"/> |
</th> |
<td> |
<html:select property="courseUnitAssignementView.lateDelivers"> |
<html:option value="true" key="yes"/> |
<html:option value="false" key="no"/> |
</html:select> |
</td> |
</tr> |
<% |
String visibility; |
if(CourseUnitsForm.isShowNewWorkForm()) |
visibility = "position:relative;visibility:visible"; |
else |
visibility = "position:absolute;visibility:hidden"; |
request.setAttribute("visibility",visibility); |
%> |
<html:form styleId="assignements" style="${visibility}" action="/user/courseUnitControllerFromHome" enctype="multipart/form-data"> |
<input type="hidden" name="dispatch" value="createAssignement"> |
<html:hidden property="courseUnitView.id"/> |
<html:hidden property="courseUnitAssignementView.id"/> |
<div class="form blockForm"> |
<table> |
<tr> |
<th> |
<bean:message key="courseunit.title"/> |
</th> |
<td> |
<html:text styleClass="text" property="courseUnitAssignementView.title"/> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.deliver.date"/> |
</th> |
<td> |
<a href="javascript:cal.select(getObjectById('deliverDate'),'anchor1','yyyy/MM/dd')" name="anchor1" id="anchor1"><html:text styleClass="date" property="courseUnitAssignementView.deliverDate" styleId="deliverDate" readonly="true"/></a> |
<input type="button" class="removeButton" onClick="CourseUnitsForm.deliverDate.value=null"> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.deliver.type"/> |
</th> |
<td> |
<html:select property="courseUnitAssignementView.deliverType"> |
<html:option value="zipfile" key="courseunit.assignement.deliver.type.zipfile"/> |
<html:option value="nofile" key="courseunit.assignement.deliver.type.nofile"/> |
</html:select> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.deliver.late.permission"/> |
</th> |
<td> |
<html:select property="courseUnitAssignementView.lateDelivers"> |
<html:option value="true" key="yes"/> |
<html:option value="false" key="no"/> |
</html:select> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.description"/> |
</th> |
<td> |
<html:textarea styleClass="textarea" property="courseUnitAssignementView.description"/> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.status"/> |
</th> |
<td> |
<html:select property="courseUnitAssignementView.status"> |
<html:option value="true"> |
<bean:message key="status.active"/> |
</html:option> |
<html:option value="false"> |
<bean:message key="status.inactive"/> |
</html:option> |
</html:select> |
</td> |
</tr> |
<tr> |
<td colspan="2"> |
<input type="button" onclick="this.form.submit()" value="<bean:message key="confirm"/>"/> |
</td> |
</tr> |
</table> |
</div> |
</html:form> |
<tr> |
<th> |
<bean:message key="courseunit.description"/> |
</th> |
<td> |
<html:textarea styleClass="textarea" property="courseUnitAssignementView.description"/> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.file"/> |
</th> |
<td> |
<html:file property="uploadFile"/> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.status"/> |
</th> |
<td> |
<html:select property="courseUnitAssignementView.status"> |
<html:option value="true"> |
<bean:message key="status.active"/> |
</html:option> |
<html:option value="false"> |
<bean:message key="status.inactive"/> |
</html:option> |
</html:select> |
</td> |
</tr> |
<tr> |
<td colspan="2"> |
<input type="button" onclick="this.form.submit()" value="<bean:message key="confirm"/>"/> |
</td> |
</tr> |
</table> |
</div> |
</html:form> |
</baco:canManage> |
<p> |
<logic:notEmpty name="CourseUnitView" property="courseUnitAssignements"> |
<table class="dataTable"> |
<tr> |
<th><bean:message key="courseunit.title"/></th> |
<th><bean:message key="courseunit.assignement.file"/></th> |
<th><bean:message key="courseunit.assignement.deliver.date"/></th> |
<th><bean:message key="courseunit.assignement.deliver.late.permission"/></th> |
<th><bean:message key="courseunit.assignement.deliver.type"/></th> |
127,10 → 137,12 |
</baco:canManage> |
<baco:isStudentOfCourseUnit courseUnitId="${CourseUnitView.id}"> |
<% |
request.setAttribute("colspanAssignement",6); |
request.setAttribute("colspanAssignement",8); |
%> |
<th><bean:message key="courseunit.assignement.deliver"/></th> |
<th><bean:message key="courseunit.assignement.deliver.time"/></th> |
<th><bean:message key="courseunit.assignement.deliver.grade"/></th> |
<th><bean:message key="courseunit.assignement.deliver.obs"/></th> |
</baco:isStudentOfCourseUnit> |
</tr> |
<logic:iterate id="work" name="CourseUnitView" property="courseUnitAssignements" type="pt.estgp.estgweb.domain.views.CourseUnitAssignementView"> |
138,6 → 150,11 |
<td> |
<a href="javascript:showOrHide('assignement${work.id}')">${work.title}</a> |
</td> |
<td> |
<logic:notEmpty name="work" property="workFile"> |
<a target="_blank" href="<%=request.getContextPath()%>/repositoryStream/${work.workFile}">${work.repositoryFile.lastVersion.name} (${work.repositoryFile.lastVersion.sizeKb} Kb)</a> |
</logic:notEmpty> |
</td> |
<% |
String deliverDateStyleClass; |
if(work.isActive()) |
202,7 → 219,7 |
</td> |
</baco:canManage> |
<baco:isStudentOfCourseUnit courseUnitId="${CourseUnitView.id}"> |
<td> |
<td nowrap="nowrap"> |
<% |
if(work.canDeliver(request)) |
217,7 → 234,7 |
<input type="submit" value="<bean:message key="replace"/>"/> |
</logic:notEmpty> |
<logic:empty name="work" property="courseUnitDeliverableView"> |
<input type="submit" value="<bean:message key="confirm"/>"/> |
<input type="submit" value="<bean:message key="courseunit.assignement.deliver"/>"/> |
</logic:empty> |
</html:form> |
<% |
242,6 → 259,12 |
</td> |
</logic:notEqual> |
</logic:notEmpty> |
<td> |
${work.courseUnitDeliverableView.grade} |
</td> |
<td> |
${work.courseUnitDeliverableView.obs} |
</td> |
</baco:isStudentOfCourseUnit> |
<logic:notEmpty name="work" property="courseUnitDeliverableView"> |
<td> |
/impl/src/web/user/courseunits/submitBlog.jsp |
---|
New file |
0,0 → 1,14 |
<%@ page import="pt.estgp.estgweb.domain.Teacher" %> |
<%@ page import="pt.estgp.estgweb.domain.TeacherImpl" %> |
<%@ page import="jomm.utils.MessageResources" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<div id="contentCourseUnit"> |
<jsp:include page="/admin/blogs/submitBlog.jsp"/> |
</div> |
/impl/src/web/user/courseunits/students.jsp |
---|
New file |
0,0 → 1,35 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/> |
<div id="contentCourseUnit"> |
<table class="dataTable"> |
<tr> |
<th><bean:message key="number"/></th> |
<th><bean:message key="name"/></th> |
<th><bean:message key="user"/></th> |
<th><bean:message key="email"/></th> |
</tr> |
<logic:iterate id="student" name="CourseUnitView" property="students" type="pt.estgp.estgweb.domain.views.UserView"> |
<tr> |
<td> |
${student.code} |
</td> |
<td> |
${student.name} |
</td> |
<td> |
${student.username} |
</td> |
<td> |
${student.email} |
</td> |
</tr> |
</logic:iterate> |
</table> |
</div> |
/impl/src/web/user/courseunits/topnavLoadBlog.jsp |
---|
New file |
0,0 → 1,21 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<%@ page import="pt.estgp.estgweb.domain.views.BlogView" %> |
<% |
if (request.getAttribute("BlogView") != null) |
{ |
BlogView bV = (BlogView) request.getAttribute("BlogView"); |
request.setAttribute("CourseUnitView", bV.getCourseUnitView()); |
} |
%> |
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back"); |
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName()); |
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName()); |
topNav.addNavPlace(null, "blog"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
/impl/src/web/user/courseunits/courseunitassignement.jsp |
---|
14,102 → 14,136 |
<jsp:useBean id="CourseUnitAssignementView" type="pt.estgp.estgweb.domain.views.CourseUnitAssignementView" scope="request"/> |
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/> |
<div id="contentCourseUnit"> |
<html:errors/> |
<jomm:messages/> |
<div class="seccao"> |
<h2> |
<bean:message key="courseunit.assignement" arg0="${CourseUnitAssignementView.title}"/> |
</h2> |
<html:errors/> |
<jomm:messages/> |
<div class="seccao"> |
<h2> |
<bean:message key="courseunit.assignement" arg0="${CourseUnitAssignementView.title}"/> |
</h2> |
<div class="form blockForm"> |
<table> |
<tr> |
<th> |
<bean:message key="courseunit.title"/> |
</th> |
<td> |
<bean:write name="CourseUnitAssignementView" property="title"/> |
<div class="form blockForm"> |
<table> |
<tr> |
<th> |
<bean:message key="courseunit.title"/> |
</th> |
<td> |
<bean:write name="CourseUnitAssignementView" property="title"/> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.deliver.date"/> |
</th> |
<td> |
<bean:write name="CourseUnitAssignementView" property="deliverDate"/> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.deliver.type"/> |
</th> |
<td> |
<bean:message key="courseunit.assignement.deliver.type.${CourseUnitAssignementView.deliverType}"/> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.deliver.late.permission"/> |
</th> |
<td> |
<logic:equal value="true" name="CourseUnitAssignementView" property="lateDelivers"> |
<bean:message key="yes"/> |
</logic:equal> |
<logic:notEqual value="true" name="CourseUnitAssignementView" property="lateDelivers"> |
<bean:message key="no"/> |
</logic:notEqual> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.description"/> |
</th> |
<td> |
<bean:write name="CourseUnitAssignementView" property="description"/> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.status"/> |
</th> |
<td> |
<logic:equal value="true" name="CourseUnitAssignementView" property="status"> |
<bean:message key="status.active"/> |
</logic:equal> |
<logic:notEqual value="true" name="CourseUnitAssignementView" property="status"> |
<bean:message key="status.inactive"/> |
</logic:notEqual> |
</td> |
</tr> |
<logic:notEmpty name="CourseUnitAssignementView" property="workFile"> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.file"/> |
</th> |
<td> |
<a target="_blank" href="<%=request.getContextPath()%>/repositoryStream/${CourseUnitAssignementView.workFile}"><bean:message key="courseunit.assignement.file"/></a> |
</td> |
</tr> |
</logic:notEmpty> |
</table> |
</div> |
<nested:form action="/user/courseUnitControllerFromHome"> |
<input type="hidden" name="dispatch" value="updateDeliverables"> |
<html:hidden property="courseUnitAssignementView.id" value="${CourseUnitAssignementView.id}"/> |
<html:hidden property="courseUnitView.id" value="${CourseUnitView.id}"/> |
<table class="dataTable"> |
<tr> |
<th><bean:message key="courseunit.assignement.delivered.date"/></th> |
<th><bean:message key="courseunit.assignement.deliver.time"/></th> |
<th><bean:message key="number"/></th> |
<th><bean:message key="name"/></th> |
<th><bean:message key="courseunit.assignement.deliver.version"/></th> |
<th><bean:message key="courseunit.assignement.deliver.grade"/></th> |
<th><bean:message key="courseunit.assignement.deliver.obs"/></th> |
</tr> |
<nested:iterate id="deliverable" property="courseUnitAssignementView.deliverables" type="pt.estgp.estgweb.domain.views.CourseUnitDeliverableView"> |
<tr> |
<td>${deliverable.deliverDateStr} </td> |
<logic:equal name="deliverable" property="lateDeliver" value="true"> |
<td class="statusERROR"> |
<bean:message key="courseunit.assignement.deliver.time.late"/> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.deliver.date"/> |
</th> |
<td> |
<bean:write name="CourseUnitAssignementView" property="deliverDate"/> |
</logic:equal> |
<logic:notEqual name="deliverable" property="lateDeliver" value="true"> |
<td class="statusOK"> |
<bean:message key="courseunit.assignement.deliver.time.ok"/> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.deliver.type"/> |
</th> |
<td> |
<bean:message key="courseunit.assignement.deliver.type.${CourseUnitAssignementView.deliverType}"/> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.assignement.deliver.late.permission"/> |
</th> |
<td> |
<logic:equal value="true" name="CourseUnitAssignementView" property="lateDelivers"> |
<bean:message key="yes"/> |
</logic:equal> |
<logic:notEqual value="true" name="CourseUnitAssignementView" property="lateDelivers"> |
<bean:message key="no"/> |
</logic:notEqual> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.description"/> |
</th> |
<td> |
<bean:write name="CourseUnitAssignementView" property="description"/> |
</td> |
</tr> |
<tr> |
<th> |
<bean:message key="courseunit.status"/> |
</th> |
<td> |
<logic:equal value="true" name="CourseUnitAssignementView" property="status"> |
<bean:message key="status.active"/> |
</logic:equal> |
<logic:notEqual value="true" name="CourseUnitAssignementView" property="status"> |
<bean:message key="status.inactive"/> |
</logic:notEqual> |
</td> |
</tr> |
</table> |
</div> |
<table class="dataTable"> |
<tr> |
<th><bean:message key="courseunit.assignement.deliver.date"/></th> |
<th><bean:message key="number"/></th> |
<th><bean:message key="name"/></th> |
<th><bean:message key="courseunit.assignement.deliver.version"/></th> |
</logic:notEqual> |
<td>${deliverable.student.code}</td> |
<td>${deliverable.student.name}</td> |
<td><a target="_blank" href="<%=request.getContextPath()%>/repositoryStream/${deliverable.fileStreamId}"><bean:message key="courseunit.assignement.deliver.version"/> (${deliverable.deliverDateStr})</a></td> |
<td> |
<nested:hidden property="id"/> |
<nested:text property="grade"/> |
</td> |
<td> |
<%--<a href="javascript:showOrHide('obs${deliverable.id}')"><bean:message key="courseunit.assignement.deliver.show.obs"/></a>--%> |
<nested:textarea styleId="obs${deliverable.id}" styleClass="textarea" property="obs"/> |
</td> |
</tr> |
<logic:iterate id="deliverable" name="CourseUnitAssignementView" property="deliverables" type="pt.estgp.estgweb.domain.views.CourseUnitDeliverableView"> |
<tr> |
<td>${deliverable.deliverDateStr} </td> |
<logic:equal name="deliverable" property="lateDeliver" value="true"> |
<td class="statusERROR"> |
<bean:message key="courseunit.assignement.deliver.time.late"/> |
</td> |
</logic:equal> |
<logic:notEqual name="deliverable" property="lateDeliver" value="true"> |
<td class="statusOK"> |
<bean:message key="courseunit.assignement.deliver.time.ok"/> |
</td> |
</logic:notEqual> |
<td>${deliverable.student.code}</td> |
<td>${deliverable.student.name}</td> |
<td><a target="_blank" href="<%=request.getContextPath()%>/repositoryStream/${deliverable.fileStreamId}"><bean:message key="courseunit.assignement.deliver.version"/> (${deliverable.deliverDateStr})</a></td> |
</tr> |
</logic:iterate> |
</table> |
</div> |
</nested:iterate> |
<tr> |
<td colspan="7"> |
<input type="button" onclick="this.form.submit()" value="<bean:message key="confirm"/>"/> |
</td> |
</tr> |
</table> |
</nested:form> |
</div> |
</div> |
/impl/src/web/user/courseunits/topnavCreateBlog.jsp |
---|
New file |
0,0 → 1,21 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<%@ page import="pt.estgp.estgweb.domain.views.BlogView" %> |
<% |
if (request.getAttribute("BlogView") != null) |
{ |
BlogView bV = (BlogView) request.getAttribute("BlogView"); |
request.setAttribute("CourseUnitView", bV.getCourseUnitView()); |
} |
%> |
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back"); |
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName()); |
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName()); |
topNav.addNavPlace(null, "submit.blog"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
/impl/src/web/user/courseunits/courseunit.jsp |
---|
14,7 → 14,7 |
<html:form styleClass="form" action="/user/courseUnitControllerFromHome" enctype="multipart/form-data"> |
<input type="hidden" name="dispatch" value="update"/> |
<html:hidden property="courseUnitView.id"/> |
<h1>${CourseUnitView.name}</h1> |
<h1>${CourseUnitView.name} (${CourseUnitView.code})</h1> |
<div class="seccao"> |
<h2><bean:message key="courseunit.objectives"/></h2> |
<p> |
47,4 → 47,46 |
</baco:canManage> |
</html:form> |
<div class="seccao"> |
<h2><bean:message key="courseunit.teachers"/></h2> |
<table class="dataTable"> |
<tr> |
<th><bean:message key="number"/></th> |
<th><bean:message key="name"/></th> |
<th><bean:message key="email"/></th> |
</tr> |
<logic:iterate id="teacher" name="CourseUnitView" property="teachers" type="pt.estgp.estgweb.domain.views.UserView"> |
<tr> |
<td> |
${teacher.code} |
</td> |
<td> |
${teacher.name} |
</td> |
<td> |
${teacher.email} |
</td> |
</tr> |
</logic:iterate> |
</table> |
</div> |
<div class="seccao"> |
<h2><bean:message key="module.Announcements"/></h2> |
<logic:notEmpty name="CourseUnitView" property="announcements"> |
<div class="listCircleWhite"> |
<ul> |
<logic:iterate id="announcement" name="CourseUnitView" property="announcements" type="pt.estgp.estgweb.domain.views.AnnouncementView"> |
<li> |
<h3>${announcement.title}</h3> |
<p>${announcement.text}</p> |
</li> |
</logic:iterate> |
</ul> |
</div> |
</logic:notEmpty> |
<logic:empty name="CourseUnitView" property="announcements"> |
<p><bean:message key="announcement.zero.placed"/></p> |
</logic:empty> |
</div> |
</div> |
/impl/src/web/user/courseunits/topnavLoadBlogMonth.jsp |
---|
New file |
0,0 → 1,18 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@ page import="jomm.web.utils.NavPlaceServer" %> |
<%@ page import="jomm.web.utils.TopNav" %> |
<jsp:useBean id="BlogView" type="pt.estgp.estgweb.domain.views.BlogView" scope="request"/> |
<% |
request.setAttribute("CourseUnitView",BlogView.getCourseUnitView()); |
%> |
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back"); |
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName()); |
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName()); |
topNav.addNavPlace("/user/startLoadBlogFromHome.do?id="+BlogView.getId(), "blog","(" + BlogView.getTitle() + ")"); |
topNav.addNavPlace(null, "month." + BlogView.getMonth() + ".year",""+ BlogView.getYear()); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
/impl/src/web/user/courseunits/blog.jsp |
---|
New file |
0,0 → 1,14 |
<%@ page import="pt.estgp.estgweb.domain.Teacher" %> |
<%@ page import="pt.estgp.estgweb.domain.TeacherImpl" %> |
<%@ page import="jomm.utils.MessageResources" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<div id="contentCourseUnit"> |
<jsp:include page="/public/blogs/blog.jsp"/> |
</div> |
/impl/src/web/user/home/topnavCourseUnitAssignement.jsp |
---|
8,7 → 8,7 |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back"); |
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName()); |
topNav.addNavPlace(null, "courseunit",CourseUnitView.getName()); |
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName()); |
topNav.addNavPlace("/user/startLoadCourseUnitWorksFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "course.unit.works"); |
topNav.addNavPlace(null, "courseunit.assignement", CourseUnitAssignementView.getTitle()); |
%> |
/impl/src/web/user/home/topnavCourseUnitWorks.jsp |
---|
7,7 → 7,7 |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back"); |
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName()); |
topNav.addNavPlace(null, "courseunit",CourseUnitView.getName()); |
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName()); |
topNav.addNavPlace(null, "course.unit.works"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
/impl/src/web/user/home/topnavCourseUnitStudents.jsp |
---|
New file |
0,0 → 1,13 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<jsp:useBean id="CourseUnitView" type="pt.estgp.estgweb.domain.views.CourseUnitView" scope="request"/> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back"); |
topNav.addNavPlace(null, "course",CourseUnitView.getCourseName()); |
topNav.addNavPlace("/user/startLoadCourseUnitFromHome.do?courseUnitView.id=" + CourseUnitView.getId(), "courseunit",CourseUnitView.getName()); |
topNav.addNavPlace(null, "courseunit.students"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
/impl/src/xsd/curso_EC.xml |
---|
New file |
0,0 → 1,791 |
<?xml version="1.0" encoding="UTF-8"?> |
<curso xmlns="http://www.estgp.pt/xsd/planoestudos/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.estgp.pt/xsd/planoestudos/1.0/ planoestudos.xsd"> |
<nome>Engenharia Civil</nome> |
<area>EG</area> |
<semestre id="S1"> |
<unidade> |
<nome>Análise Matemática I</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Álgebra Linear e Geometria</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Física Geral</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Mineralogia e Geologia</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Topografia e Cartografia</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Desenho de Construção</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Unidade de Transferência I</nome> |
<area>Engenharias</area> |
<totalHoras>150</totalHoras> |
<horasContacto> |
<PL>30</PL> |
<TC>15</TC> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
</semestre> |
<!--1º semestre de EC--> |
<semestre id="S2"> |
<unidade> |
<nome>Análise Matemática II</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Mecânica</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Impacto e Gestão Ambiental</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Química Geral</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Probabilidades e Estatística</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Hidráulica Geral</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Unidade de Transferência II</nome> |
<area>Engenharias</area> |
<totalHoras>150</totalHoras> |
<horasContacto> |
<PL>30</PL> |
<TC>15</TC> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
</semestre> |
<!--2º semestre de EC--> |
<semestre id="S3"> |
<unidade> |
<nome>Análise Matemática III</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Resistência de Materiais I</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Hidráulica Aplicada</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Geologia da Engenharia</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Métodos e Tecnologias da Construção</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Planeamento Regional e Urbano</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Unidade de Transferência III</nome> |
<area>Engenharias</area> |
<totalHoras>150</totalHoras> |
<horasContacto> |
<PL>30</PL> |
<TC>15</TC> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
</semestre> |
<!--\\3º semestre de EC--> |
<semestre id="S4"> |
<perfil nome="Perfil de Estruturas e Construção"> |
<unidade> |
<nome>Análise de Estruturas</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Física das Construções</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Mecânica de Solos</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Abastecimento de Água e Saneamento</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Materiais Construção</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Resistência de Materiais II</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Unidade de Transferência IV</nome> |
<area>Engenharias</area> |
<totalHoras>150</totalHoras> |
<horasContacto> |
<PL>30</PL> |
<TC>15</TC> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
</perfil> |
<perfil nome="Planeamento e Infra-Estruturas"> |
<unidade> |
<nome>Análise de Estruturas</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Física das Construções</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Mecânica de Solos</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Abastecimento de Água e Saneamento</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Materiais Construção</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Hidrologia e Infra-Estruturas Hidráulicas</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Unidade de Transferência IV</nome> |
<area>Engenharias</area> |
<totalHoras>150</totalHoras> |
<horasContacto> |
<PL>30</PL> |
<TC>15</TC> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
</perfil> |
</semestre> |
<semestre id="S5"> |
<perfil nome="Perfil de Estruturas e Construção"> |
<unidade> |
<nome>Betão Armado</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Organização de Obras e Estaleiros</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Vias de Comunicação I</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Conservação e Reabilitação</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Estruturas Metálicas</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Engenharia Sísmica</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Unidade de Transferência V</nome> |
<area>Engenharias</area> |
<totalHoras>150</totalHoras> |
<horasContacto> |
<PL>30</PL> |
<TC>15</TC> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
</perfil> |
<perfil nome="Planeamento e Infra-Estruturas"> |
<unidade> |
<nome>Betão Armado</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Organização de Obras e Estaleiros</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Vias de Comunicação I</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Urbanização e Transportes</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Sistemas de Informação Geográfica</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Administração Pública e Gestão Municipal</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Unidade de Transferência V</nome> |
<area>Engenharias</area> |
<totalHoras>150</totalHoras> |
<horasContacto> |
<PL>30</PL> |
<TC>15</TC> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
</perfil> |
</semestre> |
<semestre id="S6"> |
<perfil nome="Perfil de Estruturas e Construção"> |
<unidade> |
<nome>Qualidade na Construção</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Qualidade na Construção</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Fundações e Estruturas de Suporte</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Betão Armado e Pré-Esforçado</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Direcção de Obras</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Economia e Gestão de Empreendimentos</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Projecto de Construção</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Unidade de Transferência VI</nome> |
<area>Engenharias</area> |
<totalHoras>150</totalHoras> |
<horasContacto> |
<PL>30</PL> |
<TC>15</TC> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
</perfil> |
<perfil nome="Planeamento e Infra-Estruturas"> |
<unidade> |
<nome>Qualidade na Construção</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Qualidade na Construção</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Equipamentos Regionais e Urbanos</nome> |
<area>Engenharias</area> |
<totalHoras>65</totalHoras> |
<horasContacto> |
<T>15</T> |
<TP>15</TP> |
<OT>15</OT> |
</horasContacto> |
<ECTS>2.5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Vias de Comunicação II</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Gestão e Avaliação de Sistemas e Projectos</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Projecto de Planeamento/Infra-Estruturas</nome> |
<area>Engenharias</area> |
<totalHoras>130</totalHoras> |
<horasContacto> |
<T>30</T> |
<TP>30</TP> |
<OT>30</OT> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
<unidade> |
<nome>Unidade de Transferência VI</nome> |
<area>Engenharias</area> |
<totalHoras>150</totalHoras> |
<horasContacto> |
<PL>30</PL> |
<TC>15</TC> |
</horasContacto> |
<ECTS>5</ECTS> |
<obs/> |
</unidade> |
</perfil> |
</semestre> |
</curso> |
/impl/src/xsd/planoestudos.xsd |
---|
1,77 → 1,82 |
<?xml version="1.0" encoding="UTF-8"?> |
<!-- edited with XMLSpy v2006 sp2 U (http://www.altova.com) by Jorge Machado (BN) --> |
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.estgp.pt/xsd/planoestudos/1.0/" |
targetNamespace="http://www.estgp.pt/xsd/planoestudos/1.0/" elementFormDefault="qualified" |
attributeFormDefault="unqualified"> |
<xsd:element name="curso"> |
<xsd:annotation> |
<xsd:documentation></xsd:documentation> |
</xsd:annotation> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="nome" type="xsd:string"/> |
<xsd:element name="area"> |
<xsd:simpleType> |
<xsd:restriction base="xsd:string"> |
<xsd:enumeration value="CH"/> |
<xsd:enumeration value="CE"/> |
<xsd:enumeration value="DG"/> |
<xsd:enumeration value="EG"/> |
</xsd:restriction> |
</xsd:simpleType> |
</xsd:element> |
<xsd:element name="semestre" maxOccurs="unbounded"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="unidade" maxOccurs="unbounded"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="nome" type="xsd:string"/> |
<xsd:element name="area" type="xsd:string"/> |
<xsd:element name="totalHoras" type="xsd:int"/> |
<xsd:element name="horasContacto"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="T" type="xsd:int" minOccurs="0"/> |
<xsd:element name="TP" type="xsd:int" minOccurs="0"/> |
<xsd:element name="P" type="xsd:int" minOccurs="0"/> |
<xsd:element name="PL" type="xsd:int" minOccurs="0"/> |
<xsd:element name="PD" type="xsd:int" minOccurs="0"/> |
<xsd:element name="OT" type="xsd:int" minOccurs="0"/> |
<xsd:element name="E" type="xsd:int" minOccurs="0"/> |
<xsd:element name="S" type="xsd:int" minOccurs="0"/> |
<xsd:element name="TC" type="xsd:int" minOccurs="0"/> |
<xsd:element name="O" type="xsd:int" minOccurs="0"/> |
</xsd:sequence> |
</xsd:complexType> |
</xsd:element> |
<xsd:element name="ECTS" type="xsd:int"/> |
<xsd:element name="obs" type="xsd:string"/> |
</xsd:sequence> |
</xsd:complexType> |
</xsd:element> |
</xsd:sequence> |
<xsd:attribute name="id" use="required"> |
<xsd:simpleType> |
<xsd:restriction base="xsd:string"> |
<xsd:enumeration value="S1"/> |
<xsd:enumeration value="S2"/> |
<xsd:enumeration value="S3"/> |
<xsd:enumeration value="S4"/> |
<xsd:enumeration value="S5"/> |
<xsd:enumeration value="S6"/> |
<xsd:enumeration value="S7"/> |
<xsd:enumeration value="S8"/> |
<xsd:enumeration value="S9"/> |
<xsd:enumeration value="S10"/> |
<xsd:enumeration value="S11"/> |
<xsd:enumeration value="S12"/> |
</xsd:restriction> |
</xsd:simpleType> |
</xsd:attribute> |
</xsd:complexType> |
</xsd:element> |
</xsd:sequence> |
</xsd:complexType> |
</xsd:element> |
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.estgp.pt/xsd/planoestudos/1.0/" targetNamespace="http://www.estgp.pt/xsd/planoestudos/1.0/" elementFormDefault="qualified" attributeFormDefault="unqualified"> |
<xsd:element name="curso"> |
<xsd:annotation> |
<xsd:documentation/> |
</xsd:annotation> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="nome" type="xsd:string"/> |
<xsd:element name="area"> |
<xsd:simpleType> |
<xsd:restriction base="xsd:string"> |
<xsd:enumeration value="CH"/> |
<xsd:enumeration value="CE"/> |
<xsd:enumeration value="DG"/> |
<xsd:enumeration value="EG"/> |
</xsd:restriction> |
</xsd:simpleType> |
</xsd:element> |
<xsd:element name="semestre" maxOccurs="unbounded"> |
<xsd:complexType> |
<xsd:choice> |
<xsd:element name="unidade" type="unidadeType" maxOccurs="unbounded"></xsd:element> |
<xsd:element name="perfil" maxOccurs="unbounded"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="unidade" type="unidadeType" maxOccurs="unbounded"/> |
</xsd:sequence> |
<xsd:attribute name="nome" use="required" type="xsd:string"/> |
</xsd:complexType> |
</xsd:element> |
</xsd:choice> |
<xsd:attribute name="id" use="required"> |
<xsd:simpleType> |
<xsd:restriction base="xsd:string"> |
<xsd:enumeration value="S1"/> |
<xsd:enumeration value="S2"/> |
<xsd:enumeration value="S3"/> |
<xsd:enumeration value="S4"/> |
<xsd:enumeration value="S5"/> |
<xsd:enumeration value="S6"/> |
<xsd:enumeration value="S7"/> |
<xsd:enumeration value="S8"/> |
<xsd:enumeration value="S9"/> |
<xsd:enumeration value="S10"/> |
<xsd:enumeration value="S11"/> |
<xsd:enumeration value="S12"/> |
</xsd:restriction> |
</xsd:simpleType> |
</xsd:attribute> |
</xsd:complexType> |
</xsd:element> |
</xsd:sequence> |
</xsd:complexType> |
</xsd:element> |
<xsd:complexType name="unidadeType"> |
<xsd:sequence> |
<xsd:element name="nome" type="xsd:string"/> |
<xsd:element name="area" type="xsd:string"/> |
<xsd:element name="totalHoras" type="xsd:int"/> |
<xsd:element name="horasContacto"> |
<xsd:complexType> |
<xsd:sequence> |
<xsd:element name="T" type="xsd:int" minOccurs="0"/> |
<xsd:element name="TP" type="xsd:int" minOccurs="0"/> |
<xsd:element name="P" type="xsd:int" minOccurs="0"/> |
<xsd:element name="PL" type="xsd:int" minOccurs="0"/> |
<xsd:element name="PD" type="xsd:int" minOccurs="0"/> |
<xsd:element name="OT" type="xsd:int" minOccurs="0"/> |
<xsd:element name="E" type="xsd:int" minOccurs="0"/> |
<xsd:element name="S" type="xsd:int" minOccurs="0"/> |
<xsd:element name="TC" type="xsd:int" minOccurs="0"/> |
<xsd:element name="O" type="xsd:int" minOccurs="0"/> |
</xsd:sequence> |
</xsd:complexType> |
</xsd:element> |
<xsd:element name="ECTS" type="xsd:float"/> |
<xsd:element name="obs" type="xsd:string"/> |
</xsd:sequence> |
</xsd:complexType> |
</xsd:schema> |