From 496fc819d68d9b0412f4f726deefc931464eea1a Mon Sep 17 00:00:00 2001 From: JoaoRoxo Date: Thu, 2 Apr 2015 14:58:26 +0100 Subject: [PATCH 1/2] Connect the creation of the degree site with the creation of the degree object --- .../learning/domain/degree/DegreeSite.java | 36 +++++++++++++++---- .../executionCourse/ExecutionCourseSite.java | 13 ++++--- .../FenixEduLearningContextListener.java | 6 +++- 3 files changed, 43 insertions(+), 12 deletions(-) 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..d6c1a9b 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,42 @@ */ 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.bennu.core.domain.Bennu; +import org.fenixedu.bennu.core.groups.DynamicGroup; +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")); + + setPublished(true); setBennu(Bennu.getInstance()); + degree.setSiteUrl(getFullUrl()); } @Override @@ -72,4 +90,10 @@ public Stream getCategoriesToShow() { return Stream.of(categoryForSlug("announcement")).filter(Objects::nonNull).map(Category::makeWrap); } + private CMSFolder folderForPath(MenuContainer parent, String path) { + return parent.getOrderedChild().stream().filter(item -> item.getPath().equals(path)) + .map(item -> item.getAsMenuFunctionality().getCmsFolder()).findFirst() + .orElseThrow(() -> new RuntimeException("no.degree.site.folder.was.found")); + } + } 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..3d96b35 100644 --- a/src/main/java/org/fenixedu/learning/domain/executionCourse/ExecutionCourseSite.java +++ b/src/main/java/org/fenixedu/learning/domain/executionCourse/ExecutionCourseSite.java @@ -33,9 +33,9 @@ import org.fenixedu.academic.domain.accessControl.TeacherGroup; 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 +44,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 +57,15 @@ 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")); + + 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) -> { From 161c82f0fef22e8883e2f8dbfa4a40f9db4d4360 Mon Sep 17 00:00:00 2001 From: JNPA Date: Mon, 20 Apr 2015 12:42:38 +0100 Subject: [PATCH 2/2] Define canPostGroup. Create the folder when it doesnt exists. --- .../learning/domain/degree/DegreeSite.java | 17 +++++++++++++++-- .../executionCourse/ExecutionCourseSite.java | 2 ++ .../FenixEduLearningResources.properties | 1 + .../FenixEduLearningResources_en.properties | 3 ++- .../FenixEduLearningResources_pt.properties | 3 ++- 5 files changed, 22 insertions(+), 4 deletions(-) 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 d6c1a9b..9a1d444 100644 --- a/src/main/java/org/fenixedu/learning/domain/degree/DegreeSite.java +++ b/src/main/java/org/fenixedu/learning/domain/degree/DegreeSite.java @@ -27,8 +27,11 @@ 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; @@ -50,6 +53,7 @@ public DegreeSite(Degree degree) { setCreationDate(new DateTime()); setCanAdminGroup(DynamicGroup.get("managers")); + setCanPostGroup(CoordinatorGroup.get(degree)); setPublished(true); setBennu(Bennu.getInstance()); @@ -91,9 +95,18 @@ public Stream getCategoriesToShow() { } 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()).findFirst() - .orElseThrow(() -> new RuntimeException("no.degree.site.folder.was.found")); + .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 3d96b35..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,6 +31,7 @@ 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; @@ -63,6 +64,7 @@ public ExecutionCourseSite(ExecutionCourse executionCourse) { setCreationDate(new DateTime()); setCanAdminGroup(DynamicGroup.get("managers")); + setCanPostGroup(TeacherResponsibleOfExecutionCourseGroup.get(executionCourse)); setPublished(true); setBennu(Bennu.getInstance()); 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.