/branches/v3/impl/conf/language/MessageResources.properties |
---|
1168,6 → 1168,9 |
course.menu.faq=FAQ |
course.menu.publicacoes=Publicações |
course.comission.role.added.success=Papel de Comissão "{0}" criado com sucesso e atribuido ao curso |
course.coordinator.added.success=Coordenador alterado com sucesso |
status=Curso Activo |
courses.fill.course=Por favor escolha pelo menos um curso nos filtros. |
/branches/v3/impl/conf/WEB-INF/struts/struts-courses.xml |
---|
52,6 → 52,15 |
<forward name="loadMenu" path="page.load.course.menu"/> |
</action> |
<action path="/user/courseControllerWidget" |
type="pt.estgp.estgweb.web.controllers.courses.CoursesController" |
name="CourseForm" |
scope="request" |
parameter="dispatch" |
validate="true" |
input="page.widget.json.fail.validations"> |
</action> |
<action path="/user/startLoadCoursesProgramsFromServiceZone" forward="/user/courseControllerFromServiceZone.do?dispatch=loadCoursesPrograms&fromDispatch=loadCoursesPrograms&from=ServiceZone&area="/> |
<action path="/user/startLoadDirectedCoordinatedCoursesFromServiceZone" forward="/user/courseControllerFromServiceZone.do?dispatch=loadDirectedCoordininatedCourses&fromDispatch=loadDirectedCoordininatedCourses&from=ServiceZone"/> |
<action path="/user/startSelectCourseFromServiceZone" forward="page.select.course.from.service.zone"/> |
/branches/v3/impl/conf/WEB-INF/web.xml |
---|
218,7 → 218,9 |
/WEB-INF/struts/struts-pae-eventos.xml, |
/WEB-INF/struts/struts-jsonwidget.xml, |
/WEB-INF/struts/struts-json-model.xml, |
/WEB-INF/struts/examples/struts-example-jsonwidget.xml |
/WEB-INF/struts/examples/struts-example-jsonwidget.xml, |
/WEB-INF/struts/struts-bpmn.xml |
</param-value> |
</init-param> |
<init-param> |
/branches/v3/impl/conf/WEB-INF/tags/printRoleGroup.tag |
---|
28,7 → 28,7 |
<!-- Usar o Angular para Printar os Roles --> |
<div class="clearfix"> |
<div class="col-md-12" style="padding: 0; margin: 0" id="printRoleModule<%=idTemp%>" ng-app="printRoleModule<%=idTemp%>" ng-controller="printRoleModuleController<%=idTemp%>"> |
<div class="col-md-12 printRoleModule" style="padding: 0; margin: 0" id="printRoleModule<%=idTemp%>" ng-app="printRoleModule<%=idTemp%>" ng-controller="printRoleModuleController<%=idTemp%>"> |
<% |
if(printOnlyList == null || printOnlyList == false) |
87,7 → 87,9 |
</div> |
<div class="panel-body"> |
<div class="web-messages"> </div> |
<baco:hasNotRole role="admin,all,servicesRolesManagement"> |
<p>Necessita de permissões de administrador ou de Gestão de Papeis</p> |
</baco:hasNotRole> |
<div class="input-group"> |
<input type="text" id="queryPersons<%=idTemp%>" onkeyup="if(event.keyCode == 13){searchPersons<%=idTemp%>();}" class="form-control" placeholder="Pesquisar..."> |
<span class="input-group-btn"> |
150,8 → 152,10 |
//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 = []; |
/branches/v3/impl/conf/WEB-INF/tags/searchUserTab.tag |
---|
New file |
0,0 → 1,167 |
<%@ tag import="jomm.dao.impl.AbstractDao" %> |
<%@ tag import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ 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" %> |
<%@ 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" %> |
<%@taglib prefix="bacoTags" tagdir="/WEB-INF/tags" %> |
<%@attribute name="callbackFunction" type="java.lang.String" required="true" %> |
<%@attribute name="title" type="java.lang.String" required="false" %> |
<%@attribute name="useModals" type="java.lang.Boolean" required="false" %> |
<% |
String idTemp = BytesUtils.generateHexKey() + "searchUsers"; |
%> |
<!-- Usar o Angular para Printar os Roles --> |
<div class="clearfix"> |
<div class="col-md-12 searchPersonModule" style="padding: 0; margin: 0" id="searchPersonModule<%=idTemp%>" ng-app="searchPersonModule<%=idTemp%>" ng-controller="searchPersonModuleController<%=idTemp%>"> |
<div class="col-md-6" style="padding: 2px; margin: 0"> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
${title} |
</div> |
<div class="panel-body"> |
<div class="web-messages"> </div> |
<div class="input-group"> |
<input type="text" id="queryPersons<%=idTemp%>" onkeyup="if(event.keyCode == 13){searchPersons<%=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> |
<td> |
<% |
if(useModals != null && !useModals) |
{ |
%> |
<button type="button" class="btn btn-success btn-xs" ng-click="addUser( f.id, 'f.name','f.sigesCode')"><span class="glyphicon glyphicon-plus"/></button> |
<% |
} |
else |
{ |
%> |
<bacoTags:confirm icon="glyphicon glyphicon-plus" btnClass="btn btn-success btn-xs"> |
<jsp:attribute name="targetFunction">addUser<%=idTemp%>({{f.id}},'{{f.name}}','{{f.sigesCode}}');angular.element($('#searchPersonModule<%=idTemp%>')).scope().removeAllUsers();angular.element($('#searchPersonModule<%=idTemp%>')).scope().$apply();</jsp:attribute> |
<jsp:attribute name="msg">Tem a certeza que escolher o utilizador: {{f.name}}?</jsp:attribute> |
</bacoTags:confirm> |
<% |
} |
%> |
</td> |
</tr> |
</tbody> |
</table> |
</div> |
</div> |
</div> |
</div> |
<script> |
//DECLARACAO DA APLICACAO LOCAL EM ANGULAR |
var searchPersonModule<%=idTemp%> = angular.module('searchPersonModule<%=idTemp%>', []); |
GLOBAL_BacoAngularAppDependencies.push('searchPersonModule<%=idTemp%>'); |
searchPersonModule<%=idTemp%>.controller('searchPersonModuleController<%=idTemp%>', function($scope) { |
//variavel para a pesquisa de users |
$scope.findUser = []; |
$scope.removeAllUsers = function() |
{ |
$scope.findUser = []; |
} |
$scope.removeUser = function(id) |
{ |
if(confirm("Tem a certeza que deseja remover o utilizador?")) |
removeUser<%=idTemp%>(id); |
} |
$scope.addUser = function(id,name,sigesCode) |
{ |
if(confirm("Tem a certeza que deseja adicionar o utilizador?")) |
{ |
${callbackFunction}(id,name,sigesCode); |
$scope.removeAllUsers(); |
} |
} |
}); |
</script> |
<script language="javascript"> |
function addUser<%=idTemp%>(id,name,sigesCode) |
{ |
${callbackFunction}(id,name,sigesCode); |
} |
function searchPersons<%=idTemp%>() |
{ |
widgetCallWithActionParameters( |
'<%=request.getContextPath()%>/user/json/model.do', |
'findUser', |
{ |
q : $('#queryPersons<%=idTemp%>').val() |
} |
, |
$("#searchPersonModule<%=idTemp%>"), |
function(response) |
{ |
angular.element($("#searchPersonModule<%=idTemp%>")).scope().findUser = response.results; |
angular.element($("#searchPersonModule<%=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> |
</div> |
</div> |
/branches/v3/impl/conf/berserk/sd.xml |
---|
2732,7 → 2732,7 |
<filterChains> |
<!--<chain name="Logger"/>--> |
<chain name="Session"/> |
<chain name="Admins"/> |
<chain name="RoleAddRemoveManager"/> |
</filterChains> |
</service> |
2745,7 → 2745,7 |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
<chain name="RoleAddRemoveManager"/> |
</filterChains> |
</service> |
2758,11 → 2758,36 |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
<chain name="RoleAddRemoveManager"/> |
</filterChains> |
</service> |
<service> |
<name>CreateRoleCourseComission</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>createRoleCourseComission</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="RoleAddRemoveManager"/> |
</filterChains> |
</service> |
<service> |
<name>ChangeCourseCoordinator</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass> |
<description></description> |
<isTransactional>true</isTransactional> |
<defaultMethod>changeCoordinator</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="RoleAddRemoveManager"/> |
</filterChains> |
</service> |
<!--PageContents security is done in service by checking clearances--> |
<service> |
<name>loadPage</name> |
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/StringsUtils.java |
---|
1,7 → 1,9 |
package pt.estgp.estgweb.utils; |
import jomm.utils.DiacriticFilter; |
import java.util.ArrayList; |
import java.util.List; |
import java.util.ArrayList; |
/** |
* @author Jorge |
93,9 → 95,80 |
} |
public static String getNormalizedNameSafeforCode(String nome) |
{ |
try{ |
if(nome != null && nome.trim().length() > 0) |
{ |
nome = DiacriticFilter.clean(nome); |
nome = nome.replaceAll("/", "_"); |
nome = nome.replaceAll("-", "_"); |
StringBuilder sb = new StringBuilder(); |
for(char c: nome.toCharArray()) |
{ |
boolean alpha = (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); |
if(!alpha) |
{ |
sb.append(" "); |
} |
else |
{ |
sb.append(c); |
} |
} |
nome = sb.toString(); |
String[] partes = nome.split(" "); |
sb = new StringBuilder(); |
for(String n : partes) |
{ |
if(n.trim().length() == 1) |
{ |
if(n.charAt(0) >= '0' && n.charAt(0) <= '9') |
{ |
sb.append(n); |
} |
else |
{ |
sb.append(n.toUpperCase()); |
} |
} |
else if(n.trim().length() > 1) |
{ |
n = n.toLowerCase(); |
if(n.charAt(0) >= '0' && n.charAt(0) <= '9') |
{ |
sb.append(n); |
} |
else |
{ |
n = (""+n.charAt(0)).toUpperCase() + n.substring(1); |
} |
sb.append(n); |
} |
else |
{ |
//do not use |
} |
} |
return sb.toString().trim(); |
} |
else if(nome == null || nome.trim().length() == 0) |
{ |
return null; |
} |
} |
catch(Exception e) |
{ |
return null; |
} |
return null; |
} |
public static void main(String [] args) |
{ |
System.out.println(getNormalizedName("JORGE MIGUEL MACHADO")); |
System.out.println(getNormalizedNameSafeforCode("CTeSP - Desenvolvimento de Produtos Multimédia")); |
System.out.println(getNormalizedNameSafeforCode("CTeSP/- (123) Desenvolvimento de Produtos multimédia ")); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/CoursesService.java |
---|
23,8 → 23,10 |
import pt.estgp.estgweb.services.data.RepositoryService; |
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException; |
import pt.estgp.estgweb.services.expceptions.ServiceException; |
import pt.estgp.estgweb.services.users.UserRoleConfigService; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.utils.Dom4jUtil; |
import pt.estgp.estgweb.utils.StringsUtils; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import javax.xml.bind.JAXBContext; |
1162,5 → 1164,38 |
return importer; |
} |
public UserRoleConfig createRoleCourseComission(long courseId,UserSession userSession) |
{ |
Course c = DaoFactory.getCourseDaoImpl().load(courseId); |
if(c.getValidationRole() == null || c.getValidationRole().trim().length() == 0) |
{ |
String normalizedName = StringsUtils.getNormalizedNameSafeforCode(c.getName()); |
if(normalizedName == null) |
throw new RuntimeException("Erro o curso " + c.getId() +" + nao tem nome"); |
String roleValidation = "courseValidateProgram" + normalizedName; |
UserRoleConfigImpl newUserRoleConfig = DomainObjectFactory.createUserRoleConfigImpl(); |
newUserRoleConfig.setRole(roleValidation); |
newUserRoleConfig.setValid(true); |
newUserRoleConfig.setValue("Comissão de Curso de " + c.getName()); |
newUserRoleConfig.setValuePt("Comissão de Curso de " + c.getName()); |
newUserRoleConfig.setValueEn(""); |
newUserRoleConfig.setValueEs(""); |
newUserRoleConfig.setValueFr(""); |
new UserRoleConfigService().addUpdateRole(newUserRoleConfig,userSession); |
c.setValidationRole(roleValidation); |
return newUserRoleConfig; |
} |
return null; |
} |
public Teacher changeCoordinator(long teacherId,long courseId,UserSession userSession) |
{ |
Course c = DaoFactory.getCourseDaoImpl().load(courseId); |
Teacher t = DaoFactory.getTeacherDaoImpl().load(teacherId); |
c.setCoordinator(t); |
t = DaoFactory.getTeacherDaoImpl().narrow(t); |
return t; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java |
---|
213,7 → 213,7 |
logMessages.addMessage(new DefaultLogMessage("import.error",e.toString(), "see log for details", LogMessageTypeEnum.ERROR)); |
serviceLogError(logMessages.getLastMessage(), e); |
String cause = e.getCause() == null ? "" : e.getCause().toString(); |
sendNotificationAdmin("Erro na importacao de sumarios",cause); |
sendNotificationAdmin("Erro na importacao de cursos",cause); |
} |
logger.info("terminating course import"); |
serviceLogInfo("terminating course import"); |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/users/UserRoleConfigService.java |
---|
67,7 → 67,7 |
roleConfig = DomainObjectFactory.createUserRoleConfigImpl(); |
DaoFactory.getUserRoleConfigDaoImpl().save(roleConfig); |
} |
if(sess.getUser().isSuperuser() || isNew) |
if(sess.getUser().isSuperuserOrAdmin() || isNew) |
{ |
roleConfig.setRole(userRoleConfig.getRole().trim()); |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/filters/filters/ParameterValuePrefixCheck.java |
---|
39,9 → 39,14 |
String parameterName = (String) filterParameters.getParameter(0); |
String parameterPrefix = (String) filterParameters.getParameter(1); |
if(!parameterName.startsWith(parameterPrefix)) |
throw new AccessDeniedOperationException("fail.prefix.parameter"); |
if(filterParameters.getParameter(parameterName) != null) |
{ |
String parameter = (String) filterParameters.getParameter(parameterName); |
if(parameter.startsWith(parameterPrefix)) |
{ |
return; |
} |
} |
throw new AccessDeniedOperationException("fail.prefix.parameter"); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/courses/CoursesController.java |
---|
4,7 → 4,10 |
import org.apache.struts.action.ActionForm; |
import org.apache.struts.action.ActionForward; |
import org.apache.struts.action.ActionMapping; |
import org.json.JSONObject; |
import pt.estgp.estgweb.domain.CourseStudiesPlanImpl; |
import pt.estgp.estgweb.domain.Teacher; |
import pt.estgp.estgweb.domain.UserRoleConfig; |
import pt.estgp.estgweb.domain.views.CourseView; |
import pt.estgp.estgweb.filters.exceptions.NotFoundException; |
import pt.estgp.estgweb.services.courses.CoursesService; |
17,6 → 20,7 |
import pt.estgp.estgweb.services.courseunits.DirectedCoordinatedUnitsService; |
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException; |
import pt.estgp.estgweb.web.controllers.courseunits.CourseUnitsController; |
import pt.estgp.estgweb.web.controllers.widgetmodel.ModelWidgetController; |
import pt.estgp.estgweb.web.exceptions.NoCookiesException; |
import pt.estgp.estgweb.web.form.courses.CourseForm; |
import pt.estgp.estgweb.web.form.courses.CourseStudiesPlansAdminForm; |
941,6 → 945,33 |
/**Widget Controller*/ |
public Boolean addCourseComissionRole(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Throwable { |
String courseId = request.getParameter("courseId"); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{Long.parseLong(courseId)}; |
UserRoleConfig role = (UserRoleConfig) sm.execute(RequestUtils.getRequester(request, response), "CreateRoleCourseComission", args, names); |
addMessage(request,"course.comission.role.added.success",role.getValue()); |
return true; |
} |
public JSONObject changeCoordinator(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Throwable { |
String courseId = request.getParameter("courseId"); |
String teacherId = request.getParameter("teacherId"); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{Long.parseLong(teacherId),Long.parseLong(courseId)}; |
Teacher t = (Teacher) sm.execute(RequestUtils.getRequester(request, response), "ChangeCourseCoordinator", args, names); |
JSONObject tJson = ModelWidgetController.getJsonUser(t); |
addMessage(request,"course.coordinator.added.success"); |
return tJson; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsController.java |
---|
13,6 → 13,7 |
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController; |
import pt.estgp.estgweb.web.controllers.blogs.BlogsController; |
import pt.estgp.estgweb.web.controllers.profile.ProfileController; |
import pt.estgp.estgweb.web.controllers.utils.AbstractWidgetAjaxController; |
import pt.estgp.estgweb.web.exceptions.NoCookiesException; |
import pt.estgp.estgweb.web.form.blogs.BlogForm; |
import pt.estgp.estgweb.web.form.courseunits.CourseUnitsForm; |
40,7 → 41,7 |
* @time 18:01:54 |
* @see pt.estgp.estgweb.web |
*/ |
public class CourseUnitsController extends ApplicationDispatchController |
public class CourseUnitsController extends AbstractWidgetAjaxController |
{ |
private static final Logger logger = Logger.getLogger(CourseUnitsController.class); |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/widgetmodel/ModelWidgetController.java |
---|
95,7 → 95,7 |
} |
} |
private JSONObject getJsonUser(User u) throws JSONException { |
public static JSONObject getJsonUser(User u) throws JSONException { |
JSONObject user = new JSONObject(); |
user.put("id",u.getId()); |
user.put("username",u.getUsername()); |
/branches/v3/impl/src/web/auth/index.jsp |
---|
19,9 → 19,9 |
<html:errors/> |
<jomm:messages/> |
<label class="alert alert-warning"> |
<label class="alert alert-info"> |
Caros alunos devem colocar o vosso número de aluno na primeira caixa de texto |
e o numero de BI na segunda caixa de texto. |
e o numero de BI na segunda caixa de texto, AMBOS OS CAMPOS SÃO OBRIGATÓRIOS. |
</label> |
<ol> |
<li>Caso não consigam aceder por favor cliquem no botão "Perdi a Password e desejo receber um email para redefinir" e introduzam |
38,22 → 38,33 |
<div class="col-md-6"> |
<input type="text" class="form-control" id="login" name="username"/> |
</div> |
<div class="col-md-6"> |
<label class="lead">* Obrigatório</label> |
</div> |
</div> |
<div class="form-group clearfix"> |
<label class="col-md-12" for="pwd" style="margin-bottom: 10px"><jomm:messageConfigKey config="authentication.policy.password.msg.key"/></label> |
<div class="col-md-6"> |
<input type="password" class="form-control" id="pwd" name="password"/> |
</div> |
<div class="col-md-6"> |
<label class="lead">* Obrigatório</label> |
</div> |
</div> |
<div class="col-sm-12 clearfix"> |
<div class="col-sm-2 clearfix"> |
<button type="submit" class="btn btn-success"><bean:message key="submit"/></button> |
</div> |
<div class="col-md-10"> |
É necessário preencher ambos os campos de texto para entrar, (Número de Aluno ou de Docente) e (Número de BI ou password), a sua password no PAE ainda NÃO EXISTE se nunca a definiu, neste sentido deve ser definida, uma vez feito o login com número de aluno (no caso dos alunos, ou de docente no caso dos docentes) e BI, a página interna tem um botão que lhe permite alterar a password. |
</div> |
</form> |
</div> |
<div class="col-md-6"> |
<h2>Esqueci a password</h2> |
<div class="col-sm-12"> |
<p><a class="btn btn-default" href="<%=request.getContextPath()%>/requestChangePassword.do">Perdi a minha password e desejo receber um email para a redefinir</a></p> |
</div> |
</div> |
/branches/v3/impl/src/web/user/profile/rolesCoordenacoes.jsp |
---|
123,29 → 123,91 |
<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> |
<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 |
<baco:hasRole role="admin,all,servicesRolesManagement,servicesCoursesManagement,services"> |
<script> |
function addValidationRoleCourse${course.id}(button) |
{ |
widgetSimpleCallWithActionParameters( |
"<%=request.getContextPath()%>/user/courseControllerWidget.do", |
"addCourseComissionRole", |
{ |
"courseId" : ${course.id} |
}, |
"#roleGroupCourse${course.id}WebMessagesContainer", |
function() |
{ |
$(button).hide(); |
$("#roleGroupCourse${course.id}").html("<div class=\"alert alert-info\">Para adicionar utilizadores é necessário recarregar a página</div>"); |
} |
); |
} |
</script> |
<button onclick="addValidationRoleCourse${course.id}(this)" type="button" class="btn btn-success">Adicionar</button> |
</baco:hasRole> |
</logic:empty> |
</p> |
<p>Coordenador: |
<% |
if(course.getCoordinator() != null) |
{ |
%><%=course.getCoordinator().getName()%> (<%=course.getCoordinator().getSigesCode()%>)<% |
} |
else |
{ |
%>Não está atribuido<% |
} |
%> |
</p> |
<div class="row"> |
<div class="col-md-6">Coordenador: |
<label id="statusCoordinator${course.id}"> |
<% |
if(course.getCoordinator() != null) |
{ |
%><%=course.getCoordinator().getName()%> (<%=course.getCoordinator().getSigesCode()%>)<% |
} |
else |
{ |
%> |
Não está atribuido |
<% |
} |
%> |
</label> |
<div id="coordinatorCourse${course.id}WebMessagesContainer"> |
<div class="web-messages"> </div> |
</div> |
</div> |
<div class="col-md-6"> |
<baco:hasRole role="admin,all,servicesRolesManagement,servicesCoursesManagement,services"> |
<bacoTags:searchUserTab callbackFunction="mudarCoordenador${course.id}" title="Procurar novo coordenador" useModals="true"/> |
<script> |
function mudarCoordenador${course.id}(id, name, sigesCode) |
{ |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/user/courseControllerWidget.do", |
"changeCoordinator", |
{ |
"courseId": ${course.id}, |
"teacherId" : id |
}, |
"coordinatorCourse${course.id}WebMessagesContainer", |
function(data){ |
$("#statusCoordinator${course.id}").html(name + " (" + sigesCode + ")"); |
} |
); |
} |
</script> |
</baco:hasRole> |
</div> |
</div> |
<div id="roleGroupCourse${course.id}WebMessagesContainer"> |
<div class="web-messages"> </div> |
</div> |
<div id="roleGroupCourse${course.id}"> |
<% |
if(course.getValidationRole() != null && course.getValidationRole().length() > 0) |
{ |
if(course.getValidationRole() != null && course.getValidationRole().length() > 0){ |
%> |
<bacoTags:printRoleGroup title="Restante Coordenação" role="${course.validationRole}" transactional="true"/> |
<% |
} |
} |
%> |
</div> |
<% |
} |
%> |
</div><!--Degree div End--> |
<% |
} |
/branches/v3/impl/src/web/user/profile/roleGroupRecall.jsp |
---|
New file |
0,0 → 1,30 |
<%@ page import="pt.estgp.estgweb.domain.Course" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %> |
<%@ page import="pt.estgp.estgweb.utils.ConfigProperties" %> |
<%@ page import="java.util.List" %> |
<%@ page import="jomm.dao.impl.AbstractDao" %> |
<%@ 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" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<div class="printRoleGroupRecall"> |
<% |
long courseId = Long.parseLong(request.getParameter("courseId")); |
AbstractDao.getCurrentSession().beginTransaction(); |
Course course = DaoFactory.getCourseDaoImpl().load(courseId); |
request.setAttribute("course",course); |
if(course.getValidationRole() != null && course.getValidationRole().length() > 0) |
{ |
%> |
<bacoTags:printRoleGroup title="Restante Coordenação" role="${course.validationRole}" transactional="true"/> |
<% |
} |
AbstractDao.getCurrentSession().getTransaction().commit(); |
%> |
</div> |