From f8dd2f094af1f2ce10aca02feba8b25fed4f97c7 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Wed, 15 Jun 2016 20:12:05 +0200 Subject: [PATCH] OO-2053: apply the same lock on the certification options as for the course editor --- .../ui/CertificatesOptionsController.java | 49 +++++++++++++++---- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java b/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java index 225c859cc7c..781465e94c8 100644 --- a/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java +++ b/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java @@ -61,6 +61,7 @@ import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; import org.olat.core.util.FileUtils; import org.olat.core.util.Util; import org.olat.core.util.coordinate.CoordinatorManager; +import org.olat.core.util.coordinate.LockResult; import org.olat.core.util.event.EventBus; import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.VFSMediaResource; @@ -75,9 +76,11 @@ import org.olat.course.config.CourseConfig; import org.olat.course.config.CourseConfigEvent; import org.olat.course.config.CourseConfigEvent.CourseConfigType; import org.olat.course.config.ui.CourseOptionsController; +import org.olat.course.run.RunMainController; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryManagedFlag; import org.olat.repository.RepositoryManager; +import org.olat.user.UserManager; import org.springframework.beans.factory.annotation.Autowired; /** @@ -119,7 +122,10 @@ public class CertificatesOptionsController extends FormBasicController { }; private final String mapperUrl; + private LockResult lockEntry; + @Autowired + private UserManager userManager; @Autowired private CertificatesManager certificatesManager; @@ -131,13 +137,32 @@ public class CertificatesOptionsController extends FormBasicController { RepositoryEntry entry, CourseConfig courseConfig, boolean editable) { super(ureq, wControl); setTranslator(Util.createPackageTranslator(CourseOptionsController.class, getLocale(), getTranslator())); + setTranslator(Util.createPackageTranslator(RunMainController.class, getLocale(), getTranslator())); this.courseConfig = courseConfig; this.entry = entry; - this.editable = editable; mapperUrl = registerMapper(ureq, new TemplateMapper()); - + lockEntry = CoordinatorManager.getInstance().getCoordinator().getLocker() + .acquireLock(entry.getOlatResource(), getIdentity(), CourseFactory.COURSE_EDITOR_LOCK); + this.editable = (lockEntry != null && lockEntry.isSuccess()) && editable; + initForm (ureq); + + if(lockEntry != null && !lockEntry.isSuccess()) { + String lockerName = "???"; + if(lockEntry.getOwner() != null) { + lockerName = userManager.getUserDisplayName(lockEntry.getOwner()); + } + showWarning("error.editoralreadylocked", new String[] { lockerName }); + } + } + + @Override + protected void doDispose() { + if (lockEntry != null && lockEntry.isSuccess()) { + CoordinatorManager.getInstance().getCoordinator().getLocker().releaseLock(lockEntry); + lockEntry = null; + } } @Override @@ -174,6 +199,7 @@ public class CertificatesOptionsController extends FormBasicController { templateCont.setLabel("pdf.certificates.template", null); selectTemplateLink = uifactory.addFormLink("select", templateCont, Link.BUTTON); + selectTemplateLink.setEnabled(editable); Long templateId = courseConfig.getCertificateTemplate(); boolean hasTemplate = templateId != null && templateId.longValue() > 0; if(hasTemplate) { @@ -193,6 +219,7 @@ public class CertificatesOptionsController extends FormBasicController { boolean reCertificationEnabled = courseConfig.isRecertificationEnabled(); reCertificationEl = uifactory.addCheckboxesHorizontal("recertification", formLayout, new String[]{ "xx" }, new String[]{ "" }); reCertificationEl.addActionListener(FormEvent.ONCHANGE); + reCertificationEl.setEnabled(editable); if(reCertificationEnabled) { reCertificationEl.select("xx", true); } @@ -206,6 +233,7 @@ public class CertificatesOptionsController extends FormBasicController { reCertificationTimelapseEl = uifactory.addIntegerElement("timelapse", null, timelapse, recertificationCont); reCertificationTimelapseEl.setDomReplacementWrapperRequired(false); reCertificationTimelapseEl.setDisplaySize(4); + reCertificationTimelapseEl.setEnabled(editable); String[] timelapseUnitValues = new String[] { translate("recertification.day"), translate("recertification.week"), @@ -214,6 +242,7 @@ public class CertificatesOptionsController extends FormBasicController { RecertificationTimeUnit timelapseUnit = courseConfig.getRecertificationTimelapseUnit(); reCertificationTimelapseUnitEl = uifactory.addDropdownSingleselect("timelapse.unit", null, recertificationCont, timelapseUnitKeys, timelapseUnitValues, null); reCertificationTimelapseUnitEl.setDomReplacementWrapperRequired(false); + reCertificationTimelapseUnitEl.setEnabled(editable); if(timelapseUnit != null) { reCertificationTimelapseUnitEl.select(timelapseUnit.name(), true); } else { @@ -234,7 +263,7 @@ public class CertificatesOptionsController extends FormBasicController { boolean none = !pdfCertificatesEl.isAtLeastSelected(1); templateCont.setVisible(!none); - selectTemplateLink.setEnabled(!none); + selectTemplateLink.setEnabled(!none && editable); if(none || selectedTemplate == null) { templateCont.contextPut("templateName", translate("default.template")); previewTemplateLink.setEnabled(false); @@ -247,13 +276,8 @@ public class CertificatesOptionsController extends FormBasicController { boolean enableRecertification = !none && reCertificationEl.isAtLeastSelected(1); recertificationCont.setVisible(enableRecertification); - reCertificationTimelapseEl.setEnabled(enableRecertification); - reCertificationTimelapseUnitEl.setEnabled(enableRecertification); - } - - @Override - protected void doDispose() { - // + reCertificationTimelapseEl.setEnabled(enableRecertification && editable); + reCertificationTimelapseUnitEl.setEnabled(enableRecertification && editable); } @Override @@ -352,6 +376,11 @@ public class CertificatesOptionsController extends FormBasicController { private void doChangeConfig(UserRequest ureq) { OLATResourceable courseOres = entry.getOlatResource(); + if(CourseFactory.isCourseEditSessionOpen(courseOres.getResourceableId())) { + showWarning("error.editoralreadylocked", new String[] { "???" }); + return; + } + ICourse course = CourseFactory.openCourseEditSession(courseOres.getResourceableId()); courseConfig = course.getCourseEnvironment().getCourseConfig(); -- GitLab