Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1616 → Rev 1617

/branches/v3/impl/src/java/pt/estgp/estgweb/utils/ReloadablePropertyMessageResources.java
70,14 → 70,19
@Override
public String getMessage(final Locale locale, final String key) {
reload(locale);
if(key.startsWith("user.role."))
if(key == null || key.length() == 0)
{
return "CHAVE MSG EM FALTA";
}
else if(key.startsWith("user.role."))
{
logger.debug("BACO ROLES:Getting role from UserRoleProxy" + key);
String msg = UserRoleProxy.getMessage(key.substring("user.role.".length()),locale);
if(msg == null)
return key;
return msg;
}
 
return super.getMessage(locale, key);
}
 
93,8 → 98,12
public String getMessage(final Locale locale, final String key, final Object[] args) {
reload(locale);
 
if(key.startsWith("user.role."))
if(key == null || key.length() == 0)
{
return "CHAVE MSG EM FALTA";
}
else if(key.startsWith("user.role."))
{
logger.debug("BACO ROLES:Getting role from UserRoleProxy" + key);
String msg = UserRoleProxy.getMessage(key.substring("user.role.".length()),locale);
if(msg == null)
/branches/v3/impl/src/java/pt/estgp/estgweb/services/users/UserRoleConfigService.java
239,6 → 239,7
"user.role.courseValidateProgramTGI=Comissão de Curso de TGI\n" +
"user.role.courseValidateProgramRU=Comissão de Curso de RU\n" +
"user.role.courseValidateProgramCF=Comissão de Curso de Contabilidade e Finanças\n" +
"user.role.courseValidateProgramNONE=Nenhuma\n" +
"user.role.courseValidateProgramTPB=Comissão de Curso de Tecnologias de Produção de Biocombustíveis\n"+
"user.role.board.institution=Board de Direcção do Instituto Politecnico\n"+
"user.role.board.school.estg=Board de Direcção da ESTG\n"+
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseDaoImpl.java
201,11 → 201,29
.list();
}
 
 
public List<Course> findAllShowStudiesPlanCoursesOrderByNameEvenWithoutCourseUnit(String institutionalCode, String degree)
{
return findAllCoursesOrderByNameEvenWithoutCourseUnit(institutionalCode,degree,true);
}
 
public List<String> findDegrees(String institutionalCode,boolean showWithStudiesPlanActive)
{
Query q = getCurrentSession().createQuery("select distinct (degree) from " + Course.class.getName() +
" where institutionalCode = :institutionalCode " +
(showWithStudiesPlanActive ? " and showStudiesPlan = true " : " " ) +
" order by degree ");
q.setString("institutionalCode",institutionalCode);
 
return q.list();
}
 
public List<Course> findAllCoursesOrderByNameEvenWithoutCourseUnit(String institutionalCode, String degree,boolean showWithStudiesPlanActive)
{
Criteria c = createCriteria();
 
c.add(eq("showStudiesPlan", true));
if(!showWithStudiesPlanActive)
c.add(eq("showStudiesPlan", true));
 
if (degree != null && degree.length() > 0)
c.add(eq("degree", degree));
/branches/v3/impl/src/java/pt/estgp/estgweb/filters/filters/ParameterValuePrefixCheck.java
New file
0,0 → 1,47
package pt.estgp.estgweb.filters.filters;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.filters.chains.AdminControlFilter;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException;
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.RoleManager;
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;
 
public class ParameterValuePrefixCheck extends AdminControlFilter {
private static final Logger logger = Logger.getLogger(ParameterValuePrefixCheck.class);
 
private static final String ALL_ROLE = ConfigProperties.getProperty("user.super");
 
public void execute(ServiceRequest request, ServiceResponse response)
throws FilterException, Exception
{
 
}
 
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception
{
 
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY);
 
if(userSession.getUser() == null)
{
logger.info("try access restricted area:" + request.getRequester());
throw new NeedAuthenticationException();
}
if(RoleManager.hasRole(userSession.getUser(),ALL_ROLE) || userSession.getUser().isSuperuser())
return;
 
String parameterName = (String) filterParameters.getParameter(0);
String parameterPrefix = (String) filterParameters.getParameter(1);
 
if(!parameterName.startsWith(parameterPrefix))
throw new AccessDeniedOperationException("fail.prefix.parameter");
 
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/widgetmodel/ModelWidgetController.java
12,6 → 12,9
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.web.controllers.utils.AbstractWidgetAjaxController;
import pt.estgp.estgweb.web.form.widgetmodel.WidgetModelForm;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
39,6 → 42,34
 
result.put("results",usersArray);
List<User> users = DaoFactory.getUserDaoImpl().findUsers(query);
getUsersInJson(usersArray, users);
AbstractDao.getCurrentSession().getTransaction().commit();
return result;
}
 
 
public JSONObject findUserRoles(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws JSONException {
 
WidgetModelForm frm = (WidgetModelForm) form;
String query = frm.getQ();
 
JSONObject result = new JSONObject();
JSONArray usersArray = new JSONArray();
result.put("results",usersArray);
 
if(query==null || query.trim().length() == 0)
return result;
 
AbstractDao.getCurrentSession().beginTransaction();
 
result.put("results",usersArray);
List<User> users = DaoFactory.getUserDaoImpl().loadRoleUsers(query);
getUsersInJson(usersArray, users);
AbstractDao.getCurrentSession().getTransaction().commit();
return result;
}
 
private void getUsersInJson(JSONArray usersArray, List<User> users) throws JSONException {
for(User u: users)
{
JSONObject user = new JSONObject();
59,7 → 90,70
}
usersArray.put(user);
}
AbstractDao.getCurrentSession().getTransaction().commit();
return result;
}
 
 
/**
* q json object:
* {
* userId:Long,
* role:String,
* }
* Adds a role to a user
*
* @param form
* @param request
* @param response
* @return Users in Json
* @throws JSONException
*/
public JSONObject addRole2User(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Throwable {
 
WidgetModelForm frm = (WidgetModelForm) form;
String query = frm.getQ();
JSONObject roleUser = new JSONObject(query);
Long userId = roleUser.getLong("userId");
String role = roleUser.getString("role");
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"userId","role_2_addRemove"}; //colocacao do nome de parametro role_2_add obrigatoria para validacao no filtro do serviço
Object[] args = new Object[]{userId,role};
sm.execute(RequestUtils.getRequester(request, response), "AddRole2User", args, names);
 
frm.setQ(role);
addMessageAsString(request,"Utilizador adicionado com sucesso ao papel institucional");
return findUserRoles(frm,request,response);
}
 
/**
* q json object:
* {
* userId:Long,
* role:String,
* }
* Adds a role to a user
*
* @param form
* @param request
* @param response
* @return Users in Json
* @throws JSONException
*/
public JSONObject removeRole2User(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Throwable {
 
WidgetModelForm frm = (WidgetModelForm) form;
String query = frm.getQ();
JSONObject roleUser = new JSONObject(query);
Long userId = roleUser.getLong("userId");
String role = roleUser.getString("role");
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{"userId","role_2_addRemove"}; //colocacao do nome de parametro role_2_add obrigatoria para validacao no filtro do serviço
Object[] args = new Object[]{userId,role};
sm.execute(RequestUtils.getRequester(request, response), "RemoveRole2User", args, names);
 
frm.setQ(role);
addMessageAsString(request,"Utilizador removido com sucesso do papel institucional");
return findUserRoles(frm,request,response);
}
}
/branches/v3/impl/src/web/css/style.css
7,7 → 7,7
}
.web-messages
{
margin-bottom: 30px !important;
/*margin-bottom: 30px !important;*/
 
}
.web-messages .alert
/branches/v3/impl/src/web/examples/acls/aclUseExample.jsp
209,9 → 209,7
</span>
</div>
<div ng-show="findUser.length > 0" class="clearfix" id="personsResults" style="position: absolute; background-color: gray;border: 1px solid gray;z-index: 1000;">
<div class="clearfix">
<button ng-click="removeAllUsers()" type="button" class="btn btn-danger btn-small small pull-right clearfix"><span class="glyphicon glyphicon-remove"/></button>
</div>
 
<div class="clearfix" style="padding:0">
<table class="tablesorter-blue" style="margin:0">
<thead>
219,6 → 217,7
<th>Nome</th>
<th>Tipo</th>
<th>Código</th>
<th><button ng-click="removeAllUsers()" type="button" class="btn btn-danger btn-xs pull-right clearfix"><span class="glyphicon glyphicon-remove"/></button></th>
</tr>
</thead>
<tbody>
/branches/v3/impl/src/web/user/profile/topnavRolesUsers.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, "profile.roles.users");
 
%>
<jsp:include page="/layout/topnav.jsp"/>
/branches/v3/impl/src/web/user/profile/roleUsers.jsp
New file
0,0 → 1,205
<%@ page import="jomm.dao.impl.AbstractDao" %>
<%@ page import="pt.estgp.estgweb.Globals" %>
<%@ page import="pt.estgp.estgweb.domain.Course" %>
<%@ page import="pt.estgp.estgweb.domain.User" %>
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ page import="pt.estgp.estgweb.utils.ConfigProperties" %>
<%@ page import="pt.estgp.estgweb.web.filters.UserRoleProxy" %>
<%@ page import="java.util.List" %>
<%@ 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 prefix="bacoTags" tagdir="/WEB-INF/tags" %>
 
<%
List<String> userRoles = UserRoleProxy.getUserRoles();
%>
 
<div class="panel panel-default">
<div class="panel-heading">
Papeis Institucionais com relevância para os processos académicos no PAE
</div>
<div class="panel-body">
 
<%
AbstractDao.getCurrentSession().beginTransaction();
request.setAttribute("roleBoardIPP", Globals.ROLE_BOARD_INSTITUTION);
request.setAttribute("roleBoardESTG",Globals.ROLE_BOARD_SCHOOL_ESTG);
request.setAttribute("roleBoardESAE",Globals.ROLE_BOARD_SCHOOL_ESAE);
request.setAttribute("roleBoardESS",Globals.ROLE_BOARD_SCHOOL_ESS);
request.setAttribute("roleBoardESECS",Globals.ROLE_BOARD_SCHOOL_ESECS);
request.setAttribute("rolePreCP",Globals.ROLE_PRESIDENTE_CONCELHO_PEDAGOGICO);
%>
 
<h1 class="well well-large">Papeis Institucionais com relevância em vários Processos</h1>
<bacoTags:printRoleGroup role="${roleBoardIPP}" transactional="true" useWellTitle="true"/>
<bacoTags:printRoleGroup role="${rolePreCP}" transactional="true" useWellTitle="true"/>
<bacoTags:printRoleGroup role="${roleBoardESTG}" transactional="true" useWellTitle="true"/>
<bacoTags:printRoleGroup role="${roleBoardESAE}" transactional="true" useWellTitle="true"/>
<bacoTags:printRoleGroup role="${roleBoardESS}" transactional="true" useWellTitle="true"/>
<bacoTags:printRoleGroup role="${roleBoardESECS}" transactional="true" useWellTitle="true"/>
 
 
<h1 class="well well-large">Papeis especificos da Administração de Questionários</h1>
<bacoTags:printRoleGroup role="questionarios.admin" transactional="true"/>
<bacoTags:printRoleGroup role="questionarios.atribuicoes.admin" transactional="true"/>
<bacoTags:printRoleGroup role="questionarios.atribuicoes.check_teachers" transactional="true"/>
<bacoTags:printRoleGroup role="questionarios.gerais" transactional="true"/>
 
<a name="comissoes"></a>
<h1 class="well well-large">Comissões de Curso</h1>
<%
boolean showAllCourses = request.getParameter("showAllCourses") != null ? Boolean.parseBoolean(request.getParameter("showAllCourses")) : false;
boolean showWithStudiesPlanActive = ! showAllCourses;
List<String> institutionCodes = ConfigProperties.getListValues("institution.code.prefix.inverse.");
%>
<script>
$(document).ready(
function(){
 
}
);
 
 
function showInstitutionCode(institutionCode)
{
<%
for(String institutionCode: institutionCodes)
{
%>
if(institutionCode == '<%=institutionCode%>')
{
$("#institution<%=institutionCode%>").show();
$("#institutionsSeparators<%=institutionCode%>").addClass("active");
}
else
{
$("#institution<%=institutionCode%>").hide();
$("#institutionsSeparators<%=institutionCode%>").removeClass("active");
}
<%
}
%>
}
 
function showDegreeInst(degree,inst)
{
$(".degree").hide();
$("#institution" + inst + " #degree" + degree).show();
$(".degreeSep").removeClass("active");
$("#degreeSeparators" + degree).addClass("active");
}
</script>
 
<p>Nesta listagem apenas são mostrados os Cursos publicos no Site do IPP, se o curso que procura não está listado clique aqui para ver todos <a class="btn btn-default" href="<%=request.getContextPath()%>/user/showRoleUsers.do?showAllCourses=true#comissoes">Mostrar Todos</a></p>
 
 
<!--TBS DE INSTITUICAO-->
<ul class="nav nav-tabs">
<%
for(String institutionCode: institutionCodes)
{
String institutionName = ConfigProperties.getProperty("institution.code." + institutionCode);
%>
<li id="institutionsSeparators<%=institutionCode%>"><a href="javascript:showInstitutionCode('<%=institutionCode%>')"><%=institutionName%></a></li>
<%
}
%>
</ul>
<!--TBS DE INSTITUICAO-->
 
<%
for(String instCode : institutionCodes)
{
%>
<div class="panel panel-default" id="institution<%=instCode%>" style="display: none">
<div class="panel-heading">
Tipos de Curso da <%=ConfigProperties.getProperty("institution.code." + instCode)%>
</div>
<div class="panel-body">
 
 
<%
List<String> degrees = DaoFactory.getCourseDaoImpl().findDegrees(instCode,showWithStudiesPlanActive);
%>
<!--TBS DE DEGREES-->
<ul class="nav nav-tabs">
<%
for(String degree: degrees)
{
%>
<li class="degreeSep" id="degreeSeparators<%=degree%>"><a href="javascript:showDegreeInst('<%=degree%>','<%=instCode%>')"><%=ConfigProperties.getProperty("course.degree.desc.plural." + degree)%></a></li>
<%
}
%>
</ul>
<!--TBS DE DEGREES-->
<%
for(String degree: degrees)
{
 
%>
 
 
 
<div class="degree" id="degree<%=degree%>" style="display: none">
<%
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllCoursesOrderByNameEvenWithoutCourseUnit(instCode,degree,showWithStudiesPlanActive);
for(Course course: courses)
{
request.setAttribute("course",course);
%>
<h4 class="well well-sm clearfix">
<%=course.getName()%> (<%=course.getCode()%>)
<baco:isAdmin>
<a class="btn btn-warning pull-right btn-xs" target="_blank" href="<%=request.getContextPath()%>/user/courseControllerFromServiceZone.do?dispatch=editAdmin&courseView.id=${course.id}">
<span class="glyphicon glyphicon-wrench"></span>
</a>
</baco:isAdmin>
</h4>
 
<p>Papel da Coordenação:</label>
<logic:notEmpty name="course" property="validationRole"><bean:message key="user.role.${course.validationRole}"/></logic:notEmpty>
<logic:empty name="course" property="validationRole">Este curso não tem papel definido para a sua Coordenação, por favor contacte os serviços de informática, terá de ser definido um papel para a coordenação para lhe poder adicionar elementos</logic:empty>
</p>
<p>Coordenador:
<%
if(course.getCoordinator() != null)
{
%><%=course.getCoordinator().getName()%> (<%=course.getCoordinator().getSigesCode()%>)<%
}
else
{
%>Não está atribuido<%
}
%>
</p>
<%
if(course.getValidationRole() != null && course.getValidationRole().length() > 0)
{
%>
<bacoTags:printRoleGroup title="Restante Coordenação" role="${course.validationRole}" transactional="true"/>
<%
}
}
%>
</div><!--Degree div End-->
<%
}
 
%>
</div><!--Panel Body-->
</div><!--Panel Instituicao-->
<%
}
 
AbstractDao.getCurrentSession().getTransaction().commit();
%>
 
 
</div>
</div>
/branches/v3/impl/src/web/user/events/eventApiJson.jsp
8,7 → 8,7
String userId = request.getParameter("userId");
String eventRoleManager = request.getParameter("eventRoleManager");
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
String[] names = new String[]{"userId","role_2_addRemove"}; //colocacao do nome de parametro role_2_addRemove obrigatoria para validacao no filtro do serviço
Object[] args = new Object[]{Long.parseLong(userId),eventRoleManager};
User u = (User) sm.execute(RequestUtils.getRequester(request, response), "RemoveRole2User", args, names);
json.put("response","done");
26,7 → 26,7
String userId = request.getParameter("userId");
String eventRoleManager = request.getParameter("eventRoleManager");
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
String[] names = new String[]{"userId","role_2_addRemove"}; //colocacao do nome de parametro role_2_addRemove obrigatoria para validacao no filtro do serviço
Object[] args = new Object[]{Long.parseLong(userId),eventRoleManager};
User u = (User) sm.execute(RequestUtils.getRequester(request, response), "AddRole2User", args, names);
json.put("response","done");
/branches/v3/impl/src/web/user/questionarios/headerQuestionarios.jsp
1,3 → 1,4
<%@ page import="jomm.dao.impl.AbstractDao" %>
<%@ 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" %>
4,8 → 5,10
<%@ 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 prefix="baco" uri="http://www.estgp.pt/baco/" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@taglib prefix="bacoTags" tagdir="/WEB-INF/tags" %>
 
 
<style>
.imgsmall
{
69,7 → 72,7
 
<div class="panel panel-default">
<div class="panel-body">
<baco:isAdmin>
<baco:hasRole role="admin,questionarios.admin,pedagogicCouncil.president,board.institution,questionarios.atribuicoes.admin,questionarios.atribuicoes.check_teachers,questionarios.gerais,services">
<h3 class="well">Questões relativas a papeis e permissões</h3>
<ul>
<li>Para aceder ao painel de ferramentas dos questionarios tem de ser administrador (admin ou questionarios.admin) ou ter o papel de Questionários Básicas (questionarios.gerais) ou services</li>
78,9 → 81,28
<li>Administradores de Questionários (questionarios.admin) Validação (questionarios.atribuicoes.admin, questionarios.atribuicoes.check_teachers) de Atribuições podem validar as unidades quanto aos alunos e docentes afetados</li>
<li>Professores, Membros das Comissões e Pedagógico terão acesso às respostas na sua Home Page numa página especialmente concebida para o efeito</li>
</ul>
 
 
 
<h3 class="well">Intervenientes no Processo em Sistema <label class="label label-info">Esta informação é visivel apenas a membros da Administração e Presidentes do Pedagógico</label></h3>
<p>Caso algum dos intervenientes esteja mal atribuido contacte de imediato a administração de sistemas do IPP</p>
 
<%
AbstractDao.getCurrentSession().beginTransaction();
%>
<bacoTags:printRoleGroup role="questionarios.admin" transactional="true"/>
<bacoTags:printRoleGroup role="questionarios.atribuicoes.admin" transactional="true"/>
<bacoTags:printRoleGroup role="questionarios.atribuicoes.check_teachers" transactional="true"/>
<bacoTags:printRoleGroup role="questionarios.gerais" transactional="true"/>
<%
AbstractDao.getCurrentSession().getTransaction().commit();
%>
 
 
 
<h3 class="well well-sm">Modelo de Dados</h3>
<img class="imgtoogle imgsmall" src="<%=request.getContextPath()%>/user/questionarios/QuestionariosDomain.bmp" width="100%">
</baco:isAdmin>
</baco:hasRole>
 
<h2 class="well">Documentação partilhada para utilizadores privilegiados do sistema de Questionários</h2>
 
113,6 → 135,10
<h3 class="well well-sm">Apresentação (versão 2) <label class="badge">26 Junho/2016</label></h3>
<a target="_blank" href="<%=request.getContextPath()%>/user/questionarios/docs/ApresentacaoPedagogico.ppt">Apresentação PAE</a>
 
 
 
 
 
</div>
</div>
 
/branches/v3/impl/src/web/user/questionarios/pedagogicoEstudante/pedagogicoEstudanteCoursesCheck.jsp
37,15 → 37,19
 
List<String> institutionCodes = ConfigProperties.getListValues("questionario.instituition.");
 
AbstractDao.getCurrentSession().beginTransaction();
 
 
 
%>
<jsp:useBean id="Questionario" type="pt.estgp.estgweb.domain.QuestionarioImpl" scope="request"/>
<jsp:include page="../headerQuestionarios.jsp"/>
 
<jsp:include page="/layout/pleaseWait.jsp"/>
 
<%
AbstractDao.getCurrentSession().beginTransaction();
%>
 
<html:form action="/user/questionariosPaeSelectCourses">
<html:hidden property="questionario.id" value="${Questionario.id}"/>
<input type="hidden" name="dispatch" value="updateTipologias"/>