Skip to content
Snippets Groups Projects
Commit 520ee774 authored by uhensler's avatar uhensler
Browse files

OO-3844: Reordering GUI elements in analysis section

parent ee7e6529
No related branches found
No related tags found
No related merge requests found
Showing
with 302 additions and 327 deletions
...@@ -28,6 +28,9 @@ package org.olat.modules.quality.analysis; ...@@ -28,6 +28,9 @@ package org.olat.modules.quality.analysis;
public enum AnalysisSegment { public enum AnalysisSegment {
OVERVIEW, OVERVIEW,
TABLES,
DIAGRAMS,
SESSIONS,
HEAT_MAP; HEAT_MAP;
} }
...@@ -19,12 +19,14 @@ ...@@ -19,12 +19,14 @@
*/ */
package org.olat.modules.quality.analysis.ui; package org.olat.modules.quality.analysis.ui;
import java.util.Comparator;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component; import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.link.LinkFactory; import org.olat.core.gui.components.link.LinkFactory;
import org.olat.core.gui.components.stack.BreadcrumbedStackedPanel; import org.olat.core.gui.components.stack.BreadcrumbedStackedPanel;
import org.olat.core.gui.components.stack.PopEvent; import org.olat.core.gui.components.stack.ButtonGroupComponent;
import org.olat.core.gui.components.stack.TooledController; import org.olat.core.gui.components.stack.TooledController;
import org.olat.core.gui.components.stack.TooledStackedPanel; import org.olat.core.gui.components.stack.TooledStackedPanel;
import org.olat.core.gui.components.stack.TooledStackedPanel.Align; import org.olat.core.gui.components.stack.TooledStackedPanel.Align;
...@@ -33,14 +35,34 @@ import org.olat.core.gui.control.Controller; ...@@ -33,14 +35,34 @@ import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event; import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
import org.olat.modules.forms.EvaluationFormManager; import org.olat.modules.forms.EvaluationFormManager;
import org.olat.modules.forms.EvaluationFormSession;
import org.olat.modules.forms.Figures;
import org.olat.modules.forms.FiguresBuilder;
import org.olat.modules.forms.SessionFilter;
import org.olat.modules.forms.handler.DefaultReportProvider;
import org.olat.modules.forms.handler.MultipleChoiceTableHandler;
import org.olat.modules.forms.handler.RubricTableHandler;
import org.olat.modules.forms.handler.SingleChoiceTableHandler;
import org.olat.modules.forms.model.xml.Form; import org.olat.modules.forms.model.xml.Form;
import org.olat.modules.forms.ui.ReportSegment; import org.olat.modules.forms.model.xml.MultipleChoice;
import org.olat.modules.forms.ui.ReportSegmentEvent; import org.olat.modules.forms.model.xml.Rubric;
import org.olat.modules.forms.model.xml.SingleChoice;
import org.olat.modules.forms.ui.EvaluationFormExcelExport;
import org.olat.modules.forms.ui.EvaluationFormOverviewController;
import org.olat.modules.forms.ui.EvaluationFormPrintSelectionController;
import org.olat.modules.forms.ui.EvaluationFormReportController;
import org.olat.modules.forms.ui.EvaluationFormSessionSelectionController;
import org.olat.modules.forms.ui.LegendNameGenerator;
import org.olat.modules.forms.ui.NameShuffleAnonymousComparator;
import org.olat.modules.forms.ui.ReportHelper;
import org.olat.modules.forms.ui.SessionInformationLegendNameGenerator;
import org.olat.modules.quality.analysis.AnalysisPresentation; import org.olat.modules.quality.analysis.AnalysisPresentation;
import org.olat.modules.quality.analysis.AnalysisSearchParameter; import org.olat.modules.quality.analysis.AnalysisSearchParameter;
import org.olat.modules.quality.analysis.AnalysisSegment; import org.olat.modules.quality.analysis.AnalysisSegment;
import org.olat.modules.quality.analysis.AnlaysisFigures;
import org.olat.modules.quality.analysis.AvailableAttributes; import org.olat.modules.quality.analysis.AvailableAttributes;
import org.olat.modules.quality.analysis.MultiGroupBy; import org.olat.modules.quality.analysis.MultiGroupBy;
import org.olat.modules.quality.analysis.QualityAnalysisService; import org.olat.modules.quality.analysis.QualityAnalysisService;
...@@ -56,25 +78,44 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -56,25 +78,44 @@ import org.springframework.beans.factory.annotation.Autowired;
*/ */
public class AnalysisController extends BasicController implements TooledController { public class AnalysisController extends BasicController implements TooledController {
private static final String SEGMENTS_CMP = "presentation";
private final VelocityContainer mainVC;
private final ButtonGroupComponent segmentButtonsCmp;
private final Link overviewReportLink;
private final Link tableReportLink;
private final Link diagramReportLink;
private final Link sessionSelectionLink;
private final Link heatMapLink;
private Link editPresentationLink; private Link editPresentationLink;
private Link deletePresentationLink; private Link deletePresentationLink;
private Link printLink;
private Link exportLink;
private Link showFilterLink; private Link showFilterLink;
private Link hideFilterLink; private Link hideFilterLink;
private VelocityContainer mainVC; private Controller overviewCtrl;
private Controller tableReportCtrl;
private Controller diagramReportCtrl;
private EvaluationFormSessionSelectionController sessionSelectionCtrl;
private FilterableController heatMapCtrl;
private Controller filterCtrl; private Controller filterCtrl;
private FilterableController filterableCtrl;
private BreadcrumbedStackedPanel stackedDetailsPanel; private BreadcrumbedStackedPanel stackedDetailsPanel;
private CloseableModalController cmc; private CloseableModalController cmc;
private PresentationController presentationCtrl; private PresentationController presentationCtrl;
private PresentationDeleteConfirmationController presentationDeleteCtrl; private PresentationDeleteConfirmationController presentationDeleteCtrl;
private CloseableCalloutWindowController calloutCtrl;
private EvaluationFormPrintSelectionController printSelectionCtrl;
private final MainSecurityCallback secCallback; private final MainSecurityCallback secCallback;
private final TooledStackedPanel stackPanel; private final TooledStackedPanel stackPanel;
private final Form form; private final Form form;
private final AvailableAttributes availableAttributes; private final AvailableAttributes availableAttributes;
private SessionFilter reportSessionFilter;
private ReportHelper reportHelper;
private Figures reportFigures;
private AnalysisPresentation presentation; private AnalysisPresentation presentation;
private ReportSegment currentReportSegment;
@Autowired @Autowired
private QualityAnalysisService analysisService; private QualityAnalysisService analysisService;
...@@ -89,6 +130,19 @@ public class AnalysisController extends BasicController implements TooledControl ...@@ -89,6 +130,19 @@ public class AnalysisController extends BasicController implements TooledControl
stackPanel.addListener(this); stackPanel.addListener(this);
this.presentation = presentation; this.presentation = presentation;
this.form = evaluationFormManager.loadForm(presentation.getFormEntry()); this.form = evaluationFormManager.loadForm(presentation.getFormEntry());
segmentButtonsCmp = new ButtonGroupComponent("segments");
overviewReportLink = LinkFactory.createLink("segments.table.overview", getTranslator(), this);
segmentButtonsCmp.addButton(overviewReportLink, true);
tableReportLink = LinkFactory.createLink("segments.table.report", getTranslator(), this);
segmentButtonsCmp.addButton(tableReportLink, false);
diagramReportLink = LinkFactory.createLink("segments.diagram.report", getTranslator(), this);
segmentButtonsCmp.addButton(diagramReportLink, false);
sessionSelectionLink = LinkFactory.createLink("segments.session.selection", getTranslator(), this);
segmentButtonsCmp.addButton(sessionSelectionLink, false);
heatMapLink = LinkFactory.createLink("segments.heatmap.link", getTranslator(), this);
segmentButtonsCmp.addButton(heatMapLink, false);
mainVC = createVelocityContainer("analysis"); mainVC = createVelocityContainer("analysis");
putInitialPanel(mainVC); putInitialPanel(mainVC);
...@@ -96,12 +150,16 @@ public class AnalysisController extends BasicController implements TooledControl ...@@ -96,12 +150,16 @@ public class AnalysisController extends BasicController implements TooledControl
filterCtrl= new FilterController(ureq, wControl, form, presentation.getSearchParams(), availableAttributes); filterCtrl= new FilterController(ureq, wControl, form, presentation.getSearchParams(), availableAttributes);
listenTo(filterCtrl); listenTo(filterCtrl);
mainVC.put("filter", filterCtrl.getInitialComponent()); mainVC.put("filter", filterCtrl.getInitialComponent());
doOpenSegment(ureq, presentation.getAnalysisSegment());
} }
@Override @Override
public void initTools() { public void initTools() {
initPresentationTools(); initPresentationTools();
initOutputTools();
initFilterTools(); initFilterTools();
stackPanel.addTool(segmentButtonsCmp, true);
} }
private void initPresentationTools() { private void initPresentationTools() {
...@@ -119,6 +177,15 @@ public class AnalysisController extends BasicController implements TooledControl ...@@ -119,6 +177,15 @@ public class AnalysisController extends BasicController implements TooledControl
} }
} }
private void initOutputTools() {
printLink = LinkFactory.createToolLink("analysis.print", translate("analysis.print"), this);
printLink.setIconLeftCSS("o_icon o_icon-fw o_icon_qual_ana_print");
stackPanel.addTool(printLink, Align.right);
exportLink = LinkFactory.createToolLink("analysis.export", translate("analysis.export"), this);
exportLink.setIconLeftCSS("o_icon o_icon-fw o_icon_qual_ana_export");
stackPanel.addTool(exportLink, Align.right);
}
private void initFilterTools() { private void initFilterTools() {
showFilterLink = LinkFactory.createToolLink("filter.show", translate("filter.show"), this); showFilterLink = LinkFactory.createToolLink("filter.show", translate("filter.show"), this);
showFilterLink.setIconLeftCSS("o_icon o_icon-fw o_icon_qual_ana_show_filter"); showFilterLink.setIconLeftCSS("o_icon o_icon-fw o_icon_qual_ana_show_filter");
...@@ -126,24 +193,31 @@ public class AnalysisController extends BasicController implements TooledControl ...@@ -126,24 +193,31 @@ public class AnalysisController extends BasicController implements TooledControl
hideFilterLink.setIconLeftCSS("o_icon o_icon-fw o_icon_qual_ana_hide_filter"); hideFilterLink.setIconLeftCSS("o_icon o_icon-fw o_icon_qual_ana_hide_filter");
doHideFilter(); doHideFilter();
} }
@Override @Override
protected void event(UserRequest ureq, Component source, Event event) { protected void event(UserRequest ureq, Component source, Event event) {
if (source == editPresentationLink) { if (source == editPresentationLink) {
doEditPresentation(ureq); doEditPresentation(ureq);
} else if (source == deletePresentationLink) { } else if (source == deletePresentationLink) {
doConfirmDeletePresentation(ureq); doConfirmDeletePresentation(ureq);
} else if (source == printLink) {
doOpenPrintSelection(ureq);
} else if (source == exportLink) {
doExport(ureq);
} else if (source == showFilterLink) { } else if (source == showFilterLink) {
doShowFilter(); doShowFilter();
} else if (source == hideFilterLink) { } else if (source == hideFilterLink) {
doHideFilter(); doHideFilter();
} else if (stackPanel == source && stackPanel.getLastController() == this && event instanceof PopEvent) { } else if (source == overviewReportLink) {
PopEvent popEvent = (PopEvent) event; doOpenSegment(ureq, AnalysisSegment.OVERVIEW);
if (popEvent.isClose()) { } else if (source == tableReportLink) {
stackPanel.popController(this); doOpenSegment(ureq, AnalysisSegment.TABLES);
} else { } else if (source == diagramReportLink) {
setSegment(ureq, AnalysisSegment.OVERVIEW); doOpenSegment(ureq, AnalysisSegment.DIAGRAMS);
} } else if (source == sessionSelectionLink) {
doOpenSegment(ureq, AnalysisSegment.SESSIONS);
} else if (source == heatMapLink) {
doOpenSegment(ureq, AnalysisSegment.HEAT_MAP);
} }
} }
...@@ -152,14 +226,9 @@ public class AnalysisController extends BasicController implements TooledControl ...@@ -152,14 +226,9 @@ public class AnalysisController extends BasicController implements TooledControl
if (source == filterCtrl && event instanceof AnalysisFilterEvent) { if (source == filterCtrl && event instanceof AnalysisFilterEvent) {
AnalysisFilterEvent filterEvent = (AnalysisFilterEvent) event; AnalysisFilterEvent filterEvent = (AnalysisFilterEvent) event;
AnalysisSearchParameter searchParams = filterEvent.getSearchParams(); AnalysisSearchParameter searchParams = filterEvent.getSearchParams();
presentation.setSearchParams(searchParams); doFilter(ureq, searchParams);
filterableCtrl.onFilter(ureq, searchParams); } else if (source == heatMapCtrl) {
} else if (source == filterableCtrl) { if (event instanceof AnalysisGroupingEvent) {
if (event instanceof ReportSegmentEvent) {
// Save current segment between analysis segment changes
ReportSegmentEvent rsEvent = (ReportSegmentEvent) event;
currentReportSegment = rsEvent.getSegment();
} else if (event instanceof AnalysisGroupingEvent) {
AnalysisGroupingEvent groupingEvent = (AnalysisGroupingEvent) event; AnalysisGroupingEvent groupingEvent = (AnalysisGroupingEvent) event;
MultiGroupBy multiGroupBy = groupingEvent.getMultiGroupBy(); MultiGroupBy multiGroupBy = groupingEvent.getMultiGroupBy();
presentation.setHeatMapGrouping(multiGroupBy); presentation.setHeatMapGrouping(multiGroupBy);
...@@ -187,6 +256,9 @@ public class AnalysisController extends BasicController implements TooledControl ...@@ -187,6 +256,9 @@ public class AnalysisController extends BasicController implements TooledControl
} }
cmc.deactivate(); cmc.deactivate();
cleanUp(); cleanUp();
} else if (source == printSelectionCtrl) {
calloutCtrl.deactivate();
cleanUp();
} else if (source == cmc) { } else if (source == cmc) {
cleanUp(); cleanUp();
} }
...@@ -196,45 +268,127 @@ public class AnalysisController extends BasicController implements TooledControl ...@@ -196,45 +268,127 @@ public class AnalysisController extends BasicController implements TooledControl
private void cleanUp() { private void cleanUp() {
removeAsListenerAndDispose(presentationDeleteCtrl); removeAsListenerAndDispose(presentationDeleteCtrl);
removeAsListenerAndDispose(presentationCtrl); removeAsListenerAndDispose(presentationCtrl);
removeAsListenerAndDispose(calloutCtrl);
removeAsListenerAndDispose(cmc); removeAsListenerAndDispose(cmc);
presentationDeleteCtrl = null; presentationDeleteCtrl = null;
presentationCtrl = null; presentationCtrl = null;
calloutCtrl = null;
cmc = null; cmc = null;
} }
@Override @Override
protected void doDispose() { protected void doDispose() {
cleanUpReports();
if (stackPanel != null) { if (stackPanel != null) {
stackPanel.removeListener(this); stackPanel.removeListener(this);
} }
} }
public void setSegment(UserRequest ureq, AnalysisSegment segment) { private void cleanUpReports() {
removeAsListenerAndDispose(filterableCtrl); removeAsListenerAndDispose(overviewCtrl);
filterableCtrl = null; removeAsListenerAndDispose(tableReportCtrl);
removeAsListenerAndDispose(diagramReportCtrl);
removeAsListenerAndDispose(sessionSelectionCtrl);
overviewCtrl = null;
tableReportCtrl = null;
diagramReportCtrl = null;
sessionSelectionCtrl = null;
}
private void doFilter(UserRequest ureq, AnalysisSearchParameter searchParams) {
presentation.setSearchParams(searchParams);
// Report controller can not be filtered. So delete them and recreate it the next shown time.
cleanUpReports();
reportSessionFilter = null;
reportHelper = null;
reportFigures = null;
if (heatMapCtrl != null) {
heatMapCtrl.onFilter(ureq, searchParams);
}
doOpenSegment(ureq, presentation.getAnalysisSegment());
}
private void doOpenSegment(UserRequest ureq, AnalysisSegment segment) {
presentation.setAnalysisSegment(segment); presentation.setAnalysisSegment(segment);
switch (segment) { switch (segment) {
case OVERVIEW: case OVERVIEW:
filterableCtrl = new AnalysisReportController(ureq, getWindowControl(), form, doOpenOverviewReport(ureq);
presentation.getFormEntry().getDisplayname(), currentReportSegment); break;
case TABLES:
doOpenTableReport(ureq);
break;
case DIAGRAMS:
doOpenDiagramReport(ureq);
break;
case SESSIONS:
doOpenSessionSelection(ureq);
break; break;
case HEAT_MAP: case HEAT_MAP:
filterableCtrl = new HeatMapController(ureq, getWindowControl(), form, availableAttributes, presentation.getHeatMapGrouping(), doOpenHeatMap(ureq);
presentation.getHeatMapInsufficientOnly());
break; break;
default: default:
filterableCtrl = new AnalysisReportController(ureq, getWindowControl(), form, doOpenOverviewReport(ureq);
presentation.getFormEntry().getDisplayname(), currentReportSegment);
break; break;
} }
listenTo(filterableCtrl); }
filterableCtrl.onFilter(ureq, presentation.getSearchParams());
stackedDetailsPanel = new BreadcrumbedStackedPanel("forms", getTranslator(), filterableCtrl); private void doOpenOverviewReport(UserRequest ureq) {
stackedDetailsPanel.pushController(translate("analysis.details"), filterableCtrl); removeAsListenerAndDispose(overviewCtrl);
filterableCtrl.setBreadcrumbPanel(stackedDetailsPanel);
mainVC.put("presentation", stackedDetailsPanel); overviewCtrl = new EvaluationFormOverviewController(ureq, getWindowControl(), form, getReportSessionFilter(), getReportFigures());
mainVC.setDirty(true); mainVC.put(SEGMENTS_CMP, overviewCtrl.getInitialComponent());
segmentButtonsCmp.setSelectedButton(overviewReportLink);
}
private void doOpenTableReport(UserRequest ureq) {
removeAsListenerAndDispose(tableReportCtrl);
DefaultReportProvider provider = new DefaultReportProvider();
provider.put(Rubric.TYPE, new RubricTableHandler());
provider.put(SingleChoice.TYPE, new SingleChoiceTableHandler());
provider.put(MultipleChoice.TYPE, new MultipleChoiceTableHandler());
tableReportCtrl = new EvaluationFormReportController(ureq, getWindowControl(), form, getReportSessionFilter(), provider, getReportHelper(), null);
listenTo(tableReportCtrl);
mainVC.put(SEGMENTS_CMP, tableReportCtrl.getInitialComponent());
segmentButtonsCmp.setSelectedButton(tableReportLink);
}
private void doOpenDiagramReport(UserRequest ureq) {
removeAsListenerAndDispose(diagramReportCtrl);
DefaultReportProvider provider = new DefaultReportProvider();
diagramReportCtrl = new EvaluationFormReportController(ureq, getWindowControl(), form, getReportSessionFilter(), provider, getReportHelper(), null);
listenTo(diagramReportCtrl);
mainVC.put(SEGMENTS_CMP, diagramReportCtrl.getInitialComponent());
segmentButtonsCmp.setSelectedButton(diagramReportLink);
}
private void doOpenSessionSelection(UserRequest ureq) {
removeAsListenerAndDispose(sessionSelectionCtrl);
sessionSelectionCtrl = new EvaluationFormSessionSelectionController(ureq, getWindowControl(), form, getReportSessionFilter(), getReportHelper(), null);
BreadcrumbedStackedPanel stackedSessionPanel = new BreadcrumbedStackedPanel("forms", getTranslator(), sessionSelectionCtrl);
stackedSessionPanel.pushController(translate("analysis.session.forms"), sessionSelectionCtrl);
sessionSelectionCtrl.setBreadcrumbPanel(stackedSessionPanel);
mainVC.put(SEGMENTS_CMP, stackedSessionPanel);
segmentButtonsCmp.setSelectedButton(sessionSelectionLink);
}
private void doOpenHeatMap(UserRequest ureq) {
if (heatMapCtrl == null) {
heatMapCtrl = new HeatMapController(ureq, getWindowControl(), form, availableAttributes, presentation.getHeatMapGrouping(),
presentation.getHeatMapInsufficientOnly());
listenTo(heatMapCtrl);
heatMapCtrl.onFilter(ureq, presentation.getSearchParams());
stackedDetailsPanel = new BreadcrumbedStackedPanel("forms", getTranslator(), heatMapCtrl);
stackedDetailsPanel.pushController(translate("analysis.details"), heatMapCtrl);
heatMapCtrl.setBreadcrumbPanel(stackedDetailsPanel);
}
mainVC.put(SEGMENTS_CMP, stackedDetailsPanel);
segmentButtonsCmp.setSelectedButton(heatMapLink);
} }
private void doEditPresentation(UserRequest ureq) { private void doEditPresentation(UserRequest ureq) {
...@@ -252,6 +406,7 @@ public class AnalysisController extends BasicController implements TooledControl ...@@ -252,6 +406,7 @@ public class AnalysisController extends BasicController implements TooledControl
// refresh to avoid LazyInitializationException if access formEntry // refresh to avoid LazyInitializationException if access formEntry
presentation = analysisService.loadPresentationByKey(presentation); presentation = analysisService.loadPresentationByKey(presentation);
initPresentationTools(); initPresentationTools();
stackPanel.changeDisplayname(presentation.getName());
} }
private void doClonePresentation(AnalysisPresentation editetPresentation) { private void doClonePresentation(AnalysisPresentation editetPresentation) {
...@@ -275,8 +430,29 @@ public class AnalysisController extends BasicController implements TooledControl ...@@ -275,8 +430,29 @@ public class AnalysisController extends BasicController implements TooledControl
analysisService.deletePresentation(presentation); analysisService.deletePresentation(presentation);
presentation = clone; presentation = clone;
initPresentationTools(); initPresentationTools();
stackPanel.changeDisplayname(presentation.getFormEntry().getDisplayname());
}
private void doOpenPrintSelection(UserRequest ureq) {
if (printSelectionCtrl == null) {
printSelectionCtrl = new EvaluationFormPrintSelectionController(ureq, getWindowControl(), form, getReportSessionFilter(),
getReportFigures(), getReportHelper());
listenTo(printSelectionCtrl);
}
removeAsListenerAndDispose(calloutCtrl);
calloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(),
printSelectionCtrl.getInitialComponent(), printLink, "", true, null);
listenTo(calloutCtrl);
calloutCtrl.activate();
} }
private void doExport(UserRequest ureq) {
String surveyName = "survey";
EvaluationFormExcelExport export = new EvaluationFormExcelExport(form, getReportSessionFilter(), getReportHelper(), surveyName);
ureq.getDispatchResult().setResultingMediaResource(export.createMediaResource());
}
private void doShowFilter() { private void doShowFilter() {
stackPanel.addTool(hideFilterLink, Align.right); stackPanel.addTool(hideFilterLink, Align.right);
stackPanel.removeTool(showFilterLink); stackPanel.removeTool(showFilterLink);
...@@ -288,5 +464,38 @@ public class AnalysisController extends BasicController implements TooledControl ...@@ -288,5 +464,38 @@ public class AnalysisController extends BasicController implements TooledControl
stackPanel.removeTool(hideFilterLink); stackPanel.removeTool(hideFilterLink);
mainVC.contextPut("filterSwitch", Boolean.FALSE); mainVC.contextPut("filterSwitch", Boolean.FALSE);
} }
private SessionFilter getReportSessionFilter() {
if (reportSessionFilter == null) {
reportSessionFilter = analysisService.createSessionFilter(presentation.getSearchParams());
}
return reportSessionFilter;
}
private ReportHelper getReportHelper() {
if (reportHelper == null) {
Comparator<EvaluationFormSession> comparator = new NameShuffleAnonymousComparator();
LegendNameGenerator legendNameGenerator = new SessionInformationLegendNameGenerator(getReportSessionFilter());
reportHelper = ReportHelper.builder(getLocale())
.withLegendNameGenrator(legendNameGenerator)
.withSessionComparator(comparator)
.withColors()
.build();
}
return reportHelper;
}
private Figures getReportFigures() {
if (reportFigures == null) {
FiguresBuilder figuresBuilder = FiguresBuilder.builder();
figuresBuilder.addCustomFigure(translate("report.figure.form.name"), presentation.getFormEntry().getDisplayname());
AnlaysisFigures analyticFigures = analysisService.loadFigures(presentation.getSearchParams());
figuresBuilder.withNumberOfParticipations(analyticFigures.getParticipationCount());
figuresBuilder.addCustomFigure(translate("report.figure.number.data.collections"),
analyticFigures.getDataCollectionCount().toString());
reportFigures = figuresBuilder.build();
}
return reportFigures;
}
} }
...@@ -78,7 +78,7 @@ public class AnalysisListController extends FormBasicController implements Flexi ...@@ -78,7 +78,7 @@ public class AnalysisListController extends FormBasicController implements Flexi
private FlexiTableElement tableEl; private FlexiTableElement tableEl;
private AnalysisDataModel dataModel; private AnalysisDataModel dataModel;
private AnalysisSegmentsController analysisCtrl; private AnalysisController analysisCtrl;
private int counter = 0; private int counter = 0;
private AnalysisPresentation presentation; private AnalysisPresentation presentation;
...@@ -237,11 +237,10 @@ public class AnalysisListController extends FormBasicController implements Flexi ...@@ -237,11 +237,10 @@ public class AnalysisListController extends FormBasicController implements Flexi
private void doOpenAnalysis(UserRequest ureq) { private void doOpenAnalysis(UserRequest ureq) {
OLATResourceable ores = getOlatResourceable(presentation); OLATResourceable ores = getOlatResourceable(presentation);
WindowControl bwControl = addToHistory(ureq, ores, null); WindowControl bwControl = addToHistory(ureq, ores, null);
analysisCtrl = new AnalysisSegmentsController(ureq, bwControl, secCallback, stackPanel, presentation); analysisCtrl = new AnalysisController(ureq, bwControl, secCallback, stackPanel, presentation);
listenTo(analysisCtrl); listenTo(analysisCtrl);
String title = getBreadcrumbTitle(presentation); String title = getBreadcrumbTitle(presentation);
stackPanel.pushController(title, analysisCtrl); stackPanel.pushController(title, analysisCtrl);
analysisCtrl.activate(ureq, null, null);
} }
private String getBreadcrumbTitle(AnalysisPresentation presentation) { private String getBreadcrumbTitle(AnalysisPresentation presentation) {
......
/**
* <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.modules.quality.analysis.ui;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.stack.BreadcrumbPanel;
import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController;
import org.olat.modules.forms.FiguresBuilder;
import org.olat.modules.forms.SessionFilter;
import org.olat.modules.forms.model.xml.Form;
import org.olat.modules.forms.ui.EvaluationFormReportsController;
import org.olat.modules.forms.ui.ReportSegment;
import org.olat.modules.forms.ui.ReportSegmentEvent;
import org.olat.modules.quality.analysis.AnalysisSearchParameter;
import org.olat.modules.quality.analysis.AnlaysisFigures;
import org.olat.modules.quality.analysis.QualityAnalysisService;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* Initial date: 04.09.2018<br>
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
*
*/
public class AnalysisReportController extends BasicController implements FilterableController {
private final VelocityContainer mainVC;
private EvaluationFormReportsController reportsCtrl;
private final Form form;
private final String formName;
private ReportSegment currentSegment;
@Autowired
private QualityAnalysisService analysisService;
public AnalysisReportController(UserRequest ureq, WindowControl wControl, Form form, String formName,
ReportSegment currentSegment) {
super(ureq, wControl);
this.form = form;
this.formName = formName;
this.currentSegment = currentSegment;
mainVC = createVelocityContainer("reporting");
putInitialPanel(mainVC);
}
@Override
public void setBreadcrumbPanel(BreadcrumbPanel stackPanel) {
//
}
@Override
public void onFilter(UserRequest ureq, AnalysisSearchParameter searchParams) {
mainVC.clear();
SessionFilter filter = analysisService.createSessionFilter(searchParams);
FiguresBuilder figuresBuilder = FiguresBuilder.builder();
figuresBuilder.addCustomFigure(translate("report.figure.form.name"), formName);
AnlaysisFigures analyticFigures = analysisService.loadFigures(searchParams);
figuresBuilder.withNumberOfParticipations(analyticFigures.getParticipationCount());
figuresBuilder.addCustomFigure(translate("report.figure.number.data.collections"),
analyticFigures.getDataCollectionCount().toString());
reportsCtrl = new EvaluationFormReportsController(ureq, getWindowControl(), form, filter, currentSegment, null, figuresBuilder.build());
listenTo(reportsCtrl);
mainVC.put("report", reportsCtrl.getInitialComponent());
}
@Override
protected void event(UserRequest ureq, Component source, Event event) {
//
}
@Override
protected void event(UserRequest ureq, Controller source, Event event) {
if (source == reportsCtrl && event instanceof ReportSegmentEvent) {
// Save current segment between filter changes
ReportSegmentEvent rsEvent = (ReportSegmentEvent) event;
currentSegment = rsEvent.getSegment();
fireEvent(ureq, event);
}
super.event(ureq, source, event);
}
@Override
protected void doDispose() {
//
}
}
/**
* <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.modules.quality.analysis.ui;
import java.util.List;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.link.LinkFactory;
import org.olat.core.gui.components.panel.Panel;
import org.olat.core.gui.components.panel.SimpleStackedPanel;
import org.olat.core.gui.components.panel.StackedPanel;
import org.olat.core.gui.components.stack.ButtonGroupComponent;
import org.olat.core.gui.components.stack.PopEvent;
import org.olat.core.gui.components.stack.TooledController;
import org.olat.core.gui.components.stack.TooledStackedPanel;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.gui.control.generic.dtabs.Activateable2;
import org.olat.core.id.context.ContextEntry;
import org.olat.core.id.context.StateEntry;
import org.olat.modules.quality.analysis.AnalysisPresentation;
import org.olat.modules.quality.analysis.AnalysisSegment;
import org.olat.modules.quality.ui.security.MainSecurityCallback;
/**
*
* Initial date: 04.09.2018<br>
* @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
*
*/
public class AnalysisSegmentsController extends BasicController implements TooledController, Activateable2 {
private final TooledStackedPanel stackPanel;
private final StackedPanel mainPanel;
private final ButtonGroupComponent segmentButtonsCmp;
private Link reportLink;
private Link heatMapLink;
private AnalysisController analysisCtrl;
private final MainSecurityCallback secCallback;
private final AnalysisPresentation presentation;
public AnalysisSegmentsController(UserRequest ureq, WindowControl wControl, MainSecurityCallback secCallback,
TooledStackedPanel stackPanel, AnalysisPresentation presentation) {
super(ureq, wControl);
this.secCallback = secCallback;
this.stackPanel = stackPanel;
stackPanel.addListener(this);
this.presentation = presentation;
segmentButtonsCmp = new ButtonGroupComponent("segments");
reportLink = LinkFactory.createLink("segments.report.link", getTranslator(), this);
segmentButtonsCmp.addButton(reportLink, false);
heatMapLink = LinkFactory.createLink("segments.heatmap.link", getTranslator(), this);
segmentButtonsCmp.addButton(heatMapLink, false);
mainPanel = putInitialPanel(new SimpleStackedPanel("analysisSegments"));
mainPanel.setContent(new Panel("empty"));
}
@Override
public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
switch (presentation.getAnalysisSegment()) {
case HEAT_MAP:
doOpenHeatMap(ureq);
break;
case OVERVIEW:
doOpenReport(ureq);
break;
default:
doOpenReport(ureq);
break;
}
}
@Override
public void initTools() {
stackPanel.addTool(segmentButtonsCmp, true);
}
@Override
protected void event(UserRequest ureq, Component source, Event event) {
if (reportLink == source) {
doOpenReport(ureq);
} else if (heatMapLink == source) {
doOpenHeatMap(ureq);
} else if (stackPanel == source && stackPanel.getLastController() == this && event instanceof PopEvent) {
PopEvent popEvent = (PopEvent) event;
if (popEvent.isClose()) {
stackPanel.popController(this);
} else {
doOpenReport(ureq);
}
}
}
private void doOpenReport(UserRequest ureq) {
doOpenSegment(ureq, AnalysisSegment.OVERVIEW, translate("segments.report.breadcrumb"), reportLink);
}
private void doOpenHeatMap(UserRequest ureq) {
doOpenSegment(ureq, AnalysisSegment.HEAT_MAP, translate("segments.heatmap.breadcrumb"), heatMapLink);
}
private void doOpenSegment(UserRequest ureq, AnalysisSegment segment, String breadcrumb, Link segmentLink) {
doOpenAnalysis(ureq);
analysisCtrl.setSegment(ureq, segment);
stackPanel.changeDisplayname(breadcrumb);
segmentButtonsCmp.setSelectedButton(segmentLink);
}
private void doOpenAnalysis(UserRequest ureq) {
if (analysisCtrl == null) {
analysisCtrl = new AnalysisController(ureq, getWindowControl(), secCallback, stackPanel, presentation);
listenTo(analysisCtrl);
stackPanel.pushController("segments.report.breadcrumb", analysisCtrl);
}
}
@Override
protected void doDispose() {
if(stackPanel != null) {
stackPanel.removeListener(this);
}
}
}
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
</div> </div>
</div> </div>
#else #else
<div class="col-md-12"> <div class="col-md-12 o_eva_report">
$r.render("presentation") $r.render("presentation")
</div> </div>
#end #end
......
analysis.details=Details analysis.details=Details
analysis.export=Export
analysis.print=Drucken
analysis.session.forms=$org.olat.modules.forms.ui\:reports.session.forms
analysis.table.data.collections.latest=Letzte Datenerhebung analysis.table.data.collections.latest=Letzte Datenerhebung
analysis.table.data.collections.number=Datenerhebungen analysis.table.data.collections.number=Datenerhebungen
analysis.table.data.collections.soonest=Erste Datenerhebung analysis.table.data.collections.soonest=Erste Datenerhebung
...@@ -82,10 +85,14 @@ presentation.replace.button=Ersetzen ...@@ -82,10 +85,14 @@ presentation.replace.button=Ersetzen
presentation.replace.selection=Gespeicherte Ansicht ersetzen presentation.replace.selection=Gespeicherte Ansicht ersetzen
report.figure.form.name=Fragebogen report.figure.form.name=Fragebogen
report.figure.number.data.collections=Anzahl Datenerhebungen report.figure.number.data.collections=Anzahl Datenerhebungen
segments.diagram.report=$org.olat.modules.forms.ui\:reports.diagram.report
segments.heatmap.breadcrumb=Heatmap segments.heatmap.breadcrumb=Heatmap
segments.heatmap.link=Heatmap segments.heatmap.link=Heatmap
segments.report.breadcrumb=Report segments.report.breadcrumb=Report
segments.report.link=Report segments.report.link=Report
segments.session.selection=$org.olat.modules.forms.ui\:reports.session.selection
segments.table.overview=$org.olat.modules.forms.ui\:reports.table.overview
segments.table.report=$org.olat.modules.forms.ui\:reports.table.report
segments.trend.link=Trend segments.trend.link=Trend
slider.trend.empty=Das Trenddiagramm enth\u00E4lt keine Daten slider.trend.empty=Das Trenddiagramm enth\u00E4lt keine Daten
slider.trend.group.panel.header=Gruppierung slider.trend.group.panel.header=Gruppierung
......
analysis.details=Details analysis.details=Details
analysis.export=Export
analysis.print=Print
analysis.session.forms=$org.olat.modules.forms.ui\:reports.session.forms
analysis.table.data.collections.latest=Latest data collection analysis.table.data.collections.latest=Latest data collection
analysis.table.data.collections.number=Data collections analysis.table.data.collections.number=Data collections
analysis.table.data.collections.soonest=Soonest data collection analysis.table.data.collections.soonest=Soonest data collection
...@@ -82,10 +85,14 @@ presentation.replace.button=Replace ...@@ -82,10 +85,14 @@ presentation.replace.button=Replace
presentation.replace.selection=Replace saved view presentation.replace.selection=Replace saved view
report.figure.form.name=Questionnaire report.figure.form.name=Questionnaire
report.figure.number.data.collections=Number of data collections report.figure.number.data.collections=Number of data collections
segments.diagram.report=$org.olat.modules.forms.ui\:reports.diagram.report
segments.heatmap.breadcrumb=Heat map segments.heatmap.breadcrumb=Heat map
segments.heatmap.link=Heat map segments.heatmap.link=Heat map
segments.report.breadcrumb=Report segments.report.breadcrumb=Report
segments.report.link=Report segments.report.link=Report
segments.session.selection=$org.olat.modules.forms.ui\:reports.session.selection
segments.table.overview=$org.olat.modules.forms.ui\:reports.table.overview
segments.table.report=$org.olat.modules.forms.ui\:reports.table.report
segments.trend.link=Trend segments.trend.link=Trend
slider.trend.empty=The trend diagram contains no data. slider.trend.empty=The trend diagram contains no data.
slider.trend.group.panel.header=Grouping slider.trend.group.panel.header=Grouping
......
#Wed Jan 23 18:35:59 CET 2019 #Wed Jan 23 18:35:59 CET 2019
analysis.details=D\u00E9tails analysis.details=D\u00E9tails
analysis.session.forms=$org.olat.modules.forms.ui\:reports.session.forms
analysis.table.data.collections.latest=Derni\u00E8re collecte de donn\u00E9es analysis.table.data.collections.latest=Derni\u00E8re collecte de donn\u00E9es
analysis.table.data.collections.number=Collectes de donn\u00E9es analysis.table.data.collections.number=Collectes de donn\u00E9es
analysis.table.data.collections.soonest=Premi\u00E8re collecte de donn\u00E9es analysis.table.data.collections.soonest=Premi\u00E8re collecte de donn\u00E9es
analysis.table.empty=Ce tableau ne contient pas de donn\u00E9es. analysis.table.empty=Ce tableau ne contient pas de donn\u00E9es.
analysis.table.form.created=Cr\u00E9er le
analysis.table.form.created.on=Cr\u00E9er le {0} analysis.table.form.created.on=Cr\u00E9er le {0}
analysis.table.form.created=Cr\u00E9er le
analysis.table.form.title=Questionnaire analysis.table.form.title=Questionnaire
analysis.table.open=Ouvrir analysis.table.open=Ouvrir
analysis.table.participations.number=Participations analysis.table.participations.number=Participations
...@@ -16,53 +17,53 @@ filter.context.curriculum.organisations=Organisation du curriculum ...@@ -16,53 +17,53 @@ filter.context.curriculum.organisations=Organisation du curriculum
filter.context.curriculums=Curriculum filter.context.curriculums=Curriculum
filter.context.location=Lieu filter.context.location=Lieu
filter.context.organisations=Organisation du participant filter.context.organisations=Organisation du participant
filter.context.role=R\u00F4le des participants
filter.context.role.coach=$org.olat.modules.quality.ui\:participation.role.coach filter.context.role.coach=$org.olat.modules.quality.ui\:participation.role.coach
filter.context.role.none=Sans r\u00F4le filter.context.role.none=Sans r\u00F4le
filter.context.role.owner=$org.olat.modules.quality.ui\:participation.role.owner filter.context.role.owner=$org.olat.modules.quality.ui\:participation.role.owner
filter.context.role.participant=$org.olat.modules.quality.ui\:participation.role.participant filter.context.role.participant=$org.olat.modules.quality.ui\:participation.role.participant
filter.context.role=R\u00F4le des participants
filter.context.taxonomy.level=Sujet filter.context.taxonomy.level=Sujet
filter.count=Nombre de collectes de donn\u00E9es filter.count=Nombre de collectes de donn\u00E9es
filter.date.range.from=Collecte de donn\u00E9es depuis le filter.date.range.from=Collecte de donn\u00E9es depuis le
filter.date.range.to=Collecte de donn\u00E9es jusqu'au filter.date.range.to=Collecte de donn\u00E9es jusqu'au
filter.hide=Filtres filter.hide=Filtres
filter.panel.header=Filtres filter.panel.header=Filtres
filter.series.index=S\u00E9ries
filter.series.index.value=Collecte de donn\u00E9es {0} filter.series.index.value=Collecte de donn\u00E9es {0}
filter.series.index=S\u00E9ries
filter.show=Filtres filter.show=Filtres
filter.topic.curriculum.elements=Sujet \u00E9l\u00E9ment de curriculum filter.topic.curriculum.elements=Sujet \u00E9l\u00E9ment de curriculum
filter.topic.curriculums=Sujet curriculum filter.topic.curriculums=Sujet curriculum
filter.topic.identities=Sujet coach filter.topic.identities=Sujet coach
filter.topic.organisations=Sujet organisation filter.topic.organisations=Sujet organisation
filter.topic.repositories=Sujet cours filter.topic.repositories=Sujet cours
filter.with.user.informations=Participation seulement avec donn\u00E9es personelles
filter.with.user.informations.label= filter.with.user.informations.label=
filter.with.user.informations=Participation seulement avec donn\u00E9es personelles
heatmap.empty=La carte thermique ne contient aucune donn\u00E9e. heatmap.empty=La carte thermique ne contient aucune donn\u00E9e.
heatmap.group.context.curriculum=Curriculum
heatmap.group.context.curriculum.element=El\u00E9ment de curriculum heatmap.group.context.curriculum.element=El\u00E9ment de curriculum
heatmap.group.context.curriculum.organisation=Organisation du curriculum heatmap.group.context.curriculum.organisation=Organisation du curriculum
heatmap.group.context.curriculum=Curriculum
heatmap.group.context.location=Lieu heatmap.group.context.location=Lieu
heatmap.group.context.organisation=Organisation du participant heatmap.group.context.organisation=Organisation du participant
heatmap.group.context.taxonomy.level=Sujet heatmap.group.context.taxonomy.level=Sujet
heatmap.group.data.collection=Collecte de donn\u00E9es heatmap.group.data.collection=Collecte de donn\u00E9es
heatmap.group.panel.header=Regroupement heatmap.group.panel.header=Regroupement
heatmap.group.topic.curriculum=Sujet curriculum
heatmap.group.topic.curriculum.element=Sujet \u00E9l\u00E9ment de curriculum heatmap.group.topic.curriculum.element=Sujet \u00E9l\u00E9ment de curriculum
heatmap.group.topic.curriculum=Sujet curriculum
heatmap.group.topic.identity=Sujet coach heatmap.group.topic.identity=Sujet coach
heatmap.group.topic.organisation=Sujet organisation heatmap.group.topic.organisation=Sujet organisation
heatmap.group.topic.repository=Sujet cours heatmap.group.topic.repository=Sujet cours
heatmap.group1= heatmap.group1=
heatmap.group2= heatmap.group2=
heatmap.group3= heatmap.group3=
heatmap.insufficient=
heatmap.insufficient.select=Seulement insuffisant heatmap.insufficient.select=Seulement insuffisant
heatmap.insufficient=
heatmap.legend.questions=Questions heatmap.legend.questions=Questions
heatmap.not.specified=n/a heatmap.not.specified=n/a
heatmap.table.slider.header=Q{0} heatmap.table.slider.header=Q{0}
heatmap.table.title.blank= heatmap.table.title.blank=
heatmap.table.title.curriculum=Cursus
heatmap.table.title.curriculum.element=El\u00E9ment de cursus heatmap.table.title.curriculum.element=El\u00E9ment de cursus
heatmap.table.title.curriculum.organisation=Organisation du curriculum heatmap.table.title.curriculum.organisation=Organisation du curriculum
heatmap.table.title.curriculum=Cursus
heatmap.table.title.data.collection=Collecte de donn\u00E9es heatmap.table.title.data.collection=Collecte de donn\u00E9es
heatmap.table.title.group=Regroupement heatmap.table.title.group=Regroupement
heatmap.table.title.identity=Coach heatmap.table.title.identity=Coach
...@@ -72,27 +73,31 @@ heatmap.table.title.repository=Cours ...@@ -72,27 +73,31 @@ heatmap.table.title.repository=Cours
heatmap.table.title.taxonomy.level=Sujet de participation heatmap.table.title.taxonomy.level=Sujet de participation
heatmap.table.title.trend=Tendance heatmap.table.title.trend=Tendance
presentation.create.button=Sauver presentation.create.button=Sauver
presentation.delete=Effacer la vue
presentation.delete.button=Effacer presentation.delete.button=Effacer
presentation.delete.confirm=Voulez-vous vraiment la vue "{0}"? presentation.delete.confirm=Voulez-vous vraiment la vue "{0}"?
presentation.delete.title=Effacer la vue presentation.delete.title=Effacer la vue
presentation.edit=Sauver la vue presentation.delete=Effacer la vue
presentation.edit.title=Editer la vue presentation.edit.title=Editer la vue
presentation.edit=Sauver la vue
presentation.name=Nom presentation.name=Nom
presentation.replace.button=Remplacer presentation.replace.button=Remplacer
presentation.replace.selection=Remplacer la vue sauv\u00E9e presentation.replace.selection=Remplacer la vue sauv\u00E9e
report.figure.form.name=Questionnaire report.figure.form.name=Questionnaire
report.figure.number.data.collections=Nombre de collecte de donn\u00E9es report.figure.number.data.collections=Nombre de collecte de donn\u00E9es
segments.diagram.report=$org.olat.modules.forms.ui\:reports.diagram.report
segments.heatmap.breadcrumb=Carte thermique segments.heatmap.breadcrumb=Carte thermique
segments.heatmap.link=Carte thermique segments.heatmap.link=Carte thermique
segments.report.breadcrumb=Rapport segments.report.breadcrumb=Rapport
segments.report.link=Rapport segments.report.link=Rapport
segments.session.selection=$org.olat.modules.forms.ui\:reports.session.selection
segments.table.overview=$org.olat.modules.forms.ui\:reports.table.overview
segments.table.report=$org.olat.modules.forms.ui\:reports.table.report
segments.trend.link=Tendance segments.trend.link=Tendance
slider.trend.empty=Le tableau de bord ne contient aucune donn\u00E9e. slider.trend.empty=Le tableau de bord ne contient aucune donn\u00E9e.
slider.trend.group.panel.header=Groupement slider.trend.group.panel.header=Groupement
slider.trend.table.title.question=Question slider.trend.table.title.question=Question
slider.trend.table.year={0}
slider.trend.table.year.part={1}.{0} slider.trend.table.year.part={1}.{0}
slider.trend.table.year={0}
trend.diff.absolute=Montrer le changement en valeur absolue trend.diff.absolute=Montrer le changement en valeur absolue
trend.diff.none=Ne pas montrer le changement trend.diff.none=Ne pas montrer le changement
trend.diff.relative=Montrer le changement en valeur relative trend.diff.relative=Montrer le changement en valeur relative
......
#Wed Nov 14 12:21:11 CET 2018 #Wed Nov 14 12:21:11 CET 2018
analysis.session.forms=$org.olat.modules.forms.ui\:reports.session.forms
analysis.table.data.collections.latest=\u00DAltima coleta de dados analysis.table.data.collections.latest=\u00DAltima coleta de dados
analysis.table.data.collections.number=Coletas de dados analysis.table.data.collections.number=Coletas de dados
analysis.table.data.collections.soonest=Coleta de dados mais recente analysis.table.data.collections.soonest=Coleta de dados mais recente
analysis.table.empty=Esta tabela n\u00E3o cont\u00E9m dados. analysis.table.empty=Esta tabela n\u00E3o cont\u00E9m dados.
analysis.table.form.created=Criado
analysis.table.form.created.on=Criado em {0} analysis.table.form.created.on=Criado em {0}
analysis.table.form.created=Criado
analysis.table.form.title=Question\u00E1rio analysis.table.form.title=Question\u00E1rio
analysis.table.open=Abrir analysis.table.open=Abrir
analysis.table.participations.number=Participa\u00E7\u00F5es analysis.table.participations.number=Participa\u00E7\u00F5es
...@@ -19,8 +20,8 @@ filter.date.range.from=Coletas de dados de ...@@ -19,8 +20,8 @@ filter.date.range.from=Coletas de dados de
filter.date.range.to=Coletas de dados para filter.date.range.to=Coletas de dados para
filter.hide=Filtros filter.hide=Filtros
filter.panel.header=Filtros filter.panel.header=Filtros
filter.series.index=Conjunto
filter.series.index.value=Coleta de dados {0} filter.series.index.value=Coleta de dados {0}
filter.series.index=Conjunto
filter.show=Filtros filter.show=Filtros
filter.topic.curriculum.elements=Elemento do curr\u00EDculo de t\u00F3picos filter.topic.curriculum.elements=Elemento do curr\u00EDculo de t\u00F3picos
filter.topic.curriculums=Curr\u00EDculo de t\u00F3pico filter.topic.curriculums=Curr\u00EDculo de t\u00F3pico
...@@ -30,16 +31,16 @@ filter.topic.repositories=Curso de t\u00F3pico ...@@ -30,16 +31,16 @@ filter.topic.repositories=Curso de t\u00F3pico
filter.with.user.informations.label= filter.with.user.informations.label=
filter.with.user.informations=S\u00F3 participa\u00E7\u00F5es com informa\u00E7\u00F5es da pessoa filter.with.user.informations=S\u00F3 participa\u00E7\u00F5es com informa\u00E7\u00F5es da pessoa
heatmap.empty=O mapa de calor n\u00E3o cont\u00E9m dados. heatmap.empty=O mapa de calor n\u00E3o cont\u00E9m dados.
heatmap.group.context.curriculum=Curr\u00EDculo
heatmap.group.context.curriculum.element=Elemento do curr\u00EDculo heatmap.group.context.curriculum.element=Elemento do curr\u00EDculo
heatmap.group.context.curriculum.organisation=Organiza\u00E7\u00E3o de curr\u00EDculo heatmap.group.context.curriculum.organisation=Organiza\u00E7\u00E3o de curr\u00EDculo
heatmap.group.context.curriculum=Curr\u00EDculo
heatmap.group.context.location=Localiza\u00E7\u00E3o heatmap.group.context.location=Localiza\u00E7\u00E3o
heatmap.group.context.organisation=Organiza\u00E7\u00E3o de participante heatmap.group.context.organisation=Organiza\u00E7\u00E3o de participante
heatmap.group.context.taxonomy.level=Assunto heatmap.group.context.taxonomy.level=Assunto
heatmap.group.data.collection=Coleta de dados heatmap.group.data.collection=Coleta de dados
heatmap.group.panel.header=Agrupamento heatmap.group.panel.header=Agrupamento
heatmap.group.topic.curriculum=Curr\u00EDculo do t\u00F3pico
heatmap.group.topic.curriculum.element=Elemento do curr\u00EDculo de t\u00F3picos heatmap.group.topic.curriculum.element=Elemento do curr\u00EDculo de t\u00F3picos
heatmap.group.topic.curriculum=Curr\u00EDculo do t\u00F3pico
heatmap.group.topic.identity=Treinador de t\u00F3picos heatmap.group.topic.identity=Treinador de t\u00F3picos
heatmap.group.topic.organisation=Organiza\u00E7\u00E3o de t\u00F3picos heatmap.group.topic.organisation=Organiza\u00E7\u00E3o de t\u00F3picos
heatmap.group.topic.repository=Curso de t\u00F3pico heatmap.group.topic.repository=Curso de t\u00F3pico
...@@ -52,9 +53,9 @@ heatmap.legend.questions=Perguntas ...@@ -52,9 +53,9 @@ heatmap.legend.questions=Perguntas
heatmap.not.specified=n/a heatmap.not.specified=n/a
heatmap.table.slider.header=Q{0} heatmap.table.slider.header=Q{0}
heatmap.table.title.blank= heatmap.table.title.blank=
heatmap.table.title.curriculum=Curr\u00EDculo
heatmap.table.title.curriculum.element=Elemento curricular heatmap.table.title.curriculum.element=Elemento curricular
heatmap.table.title.curriculum.organisation=Organiza\u00E7\u00E3o de curr\u00EDculo heatmap.table.title.curriculum.organisation=Organiza\u00E7\u00E3o de curr\u00EDculo
heatmap.table.title.curriculum=Curr\u00EDculo
heatmap.table.title.data.collection=Coleta de dados heatmap.table.title.data.collection=Coleta de dados
heatmap.table.title.group=Agrupamento heatmap.table.title.group=Agrupamento
heatmap.table.title.identity=Treinador heatmap.table.title.identity=Treinador
...@@ -63,20 +64,24 @@ heatmap.table.title.organisation=Organiza\u00E7\u00E3o ...@@ -63,20 +64,24 @@ heatmap.table.title.organisation=Organiza\u00E7\u00E3o
heatmap.table.title.repository=Curso heatmap.table.title.repository=Curso
heatmap.table.title.taxonomy.level=Assunto heatmap.table.title.taxonomy.level=Assunto
presentation.create.button=Criar presentation.create.button=Criar
presentation.delete=Excluir visualiza\u00E7\u00E3o
presentation.delete.button=Excluir presentation.delete.button=Excluir
presentation.delete.confirm=Voc\u00EA realmente deseja excluir a exibi\u00E7\u00E3o "{0}"? presentation.delete.confirm=Voc\u00EA realmente deseja excluir a exibi\u00E7\u00E3o "{0}"?
presentation.delete.delete.confirm=Voc\u00EA realmente deseja excluir a exibi\u00E7\u00E3o "{0}"? presentation.delete.delete.confirm=Voc\u00EA realmente deseja excluir a exibi\u00E7\u00E3o "{0}"?
presentation.delete.title=Excluir visualiza\u00E7\u00E3o presentation.delete.title=Excluir visualiza\u00E7\u00E3o
presentation.edit=Salvar visualiza\u00E7\u00E3o presentation.delete=Excluir visualiza\u00E7\u00E3o
presentation.edit.title=Editar visualiza\u00E7\u00E3o presentation.edit.title=Editar visualiza\u00E7\u00E3o
presentation.edit=Salvar visualiza\u00E7\u00E3o
presentation.name=Nome presentation.name=Nome
presentation.replace.button=Substituir presentation.replace.button=Substituir
presentation.replace.selection=Substituir a exibi\u00E7\u00E3o salva presentation.replace.selection=Substituir a exibi\u00E7\u00E3o salva
report.figure.form.name=Question\u00E1rio report.figure.form.name=Question\u00E1rio
report.figure.number.data.collections=N\u00FAmero de coletas de dados report.figure.number.data.collections=N\u00FAmero de coletas de dados
report.figure.number.participations=N\u00FAmero de participa\u00E7\u00F5es poss\u00EDveis report.figure.number.participations=N\u00FAmero de participa\u00E7\u00F5es poss\u00EDveis
segments.diagram.report=$org.olat.modules.forms.ui\:reports.diagram.report
segments.heatmap.breadcrumb=Mapa de calor segments.heatmap.breadcrumb=Mapa de calor
segments.heatmap.link=Mapa de calor segments.heatmap.link=Mapa de calor
segments.report.breadcrumb=Relat\u00F3rio segments.report.breadcrumb=Relat\u00F3rio
segments.report.link=Relat\u00F3rio segments.report.link=Relat\u00F3rio
segments.session.selection=$org.olat.modules.forms.ui\:reports.session.selection
segments.table.overview=$org.olat.modules.forms.ui\:reports.table.overview
segments.table.report=$org.olat.modules.forms.ui\:reports.table.report
...@@ -707,7 +707,9 @@ $fa-css-prefix: "o_icon" !default; ...@@ -707,7 +707,9 @@ $fa-css-prefix: "o_icon" !default;
.o_icon_qual_ana_hide_filter:before { content: $fa-var-toggle-on;} .o_icon_qual_ana_hide_filter:before { content: $fa-var-toggle-on;}
.o_icon_qual_ana_pres_edit:before { content: $fa-var-thumb-tack;} .o_icon_qual_ana_pres_edit:before { content: $fa-var-thumb-tack;}
.o_icon_qual_ana_export:before { content: $fa-var-download;}
.o_icon_qual_ana_pres_delete:before { content: $fa-var-ban;} .o_icon_qual_ana_pres_delete:before { content: $fa-var-ban;}
.o_icon_qual_ana_print:before { content: $fa-var-print;}
.o_icon_qual_ana_show_filter:before { content: $fa-var-toggle-off;} .o_icon_qual_ana_show_filter:before { content: $fa-var-toggle-off;}
.o_icon_qual_ana_trend:before { content: $fa-var-line-chart; } .o_icon_qual_ana_trend:before { content: $fa-var-line-chart; }
.o_icon_qual_ana_trend_arrow:before { content: $fa-var-arrow-circle-right; } .o_icon_qual_ana_trend_arrow:before { content: $fa-var-arrow-circle-right; }
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment