diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java index 7e554a9e231cffcf1ef8ddb09e41071ad6994e43..9d1af6754b69094b0ba036a43a82bb73d57542a3 100644 --- a/src/main/java/org/olat/repository/RepositoryManager.java +++ b/src/main/java/org/olat/repository/RepositoryManager.java @@ -89,6 +89,7 @@ import org.olat.search.service.indexer.LifeFullIndexer; import org.olat.user.UserImpl; import org.olat.util.logging.activity.LoggingResourceable; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; /** * Initial Date: Mar 31, 2004 @@ -98,6 +99,7 @@ import org.springframework.beans.factory.annotation.Autowired; * Comment: * */ +@Service("repositoryManager") public class RepositoryManager extends BasicManager { private final int PICTUREWIDTH = 570; @@ -543,7 +545,11 @@ public class RepositoryManager extends BasicManager { // allow if access granted for users canLaunch = true; } else if (re.getAccess() == RepositoryEntry.ACC_OWNERS && re.isMembersOnly()) { - canLaunch = repositoryEntryRelationDao.isMember(identity, re); + if(!canLaunch) { + if(repositoryEntryRelationDao.isMember(identity, re)) { + canLaunch = true; + } + } } } diff --git a/src/main/java/org/olat/repository/RepositoryModule.java b/src/main/java/org/olat/repository/RepositoryModule.java index 2934f1534729579293f060a1f3af877a7fc80af6..ee15d8595c1475d5df009ec5137efb86aa75b445 100644 --- a/src/main/java/org/olat/repository/RepositoryModule.java +++ b/src/main/java/org/olat/repository/RepositoryModule.java @@ -21,16 +21,19 @@ package org.olat.repository; import org.olat.NewControllerFactory; import org.olat.catalog.CatalogEntry; -import org.olat.core.configuration.AbstractOLATModule; -import org.olat.core.configuration.PersistedProperties; +import org.olat.core.configuration.AbstractSpringModule; import org.olat.core.id.Roles; import org.olat.core.id.context.SiteContextEntryControllerCreator; import org.olat.core.util.StringHelper; +import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.course.site.CourseSite; import org.olat.course.site.CourseSiteContextEntryControllerCreator; import org.olat.group.BusinessGroupModule; import org.olat.repository.site.MyCoursesSite; import org.olat.repository.site.RepositorySite; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; /** * Description:<br> @@ -41,23 +44,45 @@ import org.olat.repository.site.RepositorySite; * * @author gnaegi */ -public class RepositoryModule extends AbstractOLATModule { +@Service("repositoryModule") +public class RepositoryModule extends AbstractSpringModule { private static final String MANAGED_REPOENTRY_ENABLED = "managedRepositoryEntries"; private static final String CATALOG_SITE_ENABLED = "site.catalog.enable"; private static final String CATALOG_ENABLED = "catalog.enable"; private static final String CATALOG_BROWSING_ENABLED = "catalog.brwosing.enable"; - private static final String MYCOURSES_SEARCH_ENABLED = "mycourses.search.enable"; + private static final String MYCOURSES_SEARCH_ENABLED = "mycourses.search.enabled"; + private static final String MYCOURSES_ALL_RESOURCES_ENABLED = "mycourses.all.resources.enabled"; + private static final String COMMENT_ENABLED = "repo.comment.enabled"; + private static final String RATING_ENABLED = "repo.rating.enabled"; + + @Value("${site.catalog.enable:true}") private boolean catalogSiteEnabled; + @Value("${catalog.enable:true}") private boolean catalogEnabled; + @Value("${repo.catalog.browsing.enable}") private boolean catalogBrowsingEnabled; - private boolean listAllResourceTypes; + + @Value("${repo.managed}") private boolean managedRepositoryEntries; + @Value("${mycourses.search.enabled:true}") private boolean myCoursesSearchEnabled; + @Value("${mycourses.all.resources.enabled:true}") + private boolean listAllResourceTypes; + @Value("${repo.comment.enabled:true}") + private boolean commentEnabled; + @Value("${repo.rating.enabled:true}") + private boolean ratingEnabled; + @Autowired private BusinessGroupModule groupModule; + @Autowired + public RepositoryModule(CoordinatorManager coordinatorManager) { + super(coordinatorManager); + } + /** * @see org.olat.core.configuration.AbstractOLATModule#init() */ @@ -90,20 +115,6 @@ public class RepositoryModule extends AbstractOLATModule { this.groupModule = groupModule; } - /** - * @see org.olat.core.configuration.AbstractOLATModule#initDefaultProperties() - */ - @Override - protected void initDefaultProperties() { - managedRepositoryEntries = getBooleanConfigParameter(MANAGED_REPOENTRY_ENABLED, false); - - catalogSiteEnabled = getBooleanConfigParameter(CATALOG_SITE_ENABLED, true); - catalogEnabled = getBooleanConfigParameter(CATALOG_ENABLED, true); - catalogBrowsingEnabled = getBooleanConfigParameter(CATALOG_BROWSING_ENABLED, true); - - myCoursesSearchEnabled = getBooleanConfigParameter(MYCOURSES_SEARCH_ENABLED, true); - } - private void updateProperties() { String managedRepo = getStringPropertyValue(MANAGED_REPOENTRY_ENABLED, true); if(StringHelper.containsNonWhitespace(managedRepo)) { @@ -129,6 +140,21 @@ public class RepositoryModule extends AbstractOLATModule { if(StringHelper.containsNonWhitespace(myCoursesSearch)) { myCoursesSearchEnabled = "true".equals(myCoursesSearch); } + + String myCoursesAllResources = getStringPropertyValue(MYCOURSES_ALL_RESOURCES_ENABLED, true); + if(StringHelper.containsNonWhitespace(myCoursesAllResources)) { + listAllResourceTypes = "true".equals(myCoursesAllResources); + } + + String comment = getStringPropertyValue(COMMENT_ENABLED, true); + if(StringHelper.containsNonWhitespace(comment)) { + commentEnabled = "true".equals(comment); + } + + String rating = getStringPropertyValue(RATING_ENABLED, true); + if(StringHelper.containsNonWhitespace(rating)) { + ratingEnabled = "true".equals(rating); + } } /** @@ -138,11 +164,6 @@ public class RepositoryModule extends AbstractOLATModule { protected void initFromChangedProperties() { updateProperties(); } - - @Override - public void setPersistedProperties(PersistedProperties persistedProperties) { - this.moduleConfigProperties = persistedProperties; - } public boolean isAcceptMembership(Roles roles) { return groupModule.isAcceptMembership(roles); @@ -155,6 +176,10 @@ public class RepositoryModule extends AbstractOLATModule { public boolean isListAllResourceTypes() { return listAllResourceTypes; } + + public void setListAllResourceTypes(boolean enabled) { + setStringProperty(MYCOURSES_ALL_RESOURCES_ENABLED, Boolean.toString(enabled), true); + } public boolean isManagedRepositoryEntries() { return managedRepositoryEntries; @@ -195,6 +220,20 @@ public class RepositoryModule extends AbstractOLATModule { public void setMyCoursesSearchEnabled(boolean enabled) { setStringProperty(MYCOURSES_SEARCH_ENABLED, Boolean.toString(enabled), true); } - - + + public boolean isCommentEnabled() { + return commentEnabled; + } + + public void setCommentEnabled(boolean enabled) { + setStringProperty(COMMENT_ENABLED, Boolean.toString(enabled), true); + } + + public boolean isRatingEnabled() { + return ratingEnabled; + } + + public void setRatingEnabled(boolean enabled) { + setStringProperty(RATING_ENABLED, Boolean.toString(enabled), true); + } } \ No newline at end of file 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 79b774c2b09412423966e851a10e561498b13f72..fc07c452ce884b8a0d922f4d78d428cb740b6610 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties @@ -86,8 +86,10 @@ 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 -my.course.search.on=ein +on=ein my.course.search.enabled=Suche in "Kurs" +my.course.comment.enabled=Kommentar in "Kurs" +my.course.rating.enabled=Beurteilung in "Kurs" repository.admin.title=Repository Einstellungen mail.member=$org.olat.group.ui.main\:mail.member user.notfound=Folgende Benutzer wurden nicht gefunden: {0} diff --git a/src/main/java/org/olat/repository/_spring/repositoryContext.xml b/src/main/java/org/olat/repository/_spring/repositoryContext.xml index 62ffa17c8817fdf28b944d1a8896270aa2bc0c8b..ec98a8fa92da0d6e3cb5c70320bb7c78e4d4a168 100644 --- a/src/main/java/org/olat/repository/_spring/repositoryContext.xml +++ b/src/main/java/org/olat/repository/_spring/repositoryContext.xml @@ -8,60 +8,7 @@ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> - <context:component-scan base-package="org.olat.repository.manager,org.olat.repository.handlers" /> - - <bean id="repositoryModule" class="org.olat.repository.RepositoryModule" depends-on="userModule"> - <property name="groupModule" ref="businessGroupModule"/> - <property name="persistedProperties"> - <bean class="org.olat.core.configuration.PersistedProperties" scope="prototype" init-method="init" destroy-method="destroy"> - <constructor-arg index="0" ref="coordinatorManager"/> - <constructor-arg index="1" ref="repositoryModule" /> - </bean> - </property> - </bean> - - <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> - <property name="targetObject" ref="repositoryModule" /> - <property name="targetMethod" value="init" /> - <property name="arguments"> - <value> - managedRepositoryEntries=${repo.managed} - site.catalog.enable=${site.catalog.enable} - repo.catalog.enable=${repo.catalog.enable} - repo.catalog.browsing.enable=${repo.catalog.browsing.enable} - </value> - </property> - </bean> - - <bean id="repositoryManager" class="org.olat.repository.RepositoryManager"/> - <bean id="deletionModule" class="org.olat.repository.delete.service.DeletionModule"> - <property name="baseSecurityManager" ref="baseSecurityManager" /> - <property name="persistedProperties"> - <bean class="org.olat.core.configuration.PersistedProperties" - scope="prototype" init-method="init" destroy-method="destroy"> - <constructor-arg index="0" ref="coordinatorManager" /> - <constructor-arg index="1" ref="deletionModule" /> - </bean> - </property> - </bean> - - <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> - <property name="targetObject" ref="deletionModule" /> - <property name="targetMethod" value="init" /> - <property name="arguments"> - <value> - archiveRootPath=${archive.dir} - deleteEmailResponseToUserName=administrator - adminUserName=${deletionModule.adminUserName} - </value> - </property> - </bean> - - <bean id="repositoryDeletionManager" - class="org.olat.repository.delete.service.RepositoryDeletionManager"> - <constructor-arg index="0" ref="deletionModule" /> - <property name="mailManager" ref="mailManager" /> - </bean> + <context:component-scan base-package="org.olat.repository" /> <!-- life cycle admin. panel --> <bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints"> diff --git a/src/main/java/org/olat/repository/delete/service/DeletionModule.java b/src/main/java/org/olat/repository/delete/service/DeletionModule.java index 8eb821ca0af04dbd8acccdee7c75d35e050b0159..d56e995afe11acb9e1a906688be4999aafa5e02f 100644 --- a/src/main/java/org/olat/repository/delete/service/DeletionModule.java +++ b/src/main/java/org/olat/repository/delete/service/DeletionModule.java @@ -25,7 +25,6 @@ package org.olat.repository.delete.service; -import java.io.File; import java.text.SimpleDateFormat; import java.util.Collections; import java.util.Date; @@ -33,46 +32,41 @@ import java.util.List; import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.IdentityShort; -import org.olat.core.configuration.AbstractOLATModule; -import org.olat.core.configuration.PersistedProperties; +import org.olat.core.configuration.AbstractSpringModule; import org.olat.core.id.Identity; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; import org.olat.core.util.WebappHelper; +import org.olat.core.util.coordinate.CoordinatorManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; /** - * TODO:cg Documentation * Initial Date: 15.06.2006 <br> * @author Christian Guretzki */ -public class DeletionModule extends AbstractOLATModule { - - private static final String CONF_ARCHIVE_ROOT_PATH = "archiveRootPath"; +@Service("deletionModule") +public class DeletionModule extends AbstractSpringModule { + private static final OLog log = Tracing.createLoggerFor(DeletionModule.class); private static final String CONF_DELETE_EMAIL_RESPONSE_TO_USER_NAME = "deleteEmailResponseToUserName"; - private static final String CONF_ADMIN_USER_NAME = "adminUserName"; private static final String DEFAULT_ADMIN_USERNAME = "administrator"; + + @Value("${archive.dir}") private String archiveRootPath; + @Value("${deleteEmailResponseToUserName:administrator}") private String emailResponseTo; + @Value("${deletionModule.adminUserName:administrator}") + private String adminUserName; + private Identity adminUserIdentity; + + @Autowired private BaseSecurity baseSecurityManager; - - /** - * [used by spring] - */ - private DeletionModule() { - // - } - - /** - * [used by spring] - * @param baseSecurityManager - */ - public void setBaseSecurityManager(BaseSecurity baseSecurityManager) { - this.baseSecurityManager = baseSecurityManager; - } - - @Override - protected void initDefaultProperties() { - // + @Autowired + public DeletionModule(CoordinatorManager coordinatorManager) { + super(coordinatorManager); } @Override @@ -80,35 +74,28 @@ public class DeletionModule extends AbstractOLATModule { // } - /** - * @see org.olat.core.configuration.OLATModule#init(com.anthonyeden.lib.config.Configuration) - */ + @Override public void init() { - archiveRootPath = getStringConfigParameter(CONF_ARCHIVE_ROOT_PATH, System.getProperty("java.io.tmpdir") + File.separator+"olatdata"+File.separator + "deleted_archive", false); - emailResponseTo = getStringConfigParameter(CONF_DELETE_EMAIL_RESPONSE_TO_USER_NAME, WebappHelper.getMailConfig("mailDeleteUser"), false); - if (!emailResponseTo.contains("@")) { List<IdentityShort> identities = baseSecurityManager.findShortIdentitiesByName(Collections.singletonList(emailResponseTo)); if (identities != null && identities.size() == 1) { emailResponseTo = identities.get(0).getEmail(); } else { - logWarn("Could not find: " + CONF_DELETE_EMAIL_RESPONSE_TO_USER_NAME + " with name: " + emailResponseTo, null); + log.warn("Could not find: " + CONF_DELETE_EMAIL_RESPONSE_TO_USER_NAME + " with name: " + emailResponseTo, null); emailResponseTo = WebappHelper.getMailConfig("mailFrom"); } - } - - String adminUserName = getStringConfigParameter(CONF_ADMIN_USER_NAME, "administrator", false); + if (adminUserName != null) { adminUserIdentity = baseSecurityManager.findIdentityByName(adminUserName); } else { adminUserIdentity = baseSecurityManager.findIdentityByName(DEFAULT_ADMIN_USERNAME); } - if(isLogDebugEnabled()) { - logDebug("archiveRootPath=" + archiveRootPath); - logDebug("emailResponseTo=" + emailResponseTo); - logDebug("adminUserIdentity=" + adminUserIdentity); + if(log.isDebug()) { + log.debug("archiveRootPath=" + archiveRootPath); + log.debug("emailResponseTo=" + emailResponseTo); + log.debug("adminUserIdentity=" + adminUserIdentity); } } @@ -134,12 +121,4 @@ public class DeletionModule extends AbstractOLATModule { public Identity getAdminUserIdentity() { return adminUserIdentity; } - - /** - * [used by Spring] - */ - @Override - public void setPersistedProperties(PersistedProperties persistedProperties) { - this.moduleConfigProperties = persistedProperties; - } } diff --git a/src/main/java/org/olat/repository/delete/service/RepositoryDeletionManager.java b/src/main/java/org/olat/repository/delete/service/RepositoryDeletionManager.java index 5ee02fc14a40e31fb6e6991b8843b4fc27eaa2a0..895cb9f020a25bd366bca251dfb5b38f41b6dd25 100644 --- a/src/main/java/org/olat/repository/delete/service/RepositoryDeletionManager.java +++ b/src/main/java/org/olat/repository/delete/service/RepositoryDeletionManager.java @@ -63,6 +63,8 @@ import org.olat.resource.OLATResourceManager; import org.olat.resource.references.ReferenceManager; import org.olat.user.UserDataDeletable; import org.olat.user.UserManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; /** @@ -73,6 +75,7 @@ import org.olat.user.UserManager; * Comment: * */ +@Service("repositoryDeletionManager") public class RepositoryDeletionManager extends BasicManager implements UserDataDeletable { private static final String REPOSITORY_ARCHIVE_DIR = "archive_deleted_resources"; @@ -87,35 +90,19 @@ public class RepositoryDeletionManager extends BasicManager implements UserDataD public static final String SEND_DELETE_EMAIL_ACTION = "sendDeleteEmail"; private static final String REPOSITORY_DELETED_ACTION = "respositoryEntryDeleted"; - private DeletionModule deletionModule; + + private final DeletionModule deletionModule; + + @Autowired private MailManager mailManager; + @Autowired private RepositoryService repositoryService; - - /** - * [used by spring] - * @param userDeletionManager - */ - private RepositoryDeletionManager(DeletionModule deletionModule) { + @Autowired + public RepositoryDeletionManager(DeletionModule deletionModule) { this.deletionModule = deletionModule; INSTANCE = this; } - - /** - * [used by Spring] - * @param mailManager - */ - public void setMailManager(MailManager mailManager) { - this.mailManager = mailManager; - } - - /** - * [used by Spring] - * @param repositoryService - */ - public void setRepositoryService(RepositoryService repositoryService) { - this.repositoryService = repositoryService; - } /** * @return Singleton. diff --git a/src/main/java/org/olat/repository/ui/RepositoryAdminController.java b/src/main/java/org/olat/repository/ui/RepositoryAdminController.java index 7b9e310d4b6104bece2be947d227a0edbcaad3a3..a6e36d2e6a9d27239fdee12992bf8b7b6a9c3256 100644 --- a/src/main/java/org/olat/repository/ui/RepositoryAdminController.java +++ b/src/main/java/org/olat/repository/ui/RepositoryAdminController.java @@ -40,7 +40,7 @@ import org.springframework.beans.factory.annotation.Autowired; */ public class RepositoryAdminController extends FormBasicController { - private MultipleSelectionElement enabled; + private MultipleSelectionElement myCourseSearchEl, commentEl, ratingEl; private static final String[] keys = {"on"}; @Autowired @@ -57,11 +57,21 @@ public class RepositoryAdminController extends FormBasicController { setFormTitle("repository.admin.title"); setFormContextHelp(RepositoryService.class.getPackage().getName(), "rep-admin.html", "help.hover.repository.admin"); - boolean restEnabled = repositoryModule.isMyCoursesSearchEnabled(); - String[] values = new String[] { translate("my.course.search.on") }; - enabled = uifactory.addCheckboxesHorizontal("my.course.search.enabled", formLayout, keys, values); - enabled.addActionListener(FormEvent.ONCLICK); - enabled.select(keys[0], restEnabled); + boolean searchEnabled = repositoryModule.isMyCoursesSearchEnabled(); + String[] values = new String[] { translate("on") }; + myCourseSearchEl = uifactory.addCheckboxesHorizontal("my.course.search.enabled", formLayout, keys, values); + myCourseSearchEl.addActionListener(FormEvent.ONCLICK); + myCourseSearchEl.select(keys[0], searchEnabled); + + boolean commentEnabled = repositoryModule.isCommentEnabled(); + commentEl = uifactory.addCheckboxesHorizontal("my.course.comment.enabled", formLayout, keys, values); + commentEl.addActionListener(FormEvent.ONCLICK); + commentEl.select(keys[0], commentEnabled); + + boolean ratingEnabled = repositoryModule.isCommentEnabled(); + ratingEl = uifactory.addCheckboxesHorizontal("my.course.rating.enabled", formLayout, keys, values); + ratingEl.addActionListener(FormEvent.ONCLICK); + ratingEl.select(keys[0], ratingEnabled); } @Override @@ -71,10 +81,18 @@ public class RepositoryAdminController extends FormBasicController { @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { - if(enabled == source) { - boolean on = !enabled.getSelectedKeys().isEmpty(); + if(myCourseSearchEl == source) { + boolean on = !myCourseSearchEl.getSelectedKeys().isEmpty(); repositoryModule.setMyCoursesSearchEnabled(on); getWindowControl().setInfo("saved"); + } else if(commentEl == source) { + boolean on = !commentEl.getSelectedKeys().isEmpty(); + repositoryModule.setCommentEnabled(on); + getWindowControl().setInfo("saved"); + } else if(ratingEl == source) { + boolean on = !ratingEl.getSelectedKeys().isEmpty(); + repositoryModule.setRatingEnabled(on); + getWindowControl().setInfo("saved"); } } diff --git a/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java b/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java index 3f8b0e5053e922ac118b0db9715517913a1dc5c7..29c46614a0a031d1dde2f1a3dfff06da7f1924b7 100644 --- a/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java +++ b/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java @@ -249,28 +249,32 @@ public class RepositoryEntryDetailsController extends FormBasicController { markLink.setIconLeftCSS(marked ? Mark.MARK_CSS_LARGE : Mark.MARK_ADD_CSS_LARGE); } - Integer myRating; - if(row == null) { - myRating = userRatingsDao.getRatingValue(getIdentity(), entry, null); - } else { - myRating = row.getMyRating(); - } - RepositoryEntryStatistics statistics = entry.getStatistics(); - Double averageRating = statistics.getRating(); - long numOfRatings = statistics.getNumOfRatings(); - float ratingValue = myRating == null ? 0f : myRating.floatValue(); - float averageRatingValue = averageRating == null ? 0f : averageRating.floatValue(); - ratingEl = new RatingWithAverageFormItem("rating", ratingValue, averageRatingValue, 5, numOfRatings); - ratingEl.setEnabled(!guestOnly); - layoutCont.add("rating", ratingEl); + if(repositoryModule.isRatingEnabled()) { + Integer myRating; + if(row == null) { + myRating = userRatingsDao.getRatingValue(getIdentity(), entry, null); + } else { + myRating = row.getMyRating(); + } + + Double averageRating = statistics.getRating(); + long numOfRatings = statistics.getNumOfRatings(); + float ratingValue = myRating == null ? 0f : myRating.floatValue(); + float averageRatingValue = averageRating == null ? 0f : averageRating.floatValue(); + ratingEl = new RatingWithAverageFormItem("rating", ratingValue, averageRatingValue, 5, numOfRatings); + ratingEl.setEnabled(!guestOnly); + layoutCont.add("rating", ratingEl); + } - long numOfComments = statistics.getNumOfComments(); - String title = "(" + numOfComments + ")"; - commentsLink = uifactory.addFormLink("comments", "comments", title, null, layoutCont, Link.NONTRANSLATED); - commentsLink.setCustomEnabledLinkCSS("o_comments"); - String css = numOfComments > 0 ? "o_icon o_icon_comments o_icon-lg" : "o_icon o_icon_comments_none o_icon-lg"; - commentsLink.setIconLeftCSS(css); + if(repositoryModule.isCommentEnabled()) { + long numOfComments = statistics.getNumOfComments(); + String title = "(" + numOfComments + ")"; + commentsLink = uifactory.addFormLink("comments", "comments", title, null, layoutCont, Link.NONTRANSLATED); + commentsLink.setCustomEnabledLinkCSS("o_comments"); + String css = numOfComments > 0 ? "o_icon o_icon_comments o_icon-lg" : "o_icon o_icon_comments_none o_icon-lg"; + commentsLink.setIconLeftCSS(css); + } //load memberships boolean isMember = repositoryService.isMember(getIdentity(), entry); @@ -317,11 +321,13 @@ public class RepositoryEntryDetailsController extends FormBasicController { startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON + Link.NONTRANSLATED); startLink.setCustomEnabledLinkCSS("btn btn-success"); // custom style startLink.setElementCssClass("o_book btn-block"); + startLink.setVisible(!guestOnly); } else { String linkText = translate("start.with.type", translate(entry.getOlatResource().getResourceableTypeName())); startLink = uifactory.addFormLink("start", "start", linkText, null, layoutCont, Link.BUTTON + Link.NONTRANSLATED); startLink.setEnabled(false); startLink.setElementCssClass("o_start btn-block"); + startLink.setVisible(!guestOnly); } startLink.setIconRightCSS("o_icon o_icon_start o_icon-lg"); startLink.setPrimary(true); 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 e7ea25deb35cba4203d6ecaeeff3c6d10aac16f8..577674b156c2a8796d5fa7d756b517ab2cd18937 100644 --- a/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java +++ b/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java @@ -52,6 +52,7 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTable import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.rating.RatingFormEvent; +import org.olat.core.gui.components.rating.RatingFormItem; import org.olat.core.gui.components.rating.RatingWithAverageFormItem; import org.olat.core.gui.components.stack.BreadcrumbPanel; import org.olat.core.gui.components.velocity.VelocityContainer; @@ -69,6 +70,7 @@ import org.olat.core.util.Util; import org.olat.core.util.resource.OresHelper; import org.olat.course.CorruptedCourseException; import org.olat.repository.RepositoryManager; +import org.olat.repository.RepositoryModule; import org.olat.repository.model.SearchMyRepositoryEntryViewParams; import org.olat.repository.model.SearchMyRepositoryEntryViewParams.Filter; import org.olat.repository.model.SearchMyRepositoryEntryViewParams.OrderBy; @@ -108,6 +110,8 @@ public class RepositoryEntryListController extends FormBasicController private UserRatingsDAO userRatingsDao; @Autowired private MapperService mapperService; + @Autowired + private RepositoryModule repositoryModule; private final boolean guestOnly; @@ -162,9 +166,13 @@ 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(), + if(repositoryModule.isRatingEnabled()) { + columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.ratings.i18nKey(), Cols.ratings.ordinal(), true, OrderBy.rating.name())); - columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.comments.i18nKey(), Cols.comments.ordinal())); + } + if(repositoryModule.isCommentEnabled()) { + 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); @@ -503,6 +511,9 @@ public class RepositoryEntryListController extends FormBasicController if(!row.isMembersOnly() && row.getAccessTypes() != null && !row.getAccessTypes().isEmpty() && !row.isMember()) { label = "book"; isStart = false; + if(guestOnly) { + return; + } } else { label = "start"; } @@ -528,29 +539,42 @@ public class RepositoryEntryListController extends FormBasicController @Override public void forgeRatings(RepositoryEntryRow row) { - Integer myRating = row.getMyRating(); - Double averageRating = row.getAverageRating(); - long numOfRatings = row.getNumOfRatings(); - - float ratingValue = myRating == null ? 0f : myRating.floatValue(); - float averageRatingValue = averageRating == null ? 0f : averageRating.floatValue(); - RatingWithAverageFormItem ratingCmp - = new RatingWithAverageFormItem("rat_" + row.getKey(), ratingValue, averageRatingValue, 5, numOfRatings); - ratingCmp.setEnabled(!guestOnly); - row.setRatingFormItem(ratingCmp); - ratingCmp.setUserObject(row); + if(repositoryModule.isRatingEnabled()) { + if(guestOnly) { + Double averageRating = row.getAverageRating(); + float averageRatingValue = averageRating == null ? 0f : averageRating.floatValue(); + + RatingFormItem ratingCmp + = new RatingFormItem("rat_" + row.getKey(), averageRatingValue, 5, false); + row.setRatingFormItem(ratingCmp); + ratingCmp.setUserObject(row); + } else { + Integer myRating = row.getMyRating(); + Double averageRating = row.getAverageRating(); + long numOfRatings = row.getNumOfRatings(); + + float ratingValue = myRating == null ? 0f : myRating.floatValue(); + float averageRatingValue = averageRating == null ? 0f : averageRating.floatValue(); + RatingWithAverageFormItem ratingCmp + = new RatingWithAverageFormItem("rat_" + row.getKey(), ratingValue, averageRatingValue, 5, numOfRatings); + row.setRatingFormItem(ratingCmp); + ratingCmp.setUserObject(row); + } + } } @Override public void forgeComments(RepositoryEntryRow row) { - long numOfComments = row.getNumOfComments(); - String title = "(" + numOfComments + ")"; - FormLink commentsLink = uifactory.addFormLink("comments_" + row.getKey(), "comments", title, null, null, Link.NONTRANSLATED); - commentsLink.setUserObject(row); - String css = numOfComments > 0 ? "o_icon o_icon_comments o_icon-lg" : "o_icon o_icon_comments_none o_icon-lg"; - commentsLink.setCustomEnabledLinkCSS("o_comments"); - commentsLink.setIconLeftCSS(css); - row.setCommentsLink(commentsLink); + if(repositoryModule.isCommentEnabled()) { + long numOfComments = row.getNumOfComments(); + String title = "(" + numOfComments + ")"; + FormLink commentsLink = uifactory.addFormLink("comments_" + row.getKey(), "comments", title, null, null, Link.NONTRANSLATED); + commentsLink.setUserObject(row); + String css = numOfComments > 0 ? "o_icon o_icon_comments o_icon-lg" : "o_icon o_icon_comments_none o_icon-lg"; + commentsLink.setCustomEnabledLinkCSS("o_comments"); + commentsLink.setIconLeftCSS(css); + row.setCommentsLink(commentsLink); + } } @Override diff --git a/src/main/java/org/olat/repository/ui/list/RepositoryEntryRow.java b/src/main/java/org/olat/repository/ui/list/RepositoryEntryRow.java index 3d3635e40111056e400d52942913141c3f4d6fd5..fca058d950354cdb3a8e3f168fba72359ac05f2a 100644 --- a/src/main/java/org/olat/repository/ui/list/RepositoryEntryRow.java +++ b/src/main/java/org/olat/repository/ui/list/RepositoryEntryRow.java @@ -22,8 +22,8 @@ package org.olat.repository.ui.list; import java.util.Date; import java.util.List; +import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.elements.FormLink; -import org.olat.core.gui.components.rating.RatingWithAverageFormItem; import org.olat.core.id.OLATResourceable; import org.olat.core.util.StringHelper; import org.olat.core.util.filter.FilterFactory; @@ -78,7 +78,7 @@ public class RepositoryEntryRow implements RepositoryEntryRef { private FormLink commentsLink; private OLATResourceable olatResource; - private RatingWithAverageFormItem ratingFormItem; + private FormItem ratingFormItem; public RepositoryEntryRow() { // @@ -297,7 +297,7 @@ public class RepositoryEntryRow implements RepositoryEntryRef { } public String getStartLinkName() { - return startLink.getComponent().getComponentName(); + return startLink == null ? null :startLink.getComponent().getComponentName(); } public FormLink getStartLink() { @@ -336,14 +336,14 @@ public class RepositoryEntryRow implements RepositoryEntryRef { } public String getRatingFormItemName() { - return ratingFormItem.getComponent().getComponentName(); + return ratingFormItem == null ? null : ratingFormItem.getComponent().getComponentName(); } - public RatingWithAverageFormItem getRatingFormItem() { + public FormItem getRatingFormItem() { return ratingFormItem; } - public void setRatingFormItem(RatingWithAverageFormItem ratingFormItem) { + public void setRatingFormItem(FormItem ratingFormItem) { this.ratingFormItem = ratingFormItem; } @@ -352,7 +352,7 @@ public class RepositoryEntryRow implements RepositoryEntryRef { } public String getCommentsLinkName() { - return commentsLink.getComponent().getComponentName(); + return commentsLink == null ? null : commentsLink.getComponent().getComponentName(); } public void setCommentsLink(FormLink commentsLink) { diff --git a/src/main/java/org/olat/repository/ui/list/_content/details.html b/src/main/java/org/olat/repository/ui/list/_content/details.html index 54e1258e74a5ad7df14ae71d24e6b1d79da460af..c7c32dcfc1dcd7702c468d084ed50cf2c90331d8 100644 --- a/src/main/java/org/olat/repository/ui/list/_content/details.html +++ b/src/main/java/org/olat/repository/ui/list/_content/details.html @@ -46,11 +46,14 @@ #end </div> + #if($r.available("rating") || $r.available("comments")) <div class="o_social o_block"> <h4>$r.translate("ratings")</h4> #if($r.available("rating")) $r.render("rating") #end - $r.render("comments") + #if($r.available("comments")) $r.render("comments") #end </div> + #end + #if($v.authors) <div class="o_authors o_block"> <h4>$r.translate("cif.authors")</h4> diff --git a/src/main/java/org/olat/repository/ui/list/_content/row_1.html b/src/main/java/org/olat/repository/ui/list/_content/row_1.html index d3a3c1251c48f99b60541eb98d7704756cb38622..ce84c9954fff814e3ff57bbe3fcc7726cf33f5a8 100644 --- a/src/main/java/org/olat/repository/ui/list/_content/row_1.html +++ b/src/main/java/org/olat/repository/ui/list/_content/row_1.html @@ -83,15 +83,23 @@ </div> #end + #if($row.ratingFormItemName || $row.commentsLinkName) <div class="o_social o_ratings_and_comments row"> + #if($row.ratingFormItemName) <div class="o_rating_wrapper"> $r.render($row.ratingFormItemName) </div> - $r.render($row.commentsLinkName) + #end + #if($row.commentsLinkName) + $r.render($row.commentsLinkName) + #end </div> + #end $r.render($row.getDetailsLinkName()) - $r.render($row.getStartLinkName()) + #if($row.getStartLinkName()) + $r.render($row.getStartLinkName()) + #end </div> <script type="text/javascript">