diff --git a/src/main/java/org/olat/repository/RepositoryEntryAuthorView.java b/src/main/java/org/olat/repository/RepositoryEntryAuthorView.java index dc6f98d9dbb8b922c4a0999fa45e5ef8c2eba898..3bb215877d45449fe5065e21c5589b4f59d1818b 100644 --- a/src/main/java/org/olat/repository/RepositoryEntryAuthorView.java +++ b/src/main/java/org/olat/repository/RepositoryEntryAuthorView.java @@ -53,6 +53,8 @@ public interface RepositoryEntryAuthorView extends OLATResourceable, RepositoryE public RepositoryEntryLifecycle getLifecycle(); + public int getNumOfReferences(); + public Date getDeletionDate(); public String getDeletedByFullName(); 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 6b98813ae1005e84cf532ff04ca7458ddea62921..201a66dbf3310db643adbc1245c746f3b7750d7b 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties @@ -135,6 +135,10 @@ cif.membership.mandatory=Meine Kurse cif.objectives=Lernziele cif.ores_id=OpenOLAT-Ressourcen-ID cif.owned.resources.only=Meine Ressourcen +cif.owned.resources.usage=Referenzierte Ressourcen +cif.owned.resources.usage.all=Alle +cif.owned.resources.usage.used=Referenziert +cif.owned.resources.usage.notUsed=Nicht referenziert cif.owners=Autoren cif.private.dates=Datum cif.public.dates=Semester @@ -545,6 +549,7 @@ table.header.mark=<i class\="o_icon o_icon_bookmark_header o_icon-lg" title\="Fa table.header.online=$org.olat.group.ui.main\:table.header.online table.header.participants=$org.olat.group.ui.main\:table.header.participants table.header.participantsCount=$org.olat.group.ui.main\:table.header.participantsCount +table.header.references=Ref. table.header.remove=$org.olat.group.ui.main\:table.header.remove table.header.role=$org.olat.group.ui.main\:table.header.role table.header.start=Starten diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties index a35e1a54d8748bfca30d2ae74aa489c39be7c38c..35cafd4371d8638bd38325f0abc3fb51a20588f2 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties @@ -130,7 +130,11 @@ cif.managedflags=Externally managed modules cif.membership.mandatory=My courses only cif.objectives=Objectives cif.ores_id=OpenOLAT resource ID -cif.owned.resources.only=My ressources +cif.owned.resources.only=My resources +cif.owned.resources.usage=Referenced resources +cif.owned.resources.usage.all=All +cif.owned.resources.usage.used=Referenced +cif.owned.resources.usage.notUsed=Not referenced cif.owners=Authoring rights cif.private.dates=Dates cif.public.dates=Semester @@ -542,6 +546,7 @@ table.header.mark=<i class\="o_icon o_icon_bookmark_header o_icon-lg" title\="Bo table.header.online=$org.olat.group.ui.main\:table.header.online table.header.participants=$org.olat.group.ui.main\:table.header.participants table.header.participantsCount=$org.olat.group.ui.main\:table.header.participantsCount +table.header.references=Ref. table.header.remove=$org.olat.group.ui.main\:table.header.remove table.header.role=$org.olat.group.ui.main\:table.header.role table.header.start=Launch diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryAuthorQueries.java b/src/main/java/org/olat/repository/manager/RepositoryEntryAuthorQueries.java index 4e5acd1b6f4ef3a24a4a81b19abb0cff86e1657e..2edefad11175b7c9dbef9f6a984c1f369a9a984c 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryEntryAuthorQueries.java +++ b/src/main/java/org/olat/repository/manager/RepositoryEntryAuthorQueries.java @@ -41,6 +41,7 @@ import org.olat.repository.RepositoryEntryAuthorView; import org.olat.repository.model.RepositoryEntryAuthorImpl; import org.olat.repository.model.SearchAuthorRepositoryEntryViewParams; import org.olat.repository.model.SearchAuthorRepositoryEntryViewParams.OrderBy; +import org.olat.repository.model.SearchAuthorRepositoryEntryViewParams.ResourceUsage; import org.olat.user.UserImpl; import org.olat.user.UserManager; import org.springframework.beans.factory.annotation.Autowired; @@ -97,6 +98,9 @@ public class RepositoryEntryAuthorQueries { Number numOffers = (Number)object[2]; long offers = numOffers == null ? 0l : numOffers.longValue(); + Number numOfReferences = (Number)object[3]; + int references = numOfReferences == null ? 0 : numOfReferences.intValue(); + String deletedByName = null; if(params.isDeleted()) { Identity deletedBy = re.getDeletedBy(); @@ -105,7 +109,7 @@ public class RepositoryEntryAuthorQueries { } } - views.add(new RepositoryEntryAuthorImpl(re, hasMarks, offers, deletedByName)); + views.add(new RepositoryEntryAuthorImpl(re, hasMarks, offers, references, deletedByName)); } return views; } @@ -138,8 +142,11 @@ public class RepositoryEntryAuthorQueries { needIdentity = true; } sb.append(" (select count(offer.key) from acoffer as offer ") - .append(" where offer.resource=res and offer.valid=true") - .append(" ) as offers") + .append(" where offer.resource.key=res.key and offer.valid=true") + .append(" ) as offers,") + .append(" (select count(ref.key) from references as ref ") + .append(" where ref.target.key=res.key") + .append(" ) as references") .append(" from repositoryentry as v") .append(" inner join ").append(oracle ? "" : "fetch").append(" v.olatResource as res") .append(" inner join fetch v.statistics as stats") @@ -179,6 +186,14 @@ public class RepositoryEntryAuthorQueries { .append(" ))"); } + if(params.getResourceUsage() != null && params.getResourceUsage() != ResourceUsage.all) { + sb.append(" and res.resName!='CourseModule' and"); + if(params.getResourceUsage() == ResourceUsage.notUsed) { + sb.append(" not"); + } + sb.append(" exists (select ref.key from references as ref where ref.target.key=res.key)"); + } + if(params.getRepoEntryKeys() != null && params.getRepoEntryKeys().size() > 0) { sb.append(" and v.key in (:repoEntryKeys)"); } @@ -369,6 +384,14 @@ public class RepositoryEntryAuthorQueries { sb.append(" order by offers desc, lower(v.displayname) desc"); } break; + case references: { + if(asc) { + sb.append(" order by references asc, lower(v.displayname) asc"); + } else { + sb.append(" order by references desc, lower(v.displayname) desc"); + } + break; + } case creationDate: sb.append(" order by v.creationDate "); appendAsc(sb, asc).append(", lower(v.displayname) asc"); diff --git a/src/main/java/org/olat/repository/model/RepositoryEntryAuthorImpl.java b/src/main/java/org/olat/repository/model/RepositoryEntryAuthorImpl.java index 221d37cbc027a9f07287aa097782f6d212a1cad7..147dbcf98814d3dbedbe93ffaa4c03e580faa94f 100644 --- a/src/main/java/org/olat/repository/model/RepositoryEntryAuthorImpl.java +++ b/src/main/java/org/olat/repository/model/RepositoryEntryAuthorImpl.java @@ -56,6 +56,8 @@ public class RepositoryEntryAuthorImpl implements RepositoryEntryAuthorView { private final Date lastUsage; + public int numOfReferences; + private final Date deletionDate; private final String deletedByFullName; @@ -66,7 +68,7 @@ public class RepositoryEntryAuthorImpl implements RepositoryEntryAuthorView { private final long offers; - public RepositoryEntryAuthorImpl(RepositoryEntry re, boolean marked, long offers, String deletedByFullName) { + public RepositoryEntryAuthorImpl(RepositoryEntry re, boolean marked, long offers, int numOfReferences, String deletedByFullName) { key = re.getKey(); creationDate = re.getCreationDate(); @@ -87,6 +89,8 @@ public class RepositoryEntryAuthorImpl implements RepositoryEntryAuthorView { lastUsage = re.getStatistics().getLastUsage(); + this.numOfReferences = numOfReferences; + deletionDate = re.getDeletionDate(); this.deletedByFullName = deletedByFullName; @@ -190,6 +194,11 @@ public class RepositoryEntryAuthorImpl implements RepositoryEntryAuthorView { return lifecycle; } + @Override + public int getNumOfReferences() { + return numOfReferences; + } + @Override public boolean isMarked() { return marked; diff --git a/src/main/java/org/olat/repository/model/SearchAuthorRepositoryEntryViewParams.java b/src/main/java/org/olat/repository/model/SearchAuthorRepositoryEntryViewParams.java index 75688f7470cf7a2d84a140a14276a0349ad28180..3549ae151b64a7aff3cc0b56217cd47e9c1ea394 100644 --- a/src/main/java/org/olat/repository/model/SearchAuthorRepositoryEntryViewParams.java +++ b/src/main/java/org/olat/repository/model/SearchAuthorRepositoryEntryViewParams.java @@ -38,6 +38,7 @@ public class SearchAuthorRepositoryEntryViewParams { private Boolean marked; private boolean deleted = false; private boolean ownedResourcesOnly; + private ResourceUsage resourceUsage = ResourceUsage.all; private String idAndRefs; private String idRefsAndTitle; @@ -174,6 +175,14 @@ public class SearchAuthorRepositoryEntryViewParams { this.marked = marked; } + public ResourceUsage getResourceUsage() { + return resourceUsage; + } + + public void setResourceUsage(ResourceUsage resourceUsage) { + this.resourceUsage = resourceUsage; + } + public enum OrderBy { key, favorit, @@ -192,7 +201,14 @@ public class SearchAuthorRepositoryEntryViewParams { lifecycleSoftkey, lifecycleStart, lifecycleEnd, + references, deletionDate, deletedBy } + + public enum ResourceUsage { + all, + used, + notUsed + } } 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 7103a5b0c9ec0d80f088a964314be73899bea9e1..433f3792aa7577d93d766e4ec92f3f109b84dc9c 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthorListController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthorListController.java @@ -101,8 +101,10 @@ import org.olat.repository.handlers.RepositoryHandlerFactory; import org.olat.repository.handlers.RepositoryHandlerFactory.OrderedRepositoryHandler; import org.olat.repository.model.SearchAuthorRepositoryEntryViewParams; import org.olat.repository.model.SearchAuthorRepositoryEntryViewParams.OrderBy; +import org.olat.repository.model.SearchAuthorRepositoryEntryViewParams.ResourceUsage; import org.olat.repository.ui.RepositoyUIFactory; import org.olat.repository.ui.author.AuthoringEntryDataModel.Cols; +import org.olat.resource.references.ReferenceManager; import org.olat.user.UserManager; import org.olat.util.logging.activity.LoggingResourceable; import org.springframework.beans.factory.annotation.Autowired; @@ -132,6 +134,7 @@ public class AuthorListController extends FormBasicController implements Activat private AuthorSearchController searchCtrl; private UserSearchController userSearchCtr; private DialogBoxController copyDialogCtrl; + private ReferencesController referencesCtrl; private CopyRepositoryEntryController copyCtrl; private ConfirmCloseController closeCtrl; private ConfirmDeleteSoftlyController confirmDeleteCtrl; @@ -290,6 +293,9 @@ public class AuthorListController extends FormBasicController implements Activat true, OrderBy.creationDate.name())); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.lastUsage.i18nKey(), Cols.lastUsage.ordinal(), true, OrderBy.lastUsage.name())); + columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, Cols.references.i18nKey(), Cols.references.ordinal(), + true, OrderBy.references.name())); + initActionsColumns(columnsModel); model = new AuthoringEntryDataModel(dataSource, columnsModel); @@ -466,6 +472,7 @@ public class AuthorListController extends FormBasicController implements Activat searchParams.setDisplayname(null); searchParams.setDescription(null); searchParams.setOwnedResourcesOnly(false); + searchParams.setResourceUsage(ResourceUsage.all); } } else if(userSearchCtr == source) { @SuppressWarnings("unchecked") @@ -488,6 +495,11 @@ public class AuthorListController extends FormBasicController implements Activat toolsCalloutCtrl.deactivate(); cleanUp(); } + } else if(referencesCtrl == source) { + if(event == Event.DONE_EVENT) { + toolsCalloutCtrl.deactivate(); + cleanUp(); + } } else if(closeCtrl == source) { if(event == Event.CANCELLED_EVENT) { cmc.deactivate(); @@ -588,6 +600,9 @@ public class AuthorListController extends FormBasicController implements Activat } else if("tools".equals(cmd)) { AuthoringEntryRow row = (AuthoringEntryRow)link.getUserObject(); doOpenTools(ureq, row, link); + } else if("references".equals(cmd)) { + AuthoringEntryRow row = (AuthoringEntryRow)link.getUserObject(); + doOpenReferences(ureq, row, link); } } else if(source == tableEl) { if(event instanceof SelectionEvent) { @@ -649,6 +664,25 @@ public class AuthorListController extends FormBasicController implements Activat } } + private void doOpenReferences(UserRequest ureq, AuthoringEntryRow row, FormLink link) { + removeAsListenerAndDispose(toolsCtrl); + removeAsListenerAndDispose(toolsCalloutCtrl); + + RepositoryEntry entry = repositoryService.loadByKey(row.getKey()); + if(entry == null) { + tableEl.reloadData(); + showWarning("repositoryentry.not.existing"); + } else { + referencesCtrl = new ReferencesController(ureq, getWindowControl(), entry); + listenTo(referencesCtrl); + + toolsCalloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(), + referencesCtrl.getInitialComponent(), link.getFormDispatchId(), "", true, ""); + listenTo(toolsCalloutCtrl); + toolsCalloutCtrl.activate(); + } + } + private void doImport(UserRequest ureq) { if(importCtrl != null) return; @@ -720,6 +754,7 @@ public class AuthorListController extends FormBasicController implements Activat searchParams.setIdAndRefs(se.getId()); searchParams.setAuthor(se.getAuthor()); searchParams.setOwnedResourcesOnly(se.isOwnedResourcesOnly()); + searchParams.setResourceUsage(se.getResourceUsage()); searchParams.setDisplayname(se.getDisplayname()); searchParams.setDescription(se.getDescription()); tableEl.reset(true, true, true); @@ -989,6 +1024,13 @@ public class AuthorListController extends FormBasicController implements Activat } } + private void launch(UserRequest ureq, RepositoryEntryRef ref) { + String businessPath = "[RepositoryEntry:" + ref.getKey() + "]"; + if(!NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl())) { + tableEl.reloadData(); + } + } + private void launchCatalog(UserRequest ureq, RepositoryEntryRef ref) { String businessPath = "[RepositoryEntry:" + ref.getKey() + "][Catalog:0]"; NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl()); @@ -1055,6 +1097,57 @@ public class AuthorListController extends FormBasicController implements Activat toolsLink.setIconLeftCSS("o_icon o_icon_actions o_icon-lg"); toolsLink.setUserObject(row); row.setToolsLink(toolsLink); + //references + if(row.getNumOfReferences() > 0) { + String numOfReferences = Integer.toString(row.getNumOfReferences()); + FormLink referencesLink = uifactory.addFormLink("tools_" + counter.incrementAndGet(), "references", numOfReferences, null, null, Link.NONTRANSLATED); + referencesLink.setUserObject(row); + row.setReferencesLink(referencesLink); + } + } + + private class ReferencesController extends BasicController { + + @Autowired + private ReferenceManager referenceManager; + + public ReferencesController(UserRequest ureq, WindowControl wControl, RepositoryEntry entry) { + super(ureq, wControl); + setTranslator(AuthorListController.this.getTranslator()); + VelocityContainer mainVC = createVelocityContainer("references"); + + List<RepositoryEntry> refs = referenceManager.getRepositoryReferencesTo(entry.getOlatResource()); + + List<String> refLinks = new ArrayList<>(refs.size()); + for(RepositoryEntry ref:refs) { + String name = "ref-" + counter.incrementAndGet(); + Link refLink = LinkFactory.createLink(name, "reference", getTranslator(), mainVC, this, Link.NONTRANSLATED); + refLink.setCustomDisplayText(StringHelper.escapeHtml(ref.getDisplayname())); + refLink.setUserObject(ref); + refLink.setIconLeftCSS("o_icon o_icon-fw " + RepositoyUIFactory.getIconCssClass(ref)); + refLinks.add(name); + } + mainVC.contextPut("referenceLinks", refLinks); + + putInitialPanel(mainVC); + } + + @Override + protected void event(UserRequest ureq, Component source, Event event) { + if(source instanceof Link) { + fireEvent(ureq, Event.DONE_EVENT); + Link link = (Link)source; + if("reference".equals(link.getCommand())) { + RepositoryEntryRef uobject = (RepositoryEntryRef)link.getUserObject(); + launch(ureq, uobject); + } + } + } + + @Override + protected void doDispose() { + // + } } private class ToolsController extends BasicController { diff --git a/src/main/java/org/olat/repository/ui/author/AuthorSearchController.java b/src/main/java/org/olat/repository/ui/author/AuthorSearchController.java index 50cba0ca9236e865f26392d1fbe3f22a7c08c0ab..de67a19b2b71647ec916b42a4108d1149aa48872 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthorSearchController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthorSearchController.java @@ -44,6 +44,7 @@ import org.olat.core.util.Util; import org.olat.repository.RepositoryManager; import org.olat.repository.handlers.RepositoryHandlerFactory; import org.olat.repository.handlers.RepositoryHandlerFactory.OrderedRepositoryHandler; +import org.olat.repository.model.SearchAuthorRepositoryEntryViewParams.ResourceUsage; import org.springframework.beans.factory.annotation.Autowired; /** @@ -55,12 +56,14 @@ import org.springframework.beans.factory.annotation.Autowired; public class AuthorSearchController extends FormBasicController implements ExtendedFlexiTableSearchController { private static final String[] keys = new String[]{ "my" }; + private static final String[] usageKeys = new String[]{ ResourceUsage.all.name(), ResourceUsage.used.name(), ResourceUsage.notUsed.name() }; private TextElement id; // only for admins private TextElement displayName; private TextElement author; private TextElement description; private SingleSelection types; + private SingleSelection resourceUsageEl; private MultipleSelectionElement ownedResourcesOnlyEl; private FormLink searchButton; @@ -117,6 +120,14 @@ public class AuthorSearchController extends FormBasicController implements Exten ownedResourcesOnlyEl = uifactory.addCheckboxesHorizontal("cif_my", "cif.owned.resources.only", rightContainer, keys, new String[]{ "" }); ownedResourcesOnlyEl.select(keys[0], true); + String[] usageValues = new String[] { + translate("cif.owned.resources.usage.all"), + translate("cif.owned.resources.usage.used"), + translate("cif.owned.resources.usage.notUsed") + }; + resourceUsageEl = uifactory.addRadiosHorizontal("cif_used", "cif.owned.resources.usage", rightContainer, usageKeys, usageValues); + resourceUsageEl.select(usageKeys[0], true); + FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("button_layout", getTranslator()); formLayout.add(buttonLayout); searchButton = uifactory.addFormLink("search", buttonLayout, Link.BUTTON); @@ -132,6 +143,9 @@ public class AuthorSearchController extends FormBasicController implements Exten author.setValue(se.getAuthor()); ownedResourcesOnlyEl.select(keys[0], se.isOwnedResourcesOnly()); description.setValue(se.getDescription()); + if(se.getResourceUsage() != null) { + resourceUsageEl.select(se.getResourceUsage().name(), true); + } String type = se.getType(); if(StringHelper.containsNonWhitespace(type)) { @@ -197,6 +211,13 @@ public class AuthorSearchController extends FormBasicController implements Exten return ownedResourcesOnlyEl.isAtLeastSelected(1); } + public ResourceUsage getResourceUsage() { + if(resourceUsageEl.isOneSelected()) { + return ResourceUsage.valueOf(resourceUsageEl.getSelectedKey()); + } + return ResourceUsage.all; + } + @Override public void setEnabled(boolean enable) { this.enabled = enable; @@ -242,6 +263,7 @@ public class AuthorSearchController extends FormBasicController implements Exten e.setDescription(getDescription()); e.setType(getRestrictedType()); e.setOwnedResourcesOnly(isOwnedResourcesOnly()); + e.setResourceUsage(getResourceUsage()); fireEvent(ureq, e); } diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataModel.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataModel.java index 8cb4517d62c9182853fa1c014ce5b92452cd9df0..45a4ef7abce4eac6a77ebe91be2b2cc80eac02df 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataModel.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataModel.java @@ -85,6 +85,12 @@ class AuthoringEntryDataModel extends DefaultFlexiTableDataSourceModel<Authoring case deletedBy: return item.getDeletedByFullName(); case deletionDate: return item.getDeletionDate(); case mark: return item.getMarkLink(); + case references: { + if(item.getNumOfReferences() <= 0) { + return null; + } + return item.getReferencesLink(); + } case detailsSupported: { RepositoryHandler handler = handlerFactory.getRepositoryHandler(item.getResourceType()); return (handler != null) ? Boolean.TRUE : Boolean.FALSE; @@ -125,6 +131,7 @@ class AuthoringEntryDataModel extends DefaultFlexiTableDataSourceModel<Authoring access("table.header.access"), creationDate("table.header.date"), lastUsage("table.header.lastusage"), + references("table.header.references"), deletedBy("table.header.deletedby"), deletionDate("table.header.deletiondate"), mark("table.header.mark"), diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryRow.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryRow.java index 74ae6d439c72ad899c72ace67ea4daed19268767..1d3710f434242493e936bf9b7ba0d9b09a86d920 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryRow.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryRow.java @@ -68,6 +68,8 @@ public class AuthoringEntryRow implements RepositoryEntryRef, RepositoryEntryLig private Date lifecycleStart; private Date lifecycleEnd; + private int numOfReferences; + private final String deletedByFullName; private final Date deletionDate; @@ -77,6 +79,7 @@ public class AuthoringEntryRow implements RepositoryEntryRef, RepositoryEntryLig private FormLink markLink; private FormLink toolsLink; + private FormLink referencesLink; public AuthoringEntryRow(RepositoryEntryAuthorView view, String fullnameAuthor) { key = view.getKey(); @@ -119,6 +122,8 @@ public class AuthoringEntryRow implements RepositoryEntryRef, RepositoryEntryLig } } + numOfReferences = view.getNumOfReferences(); + deletedByFullName = view.getDeletedByFullName(); deletionDate = view.getDeletionDate(); } @@ -204,6 +209,10 @@ public class AuthoringEntryRow implements RepositoryEntryRef, RepositoryEntryLig public Date getLifecycleEnd() { return lifecycleEnd; } + + public int getNumOfReferences() { + return numOfReferences; + } public String getDeletedByFullName() { return deletedByFullName; @@ -282,6 +291,14 @@ public class AuthoringEntryRow implements RepositoryEntryRef, RepositoryEntryLig this.toolsLink = toolsLink; } + public FormLink getReferencesLink() { + return referencesLink; + } + + public void setReferencesLink(FormLink referencesLink) { + this.referencesLink = referencesLink; + } + @Override public int hashCode() { return key == null ? -79224867 : key.hashCode(); diff --git a/src/main/java/org/olat/repository/ui/author/SearchEvent.java b/src/main/java/org/olat/repository/ui/author/SearchEvent.java index 9c025694c74aaf5ed620c189f5a9d0617c60d086..2a280d9dee150b037596e4c414b0c42bc0903199 100644 --- a/src/main/java/org/olat/repository/ui/author/SearchEvent.java +++ b/src/main/java/org/olat/repository/ui/author/SearchEvent.java @@ -21,6 +21,7 @@ package org.olat.repository.ui.author; import org.olat.core.gui.control.Event; import org.olat.core.id.context.StateEntry; +import org.olat.repository.model.SearchAuthorRepositoryEntryViewParams.ResourceUsage; /** * @@ -38,6 +39,7 @@ public class SearchEvent extends Event implements StateEntry { private String description; private String type; private boolean ownedResourcesOnly; + private ResourceUsage resourceUsage; public SearchEvent() { super("re-search"); @@ -92,6 +94,14 @@ public class SearchEvent extends Event implements StateEntry { this.ownedResourcesOnly = ownedResourcesOnly; } + public ResourceUsage getResourceUsage() { + return resourceUsage; + } + + public void setResourceUsage(ResourceUsage resourceUsage) { + this.resourceUsage = resourceUsage; + } + @Override public SearchEvent clone() { SearchEvent clone = new SearchEvent(); @@ -101,6 +111,7 @@ public class SearchEvent extends Event implements StateEntry { clone.description = description; clone.type = type; clone.ownedResourcesOnly = ownedResourcesOnly; + clone.resourceUsage = resourceUsage; return clone; } } diff --git a/src/main/java/org/olat/repository/ui/author/_content/references.html b/src/main/java/org/olat/repository/ui/author/_content/references.html new file mode 100644 index 0000000000000000000000000000000000000000..f0015f49fe164962aee30168422639b85642164f --- /dev/null +++ b/src/main/java/org/olat/repository/ui/author/_content/references.html @@ -0,0 +1,6 @@ +$r.translate("details.referenceinfo.txt") +<ul class="o_dropdown list-unstyled"> +#foreach($referenceLink in $referenceLinks) + <li>$r.render($referenceLink)</li> +#end +</ul> \ No newline at end of file