diff --git a/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java b/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java index 5e790b6963e5bece6ecdde48a102ced589e2db0a..c88f89c156c4b18a4457be3ee10521b3160e923a 100644 --- a/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java +++ b/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java @@ -32,6 +32,7 @@ import org.olat.course.highscore.model.HighScoreRankingResults; import org.olat.course.highscore.ui.HighScoreTableEntry; import org.olat.modules.assessment.AssessmentEntry; import org.olat.user.UserManager; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -44,6 +45,9 @@ public class HighScoreManager { private static final OLog log = Tracing.createLoggerFor(HighScoreManager.class); + @Autowired + private UserManager userManager; + /** * Sort rank by score, then by id and last alphabetically, * determine rank of each member dependent on score, @@ -52,7 +56,7 @@ public class HighScoreManager { public HighScoreRankingResults sortRankByScore (List<AssessmentEntry> assessEntries, List<HighScoreTableEntry> allMembers, List<HighScoreTableEntry> ownIdMembers, List<List<HighScoreTableEntry>> allPodium, List<Integer> ownIdIndices, - int tableSize, Identity ownIdentity, UserManager userManager){ + int tableSize, Identity ownIdentity){ HighScoreTableEntry ownTableEntry = null; @@ -118,10 +122,17 @@ public class HighScoreManager { double min = Math.floor(Arrays.stream(scores).min().getAsDouble()); double range = max - min; // use original scores if range is too small else convert results to fit histogram - if (range <= 20) { + if (range <= 20 && range <0) { classwidth = 1; return new HighScoreRankingResults(scores, classwidth, min); } else { + if(lowerBorder == null) { + lowerBorder = 0f; + } + if(upperBorder == null) { + upperBorder = (float)max; + } + // decrease amount of possible classes to avoid overlapping of large numbers(condition) on x-axis boolean largeNumbers = range > 100d || max >= 1000d; int maxnumberofclasses = largeNumbers ? 12 : 20; diff --git a/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java b/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java index 0838e0f6ea468e7c63b3764afa4d4742258bb9c6..937d6717e3ca5d0db7b53b13530a0d23f3aae2c1 100644 --- a/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java +++ b/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java @@ -182,7 +182,7 @@ public class HighScoreRunController extends FormBasicController{ // compute ranking and order highscoreDataModel = highScoreManager.sortRankByScore(assessEntries, allMembers, ownIdMembers, - allPodium, ownIdIndices, tableSize, ownIdentity, userManager); + allPodium, ownIdIndices, tableSize, ownIdentity); allScores = highscoreDataModel.getScores(); diff --git a/src/main/java/org/olat/group/ui/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/group/ui/_i18n/LocalStrings_pl.properties index ed44b7942f4ce6b1a536c6ae58a789a9fb9ec9cf..34ad1884da83b245d794d60f56145184b6678335 100644 --- a/src/main/java/org/olat/group/ui/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/group/ui/_i18n/LocalStrings_pl.properties @@ -1,4 +1,4 @@ -#Thu Jul 27 15:56:40 CEST 2017 +#Thu Aug 03 10:29:08 CEST 2017 LearningGroup=Grupa edukacyjna action.choose=Wybierz admin.menu.title=Grupa @@ -91,25 +91,31 @@ module.admin.title=Zarz\u0105dzanie grupami module.privacy.desc=W celu zachowania zgodno\u015B\u0107 z zasadami dotycz\u0105cymi prywatno\u015Bci danych, dodawanie u\u017Cytkownika do grupy mo\u017Ce by\u0107 skonfigurowane tak, aby spowodowa\u0107 jego natychmiastowe cz\u0142onkostwo w grupie lub tylko wys\u0142anie zaproszenia, kt\u00F3re musi zosta\u0107 jednoznacznie zaakceptowane przez u\u017Cytkownika przed przyst\u0105pieniem do cz\u0142onkostwa w grupie. module.privacy.title=Ochrona danych module.resource.courses=Menad\u017Cerowie grup mog\u0105 wyszukiwa\u0107 i przypisywa\u0107 wszystkie kursy grupom. +module.resource.courses.grant=Przyznane pe\u0142ne prawa dost\u0119pu do kursu +module.resource.desc=W\u0142a\u015Bciciele kurs\u00F3w i grup mog\u0105 przypisywa\u0107 swoje grupy do swoich kurs\u00F3w. Dzi\u0119ki poni\u017Cszym ustawieniom, prawa do do\u0142\u0105czania i od\u0142\u0105czania grup do kurs\u00F3w mog\u0105 zosta\u0107 przypisane menad\u017Cerom grup i menad\u017Cerom zasob\u00F3w edukacyjnych. +module.resource.groups=Menad\u017Cerowie zasob\u00F3w edukacyjnych mog\u0105 do\u0142\u0105cza\u0107 wszystkie grupy do kurs\u00F3w. +module.resource.groups.grant=Przyznane pe\u0142ne prawa do zarz\u0105dzania grup\u0105 +module.resource.title=Grupa - przydzielanie zasob\u00F3w newgroup.title=Utw\u00F3rz now\u0105 grup\u0119 edukacyjn\u0105 notification.mail.added.body=*** Wiadomo\u015B\u0107 generowana automatycznie, nie odpowiadaj na ni\u0105 *** \r\n\r\nZosta\u0142e\u015B zaproszony do grupy przez\: {0} {1} ({2})\: \r\n\r\nNazwa grupy\: $groupname\r\nOpis\: $groupdescription\r\n\r\nW razie pyta\u0144 skontaktuj si\u0119 z {0} {1} ({2}). \r\n\r\nTa grupa edukacyjna jest u\u017Cywana w nast\u0119puj\u0105cych zasobach edukacyjnych\:\r\n\r\n$courselist notification.mail.added.self.body=*** Wiadomo\u015B\u0107 generowana automatycznie, nie odpowiadaj na ni\u0105 *** \r\n\r\nW\u0142a\u015Bnie zapisa\u0142e\u015B si\u0119 do grupy\: \r\n\r\nNazwa grupy\: $groupname\r\nOpis\: $groupdescription\r\n\r\nTa grupa edukacyjna b\u0119dzie u\u017Cywana w nast\u0119puj\u0105cych zasobach edukacyjnych\:\r\n\r\n$courselist -notification.mail.added.self.subject=Grupa edukacyjna OLAT\: $groupname +notification.mail.added.self.subject=Grupa edukacyjna $groupname notification.mail.added.subject=Grupa edukacyjna OLAT\: $groupname notification.mail.error=Nie uda\u0142o si\u0119 wys\u0142a\u0107 wiadomo\u015Bci e-mail. Poinformuj tego u\u017Cytkownika osobi\u015Bcie. +notification.mail.no.ressource=Ta grupa nie jest wykorzystywana w \u017Cadnym zasobie edukacyjnym. notification.mail.removed.body=*** Wiadomo\u015B\u0107 generowana automatycznie, nie odpowiadaj na ni\u0105 *** \r\n\r\nZosta\u0142e\u015B wypisany z grupy przez\: {0} {1} ({2})\: \r\n\r\nNazwa grupy\: $groupname\r\nOpis\: $groupdescription\r\n\r\nW razie pyta\u0144 skontaktuj si\u0119 z{0} {1} ({2}).\r\n\r\nTa grupa edukacyjna jest u\u017Cywana w nast\u0119puj\u0105cych zasobach edukacyjnych\:\r\n\r\n$courselist notification.mail.removed.self.body=*** Wiadomo\u015B\u0107 generowana automatycznie, nie odpowiadaj na ni\u0105 *** \r\n\r\nWypisa\u0142e\u015B si\u0119 z grupy\: \r\n\r\nNazwa grupy\: $groupname\r\nOpis\: $groupdescription\r\n\r\nTa grupa edukacyjna by\u0142a u\u017Cywana w nast\u0119puj\u0105cych zasobach edukacyjnych\:\r\n\r\n$courselist -notification.mail.removed.self.subject=Grupa edukacyjna OLAT\: $groupname - Zosta\u0142e\u015B wypisany. +notification.mail.removed.self.subject=Grupa edukacyjna $groupname - Zosta\u0142e\u015B wypisany. notification.mail.removed.subject=Grupa edukacyjna OLAT\: $groupname - Zosta\u0142e\u015B wypisany. notification.mail.self.error=Nie uda\u0142o si\u0119 wys\u0142a\u0107 wiadomo\u015Bci e-mail notification.mail.waitingList.added.body=*** Wiadomo\u015B\u0107 generowana automatycznie, nie odpowiadaj na ni\u0105 *** \n\n Jeste\u015B w kolejce oczekuj\u0105cych do nast\u0119puj\u0105cej grupy edukacyjnej\: \n\n Nazwa grupy\: $groupname\n Opis\: $groupdescription\n\n -notification.mail.waitingList.added.subject=Grupa edukacyjna OLAT\: $groupname - kolejka oczekuj\u0105cych +notification.mail.waitingList.added.subject=Grupa edukacyjna $groupname - kolejka oczekuj\u0105cych notification.mail.waitingList.removed.body=*** Wiadomo\u015B\u0107 generowana automatycznie, nie odpowiadaj na ni\u0105 *** \n\n Nie jeste\u015B ju\u017C w kolejce oczekuj\u0105cych do nast\u0119puj\u0105cej grupy edukacyjnej\: \n\n Nazwa grupy\: $groupname\n Opis\: $groupdescription\n\n -notification.mail.waitingList.removed.subject=Grupa edukacyjna OLAT\: $groupname - kolejka oczekuj\u0105cych\: Zosta\u0142e\u015B wypisany +notification.mail.waitingList.removed.subject=Grupa edukacyjna $groupname - kolejka oczekuj\u0105cych\: Zosta\u0142e\u015B wypisany notification.mail.waitingList.transfer.body=*** Wiadomo\u015B\u0107 generowana automatycznie, nie odpowiadaj na ni\u0105 *** \n\n Zosta\u0142e\u015B automatycznie przeniesiony z kolejki oczekuj\u0105cych do listy uczestnik\u00F3w nast\u0119puj\u0105cej grupy edukacyjnej\: \n\n Nazwa grupy\: $groupname\n Opis\: $groupdescription\n\n -notification.mail.waitingList.transfer.subject=Grupa edukacyjna OLAT\: $groupname - kolejka oczekuj\u0105cych\: Zmiana Twojego statusu +notification.mail.waitingList.transfer.subject=Grupa edukacyjna $groupname - kolejka oczekuj\u0105cych\: Zmiana Twojego statusu overview.intro=Zarz\u0105dzanie grupami edukacyjnymi kursu. -overview.title=Zarz\u0105dzanie kontekstem edukacyjnym +overview.title=Zarz\u0105dzanie grup\u0105 owners.message=E-mail do wszystkich w\u0142a\u015Bcicieli owners.message.to=Wszyscy nauczyciele sendtochooser.form.chckbx.owners=Wszyscy nauczyciele diff --git a/src/main/java/org/olat/ims/qti21/pool/QTI21QPoolServiceProvider.java b/src/main/java/org/olat/ims/qti21/pool/QTI21QPoolServiceProvider.java index fc81c2bc91db4ab1f4866c1bdc00e0f303642568..e1f8f7674c4445d1b4a88ddb89e0b653044bf417 100644 --- a/src/main/java/org/olat/ims/qti21/pool/QTI21QPoolServiceProvider.java +++ b/src/main/java/org/olat/ims/qti21/pool/QTI21QPoolServiceProvider.java @@ -1,4 +1,5 @@ /** + * <a href="http://www.openolat.org"> * OpenOLAT - Online Learning and Training</a><br> * <p> @@ -211,6 +212,10 @@ public class QTI21QPoolServiceProvider implements QPoolSPI { VFSItem file = container.resolve(item.getRootFilename()); if(file instanceof VFSLeaf) { VFSLeaf leaf = (VFSLeaf)file; + if(leaf.getSize() <= 0l) { + return ""; + } + QTI21SAXHandler handler = new QTI21SAXHandler(); try(InputStream is = leaf.getInputStream()) { XMLReader parser = XMLReaderFactory.createXMLReader(); @@ -219,7 +224,7 @@ public class QTI21QPoolServiceProvider implements QPoolSPI { parser.setFeature("http://xml.org/sax/features/validation", false); parser.parse(new InputSource(is)); } catch (Exception e) { - log.error("", e); + log.error("Cannot read the XML file of the question item: " + leaf, e); } return handler.toString(); } diff --git a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java index ec69dea6b8bf1f44fb8d98f46789d7c08256afc2..c9ac65800f796d603f8442cda0da48c878e938b0 100644 --- a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java +++ b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java @@ -489,6 +489,7 @@ public class LDAPLoginManagerImpl implements LDAPLoginManager, GenericEventListe String filter = ldapDao.buildSearchUserFilter(ldapUserIDAttribute, uid); LdapContext ctx = bindSystem(); String userDN = ldapDao.searchUserDNByUid(uid, ctx); + log.info("create and persist user identifier by userDN: " + userDN + " with filter: " + filter); LDAPUserVisitor visitor = new LDAPUserVisitor(syncConfiguration); ldapDao.search(visitor, userDN, filter, syncConfiguration.getUserAttributes(), ctx); diff --git a/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java b/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java index 501095325e05d986bcc00d1f8ebf964489ca765e..6f0095e68a4c4d5876b55f681eefd55abc59842c 100644 --- a/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java +++ b/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java @@ -500,10 +500,12 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController protected void processEntryChangedEvent(EntryChangedEvent repoEvent) { if(repoEvent.isMe(getIdentity()) && (repoEvent.getChange() == Change.addBookmark || repoEvent.getChange() == Change.removeBookmark)) { - boolean marked = markManager.isMarked(OresHelper.clone(re), getIdentity(), null); - String css = "o_icon " + (marked ? Mark.MARK_CSS_ICON : Mark.MARK_ADD_CSS_ICON); - bookmarkLink.setIconLeftCSS(css); - bookmarkLink.setTitle( translate(marked ? "details.bookmark.remove" : "details.bookmark")); + if(bookmarkLink != null) { + boolean marked = markManager.isMarked(OresHelper.clone(re), getIdentity(), null); + String css = "o_icon " + (marked ? Mark.MARK_CSS_ICON : Mark.MARK_ADD_CSS_ICON); + bookmarkLink.setIconLeftCSS(css); + bookmarkLink.setTitle( translate(marked ? "details.bookmark.remove" : "details.bookmark")); + } } } diff --git a/src/test/java/org/olat/course/highscore/HighScoreManagerTest.java b/src/test/java/org/olat/course/highscore/HighScoreManagerTest.java index 3b1cd5164bac0bdbdd6e19b04741b2a5a7971cb1..7c82bb9d5176e32062a486c06a853582dc9de8af 100644 --- a/src/test/java/org/olat/course/highscore/HighScoreManagerTest.java +++ b/src/test/java/org/olat/course/highscore/HighScoreManagerTest.java @@ -24,6 +24,12 @@ * <p> */ package org.olat.course.highscore; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.math.BigDecimal; +import java.util.ArrayList; /** * Description:<br> * HighScoreManagerTest @@ -31,11 +37,6 @@ package org.olat.course.highscore; * @author fkiefer */ import java.util.List; - -import static org.junit.Assert.*; - -import java.math.BigDecimal; -import java.util.ArrayList; import java.util.UUID; import org.junit.Test; @@ -48,35 +49,19 @@ import org.olat.modules.assessment.manager.AssessmentEntryDAO; import org.olat.repository.RepositoryEntry; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; -import org.olat.user.UserManager; import org.springframework.beans.factory.annotation.Autowired; public class HighScoreManagerTest extends OlatTestCase { - private List<HighScoreTableEntry> allMembers, ownIdMembers; - private List<List<HighScoreTableEntry>> allPodium; - private List<Integer> ownIdIndices; - - @Autowired - private HighScoreManager highScoreManager; - @Autowired - private UserManager userManager; @Autowired private DB dbInstance; @Autowired + private HighScoreManager highScoreManager; + @Autowired private AssessmentEntryDAO courseNodeAssessmentDao; - - @Test - public void springtest() { - assertNotNull(highScoreManager); - assertNotNull(userManager); - assertNotNull(dbInstance); - assertNotNull(courseNodeAssessmentDao); - } @Test public void highscoreTest() { - List<AssessmentEntry> assessEntries = new ArrayList<>(); int[] scores = {1,23,10}; Identity assessedIdentity = null; @@ -92,17 +77,17 @@ public class HighScoreManagerTest extends OlatTestCase { AssessmentEntry reloadedAssessment = courseNodeAssessmentDao.loadAssessmentEntryById(nodeAssessment.getKey()); assessEntries.add(reloadedAssessment); } - - ownIdIndices = new ArrayList<>(); - allMembers = new ArrayList<>(); - ownIdMembers = new ArrayList<>(); - allPodium = new ArrayList<>(); + + List<Integer> ownIdIndices = new ArrayList<>(); + List<HighScoreTableEntry> allMembers = new ArrayList<>(); + List<HighScoreTableEntry> ownIdMembers = new ArrayList<>(); + List<List<HighScoreTableEntry>> allPodium = new ArrayList<>(); allPodium.add(new ArrayList<>()); allPodium.add(new ArrayList<>()); allPodium.add(new ArrayList<>()); double[] allScores = highScoreManager.sortRankByScore(assessEntries, allMembers, ownIdMembers, allPodium, - ownIdIndices, 5, JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-2"), userManager) + ownIdIndices, 5, JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-2")) .getScores(); assertNotNull(allScores); @@ -115,7 +100,5 @@ public class HighScoreManagerTest extends OlatTestCase { long classwidth = highScoreManager.processHistogramData(allScores, 0F, 30F).getClasswidth(); assertEquals(2L, classwidth); - } - -} +} \ No newline at end of file