Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1814 → Rev 1821

/branches/v3/impl/conf/language/MessageResources.properties
1549,6 → 1549,10
 
courseunitprograms.sincronization=Sincronizando fichas de unidades Curriculares
courseunitprograms.sincronization.terminating=Terminando sincronização de fichas################################################################################
 
 
course.report.tools=Escolha de Curso
course.report.tools.load=Ferramentas de Relatório Curso
#
# INTRANET MESSAGE RESOURCES
#
/branches/v3/impl/conf/WEB-INF/struts/struts-courses.xml
156,7 → 156,15
 
 
 
<!--Ferramenta da Ana Helena Pinto-->
<action path="/user/startStudiesPlanAnalysis" forward="page.studies.plan.analysis"/>
 
<action path="/user/courseReportTools" forward="page.course.report.tools"/>
<action path="/user/loadCourseReportTools" forward="page.course.report.tools.load"/>
 
 
 
 
</action-mappings>
 
</struts-config>
/branches/v3/impl/conf/WEB-INF/struts/tiles-courses.xml
151,4 → 151,19
<put name="body" value="/admin/courses/studiesPLanAnalysis.jsp"/>
</definition>
 
 
 
<definition name="page.course.report.tools" extends="page.separators.home">
<put name="title" value="Comissões de Curso"/>
<put name="topnav" value="/user/courses/topnavCourseReportTools.jsp"/>
<put name="body" value="/user/courses/courseReportTools.jsp"/>
</definition>
 
 
<definition name="page.course.report.tools.load" extends="page.separators.home">
<put name="title" value="Comissões de Curso"/>
<put name="topnav" value="/user/courses/topnavCourseReportToolsLoad.jsp"/>
<put name="body" value="/user/courses/loadCourseReportTools.jsp"/>
</definition>
 
</tiles-definitions>
/branches/v3/impl/src/java/pt/estgp/estgweb/utils/ReflectionHelper.java
New file
0,0 → 1,124
package pt.estgp.estgweb.utils;
 
import org.reflections.Reflections;
import pt.estgp.estgweb.domain.dao.RoleContainer;
 
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Set;
 
/**
* Created by jorgemachado on 16/10/17.
*/
public class ReflectionHelper {
 
 
public static List<Class<?>> findClassesImpmenenting(final Class<?> interfaceClass, final Package fromPackage) {
 
if (interfaceClass == null) {
System.out.println("Unknown subclass.");
return null;
}
 
if (fromPackage == null) {
System.out.println("Unknown package.");
return null;
}
 
final List<Class<?>> rVal = new ArrayList<Class<?>>();
try {
final Class<?>[] targets = getAllClassesFromPackage(fromPackage.getName());
if (targets != null) {
for (Class<?> aTarget : targets) {
if (aTarget == null) {
continue;
}
else if (aTarget.equals(interfaceClass)) {
System.out.println("Found the interface definition.");
continue;
}
else if (!interfaceClass.isAssignableFrom(aTarget)) {
System.out.println("Class '" + aTarget.getName() + "' is not a " + interfaceClass.getName());
continue;
}
else {
rVal.add(aTarget);
}
}
}
}
catch (ClassNotFoundException e) {
System.out.println("Error reading package name.");
e.printStackTrace();
}
catch (IOException e) {
System.out.println("Error reading classes in package.");
e.printStackTrace();
}
 
return rVal;
}
 
/**
* Load all classes from a package.
*
* @param packageName
* @return
* @throws ClassNotFoundException
* @throws IOException
*/
public static Class[] getAllClassesFromPackage(final String packageName) throws ClassNotFoundException, IOException {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
assert classLoader != null;
String path = packageName.replace('.', '/');
Enumeration<URL> resources = classLoader.getResources(path);
List<File> dirs = new ArrayList<File>();
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
dirs.add(new File(resource.getFile()));
}
ArrayList<Class> classes = new ArrayList<Class>();
for (File directory : dirs) {
classes.addAll(findClasses(directory, packageName));
}
return classes.toArray(new Class[classes.size()]);
}
 
/**
* Find file in package.
*
* @param directory
* @param packageName
* @return
* @throws ClassNotFoundException
*/
public static List<Class<?>> findClasses(File directory, String packageName) throws ClassNotFoundException {
List<Class<?>> classes = new ArrayList<Class<?>>();
if (!directory.exists()) {
return classes;
}
File[] files = directory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
assert !file.getName().contains(".");
classes.addAll(findClasses(file, packageName + "." + file.getName()));
}
else if (file.getName().endsWith(".class")) {
classes.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6)));
}
}
return classes;
}
 
public static void main(String[] args)
{
Reflections reflections = new Reflections("pt.estgp.estgweb");
 
Set<Class<? extends RoleContainer>> subTypes = reflections.getSubTypesOf(RoleContainer.class);
System.out.println("aqui");
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/CoursesService.java
1193,12 → 1193,12
ReplaceRoleResult result;
if(c.getValidationRole() == null || c.getValidationRole().trim().length() == 0)
{
result = new UserRoleConfigService().addUpdateRole(newUserRoleConfig,userSession);
result = new UserRoleConfigService().addUpdateRole(newUserRoleConfig,userSession,false);
}
else
{
String oldValidationRole = c.getValidationRole();
result = new UserRoleConfigService().updateOldRoleWithView(oldValidationRole, newUserRoleConfig, userSession);
result = new UserRoleConfigService().updateOldRoleWithView(oldValidationRole, newUserRoleConfig, userSession,false);
}
 
 
/branches/v3/impl/src/java/pt/estgp/estgweb/services/users/UserRoleConfigService.java
1,8 → 1,10
package pt.estgp.estgweb.services.users;
 
import org.apache.log4j.Logger;
import org.reflections.Reflections;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.RoleContainer;
import pt.estgp.estgweb.filters.exceptions.AccessDeniedException;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
11,6 → 13,7
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
 
/**
* Created by jorgemachado on 29/01/16.
55,12 → 58,28
public ReplaceRoleResult updateOldRoleWithView(String oldRole,UserRoleConfigImpl newViewRoleConfig, UserSession sess)
throws AccessDeniedException
{
return updateOldRoleWithView(oldRole, newViewRoleConfig, sess,true);
}
 
public ReplaceRoleResult updateOldRoleWithView(String oldRole,UserRoleConfigImpl newViewRoleConfig, UserSession sess,boolean updateCourses)
throws AccessDeniedException
{
UserRoleConfig oldUserRoleConfig = DaoFactory.getUserRoleConfigDaoImpl().findByRole(oldRole);
newViewRoleConfig.setId(oldUserRoleConfig.getId());
return addUpdateRole(newViewRoleConfig,sess);
if(oldUserRoleConfig == null)
{
return addUpdateRole(newViewRoleConfig,sess,updateCourses);
}
else
{
newViewRoleConfig.setId(oldUserRoleConfig.getId());
return addUpdateRole(newViewRoleConfig,sess,updateCourses);
}
}
 
public ReplaceRoleResult addUpdateRole(UserRoleConfigImpl viewRoleConfig, UserSession sess)
public ReplaceRoleResult addUpdateRole(UserRoleConfigImpl viewRoleConfig, UserSession sess) throws AccessDeniedException {
return addUpdateRole(viewRoleConfig, sess,true);
}
public ReplaceRoleResult addUpdateRole(UserRoleConfigImpl viewRoleConfig, UserSession sess, boolean updateCourseRoles)
throws AccessDeniedException
{
 
70,7 → 89,7
String newRoleStr = viewRoleConfig.getRole().trim();
if(viewRoleConfig.getId() <= 0)
{
replaceRoleResult = replaceOrCreateRoleKey(null, newRoleStr, sess);
replaceRoleResult = replaceOrCreateRoleKey(null, newRoleStr, sess,updateCourseRoles);
if(replaceRoleResult.roleKeyAlreadyExist)
return replaceRoleResult;
persistent = replaceRoleResult.updatedUserRoleConfig;
84,7 → 103,7
{
if(sess.getUser().isSuperuserOrAdmin())
{
replaceRoleResult = replaceOrCreateRoleKey(persistent.getRole(), newRoleStr, sess);
replaceRoleResult = replaceOrCreateRoleKey(persistent.getRole(), newRoleStr, sess,updateCourseRoles);
 
if(replaceRoleResult.roleKeyAlreadyExist)
return replaceRoleResult;
115,6 → 134,18
}
 
 
public static Set<Class<? extends RoleContainer>> roleContainerClasses = null;
private synchronized void init()
{
if(roleContainerClasses == null)
{
Reflections reflections = new Reflections("pt.estgp.estgweb");
 
roleContainerClasses = reflections.getSubTypesOf(RoleContainer.class);
}
}
 
 
/**
* Serviço de nível SUPORTE
* Usado pelo update de Roles e Pela normalização de Roles de Comissões de Curso
127,7 → 158,7
* @return ReplaceRoleResult if roleKeyAlreadyExist = true - nothing was done need to be a none existing new role key
* ReplaceRoleResult.updatedUserRoleConfig tem o role antigo atualizado ou o novo criado com o newRole
*/
public ReplaceRoleResult replaceOrCreateRoleKey(String oldRole, String newRole, UserSession sess)
public ReplaceRoleResult replaceOrCreateRoleKey(String oldRole, String newRole, UserSession sess,boolean updateCourses)
{
ReplaceRoleResult result = new ReplaceRoleResult(newRole);
 
152,39 → 183,33
 
replaceUserRoles(oldRole, newRole, result);
 
replaceCourseRoles(oldRole, newRole, result);
if(updateCourses)
replaceCourseRoles(oldRole, newRole, result);
 
replaceSchoolAndDepartmentRoles(oldRole, newRole, result);
 
replaceEventClasseManagerRoles(oldRole, newRole, result);
init();
for (Class serviceClass : roleContainerClasses) {
System.out.println("Replacing Roles Notification Found: " + serviceClass.getName());
try {
((RoleContainer)serviceClass.newInstance()).replaceRoleNotification(oldRole,newRole,result);
} catch (InstantiationException e) {
logger.error(e,e);
} catch (IllegalAccessException e) {
logger.error(e, e);
}
}
//DaoFactory.getBpmnRoleSelectorDaoImpl().replaceRoleNotification(oldRole, newRole, result);
 
replaceBpmnActorPoolInstancesRoles(oldRole, newRole, result);
//replaceBpmnActorPoolRoles(oldRole, newRole, result);
 
replaceBpmnActorPoolRoles(oldRole, newRole, result);
 
 
}
return result;
}
 
private void replaceBpmnActorPoolInstancesRoles(String oldRole, String newRole, ReplaceRoleResult result) {
List<BpmnActorPoolInstanceImpl> actorPoolInstances = DaoFactory.getBpmnActorPoolInstanceDaoImpl().findByRole(oldRole);
result.afectedActorPoolRolesInstances = actorPoolInstances.size();
for(BpmnActorPoolInstanceImpl actorPoolInstance: actorPoolInstances)
{
actorPoolInstance.replaceRole(oldRole,newRole);
}
}
 
private void replaceBpmnActorPoolRoles(String oldRole, String newRole, ReplaceRoleResult result) {
List<BpmnActorPoolImpl> actorPools = DaoFactory.getBpmnActorPoolDaoImpl().findByRole(oldRole);
result.afectedActorPoolRoles = actorPools.size();
for(BpmnActorPoolImpl actorPool: actorPools)
{
actorPool.replaceRole(oldRole,newRole);
}
}
 
private void replaceEventClasseManagerRoles(String oldRole, String newRole, ReplaceRoleResult result) {
List<EventClass> eventClasses = DaoFactory.getEventClassDaoImpl().findByManagerRole(oldRole);
result.afectedEventClassManagers = eventClasses.size();
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/BpmnActorPoolInstanceDaoImpl.java
1,14 → 1,5
package pt.estgp.estgweb.domain.dao.impl;
 
import pt.estgp.estgweb.domain.BpmnActorPoolInstanceImpl;
import pt.estgp.estgweb.utils.RoleManager;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import static org.hibernate.criterion.Restrictions.like;
 
/**
* Created by jorgemachado on 23/02/17.
*/
21,19 → 12,4
}
 
 
 
public List<BpmnActorPoolInstanceImpl> findByRole(String role)
{
if(role == null || role.trim().length() == 0)
return new ArrayList<BpmnActorPoolInstanceImpl>();
List<BpmnActorPoolInstanceImpl> pools = createCriteria().add(like("domainRolesTxt", "%" + role + RoleManager.ROLE_SEPARATOR + "%")).list();
Iterator<BpmnActorPoolInstanceImpl> iter = pools.iterator();
while(iter.hasNext())
{
BpmnActorPoolInstanceImpl p = iter.next();
if(!p.hasRole(role))
iter.remove();
}
return pools;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseDaoImpl.java
212,7 → 212,7
 
public List<Course> findAllShowStudiesPlanCoursesOrderByNameEvenWithoutCourseUnit(String institutionalCode, String degree)
{
return findAllCoursesOrderByNameEvenWithoutCourseUnit(institutionalCode,degree,true);
return findAllCoursesOrderByNameEvenWithoutCourseUnit(institutionalCode,degree,true,false);
}
 
public List<String> findDegrees(String institutionalCode,boolean showWithStudiesPlanActive)
226,15 → 226,18
return q.list();
}
 
public List<Course> findAllCoursesOrderByNameEvenWithoutCourseUnit(String institutionalCode, String degree,boolean showWithStudiesPlanActive)
public List<Course> findAllCoursesOrderByNameEvenWithoutCourseUnit(String institutionalCode, String degree,boolean showOnlyWithStudiesPlanActive,boolean showOnlyStatusActive)
{
Criteria c = createCriteria();
c.createAlias("department", "d");
c.createAlias("d.courseSchool","sc");
 
if(showWithStudiesPlanActive)
if(showOnlyWithStudiesPlanActive)
c.add(eq("showStudiesPlan", true));
 
if(showOnlyStatusActive)
c.add(eq("status", true));
 
if (degree != null && degree.length() > 0)
c.add(eq("degree", degree));
 
414,11 → 417,10
/**
* Return only courses if user is from CourseCommission or Coordinator or have role Globals.SERVICES_PROGRAMS_ROLE
* otherwise return null;
* @param importYear
* @param u
* @return
*/
public List<Course> findActiveCoursesCoordinationsOrCommissions(String importYear,User u)
public List<Course> findActiveCoursesCoordinationsOrCommissions(User u)
{
Criteria cri = getCriteriaForComissionsAndCoordinationsOr(u);
if(cri == null)
507,7 → 509,7
public static void main(String[] args) throws SQLException {
AbstractDao.getCurrentSession().beginTransaction();
List t2 = new CourseDaoImpl().findDegrees("1",true);
List t = new CourseDaoImpl().findAllCoursesOrderByNameEvenWithoutCourseUnit("1", "L", true);
List t = new CourseDaoImpl().findAllCoursesOrderByNameEvenWithoutCourseUnit("1", "L", true,true);
t2 = new CourseDaoImpl().findAllOrderByName("201516","td","L","1");
 
System.out.println(t.size());
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/BpmnRoleSelectorDaoImpl.java
New file
0,0 → 1,53
package pt.estgp.estgweb.domain.dao.impl;
 
import pt.estgp.estgweb.domain.BpmnRoleSelectorImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.RoleContainer;
import pt.estgp.estgweb.services.users.ReplaceRoleResult;
import pt.estgp.estgweb.utils.RoleManager;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import static org.hibernate.criterion.Restrictions.like;
 
/**
* Created by jorgemachado on 23/02/17.
*/
public class BpmnRoleSelectorDaoImpl extends BpmnRoleSelectorDao implements RoleContainer
{
public static BpmnRoleSelectorDaoImpl getInstance() {
if (myInstance == null)
myInstance = new BpmnRoleSelectorDaoImpl();
return (BpmnRoleSelectorDaoImpl) myInstance;
}
 
 
 
public List<BpmnRoleSelectorImpl> findByRole(String role)
{
if(role == null || role.trim().length() == 0)
return new ArrayList<BpmnRoleSelectorImpl>();
List<BpmnRoleSelectorImpl> roleSelectors = createCriteria().add(like("role", "%" + role + RoleManager.ROLE_SEPARATOR + "%")).list();
Iterator<BpmnRoleSelectorImpl> iter = roleSelectors.iterator();
while(iter.hasNext())
{
BpmnRoleSelectorImpl p = iter.next();
if(!p.hasRole(role))
iter.remove();
}
return roleSelectors;
}
 
public void replaceRoleNotification(String oldRole, String newRole, ReplaceRoleResult result) {
 
 
List<BpmnRoleSelectorImpl> bpmnRoleSelectors = DaoFactory.getBpmnRoleSelectorDaoImpl().findByRole(oldRole);
result.afectedActorPoolRolesInstances = bpmnRoleSelectors.size();
for(BpmnRoleSelectorImpl bpmnRoleSelector: bpmnRoleSelectors)
{
bpmnRoleSelector.replaceRole(oldRole,newRole);
}
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitDaoImpl.java
550,6 → 550,8
* @param semestre
* @param year
* @return List<CourseUnitResult>
*
* todo ver esta para fazer um load courseunits de um curso dado o ano e o semestre
*/
public List<CourseUnitResult> loadCourseUnits(long courseId, String semestre, String year)
{
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/RoleContainer.java
New file
0,0 → 1,11
package pt.estgp.estgweb.domain.dao;
 
import pt.estgp.estgweb.services.users.ReplaceRoleResult;
 
/**
* Created by jorgemachado on 16/10/17.
*/
public interface RoleContainer
{
public void replaceRoleNotification(String oldRole, String newRole, ReplaceRoleResult result);
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/DaoFactory.java
615,4 → 615,8
public static BpmnFlowComponentDao getBpmnFlowComponentDaoImpl() {
return BpmnFlowComponentDao.getInstance();
}
 
public static BpmnRoleSelectorDaoImpl getBpmnRoleSelectorDaoImpl() {
return BpmnRoleSelectorDaoImpl.getInstance();
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/TeacherImpl.java
2,6 → 2,7
 
import jomm.utils.StringsUtils;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.utils.Globals;
import pt.estgp.estgweb.utils.RoleManager;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
309,7 → 310,12
return StringsUtils.hasElement(getLocalTeachedUnits(),""+unit.getId(),",");
}
 
 
/**
*
* @return all roles type course comission from user roles and validationRoles from coordinated courses
* where user is main coordinator
* APENAS CURSOS ATIVOS STATUS = TRUE
*/
public List<String> obtainCourseComissionsAndCoordinationsRoles()
{
List<String> comissionsRoles = new ArrayList<String>();
320,15 → 326,33
}
for(Course coordinated : getCoordinatorCourses())
{
if(coordinated.getValidationRole() != null && coordinated.getValidationRole().trim().length() > 0)
if(coordinated.isStatus() && coordinated.getValidationRole() != null && coordinated.getValidationRole().trim().length() > 0)
{
if(!comissionsRoles.contains(coordinated.getValidationRole()))
comissionsRoles.add(coordinated.getValidationRole());
}
}
//System.out.println("Roles for: " + getName());
/*for(String role: comissionsRoles)
{
System.out.println(role);
}*/
return comissionsRoles;
}
 
 
/**
*
* @return all courses comission from user roles and validationRoles from coordinated courses
* where user is main coordinator
* @require opened transaction
* todo usar isto para obter coordenações
*/
public List<Course> obtainCourseComissionsAndCoordinations()
{
return DaoFactory.getCourseDaoImpl().findActiveCoursesCoordinationsOrCommissions(this);
}
 
public boolean hasCoordinationsOrBelongToCourseCommissions()
{
return obtainCourseComissionsAndCoordinationsRoles().size() > 0;
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/BpmnRoleSelectorImpl.java
1,7 → 1,38
package pt.estgp.estgweb.domain;
 
import pt.estgp.estgweb.utils.RoleManager;
 
/**
* Created by jorgemachado on 13/06/17.
*/
public class BpmnRoleSelectorImpl extends BpmnRoleSelector {
public class BpmnRoleSelectorImpl extends BpmnRoleSelector
{
public boolean hasRole(String r)
{
if(getRole()!=null)
return RoleManager.hasRole(RoleManager.getRolesFromSerial(getRole()), r);
return false;
/*
if (r == null || getSelectorRole() == null || getSelectorRole().getRoles() == null || getSelectorRole().getRoles().size() == 0)
return false;
for (DomainRoleProxy role : getSelectorRole().getRoles())
{
if (role.getRole().equals(r))
return true;
}
return false;
*/
}
 
public void replaceRole(String oldRole,String newRole)
{
 
if (oldRole == null || newRole == null)
return;
 
String role = RoleManager.removeRole(getRole(),oldRole);
setRole(RoleManager.addRole(role,newRole));
 
}
 
}
/branches/v3/impl/src/web/admin/bpmn/processEditor.jsp
7,7 → 7,6
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ page import="jomm.dao.impl.AbstractDao" %>
<%@ page import="pt.estgp.estgweb.domain.*" %>
<%@ page import="pt.estgp.estgweb.domain.bpmn.*" %>
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ page import="pt.estgp.estgweb.web.filters.UserRoleProxy" %>
<%@ page import="pt.estgp.estgweb.domain.bpmn.utils.TaskConstantVariablesUtils" %>
/branches/v3/impl/src/web/user/courses/topnavCourseReportTools.jsp
New file
0,0 → 1,12
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.util.*"%>
<%@ page import="jomm.web.utils.NavPlace" %>
<%@ page import="jomm.web.utils.NavPlaceServer" %>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace(null, "course.report.tools");
%>
<jsp:include page="/layout/topnav.jsp"/>
Property changes:
Added: svn:executable
+ *
/branches/v3/impl/src/web/user/courses/topnavCourseReportToolsLoad.jsp
New file
0,0 → 1,13
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.util.*"%>
<%@ page import="jomm.web.utils.NavPlace" %>
<%@ page import="jomm.web.utils.NavPlaceServer" %>
<%@ page import="jomm.web.utils.TopNav" %>
<%
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request);
topNav.addNavPlace("/user/startHome.do", "intranet.separator.home.back");
topNav.addNavPlace("/user/courseReportTools.do", "course.report.tools");
topNav.addNavPlace(null, "course.report.tools.load");
%>
<jsp:include page="/layout/topnav.jsp"/>
Property changes:
Added: svn:executable
+ *
/branches/v3/impl/src/web/user/courses/courseReportTools.jsp
New file
0,0 → 1,50
<%@ page import="jomm.dao.impl.AbstractDao" %>
<%@ page import="pt.estgp.estgweb.domain.Course" %>
<%@ page import="pt.estgp.estgweb.domain.TeacherImpl" %>
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ 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 uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSessionImpl" scope="request"/>
 
 
<div class="panel panel-default">
<div class="panel-headding">Coordenações de Curso</div>
<div class="panel-body">
 
 
<%
AbstractDao.getCurrentSession().beginTransaction();
 
TeacherImpl tImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().get(UserSession.getUser().getId());
 
List<Course> courses = tImpl.obtainCourseComissionsAndCoordinations();
 
String importYear = request.getParameter("importYear");
request.setAttribute("importYear",importYear);
for(Course course: courses)
{
if(course.isStatus())
{
request.setAttribute("course",course);
%>
<div class="col-md-6">
<html:link styleClass="btn btn-default btn-lg btn-block btn-huge" action="/user/loadCourseReportTools?courseId=${course.id}&importYear=${importYear}">
<span class="glyphicon glyphicon-wrench"></span> ${course.code} - <bean:message key="course.${course.degree}"/> - ${course.name}
</html:link>
</div>
 
<%
}
}
 
AbstractDao.getCurrentSession().getTransaction().commit();
%>
</div>
</div>
/branches/v3/impl/src/web/user/courses/loadCourseReportTools.jsp
New file
0,0 → 1,268
<%@ page import="jomm.dao.impl.AbstractDao" %>
<%@ page import="org.hibernate.Criteria" %>
<%@ page import="org.hibernate.criterion.Order" %>
 
<%@ page import="org.hibernate.criterion.Projections" %>
<%@ page import="pt.estgp.estgweb.domain.Course" %>
<%@ page import="pt.estgp.estgweb.domain.CourseUnit" %>
<%@ page import="pt.estgp.estgweb.domain.TeacherImpl" %>
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ page import="static org.hibernate.criterion.Restrictions.eq" %>
<%@ page import="java.util.List" %>
<%@ 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" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSessionImpl" scope="request"/>
 
<%
Long courseId = Long.parseLong(request.getParameter("courseId"));
String importYear = request.getParameter("importYear");
 
AbstractDao.getCurrentSession().beginTransaction();
 
TeacherImpl tImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().get(UserSession.getUser().getId());
Course courseImpl = DaoFactory.getCourseDaoImpl().get(courseId);
 
request.setAttribute("course",courseImpl);
 
%>
<div class="panel panel-default">
<div class="panel-heading"><span class="glyphicon glyphicon-wrench"></span> ${course.code} - <bean:message key="course.${course.degree}"/> - ${course.name}</div>
<div class="panel-body">
 
 
<h2>DTP</h2>
 
<table class="tablesorter tablesorterfiltered">
<thead>
<tr>
<th>Cod.</th>
<th class="filter-name filter-select">Sem.</th>
<th>Nome</th>
 
 
<th>Sums</th>
<th>Sums Pre</th>
<th>Sums Falt</th>
 
<th>Plan</th>
<th class="filter-name filter-select">Ficha</th>
<th>Aval.Enu</th>
<th>Aval.Paut</th>
<th class="filter-name filter-select">Relat.</th>
<th class="filter-name filter-select">Pedag.</th>
<th class="filter-name filter-select">Detalhes</th>
 
 
 
</tr>
</thead>
<tbody>
 
<%
 
Criteria c = AbstractDao.getCurrentSession().createCriteria(CourseUnit.class)
.setProjection(Projections.distinct(Projections.property("id")))
.createAlias("course", "c")
.add(eq("importYear", importYear))
.add(eq("c.id", courseId));
c.addOrder(Order.asc("name"));
List<Long> courseUnits = c.list();
for(Long unit: courseUnits)
{
Long unitId = unit;
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().load(unitId);
request.setAttribute("cu",cu);
%>
<tr>
<td>${cu.code}</td>
<td>${cu.semestre}</td>
<td><html:link target="_blank" action="/user/startLoadCourseUnitFromHome?id=${cu.id}"> ${cu.name}</html:link></td>
<td>${cu.statdtpSumaries}</td>
<td>${cu.statdtpSumariesPrelancados}</td>
<td>${cu.statdtpSumariesMissing}</td>
<td>${cu.statdtpPlaneamentoFiles}</td>
<td><bean:message key="yes.no.${cu.statdtpFichaCurricularValid}"/></td>
<td>${cu.statdtpAvaliacaoEnunciadosFiles}</td>
<td>${cu.statdtpAvaliacaoPautasFiles}</td>
<td>${cu.statdtpEvaluationReportState}</td>
<td>${cu.statdtpInqueritoPedagogicoFiles}</td>
<td><button class="btn btn-default" data-href="<%=request.getContextPath()%>/user/courseunits/statsAjax.jsp?courseUnitId=${cu.id}" data-title="Estatisticas da Unidade ${cu.name} (${cu.code})" data-toggle="modal" data-target="#modalAjaxRequest"><span class="glyphicon glyphicon-zoom-in"/></button> </td>
</tr>
<%
}
 
%>
 
</tbody>
</table>
 
<h2>Tabela de Aproveitamento baseada nos Relatorios de Unidades</h2>
 
<table class="tablesorter tablesorterfiltered">
<thead>
<tr>
<th>Cod.</th>
<th class="filter-name filter-select">Sem.</th>
<th>Nome</th>
<td> Estado </td>
<td> Insc. </td>
<td> s/elem </td>
<td> aprov. freq. </td>
<td> aprov. norm. </td>
<td> aprov. recu. </td>
<td> aprov. espe. </td>
<td> aprov. total </td>
<td> 10-13 </td>
<td> 14-16 </td>
<td> 17-20 </td>
</tr>
</thead>
<tbody>
<%
for(Long unit: courseUnits)
{
Long unitId = unit;
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().load(unitId);
request.setAttribute("cu",cu);
%>
<tr>
<%
if(cu.getCourseUnitEvaluation() != null)
{
 
String estado;
if(cu.getCourseUnitEvaluation().isClosed())
{
estado = "COMPLETO";
}else if(cu.getCourseUnitEvaluation().isTeacherComplete())
{
estado = "ENTREGUE";
}else
{
estado = "NÃO TERMINADO";
}
%>
<td> ${cu.code} </td>
<td> ${cu.semestre} </td>
<%--<td><html:link target="_blank" action="/user/startLoadCourseUnitFromHome?id=${cu.id}"> ${cu.name}</html:link></td>--%>
<td><a href="#cu${cu.id}"> ${cu.name}</a></td>
<td> <%=estado%> </td>
<td> ${cu.courseUnitEvaluation.numAlunosInscritos} </td>
<td> ${cu.courseUnitEvaluation.numAlunosSemElementosAvaliacao} </td>
<td> ${cu.courseUnitEvaluation.numAlunosAprovFrequencia} </td>
<td> ${cu.courseUnitEvaluation.numAlunosAprovNormal} </td>
<td> ${cu.courseUnitEvaluation.numAlunosAprovRecurso} </td>
<td> ${cu.courseUnitEvaluation.numAlunosAprovEspecial} </td>
<td> ${cu.courseUnitEvaluation.numAlunosAprovTotal} </td>
<td> ${cu.courseUnitEvaluation.numAlunosAprov1013} </td>
<td> ${cu.courseUnitEvaluation.numAlunosAprov1416} </td>
<td> ${cu.courseUnitEvaluation.numAlunosAprov1720} </td>
 
 
<%
}
else
{
%>
<td> ${cu.code} </td>
<td> ${cu.semestre} </td>
<td> ${cu.name} </td>
<td class="danger" colspan="11">INEXISTENTE</td>
 
<%
}
%>
</tr>
<%
}
 
 
 
%>
</tbody>
</table>
 
 
<h2>Relatórios das Unidades</h2>
<%
for(Long unit: courseUnits)
{
Long unitId = unit;
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().load(unitId);
request.setAttribute("cu",cu);
 
%>
 
<a name="cu${cu.id}"> </a>
<div class="panel panel-info">
<div class="panel-heading">${cu.name} (${cu.semestre})</div>
<div class="panel-body">
 
 
<%
if(cu.getCourseUnitEvaluation() != null)
{
String estado;
if(cu.getCourseUnitEvaluation().isClosed())
{
estado = "COMPLETO";
}
else if(cu.getCourseUnitEvaluation().isTeacherComplete())
{
estado = "ENTREGUE";
}
else
{
estado = "NÃO TERMINADO";
}
%>
<p>Estado: <%=estado%></p>
<h4>Apreciação dos resultados quantitativos obtidos pelos estudantes</h4>
<pre>
${cu.courseUnitEvaluation.qualApreciacaoQuantitivos}
</pre>
<h4>Apreciação do funcionamento da UC
(Condições de funcionamento da UC; problemas detetados; identificação de práticas pedagógicas de mérito ou deficientes; etc.) </h4>
<pre>
${cu.courseUnitEvaluation.qualApreciacaoUC}
</pre>
<h4>Apreciação do cumprimento do programa da UC
(Adequação das metodologias de ensino/aprendizagem utilizadas; competências efetivamente adquiridas e cumprimento dos conteúdos planificados) </h4>
<pre>
${cu.courseUnitEvaluation.qualApreciacaoCumprimentoPrograma}
</pre>
<h4>Conclusões
(Pontos fortes e fracos; sugestões de melhoria e respetivo plano de ação para a sua concretização) </h4>
<pre>
${cu.courseUnitEvaluation.qualConclusoes}
</pre>
<%
}
else
{
%>
<p>Estado: INEXISTENTE</p>
<%
}
%>
 
</div>
</div>
<%
}
%>
 
 
</div>
</div>
 
 
<%
AbstractDao.getCurrentSession().getTransaction().commit();
%>
/branches/v3/impl/src/web/user/courseunits/courseCourseunitsStatistics.jsp
23,9 → 23,10
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSessionImpl" scope="request"/>
 
<%
AbstractDao.getCurrentSession().beginTransaction();
String all = request.getParameter("all");
String importYear = request.getParameter("importYear");
AbstractDao.getCurrentSession().beginTransaction();
//AbstractDao.getCurrentSession().beginTransaction();
if(importYear == null)
importYear = UserSession.getNowConfiguration().getInterfaceImportYear();
 
42,9 → 43,9
if(UserSession.getUser().isSuperuserOrAdmin() || UserSession.getUser().hasRole(Globals.SERVICES_PROGRAMS_ROLE) || UserSession.getUser().hasRole("services"))
{
allCourses = true;
AbstractDao.getCurrentSession().beginTransaction();
 
 
 
Criteria c = AbstractDao.getCurrentSession().createCriteria(CourseUnit.class)
.setProjection(Projections.projectionList().add(Projections.groupProperty("c.validationRole"))
.add(Projections.property("c.id")).add(Projections.property("c.name")).add(Projections.property("c.code")))
52,7 → 53,7
//.add(eq("importYear", importYear))
;
List<Object[]> validationRoles = c.list();
AbstractDao.getCurrentSession().getTransaction().commit();
 
comissionsRoles = new ArrayList<String>();
 
%>
92,9 → 93,9
%>
</div>
<%
}
else
{
}
else
{
 
User persistentUser = DaoFactory.getUserDaoImpl().narrow(DaoFactory.getUserDaoImpl().get(UserSession.getUser().getId()));
comissionsRoles = new ArrayList<String>();
147,8 → 148,8
<%
try
{
AbstractDao.getCurrentSession().beginTransaction();
 
 
if(all == null)
{
%>
225,6 → 226,7
.add(Projections.property("c.name"))
.add(Projections.property("c.code")))
.createAlias("course", "c")
.add(eq("c.status", true))
.add(eq("importYear", importYear))
.add(eq("c.validationRole", roleCourse));
List<Object[]> coursesForRole = c.list();
304,7 → 306,8
</tr>
</thead>
<tbody>
<%
 
<%
}
for(Long unit: courseUnits)
{
338,6 → 341,7
<td><button class="btn btn-default" data-href="<%=request.getContextPath()%>/user/courseunits/statsAjax.jsp?courseUnitId=${cu.id}" data-title="Estatisticas da Unidade ${cu.name} (${cu.code})" data-toggle="modal" data-target="#modalAjaxRequest"><span class="glyphicon glyphicon-zoom-in"/></button> </td>
</tr>
<%
AbstractDao.getCurrentSession().evict(cu);
}
 
if(all == null)
368,7 → 372,7
</table>
<%
}
AbstractDao.getCurrentSession().getTransaction().commit();
 
}
catch(Exception e)
{
/branches/v3/impl/src/web/user/home/teacher.jsp
193,6 → 193,10
<div class="list-group-item">
<html:link action="/user/startLoadCoursesProgramsFromHome?importYear=${UserSession.nowConfiguration.previousInterfaceImportYear}&forUser=courseCommission">Atalho para as validações (${UserSession.nowConfiguration.previousInterfaceImportYear})</html:link>
</div>
 
<div class="list-group-item">
<html:link action="/user/courseReportTools?importYear=${UserSession.nowConfiguration.previousInterfaceImportYear}">Utilitários do Relatório de Curso (${UserSession.nowConfiguration.previousInterfaceImportYear})</html:link>
</div>
</div>
<!--</li>
</ul>-->
/branches/v3/impl/src/web/user/profile/rolesCoordenacoes.jsp
13,6 → 13,7
<%
boolean showAllCourses = request.getParameter("showAllCourses") != null ? Boolean.parseBoolean(request.getParameter("showAllCourses")) : false;
boolean showWithStudiesPlanActive = ! showAllCourses;
boolean showStatusActive = !showAllCourses;
List<String> institutionCodes = ConfigProperties.getListValues("institution.code.prefix.inverse.");
%>
<script>
53,7 → 54,7
}
</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>
<p>Nesta listagem apenas são mostrados os Cursos ativos no PAE, 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-->
106,7 → 107,7
 
<div class="degree" id="degree<%=degree%>" style="display: none">
<%
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllCoursesOrderByNameEvenWithoutCourseUnit(instCode,degree,showWithStudiesPlanActive);
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllCoursesOrderByNameEvenWithoutCourseUnit( instCode,degree,false,showStatusActive);
for(Course course: courses)
{
request.setAttribute("course",course);
182,6 → 183,9
<div class="web-messages"> </div>
</div>
</div>
<div>
<p>Activo: ${course.status} / Visivel no Site IPP: ${course.showStudiesPlan}</p>
</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"/>
/branches/v3/impl/src/web/user/contacts/listCourseComissionStudents.jsp
65,7 → 65,7
.add(Projections.property("course.code")))
.createAlias("subscribedUnits", "su")
.createAlias("su.course", "course")
.add(eq("su.importYear", "201516"))
.add(eq("su.importYear", UserSession.getNowConfiguration().getInterfaceImportYear()))
.add(eq("course.validationRole", roleCourse))
;
c.addOrder(Order.asc("name"));
/branches/v3/impl/libs.xml
120,6 → 120,10
<include name="**/*.jar"/>
</fileset>
 
<fileset dir="${common.lib.dir}/reflections">
<include name="**/*.jar"/>
</fileset>
 
</path>
 
<path id="pathToAntLibs">
/branches/v3/impl/build.xml
311,6 → 311,11
<include name="**/*.jar"/>
</fileset>
 
<fileset dir="${common.lib.dir}/reflections">
<include name="**/*.jar"/>
</fileset>
 
 
</copy>
<copy file="${dist.dir}/estgweb.jar" todir="${build.dir.war}/WEB-INF/lib"/>
<copy todir="${build.dir.war}/WEB-INF" overwrite="true">
/branches/v3/impl/gen/java/pt/estgp/estgweb/domain/BpmnFlowObject.java
File deleted
/branches/v3/common/reflections/guava-15.0.jar
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/v3/common/reflections/annotations-2.0.1.jar
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/v3/common/reflections/javassist-3.19.0-GA.notNeeded
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/v3/common/reflections/reflections-0.9.10.jar
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream