diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableSortOptions.java b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableSortOptions.java index 531d731dac254b48d6b404b39f7b4b81b16068fa..af9f5caf7c0c0f72c5a15b0b15c1d09276b40cff 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableSortOptions.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableSortOptions.java @@ -34,6 +34,7 @@ public class FlexiTableSortOptions { private SortKey defaultOrderBy; private boolean fromColumnModel; + private boolean openAllBySort = false; private List<FlexiTableSort> sorts; public FlexiTableSortOptions() { @@ -60,6 +61,22 @@ public class FlexiTableSortOptions { return fromColumnModel; } + /** + * Reopen a tree model before sorting. + * + * @return true if reopen a tree model before sorting + */ + public boolean isOpenAllBySort() { + return openAllBySort; + } + + /** + * @param openAllBySort true if you want to open all the model before sorting it + */ + public void setOpenAllBySort(boolean openAllBySort) { + this.openAllBySort = openAllBySort; + } + /** * @return true if a default order is set */ 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 3e3819ce9123fd00275eaebb9568ab7343d3b4e9..deb805a54e74033f9b3077c09e1ea3ecec41cf5d 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 @@ -1034,6 +1034,9 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle } if(dataModel instanceof SortableFlexiTableDataModel) { + if(dataModel instanceof FlexiTreeTableDataModel && (sortOptions != null && sortOptions.isOpenAllBySort())) { + doOpenAll(); + } ((SortableFlexiTableDataModel<?>)dataModel).sort(key); } else if(dataSource != null) { currentPage = 0; @@ -1056,6 +1059,9 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle orderBy = new SortKey[]{ sortKey }; if(dataModel instanceof SortableFlexiTableDataModel) { + if(dataModel instanceof FlexiTreeTableDataModel && (sortOptions != null && sortOptions.isOpenAllBySort())) { + doOpenAll(); + } ((SortableFlexiTableDataModel<?>)dataModel).sort(sortKey); } else if(dataSource != null) { currentPage = 0; diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java index 33fc0b05c2bb5bde44a688533ba6f2152f795f95..9b8548ce06603c1615133dffe545440442e2a151 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java @@ -53,6 +53,11 @@ public class TreeNodeFlexiCellRenderer implements FlexiCellRenderer { public TreeNodeFlexiCellRenderer(String action) { this.action = action; } + + public TreeNodeFlexiCellRenderer(FlexiCellRenderer labelDelegate) { + this.labelDelegate = labelDelegate; + this.action = null; + } public boolean isFlatBySearchAndFilter() { return flatBySearchAndFilter; @@ -147,11 +152,15 @@ public class TreeNodeFlexiCellRenderer implements FlexiCellRenderer { } target.append("'> </i></a> "); } - - NameValuePair pair = new NameValuePair(action, Integer.toString(row)); - String jsCode = FormJSHelper.getXHRFnCallFor(rootForm, id, 1, false, false, pair); - target.append("<a href=\"javascript:").append(jsCode).append(";\">"); - labelDelegate.render(renderer, target, cellValue, row, source, ubu, translator); - target.append("</a></div>"); + + if(action == null) { + labelDelegate.render(renderer, target, cellValue, row, source, ubu, translator); + } else { + NameValuePair pair = new NameValuePair(action, Integer.toString(row)); + String jsCode = FormJSHelper.getXHRFnCallFor(rootForm, id, 1, false, false, pair); + target.append("<a href=\"javascript:").append(jsCode).append(";\">"); + labelDelegate.render(renderer, target, cellValue, row, source, ubu, translator); + target.append("</a></div>"); + } } } \ No newline at end of file diff --git a/src/main/java/org/olat/modules/fo/ui/ForumMessageListController.java b/src/main/java/org/olat/modules/fo/ui/ForumMessageListController.java index 8c6f62a032fcc7667e9e5915b3079c01d0deb72d..a9f08501b924be33b07bde58d3ea66ef7546ac78 100644 --- a/src/main/java/org/olat/modules/fo/ui/ForumMessageListController.java +++ b/src/main/java/org/olat/modules/fo/ui/ForumMessageListController.java @@ -277,6 +277,7 @@ public class ForumMessageListController extends FormBasicController { FlexiTableSortOptions sortOptions = new FlexiTableSortOptions(); sortOptions.setFromColumnModel(false); + sortOptions.setOpenAllBySort(true); sortOptions.setSorts(sorts); tableEl.setSortSettings(sortOptions); }