diff --git a/src/main/java/org/olat/core/CoreSpringInitializer.java b/src/main/java/org/olat/core/CoreSpringInitializer.java index 4f31bda1c3359cd82484a022bb6ca7d9a071d0c3..fa44262a02d0a1c704126ba4a3caff2445d33fd4 100644 --- a/src/main/java/org/olat/core/CoreSpringInitializer.java +++ b/src/main/java/org/olat/core/CoreSpringInitializer.java @@ -61,8 +61,8 @@ public class CoreSpringInitializer implements ApplicationContextInitializer<Conf } @Override - public Object getProperty(String name) { - if("jms.provider".equals(name)) { + public Object getProperty(String propertyName) { + if("jms.provider".equals(propertyName)) { return jmsProvider; } return null; diff --git a/src/main/java/org/olat/core/commons/services/text/impl/nutch/NGramProfile.java b/src/main/java/org/olat/core/commons/services/text/impl/nutch/NGramProfile.java index 58da3cafdda6cdf7a3fd31c2ac441f7d40cdcb04..2b260630a2f3d978d5379f54e479c5adc0de4766 100644 --- a/src/main/java/org/olat/core/commons/services/text/impl/nutch/NGramProfile.java +++ b/src/main/java/org/olat/core/commons/services/text/impl/nutch/NGramProfile.java @@ -125,23 +125,23 @@ public class NGramProfile { /** * Add ngrams from a single word to this profile * - * @param word is the word to add + * @param w is the word to add */ - public void add(StringBuffer word) { - for (int i=minLength; (i <= maxLength) && (i < word.length()); i++) { - add(word, i); + public void add(StringBuffer w) { + for (int i=minLength; (i <= maxLength) && (i < w.length()); i++) { + add(w, i); } } /** * Add the last NGrams from the specified word. */ - private void add(QuickStringBuffer word) { - int wlen = word.length(); + private void add(QuickStringBuffer w) { + int wlen = w.length(); if (wlen >= minLength) { int max = Math.min(maxLength, wlen); for (int i=minLength; i<=max; i++) { - add(word.subSequence(wlen-i, wlen)); + add(w.subSequence(wlen-i, wlen)); } } } @@ -200,12 +200,12 @@ public class NGramProfile { } /** - * @param word + * @param w * @param n sequence length */ - private void add(StringBuffer word, int n) { - for (int i=0; i <= word.length()-n; i++) { - add(word.subSequence(i, i + n)); + private void add(StringBuffer w, int n) { + for (int i=0; i <= w.length()-n; i++) { + add(w.subSequence(i, i + n)); } } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableFilter.java b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableFilter.java index d437e7e3989adb5d0de9acc5713979e26e374aa0..579d68d70e351a2b9705da187f8e46968de74fb4 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableFilter.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableFilter.java @@ -31,11 +31,17 @@ public class FlexiTableFilter { private final String label; private final String filter; + private final String iconLeftCSS; private boolean selected; public FlexiTableFilter(String label, String filter) { + this(label, filter, null); + } + + public FlexiTableFilter(String label, String filter,String iconLeftCSS) { this.label = label; this.filter = filter; + this.iconLeftCSS = iconLeftCSS; } public String getLabel() { @@ -46,6 +52,10 @@ public class FlexiTableFilter { return filter; } + public String getIconLeftCSS() { + return iconLeftCSS; + } + public boolean isSelected() { return selected; } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java index dcbb208453b19f4688945cc11501b5c26e3f481d..abb0a826671633af3600ff9bc377b6da89cae2f5 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java @@ -230,8 +230,11 @@ public abstract class AbstractFlexiTableRenderer extends DefaultComponentRendere } else { sb.append("<li><a href=\"javascript:") .append(FormJSHelper.getXHRFnCallFor(theForm, dispatchId, 1, new NameValuePair("filter", filter.getFilter()))) - .append("\">").append("<i class='o_icon o_icon_check o_icon-fw'> </i> ", filter.isSelected()) - .append(filter.getLabel()).append("</a></li>"); + .append("\">").append("<i class='o_icon o_icon_check o_icon-fw'> </i> ", filter.isSelected()); + if(filter.getIconLeftCSS() != null) { + sb.append("<i class='o_icon ").append(filter.getIconLeftCSS()).append("'> </i> "); + } + sb.append(filter.getLabel()).append("</a></li>"); if(filter.isSelected()) { selected = filter.getLabel(); } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java index 1572d351876eafbd31682ec90802139c8ae93081..53e04100522abeb545192bd66bd3e4ae51ef4a84 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java @@ -759,6 +759,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle if(dataModel instanceof SortableFlexiTableDataModel) { ((SortableFlexiTableDataModel<?>)dataModel).sort(key); } else if(dataSource != null) { + currentPage = 0; dataSource.clear(); dataSource.load(null, conditionalQueries, 0, getPageSize(), orderBy); } diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java index 75377cb1ab64dc8db1068a45d45ac8aadfcb6732..78ea2c419b20d29af44cf0eaa80b95ec49d5364e 100644 --- a/src/main/java/org/olat/repository/RepositoryManager.java +++ b/src/main/java/org/olat/repository/RepositoryManager.java @@ -36,7 +36,6 @@ import java.util.List; import java.util.Map; import javax.persistence.LockModeType; -import javax.persistence.Query; import javax.persistence.TypedQuery; import org.olat.admin.securitygroup.gui.IdentitiesAddEvent; @@ -878,9 +877,10 @@ public class RepositoryManager extends BasicManager { */ public List<RepositoryEntry> queryByInitialAuthor(String initialAuthor) { String query = "select v from org.olat.repository.RepositoryEntry v where v.initialAuthor= :initialAuthor"; - DBQuery dbquery = dbInstance.createQuery(query); - dbquery.setString("initialAuthor", initialAuthor); - return dbquery.list(); + return dbInstance.getCurrentEntityManager() + .createQuery(query, RepositoryEntry.class) + .setParameter("initialAuthor", initialAuthor) + .getResultList(); } /** @@ -1098,14 +1098,14 @@ public class RepositoryManager extends BasicManager { } public int countGenericANDQueryWithRolesRestriction(SearchRepositoryEntryParameters params) { - Query dbQuery = createGenericANDQueryWithRolesRestriction(params, false, true); - Number count = (Number)dbQuery.getSingleResult(); + TypedQuery<Number> dbQuery = createGenericANDQueryWithRolesRestriction(params, false, Number.class); + Number count = dbQuery.getSingleResult(); return count.intValue(); } public List<RepositoryEntry> genericANDQueryWithRolesRestriction(SearchRepositoryEntryParameters params, int firstResult, int maxResults, boolean orderBy) { - Query dbQuery = createGenericANDQueryWithRolesRestriction(params, orderBy, false); + TypedQuery<RepositoryEntry> dbQuery = createGenericANDQueryWithRolesRestriction(params, orderBy, RepositoryEntry.class); dbQuery.setFirstResult(firstResult); if(maxResults > 0) { dbQuery.setMaxResults(maxResults); @@ -1114,7 +1114,7 @@ public class RepositoryManager extends BasicManager { return res; } - private Query createGenericANDQueryWithRolesRestriction(SearchRepositoryEntryParameters params, boolean orderBy, boolean count) { + private <T> TypedQuery<T> createGenericANDQueryWithRolesRestriction(SearchRepositoryEntryParameters params, boolean orderBy, Class<T> type) { String displayName = params.getDisplayName(); String author = params.getAuthor(); String desc = params.getDesc(); @@ -1128,6 +1128,7 @@ public class RepositoryManager extends BasicManager { boolean var_displayname = StringHelper.containsNonWhitespace(displayName); boolean var_desc = StringHelper.containsNonWhitespace(desc); boolean var_resourcetypes = (resourceTypes != null && resourceTypes.size() > 0); + boolean count = Number.class.equals(type); StringBuilder query = new StringBuilder(); if(count) { @@ -1264,7 +1265,7 @@ public class RepositoryManager extends BasicManager { query.append(" order by v.displayname, v.key ASC"); } - Query dbQuery = dbInstance.getCurrentEntityManager().createQuery(query.toString()); + TypedQuery<T> dbQuery = dbInstance.getCurrentEntityManager().createQuery(query.toString(), type); if(institut) { dbQuery.setParameter("institution", institution); } diff --git a/src/main/java/org/olat/repository/SharedFolderSecurityCallback.java b/src/main/java/org/olat/repository/SharedFolderSecurityCallback.java index 8ba939aa87e3d005a18d3e4952d6bd903604ef74..90316e65ae1861608aa0f64a64fb296a949836d8 100644 --- a/src/main/java/org/olat/repository/SharedFolderSecurityCallback.java +++ b/src/main/java/org/olat/repository/SharedFolderSecurityCallback.java @@ -121,12 +121,12 @@ public class SharedFolderSecurityCallback implements VFSSecurityCallback { * * @param path */ - private void initSharedFolderQuota(String relPath) { + private void initSharedFolderQuota(String path) { QuotaManager qm = QuotaManager.getInstance(); - sharedFolderQuota = qm.getCustomQuota(relPath); + sharedFolderQuota = qm.getCustomQuota(path); if (sharedFolderQuota == null) { Quota defQuota = qm.getDefaultQuota(QuotaConstants.IDENTIFIER_DEFAULT_COURSE); - sharedFolderQuota = QuotaManager.getInstance().createQuota(relPath, defQuota.getQuotaKB(), defQuota.getUlLimitKB()); + sharedFolderQuota = QuotaManager.getInstance().createQuota(path, defQuota.getQuotaKB(), defQuota.getUlLimitKB()); } } diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties index 5947a4860febd3f2829a1f6ce0cdbead107d8504..61de6f8ad5e7b81b595ccb2942f83ea8533380c0 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties @@ -81,6 +81,8 @@ table.header.freePlace=$org.olat.group.ui.main\:table.header.freePlace table.header.tutors=$org.olat.group.ui.main\:table.header.tutors table.header.participants=$org.olat.group.ui.main\:table.header.participants table.header.waitingList=$org.olat.group.ui.main\:table.header.waitingList +table.search.mycourses.desc=Placeholder +table.search.author.desc=Placeholder dialog.modal.bg.send.mail=$org.olat.group.ui.main\:dialog.modal.bg.send.mail dialog.modal.bg.leave.text=$org.olat.group.ui.main\:dialog.modal.bg.leave.text nomembers=XXX No members @@ -368,6 +370,7 @@ filter.not.passed=Nicht bestanden filter.without.passed.infos=Keine Bewertung filter.old.courses=Abgeschlossene Kurses filter.selected=\u2713 +filter.show.all=Alle anzeigen form.clean.catalog=Alle Katalogeintr\u00E4ge des Kurses l\u00F6schen. form.clean.groups=Alle Betreuer und Teilnehmer aus den Lern- und Rechtegruppen des Kurses austragen. form.layout.cssfile=Gew\u00E4hlte CSS-Datei diff --git a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java index 8150384785c1fd7f14b2072c0d16f95043d5e939..9e9e75b5068be5feecd238ca2f7e7f655abbd386 100644 --- a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java +++ b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java @@ -204,13 +204,13 @@ public class ReferencableEntriesSearchController extends BasicController { /** * Admin. search allow group managers to search all courses - * @param limitTypes + * @param limitingTypes * @param ureq * @return */ - private boolean isAdminSearchVisible(String[] limitTypes, UserRequest ureq) { + private boolean isAdminSearchVisible(String[] limitingTypes, UserRequest ureq) { Roles roles = ureq.getUserSession().getRoles(); - return limitTypes != null && limitTypes.length == 1 && "CourseModule".equals(limitTypes[0]) + return limitingTypes != null && limitingTypes.length == 1 && "CourseModule".equals(limitingTypes[0]) && (roles.isOLATAdmin() || (roles.isInstitutionalResourceManager() && roles.isGroupManager()) || (roles.isGroupManager() @@ -349,7 +349,7 @@ public class ReferencableEntriesSearchController extends BasicController { // user selected entry to get a preview selectedRepositoryEntry = searchCtr.getSelectedEntry(); RepositoryEntry repositoryEntry = searchCtr.getSelectedEntry(); - RepositoryHandler typeToLaunch = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry); + RepositoryHandler typeToLaunch = repositoryHandlerFactory.getRepositoryHandler(repositoryEntry); if (typeToLaunch == null) { StringBuilder sb = new StringBuilder(translate("error.launch")); sb.append(": No launcher for repository entry: "); diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java b/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java index 3c9e8f2e1e770ac0df4993b7bfc97c8abfe4eb6b..c8d4bbe49b1291bec979970030def7430fe928d7 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java +++ b/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java @@ -350,6 +350,7 @@ public class RepositoryEntryMyCourseQueries { private void appendFiltersInWhereClause(Filter filter, StringBuilder sb) { switch(filter) { + case showAll: break; case currentCourses: sb.append(" and lifecycle.validFrom<=:now and lifecycle.validTo>=:now"); break; @@ -374,7 +375,7 @@ public class RepositoryEntryMyCourseQueries { .append(" where eff4.resource=res and eff4.identity=ident and eff4.passed is null") .append(" )"); break; - default: //do nothing + default: {} } } @@ -455,7 +456,12 @@ public class RepositoryEntryMyCourseQueries { break; case rating: sb.append(" order by v.statistics.rating "); - appendAsc(sb, asc).append(" nulls last, lower(v.displayname) asc"); + if(asc) { + sb.append(" asc nulls first"); + } else { + sb.append(" desc nulls last"); + } + sb.append(", lower(v.displayname) asc"); break; case key: sb.append(" order by v.key"); diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java index ba04ed1190b6dbb8008d3c01812b135ba76a0128..9a13d077a8dabd04fc7548e51aaa851861648120 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java +++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java @@ -97,6 +97,8 @@ public class RepositoryServiceImpl implements RepositoryService { @Autowired private RepositoryEntryAuthorQueries authorViewQueries; @Autowired + private RepositoryHandlerFactory repositoryHandlerFactory; + @Autowired private OLATResourceManager resourceManager; @Autowired private UserCourseInformationsManager userCourseInformationsManager; @@ -209,7 +211,7 @@ public class RepositoryServiceImpl implements RepositoryService { @Override public VFSLeaf getIntroductionMovie(RepositoryEntry re) { - RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(re); + RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(re); VFSContainer mediaContainer = handler.getMediaContainer(re); if(mediaContainer != null) { List<VFSItem> items = mediaContainer.getItems(); @@ -233,7 +235,7 @@ public class RepositoryServiceImpl implements RepositoryService { if(debug) log.debug("deleteRepositoryEntry start entry=" + entry); entry = (RepositoryEntry) dbInstance.loadObject(entry,true); if(debug) log.debug("deleteRepositoryEntry after load entry=" + entry); - RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(entry); + RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(entry); OLATResource resource = entry.getOlatResource(); //delete old context if (!handler.readyToDelete(resource, identity, roles, locale, errors)) { diff --git a/src/main/java/org/olat/repository/model/SearchMyRepositoryEntryViewParams.java b/src/main/java/org/olat/repository/model/SearchMyRepositoryEntryViewParams.java index 4214c0b8dcd6cca72b8db898e7ec9a485a3c99c9..d8341ed51d02e6467fdf00a9f86db2ac3cce3587 100644 --- a/src/main/java/org/olat/repository/model/SearchMyRepositoryEntryViewParams.java +++ b/src/main/java/org/olat/repository/model/SearchMyRepositoryEntryViewParams.java @@ -200,6 +200,7 @@ public class SearchMyRepositoryEntryViewParams { } public enum Filter { + showAll, currentCourses, oldCourses, upcomingCourses, diff --git a/src/main/java/org/olat/repository/portlet/RepositoryPortletRunController.java b/src/main/java/org/olat/repository/portlet/RepositoryPortletRunController.java index a076aac1dfebe9157ca48fb029ca960cf6b39fad..630085a71f74530745965e2e7830b24349fa768b 100644 --- a/src/main/java/org/olat/repository/portlet/RepositoryPortletRunController.java +++ b/src/main/java/org/olat/repository/portlet/RepositoryPortletRunController.java @@ -114,10 +114,10 @@ public class RepositoryPortletRunController extends AbstractPortletRunController putInitialPanel(repoEntriesVC); } - private List<RepositoryEntryLight> getAllEntries(SortingCriteria sortingCriteria) { - int maxResults = sortingCriteria == null ? -1 : sortingCriteria.getMaxEntries(); + private List<RepositoryEntryLight> getAllEntries(SortingCriteria criteria) { + int maxResults = criteria == null ? -1 : criteria.getMaxEntries(); RepositoryEntryOrder orderBy = RepositoryEntryOrder.nameAsc; - if(sortingCriteria != null && !sortingCriteria.isAscending()) { + if(criteria != null && !criteria.isAscending()) { orderBy = RepositoryEntryOrder.nameDesc; } @@ -160,9 +160,9 @@ public class RepositoryPortletRunController extends AbstractPortletRunController } @Override - protected void reloadModel(SortingCriteria sortingCriteria) { - if (sortingCriteria.getSortingType() == SortingCriteria.AUTO_SORTING) { - List<RepositoryEntryLight> items = getAllEntries(sortingCriteria); + protected void reloadModel(SortingCriteria criteria) { + if (criteria.getSortingType() == SortingCriteria.AUTO_SORTING) { + List<RepositoryEntryLight> items = getAllEntries(criteria); List<PortletEntry<RepositoryEntryLight>> entries = convertShortRepositoryEntriesToPortletEntryList(items); repoEntryListModel = new RepositoryPortletTableDataModel(entries, getLocale()); tableCtr.setTableDataModel(repoEntryListModel); @@ -262,18 +262,18 @@ public class RepositoryPortletRunController extends AbstractPortletRunController * Comparator implementation used for sorting BusinessGroup entries according with the * input sortingCriteria. * <p> - * @param sortingCriteria + * @param criteria * @return a Comparator for the input sortingCriteria */ @Override - protected Comparator<RepositoryEntryLight> getComparator(final SortingCriteria sortingCriteria) { + protected Comparator<RepositoryEntryLight> getComparator(final SortingCriteria criteria) { return new Comparator<RepositoryEntryLight>(){ public int compare(final RepositoryEntryLight repoEntry1, final RepositoryEntryLight repoEntry2) { int comparisonResult = 0; - if(sortingCriteria.getSortingTerm()==SortingCriteria.ALPHABETICAL_SORTING) { + if(criteria.getSortingTerm()==SortingCriteria.ALPHABETICAL_SORTING) { comparisonResult = collator.compare(repoEntry1.getDisplayname(), repoEntry2.getDisplayname()); } - if(!sortingCriteria.isAscending()) { + if(!criteria.isAscending()) { //if not isAscending return (-comparisonResult) return -comparisonResult; } diff --git a/src/main/java/org/olat/repository/ui/RepositoryTableModel.java b/src/main/java/org/olat/repository/ui/RepositoryTableModel.java index 76c9476b5199ba1a7056334144050b609a4906bd..36b821e611c6a3434bc4a8304b354e8c8e2a5050 100644 --- a/src/main/java/org/olat/repository/ui/RepositoryTableModel.java +++ b/src/main/java/org/olat/repository/ui/RepositoryTableModel.java @@ -349,13 +349,12 @@ public class RepositoryTableModel extends DefaultTableDataModel<RepositoryEntry> public void addObject(RepositoryEntry object) { getObjects().add(object); - List<RepositoryEntry> objects = Collections.singletonList(object); - secondaryInformations(objects); + secondaryInformations(Collections.singletonList(object)); } - public void addObjects(List<RepositoryEntry> objects) { - getObjects().addAll(objects); - secondaryInformations(objects); + public void addObjects(List<RepositoryEntry> addedObjects) { + getObjects().addAll(addedObjects); + secondaryInformations(addedObjects); } private void secondaryInformations(List<RepositoryEntry> repoEntries) { diff --git a/src/main/java/org/olat/repository/ui/RepositoyUIFactory.java b/src/main/java/org/olat/repository/ui/RepositoyUIFactory.java index 3e9c9c454c0c1d0058d4ea6c946b0962f5b426fb..1ee2ccf703c95ca126810f0c4787069b2d70b6ab 100644 --- a/src/main/java/org/olat/repository/ui/RepositoyUIFactory.java +++ b/src/main/java/org/olat/repository/ui/RepositoyUIFactory.java @@ -138,19 +138,19 @@ public class RepositoyUIFactory { //wrap simple message into mainLayout GenericMainController glc = new GenericMainController(ureq, wControl) { @Override - public void init(UserRequest ureq) { + public void init(UserRequest uureq) { Panel empty = new Panel("empty"); - setTranslator(Util.createPackageTranslator(this.getClass(), ureq.getLocale())); - MessageController contentCtr = MessageUIFactory.createInfoMessage(ureq, getWindowControl(), translate("security.disabled.title"), translate("security.disabled.info")); + setTranslator(Util.createPackageTranslator(this.getClass(), uureq.getLocale())); + MessageController contentCtr = MessageUIFactory.createInfoMessage(uureq, getWindowControl(), translate("security.disabled.title"), translate("security.disabled.info")); listenTo(contentCtr); // auto dispose later Component resComp = contentCtr.getInitialComponent(); - LayoutMain3ColsController columnLayoutCtr = new LayoutMain3ColsController(ureq, getWindowControl(), empty, resComp, /*do not save no prefs*/null); + LayoutMain3ColsController columnLayoutCtr = new LayoutMain3ColsController(uureq, getWindowControl(), empty, resComp, /*do not save no prefs*/null); listenTo(columnLayoutCtr); // auto dispose later putInitialPanel(columnLayoutCtr.getInitialComponent()); } @Override - protected Controller handleOwnMenuTreeEvent(Object uobject, UserRequest ureq) { + protected Controller handleOwnMenuTreeEvent(Object uobject, UserRequest uureq) { //no menutree means no menu events. return null; } diff --git a/src/main/java/org/olat/repository/ui/author/AuthorListController.java b/src/main/java/org/olat/repository/ui/author/AuthorListController.java index cb31b31c2bad33f1868c5085aa2ddf66d1948598..59146670c99d7b675c7d00c70c6f8d1702ddafbf 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthorListController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthorListController.java @@ -103,7 +103,7 @@ public class AuthorListController extends FormBasicController implements Activat private FlexiTableElement tableEl; private final TooledStackedPanel stackPanel; - private boolean startExtendedSearch; + private boolean withSearch;; private AuthoringEntryDataModel model; private AuthoringEntryDataSource dataSource; @@ -131,39 +131,38 @@ public class AuthorListController extends FormBasicController implements Activat private RepositoryHandlerFactory repositoryHandlerFactory; public AuthorListController(UserRequest ureq, WindowControl wControl, String i18nName, - SearchAuthorRepositoryEntryViewParams searchParams, boolean startExtendedSearch) { + SearchAuthorRepositoryEntryViewParams searchParams, boolean withSearch) { super(ureq, wControl, "entries"); setTranslator(Util.createPackageTranslator(RepositoryManager.class, getLocale(), getTranslator())); this.i18nName = i18nName; + this.withSearch = withSearch; this.searchParams = searchParams; - this.startExtendedSearch = startExtendedSearch; - - importLink = LinkFactory.createLink("cmd.import.ressource", getTranslator(), this); - importLink.setDomReplacementWrapperRequired(false); - importLink.setIconLeftCSS("o_icon o_icon_import"); - - Set<String> types = repositoryHandlerFactory.getSupportedTypes(); - createDropdown = new Dropdown("cmd.create.ressource", "cmd.create.ressource", false, getTranslator()); - createDropdown.setElementCssClass("o_sel_author_create"); - createDropdown.setIconCSS("o_icon o_icon_add"); - for(String type:types) { - RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(type); - if(handler != null && handler.isCreate()) { - addCreateLink(handler, createDropdown); - } - } - dataSource = new AuthoringEntryDataSource(searchParams, this); - initForm(ureq); stackPanel = new TooledStackedPanel(i18nName, getTranslator(), this); stackPanel.setShowCloseLink(false); stackPanel.pushController(translate(i18nName), this); - stackPanel.addTool(createDropdown, Align.left); - stackPanel.addTool(importLink, Align.left); + if(!withSearch) { + importLink = LinkFactory.createLink("cmd.import.ressource", getTranslator(), this); + importLink.setDomReplacementWrapperRequired(false); + importLink.setIconLeftCSS("o_icon o_icon_import"); + stackPanel.addTool(importLink, Align.left); + + Set<String> types = repositoryHandlerFactory.getSupportedTypes(); + createDropdown = new Dropdown("cmd.create.ressource", "cmd.create.ressource", false, getTranslator()); + createDropdown.setElementCssClass("o_sel_author_create"); + createDropdown.setIconCSS("o_icon o_icon_add"); + for(String type:types) { + RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(type); + if(handler != null && handler.isCreate()) { + addCreateLink(handler, createDropdown); + } + } + stackPanel.addTool(createDropdown, Align.left); + } } @Override @@ -186,9 +185,12 @@ public class AuthorListController extends FormBasicController implements Activat @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { //search form - searchCtrl = new AuthorSearchController(ureq, getWindowControl(), !startExtendedSearch, mainForm); - searchCtrl.setEnabled(false); - listenTo(searchCtrl); + if(withSearch) { + setFormDescription("table.search.author.desc"); + searchCtrl = new AuthorSearchController(ureq, getWindowControl(), true, mainForm); + searchCtrl.setEnabled(false); + listenTo(searchCtrl); + } //add the table FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); @@ -226,21 +228,17 @@ public class AuthorListController extends FormBasicController implements Activat model = new AuthoringEntryDataModel(dataSource, columnsModel); tableEl = uifactory.addTableElement(getWindowControl(), "table", model, 20, false, getTranslator(), formLayout); - tableEl.setSearchEnabled(true); + tableEl.setSearchEnabled(withSearch); tableEl.setExportEnabled(true); tableEl.setExtendedSearch(searchCtrl); tableEl.setCustomizeColumns(true); tableEl.setElementCssClass("o_coursetable"); tableEl.setMultiSelect(true); + tableEl.setEmtpyTableMessageKey("table.sEmptyTable"); tableEl.setSortSettings(new FlexiTableSortOptions(true, new SortKey(OrderBy.displayname.name(), true))); tableEl.setAndLoadPersistedPreferences(ureq, "authors-list-" + i18nName); - if(!startExtendedSearch) { + if(!withSearch) { tableEl.reloadData(); - } - - if(startExtendedSearch) { - tableEl.expandExtendedSearch(ureq); - } else { tableEl.setFilters(null, getFilters()); } @@ -251,7 +249,8 @@ public class AuthorListController extends FormBasicController implements Activat Set<String> supportedTypes = repositoryHandlerFactory.getSupportedTypes(); List<FlexiTableFilter> resources = new ArrayList<>(supportedTypes.size() + 1); for(String type:supportedTypes) { - resources.add(new FlexiTableFilter(translate(type), type)); + String inconLeftCss = RepositoyUIFactory.getIconCssClass(type); + resources.add(new FlexiTableFilter(translate(type), type, inconLeftCss)); } return resources; } diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEditEntrySettingsController.java b/src/main/java/org/olat/repository/ui/author/AuthoringEditEntrySettingsController.java index da91a10245056e19cb328040b5805c2981a47540..47eb573c4d1a16d614397507dd686e5ad24e257d 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEditEntrySettingsController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEditEntrySettingsController.java @@ -51,6 +51,8 @@ public class AuthoringEditEntrySettingsController extends BasicController { private RepositoryEntry entry; @Autowired private RepositoryService repositoryService; + @Autowired + private RepositoryHandlerFactory repositoryHandlerFactory; public AuthoringEditEntrySettingsController(UserRequest ureq, WindowControl wControl, TooledStackedPanel stackPanel, RepositoryEntryRef entryRef) { @@ -68,7 +70,7 @@ public class AuthoringEditEntrySettingsController extends BasicController { tabbedPane.addTab(translate("tab.public"), descriptionCtrl.getInitialComponent()); tabbedPane.addTab(translate("tab.accesscontrol"), accessCtrl.getInitialComponent()); - RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(entry); + RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(entry); handler.addExtendedEditionControllers(ureq, getWindowControl(), this, entry); putInitialPanel(tabbedPane); diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java index 84c804f2d2636c7b20a1c4f09826805c7e15fb54..d24122595a9796ed8c109acb2eacfb0c26a1d24d 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java @@ -334,7 +334,7 @@ public class AuthoringEntryDetailsController extends RepositoryEntryDetailsContr String cssClass = RepositoyUIFactory.getIconCssClass(entry); layoutCont.contextPut("cssClass", cssClass); - RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(entry); + RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(entry); VFSContainer mediaContainer = handler.getMediaContainer(entry); if(mediaContainer != null) { baseUrl = registerMapper(ureq, new VFSContainerMapper(mediaContainer.getParentContainer())); @@ -452,8 +452,8 @@ public class AuthoringEntryDetailsController extends RepositoryEntryDetailsContr public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { if(entries == null || entries.isEmpty()) return; - ContextEntry entry = entries.get(0); - String segment = entry.getOLATResourceable().getResourceableTypeName(); + ContextEntry contextEntry = entries.get(0); + String segment = contextEntry.getOLATResourceable().getResourceableTypeName(); if(EDIT_SETTINGS_ORES.getResourceableTypeName().equals(segment)) { doEditSettings(ureq); } @@ -573,7 +573,7 @@ public class AuthoringEntryDetailsController extends RepositoryEntryDetailsContr removeAsListenerAndDispose(cmc); removeAsListenerAndDispose(wc); - RepositoryHandler repoHandler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(entry); + RepositoryHandler repoHandler = repositoryHandlerFactory.getRepositoryHandler(entry); wc = repoHandler.createCloseResourceController(ureq, getWindowControl(), entry); listenTo(wc); wc.startWorkflow(); @@ -606,7 +606,7 @@ public class AuthoringEntryDetailsController extends RepositoryEntryDetailsContr } private void doDownload(UserRequest ureq, boolean backwardsCompatible) { - RepositoryHandler typeToDownload = RepositoryHandlerFactory.getInstance().getRepositoryHandler(entry); + RepositoryHandler typeToDownload = repositoryHandlerFactory.getRepositoryHandler(entry); if (typeToDownload == null) { StringBuilder sb = new StringBuilder(translate("error.download")); sb.append(": No download handler for repository entry: ") diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryPublishController.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryPublishController.java index 016a23c46e42cb4f9a1346f951780d3ca3d0f0c4..2fbfa9c83b138e5b22ad5902d118456f3486960a 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryPublishController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryPublishController.java @@ -183,15 +183,14 @@ public class AuthoringEntryPublishController extends FormBasicController { setFormTitle("rentry.publish"); setFormContextHelp("org.olat.repository", "rep-meta-olatauthorEd.html", "help.hover.rep.detail"); - - String type = entry.getOlatResource().getResourceableTypeName(); - if (TestFileResource.TYPE_NAME.equals(type) - || SurveyFileResource.TYPE_NAME.equals(type) - || ScormCPFileResource.TYPE_NAME.equals(type)) { + String resourceType = entry.getOlatResource().getResourceableTypeName(); + if (TestFileResource.TYPE_NAME.equals(resourceType) + || SurveyFileResource.TYPE_NAME.equals(resourceType) + || ScormCPFileResource.TYPE_NAME.equals(resourceType)) { String warning = translate("warn.resource.need.course"); flc.contextPut("off_warn", warning); } - if (CourseModule.ORES_TYPE_COURSE.equals(type)) { + if (CourseModule.ORES_TYPE_COURSE.equals(resourceType)) { setFormDescription("rentry.publish.course.desc"); } else { setFormDescription("rentry.publish.other.desc"); diff --git a/src/main/java/org/olat/repository/ui/author/CatalogSettingsController.java b/src/main/java/org/olat/repository/ui/author/CatalogSettingsController.java index cad3eb5f56b16b6f81400c5f5e1ba4f156da4654..4fae0a49d84608934e81dbfa86e5b0198c7f9c96 100644 --- a/src/main/java/org/olat/repository/ui/author/CatalogSettingsController.java +++ b/src/main/java/org/olat/repository/ui/author/CatalogSettingsController.java @@ -203,11 +203,11 @@ class CatalogSettingsController extends FormBasicController { @Override public Object getValueAt(int row, int col) { - CatalogEntry entry = getObject(row); + CatalogEntry catEntry = getObject(row); if(col == 0) { // calculate cat entry path: travel up to the root node String path = ""; - CatalogEntry tempEntry = entry; + CatalogEntry tempEntry = catEntry; while (tempEntry != null) { path = "/" + tempEntry.getName() + path; tempEntry = tempEntry.getParent(); diff --git a/src/main/java/org/olat/repository/ui/author/RepositoryMembersController.java b/src/main/java/org/olat/repository/ui/author/RepositoryMembersController.java index 300c0b53da9c27c57b75b6992a0d3843184dee53..22bac20bdfe6ebc9ef90e03c83a33e30d446a84a 100644 --- a/src/main/java/org/olat/repository/ui/author/RepositoryMembersController.java +++ b/src/main/java/org/olat/repository/ui/author/RepositoryMembersController.java @@ -124,8 +124,8 @@ public class RepositoryMembersController extends AbstractMemberListController { Step start = new ImportMember_1b_ChooseMemberStep(ureq, repoEntry, null); StepRunnerCallback finish = new StepRunnerCallback() { @Override - public Step execute(UserRequest ureq, WindowControl wControl, StepsRunContext runContext) { - addMembers(ureq, runContext); + public Step execute(UserRequest uureq, WindowControl wControl, StepsRunContext runContext) { + addMembers(uureq, runContext); return StepsMainRunController.DONE_MODIFIED; } }; @@ -142,8 +142,8 @@ public class RepositoryMembersController extends AbstractMemberListController { Step start = new ImportMember_1a_LoginListStep(ureq, repoEntry, null); StepRunnerCallback finish = new StepRunnerCallback() { @Override - public Step execute(UserRequest ureq, WindowControl wControl, StepsRunContext runContext) { - addMembers(ureq, runContext); + public Step execute(UserRequest uureq, WindowControl wControl, StepsRunContext runContext) { + addMembers(uureq, runContext); if(runContext.containsKey("notFounds")) { showWarning("user.notfound", runContext.get("notFounds").toString()); } diff --git a/src/main/java/org/olat/repository/ui/author/_content/entries.html b/src/main/java/org/olat/repository/ui/author/_content/entries.html index ed974d3d382ac4ed971a9a55d323c8499e11aa9e..29acec80e60dc1afac2282fd443d0ec0414ade68 100644 --- a/src/main/java/org/olat/repository/ui/author/_content/entries.html +++ b/src/main/java/org/olat/repository/ui/author/_content/entries.html @@ -1,3 +1,6 @@ +#if ($off_desc ) + <div class="o_info">$off_desc</div> +#end $r.render("table") <div class="o_buttons_box_center clearfix"> #if($r.available("tools.add.owners")) diff --git a/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java b/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java index fde0c342f165db50ed52d8ebec986551bbb21c2a..40aa575837409388ddaa89e00dee470c1fd325ce 100644 --- a/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java +++ b/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java @@ -87,7 +87,7 @@ public class RepositoryEntryListController extends FormBasicController private final List<Link> filterLinks = new ArrayList<>(); private final List<Link> orderByLinks = new ArrayList<>(); - private boolean startExtendedSearch; + private boolean withSearch; private final String name; private FlexiTableElement tableEl; @@ -113,13 +113,13 @@ public class RepositoryEntryListController extends FormBasicController public RepositoryEntryListController(UserRequest ureq, WindowControl wControl, SearchMyRepositoryEntryViewParams searchParams, boolean load, - boolean startExtendedSearch, String name, BreadcrumbPanel stackPanel) { + boolean withSearch, String name, BreadcrumbPanel stackPanel) { super(ureq, wControl, "repoentry_table"); setTranslator(Util.createPackageTranslator(RepositoryManager.class, getLocale(), getTranslator())); mapperThumbnailUrl = mapperService.register(null, "repositoryentryImage", new RepositoryEntryImageMapper()); this.name = name; this.stackPanel = stackPanel; - this.startExtendedSearch = startExtendedSearch; + this.withSearch = withSearch; guestOnly = ureq.getUserSession().getRoles().isGuestOnly(); this.searchParams = searchParams; @@ -137,9 +137,12 @@ public class RepositoryEntryListController extends FormBasicController @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { - searchCtrl = new RepositoryEntrySearchController(ureq, getWindowControl(), !startExtendedSearch, mainForm); - searchCtrl.setEnabled(false); - listenTo(searchCtrl); + if(withSearch) { + setFormDescription("table.search.mycourses.desc"); + searchCtrl = new RepositoryEntrySearchController(ureq, getWindowControl(), true, mainForm); + searchCtrl.setEnabled(false); + listenTo(searchCtrl); + } FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.key.i18nKey(), Cols.key.ordinal(), true, OrderBy.key.name())); @@ -159,14 +162,15 @@ public class RepositoryEntryListController extends FormBasicController true, OrderBy.lifecycleEnd.name(), FlexiColumnModel.ALIGNMENT_LEFT, new DateFlexiCellRenderer(getLocale()))); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false,Cols.details.i18nKey(), Cols.details.ordinal(), false, null)); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.start.i18nKey(), Cols.start.ordinal())); - columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.ratings.i18nKey(), Cols.ratings.ordinal())); + columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.ratings.i18nKey(), Cols.ratings.ordinal(), + true, OrderBy.rating.name())); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.comments.i18nKey(), Cols.comments.ordinal())); model = new RepositoryEntryDataModel(dataSource, columnsModel); tableEl = uifactory.addTableElement(getWindowControl(), "table", model, 20, false, getTranslator(), formLayout); tableEl.setAvailableRendererTypes(FlexiTableRendererType.custom, FlexiTableRendererType.classic); tableEl.setRendererType(FlexiTableRendererType.custom); - tableEl.setSearchEnabled(true); + tableEl.setSearchEnabled(withSearch); tableEl.setExtendedSearch(searchCtrl); tableEl.setCustomizeColumns(true); tableEl.setElementCssClass("o_coursetable"); @@ -179,14 +183,12 @@ public class RepositoryEntryListController extends FormBasicController initSorters(tableEl); tableEl.setAndLoadPersistedPreferences(ureq, "re-list-" + name); - - if(startExtendedSearch) { - tableEl.expandExtendedSearch(ureq); - } } private void initFilters(FlexiTableElement tableElement) { - List<FlexiTableFilter> filters = new ArrayList<>(14); + List<FlexiTableFilter> filters = new ArrayList<>(16); + filters.add(new FlexiTableFilter(translate("filter.show.all"), Filter.showAll.name())); + filters.add(FlexiTableFilter.SPACER); filters.add(new FlexiTableFilter(translate("filter.current.courses"), Filter.currentCourses.name())); filters.add(new FlexiTableFilter(translate("filter.upcoming.courses"), Filter.upcomingCourses.name())); filters.add(new FlexiTableFilter(translate("filter.old.courses"), Filter.oldCourses.name())); diff --git a/src/main/java/org/olat/repository/ui/list/_content/repoentry_table.html b/src/main/java/org/olat/repository/ui/list/_content/repoentry_table.html index bade9402acda206e8171adcb2d85adb1b884ea54..86a7780fcfb14c1037d6e2fe03f610fa1341c8fd 100644 --- a/src/main/java/org/olat/repository/ui/list/_content/repoentry_table.html +++ b/src/main/java/org/olat/repository/ui/list/_content/repoentry_table.html @@ -1 +1,4 @@ +#if ($off_desc ) + <div class="o_info">$off_desc</div> +#end $r.render("table") \ No newline at end of file diff --git a/src/test/java/org/olat/repository/RepositoryManagerTest.java b/src/test/java/org/olat/repository/RepositoryManagerTest.java index 8ed3a1c0f18138148c4d8f75f41ba8d27183f7ea..34f53968d450affc3096fdd4422685f44d781f4f 100644 --- a/src/test/java/org/olat/repository/RepositoryManagerTest.java +++ b/src/test/java/org/olat/repository/RepositoryManagerTest.java @@ -251,6 +251,18 @@ public class RepositoryManagerTest extends OlatTestCase { Assert.assertTrue(entries.contains(re)); } + @Test + public void queryByInitialAuthor() { + String initialAuthor = UUID.randomUUID().toString(); + RepositoryEntry re = JunitTestHelper.createAndPersistRepositoryEntry(initialAuthor, false); + dbInstance.commitAndCloseSession(); + + List<RepositoryEntry> reList = repositoryManager.queryByInitialAuthor(initialAuthor); + Assert.assertNotNull(reList); + Assert.assertEquals(1, reList.size()); + Assert.assertEquals(re, reList.get(0)); + } + @Test public void getLearningResourcesAsStudent() { Identity id = JunitTestHelper.createAndPersistIdentityAsUser("re-stud-la-" + UUID.randomUUID().toString()); diff --git a/src/test/java/org/olat/test/JunitTestHelper.java b/src/test/java/org/olat/test/JunitTestHelper.java index f5c05615e2183ffafabe779af4733f1e21d1b61f..48c3101a6f262368ebf3c45d2161aa47128d1ccb 100644 --- a/src/test/java/org/olat/test/JunitTestHelper.java +++ b/src/test/java/org/olat/test/JunitTestHelper.java @@ -170,17 +170,21 @@ public class JunitTestHelper { } public static final RepositoryEntry createAndPersistRepositoryEntry(boolean membersOnly) { + return createAndPersistRepositoryEntry("Florian Gnägi", membersOnly); + } + + public static final RepositoryEntry createAndPersistRepositoryEntry(String initialAuthor, boolean membersOnly) { OLATResourceManager resourceManager = OLATResourceManager.getInstance(); String resourceName = UUID.randomUUID().toString().replace("-", "").substring(0, 30); OLATResourceable ores = OresHelper.createOLATResourceableInstance(resourceName, CodeHelper.getForeverUniqueID()); OLATResource r = resourceManager.createOLATResourceInstance(ores); resourceManager.saveOLATResource(r); - return createAndPersistRepositoryEntry(r, membersOnly); + return createAndPersistRepositoryEntry(initialAuthor, r, membersOnly); } - public static final RepositoryEntry createAndPersistRepositoryEntry(OLATResource r, boolean membersOnly) { + private static final RepositoryEntry createAndPersistRepositoryEntry(String initialAuthor, OLATResource r, boolean membersOnly) { RepositoryService repositoryService = CoreSpringFactory.getImpl(RepositoryService.class); - RepositoryEntry re = repositoryService.create("Florian Gnägi", "Lernen mit OLAT", r.getResourceableTypeName(), null, r); + RepositoryEntry re = repositoryService.create(initialAuthor, "Lernen mit OLAT", r.getResourceableTypeName(), null, r); if(membersOnly) { re.setAccess(RepositoryEntry.ACC_OWNERS); re.setMembersOnly(true);