diff --git a/src/main/java/de/bps/course/nodes/den/DENManageParticipantsController.java b/src/main/java/de/bps/course/nodes/den/DENManageParticipantsController.java index 82fb100e0751d91eb3e8a89ca538730f29c553c6..0211d6cc7813dbb25ee2795ae45a2baf0c71396d 100644 --- a/src/main/java/de/bps/course/nodes/den/DENManageParticipantsController.java +++ b/src/main/java/de/bps/course/nodes/den/DENManageParticipantsController.java @@ -229,7 +229,7 @@ public class DENManageParticipantsController extends BasicController { //delete single user from event if(tableEvent.getActionId().equals(DENParticipantsTableDataModel.REMOVE_ACTION)) { Identity identity = participantsTableData.getEntryAt(tableEvent.getRowId()); - status = denManager.cancelEnroll(identity, selectedEvent, ores, courseNode); + status = denManager.cancelEnroll(identity, selectedEvent, ores); if(!status.isCancelled()) showError(); //send notification mail else { diff --git a/src/main/java/de/bps/course/nodes/den/DENManager.java b/src/main/java/de/bps/course/nodes/den/DENManager.java index 32cdfd033332339b9a5c9dbfbaa6d66c06561b11..8048227d81080f9cfa79c3f741cea23ef7b3156b 100644 --- a/src/main/java/de/bps/course/nodes/den/DENManager.java +++ b/src/main/java/de/bps/course/nodes/den/DENManager.java @@ -187,7 +187,7 @@ public class DENManager { * @param userCourseEnv * @return status */ - public DENStatus cancelEnroll(Identity identity, KalendarEvent event, OLATResourceable ores, DENCourseNode courseNode) { + public DENStatus cancelEnroll(Identity identity, KalendarEvent event, OLATResourceable ores) { DENStatus status = new DENStatus(); ICourse course = CourseFactory.loadCourse(ores); Kalendar cal = calManager.getCourseCalendar(course).getKalendar(); @@ -540,7 +540,6 @@ public class DENManager { */ protected TableController createManageDatesTable(UserRequest ureq, WindowControl wControl, Translator trans, DENEditTableDataModel tableData) { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); - tableConfig.setColumnMovingOffered(true); tableConfig.setResultsPerPage(15); tableConfig.setShowAllLinkEnabled(true); TableController tableCntrl = new TableController(tableConfig, ureq, wControl, trans); @@ -571,7 +570,6 @@ public class DENManager { protected TableController createRunDatesTable(UserRequest ureq, WindowControl wControl, Translator trans, DENRunTableDataModel tableData) { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(trans.translate("dates.table.empty")); - tableConfig.setColumnMovingOffered(true); TableController tableCntrl = new TableController(tableConfig, ureq, wControl, trans); tableCntrl.addColumnDescriptor(new StrongColumnDescriptor("dates.table.date", 0, null, ureq.getLocale())); tableCntrl.addColumnDescriptor(new DefaultColumnDescriptor("dates.table.begin", 1, null, ureq.getLocale())); @@ -602,7 +600,6 @@ public class DENManager { protected TableController createListParticipantsTable(UserRequest ureq, WindowControl wControl, Translator trans,DENListTableDataModel tableData) { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(trans.translate("dates.table.empty")); - tableConfig.setColumnMovingOffered(true); TableController tableCntrl = new TableController(tableConfig, ureq, wControl, trans); tableCntrl.addColumnDescriptor(new StrongColumnDescriptor("dates.table.date", 0, null, ureq.getLocale())); tableCntrl.addColumnDescriptor(new DefaultColumnDescriptor("dates.table.begin", 1, null, ureq.getLocale())); @@ -643,7 +640,6 @@ public class DENManager { protected TableController createParticipantsTable(UserRequest ureq, WindowControl wControl, Translator trans, DENParticipantsTableDataModel tableData) { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(trans.translate("dates.table.empty")); - tableConfig.setColumnMovingOffered(true); TableController tableCntrl = new TableController(tableConfig, ureq, wControl, trans); tableCntrl.addColumnDescriptor(new DefaultColumnDescriptor("dates.table.participant.firstname", 0, null, ureq.getLocale())); tableCntrl.addColumnDescriptor(new DefaultColumnDescriptor("dates.table.participant.lastname", 1, null, ureq.getLocale())); diff --git a/src/main/java/de/bps/course/nodes/den/DENRunController.java b/src/main/java/de/bps/course/nodes/den/DENRunController.java index f50c1d8e1f62dded777180cf86d17329eb681fec..b628e5e182a8ed72eaa916e233ab5749fca1a7e7 100644 --- a/src/main/java/de/bps/course/nodes/den/DENRunController.java +++ b/src/main/java/de/bps/course/nodes/den/DENRunController.java @@ -201,7 +201,7 @@ public class DENRunController extends BasicController implements GenericEventLis if(!status.isEnrolled()) showError(); } else if(tableEvent.getActionId().equals(DENRunTableDataModel.CMD_ENROLLED_CANCEL)) { //cancel enrollment - status = denManager.cancelEnroll(ureq.getIdentity(), calEvent, ores, courseNode); + status = denManager.cancelEnroll(ureq.getIdentity(), calEvent, ores); if(!status.isCancelled()) showError(); } createOrUpdateDateTable(ureq, courseNode); diff --git a/src/main/java/de/bps/course/nodes/vc/VCRunController.java b/src/main/java/de/bps/course/nodes/vc/VCRunController.java index ff84762fcb852a7b7bebc8c777259a1aa37197ae..46ccecb4b4c3a4c6127468ef56d1727828f6b88c 100644 --- a/src/main/java/de/bps/course/nodes/vc/VCRunController.java +++ b/src/main/java/de/bps/course/nodes/vc/VCRunController.java @@ -83,7 +83,6 @@ public class VCRunController extends BasicController { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage("<b>"+translate("vc.table.empty")+"</b>"); - tableConfig.setColumnMovingOffered(true); tableConfig.setSortingEnabled(true); tableCtr = new TableController(tableConfig, ureq, wControl, getTranslator()); tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("vc.table.title", 0, null, ureq.getLocale())); diff --git a/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaDisplayController.java b/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaDisplayController.java index e50bc9d5c3ef8ceec9f9fb065cdc3c0313754060..ce302b3a9908696400476a3adcf5500074821b5a 100644 --- a/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaDisplayController.java +++ b/src/main/java/de/bps/course/nodes/vc/provider/wimba/WimbaDisplayController.java @@ -147,7 +147,6 @@ public class WimbaDisplayController extends BasicController { // show recordings TableGuiConfiguration tableConfig = new TableGuiConfiguration(); - tableConfig.setColumnMovingOffered(false); tableConfig.setDisplayRowCount(true); tableConfig.setPageingEnabled(true); tableConfig.setTableEmptyMessage(translate("table.recordings.empty")); diff --git a/src/main/java/de/bps/olat/modules/cl/ChecklistDisplayController.java b/src/main/java/de/bps/olat/modules/cl/ChecklistDisplayController.java index 259df433b437ebccc419e4a3938954aaa572e67f..ab0206915cebe094a60da073e78903282aeb00e9 100644 --- a/src/main/java/de/bps/olat/modules/cl/ChecklistDisplayController.java +++ b/src/main/java/de/bps/olat/modules/cl/ChecklistDisplayController.java @@ -124,7 +124,6 @@ public class ChecklistDisplayController extends BasicController { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(translate("cl.table.empty")); - tableConfig.setColumnMovingOffered(true); removeAsListenerAndDispose(runChecklistTable); runChecklistTable = new TableController(tableConfig, ureq, getWindowControl(), getTranslator()); diff --git a/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java b/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java index 6bcb09491551d09e4fa01243633ab11794834bba..98feca15c1f41ce6f9778ea9d29792ac3145c801 100644 --- a/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java +++ b/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java @@ -227,7 +227,6 @@ public class ChecklistManageCheckpointsController extends BasicController { // prepare table for run view TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(translate("cl.table.empty")); - tableConfig.setColumnMovingOffered(true); tableConfig.setDownloadOffered(true); tableConfig.setPreferencesOffered(true, "ExtendedManageTable"); @@ -273,7 +272,6 @@ public class ChecklistManageCheckpointsController extends BasicController { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(translate("cl.table.empty")); - tableConfig.setColumnMovingOffered(true); tableConfig.setDownloadOffered(true); tableConfig.setPreferencesOffered(true, "ExtendedEditTable"); diff --git a/src/main/java/org/olat/core/gui/components/table/Table.java b/src/main/java/org/olat/core/gui/components/table/Table.java index f417833b1587ad491008b012ca8e99c94e9eb369..6d58072d5788502a5f635723c53750fcbcda0c9a 100644 --- a/src/main/java/org/olat/core/gui/components/table/Table.java +++ b/src/main/java/org/olat/core/gui/components/table/Table.java @@ -58,7 +58,7 @@ public class Table extends AbstractComponent { private static final int NO_ROW_SELECTED = -1; private static final int DEFAULT_RESULTS_PER_PAGE = 20; private static final int INITIAL_COLUMNSIZE = 5; - private OLog log = Tracing.createLoggerFor(this.getClass()); + private static final OLog log = Tracing.createLoggerFor(Table.class); private static final ComponentRenderer RENDERER = new TableRenderer(); /** @@ -87,14 +87,6 @@ public class Table extends AbstractComponent { * Comment for <code>COMMAND_SORTBYCOLUMN</code> */ protected static final String COMMAND_SORTBYCOLUMN = "cid"; - /** - * Comment for <code>COMMAND_MOVECOLUMN_LEFT</code> - */ - protected static final String COMMAND_MOVECOLUMN_LEFT = "cl"; - /** - * Comment for <code>COMMAND_MOVECOLUMN_RIGHT</code> - */ - protected static final String COMMAND_MOVECOLUMN_RIGHT = "cr"; /** * Comment for <code>COMMAND_PAGEACTION</code> */ @@ -134,7 +126,6 @@ public class Table extends AbstractComponent { private boolean multiSelect = false; private boolean selectedRowUnselectable = false; private boolean sortingEnabled = true; - private boolean columnMovingOffered = true; private boolean displayTableHeader = true; private boolean pageingEnabled = true; private Integer currentPageId; @@ -335,10 +326,6 @@ public class Table extends AbstractComponent { // then fetch the internal command to be processed if (formCmd.equals(COMMAND_SORTBYCOLUMN)) { cmd = TableReplayableEvent.SORT; - } else if (formCmd.equals(COMMAND_MOVECOLUMN_RIGHT)) { - cmd = TableReplayableEvent.MOVE_R; - } else if (formCmd.equals(COMMAND_MOVECOLUMN_LEFT)) { - cmd = TableReplayableEvent.MOVE_L; } else if (formCmd.equals(COMMAND_PAGEACTION)) { cmd = TableReplayableEvent.PAGE_ACTION; } @@ -390,40 +377,10 @@ public class Table extends AbstractComponent { setDirty(true); resort(); - } else if (cmd == TableReplayableEvent.MOVE_R) { // move column right - int col = Integer.parseInt(value1); - int swapCol = (col + 1) % (getColumnCount()); - ColumnDescriptor cdMove = getColumnDescriptor(col); - ColumnDescriptor cdSwap = getColumnDescriptor(swapCol); - columnOrder.set(col, cdSwap); - columnOrder.set(swapCol, cdMove); - if (col == sortColumn) { // if the moved column was sorted, update the - // sortedcolumn info - sortColumn = swapCol; - } else if (swapCol == sortColumn) { - sortColumn = col; - } - - setDirty(true); - } else if (cmd == TableReplayableEvent.MOVE_L) { // move column left - int col = Integer.parseInt(value1); - int swapCol = (col - 1) % (getColumnCount()); - ColumnDescriptor cdMove = getColumnDescriptor(col); - ColumnDescriptor cdSwap = getColumnDescriptor(swapCol); - columnOrder.set(col, cdSwap); - columnOrder.set(swapCol, cdMove); - if (col == sortColumn) { // if the moved column was sorted, update the - // sortedcolumn info - sortColumn = swapCol; - } else if (swapCol == sortColumn) { - sortColumn = col; - } - - setDirty(true); + fireEvent(ureq, new TableEvent(COMMAND_SORTBYCOLUMN, -1, COMMAND_SORTBYCOLUMN)); } else if (cmd == TableReplayableEvent.PAGE_ACTION) { - if (value1.equals(COMMAND_PAGEACTION_SHOWALL)) { //updatePageing(null); (see OLAT-1340) setShowAllSelected(true); @@ -662,22 +619,6 @@ public class Table extends AbstractComponent { this.sortingEnabled = sortingEnabled; } - /** - * @return true when columns can be moved left/right - */ - protected boolean isColumnMovingOffered() { - return columnMovingOffered; - } - - /** - * Set column moving configuration - * - * @param columnMovingOffered - */ - protected void setColumnMovingOffered(final boolean columnMovingOffered) { - this.columnMovingOffered = columnMovingOffered; - } - /** * @return true: table will render header, false: table has no headers */ diff --git a/src/main/java/org/olat/core/gui/components/table/TableController.java b/src/main/java/org/olat/core/gui/components/table/TableController.java index fcc1e396e6aead31e6585113a121c9d6d418c6a4..6a481ea727a27992905bdf959052ba81ed002da0 100644 --- a/src/main/java/org/olat/core/gui/components/table/TableController.java +++ b/src/main/java/org/olat/core/gui/components/table/TableController.java @@ -142,6 +142,7 @@ public class TableController extends BasicController { private boolean tablePrefsInitialized = false; private CloseableCalloutWindowController cmc; private Controller tableSearchController; + private TableSort tableSort; private Link resetLink; @@ -235,7 +236,6 @@ public class TableController extends BasicController { // propagate table specific configuration to table, // rest of configuration is handled by this controller - table.setColumnMovingOffered(tableConfig.isColumnMovingOffered()); table.setDisplayTableHeader(tableConfig.isDisplayTableHeader()); table.setSelectedRowUnselectable(tableConfig.isSelectedRowUnselectable()); table.setSortingEnabled(tableConfig.isSortingEnabled()); @@ -252,7 +252,7 @@ public class TableController extends BasicController { // fetch prefs (which were loaded at login time String preferencesKey = tableConfig.getPreferencesKey(); if (tableConfig.isPreferencesOffered() && preferencesKey != null) { - this.prefs = (TablePrefs) ureq.getUserSession().getGuiPreferences().get(TableController.class, preferencesKey); + prefs = (TablePrefs) ureq.getUserSession().getGuiPreferences().get(TableController.class, preferencesKey); } // empty table message @@ -264,6 +264,13 @@ public class TableController extends BasicController { contentVc.contextPut("tableConfig", tableConfig); contentVc.contextPut(VC_VAR_HAS_TABLE_SEARCH, Boolean.FALSE); + + //sorters + contentVc.contextPut("hasSorters", new Boolean(tableConfig.isSortingEnabled())); + tableSort = new TableSort("tableSort", table); + contentVc.put("tableSort", tableSort); + + //preference + download links preferenceLink = LinkFactory.createCustomLink("prefLink", "cmd.changecols", "", Link.BUTTON | Link.NONTRANSLATED, contentVc, this); @@ -303,10 +310,11 @@ public class TableController extends BasicController { */ public void event(final UserRequest ureq, final Component source, final Event event) { if (source == table) { - boolean aPageingCommand = event.getCommand().equalsIgnoreCase(Table.COMMAND_SHOW_PAGES); - aPageingCommand = aPageingCommand || event.getCommand().equalsIgnoreCase(Table.COMMAND_PAGEACTION_SHOWALL); - - if (!aPageingCommand) { + String cmd = event.getCommand(); + if(cmd.equalsIgnoreCase(Table.COMMAND_SORTBYCOLUMN)) { + tableSort.setDirty(true); + } else if (!cmd.equalsIgnoreCase(Table.COMMAND_SHOW_PAGES) + && !cmd.equalsIgnoreCase(Table.COMMAND_PAGEACTION_SHOWALL)) { // forward to table controller listener fireEvent(ureq, event); } @@ -333,8 +341,8 @@ public class TableController extends BasicController { cmc.deactivate(); } } else if (source == resetLink) { - this.table.setSearchString(null); - this.modelChanged(); + table.setSearchString(null); + modelChanged(); } } @@ -500,15 +508,15 @@ public class TableController extends BasicController { table.modelChanged(); TableDataModel tableModel = table.getTableDataModel(); if (tableModel != null) { - this.contentVc.contextPut("tableEmpty", tableModel.getRowCount() == 0 ? Boolean.TRUE : Boolean.FALSE); - this.contentVc.contextPut("numberOfElements", String.valueOf(table.getUnfilteredRowCount())); + contentVc.contextPut("tableEmpty", tableModel.getRowCount() == 0 ? Boolean.TRUE : Boolean.FALSE); + contentVc.contextPut("numberOfElements", String.valueOf(table.getUnfilteredRowCount())); if (table.isTableFiltered()) { - this.contentVc.contextPut("numberFilteredElements", String.valueOf(table.getRowCount())); - this.contentVc.contextPut(VC_VAR_IS_FILTERED, Boolean.TRUE); - this.contentVc.contextPut("filter", table.getSearchString()); + contentVc.contextPut("numberFilteredElements", String.valueOf(table.getRowCount())); + contentVc.contextPut(VC_VAR_IS_FILTERED, Boolean.TRUE); + contentVc.contextPut("filter", table.getSearchString()); resetLink = LinkFactory.createCustomLink(LINK_NUMBER_OF_ELEMENTS, LINK_NUMBER_OF_ELEMENTS, String.valueOf(table.getUnfilteredRowCount()), Link.NONTRANSLATED, contentVc, this); } else { - this.contentVc.contextPut(VC_VAR_IS_FILTERED, Boolean.FALSE); + contentVc.contextPut(VC_VAR_IS_FILTERED, Boolean.FALSE); } } // else do nothing. The table might have no table data model during @@ -647,6 +655,7 @@ public class TableController extends BasicController { && table.getColumnDescriptor(sortColumn).isSortingAllowed()) { table.setSortColumn(sortColumn, isSortAscending); table.resort(); + tableSort.setDirty(true); } } @@ -655,6 +664,7 @@ public class TableController extends BasicController { if(sortColumn == table.getColumnDescriptor(i)) { table.setSortColumn(i, isSortAscending); table.resort(); + tableSort.setDirty(true); } } } diff --git a/src/main/java/org/olat/core/gui/components/table/TableGuiConfiguration.java b/src/main/java/org/olat/core/gui/components/table/TableGuiConfiguration.java index eee6f2332a64636b84cb873194dcc09b6939988f..74871c5b64c4ea4ab2e602a748b8a85f9dd887bb 100644 --- a/src/main/java/org/olat/core/gui/components/table/TableGuiConfiguration.java +++ b/src/main/java/org/olat/core/gui/components/table/TableGuiConfiguration.java @@ -47,7 +47,6 @@ public class TableGuiConfiguration { private boolean displayTableHeader = true; private boolean sortingEnabled = true; - private boolean columnMovingOffered = true; private boolean selectedRowUnselectable = false; private boolean multiSelect = false; @@ -118,18 +117,6 @@ public class TableGuiConfiguration { public boolean isDownloadOffered() { return downloadOffered; } - /** - * @return boolean true: enable moving of table columns - */ - public boolean isColumnMovingOffered() { - return columnMovingOffered; - } - /** - * @param columnMovingOffered true: enable moving of table columns - */ - public void setColumnMovingOffered(final boolean columnMovingOffered) { - this.columnMovingOffered = columnMovingOffered; - } /** * @return boolean true: show the table header */ diff --git a/src/main/java/org/olat/core/gui/components/table/TableRenderer.java b/src/main/java/org/olat/core/gui/components/table/TableRenderer.java index 3022763c3c8be75a88e229e628fbb7d4243e40ac..2842e4c4f5758eced967f1b20c7639fa46f1ff2c 100644 --- a/src/main/java/org/olat/core/gui/components/table/TableRenderer.java +++ b/src/main/java/org/olat/core/gui/components/table/TableRenderer.java @@ -50,7 +50,6 @@ public class TableRenderer extends DefaultComponentRenderer { private static final String CLOSE_HTML_BRACE = "\">"; private static final String CLOSE_DIV = "</div>"; - private static final String SINGLEQUOTE_CLOSEBRACE_OPEN_TITLE = "');\" title=\""; private static final String B_LAST_CHILD = " b_last_child"; private static final String B_FIRST_CHILD = " b_first_child"; private static final String A_CLASS = "<a class=\""; @@ -82,7 +81,6 @@ public class TableRenderer extends DefaultComponentRenderer { int rows = table.getRowCount(); int cols = table.getColumnCount(); - boolean asc = table.isSortAscending(); boolean selRowUnSelectable = table.isSelectedRowUnselectable(); // the really selected rowid (from the tabledatamodel) int selRowId = table.getSelectedRowId(); @@ -107,10 +105,10 @@ public class TableRenderer extends DefaultComponentRenderer { } // starting real table table - target.append("<div class=\"o_table_wrapper table-responsive\" id=\"b_overflowscrollbox_").append(table.hashCode()).append("\">"); - - target.append("<table id=\"b_table").append(table.hashCode()).append("\" class=\"o_table table table-striped table-condensed table-hover").append(CLOSE_HTML_BRACE); - appendHeaderLinks(target, translator, table, formName, cols, asc); + target.append("<div class=\"o_table_wrapper table-responsive\" id=\"b_overflowscrollbox_").append(table.hashCode()).append("\">") + .append("<table id=\"b_table").append(table.hashCode()).append("\" class=\"o_table table table-striped table-condensed table-hover").append(CLOSE_HTML_BRACE); + + appendHeaderLinks(target, translator, table, cols); appendDataRows(renderer, target, ubu, table, iframePostEnabled, cols, selRowUnSelectable, selRowId, startRowId, endRowId); target.append("</table><div class='o_table_footer'>"); appendSelectDeselectAllButtons(target, translator, table, formName, rows, resultsPerPage); @@ -379,11 +377,9 @@ public class TableRenderer extends DefaultComponentRenderer { return cssClass; } - private void appendHeaderLinks(final StringOutput target, final Translator translator, Table table, String formName, int cols, boolean asc) { + private void appendHeaderLinks(final StringOutput target, final Translator translator, Table table, int cols) { if (table.isDisplayTableHeader()) { target.append("<thead><tr>"); - - ColumnDescriptor sortedCD = table.getCurrentlySortedColumnDescriptor(); for (int i = 0; i < cols; i++) { ColumnDescriptor cd = table.getColumnDescriptor(i); String header; @@ -401,41 +397,9 @@ public class TableRenderer extends DefaultComponentRenderer { if (i == cols - 1) { target.append(B_LAST_CHILD); } - target.append(CLOSE_HTML_BRACE); - - // add 'move column left' link (if we are not at the leftmost position) - if (i != 0 && table.isColumnMovingOffered()) { - target.append(A_CLASS).append(HREF_JAVA_SCRIPT_TABLE_FORM_INJECT_COMMAND_AND_SUBMIT); - target.append(formName).append(SINGLE_COMMA_SINGLE + Table.COMMAND_MOVECOLUMN_LEFT + SINGLE_COMMA_SINGLE).append(i).append("');\" class=\"b_table_move_left\" title=\""); - target.append(StringEscapeUtils.escapeHtml(translator.translate("row.move.left"))).append("\"> <i class='o_icon o_icon_move_left'></i> </a> "); - } - // header either a link or not - if (table.isSortingEnabled() && cd.isSortingAllowed()) { - target.append(A_CLASS).append(HREF_JAVA_SCRIPT_TABLE_FORM_INJECT_COMMAND_AND_SUBMIT); - target.append(formName).append(SINGLE_COMMA_SINGLE + Table.COMMAND_SORTBYCOLUMN + SINGLE_COMMA_SINGLE).append(i).append(SINGLEQUOTE_CLOSEBRACE_OPEN_TITLE); - target.append(StringEscapeUtils.escapeHtml(translator.translate("row.sort"))).append(CLOSE_HTML_BRACE); - target.append(header); - target.append(CLOSE_HREF); - } else { - target.append(header); - } - // mark currently sorted row special - if (table.isSortingEnabled() && cd == sortedCD) { - target.append(A_CLASS).append(HREF_JAVA_SCRIPT_TABLE_FORM_INJECT_COMMAND_AND_SUBMIT); - target.append(formName).append(SINGLE_COMMA_SINGLE + Table.COMMAND_SORTBYCOLUMN + SINGLE_COMMA_SINGLE).append(i).append(SINGLEQUOTE_CLOSEBRACE_OPEN_TITLE); - target.append(StringEscapeUtils.escapeHtml(translator.translate("row.sort.invert"))).append("\">"); - target.append((asc ? " <i class='o_icon o_icon_sort_asc'></i> " : " <i class='o_icon o_icon_sort_desc'></i> ")); - target.append(CLOSE_HREF); - } - - // add 'move column right' link (if we are not at the rightmost - // position) - if (i != cols - 1 && table.isColumnMovingOffered()) { - target.append(A_CLASS).append(HREF_JAVA_SCRIPT_TABLE_FORM_INJECT_COMMAND_AND_SUBMIT); - target.append(formName).append(SINGLE_COMMA_SINGLE + Table.COMMAND_MOVECOLUMN_RIGHT + SINGLE_COMMA_SINGLE).append(i).append("');\" class=\"b_table_move_right\" title=\""); - target.append(StringEscapeUtils.escapeHtml(translator.translate("row.move.right"))).append("\"> <i class='o_icon o_icon_move_right'></i> </a>"); - } - target.append("</th>"); + target.append(CLOSE_HTML_BRACE) + .append(header) + .append("</th>"); } target.append("</tr></thead>"); } diff --git a/src/main/java/org/olat/core/gui/components/table/TableReplayableEvent.java b/src/main/java/org/olat/core/gui/components/table/TableReplayableEvent.java index a6fb7fd5bb14ca533f7bcfe83019e7bf72b73cef..324bda6484970740e228606d9524a6578e69cee7 100644 --- a/src/main/java/org/olat/core/gui/components/table/TableReplayableEvent.java +++ b/src/main/java/org/olat/core/gui/components/table/TableReplayableEvent.java @@ -41,8 +41,6 @@ public class TableReplayableEvent { private static final String M_DATA = "mData"; private static final String I_MODE = "iMode"; static final int SORT = 0; - static final int MOVE_R = 1; - static final int MOVE_L = 2; static final int PAGE_ACTION = 3; static final int ROW_ACTION = 4; static final int MULTISELECT_ACTION = 5; diff --git a/src/main/java/org/olat/core/gui/components/table/TableSort.java b/src/main/java/org/olat/core/gui/components/table/TableSort.java new file mode 100644 index 0000000000000000000000000000000000000000..7b6690439aa8bb174a66836cbc1ca1cc67e5faab --- /dev/null +++ b/src/main/java/org/olat/core/gui/components/table/TableSort.java @@ -0,0 +1,59 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.core.gui.components.table; + +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.components.AbstractComponent; +import org.olat.core.gui.components.ComponentRenderer; + +/** + * The table sort is a wrapper for the table and table controller. The events + * are send to the table component and not here. + * + * Initial date: 10.06.2014<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +class TableSort extends AbstractComponent { + + private static final TableSortRenderer TABLE_SORT_RENDERER = new TableSortRenderer(); + + private final Table table; + + public TableSort(String name, Table table) { + super(name); + setDomReplacementWrapperRequired(false); + this.table = table; + } + + public Table getTable() { + return table; + } + + @Override + protected void doDispatchRequest(UserRequest ureq) { + // + } + + @Override + public ComponentRenderer getHTMLRendererSingleton() { + return TABLE_SORT_RENDERER; + } +} diff --git a/src/main/java/org/olat/core/gui/components/table/TableSortRenderer.java b/src/main/java/org/olat/core/gui/components/table/TableSortRenderer.java new file mode 100644 index 0000000000000000000000000000000000000000..f898f4cdccc75825bb764179909ff2d7c92c1b43 --- /dev/null +++ b/src/main/java/org/olat/core/gui/components/table/TableSortRenderer.java @@ -0,0 +1,90 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.core.gui.components.table; + +import org.apache.commons.lang.StringEscapeUtils; +import org.olat.core.gui.components.Component; +import org.olat.core.gui.components.DefaultComponentRenderer; +import org.olat.core.gui.render.RenderResult; +import org.olat.core.gui.render.Renderer; +import org.olat.core.gui.render.StringOutput; +import org.olat.core.gui.render.URLBuilder; +import org.olat.core.gui.translator.Translator; + +/** + * + * Initial date: 10.06.2014<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +class TableSortRenderer extends DefaultComponentRenderer { + + @Override + public void render(Renderer renderer, StringOutput sb, Component source, URLBuilder ubu, + Translator translator, RenderResult renderResult, String[] args) { + TableSort sorter = (TableSort)source; + Table table = sorter.getTable(); + String id = sorter.getDispatchID(); + + sb.append("<div id='o_c").append(id).append("' class='btn-group'>") + .append("<button class='btn btn-default dropdown-toggle' data-toggle='dropdown'>") + .append("<i class='o_icon o_icon-lg o_icon_sort_menu'> </i>") + .append("<b class='caret'></b>") + .append("</button>") + .append("<ul class='dropdown-menu' role='menu'>"); + + int cols = table.getColumnCount(); + boolean asc = table.isSortAscending(); + String formName = "tb_ms_" + table.hashCode(); + ColumnDescriptor sortedCD = table.getCurrentlySortedColumnDescriptor(); + + for (int i = 0; i < cols; i++) { + ColumnDescriptor cd = table.getColumnDescriptor(i); + // header either a link or not + if (cd.isSortingAllowed()) { + sb.append("<li>") + .append("<a class=\"").append("\" href=\"JavaScript:tableFormInjectCommandAndSubmit('") + .append(formName).append("','").append(Table.COMMAND_SORTBYCOLUMN).append("','").append(i).append("');\" title=\"") + .append(StringEscapeUtils.escapeHtml(translator.translate("row.sort"))).append("\">"); + + if(sortedCD == cd) { + System.out.println(sortedCD.getHeaderKey() + " :: " + asc); + + if(asc) { + sb.append("<i class='o_icon o_icon_sort_asc'></i> "); + } else { + sb.append("<i class='o_icon o_icon_sort_desc'></i> "); + } + } + + String header; + if (cd.translateHeaderKey()) { + header = translator.translate(cd.getHeaderKey()); + } else { + header = cd.getHeaderKey(); + } + sb.append(header) + .append("</a></li>"); + } + } + + sb.append("</ul></div>"); + } +} diff --git a/src/main/java/org/olat/core/gui/components/table/_content/tablelayout.html b/src/main/java/org/olat/core/gui/components/table/_content/tablelayout.html index 3adb0089dd523dc9ef3e7ee7d68f938e0a7175f4..ed7343d59f2cf8b3011290fb7e10c9a37220fbd0 100644 --- a/src/main/java/org/olat/core/gui/components/table/_content/tablelayout.html +++ b/src/main/java/org/olat/core/gui/components/table/_content/tablelayout.html @@ -1,70 +1,50 @@ <div class="o_table_layout $!tableConfig.getCustomCssClass() o_scrollbox"> -#if ($hasTableSearch && !$tableEmpty) - <div>$r.render("tableSearch")</div> -#end - -#if ($hasFilters && $filters.size() > 0) - <div class="o_table_filter"> - <form name="tablefilter" action=""> - <label for="filter">$filterTitle</label> - <select name="filter" size="1" onchange="{tf = document.tablefilter; tf.action=tf.filter.value; if(o2cl()){tf.submit();}}"> +<div class="row clearfix"> + <div class="col-lg-6"> + #if ($hasTableSearch && !$tableEmpty) + $r.render("tableSearch") + #end + </div> + <div class="col-lg-2"></div> + <div class="col-lg-4"><div class="pull-right o_table_tools"> + #if ($hasFilters && $filters.size() > 0) + <div class="btn-group"> + <button class='btn btn-default dropdown-toggle' data-toggle='dropdown'> + <i class='o_icon o_icon-lg o_icon_filter'> </i> + <b class="caret"></b> + </button> + <ul class="dropdown-menu" role="menu"> #if ($useNoFilterOption) - <option value="$r.commandURI("cmd.filter.nofilter")">$noFilterOption</option> + <li><a href="$r.commandURI("cmd.filter.nofilter")">$noFilterOption</a></li> #end #foreach ($filter in $filters) - #if ($filter == $selectedFilterValue) - #set ($selected="selected") - #else - #set ($selected="") - #end - #set ($filterPosition = $velocityCount - 1) - <option $selected value="$r.commandURI("cmd.filter.${filterPosition}")">$r.escapeHtml($filter.getShortName())</option> + <li> + #set ($filterPosition = $velocityCount - 1) + <a href="$r.commandURI("cmd.filter.${filterPosition}")"> + #if ($filter == $selectedFilterValue) + + <i class="o_icon o_icon_check o_icon-fw"> </i> + #end + $r.escapeHtml($filter.getShortName())</a> + </li> #end - </select> - </form> - </div> -#end - -#if ($tableEmpty) - <div class="o_table_empty">$tableEmptyMessage</div> -#else - <div class="btn-toolbar"> - #if ($tableConfig.isDisplayRowCount()) - <div class="o_table_count"> - #if ($isFiltered) - $numberFilteredElements - $r.translate("table.filtered.of") - $r.render("link.numberOfElements") - #if ($numberOfElements == "1") - $r.translate("table.entry") - #else - $r.translate("table.entries.dative") - #end - #if ($numberFilteredElements == "1") - $r.translate("table.filtered.include.sing") - #else - $r.translate("table.filtered.include.plur") - #end - `$filter` - #else - $numberOfElements - #if ($numberOfElements == "1") - $r.translate("table.entry") - #else - $r.translate("table.entries") - #end - #end - </div> + </ul> + </div> + #end + #if ($hasSorters) + $r.render("tableSort") #end - <div class="pull-right"> #if ($tableConfig.isPreferencesOffered()) $r.render("prefLink") #end #if ($tableConfig.isDownloadOffered()) $r.render("downloadLink") #end - </div> - </div> + </div></div> +</div> +#if ($tableEmpty) + <div class="o_table_empty o_info">$tableEmptyMessage</div> +#else $r.render("table", $tableConfig.getCssPrefix()) #end </div> diff --git a/src/main/java/org/olat/course/archiver/GenericArchiveController.java b/src/main/java/org/olat/course/archiver/GenericArchiveController.java index aa1f5b6962751188fd90d22476af676f4735bacf..71efdc97ea0751786dbcf5a0b8eb32dffeea5036 100644 --- a/src/main/java/org/olat/course/archiver/GenericArchiveController.java +++ b/src/main/java/org/olat/course/archiver/GenericArchiveController.java @@ -140,7 +140,6 @@ public class GenericArchiveController extends BasicController { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(translate("nodesoverview.nonodes")); tableConfig.setDownloadOffered(false); - tableConfig.setColumnMovingOffered(false); tableConfig.setSortingEnabled(false); tableConfig.setDisplayTableHeader(true); tableConfig.setDisplayRowCount(false); diff --git a/src/main/java/org/olat/course/assessment/AssessmentMainController.java b/src/main/java/org/olat/course/assessment/AssessmentMainController.java index c975fac676662d9a8aea7fc4a04c98d2b01741e6..1267c0e7493ba74ff27ca2574846a4ea776ac5fb 100644 --- a/src/main/java/org/olat/course/assessment/AssessmentMainController.java +++ b/src/main/java/org/olat/course/assessment/AssessmentMainController.java @@ -891,7 +891,6 @@ public class AssessmentMainController extends MainLayoutBasicController implemen TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(translate("nodesoverview.nonodes")); tableConfig.setDownloadOffered(false); - tableConfig.setColumnMovingOffered(false); //fxdiff VCRP-4: assessment overview with max score tableConfig.setSortingEnabled(true); tableConfig.setDisplayTableHeader(true); diff --git a/src/main/java/org/olat/course/assessment/IdentityAssessmentOverviewController.java b/src/main/java/org/olat/course/assessment/IdentityAssessmentOverviewController.java index cfc4de5d75194ccd65abd56a89b5098426397914..37c2c9580515ed7f576648f6c317bb663d44d57e 100644 --- a/src/main/java/org/olat/course/assessment/IdentityAssessmentOverviewController.java +++ b/src/main/java/org/olat/course/assessment/IdentityAssessmentOverviewController.java @@ -192,7 +192,6 @@ public class IdentityAssessmentOverviewController extends BasicController { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setDownloadOffered(false); - tableConfig.setColumnMovingOffered(false); //fxdiff VCRP-4: assessment overview with max score tableConfig.setSortingEnabled(true); tableConfig.setDisplayTableHeader(true); diff --git a/src/main/java/org/olat/ims/qti/export/CourseQTIArchiveController.java b/src/main/java/org/olat/ims/qti/export/CourseQTIArchiveController.java index d9623cf9dfe76ce301afe4cace36953662aece03..5ec8ebc59ae3145bc6e38a0403b89c1a6f358400 100644 --- a/src/main/java/org/olat/ims/qti/export/CourseQTIArchiveController.java +++ b/src/main/java/org/olat/ims/qti/export/CourseQTIArchiveController.java @@ -142,7 +142,6 @@ public class CourseQTIArchiveController extends BasicController { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(translate("nodesoverview.nonodes")); tableConfig.setDownloadOffered(false); - tableConfig.setColumnMovingOffered(false); tableConfig.setSortingEnabled(false); tableConfig.setDisplayTableHeader(true); tableConfig.setDisplayRowCount(false); diff --git a/src/main/java/org/olat/ims/qti/export/QTIArchiveWizardController.java b/src/main/java/org/olat/ims/qti/export/QTIArchiveWizardController.java index 9a1682ce389be1dce00c5cb259f65f75988c4879..e7e071972c520d991e82f62ca44d416f38b2d5a5 100644 --- a/src/main/java/org/olat/ims/qti/export/QTIArchiveWizardController.java +++ b/src/main/java/org/olat/ims/qti/export/QTIArchiveWizardController.java @@ -146,7 +146,6 @@ public class QTIArchiveWizardController extends BasicController { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(getTranslator().translate("nodesoverview.nonodes")); tableConfig.setDownloadOffered(false); - tableConfig.setColumnMovingOffered(false); tableConfig.setSortingEnabled(false); tableConfig.setDisplayTableHeader(true); tableConfig.setDisplayRowCount(false); diff --git a/src/main/java/org/olat/modules/fo/FilterForUserController.java b/src/main/java/org/olat/modules/fo/FilterForUserController.java index fe988fd5441f6a2ae861ce539b459364e5acacc9..d6c29c0d6310c71130b570eae062210de0037e78 100644 --- a/src/main/java/org/olat/modules/fo/FilterForUserController.java +++ b/src/main/java/org/olat/modules/fo/FilterForUserController.java @@ -130,7 +130,6 @@ public class FilterForUserController extends BasicController { dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, ureq.getLocale()); TableGuiConfiguration tableConfig = new TableGuiConfiguration(); - tableConfig.setColumnMovingOffered(true); tableConfig.setSortingEnabled(true); userListCtr = new TableController(tableConfig, ureq, wControl, getTranslator()); diff --git a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsAdminRoomsController.java b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsAdminRoomsController.java index f4756784cc8a2d52d6b333bb2c6a242171e58523..6fa1f42f1e116b441e2f0e916a10aa78e9e2d497 100644 --- a/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsAdminRoomsController.java +++ b/src/main/java/org/olat/modules/openmeetings/ui/OpenMeetingsAdminRoomsController.java @@ -72,7 +72,6 @@ public class OpenMeetingsAdminRoomsController extends BasicController { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(translate("table.empty")); tableConfig.setDownloadOffered(true); - tableConfig.setColumnMovingOffered(false); tableConfig.setSortingEnabled(true); tableConfig.setDisplayTableHeader(true); tableConfig.setDisplayRowCount(false); diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsAdminController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsAdminController.java index 3e48b2d6fe377ada7c66dc34874fbc414807c382..62f80f95ea91bffe4e5747f2740287d34c09c6fe 100644 --- a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsAdminController.java +++ b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsAdminController.java @@ -75,7 +75,6 @@ public class ViteroBookingsAdminController extends BasicController { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(translate("table.empty")); tableConfig.setDownloadOffered(true); - tableConfig.setColumnMovingOffered(false); tableConfig.setSortingEnabled(true); tableConfig.setDisplayTableHeader(true); tableConfig.setDisplayRowCount(false); diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsController.java index 43b18956f61894c76c175034a3db9ec5a8effecc..4b06c3676a9c494e4c919fd09c371fca309db197 100644 --- a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsController.java +++ b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsController.java @@ -76,7 +76,6 @@ public class ViteroBookingsController extends BasicController { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(translate("table.empty")); - tableConfig.setColumnMovingOffered(true); tableConfig.setSortingEnabled(true); tableCtr = new TableController(tableConfig, ureq, wControl, getTranslator()); tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("group.name", ViteroBookingDataModel.Column.name.ordinal(), null, ureq.getLocale())); diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroRoomsOverviewController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroRoomsOverviewController.java index a3c0c86bcfb520553ad9052d44c651baeb76235f..3e34fdc59c0d748c2c2a3d44cfe68b24aea4d53a 100644 --- a/src/main/java/org/olat/modules/vitero/ui/ViteroRoomsOverviewController.java +++ b/src/main/java/org/olat/modules/vitero/ui/ViteroRoomsOverviewController.java @@ -59,7 +59,6 @@ public class ViteroRoomsOverviewController extends BasicController { TableGuiConfiguration tableConfig = new TableGuiConfiguration(); tableConfig.setTableEmptyMessage(translate("table.empty")); tableConfig.setDownloadOffered(true); - tableConfig.setColumnMovingOffered(false); tableConfig.setSortingEnabled(true); tableConfig.setDisplayTableHeader(true); tableConfig.setDisplayRowCount(false); diff --git a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java index f3378c31a8c157b27b5a75db2b35d75fe289f0ee..ebacc6cc7d686384ea73943804d6ef5ba82a8b98 100644 --- a/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java +++ b/src/main/java/org/olat/repository/controllers/ReferencableEntriesSearchController.java @@ -310,7 +310,8 @@ public class ReferencableEntriesSearchController extends BasicController { searchCtr.displayAdminSearchForm(); } } - } else if(source == createRessourceCmp || createRessourceButtons.contains(source)) { + } else if(source == createRessourceCmp || + (createRessourceButtons != null && createRessourceButtons.contains(source))) { removeAsListenerAndDispose(createController); RepositoryHandler handler = (RepositoryHandler)((Link)source).getUserObject(); createController = new CreateRepositoryEntryController(ureq, getWindowControl(), handler);