/branches/v3/impl/conf/language/MessageResources.properties |
---|
17,8 → 17,8 |
#errors.header=<script>alert('Existem erros ou avisos, verifique a lista');</script><div class="web-messages"> |
errors.header=<div class="web-messages"> |
errors.prefix=<div class="alert alert-warning"> |
errors.header=<div class="web-messages web-messages-errors-baco"> |
errors.prefix=<div class="alert alert-warning web-messages-error-baco"> |
errors.suffix=</div> |
errors.footer=</div> |
2163,3 → 2163,4 |
repository.document.save.success=Documento salvo com sucesso |
repositorycol=Colecções do Repositório de Documentos Digitais |
repositorycolbrowser=Navegador de Colecções do Repositório de Documentos Digitais |
repositoryinterface=Editor de Interfaces do Repositório Digital |
/branches/v3/impl/conf/WEB-INF/struts/struts-courseunits.xml |
---|
77,6 → 77,16 |
<forward name="edit.evaluation" path="page.edit.courseunit.evaluation"/> |
</action> |
<!--Authentication--> |
<action path="/user/courseUnitEvaluationControllerWidget" |
type="pt.estgp.estgweb.web.controllers.courseunits.CourseUnitsEvaluationController" |
name="CourseUnitEvaluationForm" |
scope="request" |
parameter="dispatch" |
validate="false" |
input="page.widget.json.fail.validations"> |
</action> |
<!--<action path="/user/startLoadCourseUnitFromHome" forward="page.load.courseunit.from.home"/>--> |
<action path="/user/startLoadCourseUnitRootFromHome" forward="/user/courseUnitControllerFromHome.do?dispatch=loadRoot&from=Home"/> |
/branches/v3/impl/conf/WEB-INF/struts/struts-repositorydocs.xml |
---|
17,13 → 17,14 |
<!--CourseDepartments--> |
<action path="/repositoryDocs" forward="page.repository.interface"/> |
<action path="/repositoryDocs" forward="page.repository.public.show.docs"/> |
<action path="/user/collectionsBrowser" forward="page.repositorycolbrowser"/> |
<action path="/user/repositoryEditDocument" forward="page.repository.edit.doc"/> |
<action path="/user/repositoryEditCollections" forward="page.repository.edit.col"/> |
<action path="/user/repositoryEditInterface" forward="page.repository.edit.interface"/> |
<action path="/user/repositoryBrowseCollections" forward="page.repository.browse.col"/> |
<action path="/user/editRepositoryDoc" forward="page.repositorydoc"/> |
<action path="/user/editRepositoryCol" forward="page.repositorycol"/> |
<action path="/user/repositoryDoc" |
type="pt.estgp.estgweb.web.controllers.repositorydocs.RepositoryDocController" |
/branches/v3/impl/conf/WEB-INF/struts/tiles-courses.xml |
---|
138,7 → 138,7 |
<definition name="page.admin.course.schools" extends="page.pae.separators.home"> |
<put name="title" value="Edição de Escolas"/> |
<put name="topnav" value="/user/courses/topnavSchoolsEdit.jsp"/> |
<put name="topnav" value="/admin/courses/topnavSchoolsEdit.jsp"/> |
<put name="body" value="/admin/courses/schools.jsp"/> |
</definition> |
/branches/v3/impl/conf/WEB-INF/struts/tiles-repositorydocs.xml |
---|
7,29 → 7,37 |
<tiles-definitions> |
<definition name="page.repositorydoc" extends="page.pae.separators.home"> |
<definition name="page.repository.edit.doc" extends="page.pae.separators.home"> |
<put name="title" value="Repositório de Documentos Digitais"/> |
<put name="topnav" value="/user/repositoryDocuments/topnavEditRepodoc.jsp"/> |
<put name="body" value="/user/repositoryDocuments/repositoryDocument.jsp"/> |
</definition> |
<definition name="page.repositorycol" extends="page.pae.separators.home"> |
<definition name="page.repository.edit.col" extends="page.pae.separators.home"> |
<put name="title" value="Colecções do Repositório de Documentos Digitais"/> |
<put name="topnav" value="/user/repositoryDocuments/topnavEditRepocol.jsp"/> |
<put name="body" value="/user/repositoryDocuments/repositoryCollections.jsp"/> |
</definition> |
<definition name="page.repository.interface" extends="base.definition.pae.public"> |
<put name="title" value="Repositório de Documentos Digitais"/> |
<put name="body" value="/user/repositoryDocuments/collectionsInterface.jsp"/> |
<definition name="page.repository.edit.interface" extends="page.pae.separators.home"> |
<put name="title" value="Edição de Interface do repositório Digital"/> |
<put name="topnav" value="/user/repositoryDocuments/topnavRepositoryInterface.jsp"/> |
<put name="body" value="/user/repositoryDocuments/repositoryInterface.jsp"/> |
</definition> |
<definition name="page.repositorycolbrowser" extends="page.pae.separators.home"> |
<definition name="page.repository.browse.col" extends="page.pae.separators.home"> |
<put name="title" value="Navegador do Repositório de Documentos Digitais"/> |
<put name="topnav" value="/user/repositoryDocuments/topnavRepocolbrowser.jsp"/> |
<put name="body" value="/user/repositoryDocuments/collectionsbrowser.jsp"/> |
</definition> |
<!--Publicas--> |
<definition name="page.repository.public.show.docs" extends="base.definition.pae.public"> |
<put name="title" value="Repositório Digital"/> |
<put name="body" value="/user/repositoryDocuments/collectionsInterface.jsp"/> |
</definition> |
</tiles-definitions> |
/branches/v3/impl/conf/WEB-INF/struts/struts-pae.xml |
---|
71,6 → 71,17 |
<!--Authentication--> |
<action path="/authenticateWidget" |
type="pt.estgp.estgweb.web.controllers.authenticate.AuthenticateController" |
name="WidgetModelForm" |
scope="request" |
parameter="dispatch" |
validate="true" |
input="page.widget.json.fail.validations"> |
</action> |
</action-mappings> |
</struts-config> |
/branches/v3/impl/conf/WEB-INF/tags/repositoryFile.tag |
---|
12,9 → 12,13 |
<%@attribute name="iconClasses" type="java.lang.String" required="false" %> |
<%@attribute name="downloadIcon" type="java.lang.Boolean" required="false" %> |
<%@attribute name="showHistory" type="java.lang.Boolean" required="false" %> |
<%@attribute name="btnXs" type="java.lang.Boolean" required="false" %> |
<% |
boolean history = showHistory == null ? true: showHistory; |
String btnXsClass = btnXs != null && btnXs == true ? " btn-xs " : ""; |
request.setAttribute("btnXsClass",btnXsClass); |
if(staticTag != null && staticTag) |
{ |
%> |
27,10 → 31,10 |
<% |
} |
%> |
<a data-toggle="tooltip" title="Descarregar" class="btn btn-small btn-default <%=iconClasses!= null?iconClasses:""%>" href="<%=request.getContextPath()%>/repositoryStream/${repositoryStream}"><span class="glyphicon glyphicon-download-alt"></span></a> |
<a data-toggle="tooltip" title="Descarregar" class="btn ${btnXsClass} btn-default <%=iconClasses!= null?iconClasses:""%>" href="<%=request.getContextPath()%>/repositoryStream/${repositoryStream}"><span class="glyphicon glyphicon-download-alt"></span></a> |
<% |
if(history){%> |
<a data-toggle="tooltip" title="Histórico" class="btn btn-small btn-default <%=iconClasses!= null?iconClasses:""%>" target="_blank" href="<%=request.getContextPath()%>/user/data.jsp?id=${repositoryStream}"><span class="icon icon-history icon-large"></span></a> |
<a data-toggle="tooltip" title="Histórico" class="btn ${btnXsClass} btn-default <%=iconClasses!= null?iconClasses:""%>" target="_blank" href="<%=request.getContextPath()%>/user/data.jsp?id=${repositoryStream}"><span class="icon icon-history icon-large"></span></a> |
<%}%> |
</div> |
<% |
115,9 → 119,9 |
<% |
} |
%> |
<a data-toggle="tooltip" title="Descarregar" class="btn btn-small btn-default <%=iconClasses!= null?iconClasses:""%>" href="<%=request.getContextPath()%>/repositoryStream/${repositoryStream}"><span class="<%=iconFile%>"></span></a> |
<a data-toggle="tooltip" title="Descarregar" class="btn ${btnXsClass} btn-default <%=iconClasses!= null?iconClasses:""%>" href="<%=request.getContextPath()%>/repositoryStream/${repositoryStream}"><span class="<%=iconFile%>"></span></a> |
<%if(history){%> |
<a data-toggle="tooltip" title="Histórico" class="btn btn-small btn-default <%=iconClasses!= null?iconClasses:""%>" href="javascript:invoqueDataVersionForm(${repositoryStream})"><span class="icon icon-history icon-large"></span></a> |
<a data-toggle="tooltip" title="Histórico" class="btn ${btnXsClass} btn-default <%=iconClasses!= null?iconClasses:""%>" href="javascript:invoqueDataVersionForm(${repositoryStream})"><span class="icon icon-history icon-large"></span></a> |
<%}%> |
</div> |
<% |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courseunits/courseunitprogram.fo.xsl |
---|
74,11 → 74,11 |
<fo:table-cell > |
<xsl:if test="$validadoCC = 'false'"> |
<fo:block font-size="15pt"> |
(Documento ainda não validado pela Comissão de Curso) |
</fo:block> |
</xsl:if> |
<fo:block font-size="15pt"> |
<xsl:if test="$validadoCC = 'false'"> |
(Documento ainda não validado pela Comissão de Curso) |
</xsl:if> |
</fo:block> |
</fo:table-cell> |
<fo:table-cell text-align="right" > |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/data/repositorydocuments/RepositoryDocumentService.java |
---|
42,19 → 42,19 |
*/ |
public JSONArray openRepositoryCollection(Long collectionId, UserSession userSession) throws IOException, TransformationException, JSONException, AccessDeniedException { |
boolean visible = userSession.getUser() != null && |
boolean onlyVisible = !(userSession.getUser() != null && |
(userSession.getUser().hasRole(REPOSITORY_DOCS_ROLE) |
|| |
userSession.getUser().isSuperuserOrAdmin()); |
userSession.getUser().isSuperuserOrAdmin())); |
if(collectionId == null) |
{ |
//finding roots |
List<RepositoryDocumentCollectionImpl> roots = DaoFactory.getRepositoryDocumentCollectionDaoImpl().findRoots(visible); |
List<RepositoryDocumentCollectionImpl> roots = DaoFactory.getRepositoryDocumentCollectionDaoImpl().findRoots(onlyVisible); |
return RepositoryDocumentCollectionImpl.toJsonArray(roots); |
} |
else |
{ |
List<RepositoryDocumentCollectionImpl> childs = DaoFactory.getRepositoryDocumentCollectionDaoImpl().findChilds(visible,collectionId); |
List<RepositoryDocumentCollectionImpl> childs = DaoFactory.getRepositoryDocumentCollectionDaoImpl().findChilds(onlyVisible,collectionId); |
return RepositoryDocumentCollectionImpl.toJsonArray(childs); |
} |
} |
62,12 → 62,12 |
public JSONArray openRepositoryCollectionDocuments(Long collectionId, UserSession userSession) throws IOException, TransformationException, JSONException, AccessDeniedException { |
boolean visible = userSession.getUser() != null && |
boolean onlyVisible = !(userSession.getUser() != null && |
(userSession.getUser().hasRole(REPOSITORY_DOCS_ROLE) |
|| |
userSession.getUser().isSuperuserOrAdmin()); |
userSession.getUser().isSuperuserOrAdmin())); |
List<RepositoryDocumentImpl> docs = DaoFactory.getRepositoryDocumentDaoImpl().findDocumentsSortPublishDateDesc(visible, collectionId); |
List<RepositoryDocumentImpl> docs = DaoFactory.getRepositoryDocumentDaoImpl().findDocumentsSortPublishDateDesc(onlyVisible, collectionId); |
return RepositoryDocumentImpl.toJsonArray(docs); |
} |
171,6 → 171,8 |
repoFileCandidate.setDescription(ficheiroAtualizado.getDescription()); |
repoFileCandidate.setVisible(ficheiroAtualizado.isVisible()); |
repoFileCandidate.getRepositoryFileProxy().getRepositoryFile().setAccessControl(ficheiroAtualizado.getRepositoryFileProxy().getRepositoryFile().getAccessControl()); |
if(!repoFileCandidate.isVisible()) |
repoFileCandidate.getRepositoryFileProxy().getRepositoryFile().setAccessControl(ResourceAccessControlEnum.privateDomain.getKey()); |
break; |
} |
} |
235,6 → 237,8 |
} |
repoFile.setVisible(uploadedF.isVisible()); |
if(!repoFile.isVisible()) |
repoFile.getRepositoryFileProxy().getRepositoryFile().setAccessControl(ResourceAccessControlEnum.privateDomain.getKey()); |
repoFile.setTitle(uploadedF.getTitle()); |
repoFile.setDescription(uploadedF.getDescription()); |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/RepositoryDocumentCollectionDaoImpl.java |
---|
1,5 → 1,6 |
package pt.estgp.estgweb.domain.dao.impl; |
import org.hibernate.Criteria; |
import org.hibernate.criterion.Order; |
import org.hibernate.criterion.Restrictions; |
import pt.estgp.estgweb.domain.RepositoryDocumentCollection; |
33,20 → 34,25 |
return createCriteria().add(Restrictions.isNull("parent")).addOrder(Order.asc("name")).list(); |
} |
public List<RepositoryDocumentCollectionImpl> findRoots(boolean visible) |
public List<RepositoryDocumentCollectionImpl> findRoots(boolean onlyVisible) |
{ |
return createCriteria() |
Criteria c = createCriteria() |
.add(Restrictions.isNull("parent")) |
.add(eq("visible",visible)) |
.addOrder(Order.asc("name")).list(); |
.addOrder(Order.asc("name")); |
if(onlyVisible) |
c.add(eq("visible",true)); |
return c.list(); |
} |
public List<RepositoryDocumentCollectionImpl> findChilds(boolean visible,long collectionId) |
public List<RepositoryDocumentCollectionImpl> findChilds(boolean onlyVisible,long collectionId) |
{ |
return createCriteria() |
Criteria c = createCriteria() |
.add(eq("parent.id",collectionId)) |
.add(eq("visible",visible)) |
.addOrder(Order.asc("name")).list(); |
.addOrder(Order.asc("name")); |
if(onlyVisible) |
c.add(eq("visible",true)); |
return c.list(); |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/RepositoryDocumentDaoImpl.java |
---|
1,5 → 1,6 |
package pt.estgp.estgweb.domain.dao.impl; |
import org.hibernate.Criteria; |
import org.hibernate.criterion.Order; |
import pt.estgp.estgweb.domain.RepositoryDocumentImpl; |
27,33 → 28,34 |
} |
public List<RepositoryDocumentImpl> findDocumentsSortPublishDateDesc(boolean visible,long collectionId) |
public List<RepositoryDocumentImpl> findDocumentsSortPublishDateDesc(boolean onlyVisible,long collectionId) |
{ |
return findDocuments(visible,collectionId,"publishDate","desc"); |
return findDocuments(onlyVisible,collectionId,"publishDate","desc"); |
} |
public List<RepositoryDocumentImpl> findDocumentsSortPublishDateAsc(boolean visible,long collectionId) |
public List<RepositoryDocumentImpl> findDocumentsSortPublishDateAsc(boolean onlyVisible,long collectionId) |
{ |
return findDocuments(visible,collectionId,"publishDate","asc"); |
return findDocuments(onlyVisible,collectionId,"publishDate","asc"); |
} |
public List<RepositoryDocumentImpl> findDocumentsSortTitleDesc(boolean visible,long collectionId) |
public List<RepositoryDocumentImpl> findDocumentsSortTitleDesc(boolean onlyVisible,long collectionId) |
{ |
return findDocuments(visible,collectionId,"title","desc"); |
return findDocuments(onlyVisible,collectionId,"title","desc"); |
} |
public List<RepositoryDocumentImpl> findDocumentsSortTitleAsc(boolean visible,long collectionId) |
public List<RepositoryDocumentImpl> findDocumentsSortTitleAsc(boolean onlyVisible,long collectionId) |
{ |
return findDocuments(visible,collectionId,"title","asc"); |
return findDocuments(onlyVisible,collectionId,"title","asc"); |
} |
public List<RepositoryDocumentImpl> findDocuments(boolean visible,long collectionId,String orderField, String orderDirection) |
public List<RepositoryDocumentImpl> findDocuments(boolean onlyVisible,long collectionId,String orderField, String orderDirection) |
{ |
String orderFinalField = orderField == null ? "publishDate" : orderField; |
Order order = orderDirection.equals("asc") ? Order.asc(orderFinalField) : Order.desc(orderFinalField); |
return createCriteria() |
Criteria c = createCriteria() |
.add(eq("collection.id",collectionId)) |
.add(eq("visible",visible)) |
.addOrder(order) |
.addOrder(Order.desc("saveDate")) |
.list(); |
.addOrder(Order.desc("saveDate")); |
if(onlyVisible) |
c.add(eq("visible",true)); |
return c.list(); |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/views/CourseView.java |
---|
224,6 → 224,7 |
if(department != null) |
{ |
c.setDepartment(department); |
if(department != null) |
c.setInstitutionalCode(department.getCourseSchool().getInstitutionalCode()); |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsEvaluationController.java |
---|
80,10 → 80,7 |
} |
} |
public ActionForward saveEvaluation(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
public boolean saveEvaluation(ActionForm form,HttpServletRequest request, HttpServletResponse response) |
throws ServletException |
{ |
CourseUnitEvaluationForm cUF = (CourseUnitEvaluationForm) form; |
92,28 → 89,34 |
boolean go = true; |
long id = cUF.getCourseUnitView().getId(); |
CourseUnitEvaluationView cuV = cUF.getCourseUnitEvaluationView(); |
if(request.getParameter("json")!=null && request.getParameter("json").equals("true")) |
if(request.getParameter("autosave") != null && request.getParameter("autosave").equals("true")) |
{ |
cuV.setAutosave(true); |
} |
else |
{ |
ActionErrors errors = cUF.validateSave(mapping,request); |
ActionErrors errors = cUF.validateSave(null,request); |
if(errors.size() > 0) |
{ |
saveErrors(request, errors); |
go = false; |
} |
} |
IServiceManager sm = ServiceManager.getInstance(); |
Object[] args = new Object[]{cuV, id}; |
String[] names = new String[]{"evaluationView", "unitId"}; |
if(go) |
{ |
cuV = (CourseUnitEvaluationView) sm.execute(RequestUtils.getRequester(request, response), "SaveCourseUnitEvaluation", args,names); |
CourseUnitView cV = loadCourseUnitView(id,true,false, mapping, request, response); |
addMessage(request,"courseunit.evaluation.success"); |
} |
/*CourseUnitView cV = loadCourseUnitView(id,true,false, null, request, response); |
cUF.setCourseUnitView(cV); |
cUF.setCourseUnitEvaluationView(cuV); |
request.setAttribute("CourseUnitView", cV); |
if(go) |
addMessage(request,"courseunit.evaluation.success"); |
if(request.getParameter("json")!=null && request.getParameter("json").equals("true")) |
124,27 → 127,20 |
return mapping.findForward("load"); |
else |
return mapping.findForward("edit.evaluation"); |
*/ |
return true; |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
} |
catch (NotFoundException e) |
{ |
return mapping.findForward("error404"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
addError(request, "courseunit.evaluation.tryagain"); |
return editEvaluation(mapping,cUF,request,response); |
return false; |
} |
} |
public ActionForward teacherCompleteEvaluation(ActionMapping mapping, |
public boolean teacherCompleteEvaluation( |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
154,7 → 150,7 |
try |
{ |
boolean go = true; |
ActionErrors errors = cUF.validateSave(mapping,request); |
ActionErrors errors = cUF.validateSave(null,request); |
if(errors.size() > 0) |
{ |
saveErrors(request, errors); |
170,36 → 166,37 |
String[] names = new String[]{"evaluationView", "unitId"}; |
if(go) |
cuV = (CourseUnitEvaluationView) sm.execute(RequestUtils.getRequester(request, response), "SaveCourseUnitEvaluation", args,names); |
CourseUnitView cV = loadCourseUnitView(id,true,false, mapping, request, response); |
cUF.setCourseUnitView(cV); |
cUF.setCourseUnitEvaluationView(cuV); |
request.setAttribute("CourseUnitView", cV); |
//CourseUnitView cV = loadCourseUnitView(id,true,false, mapping, request, response); |
//cUF.setCourseUnitView(cV); |
//cUF.setCourseUnitEvaluationView(cuV); |
//request.setAttribute("CourseUnitView", cV); |
if(go) |
addMessage(request,"courseunit.evaluation.success"); |
if(go) |
return mapping.findForward("load"); |
else |
return mapping.findForward("edit.evaluation"); |
//if(go) |
// return mapping.findForward("load"); |
//else |
// return mapping.findForward("edit.evaluation"); |
return go; |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
addErrorAsString(request,e.toString()); |
return false; |
} |
catch (NotFoundException e) |
{ |
return mapping.findForward("error404"); |
addErrorAsString(request,e.toString()); |
return false; |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
addErrorAsString(request,e.toString()); |
addError(request, "courseunit.evaluation.tryagain"); |
return editEvaluation(mapping,cUF,request,response); |
//return mapping.findForward("error500"); |
return false; |
} |
} |
public ActionForward publishEvaluation(ActionMapping mapping, |
ActionForm form, |
public boolean publishEvaluation(ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
208,7 → 205,7 |
try |
{ |
boolean go = true; |
ActionErrors errors = cUF.validateSave(mapping,request); |
ActionErrors errors = cUF.validateSave(null,request); |
if(errors.size() > 0) |
{ |
saveErrors(request, errors); |
223,30 → 220,34 |
String[] names = new String[]{"evaluationView", "unitId"}; |
if(go) |
cuV = (CourseUnitEvaluationView) sm.execute(RequestUtils.getRequester(request, response), "SaveCourseUnitEvaluation", args,names); |
CourseUnitView cV = loadCourseUnitView(id,true,false, mapping, request, response); |
cUF.setCourseUnitView(cV); |
cUF.setCourseUnitEvaluationView(cuV); |
request.setAttribute("CourseUnitView", cV); |
//CourseUnitView cV = loadCourseUnitView(id,true,false, mapping, request, response); |
//cUF.setCourseUnitView(cV); |
//cUF.setCourseUnitEvaluationView(cuV); |
//request.setAttribute("CourseUnitView", cV); |
if(go) |
addMessage(request,"courseunit.evaluation.success"); |
if(go) |
return mapping.findForward("load"); |
else |
return mapping.findForward("edit.evaluation"); |
//if(go) |
// return mapping.findForward("load"); |
//else |
// return mapping.findForward("edit.evaluation"); |
return go; |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
addErrorAsString(request,e.toString()); |
return false; |
} |
catch (NotFoundException e) |
{ |
return mapping.findForward("error404"); |
addErrorAsString(request,e.toString()); |
return false; |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
addError(request, "courseunit.evaluation.tryagain"); |
return editEvaluation(mapping,cUF,request,response); |
addErrorAsString(request,e.toString()); |
return false; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsProgramController.java |
---|
41,6 → 41,7 |
HttpServletResponse response) |
throws Throwable { |
CourseUnitProgramForm cUF = (CourseUnitProgramForm) form; |
long id = cUF.getCourseUnitId(); |
57,6 → 58,7 |
request, |
response); |
} |
public ActionForward invalidateProgram(ActionMapping mapping, |
65,22 → 67,25 |
HttpServletResponse response) |
throws Throwable { |
CourseUnitProgramForm cUF = (CourseUnitProgramForm) form; |
long id = cUF.getCourseUnitId(); |
if(id <= 0) |
id = cUF.getCourseUnitView().getId(); |
CourseUnitProgramForm cUF = (CourseUnitProgramForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
Object[] args = new Object[]{id}; |
String[] names = new String[]{"unitId"}; |
sm.execute(RequestUtils.getRequester(request, response), "InvalidateCourseUnitProgram", args,names); |
long id = cUF.getCourseUnitId(); |
if(id <= 0) |
id = cUF.getCourseUnitView().getId(); |
return editProgram(mapping, |
form, |
request, |
response); |
IServiceManager sm = ServiceManager.getInstance(); |
Object[] args = new Object[]{id}; |
String[] names = new String[]{"unitId"}; |
sm.execute(RequestUtils.getRequester(request, response), "InvalidateCourseUnitProgram", args,names); |
return editProgram(mapping, |
form, |
request, |
response); |
} |
public ActionForward editProgram(ActionMapping mapping, |
153,7 → 158,13 |
CourseUnitView cV = loadCourseUnitView(id,true,false, mapping, request, response); |
cUF.setCourseUnitView(cV); |
request.setAttribute("CourseUnitView", cV); |
return mapping.findForward("load"); |
if(request.getParameter("json")!=null && request.getParameter("json").equals("true")) |
{ |
return mapping.findForward("jsonOk"); |
} |
else |
return mapping.findForward("load"); |
} |
catch (FilterChainFailedException e) |
{ |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/repositorydocs/interfaces/InterfaceConfiguration.java |
---|
File deleted |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/repositorydocs/interfaces/RepositoryInterface.java |
---|
New file |
0,0 → 1,144 |
package pt.estgp.estgweb.web.controllers.repositorydocs.interfaces; |
import com.owlike.genson.Genson; |
import com.owlike.genson.TransformationException; |
import org.json.JSONException; |
import org.json.JSONObject; |
import java.io.IOException; |
import java.util.ArrayList; |
/** |
* Created by jorgemachado on 23/03/17. |
*/ |
public class RepositoryInterface |
{ |
String title; |
String description; |
boolean showTitle; |
boolean showDescription; |
ArrayList<InterfaceRow> rows = new ArrayList<InterfaceRow>(); |
public String getTitle() { |
return title; |
} |
public void setTitle(String title) { |
this.title = title; |
} |
public String getDescription() { |
return description; |
} |
public void setDescription(String description) { |
this.description = description; |
} |
public boolean isShowTitle() { |
return showTitle; |
} |
public void setShowTitle(boolean showTitle) { |
this.showTitle = showTitle; |
} |
public boolean isShowDescription() { |
return showDescription; |
} |
public void setShowDescription(boolean showDescription) { |
this.showDescription = showDescription; |
} |
public ArrayList<InterfaceRow> getRows() { |
return rows; |
} |
public void setRows(ArrayList<InterfaceRow> rows) { |
this.rows = rows; |
} |
static Genson genson; |
static { |
Genson.Builder gensonBuilder = new Genson.Builder() |
.exclude(Object.class) |
.include(RepositoryInterface.class) |
.include(InterfaceRow.class) |
.include(InterfaceColumn.class) |
.include(InterfaceBlock.class) |
.include(String.class) |
.include(ArrayList.class) |
.include(InterfaceBlock.Order.class); |
genson = gensonBuilder.create(); |
} |
public String toJson() throws IOException, TransformationException |
{ |
return genson.serialize(this); |
} |
public static RepositoryInterface loadFromJson(String json) throws IOException, TransformationException { |
return genson.deserialize(json, RepositoryInterface.class); |
} |
public JSONObject toJsonObject() throws IOException, TransformationException, JSONException { |
return new JSONObject(toJson()); |
} |
public static void main(String[] args) throws IOException, TransformationException { |
RepositoryInterface repositoryInterface = new RepositoryInterface(); |
repositoryInterface.setTitle("Teste"); |
repositoryInterface.setDescription("RepoDesc"); |
repositoryInterface.setShowTitle(true); |
repositoryInterface.setShowDescription(true); |
InterfaceRow interfaceRow = new InterfaceRow(); |
repositoryInterface.getRows().add(interfaceRow); |
interfaceRow.setTitle("Row 1 title"); |
interfaceRow.setDescription("Row 1 Desc"); |
InterfaceColumn col1 = new InterfaceColumn(); |
InterfaceColumn col2 = new InterfaceColumn(); |
interfaceRow.getColumns().add(col1); |
interfaceRow.getColumns().add(col2); |
col1.setTitle("col1Title"); |
col2.setTitle("col2Title"); |
col1.setDescription("col1Desc"); |
col2.setDescription("col2Desc"); |
col1.setCols(6); |
col2.setCols(6); |
InterfaceBlock interfaceBlock1 = new InterfaceBlock(); |
InterfaceBlock interfaceBlock2 = new InterfaceBlock(); |
col1.getBlocks().add(interfaceBlock1); |
col2.getBlocks().add(interfaceBlock2); |
interfaceBlock1.setTitle("bloco1"); |
interfaceBlock2.setTitle("bloco2"); |
interfaceBlock1.setDescription("bloco1desc"); |
interfaceBlock2.setDescription("bloco2desc"); |
interfaceBlock1.getCollectionId().add(new Long(1)); |
interfaceBlock2.getCollectionId().add(new Long(4)); |
interfaceBlock1.setOrderBy(InterfaceBlock.Order.publishDate); |
interfaceBlock2.setOrderBy(InterfaceBlock.Order.title); |
System.out.println(repositoryInterface.toJson()); |
repositoryInterface = RepositoryInterface.loadFromJson(repositoryInterface.toJson()); |
System.out.println(repositoryInterface.toJson()); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/repositorydocs/interfaces/InterfaceRow.java |
---|
New file |
0,0 → 1,60 |
package pt.estgp.estgweb.web.controllers.repositorydocs.interfaces; |
import java.util.ArrayList; |
/** |
* Created by jorgemachado on 17/03/17. |
*/ |
public class InterfaceRow implements java.io.Serializable |
{ |
String title; |
String description; |
boolean showTitle; |
boolean showDescription; |
ArrayList<InterfaceColumn> columns = new ArrayList<InterfaceColumn>(); |
public boolean isShowTitle() { |
return showTitle; |
} |
public void setShowTitle(boolean showTitle) { |
this.showTitle = showTitle; |
} |
public boolean isShowDescription() { |
return showDescription; |
} |
public void setShowDescription(boolean showDescription) { |
this.showDescription = showDescription; |
} |
public String getTitle() { |
return title; |
} |
public void setTitle(String title) { |
this.title = title; |
} |
public String getDescription() { |
return description; |
} |
public void setDescription(String description) { |
this.description = description; |
} |
public ArrayList<InterfaceColumn> getColumns() { |
return columns; |
} |
public void setColumns(ArrayList<InterfaceColumn> columns) { |
this.columns = columns; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/repositorydocs/interfaces/InterfaceBlock.java |
---|
11,31 → 11,59 |
String title; |
String description; |
boolean showTitle = true; |
boolean showDescription = false; |
Order orderBy = Order.publishDate; |
ArrayList<Long> collectionId = new ArrayList<Long>(); |
//or |
boolean splitSubCollections; |
boolean onlyTitleFileView; |
boolean tree = false; |
boolean showDocumentTitle = true; |
boolean showDocumentDescription = true; |
boolean showFileTitle = true; |
boolean showFileDescription = false; |
boolean showFileMetaData = false; |
Date maxPublishDate; |
Date minPublishDate; |
public boolean isSplitSubCollections() |
public boolean isTree() |
{ |
return splitSubCollections; |
return tree; |
} |
public void setSplitSubCollections(boolean splitSubCollections) { |
this.splitSubCollections = splitSubCollections; |
public Order getOrderBy() { |
return orderBy; |
} |
public boolean isOnlyTitleFileView() { |
return onlyTitleFileView; |
public void setOrderBy(Order orderBy) { |
this.orderBy = orderBy; |
} |
public void setOnlyTitleFileView(boolean onlyTitleFileView) { |
this.onlyTitleFileView = onlyTitleFileView; |
public boolean isShowFileDescription() { |
return showFileDescription; |
} |
public void setShowFileDescription(boolean showFileDescription) { |
this.showFileDescription = showFileDescription; |
} |
public void setTree(boolean tree) { |
this.tree = tree; |
} |
public boolean isShowDocumentTitle() { |
return showDocumentTitle; |
} |
public void setShowDocumentTitle(boolean showDocumentTitle) { |
this.showDocumentTitle = showDocumentTitle; |
} |
public Date getMaxPublishDate() { |
return maxPublishDate; |
} |
75,4 → 103,53 |
public void setCollectionId(ArrayList<Long> collectionId) { |
this.collectionId = collectionId; |
} |
public boolean isShowTitle() { |
return showTitle; |
} |
public void setShowTitle(boolean showTitle) { |
this.showTitle = showTitle; |
} |
public boolean isShowDescription() { |
return showDescription; |
} |
public void setShowDescription(boolean showDescription) { |
this.showDescription = showDescription; |
} |
public boolean isShowDocumentDescription() { |
return showDocumentDescription; |
} |
public void setShowDocumentDescription(boolean showDocumentDescription) { |
this.showDocumentDescription = showDocumentDescription; |
} |
public boolean isShowFileTitle() { |
return showFileTitle; |
} |
public void setShowFileTitle(boolean showFileTitle) { |
this.showFileTitle = showFileTitle; |
} |
public boolean isShowFileMetaData() { |
return showFileMetaData; |
} |
public void setShowFileMetaData(boolean showFileMetaData) { |
this.showFileMetaData = showFileMetaData; |
} |
public enum Order |
{ |
title, |
publishDate, |
saveDate, |
updateDate |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/repositorydocs/interfaces/InterfaceColumn.java |
---|
New file |
0,0 → 1,58 |
package pt.estgp.estgweb.web.controllers.repositorydocs.interfaces; |
import java.util.ArrayList; |
/** |
* Created by jorgemachado on 23/03/17. |
*/ |
public class InterfaceColumn implements java.io.Serializable |
{ |
String title; |
String description; |
//1 - 12 |
int cols; |
ArrayList<InterfaceBlock> blocks = new ArrayList<InterfaceBlock>(); |
//XOR |
ArrayList<InterfaceRow> rows = new ArrayList<InterfaceRow>(); |
public ArrayList<InterfaceRow> getRows() { |
return rows; |
} |
public void setRows(ArrayList<InterfaceRow> rows) { |
this.rows = rows; |
} |
public int getCols() { |
return cols; |
} |
public void setCols(int cols) { |
this.cols = cols; |
} |
public String getTitle() { |
return title; |
} |
public void setTitle(String title) { |
this.title = title; |
} |
public String getDescription() { |
return description; |
} |
public void setDescription(String description) { |
this.description = description; |
} |
public ArrayList<InterfaceBlock> getBlocks() { |
return blocks; |
} |
public void setBlocks(ArrayList<InterfaceBlock> blocks) { |
this.blocks = blocks; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/authenticate/AuthenticateController.java |
---|
9,7 → 9,7 |
import pt.estgp.estgweb.domain.views.UserView; |
import pt.estgp.estgweb.services.authenticate.AuthenticateException; |
import pt.estgp.estgweb.web.UserSessionProxy; |
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController; |
import pt.estgp.estgweb.web.controllers.utils.AbstractWidgetAjaxController; |
import pt.estgp.estgweb.web.exceptions.NoCookiesException; |
import pt.estgp.estgweb.web.form.profile.ProfileForm; |
import pt.estgp.estgweb.web.utils.RequestUtils; |
27,11 → 27,36 |
* @time 18:01:54 |
* @see pt.estgp.estgweb.web |
*/ |
public class AuthenticateController extends ApplicationDispatchController |
public class AuthenticateController extends AbstractWidgetAjaxController |
{ |
private static final Logger logger = Logger.getLogger(AuthenticateController.class); |
public boolean loginWidget(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Throwable |
{ |
try |
{ |
String username = request.getParameter("username"); |
String password = request.getParameter("password"); |
IServiceManager sm = ServiceManager.getInstance(); |
Object[] args = new Object[]{username,password}; |
UserSession userSession = (UserSession) sm.execute(RequestUtils.getRequester(request, response),Globals.AUTHENTICATE_SERVICE,args); |
request.setAttribute(Globals.USER_SESSION_KEY,userSession); |
return true; |
} |
catch (AuthenticateException e) |
{ |
ActionMessages actionMessages = new ActionMessages(); |
actionMessages.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage(e.getMessage())); |
saveErrors(request, actionMessages); |
return false; |
} |
catch (Throwable e) |
{ |
return false; |
} |
} |
public ActionForward login(ActionMapping mapping, |
ActionForm form , |
HttpServletRequest request, |
270,4 → 295,6 |
} |
} |
/branches/v3/impl/src/web/auth/loginWidget.jsp |
---|
New file |
0,0 → 1,93 |
<%@ page import="pt.estgp.estgweb.Globals" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<script> |
var actionAuthenticate = "<%=request.getContextPath()%>/authenticateWidget.do"; |
function authenticateWidget() |
{ |
var username = $("#formAuthenticationWidget input[name='username']").val(); |
var password = $("#formAuthenticationWidget input[name='password']").val(); |
widgetSimpleCallWithActionParameters( |
"<%=request.getContextPath()%>/authenticateWidget.do", |
"loginWidget", |
{ |
"username" : username, |
"password" : password |
}, |
"#formAuthenticationWidget", |
function() |
{ |
$('#modalAuthentication').modal('hide'); |
}, |
function() |
{ |
//fail |
} |
); |
} |
</script> |
<!--AUTENTICATION MODAL--> |
<script> |
$(document).ready(function(){ |
$('#modalAuthentication').on('show.bs.modal', function(e) |
{ |
$("#modalAuthentication .web-messages").html(""); |
}); |
}); |
</script> |
<div class="modal fade" id="modalAuthentication" role="dialog" > |
<div class="modal-dialog" data-width="960" style="display: block; width: 960px; margin-top: 50px;" aria-hidden="false"> |
<!-- Modal content--> |
<div class="modal-content"> |
<div class="modal-header"> |
<h1 class="modal-title">Formulário de Autenticação</h1> |
</div> |
<div class="modal-body"> |
<div class="alert alert-info"> |
Caro utilizador, a sessão expirou, por favor introduza as suas credênciais |
para voltar a autênticar-se no sistema |
e poder repetir a última operação. Obrigado. |
</div> |
<div id="formAuthenticationWidget" class="clearfix"> |
<div class="web-messages" style="margin-bottom: 5px"></div> |
<div class="form-horizontal col-md-12 clearfix"> |
<div class="form-group clearfix"> |
<label class="col-md-12" style="margin-bottom: 10px"><jomm:messageConfigKey config="authentication.policy.username.msg.key"/></label> |
<div class="col-md-6"> |
<input type="text" class="form-control" name="username"/> |
</div> |
</div> |
<div class="form-group clearfix"> |
<label class="col-md-12" style="margin-bottom: 10px"><jomm:messageConfigKey config="authentication.policy.password.msg.key"/></label> |
<div class="col-md-6"> |
<input type="password" class="form-control" name="password"/> |
</div> |
</div> |
<div class="col-sm-2"> |
<button type="button" class="btn btn-success" onclick="authenticateWidget()"><bean:message key="submit"/></button> |
</div> |
</div> |
</div> |
</div> |
</div> |
</div> |
</div> |
/branches/v3/impl/src/web/errors/401.jsp |
---|
9,7 → 9,7 |
<% |
response.sendError(401); |
%> |
<div class="container-fluid"> |
<div class="container-fluid errorContent"> |
<h3 class="statusWARNING"> |
<baco:isNotAuthenticated> |
/branches/v3/impl/src/web/errors/500.jsp |
---|
9,7 → 9,7 |
response.sendError(500); |
%> |
<div class="container-fluid"> |
<div class="container-fluid errorContent"> |
<div class="alert alert-danger"><bean:message key="error.500"/></div> |
<div class="alert alert-info"><bean:message key="admin.contact"/> |
<ul> |
/branches/v3/impl/src/web/errors/404.jsp |
---|
8,7 → 8,7 |
<% |
response.sendError(404); |
%> |
<div class="container-fluid"> |
<div class="container-fluid errorContent"> |
<div class="alert alert-warning"><bean:message key="error.404"/></div> |
<p><bean:message key="error.404.explain"/></p> |
<ul> |
/branches/v3/impl/src/web/errors/503.jsp |
---|
8,7 → 8,7 |
<% |
response.sendError(500); |
%> |
<div class="container-fluid"> |
<div class="container-fluid errorContent"> |
<div class="alert alert-danger"><bean:message key="error.503"/></div> |
<div class="alert alert-info"><bean:message key="admin.contact"/> |
<ul> |
/branches/v3/impl/src/web/errors/noCookies.jsp |
---|
6,5 → 6,7 |
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
<div class="container-fluid errorContent"> |
<h3 class="statusWARNING"><bean:message key="error.no.cookies"/></h3> |
<p><bean:message key="admin.contact"/> webmaster [AT] estgp [DOT] pt</p> |
<p><bean:message key="admin.contact"/> webmaster [AT] estgp [DOT] pt</p> |
</div> |
/branches/v3/impl/src/web/errors/408.jsp |
---|
8,6 → 8,7 |
<% |
response.sendError(404); |
%> |
<div class="container-fluid errorContent"> |
<h3 class="statusWARNING"><bean:message key="error.404"/></h3> |
<p><bean:message key="error.408.explain"/></p> |
17,3 → 18,4 |
<li><%=ConfigProperties.getProperty("admin.email.2")%></li> |
</ul> |
</p> |
</div> |
/branches/v3/impl/src/web/js/baco-widgets.js |
---|
12,7 → 12,7 |
{ |
var data = $(form).serialize().replace(/%0D%0A/g, '%0A').replace(/\r?\n/g, "\r\n"); |
widgetCallWithActionParameters(form.action,serviceName,data,form,handlerOk,handlerFail); |
widgetCallWithActionParameters($(form).attr("action"),serviceName,data,form,handlerOk,handlerFail); |
} |
/** |
25,7 → 25,7 |
*/ |
function widgetCallWithParameters(serviceName,parameters,form,handlerOk,handlerFail) |
{ |
widgetCallWithActionParameters(form.action,serviceName,parameters,form,handlerOk,handlerFail); |
widgetCallWithActionParameters($(form).attr("action"),serviceName,parameters,form,handlerOk,handlerFail); |
} |
/** |
48,6 → 48,11 |
type: "POST", |
data: data, |
dataType: "json", |
statusCode: { |
401:function() { |
$("#modalAuthentication").modal({ show : 'true'}); |
} |
}, |
success: function(resposta) |
{ |
90,7 → 95,7 |
function widgetSimpleCall(serviceName,form,handlerOk,handlerFail){ |
var data = $(form).serialize().replace(/%0D%0A/g, '%0A').replace(/\r?\n/g, "\r\n"); |
widgetSimpleCallWithActionParameters(form.action,serviceName,data,form,handlerOk,handlerFail); |
widgetSimpleCallWithActionParameters($(form).attr("action"),serviceName,data,form,handlerOk,handlerFail); |
} |
/** |
* |
108,6 → 113,12 |
type: "POST", |
data: data, |
dataType: "json", |
statusCode: { |
401:function() { |
$('.modal').modal("hide"); |
$("#modalAuthentication").modal({ show : 'true'}); |
} |
}, |
success: function(resposta) |
{ |
$(webMessagesContainer).find(".web-messages").html(""); |
136,11 → 147,16 |
{ |
$(webMessagesContainer).find(".web-messages").append('<div class="alert alert-success">' + resposta.messages[msg] + '</div>'); |
} |
for(var error in resposta.errors) |
{ |
$(webMessagesContainer).find(".web-messages").append('<div class="alert alert-warning">' + resposta.errors[error] + '</div>'); |
} |
if(handlerOk != undefined) |
handlerOk(); |
} |
}, |
error: function() { |
error: function(resposta) |
{ |
$(webMessagesContainer).find(".web-messages").html('<div class="alert alert-danger">Erro de comunicação, por favor tente novamente</div>'); |
} |
}); |
/branches/v3/impl/src/web/layout/themes/scripts-default.jsp |
---|
741,3 → 741,5 |
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/bpmn/css/bpmn.css" /> |
/branches/v3/impl/src/web/layout/headerTools.jsp |
---|
323,4 → 323,129 |
<jsp:include page="intranetTools/files-upload-form.jsp"/> |
<link rel="stylesheet" href="<%=request.getContextPath()%>/js/angularjs/angular-ui-tree/angular-ui-tree.min.css"> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/angularjs/angular-ui-tree/angular-ui-tree.js"></script> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/angularjs/angular-ui-tree/angular-ui-tree.js"></script> |
<script> |
//COLOCAR WEB-MESSAGES WARNING E ERROR NUMA MODAL DEPOIS DE CARREGAR A PAGINA |
$(document).ready(function() |
{ |
if($(".web-messages-errors-baco").length) |
{ |
$('#errorsBacoModal .content-errors').html($(".web-messages-errors-baco").html()); |
$('#errorsBacoModal').modal({ |
show: 'true' |
}); |
} |
}); |
function modalWebMessages(title) |
{ |
if($(".web-messages").length) |
{ |
$("#modalWebMessages modal-title").html(title); |
$('#modalWebMessages .content-web-messages').html( $(".web-messages").html()); |
$('#modalWebMessages .content-aditional').html( ""); |
$('#modalWebMessages').modal({ |
show: 'true' |
}); |
} |
} |
function modalWebMessages(title,aditionalHtml) |
{ |
if($(".web-messages").length) |
{ |
$("#modalWebMessages .modal-title").html(title); |
$('#modalWebMessages .content-web-messages').html( $(".web-messages").html()); |
$('#modalWebMessages .content-aditional').html( aditionalHtml); |
$('#modalWebMessages').modal({ |
show: 'true' |
}); |
} |
} |
function modalWebMessagesGivenContainer(title,refContainer) |
{ |
if($(refContainer + " .web-messages").length) |
{ |
$("#modalWebMessages .modal-title").html(title); |
$('#modalWebMessages .content-web-messages').html($(refContainer + " .web-messages").html()); |
$('#modalWebMessages .content-aditional').html( ""); |
$('#modalWebMessages').modal({ |
show: 'true' |
}); |
} |
} |
function modalWebMessagesGivenContainer(title,refContainer,targetOkUrl) |
{ |
if($(refContainer + " .web-messages").length) |
{ |
$("#modalWebMessages .modal-title").html(title); |
$('#modalWebMessages .content-web-messages').html($(refContainer + " .web-messages").html()); |
$('#modalWebMessages .content-aditional').html( ""); |
$('#modalWebMessages').modal({ |
show: 'true' |
}); |
$("#modalWebMessages button[data-dismiss='modal']").unbind( "click" ); |
$("#modalWebMessages button[data-dismiss='modal']").click( |
function() |
{ |
window.location.href = targetOkUrl; |
} |
); |
} |
} |
</script> |
<div class="modal fade" id="errorsBacoModal" role="dialog" > |
<div class="modal-dialog" data-width="960" style="display: block; width: 960px; margin-top: 50px;" aria-hidden="false"> |
<!-- Modal content--> |
<div class="modal-content"> |
<div class="modal-header"> |
<h1 class="modal-title">Existem Avisos</h1> |
</div> |
<div class="modal-body"> |
<div class="panel panel-default"> |
<div class="panel-body content-errors" > |
</div> |
</div> |
<button type="button" class="btn btn-default" data-dismiss="modal">Entendi</button> |
</div> |
</div> |
</div> |
</div> |
<div class="modal fade" id="modalWebMessages" role="dialog" > |
<div class="modal-dialog" data-width="960" style="display: block; width: 960px; margin-top: 50px;" aria-hidden="false"> |
<!-- Modal content--> |
<div class="modal-content"> |
<div class="modal-header"> |
<h1 class="modal-title"></h1> |
</div> |
<div class="modal-body"> |
<div class="panel panel-default"> |
<div class="panel-body content-web-messages" > |
</div> |
</div> |
<div class="content-aditional" > |
</div> |
<button type="button" class="btn btn-default" data-dismiss="modal">Entendi</button> |
</div> |
</div> |
</div> |
</div> |
<jsp:include page="/auth/loginWidget.jsp"/> |
/branches/v3/impl/src/web/user/courses/studiesPlansAdministrationEdit.jsp |
---|
63,6 → 63,7 |
request.setAttribute("courseId",courseId); |
request.setAttribute("studyPlanId",studyPlanId); |
request.setAttribute("course",course); |
request.setAttribute("courseSigesCode",course.getCode()); |
175,6 → 176,64 |
</div> |
</div> |
<script> |
function createFichasUrls() |
{ |
$("[data-unit-ficha-url-target-id]").each( |
function() |
{ |
var targetId = $(this).attr("data-unit-ficha-url-target-id"); |
var sigesUnit = $(this).attr("data-unit-siges-code"); |
var sigesCourse = $(this).attr("data-course-siges-code"); |
var unitSemestre = $(this).attr("data-unit-semestre"); |
var sigesUrlInput = $("#" + targetId); |
var urlPattern = $("#urlPadraoFicha").val(); |
var targetsType = $("#urlPadraoFichaAlvo option:selected").val(); |
if(targetsType == "all" || sigesUrlInput.val() == "") |
{ |
urlPattern = urlPattern.replace("{SIGES_CURSO}",'${courseSigesCode}'); |
urlPattern = urlPattern.replace("{SIGES_UNIT}",sigesUnit); |
urlPattern = urlPattern.replace("{UNIT_SEMESTRE}",unitSemestre); |
$("#" + targetId).val(urlPattern); |
} |
} |
); |
alert("URLS gerados com Sucesso, Necessita de SALVAR o Plano."); |
} |
</script> |
<div class="panel panel-warning"> |
<div class="panel-heading"><span class="glyphicon glyphicon-wrench"></span> Ferramenta Auxiliar de Auto-Preenchimento de URL's de Fichas</div> |
<div class="panel-body"> |
<div class="form-group"> |
<label class="control-label col-sm-2">URL Padrão</label> |
<div class="col-sm-10"> |
<p>exemplo para a ESTG: http://www.estgp.pt/startLoadCourseUnitProgramSiges.do?unitCode={SIGES_UNIT}&courseCode={SIGES_CURSO}&semestre={UNIT_SEMESTRE}</p> |
<p>Nenhum dos campos é obrigatório, o sistema substitui se existir no padrão, Na estg o Semestre é obrigatório para diferenciar unidades que são lecionadas em ambos os semestres</p> |
<p>O semestre presente neste sistema e que vai ser preenchido vai de S1 a S6 e de T1 a T8 ou A, portanto se o semestre for usado à que ter isto em atenção</p> |
<input type="text" class="form-control" id="urlPadraoFicha" placeholder="http://exemplo.com/exemplo/{SIGES_CURSO}/{SEMESTRE}/{SIGES_UNIT}.pdf"> |
</div> |
</div> |
<div class="form-group"> |
<label class="control-label col-sm-2">Alvos</label> |
<div class="col-sm-10"> |
<select id="urlPadraoFichaAlvo"> |
<option value="all">Todos</option> |
<option value="onlyEmpty">Apenas Vazios</option> |
</select> |
</div> |
</div> |
<button class="btn btn-warning" type="button" data-toggle="modal" onclick="createFichasUrls()"> |
Gerar URL's de Fichas |
</button> |
</div> |
</div> |
<% |
CourseStudiesPlansAdminForm courseStudiesPlansAdminForm = (CourseStudiesPlansAdminForm) request.getAttribute("CourseStudiesPlansAdminForm"); |
//Form ainda não iniciado vai iniciar é a primeira vez |
677,7 → 736,9 |
<td><nested:text styleClass="form-control" styleId="horasContactoO${dummyIndexIdUnidades}" property="horasContacto.o"/></td> |
<td><nested:text styleClass="form-control" styleId="ECTS${dummyIndexIdUnidades}" property="ECTS"/></td> |
<td><nested:text styleClass="form-control" styleId="urlUnidadeCurricular${dummyIndexIdUnidades}" style="width:600px" property="urlUnidadeCurricular"/></td> |
<td><nested:text styleClass="form-control" styleId="urlFichaCurricular${dummyIndexIdUnidades}" style="width:600px" property="urlFichaCurricular"/></td> |
<td data-unit-semestre="${semestre.id}" data-course-siges-code="${courseSigesCode}" data-unit-siges-code="${unit.siges}" data-unit-ficha-url-target-id="urlFichaCurricular${dummyIndexIdUnidades}" data-unit-site-url-target-id="urlUnidadeCurricular${dummyIndexIdUnidades}"> |
<nested:text styleClass="form-control" styleId="urlFichaCurricular${dummyIndexIdUnidades}" style="width:600px" property="urlFichaCurricular"/> |
</td> |
</tr> |
</nested:iterate> |
</tbody> |
822,7 → 883,9 |
<td><nested:text styleClass="form-control" styleId="horasContactoO${dummyIndexIdUnidades}" property="horasContacto.o"/></td> |
<td><nested:text styleClass="form-control" styleId="ECTS${dummyIndexIdUnidades}" property="ECTS"/></td> |
<td><nested:text styleClass="form-control" styleId="urlUnidadeCurricular${dummyIndexIdUnidades}" style="width:600px" property="urlUnidadeCurricular"/></td> |
<td><nested:text styleClass="form-control" styleId="urlFichaCurricular${dummyIndexIdUnidades}" style="width:600px" property="urlFichaCurricular"/></td> |
<td data-unit-semestre="${semestre.id}" data-course-siges-code="${courseSigesCode}" data-unit-siges-code="${unit.siges}" data-unit-ficha-url-target-id="urlFichaCurricular${dummyIndexIdUnidades}" data-unit-site-url-target-id="urlUnidadeCurricular${dummyIndexIdUnidades}"> |
<nested:text styleClass="form-control" styleId="urlFichaCurricular${dummyIndexIdUnidades}" style="width:600px" property="urlFichaCurricular"/> |
</td> |
</tr> |
</nested:iterate> |
</tbody> |
/branches/v3/impl/src/web/user/courseunits/courseunitEvaluation.jsp |
---|
370,6 → 370,7 |
<html:errors/> |
<jomm:messages/> |
<baco:notClearOperation name="CourseUnitView" property="courseUnit" op="EVALUATION_INFO_ACTIVE"> |
<div class="alert alert-info"> |
<bean:message key="courseunit.evaluation.period.inactive"/> |
471,13 → 472,16 |
<html:form styleId="formEval" styleClass="form-horizontal" action="/user/courseUnitEvaluationController"> |
<html:form styleId="formEval" styleClass="form-horizontal" action="/user/courseUnitEvaluationControllerWidget"> |
<input type="hidden" id="dispatch" name="dispatch" value="saveEvaluation"> |
<html:hidden property="id"/> |
<html:hidden property="courseUnitView.id"/> |
<input type="hidden" name="autosave" value="true"/> |
<div class="web-messages"></div> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
Dados alterados pelo Docente da Unidade |
631,15 → 635,15 |
</table> |
<baco:clearOperation name="CourseUnitView" property="courseUnit" op="EVALUATION_EDITSAVE"> |
<button type="button" class="btn btn-default" onclick="set(form,'saveEvaluation');submitFormWaitAutoSave(form);"><bean:message key="save"/></button> |
<button type="button" class="btn btn-default" onclick="submitFormWaitAutoSave(form,'saveEvaluation');"><bean:message key="save"/></button> |
</baco:clearOperation> |
<baco:clearOperation name="CourseUnitView" property="courseUnit" op="EVALUATION_TRANSITATE_TO_COMPLETE"> |
<button type="button" id="buttonTeacherCompleteEvaluation" class="btn btn-default" onclick="set(form,'teacherCompleteEvaluation');submitFormWaitAutoSave(form);"><bean:message key="courseunit.evaluation.transit.to.complete"/></button> |
<button type="button" id="buttonTeacherCompleteEvaluation" class="btn btn-default" onclick="submitFormWaitAutoSave(form,'teacherCompleteEvaluation');"><bean:message key="courseunit.evaluation.transit.to.complete"/></button> |
</baco:clearOperation> |
<baco:clearOperation name="CourseUnitView" property="courseUnit" op="EVALUATION_TRANSITATE_TO_CLOSE"> |
<button type="button" id="buttonPublishEvaluation" class="btn btn-default" onclick="set(form,'publishEvaluation');submitFormWaitAutoSave(form);"><bean:message key="courseunit.evaluation.transit.to.closed"/></button> |
<button type="button" id="buttonPublishEvaluation" class="btn btn-default" onclick="submitFormWaitAutoSave(form,'publishEvaluation');"><bean:message key="courseunit.evaluation.transit.to.closed"/></button> |
</baco:clearOperation> |
684,21 → 688,7 |
</div> |
<script> |
function submitFormWaitAutoSave() |
{ |
stopAutoSave = true; |
$('#myModal').modal({ |
show: 'true' |
}); |
//esperar se houver algum update a executar 1500 segundos é o maximo de espera |
//se a pagina não recarregar e porque a thread parou |
setTimeout("submitForm()",40000); |
} |
function submitForm() |
{ |
$("#formEdit").submit(); |
} |
$( document ).ready(function() { |
717,46 → 707,77 |
</baco:notClearOperation> |
<baco:clearOperation name="CourseUnitView" property="courseUnit" op="EVALUATION_EDITSAVE"> |
setTimeout("serData()",5000); |
setTimeout("autoSaveStart()",5000); |
</baco:clearOperation> |
}); |
var stopAutoSave = false; |
function autoSaveStart() |
{ |
if(!stopAutoSave) |
sendEvaluation(true,"saveEvaluation"); |
function serData() |
} |
function submitFormWaitAutoSave(form,service) |
{ |
if(stopAutoSave) |
stopAutoSave = true; |
$('#myModal').modal({ |
show: 'true' |
}); |
//esperar se houver algum update a executar 1500 segundos é o maximo de espera |
//se a pagina não recarregar e porque a thread parou |
setTimeout("submitForm('" + service + "')",2000); |
} |
function submitForm(service) |
{ |
//Para Submeter sem o JSON = true |
sendEvaluation(false,service); |
} |
function sendEvaluation(autosave,service) |
{ |
if(autosave) |
{ |
$("#formEval").submit(); |
return; |
$("#dispatch").val("saveEvaluation"); |
$("#autosave").html('<div class="alert alert-info">Enviando ...</div>'); |
$("#formEval input[name='autosave']").val("true"); |
} |
else |
{ |
$("#dispatch").val("saveEvaluation"); |
var data = $("#formEval").serialize().replace(/%0D%0A/g, '%0A').replace(/\r?\n/g, "\r\n"); |
//alert(data); |
$("#formEval input[name='autosave']").val("false"); |
//alert($("#dispatch").val()) |
$("#autosave").html('<div class="alert alert-info">Enviando ...</div>'); |
$.ajax({ |
url: "<%=request.getContextPath()%>/user/courseUnitEvaluationController.do", |
type: "POST", |
data: data + "&json=true", |
dataType: "json", |
success: function(resposta) { |
if(resposta.service && resposta.service == "ok") |
widgetSimpleCall( |
service, |
$("#formEval"), |
function() |
{ |
$('#myModal').modal("hide"); |
//ok |
if(autosave) |
{ |
$("#autosave").html('<div class="alert alert-success">Salvo Automaticamente (Apenas Dados, não gerou PDF, para gerar PDF terá de salvar o docente)</div>'); |
} |
else |
$("#autosave").html('<div class="alert alert-warning">Deve salvar o seu relatório periodicamente</div>'); |
setTimeout("serData()",5000); |
{ |
modalWebMessagesGivenContainer("Avaliação Salva","#formEval","<%=request.getContextPath()%>/user/startLoadCourseUnitEvaluation.do?courseUnitId=${CourseUnitView.id}"); |
} |
}, |
error: function() { |
$("#autosave").html('<div class="alert alert-danger">Erro de comunicação, tentando novamente em 5 segundos</div>'); |
setTimeout("serData()",5000); |
function() |
{ |
$('#myModal').modal("hide"); |
modalWebMessagesGivenContainer("Avaliação Salva","#formEval"); |
} |
}); |
} |
); |
} |
</script> |
/branches/v3/impl/src/web/user/courseunits/courseunitProgram.jsp |
---|
27,7 → 27,10 |
<html:errors/> |
<jomm:messages/> |
<div class="web-messages"> |
</div> |
<baco:clearOperation name="CourseUnitView" property="courseUnit" op="PROGRAM_INFO_VALID_NOT_ACTIVE"> |
<div class="alert alert-warning"> |
O programa não está aberto para edição. A comissão de curso terá de invalidar o programa para que este possa ser alterado. |
413,18 → 416,104 |
<baco:clearOperation name="CourseUnitView" property="courseUnit" op="PROGRAM_TEACHER_PART,PROGRAM_COORDINATOR_PART"> |
<button class="btn btn-success" type="button" onclick="set(form,'saveProgram');form.submit()"><bean:message key="save"/></button> |
<button id="saveButton" class="btn btn-success" type="button" onclick="saveData('saveProgram');"><bean:message key="save"/></button> |
</baco:clearOperation> |
<baco:clearOperation name="CourseUnitView" property="courseUnit" op="PROGRAM_CAN_VALIDATE"> |
<logic:equal name="CourseUnitView" property="validProgram" value="false"> |
<button class="btn btn-success" type="button" onclick="set(form,'validateProgram');form.submit()">Salvar e Validar</button> |
<button id="validateButton" class="btn btn-success" type="button" onclick="saveData('validateProgram');">Salvar e Validar</button> |
</logic:equal> |
</baco:clearOperation> |
<a id="exitButton" class="hidden btn btn-danger" href="<%=request.getContextPath()%>/user/startLoadCourseUnitFromHome.do?courseUnitView.id=${CourseUnitView.id}&pos=2" class="btn btn-danger" type="button" >Sair</a> |
</html:form> |
</div><!--Panel body--> |
</div><!--Panel--> |
</div><!--Panel--> |
<script> |
function saveData(action) |
{ |
$("#ProgramForm input[name='dispatch']").val(action); |
var data = $("#ProgramForm").serialize().replace(/%0D%0A/g, '%0A').replace(/\r?\n/g, "\r\n"); |
//alert(data); |
//alert($("#dispatch").val()) |
$(".web-messages").html('<div class="alert alert-info">Enviando ...</div>'); |
$.ajax({ |
url: "<%=request.getContextPath()%>/user/courseUnitProgramController.do", |
type: "POST", |
data: data + "&json=true", |
dataType: "json", |
statusCode: { |
401:function() { |
$("#modalAuthentication").modal({ show : 'true'}); |
} |
}, |
success: function(resposta) { |
if(resposta.service && resposta.service == "ok") |
{ |
$(".web-messages").html('<div class="alert alert-success">Programa Salvo com Sucesso, pode rever o seu trabalho ou Sair</div>'); |
modalWebMessages(""); |
$("#exitButton").removeClass("hidden"); |
$("#saveButton").hide(); |
if(action == "validateProgram") |
{ |
$("#validateButton").hide(); |
} |
} |
else |
{ |
if($(resposta.responseText).find(".web-messages").length) |
{ |
$(".web-messages").html($(resposta.responseText).find(".web-messages").html()); |
modalWebMessages("Aviso"); |
} |
else |
{ |
if($(resposta.responseText).find(".errorContent").length) |
{ |
$(".web-messages").html('<div class="alert alert-danger">Erro de comunicação, por favor aguarde uns minutos tente novamente, se não conseguir copie manualmente os seus dados para um documento para não perder o seu trabalho e contacte a administração de sistemas</div>'); |
modalWebMessages("Existem Erros",$(resposta.responseText).find(".errorContent").html()); |
} |
else |
{ |
$(".web-messages").html('<div class="alert alert-danger">Erro de comunicação, por favor aguarde uns minutos e tente novamente, se não conseguir copie manualmente os seus dados para um documento para não perder o seu trabalho e contacte a administração de sistemas</div>'); |
modalWebMessages("Aviso"); |
} |
} |
} |
}, |
error: function(resposta, b, errorThrown) |
{ |
if(resposta.status != 401) |
{ |
if($(resposta.responseText).find(".errorContent").length) |
{ |
$(".web-messages").html('<div class="alert alert-danger">Erro de comunicação, por favor aguarde uns minutos e tente novamente, se não conseguir copie manualmente os seus dados para um documento para não perder o seu trabalho e contacte a administração de sistemas</div>'); |
modalWebMessages("Existem Erros",$(resposta.responseText).find(".errorContent").html()); |
} |
else |
{ |
$(".web-messages").html('<div class="alert alert-danger">Erro de comunicação, por favor aguarde uns minutos e tente novamente, se não conseguir copie manualmente os seus dados para um documento para não perder o seu trabalho e contacte a administração de sistemas</div>'); |
modalWebMessages("Aviso"); |
} |
} |
} |
}); |
} |
</script> |
/branches/v3/impl/src/web/user/home/panels/institutionTools.jsp |
---|
16,9 → 16,10 |
</div> |
<div class="list-group"> |
<baco:hasRole role="admin,all,repositoryDocs"> |
<div class="list-group-item"><html:link action="/user/editRepositoryDoc"><bean:message key="repositorydoc"/></html:link></div> |
<div class="list-group-item"><html:link action="/user/editRepositoryCol"><bean:message key="repositorycol"/></html:link></div> |
<div class="list-group-item"><html:link action="/user/collectionsBrowser"><bean:message key="repositorycolbrowser"/></html:link></div> |
<div class="list-group-item"><html:link action="/user/repositoryEditDocument"><bean:message key="repositorydoc"/></html:link></div> |
<div class="list-group-item"><html:link action="/user/repositoryEditCollections"><bean:message key="repositorycol"/></html:link></div> |
<div class="list-group-item"><html:link action="/user/repositoryBrowseCollections"><bean:message key="repositorycolbrowser"/></html:link></div> |
<div class="list-group-item"><html:link action="/user/repositoryEditInterface"><bean:message key="repositoryinterface"/></html:link></div> |
</baco:hasRole> |
</div> |
</div> |
/branches/v3/impl/src/web/user/repositoryDocuments/topnavRepositoryInterface.jsp |
---|
New file |
0,0 → 1,11 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/homePae.do", "intranet.separator.home.back"); |
topNav.addNavPlace(null, "repositoryinterface"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
/branches/v3/impl/src/web/user/repositoryDocuments/repositoryDocument.jsp |
---|
7,6 → 7,8 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib prefix="bacoTags" tagdir="/WEB-INF/tags" %> |
<%@ taglib prefix="logic" uri="/WEB-INF/tlds/struts-logic.tld" %> |
<%@ taglib prefix="html" uri="/WEB-INF/tlds/struts-html.tld" %> |
<%@ taglib prefix="bean" uri="/WEB-INF/tlds/struts-bean.tld" %> |
<div class="container-fluid"> |
198,13 → 200,13 |
<button class="btn btn-default btn-lg btn-block btn-huge" ng-click="backEdit()"><span class="glyphicon glyphicon-chevron-left"></span> Voltar à edição</button> |
</div> |
<div class="col-md-4"> |
<a class="btn btn-success btn-lg btn-block btn-huge" href="<%=request.getContextPath()%>/user/editRepositoryDoc.do">Adicionar outro documento <span class="glyphicon glyphicon-chevron-right"></span></a> |
<html:link styleClass="btn btn-success btn-lg btn-block btn-huge" action="/user/repositoryEditDocument">Adicionar outro documento <span class="glyphicon glyphicon-chevron-right"></span></html:link> |
</div> |
</div> |
<hr/> |
<div class="row"> |
<div class="col-md-4"> |
<a class="btn btn-danger btn-lg btn-block btn-huge" href="<%=request.getContextPath()%>/user/homePae.do">Sair</a> |
<html:link styleClass="btn btn-danger btn-lg btn-block btn-huge" action="/user/homePae">Sair</html:link> |
</div> |
</div> |
513,5 → 515,4 |
<% |
AbstractDao.getCurrentSession().getTransaction().commit(); |
%> |
</div> |
</div> |
/branches/v3/impl/src/web/user/repositoryDocuments/collectionsInterface.jsp |
---|
3,7 → 3,7 |
<%@ page import="org.hibernate.criterion.Criterion" %> |
<%@ page import="pt.estgp.estgweb.domain.RepositoryDocument" %> |
<%@ page import="pt.estgp.estgweb.web.controllers.repositorydocs.interfaces.InterfaceBlock" %> |
<%@ page import="pt.estgp.estgweb.web.controllers.repositorydocs.interfaces.InterfaceConfiguration" %> |
<%@ page import="pt.estgp.estgweb.web.controllers.repositorydocs.interfaces.InterfaceRow" %> |
<%@ page import="java.util.List" %> |
<%@ page import="static org.hibernate.criterion.Restrictions.eq" %> |
<%@ page import="static org.hibernate.criterion.Restrictions.or" %> |
18,27 → 18,8 |
<% |
String configuration = request.getParameter("configuration"); |
InterfaceConfiguration interfaceConfiguration = new InterfaceConfiguration(); |
interfaceConfiguration.setTitle("Regulamentação Interna"); |
interfaceConfiguration.setDescription("Descrição Geral"); |
InterfaceBlock interfaceBlock1 = new InterfaceBlock(); |
InterfaceBlock interfaceBlock2 = new InterfaceBlock(); |
interfaceConfiguration.getBlocks().add(interfaceBlock1); |
interfaceConfiguration.getBlocks().add(interfaceBlock2); |
interfaceBlock1.setTitle("bloco1"); |
interfaceBlock2.setTitle("bloco2"); |
interfaceBlock1.setDescription("bloco1desc"); |
interfaceBlock2.setDescription("bloco1desc"); |
interfaceBlock1.getCollectionId().add(new Long(1)); |
interfaceBlock1.getCollectionId().add(new Long(2)); |
interfaceBlock2.getCollectionId().add(new Long(3)); |
interfaceBlock2.getCollectionId().add(new Long(4)); |
InterfaceConfiguration loadedConfig = InterfaceConfiguration.loadFromJson(interfaceConfiguration.toJson()); |
int columns = 12 / interfaceConfiguration.getBlocks().size(); |
request.setAttribute("loadedConfig",loadedConfig); |
request.setAttribute("columns","" + columns); |
AbstractDao.getCurrentSession().beginTransaction(); |
/branches/v3/impl/src/web/user/repositoryDocuments/repositoryInterface.jsp |
---|
New file |
0,0 → 1,328 |
<%@ 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 tagdir="/WEB-INF/tags" prefix="bacoTags" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<style> |
.bg-red{ |
background-color: red !important; |
color: #600000 !important; |
padding: 10px; |
} |
.bg-green{ |
background-color: green !important; |
color: #00ff00 !important; |
} |
table tr td |
{ |
background-color: red !important; |
} |
</style> |
<div class="container-fluid"> |
<div id="treeAppPageContent" ng-app="treeAppPageContent" ng-controller="treeAppPageContentController"> |
<script> |
ping(); |
var treeAppPageContent = angular.module('treeAppPageContent', ['ui.tree']); |
GLOBAL_BacoAngularAppDependencies.push('treeAppPageContent'); |
<!-- estes codigos todos do remove e do toggle e etc's não mechi em nada limitei-me a copiar dos gajos--> |
treeAppPageContent.controller('treeAppPageContentController', function ($scope) { |
$scope.data = { |
"showTitle" : true, |
"showDescription" : false |
}; |
/* |
$scope.data = [ |
{ |
"id" : 1, |
"name" : "Nao deixa fazer drag", |
"nodrag" : true, |
"isDirectory" : true |
}, |
{ |
"id" : 2, |
"name" : "Nao deixa fazer drop", |
"nodrop" : true, |
"isDirectory" : true |
}, |
{ |
"id" : 3, |
"name" : "Deixa fazer Tudo", |
"isDirectory" : true |
}, |
{ |
"id" : 4, |
"name" : "Deixa fazer Tudo e ja foi movido", |
"moved" : true, |
"isDirectory" : true |
}, |
{ |
"id" : 5, |
"name" : "Exemplo de folha nao deixa abrir", |
"isDirectory" : false |
} |
];*/ |
$scope.treeOptions = { |
accept: function(sourceNodeScope, destNodesScope, destIndex) { |
if(sourceNodeScope.$modelValue.type == destNodesScope.$modeValue.type) |
return true; |
return false; |
}, |
dropped: function(e) { |
//console.log (e.source.nodeScope.$modelValue); |
//alert ("Largado o nó com nome: " + e.source.nodeScope.$modelValue.name + " sobre " + e.dest.nodesScope.$parent.$modelValue.name); |
} |
}; |
$scope.addRow = function(container) |
{ |
if(!container.rows) |
{ |
container.rows = []; |
} |
container.rows.push( |
{ |
"showTitle" : true, |
"showDescription" : false, |
"type" : "row" |
} |
); |
} |
$scope.addColumn = function(row) |
{ |
if(!row.columns) |
{ |
row.columns = []; |
} |
row.columns.push( |
{ |
"showTitle" : true, |
"showDescription" : false, |
"cols" : 6, |
"type" : "column" |
} |
); |
} |
$scope.getColStyle = function(column) |
{ |
return "col-md-" + column.cols; |
} |
} |
); |
</script> |
<div class="panel panel-primary"> |
<div class="panel-heading clearfix"> |
Criação de Interface para o Repositório Digital |
</div> |
<div class="panel-body"> |
<div class="web-messages"></div> |
<div class="form-horizontal"> |
<div class="form-group"> |
<label class="col-md-1 control-label">ID</label> |
<div class="col-md-11"> |
<input disabled type="text" class="form-control" ng-model="data.id"/> |
</div> |
</div> |
<div class="form-group"> |
<label class="col-md-1 control-label">Título</label> |
<div class="col-md-9"> |
<input type="text" class="form-control" ng-model="data.title"/> |
</div> |
<div class="col-md-2"> |
<select ng-class="{'bg-red': data.showTitle == false, 'bg-green': data.showTitle == true}" class="form-control chosenOff" type="text" ng-model="data.showTitle" ng-options="o.v as o.n for o in [{ n: 'Mostrar', v: true }, { n: 'Não Mostrar', v: false }]">> |
</select> |
</div> |
</div> |
<div class="form-group"> |
<label class="col-md-1 control-label">Descrição</label> |
<div class="col-md-9"> |
<textarea rows="3" class="form-control" ng-model="data.description"> |
</textarea> |
</div> |
<div class="col-md-2" > |
<select ng-class="{'bg-red': data.showDescription == false, 'bg-green': data.showDescription == true}" class="form-control chosenOff" type="text" ng-model="data.showDescription" ng-options="o.v as o.n for o in [{ n: 'Mostrar', v: true }, { n: 'Não Mostrar', v: false }]">> |
</select> |
</div> |
</div> |
<div class="panel panel-default"> |
<div class="panel-heading">Linhas <button ng-click="addRow(data)" class="btn btn-default pull-right"><span class="glyphicon glyphicon-plus"></span> Linha</button></div> |
<div class="panel-body" ui-tree="treeOptions" id="page-content-root"> |
<div ui-tree-nodes ng-model="data.rows"> |
<div ng-repeat="row in data.rows" ui-tree-node ng-include="'rows_renderer.html'"></div> |
</div> |
</div> |
</div> |
</div> |
<pre class="code">{{ data | json }}</pre> |
</div> |
</div> |
</div> |
</div> |
<!--TEMPLATE RECURSIVO--> |
<script type="text/ng-template" id="rows_renderer.html"> |
<!--Para nao deixar fazer drag--> |
<div class="row tree-node tree-node-content clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved}"> |
<div class="panel panel-primary"> |
<div class="panel-heading"> <i class="glyphicon glyphicon-resize-vertical" ui-tree-handle></i> Linha {{$index + 1}} </div> |
<div class="panel-body"> |
<div class="form-group"> |
<label class="col-md-1 control-label">Título</label> |
<div class="col-md-9"> |
<input type="text" class="form-control" ng-model="row.title"/> |
</div> |
<div class="col-md-2"> |
<select ng-class="{'bg-red': row.showTitle == false, 'bg-green': row.showTitle == true}" class="form-control chosenOff" type="text" ng-model="row.showTitle" ng-options="o.v as o.n for o in [{ n: 'Mostrar', v: true }, { n: 'Não Mostrar', v: false }]">> |
</select> |
</div> |
</div> |
<div class="form-group"> |
<label class="col-md-1 control-label">Descrição</label> |
<div class="col-md-9"> |
<textarea rows="3" class="form-control" ng-model="row.description"> |
</textarea> |
</div> |
<div class="col-md-2"> |
<select ng-class="{'bg-red': row.showDescription == false, 'bg-green': row.showDescription == true}" class="form-control chosenOff" type="text" ng-model="row.showDescription" ng-options="o.v as o.n for o in [{ n: 'Mostrar', v: true }, { n: 'Não Mostrar', v: false }]">> |
</select> |
</div> |
</div> |
<div class="col-md-12" style="padding: 10px"> |
<div class="panel panel-info"> |
<div class="panel-heading clearfix"> |
Colunas |
<button ng-click="addColumn(row)" class="btn btn-default pull-right"><span class="glyphicon glyphicon-plus"></span> Coluna</button> |
</div> |
<div class="panel-body"> |
<div class="row" ui-tree-nodes="" ng-model="row.columns"> |
<div ng-class="getColStyle(column)" ng-repeat="column in row.columns" ui-tree-node ng-include="'columns_renderer.html'"> |
</div> |
</div> |
</div> |
</div> |
</div> |
</div> |
</div> |
</div> |
</script> |
<!--TEMPLATE RECURSIVO--> |
<script type="text/ng-template" id="columns_renderer.html"> |
<!--Para nao deixar fazer drag--> |
<div class="clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved}"> |
<div class="panel panel-primary"> |
<div class="panel-heading clearfix"> |
<i class="glyphicon glyphicon-resize-vertical" ui-tree-handle></i> |
Coluna {{$index + 1}} |
<select class="pull-right chosenOff" |
style="color:black" |
ng-model="column.cols" |
ng-options="o.v as o.n for o in [{ n: '1', v: 1 },{ n: '2', v: 2 },{ n: '3', v: 3 }, { n: '4', v: 4 }, { n: '5', v: 5 }, { n: '6', v: 6 }, { n: '7', v: 7 }, { n: '8', v: 8 }, { n: '9', v: 9 }, { n: '10', v: 10 }, { n: '11', v: 11 }, { n: '12', v: 12 }]"> |
</select> |
</div> |
<div class="panel-body"> |
<div class="form-group"> |
<label class="col-md-3 control-label">Título</label> |
<div class="col-md-7"> |
<input type="text" class="form-control" ng-model="column.title"/> |
</div> |
<div class="col-md-2"> |
<select ng-class="{'bg-red': column.showTitle == false, 'bg-green': column.showTitle == true}" class="form-control chosenOff" ng-model="column.showTitle" ng-options="o.v as o.n for o in [{ n: 'Mostrar', v: true }, { n: 'Não Mostrar', v: false }]"> |
</select> |
</div> |
</div> |
<div class="form-group"> |
<label class="col-md-3 control-label">Descrição</label> |
<div class="col-md-7"> |
<textarea rows="3" class="form-control" ng-model="column.description"> |
</textarea> |
</div> |
<div class="col-md-2"> |
<select ng-class="{'bg-red': column.showDescription == false, 'bg-green': column.showDescription == true}" class="form-control chosenOff" ng-model="column.showDescription" ng-options="o.v as o.n for o in [{ n: 'Mostrar', v: true }, { n: 'Não Mostrar', v: false }]"> |
</select> |
</div> |
</div> |
<div class="col-md-12" style="padding: 10px"> |
<div class="panel panel-info"> |
<div class="panel-heading">Blocos</div> |
<div class="panel-body"> |
<div ui-tree-nodes="" ng-model="column.blocks"> |
<div ng-repeat="block in column.blocks" ui-tree-node ng-include="'blocks_renderer.html'"> |
</div> |
</div> |
</div> |
</div> |
</div> |
</div> |
</div> |
</div> |
<!-- |
<ol data-nodrag ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node" ng-class="{hidden: collapsed }"> |
<li ng-repeat="node in node.childs" ui-tree-node ng-include="'childs_renderer.html'"> |
</li> |
<li ng-repeat="node in node.documents" ui-tree-node ng-include="'documents_renderer.html'"> |
</li> |
</ol> |
--> |
</script> |
/branches/v3/impl/src/web/user/repositoryDocuments/collectionsbrowser.jsp |
---|
63,9 → 63,9 |
color: #7c9eb2; |
} |
.tree-node-document { |
border: 1px solid #9fea91; |
background: #e8ffdb; |
color: #0cb229; |
border: 1px solid #000000; |
background: #ffffff; |
color: #000000; |
} |
.tree-node-file { |
border: 1px solid #e8ea99; |
135,6 → 135,8 |
$scope.data = ${collectionsJson}; |
$scope.onlyVisibles = false; |
/* |
$scope.data = [ |
{ |
242,6 → 244,29 |
collapseElement.collapse("show"); |
} |
} |
$scope.hideNode = function(node) |
{ |
if(!node.visible && $scope.onlyVisibles) |
return true; |
return false; |
} |
//COPIADAS DO ficheiro repositoryDocument.jsp |
$scope.setDocumentFileInvisible = function(docFile) |
{ |
docFile.visible=false; |
docFile.repositoryFileProxy.repositoryFile.accessControl ="resource.access.privateDomain"; |
} |
$scope.setDocumentFileVisible = function(docFile) |
{ |
docFile.visible=true; |
alert("As permissões do ficheiro serão definidas como privadas, por favor escolha as permissões novas."); |
docFile.repositoryFileProxy.repositoryFile.accessControl ="resource.access.privateDomain"; |
} |
} |
); |
250,9 → 275,12 |
<!--TEMPLATE RECURSIVO--> |
<script type="text/ng-template" id="childs_renderer.html"> |
<!--Para nao deixar fazer drag--> |
<div data-nodrag class="tree-node tree-node-content clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved, bacoInvisible: !node.visible}"> |
<div data-nodrag class="tree-node tree-node-content clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved, bacoInvisible: !node.visible, hidden: hideNode(node)}"> |
<div class="col-md-1"> |
<a class="btn btn-xs" ng-class="{ |
'btn-default': !node.open, |
'btn-success': node.open, |
268,44 → 296,63 |
}"> |
</span> |
</a> |
</div> |
{{node.name}} |
<span style="margin-right: 5px" class="glyphicon " |
ng-class="{ |
'glyphicon-folder-close': !node.open, |
'glyphicon-folder-open': node.open, |
}" |
></span> |
<label data-toggle="tooltip" title="Esta colecção está oculta!" ng-show="node.visible == false"> |
<span class="glyphicon glyphicon-ban-circle"/> |
</label> |
{{node.name}} |
</div> |
<ol data-nodrag ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node.childs" ng-class="{hidden: collapsed }"> |
<ol data-nodrag ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node" ng-class="{hidden: collapsed }"> |
<li ng-repeat="node in node.childs" ui-tree-node ng-include="'childs_renderer.html'"> |
</li> |
</ol> |
<ol data-nodrag ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node.documents" ng-class="{hidden: collapsed"> |
<li ng-repeat="node in node.documents" ui-tree-node ng-include="'documents_renderer.html'"> |
</li> |
</ol> |
</script> |
<!--TEMPLATE RECURSIVO--> |
<script type="text/ng-template" id="documents_renderer.html"> |
<!--Para nao deixar fazer drag--> |
<div data-nodrag class="tree-node tree-node-document tree-node-content clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved, bacoInvisible: !node.visible}"> |
<div data-nodrag class="tree-node tree-node-document tree-node-content clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved, bacoInvisible: !node.visible, hidden: hideNode(node)}"> |
<a class="btn btn-xs" ng-class="{ |
'btn-default': !node.open, |
'btn-success': node.open, |
}" |
data-nodrag data-toggle="collapse" ng-click="openDocumentsItem(node)"> |
<span |
class="glyphicon" |
ng-class="{ |
<a class="btn btn-xs" ng-class="{ |
'btn-default': !node.open, |
'btn-success': node.open, |
}" |
data-nodrag data-toggle="collapse" ng-click="openDocumentsItem(node)"> |
<span |
class="glyphicon" |
ng-class="{ |
'glyphicon-chevron-right': !node.open, |
'glyphicon-chevron-down': node.open |
'glyphicon-chevron-right': !node.open, |
'glyphicon-chevron-down': node.open |
}"> |
</span> |
</a> |
}"> |
</span> |
</a> |
<label data-toggle="tooltip" title="Este documento está oculto!" ng-show="node.visible == false"> |
<span class="glyphicon glyphicon-ban-circle"/> |
</label> |
<span class="glyphicon glyphicon-file"></span> {{node.title}} |
<baco:hasRole role="admin,all,repositoryDocs"> |
316,45 → 363,78 |
</div> |
<div id="repositoryFiles{{node.id}}" class="collapse"> |
<ol data-nodrag ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node" ng-class="{hidden: collapsed }"> |
<li > |
<div data-nodrag class="tree-node tree-node-description tree-node-content clearfix"> |
<div ng-if="node.description"> |
<div class="col-md-2" style="text-align: right"> |
<span class="glyphicon glyphicon-tag"></span> |
<span class="label label-primary">Descrição:</span> |
</div> |
<div class="col-md-10" style="border: 1px dashed black"> |
{{node.description}} |
</div> |
</div> |
<div ng-if="node.internalIdentifier"> |
<div class="col-md-2" style="text-align: right"> |
<span class="glyphicon glyphicon-tag"></span> |
<span class="label label-primary">ID INTERNO:</span> |
</div> |
<div class="col-md-10" style="border: 1px dashed black"> |
{{node.internalIdentifier}} |
</div> |
</div> |
<ol data-nodrag ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node.repositoryDocumentFiles" ng-class="{hidden: collapsed }"> |
<li ui-tree-node> |
<div data-nodrag class="tree-node tree-node-description tree-node-content clearfix"> |
<div ng-if="node.publishDateStr"> |
<div class="col-md-2" style="text-align: right"> |
<span class="glyphicon glyphicon-tag"></span> |
<span class="label label-primary">Data de Publicação:</span> |
</div> |
<div class="col-md-10" style="border: 1px dashed black"> |
{{node.publishDateStr}} |
</div> |
</div> |
<div ng-if="node.description" class="panel panel-default"> |
<div class="panel-body"> |
<span class="label label-primary">Descrição:</span>{{node.description}} |
</div> |
</div> |
<div ng-if="node.closeDateStr"> |
<div class="col-md-2" style="text-align: right"> |
<span class="glyphicon glyphicon-tag"></span> |
<span class="label label-primary">Data de Fim:</span> |
</div> |
<div class="col-md-10" style="border: 1px dashed black"> |
{{node.closeDateStr}} |
</div> |
</div> |
<div ng-if="node.internalIdentifier"> |
<span class="label label-primary">ID INTERNO:</span> |
<label > |
{{node.internalIdentifier}} |
</label> |
</div> |
<div ng-if="node.publishDateStr"> |
<span class="label label-primary">Data de Publicação:</span> |
<label > |
{{node.publishDateStr}} |
</label> |
</div> |
<div ng-if="node.authorsJson.persons"> |
<span class="label label-primary">Autores:</span> |
<label ng-repeat="autor in node.authorsJson.persons"> |
{{autor.firstNames}} {{autor.lastName}} |
</label> |
</div> |
<div ng-if="node.contributorsJson.persons"> |
<span class="label label-primary">Colaboradores:</span> |
<label ng-repeat="autor in node.contributorsJson.persons"> |
{{autor.firstNames}} {{autor.lastName}} ; |
</label> |
</div> |
</div> |
</li> |
<div ng-if="node.authorsJson" ng-repeat="autor in node.authorsJson.persons"> |
<div class="col-md-2" style="text-align: right"> |
<span class="glyphicon glyphicon-tag"></span> |
<span class="label label-primary">Autor:</span> |
</div> |
<div class="col-md-10" style="border: 1px dashed black"> |
{{autor.firstNames}} {{autor.lastName}} |
</div> |
</div> |
<div ng-if="node.contributorsJson" ng-repeat="autor in node.contributorsJson.persons"> |
<div class="col-md-2" style="text-align: right"> |
<span class="glyphicon glyphicon-tag"></span> |
<span class="label label-primary">Colaborador:</span> |
</div> |
<div class="col-md-10" style="border: 1px dashed black"> |
{{autor.firstNames}} {{autor.lastName}} |
</div> |
</div> |
<div ng-if="node.publisher"> |
<div class="col-md-2" style="text-align: right"> |
<span class="glyphicon glyphicon-tag"></span> |
<span class="label label-primary">Entidade Publicadora:</span> |
</div> |
<div class="col-md-10" style="border: 1px dashed black"> |
{{node.publisher}} |
</div> |
</div> |
</div> |
</li> |
<li ng-repeat="node in node.repositoryDocumentFiles" ui-tree-node ng-include="'files_renderer.html'"> |
</li> |
</ol> |
366,18 → 446,66 |
<script type="text/ng-template" id="files_renderer.html"> |
<!--Para nao deixar fazer drag--> |
<div data-nodrag class="tree-node tree-node-file tree-node-content clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved, bacoInvisible: !node.visible}"> |
<div data-nodrag class="tree-node tree-node-file tree-node-content clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved, bacoInvisible: !node.visible, hidden: hideNode(node)}"> |
<label data-toggle="tooltip" title="Este ficheiro está oculto!" ng-show="node.visible == false"> |
<span class="glyphicon glyphicon-ban-circle"/> |
</label> |
<span class="glyphicon glyphicon-file"></span> <span ng-if="node.title"><i> {{node.title}} </i> - </span> {{node.repositoryFileProxy.repositoryFile.lastVersion.name}} |
<div class="col-md-11"> |
<div ng-if="node.title"> |
<div class="col-md-2" style="text-align: right"> |
<span class="glyphicon glyphicon-tag"></span> |
<span class="label label-primary">Titulo:</span> |
</div> |
<div class="col-md-10" style="border: 1px dashed black"> |
<i> {{node.title}} </i> |
</div> |
</div> |
<div ng-if="node.description"> |
<div class="col-md-2" style="text-align: right"> |
<span class="glyphicon glyphicon-tag"></span> |
<span class="label label-primary">Descrição:</span> |
</div> |
<div class="col-md-10" style="border: 1px dashed black"> |
<i>{{node.description}}</i> |
</div> |
</div> |
<div class="col-md-12" style="margin-top: 4px"> |
<span class="glyphicon glyphicon-paperclip"></span> |
<bacoTags:repositoryFile btnXs="true" transactional="false" staticTag="true" repositoryStream="{{node.repositoryFileProxy.repositoryStream}}" showHistory="true"/> |
{{node.repositoryFileProxy.repositoryFile.lastVersion.name}} |
({{node.repositoryFileProxy.repositoryFile.lastVersion.size / 1024 | number:0}} KB) |
</div> |
</div> |
<div class="col-md-1"> |
<button data-toggle="tooltip" title="Ocultar ficheiro" ng-show="node.visible == true" class="btn btn-danger pull-right" type="button" ng-click="setDocumentFileInvisible(node)"><span class="glyphicon glyphicon-ban-circle"/></button> |
<button data-toggle="tooltip" title="Repor ficheiro" ng-show="node.visible == false" class="btn btn-default pull-right" type="button" ng-click="setDocumentFileVisible(node)"><span class="glyphicon glyphicon-ok-circle"/></button> |
<div ng-if="node.repositoryFileProxy.repositoryFile.accessControl == 'resource.access.publicDomain'"> |
Público |
</div> |
<div ng-if="node.repositoryFileProxy.repositoryFile.accessControl == 'resource.access.privateDomain'"> |
Privado |
</div> |
<div ng-if="node.repositoryFileProxy.repositoryFile.accessControl == 'resource.access.authenticatedDomain'"> |
Interno |
</div> |
</div> |
</div> |
</script> |
<div class="panel panel-default"> |
<div class="panel-heading clearfix"> |
Administração de Coleções do Repositório de Documentos Digitais |
<baco:hasRole role="admin,all,repositoryDocs"> |
<select class="chosenOff pull-right" type="text" ng-model="onlyVisibles" ng-options="o.v as o.n for o in [{ n: 'Ver Todos', v: false }, { n: 'Ocultar invisiveis', v: true }]">> |
</select> |
</baco:hasRole> |
</div> |
<div class="panel-body"> |
385,7 → 513,7 |
<!-- E finalmente este é o unico codigo dos gajos que metem no HTML puro--> |
<div class="row"> |
<div class="col-sm-12 form-horizontal"> |
397,9 → 525,9 |
</div> |
</div> |
<div class="col-sm-12"> |
<%-- <div class="col-sm-12"> |
<pre class="code">{{ data | json }}</pre> |
</div> |
</div>--%> |
</div> |