diff --git a/src/main/java/org/olat/course/nodes/feed/FeedNodeSecurityCallback.java b/src/main/java/org/olat/course/nodes/feed/FeedNodeSecurityCallback.java index 7f8fbc9cbee4df1fe2f0120e6778c82ac4482092..f064daf1ec71d0d46271553e44e8fe216b92f236 100644 --- a/src/main/java/org/olat/course/nodes/feed/FeedNodeSecurityCallback.java +++ b/src/main/java/org/olat/course/nodes/feed/FeedNodeSecurityCallback.java @@ -48,6 +48,7 @@ public class FeedNodeSecurityCallback implements FeedSecurityCallback { /** * @see org.olat.modules.webFeed.FeedSecurityCallback#mayEditMetadata() */ + @Override public boolean mayEditMetadata() { if (isGuestOnly) return false; return ne.isCapabilityAccessible("moderator") || isOlatAdmin; @@ -56,6 +57,7 @@ public class FeedNodeSecurityCallback implements FeedSecurityCallback { /** * @see org.olat.modules.webFeed.FeedSecurityCallback#mayCreateItems() */ + @Override public boolean mayCreateItems() { if (isGuestOnly) return false; return ne.isCapabilityAccessible("poster") || ne.isCapabilityAccessible("moderator") || isOlatAdmin; @@ -64,6 +66,7 @@ public class FeedNodeSecurityCallback implements FeedSecurityCallback { /** * @see org.olat.modules.webFeed.FeedSecurityCallback#mayDeleteItems() */ + @Override public boolean mayDeleteItems() { if (isGuestOnly) return false; return ne.isCapabilityAccessible("moderator") || isOlatAdmin; @@ -72,6 +75,7 @@ public class FeedNodeSecurityCallback implements FeedSecurityCallback { /** * @see org.olat.modules.webFeed.FeedSecurityCallback#mayEditItems() */ + @Override public boolean mayEditItems() { if (isGuestOnly) return false; return ne.isCapabilityAccessible("moderator") || isOlatAdmin; @@ -81,7 +85,6 @@ public class FeedNodeSecurityCallback implements FeedSecurityCallback { * @see org.olat.modules.webFeed.FeedSecurityCallback#mayViewAllDrafts() */ @Override - //fxdiff BAKS-18 public boolean mayViewAllDrafts() { return isOwner || isOlatAdmin; } diff --git a/src/main/java/org/olat/modules/dialog/DialogElementsController.java b/src/main/java/org/olat/modules/dialog/DialogElementsController.java index 98e9d039fd32448ccf50e30de739aa0a163cd27d..098a06eceb4588312195f5d4e0e7fb4e311f6a4c 100644 --- a/src/main/java/org/olat/modules/dialog/DialogElementsController.java +++ b/src/main/java/org/olat/modules/dialog/DialogElementsController.java @@ -222,7 +222,7 @@ public class DialogElementsController extends BasicController { TableEvent te = (TableEvent) event; String command = te.getActionId(); int row = te.getRowId(); - entry = tableModel.getEntryAt(row); + entry = tableModel.getEntryAt(tableCtr.getSortedRow(row)); if (command.equals(ACTION_START_FORUM)) { selectedElement = dialogElmsMgr.findDialogElement(coursePropMgr, courseNode, entry.getForumKey()); if(selectedElement == null){ diff --git a/src/main/java/org/olat/modules/webFeed/FeedPreviewSecurityCallback.java b/src/main/java/org/olat/modules/webFeed/FeedPreviewSecurityCallback.java index d70092b0eab42eb6acf428fc14b28f116e13fd14..088c2d14e7b7a381893331ccf7e069b8199c1c2c 100644 --- a/src/main/java/org/olat/modules/webFeed/FeedPreviewSecurityCallback.java +++ b/src/main/java/org/olat/modules/webFeed/FeedPreviewSecurityCallback.java @@ -60,7 +60,6 @@ public class FeedPreviewSecurityCallback implements FeedSecurityCallback { /** * @see org.olat.modules.webFeed.FeedSecurityCallback#mayViewAllDrafts() */ - //fxdiff BAKS-18 @Override public boolean mayViewAllDrafts() { return false; diff --git a/src/main/java/org/olat/modules/webFeed/FeedResourceSecurityCallback.java b/src/main/java/org/olat/modules/webFeed/FeedResourceSecurityCallback.java index 4e19ba8999322c2dd3bed6f5070018c0b34e2444..22e935f953bae97546cce76bb28d06b8663b7a02 100644 --- a/src/main/java/org/olat/modules/webFeed/FeedResourceSecurityCallback.java +++ b/src/main/java/org/olat/modules/webFeed/FeedResourceSecurityCallback.java @@ -67,7 +67,6 @@ public class FeedResourceSecurityCallback implements FeedSecurityCallback { /** * @see org.olat.modules.webFeed.FeedSecurityCallback#mayViewAllDrafts() */ - //fxdiff BAKS-18 @Override public boolean mayViewAllDrafts() { return isAdmin || isOwner; diff --git a/src/main/java/org/olat/modules/webFeed/RSSFeed.java b/src/main/java/org/olat/modules/webFeed/RSSFeed.java index 9b62d55e0e2ed22a221836fbeda4bb45bb7506f0..51f1a38ccd6e8c241f35ff6fff91f58cc1b161a0 100644 --- a/src/main/java/org/olat/modules/webFeed/RSSFeed.java +++ b/src/main/java/org/olat/modules/webFeed/RSSFeed.java @@ -49,6 +49,8 @@ import com.sun.syndication.feed.synd.SyndImageImpl; */ public class RSSFeed extends SyndFeedImpl { + private static final long serialVersionUID = 4010701266801565756L; + /** * Constructor. The identityKey is needed to generate personal URLs for the * corresponding user. diff --git a/src/main/java/org/olat/modules/webFeed/ui/ItemController.java b/src/main/java/org/olat/modules/webFeed/ui/ItemController.java index 38b2c1baa56cc98d42d96e032fa9b7d599ecde44..3578b30f235ccdf12be800adc0a1f8cda70271ab 100644 --- a/src/main/java/org/olat/modules/webFeed/ui/ItemController.java +++ b/src/main/java/org/olat/modules/webFeed/ui/ItemController.java @@ -73,9 +73,15 @@ public class ItemController extends BasicController implements Activateable2 { vcItem.contextPut("helper", helper); vcItem.contextPut("callback", callback); if (feed.isInternal()) { - if (editButton != null) vcItem.put("editButton", editButton); - if (deleteButton != null) vcItem.put("deleteButton", deleteButton); - if (artefactLink != null) vcItem.put("artefactLink", artefactLink.getInitialComponent()); + if (editButton != null) { + vcItem.put("editButton", editButton); + } + if (deleteButton != null) { + vcItem.put("deleteButton", deleteButton); + } + if (artefactLink != null) { + vcItem.put("artefactLink", artefactLink.getInitialComponent()); + } } backLink = LinkFactory.createLinkBack(vcItem, this); // Add date component @@ -91,7 +97,7 @@ public class ItemController extends BasicController implements Activateable2 { vcItem.put("commentsAndRating", commentsCtr.getInitialComponent()); } // - this.putInitialPanel(vcItem); + putInitialPanel(vcItem); // do logging ThreadLocalUserActivityLogger.log(FeedLoggingAction.FEED_ITEM_READ, getClass(), LoggingResourceable.wrap(item)); } @@ -99,6 +105,7 @@ public class ItemController extends BasicController implements Activateable2 { /** * @see org.olat.core.gui.control.DefaultController#doDispose() */ + @Override protected void doDispose() { // nothing to do } @@ -127,5 +134,4 @@ public class ItemController extends BasicController implements Activateable2 { } } } - -} +} \ No newline at end of file diff --git a/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java b/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java index c25701fb2571455ed9b2133c805bd8ad7b07bf82..7ce99ded690ebf0e0cddcb3f691185a6a9a2e417 100644 --- a/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java +++ b/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java @@ -169,9 +169,9 @@ public class ItemsController extends BasicController implements Activateable2 { startpageLink = LinkFactory.createLink("feed.startpage", vcItems, this); startpageLink.setCustomEnabledLinkCSS("o_first_page"); - if (callback.mayEditItems() || callback.mayCreateItems()) { - createEditButtons(ureq, feed); - } + + createEditButtons(ureq, feed); + // Add item details page link createItemLinks(feed); // Add item user comments link and rating @@ -218,9 +218,9 @@ public class ItemsController extends BasicController implements Activateable2 { private void createEditButtons(UserRequest ureq, Feed feed) { List<Item> items = feed.getCopiedListOfItems(); - editButtons = new ArrayList<Link>(); - deleteButtons = new ArrayList<Link>(); - artefactLinks = new HashMap<Item,Controller>(); + editButtons = new ArrayList<>(); + deleteButtons = new ArrayList<>(); + artefactLinks = new HashMap<>(); if (feed.isInternal()) { addItemButton = LinkFactory.createButtonSmall("feed.add.item", vcItems, this); addItemButton.setElementCssClass("o_sel_feed_item_new"); @@ -332,20 +332,32 @@ public class ItemsController extends BasicController implements Activateable2 { * the items velocity container's context. */ public void makeInternalAndExternalButtons() { - makeInternalButton = LinkFactory.createButton("feed.make.internal", vcItems, this); - makeExternalButton = LinkFactory.createButton("feed.make.external", vcItems, this); + if (callback.mayEditItems() || callback.mayCreateItems()) { + makeInternalButton = LinkFactory.createButton("feed.make.internal", vcItems, this); + makeExternalButton = LinkFactory.createButton("feed.make.external", vcItems, this); + } } /** * @param item */ private void createButtonsForItem(UserRequest ureq, Item item) { + boolean author = getIdentity().getKey().equals(item.getAuthorKey()); + boolean edit = callback.mayEditItems() || author; + boolean delete = callback.mayDeleteItems() || author; + String guid = item.getGuid(); - Link editButton = LinkFactory.createCustomLink("feed.edit.item." + guid, "feed.edit.item." + guid, "feed.edit.item", - Link.BUTTON_SMALL, vcItems, this); + String editId = "feed.edit.item.".concat(guid); + Link editButton = LinkFactory.createCustomLink(editId, editId, "feed.edit.item", Link.BUTTON_SMALL, vcItems, this); editButton.setElementCssClass("o_sel_feed_item_edit"); - Link deleteButton = LinkFactory.createCustomLink("delete." + guid, "delete." + guid, "delete", Link.BUTTON_SMALL, vcItems, this); + editButton.setEnabled(edit); + editButton.setVisible(edit); + + String deleteId = "delete.".concat(guid); + Link deleteButton = LinkFactory.createCustomLink(deleteId, deleteId, "delete", Link.BUTTON_SMALL, vcItems, this); deleteButton.setElementCssClass("o_sel_feed_item_delete"); + deleteButton.setEnabled(delete); + deleteButton.setVisible(delete); if(feedResource.isInternal() && getIdentity().getKey() != null && getIdentity().getKey().equals(item.getAuthorKey())) { String businessPath = BusinessControlFactory.getInstance().getAsString(getWindowControl().getBusinessControl()); @@ -353,7 +365,7 @@ public class ItemsController extends BasicController implements Activateable2 { Controller artefactCtrl = EPUIFactory.createArtefactCollectWizzardController(ureq, getWindowControl(), feedResource, businessPath); if(artefactCtrl != null) { artefactLinks.put(item, artefactCtrl); - vcItems.put("feed.artefact.item." + guid, artefactCtrl.getInitialComponent()); + vcItems.put("feed.artefact.item.".concat(guid), artefactCtrl.getInitialComponent()); } } @@ -477,25 +489,19 @@ public class ItemsController extends BasicController implements Activateable2 { } else if (source == olderItemsLink) { helper.olderItems(); - if (callback.mayEditItems() || callback.mayCreateItems()) { - createEditButtons(ureq, feed); - } + createEditButtons(ureq, feed); createCommentsAndRatingsLinks(ureq, feed); vcItems.setDirty(true); } else if (source == newerItemsLink) { helper.newerItems(); - if (callback.mayEditItems() || callback.mayCreateItems()) { - createEditButtons(ureq, feed); - } + createEditButtons(ureq, feed); createCommentsAndRatingsLinks(ureq, feed); vcItems.setDirty(true); } else if (source == startpageLink) { helper.startpage(); - if (callback.mayEditItems() || callback.mayCreateItems()) { - createEditButtons(ureq, feed); - } + createEditButtons(ureq, feed); createCommentsAndRatingsLinks(ureq, feed); vcItems.setDirty(true); diff --git a/src/main/java/org/olat/modules/webFeed/ui/blog/_content/post.html b/src/main/java/org/olat/modules/webFeed/ui/blog/_content/post.html index 95e565a16bd9fabfbd493e6fbd9077ba5e880a8e..8fcaa01173e5804d28111577d0fd4d6b20b492d6 100644 --- a/src/main/java/org/olat/modules/webFeed/ui/blog/_content/post.html +++ b/src/main/java/org/olat/modules/webFeed/ui/blog/_content/post.html @@ -35,18 +35,16 @@ #end </div> - #if (( $callback.mayEditItems() || ($callback.mayCreateItems() && $item.isDraft())) && $feed.isInternal()) - #if ($r.available("editButton")) + #if(($r.available("editButton") && $r.visible("editButton")) || ($r.available("deleteButton") && $r.visible("deleteButton"))) <div class="o_button_group"> - ## special case: this item has been added by another user and thus we - ## don't yet have links for this item. But we can still display the content - $r.render("editButton") - #if ($callback.mayDeleteItems() || ($callback.mayCreateItems() && $item.isDraft())) + #if ($r.available("editButton") && $r.visible("editButton")) + $r.render("editButton") + #end + #if ($r.available("deleteButton") && $r.visible("deleteButton")) $r.render("deleteButton") #end </div> - #end - #end + #end </div> <div class="o_block_footer"> diff --git a/src/main/java/org/olat/modules/webFeed/ui/blog/_content/posts.html b/src/main/java/org/olat/modules/webFeed/ui/blog/_content/posts.html index c3972bae7977313eaa5993646e5c8c35fc2b52cb..d52aa4e5bbf5106d90b11e71d5027cdd31a9bb7d 100644 --- a/src/main/java/org/olat/modules/webFeed/ui/blog/_content/posts.html +++ b/src/main/java/org/olat/modules/webFeed/ui/blog/_content/posts.html @@ -79,15 +79,13 @@ </div> </div> - #if (( $callback.mayEditItems() || ($callback.mayCreateItems() && $post.isDraft())) && $feed.isInternal()) + #if($feed.isInternal()) <div class="o_button_group"> - #if ($r.available("feed.edit.item.$post.getGuid()")) - ## special case: this item has been added by another user and thus we - ## don't yet have links for this item. But we can still display the content + #if ($r.available("feed.edit.item.$post.getGuid()") && $r.visible("feed.edit.item.$post.getGuid()")) $r.render("feed.edit.item.$post.getGuid()") - #if ($callback.mayDeleteItems() || ($callback.mayCreateItems() && $post.isDraft())) - $r.render("delete.$post.getGuid()") - #end + #end + #if ($r.available("delete.$post.getGuid()") && $r.visible("delete.$post.getGuid()")) + $r.render("delete.$post.getGuid()") #end </div> #end diff --git a/src/main/java/org/olat/modules/wiki/gui/components/wikiToHtml/WikiMarkupRenderer.java b/src/main/java/org/olat/modules/wiki/gui/components/wikiToHtml/WikiMarkupRenderer.java index 85d1d0cee066ed9774691f03584e75ed59912d6e..2db789b8f2d47a58bc35ea8661a31a1a7099407e 100644 --- a/src/main/java/org/olat/modules/wiki/gui/components/wikiToHtml/WikiMarkupRenderer.java +++ b/src/main/java/org/olat/modules/wiki/gui/components/wikiToHtml/WikiMarkupRenderer.java @@ -93,7 +93,7 @@ public class WikiMarkupRenderer extends DefaultComponentRenderer { uri = URLDecoder.decode(uri, "utf-8"); input.setVirtualWiki(uri.substring(1, uri.length()-1)); if (iframePostEnabled) { - String targetUrl = " onclick='o_XHREvent(jQuery(this).attr(\"href\"),false,true); return false;'"; + String targetUrl = " onclick=\"o_XHREvent(jQuery(this).attr('href'),false,true); return false;\""; input.setURLTarget(targetUrl); } sb.append("<div style=\"min-height:"+ wikiComp.getMinHeight() +"px\" id=\""); diff --git a/src/main/java/org/olat/search/EmptySearchResults.java b/src/main/java/org/olat/search/EmptySearchResults.java index c67bf7ad5647b2a677b004c1171c61e94c1572a6..b3ddce3f06ad8345a2562ec4ab809cde16ee9896 100644 --- a/src/main/java/org/olat/search/EmptySearchResults.java +++ b/src/main/java/org/olat/search/EmptySearchResults.java @@ -47,8 +47,8 @@ public class EmptySearchResults implements SearchResults { } @Override - public String getLength() { - return "0"; + public int size() { + return 0; } @Override diff --git a/src/main/java/org/olat/search/SearchResults.java b/src/main/java/org/olat/search/SearchResults.java index 5d4d1a18a9c33108397a7fd91d478eafeb03284d..9b6e37ebad4a69e9d56e59069f5a02e4d2fbb59f 100644 --- a/src/main/java/org/olat/search/SearchResults.java +++ b/src/main/java/org/olat/search/SearchResults.java @@ -36,7 +36,7 @@ import org.olat.search.model.ResultDocument; public interface SearchResults extends Serializable { public static final EmptySearchResults EMPTY_SEARCH_RESULTS = new EmptySearchResults(); - public String getLength(); + public int size(); public List<ResultDocument> getList(); diff --git a/src/main/java/org/olat/search/service/searcher/JmsSearchProvider.java b/src/main/java/org/olat/search/service/searcher/JmsSearchProvider.java index b22c4d7d27fc579bfc5419a7a96f90915a863457..926b9de6c6d3e8ee5fedb2f79547f2832eb59bb2 100644 --- a/src/main/java/org/olat/search/service/searcher/JmsSearchProvider.java +++ b/src/main/java/org/olat/search/service/searcher/JmsSearchProvider.java @@ -236,7 +236,7 @@ public class JmsSearchProvider implements MessageListener { SearchResults searchResults = this.doSearch(searchRequest.getQueryString(), searchRequest.getCondQueries(), identity, searchRequest.getRoles(), searchRequest.getFirstResult(), searchRequest.getMaxResults(), searchRequest.isDoHighlighting()); if (log_.isDebug()) { - log_.debug("searchResults: " + searchResults.getLength()); + log_.debug("searchResults: " + searchResults.size()); } if (searchResults != null) { session = acquireSession(); diff --git a/src/main/java/org/olat/search/service/searcher/SearchResultsImpl.java b/src/main/java/org/olat/search/service/searcher/SearchResultsImpl.java index e29e51fae32e4c0b62f55722915640735bef4d32..f2e5c23fa2dff914446d957f1ff09806f56faa1f 100644 --- a/src/main/java/org/olat/search/service/searcher/SearchResultsImpl.java +++ b/src/main/java/org/olat/search/service/searcher/SearchResultsImpl.java @@ -106,13 +106,15 @@ public class SearchResultsImpl implements SearchResults { * * @return Length of result-list. */ - public String getLength() { - return Integer.toString(resultList.size()); + @Override + public int size() { + return resultList == null ? 0 : resultList.size(); } /** * @return List of ResultDocument. */ + @Override public List<ResultDocument> getList() { return resultList; } diff --git a/src/main/java/org/olat/search/ui/SearchInputController.java b/src/main/java/org/olat/search/ui/SearchInputController.java index f068623d1fa19b66ecb4bcdaabb2383d03c2ebcf..7d6c247e6a47b2dd42c6070ab5a45bc9db3c0c24 100644 --- a/src/main/java/org/olat/search/ui/SearchInputController.java +++ b/src/main/java/org/olat/search/ui/SearchInputController.java @@ -478,19 +478,18 @@ public class SearchInputController extends FormBasicController implements Generi searchResults = searchClient.doSearch(query, condQueries, ureq.getIdentity(), ureq.getUserSession().getRoles(), firstResult, maxReturns, true); searchCache.put(getQueryCacheKey(firstResult, query, condQueries), searchResults); } - if ((firstResult == 0 && searchResults.getList().isEmpty()) - && !query.endsWith(FUZZY_SEARCH)) { + if (firstResult == 0 && searchResults.size() == 0 && !query.endsWith(FUZZY_SEARCH)) { // result-list was empty => first try to find word via spell-checker - if (doSpellCheck) { - Set<String> didYouMeansWords = searchClient.spellCheck(searchString); - if (didYouMeansWords != null && !didYouMeansWords.isEmpty()) { - setDidYouMeanWords(didYouMeansWords); + if (doSpellCheck) { + Set<String> didYouMeansWords = searchClient.spellCheck(searchString); + if (didYouMeansWords != null && !didYouMeansWords.isEmpty()) { + setDidYouMeanWords(didYouMeansWords); + } else { + searchResults = doFuzzySearch(ureq, searchString, null, parentCtxt, docType, rsrcUrl, firstResult, maxReturns); + } } else { searchResults = doFuzzySearch(ureq, searchString, null, parentCtxt, docType, rsrcUrl, firstResult, maxReturns); } - } else { - searchResults = doFuzzySearch(ureq, searchString, null, parentCtxt, docType, rsrcUrl, firstResult, maxReturns); - } } if(firstResult == 0 && searchResults.getList().isEmpty()) { diff --git a/src/main/webapp/static/js/openolat/wiki.js b/src/main/webapp/static/js/openolat/wiki.js index 8abde178882ff061c278090540fafc67c69f5e87..43383f118c8a57e5d25ea903e38937a5888720f0 100644 --- a/src/main/webapp/static/js/openolat/wiki.js +++ b/src/main/webapp/static/js/openolat/wiki.js @@ -35,6 +35,7 @@ function changeAnchorTargets(id) { var pre = href.substr(0, href.indexOf(":1/")); var post = href.substr(href.indexOf(":1/")+3, href.length); anchor.attr("href", pre+":0/"+post); + anchor.prop('onclick', null).off('click'); } } else if (anchor.attr("class") == "edit" && anchor.attr("title").indexOf("Media:") != -1) { //media file not found href = href.substr(0, href.indexOf("Edit:topic"));