Skip to content
Snippets Groups Projects
Commit 0d8320a4 authored by User expired's avatar User expired
Browse files

Merge remote-tracking branch 'upstream/OpenOLAT_15.3' into OpenOLAT_15.3.uibk

parents 9383e735 763c8e10
No related branches found
No related tags found
No related merge requests found
Showing
with 304 additions and 253 deletions
......@@ -3,8 +3,8 @@ error.quota.range=Entrez s'il vous pla\u00EEt un quota entre 1 et {0} ({1}).
qd.coursefolder=Dossier de cours
qd.feeds=Blogues et podcasts
qd.groups=Groupes
qd.nodefolder=El\u00E9ments de cours
qd.pfnodefolder=El\u00E9ment de cours dossier participant
qd.nodefolder=\u00C9l\u00E9ments de cours
qd.pfnodefolder=\u00C9l\u00E9ment de cours dossier participant
qd.powerusers=Super utilisateur (Auteur)
qd.repository=Ressources didactiques
qd.title=Quota par d\u00E9faut
......
......@@ -8,7 +8,7 @@ CalendarManager.course=Calendrier du cours
CalendarManager.group=Calendrier de groupe
CatalogEntry=Entr\u00E9e du catalogue
CertificatesManager=Certificats
CourseBb=El\u00E9ment de cours
CourseBb=\u00C9l\u00E9ment de cours
CourseModule=Cours
DENCourseNode=Fixer rdv
DialogElement=Fichier discut\u00E9
......
......@@ -142,7 +142,9 @@ public class FileEditorController extends BasicController implements Activateabl
@Override
public void event(UserRequest ureq, Component source, Event event) {
if(event == Window.CLOSE_WINDOW) {
editCtrl.dispatchEvent(ureq, source, event);
if(editCtrl != null) {
editCtrl.dispatchEvent(ureq, source, event);
}
doUnlock();
}
}
......
......@@ -87,7 +87,7 @@ mf.author=Auteur
mf.cancel=Annuler
mf.comment=Description
mf.edit=Editer les m\u00E9tadonn\u00E9es
mf.elements=El\u00E9ment(s)
mf.elements=\u00C9l\u00E9ment(s)
mf.error.filename.empty=Le nom de l'objet ne peut pas \u00EAtre un espace vide.
mf.error.filename.exists=Il existe d\u00E9j\u00E0 un objet portant ce nom.
mf.error.filename.invalidchars=Le nom de l'objet contient des signes non valables.
......
......@@ -7,7 +7,7 @@ auto.sorting.title=Configuration de l'ordre automatique
close=D\u00E9sactiver
edit.title=Configuration
inactive.portlets.description=S\u00E9lectionnez le lien "Ajouter" pour int\u00E9grer les \u00E9l\u00E9ments inactifs affich\u00E9s en bas dans votre page personnelle. Vous pouvez ensuite d\u00E9finir la position de l'\u00E9l\u00E9ment sur votre page de d\u00E9part.
inactive.portlets.title=El\u00E9ments inactifs
inactive.portlets.title=\u00C9l\u00E9ments inactifs
manual.sorting.config=Trier manuellement
manual.sorting.title=Classer manuellement
move.down=En bas
......
......@@ -86,7 +86,7 @@ public class LocalFileImpl extends LocalImpl implements VFSLeaf {
try {
bis = new BufferedInputStream( new FileInputStream(getBasefile()) );
} catch (FileNotFoundException e) {
log.warn("Could not create input stream for file::" + getBasefile().getAbsolutePath(), e);
log.warn("Could not create input stream for file::{}", getBasefile().getAbsolutePath(), e);
}
return bis;
}
......@@ -118,7 +118,7 @@ public class LocalFileImpl extends LocalImpl implements VFSLeaf {
try {
os = new FileOutputStream(getBasefile(), append);
} catch (FileNotFoundException e) {
log.warn("Could not create output stream for file::" + getBasefile().getAbsolutePath(), e);
log.warn("Could not create output stream for file::{}", getBasefile().getAbsolutePath(), e);
}
return os;
}
......
......@@ -20,6 +20,7 @@
package org.olat.core.util.vfs.lock;
import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
......@@ -28,6 +29,7 @@ import java.util.UUID;
import java.util.Vector;
import org.apache.logging.log4j.Logger;
import org.olat.core.commons.modules.bc.FolderConfig;
import org.olat.core.commons.modules.bc.FolderModule;
import org.olat.core.commons.persistence.DB;
import org.olat.core.commons.services.vfs.VFSMetadata;
......@@ -293,12 +295,41 @@ public class VFSLockManagerImpl implements VFSLockManager {
return lock;
}
/**
* Determine if the file can be locked or not. It's almost the same as the canMeta()
* implementation but some extra permission for specific WebDAV help files used by
* MacOS, Word...
*
* @param item The file
* @param type The type of application which want the lock
* @return true if it can locked
*/
public final boolean canLock(VFSItem item, VFSLockApplicationType type) {
if (item == null) return false;
if(item.canMeta() == VFSConstants.YES) {
return true;
}
if(type == VFSLockApplicationType.webdav) {
File file = extractFile(item);
if(file != null) {
Path bFile = ((LocalImpl)item).getBasefile().toPath();
if(bFile.startsWith(FolderConfig.getCanonicalRootPath())) {
String filename = item.getName();
return filename.startsWith(".~") || (filename.startsWith("._") && !filename.startsWith("._oo_"));
}
}
}
return false;
}
@Override
public LockResult lock(VFSItem item, Identity identity, VFSLockApplicationType type, String appName) {
if (item == null || item.canMeta() != VFSConstants.YES) {
if (!canLock(item, type)) {
return LockResult.LOCK_FAILED;
}
final File file = extractFile(item);
final TokenWrapper generatedToken = new TokenWrapper();
LockInfo lockInfo = fileLocks.computeIfAbsent(file, f -> {
......
......@@ -15,6 +15,6 @@ error.helpcourse.not.configured=Ce syst\u00E8me ne dispose pas d'aide.
vfs.context.courseconfiguration=Configuration du cours
vfs.context.coursefolder=Dossier de stockage de cours
vfs.context.export=Archive de cours import\u00E9s
vfs.context.foldernodes=El\u00E9ment de cours dossier
vfs.context.gtasks=El\u00E9ment de cours devoir
vfs.context.participantfolder=El\u00E9ment de cours dossier participant
vfs.context.foldernodes=\u00C9l\u00E9ment de cours dossier
vfs.context.gtasks=\u00C9l\u00E9ment de cours devoir
vfs.context.participantfolder=\u00C9l\u00E9ment de cours dossier participant
......@@ -121,7 +121,7 @@ survey=Questionnaire
ta=Devoirs / solutions
table.action.download=T\u00E9l\u00E9charger
table.action.select=S\u00E9lectionner
table.header.node=El\u00E9ment de cours
table.header.node=\u00C9l\u00E9ment de cours
tool.name=Archivage des donn\u00E9es
warning.atleast.node=Veuillez s\u00E9lectionner au moins un \u00E9l\u00E9ment de cours s'il vous pla\u00EEt.
wiki=Wikis
......@@ -107,7 +107,7 @@ no.testresults=<font color\="red">aucun r\u00E9sultat disponible</font>
nodechoose.intro=Veuillez s\u00E9lectionner un des \u00E9l\u00E9ments de cours mentionn\u00E9s ci-dessous. Vous pouvez ensuite voir ou modifier les \u00E9valuations de ce cours.
nodechoose.title=Choix d'un \u00E9l\u00E9ment de cours
nodesoverview.emptylist=Aucun \u00E9l\u00E9ment de cours avec \u00E9valuation n'a \u00E9t\u00E9 trouv\u00E9.
nodesoverview.filter.discardEmptyNodes=El\u00E9ments de cours achev\u00E9s
nodesoverview.filter.discardEmptyNodes=\u00C9l\u00E9ments de cours achev\u00E9s
nodesoverview.filter.showEmptyNodes=Tous les \u00E9l\u00E9ments de cours
nodesoverview.filter.title=Aper\u00E7u
nodesoverview.nonodes=Dans ce cours, aucun \u00E9l\u00E9ment de cours ne dispose d'une \u00E9valuation.
......@@ -157,7 +157,7 @@ table.header.learning.progress=$org.olat.modules.assessment.ui\:learning.progres
table.header.max=Max.
table.header.min=Min.
table.header.name=Nom
table.header.node=El\u00E9ment de cours
table.header.node=\u00C9l\u00E9ment de cours
table.header.overallselect=Analyse globale
table.header.passed=R\u00E9ussi
table.header.passed.overriden=Remplacer
......
......@@ -53,7 +53,7 @@ date.and.time.text={0} {1} - {2} {3} (-{4}/+{5} min.)
date.and.time.text.same.day={0} {1} - {3} (-{4}/+{5} min.)
delete.mode=Effacer la configuration d'\u00E9valuation
edit=Editer
elements=El\u00E9ments de cours
elements=\u00C9l\u00E9ments de cours
error.atleastone=Choisissez, s'il vous pla\u00EEt, au moins un configuration.
error.begin.after.end=La date de d\u00E9but doit se trouver avant la date de fin.
error.course.element.mandatory=Choisissez s'il vous pla\u00EEt au moins un \u00E9l\u00E9ment de cours.
......@@ -74,7 +74,7 @@ mode.beginend=Mani\u00E8re de d\u00E9marrer/terminer
mode.beginend.automatic=Automatique
mode.beginend.manual=Manuel
mode.course.element.restriction=Limiter l'acc\u00E8s aux \u00E9l\u00E9ments de cours
mode.course.elements=El\u00E9ments d'\u00E9valuations
mode.course.elements=\u00C9l\u00E9ments d'\u00E9valuations
mode.description=Description
mode.end=Fin
mode.followupTime=P\u00E9riode de temporisation
......@@ -86,7 +86,7 @@ mode.name=Titre
mode.safeexambrowser=Utiliser Safe Exam Browser
mode.safeexambrowser.hint=Information Safe Exam Browser
mode.safeexambrowser.key=Cl\u00E9s Safe Exam Browser
mode.start.element=El\u00E9ment de d\u00E9part
mode.start.element=\u00C9l\u00E9ment de d\u00E9part
mode.target=Participants
mode.target.business.group=Participants du groupe "{0}".
mode.target.business.groups=Participants aux groupes "{0}".
......
......@@ -28,9 +28,9 @@ certificates.wizard.title=$org.olat.course.certificate.ui\:certificates.wizard.t
change.visibility=Modifier la visibilit\u00E9
change.visibility.title=Changer la visibilit\u00E9 des r\u00E9sultats
command.next=Utilisateur suivant
command.next.node=El\u00E9ment de cours suivant
command.next.node=\u00C9l\u00E9ment de cours suivant
command.previous=Utilisateur pr\u00E9c\u00E9dent
command.previous.node=El\u00E9ment de cours pr\u00E9c\u00E9dent
command.previous.node=\u00C9l\u00E9ment de cours pr\u00E9c\u00E9dent
compensation.label=Compensation des d\u00E9savantages
compensation.value=<i class\='o_icon o_icon_disadvantage_compensation'> </i> +{0}m
confirm.certificate.deleted=$org.olat.course.certificate.ui\:confirm.certificate.deleted
......@@ -86,7 +86,7 @@ table.header.assessmentStatus=$org.olat.modules.assessment.ui\:table.header.asse
table.header.completion=$org.olat.modules.assessment.ui\:table.header.completion
table.header.cut=Points pour r\u00E9ussi
table.header.description=Description
table.header.elements.toReview=El\u00E9ment
table.header.elements.toReview=\u00C9l\u00E9ment
table.header.external.grader=Correcteur
table.header.group.name=Noms
table.header.id=ID
......
#Sun Jan 23 12:24:05 CET 2011
#Mon Jan 18 14:15:00 CET 2021
access.provider.name=Conventional course
access.provider.toolTip=Control course progress via visibility and access rules without learning status. Suitable for complex course structures.
apply=Apply
......@@ -9,28 +9,28 @@ create=Create
create.group=Create group
easy.operator=Operator
easy.value=Value
engroupedit.table.key=ID
engroupedit.table.up=Up
engroupedit.table.coaches=Coaches
engroupedit.table.description=Description
engroupedit.table.down=Down
engroupedit.table.enrolled=Enrolled
engroupedit.table.groupName=Groupname
engroupedit.table.key=ID
engroupedit.table.maxPart=Max. participants
engroupedit.table.minPart=Min. participants
engroupedit.table.enrolled=Enrolled
engroupedit.table.remove=Remove
engroupedit.table.up=Up
engroupedit.table.waitinglist=Waitinglist
engroupedit.table.waitinglistParticipants=Participants on waitinglist
engroupedit.table.remove=Remove
error.argtype.areanameexpected=The "{0}" function must be part of a learning area.
error.argtype.attributename=The "{0}" function must have an attribute name.
error.argtype.attribvalue=The "{0}" function must have a matching attribute value.
error.argtype.coursnodeidexpeted=The "{0}" function requires a course element's identification in the following.
error.argtype.date=The "{0}" function has to indicate a point in time defined like this\: "dd.mm.YYYY HH\:mm". Your input {1} does not match this format.
error.argtype.institutionalname=The "{0}" function must contain an institutional name
error.argtype.outcome.undefined=The requested outcome-variable does not exist in the given test\!
error.argtype.username=The "{0}" function must contain a user name.
error.fewerargs=The "{0}" function has fewer arguments than specified.
error.argtype.outcome.undefined=The requested outcome-variable does not exist in the given test!
error.divide.by.zero=The rule can produce "divided by 0" errors.
error.fewerargs=The "{0}" function has fewer arguments than specified.
error.fix=Create
error.illegal.operation.at=The operation at position {0} is not allowed, see Help for possible operations.
error.inexpression.at=This condition expression has an error at position {0}.
......@@ -50,6 +50,8 @@ error.undefined.variable.at=The variable at position {0} is unknown, see Help fo
error.unkown=An unexpected error occurred.
form.easy.applyRulesForCoach=Apply rules also for owners and tutors
form.easy.area=Only for learning areas
form.easy.assessmentMode=Only in assessment mode
form.easy.assessmentMode.visible=Visible if the results are visible
form.easy.assessmentSwitch=Depending on assessment
form.easy.assessmentSwitch.no=No
form.easy.assessmentSwitch.passed=Check for "passed"
......@@ -83,17 +85,15 @@ form.easy.extCondConn.and=AND
form.easy.extCondConn.or=OR
form.easy.group=Only for learning groups
form.easy.groupSwitch=Depending on group
form.easy.assessmentMode=Only in assessment mode
form.easy.assessmentMode.visible=Visible if the results are visible
form.easy.nodePassed=Course element
form.easy.nodePassed.deletedNode=Deleted course element, please modify.
form.easy.nodePassed.noNodes=Not possible, no assessed course element
form.easy.nodePassed.select=Select element
form.expert.condition=Expert rule
form.expert.error.condition=Parser error, invalid precondition
groupselection.key=Key
groupselection.groupname=Groupname
groupselection.noentries=No entries found! Please create or link groups to this course first.
groupselection.key=Key
groupselection.noentries=No entries found\! Please create or link groups to this course first.
institution.attribute=Attribute
institution.attributes.hint=Please check here for attributes that are available for your university.
mode=Mode
......@@ -109,8 +109,8 @@ solution.error.undefvariable=Advice\: Check the possible argument at position {0
solution.example.date.infunction=Example\: {0}("13.10.2005 18\:25")
solution.example.institutionalname.infunction=Advice\: Enclose the institutional name with double quotes (" ").
solution.example.name.infunction=Advice\: Enclose the name with double quotes (" ").
solution.example.whiteSpace=Advice\: The argument must not contain whitespace.
solution.example.node.infunction=Advice\: Enclose the course element's identification in double quotes, i.e. {0}("12345").
solution.example.whiteSpace=Advice\: The argument must not contain whitespace.
solution.provideone.areaname=Advice\: Provide exactly one learning area. Furthermore, this area must exist within your group management.
solution.provideone.date=Advice\: Provide exactly one point in time for the "{0}" function. The format is "dd.mm.YYYY HH\:mm".
solution.provideone.groupname=Advice\: Provide exactly one group name. Furthermore, this group must exist within your group management.
......@@ -119,4 +119,5 @@ solution.provideone.nodereference=Advice\: Provide exactly one course element id
solution.provideone.username=Advice\: Provide exactly one user name. Be aware that the existence of this user in the OLAT system will not be checked.
solution.providetwo.attrvalue=Advice\: The {0} function needs an attribute name as well as an attribute value, both enclosed within " ".
solution.takeassessablenode=Advice\: Check Help for a list of assessable course elements.
table.header.coaches=Coaches
xx={0}
......@@ -85,8 +85,8 @@ form.easy.extCondConn.and=ET
form.easy.extCondConn.or=OU
form.easy.group=Uniquement pour les groupes d'\u00E9tude
form.easy.groupSwitch=D\u00E9pendant du groupe
form.easy.nodePassed=El\u00E9ment de cours
form.easy.nodePassed.deletedNode=El\u00E9ment de cours supprim\u00E9, changez SVP
form.easy.nodePassed=\u00C9l\u00E9ment de cours
form.easy.nodePassed.deletedNode=\u00C9l\u00E9ment de cours supprim\u00E9, changez SVP
form.easy.nodePassed.noNodes=Pas possible - aucun \u00E9l\u00E9ment de cours \u00E9valu\u00E9
form.easy.nodePassed.select=S\u00E9lectionner SVP
form.expert.condition=R\u00E8gle avanc\u00E9e
......
......@@ -2,7 +2,7 @@
access.form.label=Avoir acc\u00E8s au cours entier.
access.legend=Modifier l'acc\u00E8s au cours entier
alternative=Chercher un \u00E9l\u00E9ment de cours alternatif
alternative.bbs=El\u00E9ment alternatif
alternative.bbs=\u00C9l\u00E9ment alternatif
alternative.choose=Choisir l'\u00E9l\u00E9ment de cours alternatif et convertir
alternative.choose.description=Choisissez dans la liste les \u00E9l\u00E9ments de cours alternatifs avec des fonctionnalit\u00E9s similaires pour convertir cet \u00E9l\u00E9ment d\u00E9sactiv\u00E9. Le titre. la description ainsi que les r\u00E8gles d'acc\u00E8s et tous les \u00E9l\u00E9ments enfants seront repris.
apply=OK
......
......@@ -670,8 +670,10 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements QT
}
CourseAssessmentService courseAssessmentService = CoreSpringFactory.getImpl(CourseAssessmentService.class);
AssessmentEntry currentAssessmentEntry = courseAssessmentService.getAssessmentEntry(this, assessedUserCourseEnv);
boolean increment = currentAssessmentEntry.getAttempts() == null || currentAssessmentEntry.getAttempts().intValue() == 0;
ScoreEvaluation sceval = new ScoreEvaluation(score, passed, null, null, null, 1.0d, AssessmentRunStatus.done, testSession.getKey());
courseAssessmentService.updateScoreEvaluation(this, sceval, assessedUserCourseEnv, coachingIdentity, true, by);
courseAssessmentService.updateScoreEvaluation(this, sceval, assessedUserCourseEnv, coachingIdentity, increment, by);
}
/**
......
#Fri Mar 20 14:44:41 CET 2020
assessment.review.explanation=L'\u00E9valuation de votre test n'a pas encore \u00E9t\u00E9 compl\u00E9t\u00E9e par votre coach. Une fois l'\u00E9valuation publi\u00E9e, elle sera visible ici.
editor.lock.message=Cet \u00E9l\u00E9ment de cours est bloqu\u00E9, car il est en train d'\u00EAtre \u00E9dit\u00E9.
editor.lock.title=El\u00E9ment de cours bloqu\u00E9.
editor.lock.title=\u00C9l\u00E9ment de cours bloqu\u00E9.
freezenoaccess.message=Ce cours est un mode de lecture seule.
freezenoaccess.title=Acc\u00E8s interdit
guestnoaccess.message=Cette partie du cours n'est pas accessible pour les invit\u00E9s. <p>Pour avoir acc\u00E8s \u00E0 cette partie, vous devez vous identifier via une universit\u00E9 ou vous enregistrer dans OLAT.
......
......@@ -17,7 +17,7 @@ checklist.update.efficiencystatements=Mettre \u00E0 jour les certificats de tous
coach.desc=Dans la liste ci-dessous vous trouverez tous les participants du cours que vous supervisez. S\u00E9lectionnez "$\:table.header.edit.checkbox" pour changer les cases \u00E0 cocher ou le score d'un participant.
coach.due.date.desc=S'il vous pla\u00EEt noter que cette liste de contr\u00F4le fixe un d\u00E9lai. En tant que coach, vous ne devez effectuer des changements qu'apr\u00E8s la date limite d'expiration.
column.header.homepage=Page d'accueil
column.header.node.passed=Element de cours r\u00E9ussi
column.header.node.passed=\u00C9l\u00E9ment de cours r\u00E9ussi
column.header.node.points=Points \u00E9l\u00E9ment de cours
column.header.points=$\:box.points
column.header.seqnum=Num\u00E9ro
......
#Tue Jan 07 21:50:11 CET 2020
#Wed Jan 20 07:36:30 CET 2021
admin.buffer.after.min=$\:config.buffer.after.min
admin.buffer.before.min=$\:config.buffer.before.min
admin.coach.edit=$\:config.coach.edit
......@@ -7,16 +7,19 @@ admin.default.values.title=Valeurs par d\u00E9faut
admin.general.title=$\:admin.menu.title
admin.menu.title=Live stream
admin.menu.title.alt=$\:admin.menu.title
admin.module.enabled=El\u00E9ment de cours
admin.module.enabled=\u00C9l\u00E9ment de cours
admin.multi.stream.enabled=Flux multiple
admin.player.profile=Flux
admin.settings=Param\u00E8tres
admin.url.separator=S\u00E9parator Url
admin.url.separator.help=S\u00E9parateur pour d\u00E9limiter plusieurs URLs d'une m\u00EAme \u00E9v\u00E9nement.
admin.url.templates=Mod\u00E8les d'URL
condition.accessibility.title=Acc\u00E8s
config.buffer.after.min=P\u00E9riode de pr\u00E9paration (en minutes)
config.buffer.before.min=P\u00E9riode de temporisation (en minutes)
config.coach.edit=Les coaches peuvent \u00E9diter les rendez-vous.
config.player.profile=$\:admin.player.profile
error.url.not.valid=URL non valide
form.error.wrong.int=Format de nombre invalide. Exemples\: 2, 10, 144
link.text=Diffusion vid\u00E9o en direct
list.title=Futures diffusions
......@@ -41,6 +44,15 @@ table.header.end=$org.olat.commons.calendar\:cal.form.end
table.header.location=$org.olat.commons.calendar\:cal.form.location
table.header.subject=$org.olat.commons.calendar\:cal.form.subject
table.header.viewers=Spectateurs
url.template.add=Ajouter un mod\u00E8le d'URL
url.template.delete=Effacer
url.template.delete.confirm=Voulez-vous vraiment effacer le mod\u00E8le d'URL "{0}"?
url.template.edit=\u00C9diter
url.template.edit.title=\u00C9diter le mod\u00E8le d'URL
url.template.id=ID
url.template.name=Nom
url.template.url1=URL 1
url.template.url2=URL 2
viewer.error.browser=Le flux ne peut \u00EAtre pas \u00EAtre affich\u00E9 dans ce navigateur. Choisissez s'il vous pla\u00EEt un autre navigateur.
viewer.error.stream=Il n'est pas possible d'afficher la vid\u00E9o. La diffusion en direct n'a probablement pas encore commenc\u00E9.
viewer.no.stream=Pas de diffusion pour l'instant.
......
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