/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 && (RoleUsers("admin") || RoleUsers("all") || RoleUsers("event_class_manager"))</expression> |
543,6 → 543,14 |
</filterChain> |
<filterChain> |
<name>RoleAddRemoveManager</name> |
<expression>AuthenticatedUsers && (RoleUsers("admin") || RoleUsers("all") || ( RoleUsers("event_class_manager") && 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 && (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"/> |