Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1616 → Rev 1617

/branches/v3/impl/conf/language/MessageResources.properties
199,6 → 199,7
role.value.default.required=O papel {0} não tem tradução principal
role.value.key.repeated=A chave {0} já existe na lista de papeis
fail.role=Lamentamos o incómodo, mas necessita de permissões especiais para aceder a esta área.
fail.prefix.parameter=Lamentamos o incómodo, mas necessita de permissões especiais para usar como parametro o valor pretendido.
fail.owner=Lamentamos o incómodo, mas não tem permissões sobre o objecto ao qual tentou aceder.
fail.timer=Lamentamos o incomodo, mas a acção que tentou efectuar não pode ser executada nesta data.
fail.change.pass=As passwords têm de ser iguais e ter mais de 5 caracteres e pelo menos uma letra maiuscula e outra minuscula
509,7 → 510,7
 
 
 
 
user.role.courseValidateProgramNONE=Nenhuma
user.role.courseValidateProgramGPME=Comissão de Curso de Gestão de PME
user.role.courseValidateProgramCET_TD=Comissão de Curso de CETS de TD
user.role.courseValidateProgramEI=Comissão de Curso de EI
1765,6 → 1766,7
edit.profile=Editar Meu Perfil
edit.user.profile=Editar Utilizador
profile.roles=Funções na Instituição
profile.roles.users=Papeis Institucionais Atribuidos
profile.search.user=Procurar Utilizador
 
 
/branches/v3/impl/conf/WEB-INF/struts/struts-profile.xml
107,6 → 107,10
<forward name="curriculum" path="page.profile.curriculum"/>
<forward name="grades" path="page.profile.grades"/>
</action>
 
 
 
<action path="/user/showRoleUsers" forward="page.roles.users"/>
</action-mappings>
 
</struts-config>
/branches/v3/impl/conf/WEB-INF/struts/tiles-profile.xml
69,4 → 69,9
<put name="body" value="/public/profile/profileGrades.jsp"/>
</definition>
 
 
<definition name="page.roles.users" extends="page.pae.separators.home">
<put name="topnav" value="/user/profile/topnavRolesUsers.jsp"/>
<put name="body" value="/user/profile/roleUsers.jsp"/>
</definition>
</tiles-definitions>
/branches/v3/impl/conf/WEB-INF/tags/printRoleGroup.tag
1,7 → 1,8
<%@ tag import="jomm.dao.impl.AbstractDao" %>
<%@ tag import="pt.estgp.estgweb.domain.User" %>
 
<%@ tag import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ tag import="java.util.List" %>
 
<%@ tag import="jomm.utils.BytesUtils" %>
<%@tag description="Tag to Call Ajax Request" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
10,31 → 11,200
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@taglib prefix="bacoTags" tagdir="/WEB-INF/tags" %>
 
<%@attribute name="role" type="java.lang.String" required="true" %>
<%@attribute name="title" type="java.lang.String" required="false" %>
<%@attribute name="transactional" type="java.lang.Boolean" required="true" %>
<%@attribute name="printOnlyList" type="java.lang.Boolean" required="false" %>
<%@attribute name="ignoreUserId" type="java.lang.Long" required="false" %>
<%@attribute name="useWellTitle" type="java.lang.Boolean" required="false" %>
 
 
<%
if(!transactional)
AbstractDao.getCurrentSession().beginTransaction();
 
List<User> users = DaoFactory.getUserDaoImpl().loadRoleUsers(role);
request.setAttribute("users",users);
String idTemp = BytesUtils.generateHexKey() + role.replaceAll(" ", "_").replaceAll("\\.","_");
%>
<logic:notEmpty name="title">
<h3 class="well well-sm">${title}</h3>
</logic:notEmpty>
<logic:empty name="title">
<h3 class="well well-sm"><bean:message key="user.role.${role}"/></h3>
</logic:empty>
<ul>
<logic:iterate id="user" name="users" type="pt.estgp.estgweb.domain.UserImpl">
<li>${user.name} (${user.possibleSigesCode})</li>
</logic:iterate>
</ul>
<%
if(!transactional)
AbstractDao.getCurrentSession().getTransaction().commit();
%>
 
<!-- Usar o Angular para Printar os Roles -->
<div class="clearfix">
 
<div class="col-md-12" id="printRoleModule<%=idTemp%>" ng-app="printRoleModule<%=idTemp%>" ng-controller="printRoleModuleController<%=idTemp%>">
 
<%
if(printOnlyList == null || printOnlyList == false)
{
%>
<logic:notEmpty name="title">
<h3 <%if(useWellTitle != null && useWellTitle){%>class="well well-sm"<%}%>>${title}</h3>
</logic:notEmpty>
<logic:empty name="title">
<h3 <%if(useWellTitle != null && useWellTitle){%>class="well well-sm"<%}%>><bean:message key="user.role.${role}"/></h3>
</logic:empty>
<%
}
%>
<div class="col-md-6">
<ul>
<li ng-repeat="u in roleUsers" class="roleUser{{u.id}}">
<baco:isAdmin>
<bacoTags:confirm icon="glyphicon glyphicon-remove" btnClass="btn btn-danger btn-xs">
<jsp:attribute name="targetFunction">removeUser<%=idTemp%>({{u.id}})</jsp:attribute>
<jsp:attribute name="msg">Tem a certeza que deseja remover o utilizador {{u.name}} do grupo <bean:message key="user.role.${role}"/></jsp:attribute>
</bacoTags:confirm>
</baco:isAdmin>
 
{{u.username}}
<label ng-if="u.name">
- {{u.name}}
</label>
<label ng-if="u.sigesCode">
({{u.sigesCode}})
</label>
<%--</label>--%>
 
</li>
</ul>
</div>
<baco:isAdmin>
<div class="col-md-6">
 
<div class="panel panel-default">
<div class="panel-heading">
Adicionar elemento ao grupo <bean:message key="user.role.${role}"/>
</div>
<div class="panel-body">
<div class="web-messages"> </div>
 
<div class="input-group">
<input type="text" id="queryPersons<%=idTemp%>" class="form-control" placeholder="Pesquisar...">
<span class="input-group-btn">
<button class="btn btn-secondary" type="button" onclick="searchPersons<%=idTemp%>();return false;"><span class="glyphicon glyphicon-search"/></button>
</span>
</div>
<div ng-show="findUser.length > 0" class="clearfix" id="personsResults<%=idTemp%>" style="position: absolute; background-color: gray;border: 1px solid gray;z-index: 1000; right: 30px;left:30px;">
<div class="clearfix" style="padding:0">
<table class="tablesorter-blue" style="margin:0">
<thead>
<tr>
<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>
<tr ng-repeat="f in findUser">
<td>{{f.name}}</td>
<td ng-if="f.type == 'student'">
Estudante
</td>
<td ng-if="f.type == 'teacher'">
Professor
</td>
<td ng-if="f.type != 'teacher' && f.type != 'student'">
User
</td>
<td>{{f.sigesCode}}</td>
</tr>
</tbody>
</table>
</div>
</div>
 
</div>
</div>
 
<script>
//DECLARACAO DA APLICACAO LOCAL EM ANGULAR
var printRoleModule<%=idTemp%> = angular.module('printRoleModule<%=idTemp%>', []);
GLOBAL_BacoAngularAppDependencies.push('printRoleModule<%=idTemp%>');
printRoleModule<%=idTemp%>.controller('printRoleModuleController<%=idTemp%>', function($scope) {
//variavel para a pesquisa de users
$scope.findUser = [];
$scope.roleUsers = [];
$scope.removeAllUsers = function()
{
$scope.findUser = [];
}
});
</script>
<script language="javascript">
 
$(document).ready(function()
{
loadUserRoles<%=idTemp%>();
});
 
function removeUser<%=idTemp%>(id)
{
widgetCallWithActionParameters(
'<%=request.getContextPath()%>/user/json/model.do',
'removeRole2User',
{
q :
"{ userId : " + id + ", role : '${role}' }"
}
,
$("#printRoleModule<%=idTemp%>"),
function(response)
{
angular.element($("#printRoleModule<%=idTemp%>")).scope().roleUsers = response.results;
angular.element($("#printRoleModule<%=idTemp%>")).scope().$apply();
},
function(response)
{
alert("Accao Falhou mas as resposta foi esta: " + JSON.stringify(response));
});
 
}
function loadUserRoles<%=idTemp%>()
{
widgetCallWithActionParameters(
'<%=request.getContextPath()%>/user/json/model.do',
'findUserRoles',
{
q : "${role}"
}
,
$("#printRoleModule<%=idTemp%>"),
function(response)
{
angular.element($("#printRoleModule<%=idTemp%>")).scope().roleUsers = response.results;
angular.element($("#printRoleModule<%=idTemp%>")).scope().$apply();
},
function(response)
{
alert("Accao Falhou mas as resposta foi esta: " + JSON.stringify(response));
});
}
 
function searchPersons<%=idTemp%>()
{
 
widgetCallWithActionParameters(
'<%=request.getContextPath()%>/user/json/model.do',
'findUser',
{
q : $('#queryPersons<%=idTemp%>').val()
}
,
$("#printRoleModule<%=idTemp%>"),
function(response)
{
angular.element($("#printRoleModule<%=idTemp%>")).scope().findUser = response.results;
angular.element($("#printRoleModule<%=idTemp%>")).scope().$apply();
setTimeout(function() { evaluateTableSortersInside("#personsResults<%=idTemp%>"); }, 500);
 
//evaluateTableSortersInside("#personsResults");
},
function(response)
{
alert("Accao Falhou mas as resposta foi esta: " + JSON.stringify(response));
});
 
}
 
</script>
</div>
</baco:isAdmin>
</div>
</div>
/branches/v3/impl/conf/WEB-INF/tags/confirm.tag
New file
0,0 → 1,39
<%@ tag import="jomm.dao.impl.AbstractDao" %>
<%@tag description="Tag to Call Ajax Request" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@attribute name="msg" type="java.lang.String" required="true" %>
<%@attribute name="targetUrl" type="java.lang.String" required="false" %>
<%@attribute name="targetFunction" type="java.lang.String" required="false" %>
<%@attribute name="label" type="java.lang.String" required="false" %>
<%@attribute name="icon" type="java.lang.String" required="false" %>
<%@attribute name="btnClass" type="java.lang.String" required="false" %>
 
 
 
<logic:notEmpty name="targetUrl">
<button class="<%=btnClass != null ? btnClass : "btn btn-danger"%>" type="button" data-toggle="modal" data-target="#confirm-ModalGeneric" data-message="${msg}" data-href="<%=request.getContextPath()%>${targetUrl}">
<logic:empty name="label">
${label}
</logic:empty>
<logic:notEmpty name="icon">
<span class="${icon}"> </span>
</logic:notEmpty>
</button>
</logic:notEmpty>
 
<logic:notEmpty name="targetFunction">
<button class="<%=btnClass != null ? btnClass : "btn btn-danger"%>" type="button" data-toggle="modal" data-target="#confirm-ModalFunction" data-message="${msg}" data-script="${targetFunction};$('#confirm-ModalFunction').modal('hide');">
<logic:empty name="label">
${label}
</logic:empty>
<logic:notEmpty name="icon">
<span class="${icon}"> </span>
</logic:notEmpty>
</button>
</logic:notEmpty>
/branches/v3/impl/conf/app.properties
462,11 → 462,24
course.degree.desc.C=Acção de Formação de Curta Duração
course.degree.desc.A=Formação Avançada
course.degree.desc.O=Outra Formação
course.degree.desc.T=Cursos Técnico Superior Profissional (CTeSP)
course.degree.desc.T=Curso Técnico Superior Profissional (CTeSP)
course.degree.desc.D=Diploma de Estudos Superiores Especializados
course.degree.desc.H=Doutoramento
course.degree.desc.Z=Desconhecido
 
course.degree.desc.plural.B=Bacharelatos
course.degree.desc.plural.L=Licenciaturas
course.degree.desc.plural.M=Mestrados
course.degree.desc.plural.P=Pos Graduações
course.degree.desc.plural.E=Cursos Especialização Tecnológica (CET)
course.degree.desc.plural.C=Acções de Formação de Curta Duração
course.degree.desc.plural.A=Formações Avançada
course.degree.desc.plural.O=Outra Formações
course.degree.desc.plural.T=Cursos Técnico Superior Profissional (CTeSP)
course.degree.desc.plural.D=Diplomas de Estudos Superiores Especializados
course.degree.desc.plural.H=Doutoramentos
course.degree.desc.plural.Z=Desconhecidos
 
course.B.en=Bacharelatos
course.L.en=Graduation
course.M.en=Master
/branches/v3/impl/conf/berserk/sd.xml
115,7 → 115,7
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="EventClassManager"/><!--Suporta Admins ou Eventos-->
<chain name="RoleAddRemoveManager"/><!--Suporta Admins ou Eventos-->
</filterChains>
</service>
<service>
128,7 → 128,7
<chain name="Logger"/>
<chain name="Session"/>
<chain name="Admins"/>
<chain name="EventClassManager"/><!--Suporta Admins ou Eventos-->
<chain name="RoleAddRemoveManager"/><!--Suporta Admins ou Eventos-->
</filterChains>
</service>
 
/branches/v3/impl/conf/berserk/fd.xml
11,7 → 11,14
<description>Checks if the requester contains certain roles</description>
<isTransactional>false</isTransactional>
</filter>
 
<filter>
<name>ParameterValuePrefixCheck</name>
<implementationClass>pt.estgp.estgweb.filters.filters.ParameterValuePrefixCheck</implementationClass>
<description>Checks if the requester contains certain roles</description>
<isTransactional>false</isTransactional>
</filter>
<filter>
<name>EventManager</name>
<implementationClass>pt.estgp.estgweb.filters.filters.EventManager</implementationClass>
<description>Checks if the requester contains certain roles</description>
/branches/v3/impl/conf/berserk/fcd.xml
533,7 → 533,7
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass>
</filterChain>
 
 
<!---->
<filterChain>
<name>EventClassManager</name>
<expression>AuthenticatedUsers &amp;&amp; (RoleUsers("admin") || RoleUsers("all") || RoleUsers("event_class_manager"))</expression>
543,6 → 543,14
</filterChain>
 
<filterChain>
<name>RoleAddRemoveManager</name>
<expression>AuthenticatedUsers &amp;&amp; (RoleUsers("admin") || RoleUsers("all") || ( RoleUsers("event_class_manager") &amp;&amp; ParameterValuePrefixCheck("role_2_addRemove","event_manager_") ) )</expression>
<description>Admins Control Chain</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass>
</filterChain>
 
<filterChain>
<name>EventManager</name>
<expression>AuthenticatedUsers &amp;&amp; (EventManager("eventClassId","event") || RoleUsers("all") || RoleUsers("admin"))</expression>
<description>Admins Control Chain</description>
/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"/>