diff --git a/src/main/java/org/fenixedu/learning/domain/degree/DegreeSite.java b/src/main/java/org/fenixedu/learning/domain/degree/DegreeSite.java index 7ac4696..9a1d444 100644 --- a/src/main/java/org/fenixedu/learning/domain/degree/DegreeSite.java +++ b/src/main/java/org/fenixedu/learning/domain/degree/DegreeSite.java @@ -18,24 +18,46 @@ */ package org.fenixedu.learning.domain.degree; +import static com.google.common.base.Joiner.on; +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.Locale; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Stream; + import org.fenixedu.academic.domain.Degree; +import org.fenixedu.academic.domain.accessControl.CoordinatorGroup; import org.fenixedu.bennu.core.domain.Bennu; +import org.fenixedu.bennu.core.groups.DynamicGroup; +import org.fenixedu.bennu.core.i18n.BundleUtil; +import org.fenixedu.bennu.core.util.CoreConfiguration; +import org.fenixedu.bennu.portal.domain.MenuContainer; +import org.fenixedu.bennu.portal.domain.PortalConfiguration; +import org.fenixedu.cms.domain.CMSFolder; import org.fenixedu.cms.domain.Category; import org.fenixedu.cms.domain.wraps.Wrap; import org.fenixedu.commons.i18n.LocalizedString; -import pt.ist.fenixframework.DomainObject; +import org.joda.time.DateTime; -import java.util.Locale; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Stream; +import pt.ist.fenixframework.DomainObject; public class DegreeSite extends DegreeSite_Base { public DegreeSite(Degree degree) { - super(); + checkNotNull(degree); setDegree(degree); + + setFolder(folderForPath(PortalConfiguration.getInstance().getMenu(), "degrees")); + setSlug(on("-").join(degree.getSigla(), degree.getExternalId())); + + setCreationDate(new DateTime()); + setCanAdminGroup(DynamicGroup.get("managers")); + setCanPostGroup(CoordinatorGroup.get(degree)); + + setPublished(true); setBennu(Bennu.getInstance()); + degree.setSiteUrl(getFullUrl()); } @Override @@ -72,4 +94,19 @@ public Stream getCategoriesToShow() { return Stream.of(categoryForSlug("announcement")).filter(Objects::nonNull).map(Category::makeWrap); } + private CMSFolder folderForPath(MenuContainer parent, String path) { + + LocalizedString.Builder description = new LocalizedString.Builder(); + CoreConfiguration + .supportedLocales() + .stream() + .forEach( + l -> description.with(l, + BundleUtil.getString("resources.FenixEduLearningResources", l, "label.degree.folder.description"))); + + return parent.getOrderedChild().stream().filter(item -> item.getPath().equals(path)) + .map(item -> item.getAsMenuFunctionality().getCmsFolder()).findAny() + .orElseGet(() -> new CMSFolder(parent, path, description.build())); + } + } diff --git a/src/main/java/org/fenixedu/learning/domain/executionCourse/ExecutionCourseSite.java b/src/main/java/org/fenixedu/learning/domain/executionCourse/ExecutionCourseSite.java index 0f4ec27..2a30926 100644 --- a/src/main/java/org/fenixedu/learning/domain/executionCourse/ExecutionCourseSite.java +++ b/src/main/java/org/fenixedu/learning/domain/executionCourse/ExecutionCourseSite.java @@ -31,11 +31,12 @@ import org.fenixedu.academic.domain.accessControl.StudentSharingDegreeOfCompetenceOfExecutionCourseGroup; import org.fenixedu.academic.domain.accessControl.StudentSharingDegreeOfExecutionCourseGroup; import org.fenixedu.academic.domain.accessControl.TeacherGroup; +import org.fenixedu.academic.domain.accessControl.TeacherResponsibleOfExecutionCourseGroup; import org.fenixedu.bennu.core.domain.Bennu; import org.fenixedu.bennu.core.groups.AnyoneGroup; +import org.fenixedu.bennu.core.groups.DynamicGroup; import org.fenixedu.bennu.core.groups.Group; import org.fenixedu.bennu.core.groups.LoggedGroup; -import org.fenixedu.bennu.core.groups.NobodyGroup; import org.fenixedu.bennu.core.i18n.BundleUtil; import org.fenixedu.bennu.core.util.CoreConfiguration; import org.fenixedu.bennu.portal.domain.MenuContainer; @@ -44,6 +45,7 @@ import org.fenixedu.cms.domain.Category; import org.fenixedu.cms.domain.wraps.Wrap; import org.fenixedu.commons.i18n.LocalizedString; +import org.joda.time.DateTime; import pt.ist.fenixframework.Atomic; import pt.ist.fenixframework.DomainObject; @@ -56,13 +58,16 @@ public class ExecutionCourseSite extends ExecutionCourseSite_Base { public ExecutionCourseSite(ExecutionCourse executionCourse) { checkNotNull(executionCourse); setExecutionCourse(executionCourse); - setPublished(true); + setFolder(folderForPath(PortalConfiguration.getInstance().getMenu(), "courses")); setSlug(on("-").join(getExecutionCourse().getSigla(), getExecutionCourse().getExternalId())); - setCanAdminGroup(NobodyGroup.get()); - setCanPostGroup(NobodyGroup.get()); - setBennu(Bennu.getInstance()); + setCreationDate(new DateTime()); + setCanAdminGroup(DynamicGroup.get("managers")); + setCanPostGroup(TeacherResponsibleOfExecutionCourseGroup.get(executionCourse)); + + setPublished(true); + setBennu(Bennu.getInstance()); executionCourse.setSiteUrl(getFullUrl()); } diff --git a/src/main/java/org/fenixedu/learning/servlets/FenixEduLearningContextListener.java b/src/main/java/org/fenixedu/learning/servlets/FenixEduLearningContextListener.java index 15129ac..1ee2c35 100644 --- a/src/main/java/org/fenixedu/learning/servlets/FenixEduLearningContextListener.java +++ b/src/main/java/org/fenixedu/learning/servlets/FenixEduLearningContextListener.java @@ -22,6 +22,7 @@ import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; +import org.fenixedu.academic.domain.Degree; import org.fenixedu.academic.domain.ExecutionCourse; import org.fenixedu.academic.domain.Summary; import org.fenixedu.academic.domain.thesis.Thesis; @@ -35,6 +36,7 @@ import org.fenixedu.cms.domain.Post; import org.fenixedu.commons.i18n.I18N; import org.fenixedu.commons.i18n.LocalizedString; +import org.fenixedu.learning.domain.degree.DegreeSiteListener; import org.fenixedu.learning.domain.executionCourse.ExecutionCourseListener; import org.fenixedu.learning.domain.executionCourse.SummaryListener; import org.joda.time.DateTime; @@ -62,10 +64,12 @@ public void contextInitialized(ServletContextEvent sce) { Signal.register(Summary.EDIT_SIGNAL, (DomainObjectEvent event) -> { SummaryListener.updatePost(event.getInstance().getPost(), event.getInstance()); }); - Signal.register(ExecutionCourse.CREATED_SIGNAL, (DomainObjectEvent event) -> { ExecutionCourseListener.create(event.getInstance()); }); + Signal.register(Degree.CREATED_SIGNAL, (DomainObjectEvent event) -> { + DegreeSiteListener.create(event.getInstance()); + }); Signal.register(PublishMarks.MARKS_PUBLISHED_SIGNAL, FenixEduLearningContextListener::handleMarksPublishment); Signal.register(Thesis.PROPOSAL_APPROVED_SIGNAL, FenixEduLearningContextListener::handleThesisProposalApproval); FenixFramework.getDomainModel().registerDeletionListener(ExecutionCourse.class, (executionCourse) -> { diff --git a/src/main/resources/resources/FenixEduLearningResources.properties b/src/main/resources/resources/FenixEduLearningResources.properties index d30058c..bad2cd5 100644 --- a/src/main/resources/resources/FenixEduLearningResources.properties +++ b/src/main/resources/resources/FenixEduLearningResources.properties @@ -81,6 +81,7 @@ degree.course.title=Course label.title=Title Inquiries= label.course.folder.description=Folder for course sites +label.degree.folder.description=Folder for degree sites label.page.not.found.title=Oops, we couldn't find this page label.page.not.found=The page you are visiting can't be found on our server label.back.to=← Back to diff --git a/src/main/resources/resources/FenixEduLearningResources_en.properties b/src/main/resources/resources/FenixEduLearningResources_en.properties index f217035..2af9eef 100644 --- a/src/main/resources/resources/FenixEduLearningResources_en.properties +++ b/src/main/resources/resources/FenixEduLearningResources_en.properties @@ -79,6 +79,7 @@ label.evaluations=Evaluations action.save=Save label.title=Title label.groups=Groups -label.course.folder.description=folder for course sites +label.course.folder.description=Folder for course sites +label.degree.folder.description=Folder for degree sites label.latestAnnouncements = Latest Announcements label.senior.lecture=Senior Lecturer diff --git a/src/main/resources/resources/FenixEduLearningResources_pt.properties b/src/main/resources/resources/FenixEduLearningResources_pt.properties index 4c477b1..d425d95 100644 --- a/src/main/resources/resources/FenixEduLearningResources_pt.properties +++ b/src/main/resources/resources/FenixEduLearningResources_pt.properties @@ -74,7 +74,8 @@ label.link=Link label.name=Nome label.inquiriesResults=Resultados dos Inqueritos label.groups=Grupos -label.course.folder.description=Pasta para paginas das cadeiras +label.course.folder.description=Pasta para as páginas das cadeiras +label.degree.folder.description=Pasta para as páginas dos cursos label.no.grades=As notas ainda não foram publicadas. label.page.not.found.title=Oops, não encontramos esta pagina label.page.not.found=A pagina que está a visitar não foi encontrada no servidor.