Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1664 → Rev 1667

/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&amp;fromDispatch=loadCoursesPrograms&amp;from=ServiceZone&amp;area="/>
<action path="/user/startLoadDirectedCoordinatedCoursesFromServiceZone" forward="/user/courseControllerFromServiceZone.do?dispatch=loadDirectedCoordininatedCourses&amp;fromDispatch=loadDirectedCoordininatedCourses&amp;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>