From 6a9b1ce2a062699b6293dd61f4183e885f3b93c6 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Sun, 21 Jul 2019 08:48:02 +0200 Subject: [PATCH] OO-4159: implement a select page, show total number of rows in all --- .../flexible/elements/FlexiTableElement.java | 5 ++ .../table/AbstractFlexiTableRenderer.java | 13 ++++- .../elements/table/FlexiTableElementImpl.java | 51 +++++++++++++------ .../table/_i18n/LocalStrings_de.properties | 4 +- .../table/_i18n/LocalStrings_en.properties | 4 +- .../table/_i18n/LocalStrings_fr.properties | 2 + .../ui/ImportCurriculumController.java | 2 + 7 files changed, 63 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java index fa4dfd61809..2c861be83bc 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/elements/FlexiTableElement.java @@ -230,6 +230,11 @@ public interface FlexiTableElement extends FormItem { */ public void selectAll(); + /** + * Select all rows visible on the current page. + */ + public void selectPage(); + /** * Remove all multi selected index. */ diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java index dc310a1dcf1..b65247113ba 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java @@ -405,11 +405,22 @@ public abstract class AbstractFlexiTableRenderer extends DefaultComponentRendere sb.append("<div class='o_table_footer'><div class='o_table_checkall input-sm'>"); if(ftE.isSelectAllEnable()) { + FlexiTableDataModel<?> dataModel = ftE.getTableDataModel(); + int numOfRows = dataModel.getRowCount(); + sb.append("<a id='") .append(dispatchId).append("_sa' href=\"javascript:o_table_toggleCheck('").append(formName).append("', true);") .append(FormJSHelper.getXHRFnCallFor(ftE.getRootForm(), dispatchId, 1, true, true, true, new NameValuePair("select", "checkall"))) - .append("\"><i class='o_icon o_icon-lg o_icon_check_on'> </i> <span>").append(translator.translate("form.checkall")) + .append("\"><i class='o_icon o_icon-lg o_icon_check_on'> </i> <span>") + .append(translator.translate("form.checkall.numbered", new String[] { Integer.toString(numOfRows) })) + .append("</span></a>"); + + sb.append("<a id='") + .append(dispatchId).append("_sa' href=\"javascript:o_table_toggleCheck('").append(formName).append("', true);") + .append(FormJSHelper.getXHRFnCallFor(ftE.getRootForm(), dispatchId, 1, true, true, true, + new NameValuePair("select", "checkpage"))) + .append("\"><i class='o_icon o_icon-lg o_icon_check_on'> </i> <span>").append(translator.translate("form.checkpage")) .append("</span></a>"); sb.append("<a id='") 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 d6fad8e3d64..3e3819ce912 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 @@ -163,7 +163,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle for(int i=dataModel.getTableColumnModel().getColumnCount(); i-->0; ) { FlexiColumnModel col = dataModel.getTableColumnModel().getColumnModel(i); if(col.isDefaultVisible()) { - enabledColumnIndex.add(new Integer(col.getColumnIndex())); + enabledColumnIndex.add(Integer.valueOf(col.getColumnIndex())); } } @@ -923,6 +923,8 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle doExport(ureq); } else if(dispatchuri != null && select != null && select.equals("checkall")) { selectAll(); + } else if(dispatchuri != null && select != null && select.equals("checkpage")) { + selectPage(); } else if(dispatchuri != null && select != null && select.equals("uncheckall")) { doUnSelectAll(); } else if(customButton != null @@ -998,7 +1000,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle } else if(searchFieldEl.getComponent() == source) { if(event instanceof AutoCompleteEvent) { AutoCompleteEvent ace = (AutoCompleteEvent)event; - doSearch(ureq, FlexiTableSearchEvent.QUICK_SEARCH_KEY_SELECTION, ace.getKey(), null); + doSearch(ureq, FlexiTableReduceEvent.QUICK_SEARCH_KEY_SELECTION, ace.getKey(), null); } } } @@ -1081,7 +1083,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle for(int i=dataModel.getRowCount(); i-->0; ) { Object obj = dataModel.getObject(i); if(obj != null && selectedObjects.contains(obj)) { - multiSelectedIndex.put(new Integer(i), obj); + multiSelectedIndex.put(Integer.valueOf(i), obj); } } @@ -1184,7 +1186,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle } component.setDirty(true); - getRootForm().fireFormEvent(ureq, new FlexiTableFilterEvent(FlexiTableFilterEvent.FILTER, this, + getRootForm().fireFormEvent(ureq, new FlexiTableFilterEvent(FlexiTableReduceEvent.FILTER, this, getQuickSearchString(), getSelectedFilters(), getSelectedExtendedFilters(), null, FormEvent.ONCLICK)); } @@ -1213,7 +1215,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle } } - getRootForm().fireFormEvent(ureq, new FlexiTableSearchEvent(FlexiTableSearchEvent.EXTENDED_FILTER, this, + getRootForm().fireFormEvent(ureq, new FlexiTableSearchEvent(FlexiTableReduceEvent.EXTENDED_FILTER, this, getSearchText(), getSelectedFilters(), getSelectedExtendedFilters(), getConditionalQueries(), FormEvent.ONCLICK)); } @@ -1512,7 +1514,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle search = searchFieldEl.getValue(); } List<String> condQueries = extendedSearchCtrl.getConditionalQueries(); - doSearch(ureq, FlexiTableSearchEvent.SEARCH, search, condQueries); + doSearch(ureq, FlexiTableReduceEvent.SEARCH, search, condQueries); } protected void evalSearchRequest(UserRequest ureq) { @@ -1528,9 +1530,9 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle String search = searchFieldEl.getValue(); if(key != null) { - doSearch(ureq, FlexiTableSearchEvent.QUICK_SEARCH_KEY_SELECTION, key, null); + doSearch(ureq, FlexiTableReduceEvent.QUICK_SEARCH_KEY_SELECTION, key, null); } else if(StringHelper.containsNonWhitespace(search)) { - doSearch(ureq, FlexiTableSearchEvent.QUICK_SEARCH, search, null); + doSearch(ureq, FlexiTableReduceEvent.QUICK_SEARCH, search, null); } else { resetSearch(ureq); } @@ -1559,7 +1561,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle } if(StringHelper.containsNonWhitespace(search)) { searchFieldEl.setValue(search); - doSearch(ureq, FlexiTableSearchEvent.QUICK_SEARCH, search, null); + doSearch(ureq, FlexiTableReduceEvent.QUICK_SEARCH, search, null); } } @@ -1574,11 +1576,30 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle int numOfRows = getRowCount(); for(int i=0; i<numOfRows;i++) { Object objectRow = dataModel.getObject(i); - multiSelectedIndex.put(new Integer(i), objectRow); + multiSelectedIndex.put(Integer.valueOf(i), objectRow); } allSelectedNeedLoadOfWholeModel = true; } + @Override + public void selectPage() { + if(multiSelectedIndex != null) { + multiSelectedIndex.clear(); + } else { + multiSelectedIndex = new HashMap<>(); + } + + int firstRow = getFirstRow(); + int maxRows = getMaxRows(); + int rows = dataModel.getRowCount(); + int lastRow = Math.min(rows, firstRow + maxRows); + for (int i = firstRow; i < lastRow; i++) { + Object objectRow = dataModel.getObject(i); + multiSelectedIndex.put(Integer.valueOf(i), objectRow); + } + allSelectedNeedLoadOfWholeModel = false; + } + protected void doUnSelectAll() { if(multiSelectedIndex != null) { multiSelectedIndex.clear(); @@ -1668,7 +1689,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle @Override public boolean isMultiSelectedIndex(int index) { - return multiSelectedIndex != null && multiSelectedIndex.containsKey(new Integer(index)); + return multiSelectedIndex != null && multiSelectedIndex.containsKey(Integer.valueOf(index)); } protected void toogleSelectIndex(String selection) { @@ -1685,7 +1706,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle } try { - Integer row = new Integer(rowStr); + Integer row = Integer.valueOf(rowStr); if(multiSelectedIndex.containsKey(row)) { if(multiSelectedIndex.remove(row) != null && allSelectedNeedLoadOfWholeModel) { allSelectedNeedLoadOfWholeModel = false; @@ -1703,12 +1724,12 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle if(multiSelectedIndex == null) { multiSelectedIndex = new HashMap<>(); } - //selection format row_{formDispId}-{index} + // selection format row_{formDispId}-{index} if(selections != null && selections.length > 0) { int firstIndex = getPageSize() * getPage(); int lastResult = firstIndex + getPageSize() -1; for(int i=firstIndex; i<lastResult; i++) { - multiSelectedIndex.remove(new Integer(i)); + multiSelectedIndex.remove(Integer.valueOf(i)); } for(String selection:selections) { @@ -1717,7 +1738,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle String rowStr = selection.substring(index+1); int row = Integer.parseInt(rowStr); Object objectRow = dataModel.getObject(row); - multiSelectedIndex.put(new Integer(row), objectRow); + multiSelectedIndex.put(Integer.valueOf(row), objectRow); } } } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/_i18n/LocalStrings_de.properties index 9fd2ddba78e..88bcb8bda50 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/_i18n/LocalStrings_de.properties @@ -2,4 +2,6 @@ page.size.a=Zeige {0} bis {1} von {2} Zeilen. page.size.b=Eintr\u00E4ge pro Seite show.all=Alle -remove.filters=Filter entfernen \ No newline at end of file +remove.filters=Filter entfernen +form.checkall.numbered=Alle {0} Zeilen ausw\u00E4hlen +form.checkpage=Alle Zeilen der Seite ausw\u00E4hlen diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/_i18n/LocalStrings_en.properties index 006a8c00518..a3062842fa1 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/_i18n/LocalStrings_en.properties @@ -2,4 +2,6 @@ page.size.a=Show {0} to {1} of {2} rows. page.size.b=Entries per page show.all=All -remove.filters=Remove filters \ No newline at end of file +remove.filters=Remove filters +form.checkall.numbered=Select all {0} rows +form.checkpage=Select page's rows diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/_i18n/LocalStrings_fr.properties index efeb7e90534..f6771ff8112 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/_i18n/LocalStrings_fr.properties @@ -3,3 +3,5 @@ page.size.a=Montre {0} \u00E0 {1} de {2} lignes. page.size.b=Entr\u00E9es par page remove.filters=Enlever les filtres show.all=Toutes +form.checkall.numbered=S\u00E9lectionner toutes les {0} lignes +form.checkpage=S\u00E9lectionner la page diff --git a/src/main/java/org/olat/modules/curriculum/ui/ImportCurriculumController.java b/src/main/java/org/olat/modules/curriculum/ui/ImportCurriculumController.java index d30e910c3d6..b4427e95716 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/ImportCurriculumController.java +++ b/src/main/java/org/olat/modules/curriculum/ui/ImportCurriculumController.java @@ -75,9 +75,11 @@ public class ImportCurriculumController extends FormBasicController { protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { uploadFileEl = uifactory.addFileElement(getWindowControl(), "curriculum.file", formLayout); uploadFileEl.limitToMimeType(Collections.singleton("application/zip"), "error.mimetype", new String[]{ "ZIP" }); + uploadFileEl.setMandatory(true); uploadFileEl.addActionListener(FormEvent.ONCHANGE); displayNameEl = uifactory.addTextElement("curriculum.displayName", 255, "", formLayout); + displayNameEl.setMandatory(true); initFormOrganisations(formLayout, ureq.getUserSession()); -- GitLab