diff --git a/src/main/java/org/olat/course/assessment/ui/mode/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/assessment/ui/mode/_i18n/LocalStrings_de.properties index 6921c36bca801437717475c861020a1b95810264..247716aad7113dd5a0b10a51f7a2e3c6e8ffb856 100644 --- a/src/main/java/org/olat/course/assessment/ui/mode/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/assessment/ui/mode/_i18n/LocalStrings_de.properties @@ -48,7 +48,7 @@ current.mode.in=Die Pr\u00FCfung f\u00E4ngt in {0} Minuten an. curriculum.elements=Curriculum date.and.time=Datum und Zeit date.and.time.text.same.day={0} {1} - {3} (-{4}/+{5} Min.) -date.and.time.text.same.day={0} {1} - {2} {3} (-{4}/+{5} Min.) +date.and.time.text={0} {1} - {2} {3} (-{4}/+{5} Min.) delete.mode=Pr\u00FCfungskonfiguration l\u00F6schen edit=Bearbeiten elements=Kursbausteine diff --git a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java index ede61f85fe6153786bf6f7b7729b94581a04ed3a..5b19a1e9ec7c977b2aad6e0382031e89f2f57964 100644 --- a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java +++ b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java @@ -907,7 +907,6 @@ public class LDAPLoginManagerImpl implements LDAPLoginManager, GenericEventListe errors.insert("LDAP connection ERROR"); log.error("LDAP batch sync: LDAP connection empty"); freeSyncLock(); - success = false; return success; } Date timeBeforeSync = new Date(); diff --git a/src/main/java/org/olat/ldap/ui/LDAPAdminController.java b/src/main/java/org/olat/ldap/ui/LDAPAdminController.java index 8e2d21127397ebc0e196580cee397be765e6d0fc..89cca444075aed75d47f08c59882e2ff18f5a07a 100644 --- a/src/main/java/org/olat/ldap/ui/LDAPAdminController.java +++ b/src/main/java/org/olat/ldap/ui/LDAPAdminController.java @@ -44,7 +44,6 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowC import org.olat.core.gui.control.generic.wizard.Step; import org.olat.core.gui.control.generic.wizard.StepRunnerCallback; import org.olat.core.gui.control.generic.wizard.StepsMainRunController; -import org.olat.core.gui.control.generic.wizard.StepsRunContext; import org.olat.core.id.Identity; import org.olat.core.logging.LogRealTimeViewerController; import org.olat.core.util.coordinate.CoordinatorManager; @@ -69,7 +68,7 @@ public class LDAPAdminController extends BasicController implements GenericEvent private VelocityContainer ldapAdminVC; private DateFormat dateFormatter; private Link syncStartLink; - private Link deletStartLink; + private Link deleteStartLink; private StepsMainRunController deleteStepController; private boolean hasIdentitiesToDeleteAfterRun; private Integer amountUsersToDelete; @@ -97,7 +96,7 @@ public class LDAPAdminController extends BasicController implements GenericEvent removeFallBackAuthsLink = LinkFactory.createButton("remove.fallback.auth", ldapAdminVC, this); } // Create start delete User link - deletStartLink = LinkFactory.createButton("delete.button.start", ldapAdminVC, this); + deleteStartLink = LinkFactory.createButton("delete.button.start", ldapAdminVC, this); // Create real-time log viewer LogRealTimeViewerController logViewController = new LogRealTimeViewerController(ureq, control, "org.olat.ldap", Level.DEBUG, false); listenTo(logViewController); @@ -124,11 +123,6 @@ public class LDAPAdminController extends BasicController implements GenericEvent } } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.components.Component, - * org.olat.core.gui.control.Event) - */ @Override protected void event(UserRequest ureq, Component source, Event event) { if (source == syncStartLink) { @@ -145,111 +139,33 @@ public class LDAPAdminController extends BasicController implements GenericEvent calloutCtr.addDisposableChildController(userSearchCtrl); calloutCtr.activate(); listenTo(calloutCtr); - } else if (source == deletStartLink) { - // cancel if some one else is making sync or delete job - if (!ldapLoginManager.acquireSyncLock()) { - showError("delete.error.lock"); - } else { - deletStartLink.setEnabled(false); - - // check and get LDAP connection - LdapContext ctx = ldapLoginManager.bindSystem(); - if (ctx == null) { - showError("delete.error.connection"); - return; - } - // get deleted users - List<Identity> identitiesToDelete = ldapLoginManager.getIdentitysDeletedInLdap(ctx); - try { - ctx.close(); - } catch (NamingException e) { - showError("delete.error.connection.close"); - logError("Could not close LDAP connection on manual delete sync", e); - } - - if (identitiesToDelete != null) { - for(Iterator<Identity> it=identitiesToDelete.iterator(); it.hasNext(); ) { - if(Identity.STATUS_PERMANENT.equals(it.next().getStatus())) { - it.remove(); - } - } - } - - boolean hasIdentitiesToDelete; - if (identitiesToDelete != null && identitiesToDelete.size() != 0) { - hasIdentitiesToDelete = true; - /* - * start step which spawns the whole wizard - */ - Step start = new DeletStep00(ureq, hasIdentitiesToDelete, identitiesToDelete); - /* - * wizard finish callback called after "finish" is called - */ - StepRunnerCallback finishCallback = new StepRunnerCallback() { - @Override - public Step execute(UserRequest uureq, WindowControl control, StepsRunContext runContext) { - hasIdentitiesToDeleteAfterRun = ((Boolean) runContext.get("hasIdentitiesToDelete")).booleanValue(); - if (hasIdentitiesToDeleteAfterRun) { - - @SuppressWarnings("unchecked") - List<Identity> idToDelete = (List<Identity>) runContext.get("identitiesToDelete"); - amountUsersToDelete = idToDelete.size(); - // Delete all identities now and tell everybody that - // we are finished - ldapLoginManager.deleteIdentities(idToDelete, getIdentity()); - return StepsMainRunController.DONE_MODIFIED; - } else { - return StepsMainRunController.DONE_UNCHANGED; - } - // otherwise return without deleting anything - } - - }; - deleteStepController = new StepsMainRunController(ureq, getWindowControl(), start, finishCallback, null, - translate("admin.deleteUser.title"), "o_sel_ldap_delete_user_wizard"); - listenTo(deleteStepController); - getWindowControl().pushAsModalDialog(deleteStepController.getInitialComponent()); - } - else { - hasIdentitiesToDelete = false; - showInfo("delete.step.noUsers"); - deletStartLink.setEnabled(true); - ldapLoginManager.freeSyncLock(); - } - } + } else if (source == deleteStartLink) { + doStartDeleteProcess(ureq); } else if (source == removeFallBackAuthsLink){ removeFallBackAuthsLink.setEnabled(false); ldapLoginManager.removeFallBackAuthentications(); showInfo("opsuccess"); } - } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.controller.Controller, - * org.olat.core.gui.control.Event) - */ + @Override protected void event(UserRequest ureq, Controller source, Event event) { if (source == deleteStepController) { if (event == Event.CANCELLED_EVENT || event == Event.FAILED_EVENT) { getWindowControl().pop(); removeAsListenerAndDispose(deleteStepController); showInfo("delete.step.cancel"); - ldapLoginManager.freeSyncLock(); - deletStartLink.setEnabled(true); + deleteStartLink.setEnabled(true); } else if (event == Event.CHANGED_EVENT || event == Event.DONE_EVENT) { getWindowControl().pop(); removeAsListenerAndDispose(deleteStepController); if(hasIdentitiesToDeleteAfterRun){ showInfo("delete.step.finish.users", amountUsersToDelete.toString()); - } - else{ + } else{ showInfo("delete.step.finish.noUsers"); } - ldapLoginManager.freeSyncLock(); - deletStartLink.setEnabled(true); - } else if (source == userSearchCtrl){ + deleteStartLink.setEnabled(true); + } else if (source == userSearchCtrl) { calloutCtr.deactivate(); Identity choosenIdent = ((SingleIdentityChosenEvent)event).getChosenIdentity(); ldapLoginManager.doSyncSingleUser(choosenIdent); @@ -257,6 +173,70 @@ public class LDAPAdminController extends BasicController implements GenericEvent } } + private void doStartDeleteProcess(UserRequest ureq) { + // cancel if some one else is making sync or delete job + if (!ldapLoginManager.acquireSyncLock()) { + showError("delete.error.lock"); + } else { + // check and get LDAP connection + LdapContext ctx = ldapLoginManager.bindSystem(); + if (ctx == null) { + showError("delete.error.connection"); + ldapLoginManager.freeSyncLock(); + return; + } + + deleteStartLink.setEnabled(false); + // get deleted users + List<Identity> identitiesToDelete = null; + try { + identitiesToDelete = ldapLoginManager.getIdentitysDeletedInLdap(ctx); + ctx.close(); + } catch (NamingException e) { + showError("delete.error.connection.close"); + logError("Could not close LDAP connection on manual delete sync", e); + } finally { + ldapLoginManager.freeSyncLock(); + } + + if (identitiesToDelete != null) { + for(Iterator<Identity> it=identitiesToDelete.iterator(); it.hasNext(); ) { + if(Identity.STATUS_PERMANENT.equals(it.next().getStatus())) { + it.remove(); + } + } + } + + if (identitiesToDelete != null && !identitiesToDelete.isEmpty()) { + // start step which spawns the whole wizard + Step start = new DeletStep00(ureq, true, identitiesToDelete); + // wizard finish callback called after "finish" is called + StepRunnerCallback finishCallback = (uureq, control, runContext) -> { + hasIdentitiesToDeleteAfterRun = ((Boolean) runContext.get("hasIdentitiesToDelete")).booleanValue(); + if (hasIdentitiesToDeleteAfterRun) { + @SuppressWarnings("unchecked") + List<Identity> idToDelete = (List<Identity>) runContext.get("identitiesToDelete"); + amountUsersToDelete = idToDelete.size(); + // Delete all identities now and tell everybody that + // we are finished + ldapLoginManager.deleteIdentities(idToDelete, getIdentity()); + return StepsMainRunController.DONE_MODIFIED; + } else { + // otherwise return without deleting anything + return StepsMainRunController.DONE_UNCHANGED; + } + }; + deleteStepController = new StepsMainRunController(ureq, getWindowControl(), start, finishCallback, null, + translate("admin.deleteUser.title"), "o_sel_ldap_delete_user_wizard"); + listenTo(deleteStepController); + getWindowControl().pushAsModalDialog(deleteStepController.getInitialComponent()); + } else { + showInfo("delete.step.noUsers"); + deleteStartLink.setEnabled(true); + } + } + } + /** * Callback method for asynchronous sync thread. Called when sync is finished @@ -264,7 +244,7 @@ public class LDAPAdminController extends BasicController implements GenericEvent * @param success * @param errors */ - void syncTaskFinished(boolean success, LDAPError errors) { + private void syncTaskFinished(boolean success, LDAPError errors) { if (success) { showWarning("admin.synchronize.finished.success"); logInfo("LDAP user synchronize job finished successfully"); diff --git a/src/main/java/org/olat/modules/lecture/ui/LectureRepositorySettingsController.java b/src/main/java/org/olat/modules/lecture/ui/LectureRepositorySettingsController.java index c9b2399f16bfab55ad623cef4af222b07dced4db..df8c5916733b8604540dd091fa0f3d90009ad8ef 100644 --- a/src/main/java/org/olat/modules/lecture/ui/LectureRepositorySettingsController.java +++ b/src/main/java/org/olat/modules/lecture/ui/LectureRepositorySettingsController.java @@ -308,6 +308,13 @@ public class LectureRepositorySettingsController extends FormBasicController { allOk &= false; } + if(assessmentFollowupTimeEl.isVisible() && assessmentFollowupTimeEl.isEnabled()) { + allOk &= validateInteger(assessmentFollowupTimeEl); + } + if(assessmentLeadTimeEl.isVisible() && assessmentLeadTimeEl.isEnabled()) { + allOk &= validateInteger(assessmentLeadTimeEl); + } + //override -> check rate attendanceRateEl.clearError(); if(overrideEl.isSelected(0)) { @@ -332,6 +339,32 @@ public class LectureRepositorySettingsController extends FormBasicController { return allOk; } + + private boolean validateInteger(TextElement el) { + boolean allOk = true; + + el.clearError(); + if(!StringHelper.containsNonWhitespace(el.getValue())) { + el.setErrorKey("form.legende.mandatory", null); + allOk &= false; + } else if(!StringHelper.isLong(el.getValue())) { + try { + int value = Integer.parseInt(el.getValue()); + if(value < 0) { + el.setErrorKey("form.error.nointeger", null); + allOk &= false; + } + } catch (NumberFormatException e) { + el.setErrorKey("form.error.nointeger", null); + allOk &= false; + } + } else { + el.setErrorKey("error.wrong.int", null); + allOk &= false; + } + + return allOk; + } @Override protected void formOK(UserRequest ureq) { diff --git a/src/main/java/org/olat/user/propertyhandlers/SmsPhonePropertyHandler.java b/src/main/java/org/olat/user/propertyhandlers/SmsPhonePropertyHandler.java index cadfc55b906ad49b5dfd4b527a013c81a2b1b0e1..ab2197438842b190441bcfad49099a4ad866b276 100644 --- a/src/main/java/org/olat/user/propertyhandlers/SmsPhonePropertyHandler.java +++ b/src/main/java/org/olat/user/propertyhandlers/SmsPhonePropertyHandler.java @@ -44,8 +44,8 @@ public class SmsPhonePropertyHandler extends PhonePropertyHandler { FormItemContainer formItemContainer) { String name = getName(); SmsPhoneElement phoneEl = new SmsPhoneElement(name, this, user, locale); - phoneEl.setLabel("form.name." + name, null); formItemContainer.add(phoneEl); + phoneEl.setLabel("form.name." + name, null); UserManager um = CoreSpringFactory.getImpl(UserManager.class); if(um.isUserViewReadOnly(usageIdentifyer, this)) { diff --git a/src/main/java/org/olat/user/propertyhandlers/UserInterestsPropertyHandler.java b/src/main/java/org/olat/user/propertyhandlers/UserInterestsPropertyHandler.java index 6c2fad439f88584b11f85535982ba041521c758b..9a9e57634df2fd4f0d8b3b1ee2c433114e8b2adc 100644 --- a/src/main/java/org/olat/user/propertyhandlers/UserInterestsPropertyHandler.java +++ b/src/main/java/org/olat/user/propertyhandlers/UserInterestsPropertyHandler.java @@ -79,8 +79,8 @@ public class UserInterestsPropertyHandler extends AbstractUserPropertyHandler { FormItemContainer formItemContainer) { String name = getName(); UserInterestsElement userInterestsElement = new UserInterestsElement(name, getInternalValue(user), locale); - userInterestsElement.setLabel("form.name." + name, null); formItemContainer.add(userInterestsElement); + userInterestsElement.setLabel("form.name." + name, null); return userInterestsElement; } diff --git a/src/main/java/org/olat/user/ui/role/RelationRolesAndRightsUIFactory.java b/src/main/java/org/olat/user/ui/role/RelationRolesAndRightsUIFactory.java index 58cbd4867e14698075fbcd6ce36bce3854fcc938..1845f786ddded122571c512534e999414a56cafb 100644 --- a/src/main/java/org/olat/user/ui/role/RelationRolesAndRightsUIFactory.java +++ b/src/main/java/org/olat/user/ui/role/RelationRolesAndRightsUIFactory.java @@ -21,6 +21,7 @@ package org.olat.user.ui.role; import java.util.Locale; +import org.apache.logging.log4j.Level; import org.olat.basesecurity.IdentityRelationshipService; import org.olat.basesecurity.RelationRight; import org.olat.basesecurity.RelationRightProvider; @@ -86,7 +87,7 @@ public class RelationRolesAndRightsUIFactory { } private static String getTranslated(Translator translator, String prefix, RelationRole role) { - String translatedRole = translator.translate(prefix.concat(role.getKey().toString())); + String translatedRole = translator.translate(prefix.concat(role.getKey().toString()), null, Level.OFF); if (translatedRole.length() > 256 || translatedRole.startsWith(prefix)) { translatedRole = role.getRole(); } diff --git a/src/main/webapp/static/js/jquery/openolat/jquery.drawing.js b/src/main/webapp/static/js/jquery/openolat/jquery.drawing.js index 08dfd948da70dbb8d02ddf525d72b7cc7284d4ae..1b2be5b55f08e567a419db944e960efbe0cb1ca0 100644 --- a/src/main/webapp/static/js/jquery/openolat/jquery.drawing.js +++ b/src/main/webapp/static/js/jquery/openolat/jquery.drawing.js @@ -115,8 +115,6 @@ height = parseInt(parts[3]) - top - 3; } - console.log(coords, left, top, width, height); - var nodes = jQuery("#" + id).height(height + 'px').width(width + 'px') .css('top', top + 'px').css('left', left + 'px'); if(this.settings.resize) {