From dcd1c8964c4a021191ec57b8817ce7af644f9515 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 31 Jul 2017 10:05:49 +0200
Subject: [PATCH] OO-2935: remove unused link top for the full text search
 results, fix NPE if the context entry is null (it's the case if the user
 search for the name of the course element)

---
 .../course/DialogCourseNodeIndexer.java           | 15 ++++++++++-----
 .../repository/course/FOCourseNodeIndexer.java    |  2 +-
 .../org/olat/search/ui/ResultsController.java     | 12 ++++--------
 3 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/src/main/java/org/olat/search/service/indexer/repository/course/DialogCourseNodeIndexer.java b/src/main/java/org/olat/search/service/indexer/repository/course/DialogCourseNodeIndexer.java
index 21fcae12146..880100a0c98 100644
--- a/src/main/java/org/olat/search/service/indexer/repository/course/DialogCourseNodeIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/repository/course/DialogCourseNodeIndexer.java
@@ -158,12 +158,16 @@ public class DialogCourseNodeIndexer extends DefaultIndexer implements CourseNod
 	@Override
 	public boolean checkAccess(ContextEntry contextEntry, BusinessControl businessControl, Identity identity, Roles roles)  {
 		ContextEntry ce = businessControl.popLauncherContextEntry();
+		if(ce == null || ce.getOLATResourceable() == null || ce.getOLATResourceable().getResourceableId() == null) {
+			return true;// it's the node itself
+		}
+		
 		OLATResourceable ores = ce.getOLATResourceable();
 		if(isLogDebugEnabled()) logDebug("OLATResourceable=" + ores);
-		if ( (ores != null) && (ores.getResourceableTypeName().startsWith("path=")) ) {
+		if (ores.getResourceableTypeName().startsWith("path=")) {
 			// => it is a file element, typeName format: 'path=/test1/test2/readme.txt'
 			return true;
-		} else if ((ores != null) && ores.getResourceableTypeName().equals( OresHelper.calculateTypeName(Message.class) ) ) {
+		} else if (ores.getResourceableTypeName().equals(OresHelper.calculateTypeName(Message.class))) {
 			// it is message => check message access
 			Long resourceableId = ores.getResourceableId();
 			Message message = ForumManager.getInstance().loadMessage(resourceableId);
@@ -174,9 +178,10 @@ public class DialogCourseNodeIndexer extends DefaultIndexer implements CourseNod
 			boolean isMessageHidden = Status.getStatus(threadtop.getStatusCode()).isHidden(); 
 			//assumes that if is owner then is moderator so it is allowed to see the hidden forum threads		
 			//TODO: (LD) fix this!!! - the contextEntry is not the right context for this check
-			boolean isOwner = BaseSecurityManager.getInstance().isIdentityPermittedOnResourceable(identity, Constants.PERMISSION_ACCESS,  contextEntry.getOLATResourceable());
-			if(isMessageHidden && !isOwner) {
-				return false;
+			if(isMessageHidden) {
+				boolean isOwner = BaseSecurityManager.getInstance()
+						.isIdentityPermittedOnResourceable(identity, Constants.PERMISSION_ACCESS,  contextEntry.getOLATResourceable());
+				return isOwner;
 			}		
 			return true;
 		} else {
diff --git a/src/main/java/org/olat/search/service/indexer/repository/course/FOCourseNodeIndexer.java b/src/main/java/org/olat/search/service/indexer/repository/course/FOCourseNodeIndexer.java
index 8ff69fc8bc3..f5829c97828 100644
--- a/src/main/java/org/olat/search/service/indexer/repository/course/FOCourseNodeIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/repository/course/FOCourseNodeIndexer.java
@@ -86,7 +86,7 @@ public class FOCourseNodeIndexer extends ForumIndexer implements CourseNodeIndex
 	public boolean checkAccess(ContextEntry contextEntry, BusinessControl businessControl, Identity identity, Roles roles) {
 		ContextEntry ce = businessControl.popLauncherContextEntry();
 		if(ce == null || ce.getOLATResourceable() == null || ce.getOLATResourceable().getResourceableId() == null) {
-			return false;
+			return true;//it's the node itself
 		}
 		
 		Long resourceableId = ce.getOLATResourceable().getResourceableId();
diff --git a/src/main/java/org/olat/search/ui/ResultsController.java b/src/main/java/org/olat/search/ui/ResultsController.java
index 31e05d3976d..2311601ccbf 100644
--- a/src/main/java/org/olat/search/ui/ResultsController.java
+++ b/src/main/java/org/olat/search/ui/ResultsController.java
@@ -52,7 +52,7 @@ import org.olat.search.model.ResultDocument;
  * @author srosse, stephane.rosse@frentix.com
  */
 public class ResultsController extends FormBasicController {
-	private FormLink previousTopLink, nextTopLink, previousLink, nextLink; 
+	private FormLink previousLink, nextLink; 
 	private FormLink highlightLink, dishighlightLink;
 	
 	private int currentPage;
@@ -77,10 +77,8 @@ public class ResultsController extends FormBasicController {
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		previousLink = uifactory.addFormLink("previous.page", formLayout);
-		previousTopLink = uifactory.addFormLink("previous.top.page", null, "previous.page", formLayout, Link.LINK);
 		nextLink = uifactory.addFormLink("next.page", formLayout);
-		nextTopLink = uifactory.addFormLink("next.top.page", null, "next.page", formLayout, Link.LINK);
-
+		
 		highlightLink = uifactory.addFormLink("highlight.page", "enable.highlighting", "enable.highlighting", formLayout, Link.LINK);
 		dishighlightLink = uifactory.addFormLink("dishighlight.page", "disable.highlighting", "disable.highlighting", formLayout, Link.LINK);
 		flc.contextPut("highlight", true);
@@ -158,9 +156,7 @@ public class ResultsController extends FormBasicController {
 		flc.contextPut("currentPage", currentPage + 1);
 		
 		previousLink.setEnabled(currentPage != 0);
-		previousTopLink.setEnabled(currentPage != 0);
 		nextLink.setEnabled(currentPage != getMaxPage());
-		nextTopLink.setEnabled(currentPage != getMaxPage());
 		
 		String [] args = {Integer.toString(getStartResult()), Integer.toString(getEndResult()), Integer.toString(getNumOfResults())};
 		flc.contextPut("resultTitle", getTranslator().translate("search.result.title",args));
@@ -186,9 +182,9 @@ public class ResultsController extends FormBasicController {
 			highlight = false;
 			flc.contextPut("highlight", highlight);
 			reload(ureq);
-		} else if (source == previousLink || source == previousTopLink) {
+		} else if (source == previousLink) {
 			setSearchResults(ureq, Math.max(0, --currentPage));
-		} else if (source == nextLink || source == nextTopLink) {
+		} else if (source == nextLink) {
 			if(documents.size() <= (currentPage + 1) * RESULT_PER_PAGE) {
 				SearchEvent e = new SearchEvent(getLastLucenePosition() + 1, RESULT_PER_PAGE);
 				fireEvent(ureq, e);
-- 
GitLab