Skip to content
Snippets Groups Projects
Commit 32bca549 authored by srosse's avatar srosse
Browse files

Merge OpenOLAT default branch to OpenOLAT qti with a123f50a275b4081bda1825b26dd4907620a1068

parents 3b5675b2 98512d5a
No related branches found
No related tags found
No related merge requests found
Showing
with 132 additions and 85 deletions
......@@ -47,11 +47,11 @@ import org.olat.core.util.vfs.VFSManager;
*/
public class CustomCSS extends LogDelegator implements Disposable {
private String relCssFilename;
private String relCssFileIframe;
private Mapper cssUriMapper;
private MapperKey cssUriMapperKey;
private JSAndCSSComponent jsAndCssComp;
private final String relCssFilename;
private final String relCssFileIframe;
private final Mapper cssUriMapper;
private final MapperKey cssUriMapperKey;
private final JSAndCSSComponent jsAndCssComp;
private Object DISPOSE_LOCK = new Object();
/**
......@@ -67,9 +67,10 @@ public class CustomCSS extends LogDelegator implements Disposable {
*/
public CustomCSS(final VFSContainer cssBaseContainer,
final String relCssFilename, UserSession uSess) {
createCSSUriMapper(cssBaseContainer);
cssUriMapper = createCSSUriMapper(cssBaseContainer);
this.relCssFilename = relCssFilename;
registerMapper(cssBaseContainer, uSess);
this.relCssFileIframe = null;
cssUriMapperKey = registerMapper(cssBaseContainer, uSess);
// initialize js and css component
jsAndCssComp = new JSAndCSSComponent("jsAndCssComp", this.getClass(), false);
String fulluri = cssUriMapperKey.getUrl() + relCssFilename;
......@@ -79,10 +80,10 @@ public class CustomCSS extends LogDelegator implements Disposable {
public CustomCSS(final VFSContainer cssBaseContainer,
final String relCssFileMain, final String relCssFileIFrame, UserSession uSess ) {
createCSSUriMapper(cssBaseContainer);
cssUriMapper = createCSSUriMapper(cssBaseContainer);
this.relCssFilename = relCssFileMain;
this.relCssFileIframe = relCssFileIFrame;
registerMapper(cssBaseContainer, uSess);
cssUriMapperKey = registerMapper(cssBaseContainer, uSess);
// initialize js and css component
jsAndCssComp = new JSAndCSSComponent("jsAndCssComp", this.getClass(), false);
......@@ -96,25 +97,27 @@ public class CustomCSS extends LogDelegator implements Disposable {
* @param cssBaseContainer
* @param uSess
*/
private void registerMapper(final VFSContainer cssBaseContainer, UserSession uSess) {
private MapperKey registerMapper(final VFSContainer cssBaseContainer, UserSession uSess) {
// Register mapper as cacheable
String mapperID = VFSManager.getRealPath(cssBaseContainer);
MapperKey mapperKey;
if (mapperID == null) {
// Can't cache mapper, no cacheable context available
cssUriMapperKey = CoreSpringFactory.getImpl(MapperService.class).register(uSess, cssUriMapper);
mapperKey = CoreSpringFactory.getImpl(MapperService.class).register(uSess, cssUriMapper);
} else {
// Add classname to the file path to remove conflicts with other
// usages of the same file path
mapperID = this.getClass().getSimpleName() + ":" + mapperID + System.currentTimeMillis();
cssUriMapperKey = CoreSpringFactory.getImpl(MapperService.class).register(uSess, mapperID, cssUriMapper);
mapperKey = CoreSpringFactory.getImpl(MapperService.class).register(uSess, mapperID, cssUriMapper);
}
return mapperKey;
}
/**
* @param cssBaseContainer
*/
private void createCSSUriMapper(final VFSContainer cssBaseContainer) {
cssUriMapper = new VFSContainerMapper(cssBaseContainer);
private Mapper createCSSUriMapper(final VFSContainer cssBaseContainer) {
return new VFSContainerMapper(cssBaseContainer);
}
/**
......@@ -149,13 +152,11 @@ public class CustomCSS extends LogDelegator implements Disposable {
/**
* @see org.olat.core.gui.control.Disposable#dispose()
*/
@Override
public void dispose() {
synchronized (DISPOSE_LOCK) {
if (cssUriMapper != null) {
CoreSpringFactory.getImpl(MapperService.class).cleanUp(Collections.singletonList(cssUriMapperKey));
cssUriMapper = null;
cssUriMapperKey = null;
jsAndCssComp = null;
if (cssUriMapperKey != null) {
CoreSpringFactory.getImpl(MapperService.class).cleanUp(Collections.singletonList(cssUriMapperKey));
}
}
}
......
......@@ -437,14 +437,14 @@ public class BulkAssessmentTask implements LongRunnable, TaskAwareRunnable, Sequ
Identity identity = uce.getIdentityEnvironment().getIdentity();
RepositoryEntry entry = uce.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
org.olat.course.nodes.gta.Task task;
org.olat.course.nodes.gta.Task gtaTask;
TaskList taskList = gtaManager.getTaskList(entry, courseNode);
if(taskList == null) {
taskList = gtaManager.createIfNotExists(entry, courseNode);
task = gtaManager.createTask(null, taskList, status, null, identity, courseNode);
gtaTask = gtaManager.createTask(null, taskList, status, null, identity, courseNode);
} else {
task = gtaManager.getTask(identity, taskList);
if(task == null) {
gtaTask = gtaManager.getTask(identity, taskList);
if(gtaTask == null) {
gtaManager.createTask(null, taskList, status, null, identity, courseNode);
}
}
......
......@@ -74,6 +74,10 @@ public class ChooseNodeController extends BasicController {
CourseNodeFactory cnf = CourseNodeFactory.getInstance();
for (String courseNodeAlias : cnf.getRegisteredCourseNodeAliases()) {
CourseNodeConfiguration cnConfig = cnf.getCourseNodeConfiguration(courseNodeAlias);
if(cnConfig.isDeprecated()) {
continue;
}
try {
String group = cnConfig.getGroup();
CourseNodeTypesGroup typesGroup = linkNames.get(group);
......
#Thu Aug 21 16:55:08 CEST 2014
access.form.label=Zugriff auf den gesamten Kurs haben
access.legend=Zugriff auf den gesamten Kurs \u00E4ndern
alternative=Alternativer Kursbaustein suchen
alternative=Alternativen Kursbaustein suchen
alternative.bbs=Alternative Bausteine
alternative.choose=Alternativer Kursbaustein w\u00E4hlen und konvertieren
alternative.choose=Alternativen Kursbaustein w\u00E4hlen und konvertieren
alternative.choose.description=W\u00E4hlen Sie aus der Liste der m\u00F6glichen alternativen Kursbausteine mit \u00E4hnlicher Funktionalit\u00E4t aus um diesen deaktivirten Kursbaustein zu konvertieren. Es werden der Titel und die Beschreibung sowie die Zugangsregeln und alle Kinderelemente \u00FCbernommen.
apply=OK
assessment=Wissens\u00FCberpr\u00FCfung
......@@ -349,7 +349,7 @@ condition.noAccessExplanation.title=Information wenn sichtbar und kein Zugang
condition.visibility.title=Sichtbarkeit
content=Wissensvermittlung
copy.course.element.title=Kursbaustein kopieren
course.building.block.deprecated=Dieser Kursbausteintyp wurde deprecated.
course.building.block.deprecated=Dieser Kursbausteintyp ist veraltet.
course.building.block.disabled=Dieser Kursbausteintyp wurde deaktiviert. Kontaktieren Sie den Administrator, l\u00F6schen Sie den Baustein aus Ihrem Kurs oder w\u00E4hlen Sie die Schaltfl\u00E4che "$\:alternative" um einen alternativen Baustein mit \u00E4hnlicher Funktion zu suchen und den Baustein zu konvertieren.
course.building.block.disabled.user=Dieser Kursbausteintyp wurde deaktiviert. Kontaktieren Sie den Administrator oder die Kursleitung.
coursefolder.close=Ablageordner schliessen
......
#Wed Dec 17 17:29:34 CET 2014
access.form.label=Access to entire course have
access.legend=Modify access to entire course
alternative=Search for alternative course element
alternative=Search for an alternative course element
alternative.bbs=Alternative course elements
alternative.choose=Select an alternative course element and convert
alternative.choose.description=Select from the list of alternative course elements that offer similar functionality to convert this deactivated course element. The title, description, access rules and all child element will be copied to the converted element.
......@@ -349,6 +349,7 @@ condition.noAccessExplanation.title=Information if visible and no access
condition.visibility.title=Visibility
content=Knowledge transfer
copy.course.element.title=Copy course element
course.building.block.deprecated=This course element is deprecated.
course.building.block.disabled=This course element type has been deactivated. Please contact the system administrator or delete the course element from the course.
course.building.block.disabled.user=This course element type has been deactivated. Please contact the system or course administrator.
coursefolder.close=Close storage folder
......
......@@ -201,6 +201,7 @@ public class GTACourseNode extends AbstractAccessableCourseNode implements Asses
config.set(MSCourseNode.CONFIG_KEY_SCORE_MIN, new Float(0));
config.set(MSCourseNode.CONFIG_KEY_SCORE_MAX, new Float(0));
config.set(MSCourseNode.CONFIG_KEY_HAS_PASSED_FIELD, Boolean.TRUE);
config.set(MSCourseNode.CONFIG_KEY_HAS_COMMENT_FIELD, Boolean.TRUE);
}
}
......
......@@ -79,7 +79,7 @@
<property name="order" value="130" />
<property name="alternativeCourseNodes">
<list>
<value>igta</value>
<value>ita</value>
</list>
</property>
</bean>
......
......@@ -98,6 +98,11 @@ public class GTACoachController extends GTAAbstractController {
protected void initContainer(UserRequest ureq) {
mainVC = createVelocityContainer("coach");
reviewedButton = LinkFactory.createCustomLink("coach.reviewed.button", "reviewed", "coach.reviewed.button", Link.BUTTON, mainVC, this);
if(config.getBooleanSafe(GTACourseNode.GTASK_REVISION_PERIOD)) {
needRevisionsButton = LinkFactory.createCustomLink("coach.need.revision.button", "need-revision", "coach.need.revision.button", Link.BUTTON, mainVC, this);
}
if(withTitle) {
if(assessedGroup != null) {
mainVC.contextPut("groupName", assessedGroup.getName());
......@@ -171,6 +176,11 @@ public class GTACoachController extends GTAAbstractController {
protected Task stepReviewAndCorrection(UserRequest ureq, Task assignedTask) {
assignedTask = super.stepReviewAndCorrection(ureq, assignedTask);
reviewedButton.setVisible(false);
if(needRevisionsButton != null) {
needRevisionsButton.setVisible(false);
}
mainVC.contextPut("review", Boolean.FALSE);
if(config.getBooleanSafe(GTACourseNode.GTASK_ASSIGNMENT)
|| config.getBooleanSafe(GTACourseNode.GTASK_SUBMIT)) {
......@@ -205,13 +215,13 @@ public class GTACoachController extends GTAAbstractController {
documentsContainer = gtaManager.getCorrectionContainer(courseEnv, gtaNode, assessedIdentity);
}
submitCorrectionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, -1, config);
submitCorrectionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, -1, config, "coach.document");
listenTo(submitCorrectionsCtrl);
mainVC.put("corrections", submitCorrectionsCtrl.getInitialComponent());
reviewedButton = LinkFactory.createCustomLink("coach.reviewed.button", "reviewed", "coach.reviewed.button", Link.BUTTON, mainVC, this);
reviewedButton.setVisible(true);
if(config.getBooleanSafe(GTACourseNode.GTASK_REVISION_PERIOD)) {
needRevisionsButton = LinkFactory.createCustomLink("coach.need.revision.button", "need-revision", "coach.need.revision.button", Link.BUTTON, mainVC, this);
needRevisionsButton.setVisible(true);
}
}
......@@ -343,11 +353,15 @@ public class GTACoachController extends GTAAbstractController {
@Override
protected void event(UserRequest ureq, Component source, Event event) {
if(reviewedButton == source) {
Task assignedTask = submitCorrectionsCtrl.getAssignedTask();
doReviewedDocument(ureq, assignedTask);
if(submitCorrectionsCtrl != null) {
Task assignedTask = submitCorrectionsCtrl.getAssignedTask();
doReviewedDocument(ureq, assignedTask);
}
} else if(needRevisionsButton == source) {
Task assignedTask = submitCorrectionsCtrl.getAssignedTask();
doRevisions(ureq, assignedTask);
if(submitCorrectionsCtrl != null) {
Task assignedTask = submitCorrectionsCtrl.getAssignedTask();
doRevisions(ureq, assignedTask);
}
}
super.event(ureq, source, event);
}
......@@ -411,7 +425,9 @@ public class GTACoachController extends GTAAbstractController {
}
private void doReviewedDocument(UserRequest ureq, Task task) {
gtaManager.updateTask(task, TaskProcess.solution);
//go to solution, grading or graded
TaskProcess nextStep = gtaManager.nextStep(TaskProcess.correction, gtaNode);
gtaManager.updateTask(task, nextStep);
showInfo("coach.documents.successfully.reviewed");
gtaManager.log("Review", "documents reviewed", task, getIdentity(), assessedIdentity, assessedGroup, courseEnv, gtaNode);
......
......@@ -177,7 +177,7 @@ public class GTACoachRevisionAndCorrectionsController extends BasicController {
documentsContainer = gtaManager.getRevisedDocumentsCorrectionsContainer(courseEnv, gtaNode, iteration, assessedIdentity);
}
uploadCorrectionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, -1, config);
uploadCorrectionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, -1, config, "coach.document");
listenTo(uploadCorrectionsCtrl);
mainVC.put("uploadCorrections", uploadCorrectionsCtrl.getInitialComponent());
......@@ -218,7 +218,8 @@ public class GTACoachRevisionAndCorrectionsController extends BasicController {
}
private void doCloseRevisionProcess() {
assignedTask = gtaManager.updateTask(assignedTask, TaskProcess.solution);
TaskProcess nextStep = gtaManager.nextStep(TaskProcess.correction, gtaNode);
assignedTask = gtaManager.updateTask(assignedTask, nextStep);
gtaManager.log("Revision", "close revision", assignedTask, getIdentity(), assessedIdentity, assessedGroup, courseEnv, gtaNode);
}
}
......@@ -143,6 +143,10 @@ public class GTAParticipantController extends GTAAbstractController {
if(TaskHelper.inOrNull(assignedTask, TaskProcess.assignment)) {
mainVC.contextPut("assignmentCssClass", "o_active");
if(stepPreferences != null) {
//assignment is very important, open it always
stepPreferences.setAssignement(Boolean.TRUE);
}
//assignment open?
Date dueDate = getAssignementDueDate();
......@@ -244,7 +248,7 @@ public class GTAParticipantController extends GTAAbstractController {
}
int maxDocs = config.getIntegerSafe(GTACourseNode.GTASK_MAX_SUBMITTED_DOCS, -1);
submitDocCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, maxDocs, config);
submitDocCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, maxDocs, config, "document");
listenTo(submitDocCtrl);
mainVC.put("submitDocs", submitDocCtrl.getInitialComponent());
......@@ -279,7 +283,8 @@ public class GTAParticipantController extends GTAAbstractController {
}
private void doSubmitDocuments(UserRequest ureq, Task task) {
task = gtaManager.updateTask(task, TaskProcess.review);
TaskProcess review = gtaManager.nextStep(TaskProcess.submit, gtaNode);
task = gtaManager.updateTask(task, review);
showInfo("run.documents.successfully.submitted");
gtaManager.log("Submit", "submit documents", task, getIdentity(), assessedIdentity, assessedGroup, courseEnv, gtaNode);
......@@ -592,7 +597,6 @@ public class GTAParticipantController extends GTAAbstractController {
if(event instanceof SubmitEvent) {
Task assignedTask = submitDocCtrl.getAssignedTask();
gtaManager.log("Submit", (SubmitEvent)event, assignedTask, getIdentity(), assessedIdentity, assessedGroup, courseEnv, gtaNode);
doUpdateAttempts();
}
}
super.event(ureq, source, event);
......
......@@ -152,7 +152,7 @@ public class GTAParticipantRevisionAndCorrectionsController extends BasicControl
documentsDir = gtaManager.getRevisedDocumentsDirectory(courseEnv, gtaNode, iteration, getIdentity());
documentsContainer = gtaManager.getRevisedDocumentsContainer(courseEnv, gtaNode, iteration, getIdentity());
}
uploadRevisionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, -1, config);
uploadRevisionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, -1, config, "document");
listenTo(uploadRevisionsCtrl);
mainVC.put("uploadRevisions", uploadRevisionsCtrl.getInitialComponent());
......
......@@ -84,6 +84,7 @@ public class GroupAssessmentController extends FormBasicController {
private final boolean isAdministrativeUser;
private final List<UserPropertyHandler> userPropertyHandlers;
private Float cutValue;
private final boolean withScore, withPassed;
private final GTACourseNode gtaNode;
private final CourseEnvironment courseEnv;
......@@ -112,6 +113,9 @@ public class GroupAssessmentController extends FormBasicController {
withScore = courseNode.hasScoreConfigured();
withPassed = courseNode.hasPassedConfigured();
if(withPassed) {
cutValue = courseNode.getCutValueConfiguration();
}
Roles roles = ureq.getUserSession().getRoles();
isAdministrativeUser = securityModule.isUserAllowedAdminProps(roles);
......@@ -140,7 +144,7 @@ public class GroupAssessmentController extends FormBasicController {
applyToAllEl = uifactory.addCheckboxesHorizontal("applytoall", "group.apply.toall", groupGradingCont, onKeys, onValues);
applyToAllEl.addActionListener(FormEvent.ONCHANGE);
if(withPassed) {
if(withPassed && cutValue == null) {
groupPassedEl = uifactory.addCheckboxesHorizontal("checkgroup", "group.passed", groupGradingCont, onKeys, onValues);
}
......@@ -175,7 +179,7 @@ public class GroupAssessmentController extends FormBasicController {
}
}
if(withPassed) {
if(withPassed && cutValue == null) {
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.passedEl.i18nKey(), Cols.passedEl.ordinal()));
}
......@@ -280,7 +284,7 @@ public class GroupAssessmentController extends FormBasicController {
}
}
if(withPassed) {
if(withPassed && cutValue == null) {
Boolean passed = scoreEval.getPassed();
MultipleSelectionElement passedEl = uifactory.addCheckboxesHorizontal("check" + count, null, flc, onKeys, onValues);
if(passed != null && passed.booleanValue()) {
......@@ -373,7 +377,11 @@ public class GroupAssessmentController extends FormBasicController {
Boolean passed = null;
if(withPassed) {
passed = groupPassedEl.isSelected(0);
if(cutValue == null) {
passed = groupPassedEl.isSelected(0);
} else if(score != null) {
passed = (score.floatValue() >= cutValue.floatValue()) ? Boolean.TRUE : Boolean.FALSE;
}
}
for(AssessmentRow row:rows) {
......@@ -395,7 +403,11 @@ public class GroupAssessmentController extends FormBasicController {
Boolean passed = null;
if(withPassed) {
passed = row.getPassedEl().isSelected(0);
if(cutValue == null) {
passed = row.getPassedEl().isSelected(0);
} else if(score != null) {
passed = (score.floatValue() >= cutValue.floatValue()) ? Boolean.TRUE : Boolean.FALSE;
}
}
ScoreEvaluation newScoreEval = new ScoreEvaluation(score, passed);
......
......@@ -83,18 +83,21 @@ class SubmitDocumentsController extends FormBasicController {
private HTMLEditorController newDocumentEditorCtrl, editDocumentEditorCtrl;
private final int maxDocs;
private final String docI18nKey;
private final Task assignedTask;
private final File documentsDir;
private final VFSContainer documentsContainer;
private final ModuleConfiguration config;
public SubmitDocumentsController(UserRequest ureq, WindowControl wControl, Task assignedTask,
File documentsDir, VFSContainer documentsContainer, int maxDocs, ModuleConfiguration config) {
File documentsDir, VFSContainer documentsContainer, int maxDocs, ModuleConfiguration config,
String docI18nKey) {
super(ureq, wControl, "documents");
this.assignedTask = assignedTask;
this.documentsDir = documentsDir;
this.documentsContainer = documentsContainer;
this.maxDocs = maxDocs;
this.docI18nKey = docI18nKey;
this.config = config;
initForm(ureq);
updateModel();
......@@ -116,7 +119,7 @@ class SubmitDocumentsController extends FormBasicController {
}
FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(DocCols.document.i18nKey(), DocCols.document.ordinal()));
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(docI18nKey, DocCols.document.ordinal()));
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(DocCols.date.i18nKey(), DocCols.date.ordinal()));
columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel("edit", DocCols.edit.ordinal(), "edit",
new BooleanCellRenderer(
......@@ -150,6 +153,12 @@ class SubmitDocumentsController extends FormBasicController {
String msg = translate("error.max.documents", new String[]{ Integer.toString(maxDocs)});
flc.contextPut("maxDocsWarning", msg);
} else {
if(uploadDocButton != null) {
uploadDocButton.setEnabled(true);
}
if(createDocButton != null) {
createDocButton.setEnabled(true);
}
flc.contextPut("maxDocsWarning", Boolean.FALSE);
}
}
......
......@@ -62,12 +62,12 @@ $r.render("contextualSubscription")
<div id="o_step_review_content" class="o_content collapse #if($collapse_reviewAndCorrection) in #end" aria-expanded="$collapse_reviewAndCorrection">
#if($r.available("corrections"))
$r.render("corrections")
#if($r.available("coach.reviewed.button") || $r.available("coach.need.revision.button"))
#if($r.visible("coach.reviewed.button") || $r.visible("coach.need.revision.button"))
<div class="o_button_group">
#if($r.available("coach.reviewed.button"))
#if($r.visible("coach.reviewed.button"))
$r.render("coach.reviewed.button")
#end
#if($r.available("coach.need.revision.button"))
#if($r.visible("coach.need.revision.button"))
$r.render("coach.need.revision.button")
#end
</div>
......
<div class="o_button_group o_button_group_right">
$r.render("coach.assessment")
</div>
<div class="panel panel-default o_personal">
<div class="panel-heading">
<h4 class="panel-title">$r.translate("group.title")</h4>
......@@ -25,4 +21,7 @@
#end
</tbody></table>
$r.render("group-list")
</div>
<div class="o_button_group">
$r.render("coach.assessment")
</div>
\ No newline at end of file
......@@ -151,29 +151,6 @@
<div class="o_bar"></div>
<h4 class="o_title"> <a href="#o_step_grading_content" data-toggle="collapse" aria-expanded="$collapse_grading">$r.translate("run.grading")</a></h4>
<div id="o_step_grading_content" class="o_content collpase #if($collapse_grading) in #end" aria-expanded="$collapse_grading">
#if($gradingInfoTextUser && !$gradingInfoTextUser.isEmpty())
<div class="panel panel-default o_disclaimer">
<div class="panel-heading" data-toggle="collapse" data-target="#collapseDisclaimer">
<h4 class="panel-title">
<i id="collapseDisclaimerToggler" class="o_icon o_icon-fw o_icon_close_togglebox"> </i>
$r.translate("info.title")
</h4>
</div>
<div id="collapseDisclaimer" class="panel-collapse collapse in"><div class="panel-body">
$r.formatLatexFormulas($gradingInfoTextUser)
</div></div>
</div>
<script type="text/javascript">
/* <![CDATA[ */
jQuery('#collapseDisclaimer').on('hide.bs.collapse', function () {
jQuery('#collapseDisclaimerToggler').removeClass('o_icon_close_togglebox').addClass('o_icon_open_togglebox');
})
jQuery('#collapseDisclaimer').on('show.bs.collapse', function () {
jQuery('#collapseDisclaimerToggler').removeClass('o_icon_open_togglebox').addClass('o_icon_close_togglebox');
})
/* ]]> */
</script>
#end
#if($r.available("grading"))
$r.render("grading")
#end
......
......@@ -3,7 +3,7 @@ add.solution=Musterl\u00F6sung hochladen
add.task=Aufgabe hinzuf\u00FCgen
assessment.group.tool=Gruppe bewerten
assignment.config.title=Aufgabe zuweisen
assignment.deadline=Zuweisungstermin
assignment.deadline=Zuweisung bis
before=vorher
bulk.download.title=Alle abgegebenen Dokumente herunterladen
bulk.review=Beurteilung herunterladen
......@@ -18,6 +18,7 @@ choosed.groups=Gruppe
coach.assessment=Bewerten
coach.close.revision.button=Revisionsprozess schliessen
coach.corrections.description=Sie haben folgende Korrekturen zur\u00FCckgegeben.
coach.document=Dokumente
coach.documents.successfully.reviewed=Begutachtet\!
coach.need.revision.button=Ben\u00F6tigt \u00DCberarbeitung
coach.reviewed.button=Begutachtet
......@@ -156,7 +157,7 @@ submission.email.confirmation=Diesen Text zus\u00E4tzlich als E-Mail versenden.
submission.enabled=eingeschaltet
submission.mail.subject=OpenOLAT-Best\u00E4tigungs-E-Mail
submission.text=Text nach erfolgter Abgabe
submit.deadline=Abgabetermin
submit.deadline=Abgabe bis
table.header.details.gta=$org.olat.course.nodes.ta\:table.header.details.ta
table.header.group.name=Gruppe
table.header.passed=Bestanden
......@@ -185,6 +186,6 @@ task.type.description=Wenn die Gruppenaufgabe aktiviert ist, werden alle Abschni
task.type.title=Aufgabentyp
upload.document=Dokument hochladen
wait.for.solutions=Die Musterl\u00F6sung wird zum angegebenen Zeitpunkt freigegeben.
warning.group.pick.task=Dies ist eine Gruppenaufgabe\! Die hier getroffene Auswahl ist f\u00FCr alle Mitglieder der Gruppe "{0}" g\u00FCltig\! Stellen Sie sicher dass diese Auswahl zuvor innerhalb Ihrer Gruppe diskutiert wurde\! Nur ein Gruppenmitglied kann die Gruppenaufgabe ausw\u00E4len.
warning.group.pick.task=Dies ist eine Gruppenaufgabe\! Die hier getroffene Auswahl ist f\u00FCr alle Mitglieder der Gruppe "{0}" g\u00FCltig\! Stellen Sie sicher, dass diese Auswahl zuvor innerhalb Ihrer Gruppe diskutiert wurde\! Nur ein Gruppenmitglied kann die Gruppenaufgabe ausw\u00E4hlen.
warning.group.submit=Dies ist eine Gruppenaufgabe\! Das abgegebene Dokument ist f\u00FCr alle Mitglieder der Gruppe "{0}" g\u00FCltig\! Stellen Sie sicher dass diese L\u00F6sung zuvor innerhalb Ihrer Gruppe diskutiert wurde\! Nur ein Gruppenmitglied kann eine L\u00F6sung im Namen aller Gruppenmitglieder abgeben.
warning.group.task=Dies ist eine Gruppenaufgabe\! Aufgbabenzuweisung, Abgabe sowie die Bewertung werden f\u00FCr die Gruppe vorgenommen. Besprechen Sie mit den anderen Teilnehmern ihrer Gruppe wie sie gemeinsam die Aufgabe ausw\u00E4hlen und bearbeiten wollen.
warning.group.task=Dies ist eine Gruppenaufgabe\! Aufgabenzuweisung, Abgabe sowie die Bewertung werden f\u00FCr die Gruppe vorgenommen. Besprechen Sie mit den anderen Teilnehmern ihrer Gruppe wie sie gemeinsam die Aufgabe ausw\u00E4hlen und bearbeiten wollen.
/**
* <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.group.ui.main;
import java.util.Collections;
......
......@@ -288,7 +288,7 @@ public class EPPolicyManager {
private EPStructureElementToGroupRelation applyPolicyToGroup(Group group, EPMapPolicy policy, PortfolioStructureMap map) {
Collection<EPStructureElementToGroupRelation> currentRelations = map.getGroups();
for(EPStructureElementToGroupRelation currentRelation:currentRelations) {
if(currentRelation.getGroup().equals(group)) {
if(currentRelation.getGroup() != null && currentRelation.getGroup().equals(group)) {
updatePolicy(currentRelation, policy.getFrom(), policy.getTo());
return currentRelation;
}
......
......@@ -131,7 +131,8 @@ public class InvitationDAO {
public Invitation findInvitation(Group group) {
StringBuilder sb = new StringBuilder();
sb.append("select invitation from binvitation as invitation ")
.append(" where invitation.baseGroup=:group");
.append(" inner join fetch invitation.baseGroup bGroup")
.append(" where bGroup=:group");
List<Invitation> invitations = dbInstance.getCurrentEntityManager()
.createQuery(sb.toString(), Invitation.class)
......@@ -149,6 +150,7 @@ public class InvitationDAO {
public Invitation findInvitation(String token) {
StringBuilder sb = new StringBuilder();
sb.append("select invitation from binvitation as invitation ")
.append(" inner join fetch invitation.baseGroup bGroup")
.append(" where invitation.token=:token");
List<Invitation> invitations = dbInstance.getCurrentEntityManager()
......
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