Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 344 → Rev 345

/impl/conf/language/MessageResourcesCourse.properties
50,6 → 50,9
course.coordinated.courses=Cursos que coordena
course.unit.directed=Unidades Curriculares
course.unit.coordinated=Unidades Coordenadas
course.program.courses=Programas Curriculares por Curso
course.program.coordinated.directed.courses=Programas Curriculares dos Cursos Coordenados e/ou dirigidos
course.program.courses.choose.year=Escolha o ano que deseja consultar
 
 
 
/impl/conf/language/MessageResourcesCourseUnits.properties
92,9 → 92,10
 
 
backups=Cópias de Segurança
courseunits.backups=Criar cópia de Segurança de todos os trabalhos entregues em todos os cursos
courseunits.actual.year.backup=Trabalhos entregues este ano
courseunits.all.backup=Todos os trabalhos entregues
courseunits.backups=Criar cópia de Segurança de todos das Unidades Curriculares em todos os cursos
courseunits.backups.actual.year=Criar cópia de Segurança (apenas do ano corrente) de todos das Unidades Curriculares em todos os cursos
courseunits.actual.year.backup=Backup do ano corrente
courseunits.all.backup=Backup de todos os anos (Este serviço pode demorar alguns minutos a executar)
 
 
 
/impl/conf/WEB-INF/struts/struts-courses.xml
34,6 → 34,8
<forward name="load" path="page.load.course"/>
</action>
 
<action path="/user/startLoadCoursesProgramsFromServiceZone" forward="/user/courseControllerFromHome.do?dispatch=loadCoursesPrograms&amp;fromDispatch=loadCoursesPrograms&amp;from=ServiceZone"/>
<action path="/user/startLoadDirectedCoordinatedCoursesFromServiceZone" forward="/user/courseControllerFromHome.do?dispatch=loadDirectedCoordininatedCourses&amp;fromDispatch=loadDirectedCoordininatedCourses&amp;from=ServiceZone"/>
<action path="/user/startSelectCourseFromServiceZone" forward="page.select.course.from.service.zone"/>
<action path="/user/startEditCourseFromServiceZone" forward="/user/courseControllerFromServiceZone.do?dispatch=edit&amp;from=ServiceZone"/>
<action path="/user/startNewCourseFromServiceZone" forward="/user/courseControllerFromServiceZone.do?dispatch=startNew&amp;from=ServiceZone"/>
46,10 → 48,13
validate="false"
input="page.separators.serviceZone">
<forward name="submit" path="page.submit.course.from.service.zone"/>
<forward name="load.courses.programs" path="page.courses.programs.from.service.zone"/>
<forward name="load.directed.coordinated.courses" path="page.directed.coordinated.courses.from.service.zone"/>
<forward name="confirm.courses.programs" path="page.separators.serviceZone"/>
</action>
 
<action path="/user/startLoadCoursesProgramsFromHome" forward="/user/courseControllerFromHome.do?dispatch=loadCoursesPrograms&amp;from=Home"/>
<action path="/user/startLoadDirectedCoordinatedCoursesFromHome" forward="/user/courseControllerFromHome.do?dispatch=loadDirectedCoordininatedCourses&amp;from=Home"/>
<action path="/user/startLoadCoursesProgramsFromHome" forward="/user/courseControllerFromHome.do?dispatch=loadCoursesPrograms&amp;fromDispatch=loadCoursesPrograms&amp;from=Home"/>
<action path="/user/startLoadDirectedCoordinatedCoursesFromHome" forward="/user/courseControllerFromHome.do?dispatch=loadDirectedCoordininatedCourses&amp;fromDispatch=loadDirectedCoordininatedCourses&amp;from=Home"/>
<action path="/user/courseControllerFromHome"
type="pt.estgp.estgweb.web.controllers.courses.CoursesController"
name="CourseForm"
59,11 → 64,13
input="page.separators.serviceZone">
<forward name="load.courses.programs" path="page.courses.programs.from.home"/>
<forward name="load.directed.coordinated.courses" path="page.directed.coordinated.courses.from.home"/>
<forward name="home" path="page.separators.home"/>
<forward name="confirm.courses.programs" path="page.separators.home"/>
</action>
 
 
 
 
 
</action-mappings>
 
</struts-config>
/impl/conf/WEB-INF/struts/tiles-courses.xml
32,6 → 32,16
<put name="topnav" value="/user/serviceZone/topnavSubmitCourse.jsp"/>
<put name="body" value="/admin/courses/course.jsp"/>
</definition>
<definition name="page.courses.programs.from.service.zone" extends="page.separators.serviceZone">
<put name="title" value="Ver Programas de Unidades"/>
<put name="topnav" value="/user/serviceZone/topnavCoursesPrograms.jsp"/>
<put name="body" value="/user/courses/directedCoordinatedCourses.jsp"/>
</definition>
<definition name="page.directed.coordinated.courses.from.service.zone" extends="page.separators.serviceZone">
<put name="title" value="Ver Cursos e Unidades"/>
<put name="topnav" value="/user/serviceZone/topnavDirectedCoordinatedCourses.jsp"/>
<put name="body" value="/user/courses/directedCoordinatedCourses.jsp"/>
</definition>
 
 
<definition name="page.directed.coordinated.courses.from.home" extends="page.separators.home">
45,6 → 55,7
<put name="body" value="/user/courses/directedCoordinatedCourses.jsp"/>
</definition>
 
 
 
 
/impl/conf/berserk/sd.xml
857,6 → 857,17
</filterChains>
</service>
<service>
<name>LoadCoursesImportYears</name>
<implementationClass>pt.estgp.estgweb.services.courses.CoursesService</implementationClass>
<description>Load import years</description>
<isTransactional>true</isTransactional>
<defaultMethod>loadImportYears</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
</filterChains>
</service>
<service>
<name>UpdateDirectedCoordinatedCoursesForUserInSession</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.DirectedCoordinatedUnitsService</implementationClass>
<description>Load coordinated directed courses</description>
997,7 → 1008,7
<implementationClass>pt.estgp.estgweb.services.courseunits.CreateCourseUnitWorksBackupService</implementationClass>
<description>Create a zip file with Intranet folders</description>
<isTransactional>true</isTransactional>
<defaultMethod>createSystemActualYearBackup</defaultMethod>
<defaultMethod>createSystemBackup</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
1005,6 → 1016,18
</filterChains>
</service>
<service>
<name>CreateImportYearCourseUnitWorksBackup</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CreateCourseUnitWorksBackupService</implementationClass>
<description>Create a zip file with Intranet folders</description>
<isTransactional>true</isTransactional>
<defaultMethod>createSystemImportYearBackup</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="Admins"/>
</filterChains>
</service>
<service>
<name>CreateUserActualYearCourseUnitWorksBackup</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CreateCourseUnitWorksBackupService</implementationClass>
<description>Create a zip file with deliverables</description>
1016,6 → 1039,17
</filterChains>
</service>
<service>
<name>CreateUserImportYearCourseUnitWorksBackup</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CreateCourseUnitWorksBackupService</implementationClass>
<description>Create a zip file with deliverables</description>
<isTransactional>true</isTransactional>
<defaultMethod>createImportYearBackup</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
</filterChains>
</service>
<service>
<name>CreateUserAllCourseUnitWorksBackup</name>
<implementationClass>pt.estgp.estgweb.services.courseunits.CreateCourseUnitWorksBackupService</implementationClass>
<description>Create a zip file with Intranet folders</description>
/impl/src/java/pt/estgp/estgweb/utils/DatesUtils.java
86,6 → 86,18
return getFormatedImportYear(firstYearStr,secondYearStr,SIGES_importFinalFormatIntranet);
}
 
public static String getImportYearIntranet(String importYear)
{
String decadeStr = importYear.substring(0,2);
if(importYear.substring(4,6).equals("00"))
{
String decade = importYear.substring(0,2);
int nextdecade= Integer.parseInt(decade)+1;
decadeStr = "" + nextdecade;
}
return getFormatedImportYear(importYear.substring(0,4),decadeStr+importYear.substring(4,6),SIGES_importFinalFormatIntranet);
}
 
public static String getFormatedImportYear(String firstYearStr, String secondYearStr, MessageFormat finalFormat)
{
String[] years = {firstYearStr,secondYearStr};
/impl/src/java/pt/estgp/estgweb/services/courses/CoursesService.java
68,6 → 68,17
return null;
}
 
public List<String> loadImportYears(UserSession userSession) throws ServiceException
{
List<String> importYears = DaoFactory.getCourseDaoImpl().loadImportYears();
List<String> imStrings = new ArrayList<String>();
for(String importYear: importYears)
{
imStrings.add(importYear);
}
return imStrings;
}
 
public CourseView loadCourseByCode(String code, boolean initUnits) throws ServiceException
{
Course c = DaoFactory.getCourseDaoImpl().findCourseByCode(code);
/impl/src/java/pt/estgp/estgweb/services/courseunits/DirectedCoordinatedUnitsService.java
1,9 → 1,8
package pt.estgp.estgweb.services.courseunits;
 
import pt.estgp.estgweb.domain.Course;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.domain.views.CourseView;
13,7 → 12,6
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
import java.util.List;
 
/**
23,16 → 21,17
*/
public class DirectedCoordinatedUnitsService implements IService
{
public DirectedCoordinatedCourses loadForUserSession(UserSession userSession)
public DirectedCoordinatedCourses loadForUserSession(String importYear, UserSession userSession)
{
return loadForUser(userSession.getUser().getId(), userSession);
return loadForUser(userSession.getUser().getId(),importYear, userSession);
}
 
public DirectedCoordinatedCourses loadForUser(long teacherId, UserSession userSession)
public DirectedCoordinatedCourses loadForUser(long teacherId, String importYear, UserSession userSession)
{
Teacher t = DaoFactory.getTeacherDaoImpl().load(teacherId);
Set<Course> directorCourses = t.getDirectorCourses();
Set<Course> coordinatorCourses = t.getCoordinatorCourses();
if(importYear == null)
importYear = DatesUtils.getImportYear();
List<Course> directorCourses = DaoFactory.getCourseDaoImpl().loadDirectorCourses(teacherId,importYear);
List<Course> coordinatorCourses = DaoFactory.getCourseDaoImpl().loadCoordinatedCourses(teacherId,importYear);
 
HashMap<Course, Boolean> map = new HashMap<Course, Boolean>();
 
65,9 → 64,11
return directedCoordinatedCourses;
}
 
public DirectedCoordinatedCourses loadForServices(UserSession userSession)
public DirectedCoordinatedCourses loadForServices(String importYear, UserSession userSession)
{
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByName(DatesUtils.getImportYear());
if(importYear == null)
importYear = DatesUtils.getImportYear();
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByName(importYear);
 
List<CourseView> courseViews = new ArrayList<CourseView>();
for(Course c : courses)
/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitXML.java
New file
0,0 → 1,188
package pt.estgp.estgweb.services.courseunits;
 
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.utils.Dom4jUtil;
import pt.estgp.estgweb.web.utils.DatesUtils;
 
import java.io.IOException;
import java.io.File;
 
/**
* @author Jorge Machado
* @date 23/Out/2008
* @see pt.estgp.estgweb.services.data
*/
public class CreateCourseUnitXML
{
private static final Logger logger = Logger.getLogger(CreateCourseUnitXML.class);
 
public void run(String toFile, CourseUnit courseUnit, UserSession userSession)
{
Document dom = run(courseUnit,userSession);
try
{
new File(toFile).getParentFile().mkdirs();
Dom4jUtil.write(dom,toFile);
}
catch (IOException e)
{
logger.error(e,e);
}
}
 
public Document run(CourseUnit courseUnit, UserSession userSession)
{
org.dom4j.Document dom = DocumentFactory.getInstance().createDocument();
Element rootElement = DocumentFactory.getInstance().createElement("courseUnit");
dom.setRootElement(rootElement);
rootElement.addAttribute("id", "" + courseUnit.getId());
rootElement.addAttribute("importYear", "" + courseUnit.getImportYear());
rootElement.addAttribute("institutionCode", "" + courseUnit.getInstitutionCode());
 
Element saveDate = DocumentFactory.getInstance().createElement("saveDate");
saveDate.setText(""+ DatesUtils.getStringFromDateForFilename(courseUnit.getSaveDate()));
 
Element updateDate = DocumentFactory.getInstance().createElement("updateDate");
updateDate.setText(""+ DatesUtils.getStringFromDateForFilename(courseUnit.getUpdateDate()));
 
Element name = DocumentFactory.getInstance().createElement("name");
name.setText("" + courseUnit.getName());
 
Element courseName = DocumentFactory.getInstance().createElement("courseName");
name.setText("" + courseUnit.getCourseName());
rootElement.add(saveDate);
rootElement.add(name);
rootElement.add(courseName);
 
if(courseUnit.getObjectives() != null)
{
Element objectives = DocumentFactory.getInstance().createElement("objectives");
objectives.setText(courseUnit.getObjectives());
rootElement.add(objectives);
}
 
if(courseUnit.getTeachers() != null)
{
Element teachers = DocumentFactory.getInstance().createElement("teachers");
teachers.addAttribute("number",""+courseUnit.getTeachers().size());
rootElement.add(teachers);
for(Teacher s: courseUnit.getTeachers())
{
Element teacher = DocumentFactory.getInstance().createElement("teacher");
teacher.addAttribute("code",""+s.getSigesCode());
teacher.addAttribute("name",""+s.getName());
teacher.addAttribute("email",""+s.getEmail());
if( userSession.getUser().isSuperuserOrAdmin() || userSession.getUser() instanceof Teacher)
{
teacher.addAttribute("oemail",""+s.getOutEmail());
teacher.addAttribute("phone",""+s.getPhonenumber());
teacher.addAttribute("gmail",""+s.getGmail());
teacher.addAttribute("msn",""+s.getMsn());
teacher.addAttribute("skype",""+s.getSkype());
}
teachers.add(teacher);
}
}
 
if( userSession.getUser().isSuperuserOrAdmin() || userSession.getUser() instanceof Teacher)
{
if(courseUnit.getStudents() != null)
{
Element students = DocumentFactory.getInstance().createElement("students");
students.addAttribute("number",""+courseUnit.getStudents().size());
rootElement.add(students);
for(Student s: courseUnit.getStudents())
{
Element student = DocumentFactory.getInstance().createElement("student");
student.addAttribute("code",""+s.getSigesCode());
student.addAttribute("name",""+s.getName());
student.addAttribute("email",""+s.getEmail());
student.addAttribute("oemail",""+s.getOutEmail());
student.addAttribute("phone",""+s.getPhonenumber());
student.addAttribute("gmail",""+s.getGmail());
student.addAttribute("msn",""+s.getMsn());
student.addAttribute("skype",""+s.getSkype());
students.add(student);
}
}
}
if( userSession.getUser().isSuperuserOrAdmin() || userSession.getUser() instanceof Teacher)
{
if(courseUnit.getAnnouncements() != null)
{
Element announcements = DocumentFactory.getInstance().createElement("announcements");
announcements.addAttribute("number",""+courseUnit.getAnnouncements().size());
rootElement.add(announcements);
for(Announcement a: courseUnit.getAnnouncements())
{
Element announcement = DocumentFactory.getInstance().createElement("announcement");
announcements.add(announcement);
announcement.addAttribute("id",""+a.getId());
announcement.addAttribute("title",""+a.getTitle());
announcement.addAttribute("date",""+a.getSaveDate());
if(a.getText() != null)
{
Element text = DocumentFactory.getInstance().createElement("text");
text.setText(a.getText());
announcement.add(text);
}
if(a.getUrl() != null)
{
Element url = DocumentFactory.getInstance().createElement("url");
url.setText(a.getUrl());
announcement.add(url);
}
}
}
}
 
if( userSession.getUser().isSuperuserOrAdmin() || userSession.getUser() instanceof Teacher)
{
if(courseUnit.getBlogs() != null)
{
Element blogs = DocumentFactory.getInstance().createElement("blogs");
blogs.addAttribute("number",""+courseUnit.getBlogs().size());
rootElement.add(blogs);
for(Blog b: courseUnit.getBlogs())
{
Element blog = DocumentFactory.getInstance().createElement("blog");
blogs.add(blog);
blog.addAttribute("id",""+b.getId());
blog.addAttribute("title",""+b.getTitle());
if(b.getDescription() != null)
{
Element desc = DocumentFactory.getInstance().createElement("description");
desc.setText(b.getDescription());
blog.add(desc);
}
Element posts = DocumentFactory.getInstance().createElement("posts");
posts.addAttribute("number",""+b.getPosts().size());
blog.add(posts);
if(b.getPosts() != null)
{
for(BlogPost bp: b.getPosts())
{
Element post = DocumentFactory.getInstance().createElement("post");
posts.add(post);
post.addAttribute("id",""+bp.getId());
post.addAttribute("saveDate",""+bp.getId());
blog.addAttribute("title",""+bp.getTitle());
blog.addAttribute("from",""+bp.getOwner().getName());
if(bp.getText() != null)
{
Element descP = DocumentFactory.getInstance().createElement("description");
descP.setText(bp.getText());
post.add(descP);
}
}
}
}
}
}
return dom;
}
}
/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitWorksBackupService.java
44,9 → 44,13
 
public String createSystemActualYearBackup(String importYear, UserSession userSession) throws ServiceException
{
return createSystemImportYearBackup(DatesUtils.getImportYear(),userSession);
}
 
public String createSystemImportYearBackup(String importYear, UserSession userSession) throws ServiceException
{
if (importYear == null || importYear.trim().length() == 0)
importYear = DatesUtils.getImportYear();
String importYearIntranet = DatesUtils.getImportYearIntranet();
String tmpName = BytesUtils.generateHexKey();
String tmpDir = Globals.TMP_DIR + "/" + tmpName;
new File(tmpDir).mkdirs();
55,55 → 59,86
{
for (Course c : courses)
{
String couseDirPath = tmpDir + "/" + StringsUtils.normalizeResourceName(c.getName()) + '.' + c.getCode();
try
createCourseBackup(tmpDir,c,userSession);
}
FilesUtils.zipFolder(tmpDir, tmpDir + ".zip");
FilesUtils.delete(tmpDir);
return tmpName + ".zip";
}
catch (IOException e)
{
logger.error(e, e);
}
return null;
}
 
public String createSystemBackup(String importYear, UserSession userSession) throws ServiceException
{
String tmpName = BytesUtils.generateHexKey();
String tmpDir = Globals.TMP_DIR + "/" + tmpName;
new File(tmpDir).mkdirs();
List<Course> courses = DaoFactory.getCourseDaoImpl().findAll();
try
{
for (Course c : courses)
{
createCourseBackup(tmpDir,c,userSession);
}
FilesUtils.zipFolder(tmpDir, tmpDir + ".zip");
FilesUtils.delete(tmpDir);
return tmpName + ".zip";
}
catch (IOException e)
{
logger.error(e, e);
}
return null;
}
 
private void createCourseBackup(String tmpDir, Course c, UserSession userSession)
{
String couseDirPath = tmpDir + "/" + StringsUtils.normalizeResourceName(c.getName()) + '.' + c.getCode();
try
{
String importYearIntranet = DatesUtils.getImportYearIntranet(c.getImportYear());
String courseImportYearPath = couseDirPath + "/" + importYearIntranet;
File courseImportYearDir = new File(courseImportYearPath);
courseImportYearDir.mkdirs();
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadByCourse(c.getId(), c.getImportYear());
for (CourseUnit courseUnit : courseUnits)
{
String semestre;
if (courseUnit.getSemestre().equals("S1"))
{
String courseImportYearPath = couseDirPath + "/" + importYearIntranet;
File courseImportYearDir = new File(courseImportYearPath);
courseImportYearDir.mkdirs();
List<CourseUnit> courseUnits = DaoFactory.getCourseUnitDaoImpl().loadByCourse(c.getId(), importYear);
for (CourseUnit courseUnit : courseUnits)
semestre = Globals.INTRANET_SEMESTRE_S1;
}
else
{
semestre = Globals.INTRANET_SEMESTRE_S2;
}
 
String normalizedName = StringsUtils.normalizeResourceName(courseUnit.getName());
String unitPath = courseImportYearPath + "/" + semestre + "/" + normalizedName;
copyProgram(courseUnit,unitPath,userSession);
new CreateCourseUnitXML().run(unitPath+"/desc.xml",courseUnit,userSession);
for (CourseUnitAssignement assignement : courseUnit.getAssignements())
{
String assignementDir = unitPath + "/assignement" + assignement.getId();
createAssignementCopy(assignement, assignementDir, userSession);
if (!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
{
String semestre;
if (courseUnit.getSemestre().equals("S1"))
for (CourseUnitDeliverable deliverable : assignement.getDeliverables())
{
semestre = Globals.INTRANET_SEMESTRE_S1;
copyDeliverableVersions(deliverable, assignementDir, userSession);
}
else
{
semestre = Globals.INTRANET_SEMESTRE_S2;
}
String normalizedName = StringsUtils.normalizeResourceName(courseUnit.getName());
String unitPath = courseImportYearPath + "/" + semestre + "/" + normalizedName;
 
for (CourseUnitAssignement assignement : courseUnit.getAssignements())
{
String assignementDir = unitPath + "/assignement" + assignement.getId();
createAssignementCopy(assignement, assignementDir, userSession);
if (!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
{
for (CourseUnitDeliverable deliverable : assignement.getDeliverables())
{
copyDeliverableVersions(deliverable, assignementDir, userSession);
}
}
}
}
}
catch (IOException e)
{
logger.error(e, e);
}
}
FilesUtils.zipFolder(tmpDir, tmpDir + ".zip");
FilesUtils.delete(tmpDir);
return tmpName + ".zip";
}
catch (IOException e)
{
logger.error(e, e);
}
return null;
}
 
/**
113,12 → 148,29
* @return
* @throws ServiceException
*/
public String createImportYearBackup(String importYear, UserSession userSession) throws ServiceException
{
if(importYear == null)
importYear = DatesUtils.getImportYear();
if (userSession.getUser() instanceof Teacher)
return createLoginTeacherActualYearBackup(importYear,userSession);
else if (userSession.getUser() instanceof Student)
return createLoginStudentActualYearBackup(importYear,userSession);
return null;
}
/**
* In case of student create a backup with student deliverables in actual year subscribed units, in case of teacher create a backup of all deliverables in actual year teached units
*
* @param userSession
* @return
* @throws ServiceException
*/
public String createActualYearBackup(UserSession userSession) throws ServiceException
{
if (userSession.getUser() instanceof Teacher)
return createLoginTeacherActualYearBackup(userSession);
return createLoginTeacherActualYearBackup(DatesUtils.getImportYear(),userSession);
else if (userSession.getUser() instanceof Student)
return createLoginStudentActualYearBackup(userSession);
return createLoginStudentActualYearBackup(DatesUtils.getImportYear(), userSession);
return null;
}
 
153,29 → 205,29
}
 
 
public String createLoginStudentActualYearBackup(UserSession userSession) throws ServiceException
public String createLoginStudentActualYearBackup(String importYear,UserSession userSession) throws ServiceException
{
Student s = (Student) userSession.getUser();
return createStudentActualYearBackup(s, userSession);
return createStudentActualYearBackup(s,importYear, userSession);
}
 
 
public String createLoginTeacherActualYearBackup(UserSession userSession) throws ServiceException
public String createLoginTeacherActualYearBackup(String importYear,UserSession userSession) throws ServiceException
{
Teacher t = (Teacher) userSession.getUser();
return createTeacherActualYearBackup(t, userSession);
return createTeacherActualYearBackup(t,importYear, userSession);
}
 
public String createStudentActualYearBackup(long studentId, UserSession userSession) throws ServiceException
public String createStudentActualYearBackup(long studentId,String importYear, UserSession userSession) throws ServiceException
{
Student s = DaoFactory.getStudentDaoImpl().get(studentId);
return createStudentActualYearBackup(s, userSession);
return createStudentActualYearBackup(s,importYear, userSession);
}
 
public String createTeacherActualYearBackup(long teacherId, UserSession userSession) throws ServiceException
public String createTeacherActualYearBackup(long teacherId,String importYear, UserSession userSession) throws ServiceException
{
Teacher t = DaoFactory.getTeacherDaoImpl().get(teacherId);
return createTeacherActualYearBackup(t, userSession);
return createTeacherActualYearBackup(t,importYear, userSession);
}
 
 
192,15 → 244,15
}
 
 
private String createStudentActualYearBackup(Student s, UserSession userSession) throws ServiceException
private String createStudentActualYearBackup(Student s,String importYear, UserSession userSession) throws ServiceException
{
List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadSubscribedImportYearUnits(s.getId(), DatesUtils.getImportYear());
List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadSubscribedImportYearUnits(s.getId(), importYear);
if (units == null || units.size() == 0)
return null;
return createStudentBackup(units, s, userSession);
}
 
private String createTeacherActualYearBackup(Teacher t, UserSession userSession) throws ServiceException
private String createTeacherActualYearBackup(Teacher t,String importYear, UserSession userSession) throws ServiceException
{
List units = DaoFactory.getCourseUnitDaoImpl().loadTeachedImportYearUnits(t.getId(), DatesUtils.getImportYear());
if (units == null || units.size() == 0)
251,7 → 303,8
}
String normalizedName = StringsUtils.normalizeResourceName(courseUnit.getName());
String unitPath = courseImportYearPath + "/" + semestre + "/" + normalizedName;
 
copyProgram(courseUnit,unitPath,userSession);
new CreateCourseUnitXML().run(unitPath+"/desc.xml",courseUnit,userSession);
for (CourseUnitAssignement assignement : courseUnit.getAssignements())
{
String assignementDir = unitPath + "/assignement" + assignement.getId();
259,7 → 312,8
if (!assignement.getDeliverType().equals(Globals.COURSEUNIT_ASSIGNEMENT_TYPE_NO_FILE) && assignement.getDeliverables() != null && assignement.getDeliverables().size() > 0)
{
CourseUnitDeliverable deliverable = DaoFactory.getCourseUnitDeliverableDaoImpl().loadDeliverable(s.getId(), assignement.getId());
copyDeliverableVersions(deliverable, assignementDir, userSession);
if(deliverable != null)
copyDeliverableVersions(deliverable, assignementDir, userSession);
}
}
}
304,7 → 358,8
}
String normalizedName = StringsUtils.normalizeResourceName(courseUnit.getName());
String unitPath = courseImportYearPath + "/" + semestre + "/" + normalizedName;
 
copyProgram(courseUnit,unitPath,userSession);
new CreateCourseUnitXML().run(unitPath+"/desc.xml",courseUnit,userSession);
for (CourseUnitAssignement assignement : courseUnit.getAssignements())
{
String assignementDir = unitPath + "/assignement" + assignement.getId();
335,6 → 390,31
}
 
 
private void copyProgram(CourseUnit courseUnit, String toDir, UserSession userSession)
{
if (courseUnit.getProgramStreamId() != null && courseUnit.getProgramStreamId().length() > 0)
{
String deliverDir = toDir + "/program.zip";
new File(deliverDir).mkdirs();
List<IRepositoryFile> iRepositoryFiles = repositoryService.loadVersions(courseUnit.getProgramStreamId(), userSession);
for (IRepositoryFile iRepositoryFile : iRepositoryFiles)
{
try
{
if(iRepositoryFile.getInput() != null)
FilesUtils.copy(iRepositoryFile.getInput(), toDir + "/program." + FilesUtils.getExtension(iRepositoryFile.getName()));
else
logger.error("Repository File have no candidate file version, coming null inputStream:" + iRepositoryFile.getIdentifier());
 
}
catch (IOException e)
{
logger.error(e, e);
}
}
}
}
 
private void copyDeliverableVersions(CourseUnitDeliverable deliverable, String toDir, UserSession userSession)
{
if (deliverable.getDeliverableRepositoryStream() != null && deliverable.getDeliverableRepositoryStream().length() > 0)
346,7 → 426,10
{
try
{
FilesUtils.copy(iRepositoryFile.getInput(), deliverDir + "/version" + getResourceFileName(iRepositoryFile.getName()));
if(iRepositoryFile.getInput() != null)
FilesUtils.copy(iRepositoryFile.getInput(), deliverDir + "/version" + getResourceFileName(iRepositoryFile.getName()));
else
logger.error("Repository File have no candidate file version, coming null inputStream:" + iRepositoryFile.getIdentifier());
}
catch (IOException e)
{
378,7 → 461,12
if (assignement.getRepositoryStream() != null && assignement.getRepositoryStream().length() > 0)
{
IRepositoryFile iRepositoryFile = repositoryService.load(assignement.getRepositoryStream(), userSession);
FilesUtils.copy(iRepositoryFile.getInput(), assignementDir + "/" + getResourceFileName(iRepositoryFile.getName()));
 
if(iRepositoryFile.getInput() != null)
FilesUtils.copy(iRepositoryFile.getInput(), assignementDir + "/" + getResourceFileName(iRepositoryFile.getName()));
else
logger.error("Repository File have no candidate file version, coming null inputStream:" + iRepositoryFile.getIdentifier());
 
}
}
 
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java
48,7 → 48,7
HashMap<String, Disciplina> disciplinasMap = new HashMap<String, Disciplina>();
HashMap<String, Disciplina> disciplinasMapS1 = new HashMap<String, Disciplina>();
HashMap<String, Disciplina> disciplinasMapS2 = new HashMap<String, Disciplina>();
HashMap<Integer, Disciplina> cursosMap = new HashMap<Integer, Disciplina>();
HashMap<String, Disciplina> cursosMap = new HashMap<String, Disciplina>();
 
/**
* Build Course Units Maps
73,8 → 73,8
*/
logMessages.addMessage(new DefaultLogMessage("import.semestre.updating.courses", LogMessageTypeEnum.INFO));
logger.info("updating courses");
Set<Map.Entry<Integer, Disciplina>> set2 = cursosMap.entrySet();
for (Map.Entry<Integer, Disciplina> entry : set2)
Set<Map.Entry<String, Disciplina>> set2 = cursosMap.entrySet();
for (Map.Entry<String, Disciplina> entry : set2)
{
Disciplina d = entry.getValue();
CourseView c = coursesService.loadCourseByCode("" + d.getCodigoCurso().intValue(),false);
114,7 → 114,7
String year,
HashMap<String, Disciplina> disciplinasMap,
HashMap<String, Disciplina> disciplinasMapSemestre,
HashMap<Integer, Disciplina> cursosMap,
HashMap<String, Disciplina> cursosMap,
DefaultLogMessages logMessages)
{
logMessages.addMessage(new DefaultLogMessage("import.semestre.course.units." + semestre, LogMessageTypeEnum.INFO));
130,8 → 130,7
}
disciplinasMap.put(d.getCodigo().intValue() + ":" + d.getCodigoCurso() + ":" + semestre, d);
disciplinasMapSemestre.put(d.getCodigo().intValue() + ":" + d.getCodigoCurso() + ":" + semestre, d);
cursosMap.put(d.getCodigoCurso().intValue(), d);
 
cursosMap.put(d.getCodigoCurso().intValue()+":"+year, d);
}
}
 
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseDaoImpl.java
1,8 → 1,10
package pt.estgp.estgweb.domain.dao.impl;
 
import static org.hibernate.criterion.Restrictions.*;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Criterion;
import org.hibernate.Criteria;
import org.hibernate.Query;
import pt.estgp.estgweb.domain.Course;
import pt.estgp.estgweb.domain.CourseImpl;
import pt.estgp.estgweb.domain.CourseUnit;
29,12 → 31,12
 
public CourseImpl findCourseByCode(String code)
{
return (CourseImpl) createCriteria().add(eq("code",code)).uniqueResult();
return (CourseImpl) createCriteria().add(eq("code", code)).uniqueResult();
}
 
public int countCoursesActualYear(String query, SearchTypeEnum searchType)
{
Criterion c = DaoUtils.createSearchQuery(query,searchType,"name","description");
Criterion c = DaoUtils.createSearchQuery(query, searchType, "name", "description");
return createCriteria()
.add(c)
.add(eq("importYear", DatesUtils.getImportYear()))
64,14 → 66,46
public List<Course> findAllOrderByName(String importYear)
{
return createCriteria()
.add(eq("importYear",importYear))
.add(eq("importYear", importYear))
.addOrder(Order.asc("name"))
.list();
}
 
public List<String> loadImportYears()
{
Query q = createQuery("select distinct c.importYear from c in class " + Course.class.getName() + " order by c.importYear desc");
return q.list();
}
 
public List<Course> loadAllCourses(long teacherId, String importYear)
{
return
createCriteria()
.add(eq("importYear", importYear))
.list();
}
 
public List<Course> loadCoordinatedCourses(long teacherId, String importYear)
{
return
createCriteria()
.add(eq("coordinator.id", teacherId))
.add(eq("importYear", importYear))
.list();
}
 
public List<Course> loadDirectorCourses(long teacherId, String importYear)
{
return
createCriteria()
.add(eq("director.id", teacherId))
.add(eq("importYear", importYear))
.list();
}
 
public List<Course> findAll(String importYear)
{
return createCriteria().add(eq("importYear",importYear))
return createCriteria().add(eq("importYear", importYear))
.list();
}
 
/impl/src/java/pt/estgp/estgweb/web/form/courses/CourseForm.java
19,6 → 19,7
private CourseView courseView;
private FormFile studiesPlan;
private DirectedCoordinatedCourses directedCoordinatedCourses = new DirectedCoordinatedCourses();
private String importYear;
 
 
public CourseForm()
41,6 → 42,16
this.directedCoordinatedCourses = directedCoordinatedCourses;
}
 
public String getImportYear()
{
return importYear;
}
 
public void setImportYear(String importYear)
{
this.importYear = importYear;
}
 
public void setCourseView(CourseView courseView)
{
this.courseView = courseView;
/impl/src/java/pt/estgp/estgweb/web/controllers/courses/CoursesController.java
187,9 → 187,10
try
{
CourseForm cF = (CourseForm) form;
String importYear = cF.getImportYear();
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new String[]{};
String[] names = new String[]{"importYear"};
Object[] args = new String[]{importYear};
DirectedCoordinatedCourses directedCoordinatedCourses = (DirectedCoordinatedCourses) sm.execute(RequestUtils.getRequester(request, response), "LoadCoursesProgramsForServices", args, names);
cF.setDirectedCoordinatedCourses(directedCoordinatedCourses);
return mapping.findForward("load.courses.programs");
217,10 → 218,12
{
try
{
 
CourseForm cF = (CourseForm) form;
String importYear = cF.getImportYear();
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new String[]{};
String[] names = new String[]{"importYear"};
Object[] args = new String[]{importYear};
DirectedCoordinatedCourses directedCoordinatedCourses = (DirectedCoordinatedCourses) sm.execute(RequestUtils.getRequester(request, response), "LoadDirectedCoordinatedCoursesForUserInSession", args, names);
cF.setDirectedCoordinatedCourses(directedCoordinatedCourses);
return mapping.findForward("load.directed.coordinated.courses");
255,7 → 258,7
DirectedCoordinatedCourses directedCoordinatedCourses = (DirectedCoordinatedCourses) sm.execute(RequestUtils.getRequester(request, response), "UpdateDirectedCoordinatedCoursesForUserInSession", args, names);
cF.setDirectedCoordinatedCourses(directedCoordinatedCourses);
addMessage(request,"course.directed.coordinated.courses.updated.success",""+directedCoordinatedCourses.getUpdated());
return mapping.findForward("home");
return mapping.findForward("confirm.courses.programs");
}
catch (FilterChainFailedException e)
{
/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsAdminController.java
61,7 → 61,7
}
}
 
public ActionForward createCourseUnitWorksBackup(ActionMapping mapping,
public ActionForward createAllCourseUnitWorksBackup(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
92,6 → 92,37
}
}
 
public ActionForward createImportYearCourseUnitWorksBackup(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try
{
String importYear = request.getParameter("importYear");
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{importYear};
String tmpFile = (String) sm.execute(RequestUtils.getRequester(request, response), "CreateImportYearCourseUnitWorksBackup", args, names);
request.getRequestDispatcher("/tmpStream/" + tmpFile).forward(request,response);
return null;
}
catch (FilterChainFailedException e)
{
return mapping.findForward("error401");
}
catch (NotFoundException e)
{
return mapping.findForward("error404");
}
catch (Throwable e)
{
logger.error(e, e);
return mapping.findForward("error500");
}
}
 
 
public ActionForward createOrUpdateAdmin(ActionMapping mapping,
/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsController.java
50,6 → 50,7
private static final Logger logger = Logger.getLogger(CourseUnitsController.class);
 
private ActionForward createBackup(String service,
Object[] args,
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
60,7 → 61,6
{
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{};
String tmpFile = (String) sm.execute(RequestUtils.getRequester(request, response), service, args, names);
request.getRequestDispatcher("/tmpStream/" + tmpFile).forward(request,response);
return null;
85,7 → 85,8
HttpServletResponse response)
throws ServletException
{
return createBackup("CreateUserAllCourseUnitWorksBackup",mapping,form,request,response);
String[] args = new String[]{};
return createBackup("CreateUserAllCourseUnitWorksBackup",args,mapping,form,request,response);
}
public ActionForward createUserCourseUnitActualYearWorksBackup(ActionMapping mapping,
94,7 → 95,9
HttpServletResponse response)
throws ServletException
{
return createBackup("CreateUserActualYearCourseUnitWorksBackup",mapping,form,request,response);
String importYear = request.getParameter("importYear");
String[] args = new String[]{importYear};
return createBackup("CreateUserImportYearCourseUnitWorksBackup",args,mapping,form,request,response);
}
 
private ActionForward loadCourseUnitAndForward(CourseUnitsForm cUF, long id, boolean initTeachers, boolean initStudents, ActionMapping mapping, HttpServletRequest request, HttpServletResponse response)
/impl/src/web/user/courses/directedCoordinatedCourses.jsp
1,3 → 1,8
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %>
<%@ page import="pt.estgp.estgweb.domain.views.CourseView" %>
<%@ page import="java.util.List" %>
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
<%@ 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-logic.tld" prefix="logic" %>
11,24 → 16,45
<jomm:messages/>
<html:errors/>
<%
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{};
List<String> importYears = (List<String>) sm.execute(RequestUtils.getRequester(request, response), "LoadCoursesImportYears", args, names);
request.setAttribute("importYears", importYears);
 
request.setAttribute("fromDispatch",request.getParameter("fromDispatch"));
 
String fromAction = "";
String from = "";
String from = "?fromDispatch="+request.getParameter("fromDispatch");;
String user = "";
if (request.getParameter("from") != null)
{
user = "/user";
fromAction = "From" + request.getParameter("from");
from = "?from=" + request.getParameter("from");
from = "?from=" + request.getParameter("from") + "&fromDispatch="+request.getParameter("fromDispatch");
}
request.setAttribute("from", from);
request.setAttribute("user", user);
request.setAttribute("fromAction", fromAction);
 
boolean canChange=false;
%>
 
<html:form action="${user}/courseController${fromAction}${from}" enctype="multipart/form-data">
<input type="hidden" name="dispatch" value="updateDirectedCoordininatedCourses">
<input type="hidden" name="fromDispatch" value="${fromDispatch}"/>
<div class="seccao">
<h2><bean:message key="course.directed.coordinated"/></h2>
<h2><bean:message key="course.directed.coordinated"/> </h2>
<p>
<bean:message key="course.program.courses.choose.year"/>
<html:select property="importYear" onchange="set(this.form,'${fromDispatch}');this.form.submit()">
<logic:iterate id="importYear" name="importYears">
<html:option value="${importYear}"/>
</logic:iterate>
<html:option value="200708"/>
</html:select>
</p>
<div class="seccao">
<ul>
<nested:iterate id="courseView" property="directedCoordinatedCourses.merge" type="pt.estgp.estgweb.domain.views.CourseView">
57,6 → 83,9
<nested:iterate id="courseUnitView" property="courseUnitsWithProgramNotCheckedS1" type="pt.estgp.estgweb.domain.views.CourseUnitView">
<li>
<logic:equal value="${courseView.coordinator.id}" name="UserSession" property="user.id">
<%
canChange=true;
%>
<nested:hidden property="programStreamId"/>
<nested:hidden property="id"/>
<nested:checkbox property="validProgram"/>
91,7 → 120,7
<li><h3><bean:message key="courseunit.semestre"/> 2</h3>
<ul>
<logic:notEmpty name="courseView" property="courseUnitsWithNoProgramS2">
 
<li><h3 class="statusERROR"><bean:message key="course.units.no.program"/></h3>
<ul>
<nested:iterate id="courseUnitView" property="courseUnitsWithNoProgramS2" type="pt.estgp.estgweb.domain.views.CourseUnitView">
145,6 → 174,10
</ul>
</div>
</div>
<%
if(canChange)
{
%>
<table>
<tr class="buttons">
<td colspan="2">
152,4 → 185,7
</td>
</tr>
</table>
<%
}
%>
</html:form>
/impl/src/web/user/serviceZone/topnavCoursesPrograms.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/startServiceZone.do", "intranet.separator.service.zone.back");
topNav.addNavPlace(null, "course.program.courses");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/serviceZone/topnavDirectedCoordinatedCourses.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.service.zone.back");
topNav.addNavPlace(null, "course.directed.coordinated.courses");
%>
<jsp:include page="/layout/topnav.jsp"/>
/impl/src/web/user/serviceZone/serviceZone.jsp
117,10 → 117,12
</baco:isAdmin>
 
<baco:isModuleOn module="courseunits">
<baco:isAdmin>
 
<baco:hasRole role="admin,super,services,administrativeCouncil,courseCoordinator,courseDirector,scientificCouncil,pedagogicCouncil">
<li>
<bean:message key="courses"/>
<ul>
<baco:isAdmin>
<li>
<html:link action="/user/startNewCourseFromServiceZone">
<bean:message key="course.new"/>
141,33 → 143,52
<bean:message key="courseunit.search"/>
</html:link>
</li>
 
</baco:isAdmin>
<%--<li>--%>
<%--<html:link action="/user/startFindCourseUnitAdminFromServiceZone">--%>
<%--<bean:message key="courseunit.program.archive"/>--%>
<%--</html:link>--%>
<%--</li>--%>
<li>
<baco:hasRole role="admin,super,services,administrativeCouncil,courseCoordinator,courseDirector,scientificCouncil,pedagogicCouncil">
<html:link action="/user/startLoadCoursesProgramsFromServiceZone">
<bean:message key="course.program.courses"/>
</html:link>
</baco:hasRole>
</li>
<li>
<baco:hasRole role="courseCoordinator,courseDirector">
<html:link action="/user/startLoadDirectedCoordinatedCoursesFromServiceZone">
<bean:message key="course.program.coordinated.directed.courses"/>
</html:link>
</baco:hasRole>
</li>
</ul>
</li>
</baco:isAdmin>
</baco:hasRole>
<li>
<bean:message key="backups"/>
<ul>
<baco:isAdmin>
<li>
<html:link target="_blank" action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createCourseUnitWorksBackup">
<html:link action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createAllCourseUnitWorksBackup">
<bean:message key="courseunits.backups"/>
</html:link>
</li>
<li>
<html:link action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createImportYearCourseUnitWorksBackup">
<bean:message key="courseunits.backups.actual.year"/>
</html:link>
</li>
</baco:isAdmin>
<baco:hasRole role="student,teacher">
<li>
<html:link target="_blank" action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createUserAllCourseUnitWorksBackup">
<html:link action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createUserAllCourseUnitWorksBackup">
<bean:message key="courseunits.all.backup"/>
</html:link>
</li>
<li>
<html:link target="_blank" action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createUserCourseUnitActualYearWorksBackup">
<html:link action="/user/courseUnitControllerAdminFromServiceZone?dispatch=createUserCourseUnitActualYearWorksBackup">
<bean:message key="courseunits.actual.year.backup"/>
</html:link>
</li>