/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&fromDispatch=loadCoursesPrograms&from=ServiceZone"/> |
<action path="/user/startLoadDirectedCoordinatedCoursesFromServiceZone" forward="/user/courseControllerFromHome.do?dispatch=loadDirectedCoordininatedCourses&fromDispatch=loadDirectedCoordininatedCourses&from=ServiceZone"/> |
<action path="/user/startSelectCourseFromServiceZone" forward="page.select.course.from.service.zone"/> |
<action path="/user/startEditCourseFromServiceZone" forward="/user/courseControllerFromServiceZone.do?dispatch=edit&from=ServiceZone"/> |
<action path="/user/startNewCourseFromServiceZone" forward="/user/courseControllerFromServiceZone.do?dispatch=startNew&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&from=Home"/> |
<action path="/user/startLoadDirectedCoordinatedCoursesFromHome" forward="/user/courseControllerFromHome.do?dispatch=loadDirectedCoordininatedCourses&from=Home"/> |
<action path="/user/startLoadCoursesProgramsFromHome" forward="/user/courseControllerFromHome.do?dispatch=loadCoursesPrograms&fromDispatch=loadCoursesPrograms&from=Home"/> |
<action path="/user/startLoadDirectedCoordinatedCoursesFromHome" forward="/user/courseControllerFromHome.do?dispatch=loadDirectedCoordininatedCourses&fromDispatch=loadDirectedCoordininatedCourses&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> |