diff --git a/src/main/java/org/olat/course/editor/PublishProcess.java b/src/main/java/org/olat/course/editor/PublishProcess.java index 8ff9a2a80701b2b3fada5ef03d4cf48bbdb66432..304465fa67df69d3d9d504982e927da371c11fd1 100644 --- a/src/main/java/org/olat/course/editor/PublishProcess.java +++ b/src/main/java/org/olat/course/editor/PublishProcess.java @@ -63,6 +63,8 @@ import org.olat.course.ICourse; import org.olat.course.Structure; import org.olat.course.editor.PublishStepCatalog.CategoryLabel; import org.olat.course.nodes.CourseNode; +import org.olat.course.nodes.CourseNodeConfiguration; +import org.olat.course.nodes.CourseNodeFactory; import org.olat.course.properties.CoursePropertyManager; import org.olat.course.run.RunMainController; import org.olat.course.tree.CourseEditorTreeModel; @@ -277,14 +279,12 @@ public class PublishProcess { // there are nodes generating cylces -> error! this is not a publishable // set! StringBuilder sb = new StringBuilder(); - for (Iterator<String> iter = nodesInCycle.iterator(); iter.hasNext();) { - String id = iter.next(); + for (String id: nodesInCycle) { String title = editorTreeModel.getCourseEditorNodeById(id).getTitle(); - sb.append("<b>").append(title).append("</b>"); - sb.append("(id:").append(id).append(")<br />"); + sb.append("<b>").append(title).append("</b> ").append("(id:").append(id).append(")<br>"); } - StatusDescription sd = new StatusDescription(ValidationStatus.ERROR, "pbl.error.cycles", "pbl.error.cycles", new String[] { sb - .toString() }, PACKAGE); + StatusDescription sd = new StatusDescription(ValidationStatus.ERROR, "pbl.error.cycles", "pbl.error.cycles", + new String[] { sb.toString() }, PACKAGE); status = new StatusDescription[] { sd }; } else { /* @@ -650,45 +650,38 @@ public class PublishProcess { String assemblePublishConfirmation() { - List<String> nodeIdsToPublish = this.originalNodeIdsToPublish; - + List<String> nodeIdsToPublish = originalNodeIdsToPublish; StringBuilder msg = new StringBuilder(); OLATResourceable courseRunOres = OresHelper.createOLATResourceableInstance(RunMainController.ORES_TYPE_COURSE_RUN, repositoryEntry.getOlatResource().getResourceableId()); int cnt = CoordinatorManager.getInstance().getCoordinator().getEventBus().getListeningIdentityCntFor(courseRunOres) -1; // -1: Remove myself from list - if (cnt < 0 ) { - cnt = 0;// do not show any negative value - } if (cnt > 0) { msg.append(translate("pbl.confirm.users", String.valueOf(cnt))); } else { msg.append(translator.translate("pbl.confirm")); } - msg.append("<ul>"); - - if(nodeIdsToPublish == null){ - return msg.toString(); - } - CourseEditorTreeModel cetm = course.getEditorTreeModel(); - for (int i = 0; i < nodeIdsToPublish.size(); i++) { - msg.append("<li>"); - String nodeId = nodeIdsToPublish.get(i); - CourseEditorTreeNode cetn = (CourseEditorTreeNode) cetm.getNodeById(nodeId); - CourseNode cn = cetm.getCourseNode(nodeId); - msg.append(cn.getShortTitle()); - if (cetn.isDeleted() && !cetn.isNewnode()) { - //use locale of this initialized translator. - String onDeleteMessage = cn.informOnDelete(translator.getLocale(), course); - if (onDeleteMessage != null) { - msg.append("<br /><font color=\"red\">"); - msg.append(onDeleteMessage); - msg.append("</font>"); + if(nodeIdsToPublish != null && nodeIdsToPublish.size() > 0) { + msg.append("<ul class='list-unstyled'>"); + + CourseEditorTreeModel cetm = course.getEditorTreeModel(); + for (int i = 0; i < nodeIdsToPublish.size(); i++) { + msg.append("<li>"); + String nodeId = nodeIdsToPublish.get(i); + CourseEditorTreeNode cetn = (CourseEditorTreeNode) cetm.getNodeById(nodeId); + CourseNode cn = cetm.getCourseNode(nodeId); + if (cetn.isDeleted() && !cetn.isNewnode()) { + msg.append("<i class='o_icon o_icon_delete_item'> </i> "); + } else { + CourseNodeConfiguration nodeConfig = CourseNodeFactory.getInstance().getCourseNodeConfigurationEvenForDisabledBB(cn.getType()); + if(nodeConfig != null) { + msg.append("<i class='o_icon ").append(nodeConfig.getIconCSSClass()).append("'> </i> "); + } } + msg.append(cn.getShortTitle()).append("</li>"); } - msg.append("</li>"); + msg.append("</ul>"); } - msg.append("</ul>"); return msg.toString(); } diff --git a/src/main/java/org/olat/course/editor/PublishStep00.java b/src/main/java/org/olat/course/editor/PublishStep00.java index 7c8281a796134261cefcde48809d003f349c90db..e6d8547149010b8bfd6ab16e22e5d5a0df9213ad 100644 --- a/src/main/java/org/olat/course/editor/PublishStep00.java +++ b/src/main/java/org/olat/course/editor/PublishStep00.java @@ -190,7 +190,7 @@ class PublishStep00 extends BasicStep { } } - List<String> asList = new ArrayList<String>(selectedKeys); + List<String> asList = new ArrayList<>(selectedKeys); publishManager2.createPublishSetFor(asList); addToRunContext("publishSetCreatedFor", selectedKeys); // @@ -211,11 +211,11 @@ class PublishStep00 extends BasicStep { // assemble warnings and errors String generalErrorTxt = null; String errorTxt = getTranslator().translate("publish.notpossible.setincomplete"); - String warningTxt = getTranslator().translate("publish.withwarnings"); + String warningTxt = ""; - String errors = "<ul>"; + String errors = "<ul class='list-unstyled'>"; int errCnt = 0; - String warnings = "<ul>"; + String warnings = "<ul class='list-unstyled'>"; for (int i = 0; i < sds.length; i++) { StatusDescription description = sds[i]; String nodeId = sds[i].getDescriptionForUnit(); @@ -225,7 +225,7 @@ class PublishStep00 extends BasicStep { break; } String nodeName = publishProcess.getCourseEditorTreeModel().getCourseNode(nodeId).getShortName(); - String isFor = "<b>" + nodeName + "</b><br/>"; + String isFor = "<h5>" + nodeName + "</h5>"; if (description.isError()) { errors += "<li>" + isFor + description.getShortDescription(getLocale()) + "</li>"; errCnt++; @@ -236,8 +236,8 @@ class PublishStep00 extends BasicStep { warnings += "</ul>"; errors += "</ul>"; // - errorTxt += "<p/>" + errors; - warningTxt += "<p/>" + warnings; + errorTxt += errors; + warningTxt += warnings; if (generalErrorTxt != null) { addToRunContext("STEP00.generalErrorText", generalErrorTxt); diff --git a/src/main/java/org/olat/course/editor/PublishStep00a.java b/src/main/java/org/olat/course/editor/PublishStep00a.java index 3e2a39d50e5e6dd415e20ac3da47bdb70c52924c..b1ec6c43c41155c220c76ca46d2af58fef16a148 100644 --- a/src/main/java/org/olat/course/editor/PublishStep00a.java +++ b/src/main/java/org/olat/course/editor/PublishStep00a.java @@ -27,6 +27,7 @@ package org.olat.course.editor; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.impl.Form; +import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.wizard.BasicStep; @@ -72,7 +73,7 @@ class PublishStep00a extends BasicStep implements Step { private static class PublishStep00aForm extends StepFormBasicController{ public PublishStep00aForm(UserRequest ureq, WindowControl control, Form rootForm, StepsRunContext runContext) { - super(ureq, control, rootForm, runContext, LAYOUT_VERTICAL, null); + super(ureq, control, rootForm, runContext, LAYOUT_CUSTOM, "publish_warnings"); initForm(ureq); } @@ -88,14 +89,15 @@ class PublishStep00a extends BasicStep implements Step { @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { - formLayout.setElementCssClass("o_sel_publish_update"); - - if(containsRunContextKey("STEP00.warningMessage")) { - uifactory.addStaticTextElement("warnings", null,(String)getFromRunContext("STEP00.warningMessage"), formLayout); - } else { - uifactory.addStaticTextElement("warnings", null, translate("publish.nowarnings"), formLayout); + if(formLayout instanceof FormLayoutContainer) { + FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout; + if(containsRunContextKey("STEP00.warningMessage")) { + layoutCont.contextPut("hasWarnings", Boolean.TRUE); + layoutCont.contextPut("warnings", getFromRunContext("STEP00.warningMessage")); + } else { + layoutCont.contextPut("hasWarnings", Boolean.FALSE); + } } } - } } \ No newline at end of file diff --git a/src/main/java/org/olat/course/editor/PublishStep00b.java b/src/main/java/org/olat/course/editor/PublishStep00b.java index 7824011ae6510651a44e05ba3ec931330dda6bd0..4d069c407255159bd40440fb6bab3a5e64d809ed 100644 --- a/src/main/java/org/olat/course/editor/PublishStep00b.java +++ b/src/main/java/org/olat/course/editor/PublishStep00b.java @@ -27,6 +27,7 @@ package org.olat.course.editor; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.impl.Form; +import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.wizard.BasicStep; @@ -85,7 +86,7 @@ class PublishStep00b extends BasicStep implements Step { class PublishStep00bForm extends StepFormBasicController { public PublishStep00bForm(UserRequest ureq, WindowControl control, Form rootForm, StepsRunContext runContext) { - super(ureq, control, rootForm, runContext, LAYOUT_VERTICAL, null); + super(ureq, control, rootForm, runContext, LAYOUT_CUSTOM, "publish_confirmation"); initForm(ureq); } @@ -104,7 +105,9 @@ class PublishStep00b extends BasicStep implements Step { protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { PublishProcess pp = (PublishProcess)getFromRunContext("publishProcess"); String confirmMsg= pp.assemblePublishConfirmation(); - uifactory.addStaticTextElement("message", null, confirmMsg, formLayout);//null > no label + if(formLayout instanceof FormLayoutContainer) { + ((FormLayoutContainer)formLayout).contextPut("message", confirmMsg); + } } } diff --git a/src/main/java/org/olat/course/editor/PublishStep01AccessForm.java b/src/main/java/org/olat/course/editor/PublishStep01AccessForm.java index 212c7f52281157583d1a0809afd1843d8e1a0027..a8fac72896a218cad7bb2bff2b9235d3b97b73b3 100644 --- a/src/main/java/org/olat/course/editor/PublishStep01AccessForm.java +++ b/src/main/java/org/olat/course/editor/PublishStep01AccessForm.java @@ -293,13 +293,13 @@ public class PublishStep01AccessForm extends StepFormBasicController { if(editable) { List<AccessMethod> methods = acService.getAvailableMethods(getIdentity(), ureq.getUserSession().getRoles()); for(AccessMethod method:methods) { - AccessMethodHandler handler = acModule.getAccessMethodHandler(method.getType()); - if(handler.isPaymentMethod() && !allowPaymentMethod) { + AccessMethodHandler methodHandler = acModule.getAccessMethodHandler(method.getType()); + if(methodHandler.isPaymentMethod() && !allowPaymentMethod) { continue; } - String title = handler.getMethodName(getLocale()); - FormLink add = uifactory.addFormLink("create." + handler.getType(), title, null, accessLayout, Link.LINK | Link.NONTRANSLATED); + String title = methodHandler.getMethodName(getLocale()); + FormLink add = uifactory.addFormLink("create." + methodHandler.getType(), title, null, accessLayout, Link.LINK | Link.NONTRANSLATED); add.setUserObject(method); add.setIconLeftCSS( ("o_icon " + method.getMethodCssClass() + "_icon o_icon-lg").intern()); addMethods.add(add); @@ -324,8 +324,8 @@ public class PublishStep01AccessForm extends StepFormBasicController { protected void loadConfigurations() { List<Offer> offers = acService.findOfferByResource(resource, true, null); for(Offer offer:offers) { - List<OfferAccess> offerAccess = acService.getOfferAccess(offer, true); - for(OfferAccess access:offerAccess) { + List<OfferAccess> offerAccessList = acService.getOfferAccess(offer, true); + for(OfferAccess access:offerAccessList) { button_id++; addConfiguration(access); } @@ -333,8 +333,8 @@ public class PublishStep01AccessForm extends StepFormBasicController { } protected void addConfiguration(OfferAccess link) { - AccessMethodHandler handler = acModule.getAccessMethodHandler(link.getMethod().getType()); - AccessInfo infos = new AccessInfo(handler.getMethodName(getLocale()), handler.isPaymentMethod(), null, link); + AccessMethodHandler methodHandler = acModule.getAccessMethodHandler(link.getMethod().getType()); + AccessInfo infos = new AccessInfo(methodHandler.getMethodName(getLocale()), methodHandler.isPaymentMethod(), null, link); infos.setButtonId(button_id); confControllers.add(infos); @@ -600,15 +600,15 @@ public class PublishStep01AccessForm extends StepFormBasicController { OfferAccess link = infos.getLink(); removeAsListenerAndDispose(editMethodCtrl); - AccessMethodHandler handler = acModule.getAccessMethodHandler(link.getMethod().getType()); - if (handler != null) { - editMethodCtrl = handler.editConfigurationController(ureq, getWindowControl(), link); + AccessMethodHandler methodHandler = acModule.getAccessMethodHandler(link.getMethod().getType()); + if (methodHandler != null) { + editMethodCtrl = methodHandler.editConfigurationController(ureq, getWindowControl(), link); } if(editMethodCtrl != null) { listenTo(editMethodCtrl); - String title = handler.getMethodName(getLocale()); + String title = methodHandler.getMethodName(getLocale()); cmc = new CloseableModalController(getWindowControl(), translate("close"), editMethodCtrl.getInitialComponent(), true, title); cmc.activate(); listenTo(cmc); @@ -620,14 +620,14 @@ public class PublishStep01AccessForm extends StepFormBasicController { OfferAccess link = acService.createOfferAccess(offer, method); removeAsListenerAndDispose(newMethodCtrl); - AccessMethodHandler handler = acModule.getAccessMethodHandler(link.getMethod().getType()); - if (handler != null) { - newMethodCtrl = handler.createConfigurationController(ureq, getWindowControl(), link); + AccessMethodHandler methodHandler = acModule.getAccessMethodHandler(link.getMethod().getType()); + if (methodHandler != null) { + newMethodCtrl = methodHandler.createConfigurationController(ureq, getWindowControl(), link); } if(newMethodCtrl != null) { listenTo(newMethodCtrl); - String title = handler.getMethodName(getLocale()); + String title = methodHandler.getMethodName(getLocale()); cmc = new CloseableModalController(getWindowControl(), translate("close"), newMethodCtrl.getInitialComponent(), true, title); cmc.activate(); listenTo(cmc); diff --git a/src/main/java/org/olat/course/editor/_content/publish_confirmation.html b/src/main/java/org/olat/course/editor/_content/publish_confirmation.html new file mode 100644 index 0000000000000000000000000000000000000000..cc0fe4dc3fb42060c1afb8d463da438db2545521 --- /dev/null +++ b/src/main/java/org/olat/course/editor/_content/publish_confirmation.html @@ -0,0 +1,5 @@ +## step PublishStepp00b +<div class="o_sel_publish_confirmation"> + <h4>$r.translate("publish.step.title.confirm")</h4> + <div class="o_info">$message</div> +</div> \ No newline at end of file diff --git a/src/main/java/org/olat/course/editor/_content/publish_warnings.html b/src/main/java/org/olat/course/editor/_content/publish_warnings.html new file mode 100644 index 0000000000000000000000000000000000000000..e10b92b0aa4d7e366e205c349a91983e363bcfa1 --- /dev/null +++ b/src/main/java/org/olat/course/editor/_content/publish_warnings.html @@ -0,0 +1,9 @@ +## step PublishStepp00a +<div class="o_sel_publish_warnings"> + #if($r.isTrue($hasWarnings)) + <h4>$r.translate("publish.withwarnings")</h4> + <div class="o_warning">$warnings</div> + #else + <div class="o_info">$r.translate("publish.nowarnings")</div> + #end +</div> \ No newline at end of file diff --git a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java index 27d9c659aaa037aada28a4e76c607cfe2fea4b39..a1df403d794fb9b7ac8bed58d783265759b158c0 100644 --- a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java +++ b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java @@ -515,7 +515,8 @@ public class CourseEditorPageFragment { //back By breadcrumpBackBy = By.cssSelector("#o_main_toolbar li.o_breadcrumb_back a"); browser.findElement(breadcrumpBackBy).click(); - OOGraphene.waitBusy(browser); + OOGraphene.waitBusyAndScrollTop(browser); + OOGraphene.waitModalDialog(browser); //auto publish By autoPublishBy = By.cssSelector("div.modal a.o_sel_course_quickpublish_auto"); @@ -533,7 +534,7 @@ public class CourseEditorPageFragment { WebElement publishButton = browser.findElement(publishButtonBy); Assert.assertTrue(publishButton.isDisplayed()); publishButton.click(); - OOGraphene.waitBusy(browser); + OOGraphene.waitBusyAndScrollTop(browser); OOGraphene.waitElement(By.cssSelector("div.o_sel_publish_nodes"), 5, browser); return new PublisherPageFragment(browser); } diff --git a/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java b/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java index 4459a72f2547ed39ac84ee67858aa9543a5287e1..11ab1cbc56f82933530df189ab249a6a6bac0b38 100644 --- a/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java +++ b/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java @@ -86,7 +86,7 @@ public class PublisherPageFragment { public PublisherPageFragment nextCatalog() { OOGraphene.nextStep(browser); - OOGraphene.waitElement(By.cssSelector("fieldset.o_sel_publish_update"), 5, browser); + OOGraphene.waitElement(By.cssSelector("div.o_sel_publish_warnings"), 5, browser); return this; } diff --git a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java index 572fe4cbf2bd746577afe22210a7900bcaf568e9..8eeb4205a18d5d1ef7c7ac499c9f36e11481b705 100644 --- a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java +++ b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java @@ -49,7 +49,6 @@ public class OOGraphene { private static final long defaultTimeout = 5;//seconds private static final By closeBlueBoxButtonBy = By.cssSelector("div.o_alert_info div.o_sel_info_message a.o_alert_close.o_sel_info_close"); - //private static final By closeBlueBoxButtonBy = By.cssSelector("div.o_alert_info div.o_sel_info_message a.o_alert_close.o_sel_info_close i.o_icon_close"); private static final By closeModalDialogButtonBy = By.cssSelector("div.modal-dialog div.modal-header button.close"); public static final By wizardNextBy = By.xpath("//div[contains(@class,'modal-footer')]//a[contains(@class,'o_wizard_button_next')]");