########################################################################
#
# Sample configuration file for OpenOlat
#
# This is the main OpenOlat configuration file. You should ensure that
# you have read and understood the OpenOlat documentation beforehand.
# In all likelihood you will need to alter some of the settings
# below to suit your environment
#
# You should begin by creating an empty olat.local.properties file and put it in the tomcat lib dir e.g. /tomcat/lib
# or if you are inside eclipse you may put it to webapp/WEB-NF/src directory
# Spring searches on the classpath for this file and will overwrite the default properies from this file.
# Check the olat administration tab for a setup menu entry for more info.
#
# Windows users: please use forward slashes throughout in file and
# directory settings e.g., C:/TEMP
#
########################################################################
# Application directories (absolute paths required!) Empty values point to java.io.tmpdir which can also be
# overwritten with vm parameter -Djava.io.tmpdir=/home/user/data
########################################################################

userdata.dir.comment=runtime application data directory. Empty value points to java.io.tmpdir
userdata.dir=

archive.dir.comment=directory for deleted userdata/repository enties. Empty value points to [java.io.tmpdir]/deleted_archive
archive.dir.values=${userdata.dir}/deleted_archive
archive.dir=${userdata.dir}/deleted_archive

log.dir.comment=log directory of the olat.log file. Must correspond with your log4j.xml
log.dir.values=${userdata.dir}/logs. Empty value points to [java.io.tmpdir]/logs
log.dir=${userdata.dir}/logs
log.dir.comment=name of the olat log file, e.g. olat.log. Must correspond with your log4j.xml
log.filename=olat.log

folder.root.comment=name of the repository root. Empty value points to [java.io.tmpdir]/bcroot
folder.root.values=${userdata.dir}/bcroot
folder.root=${userdata.dir}/bcroot
folder.maxulmb.comment=limits on upload size and quotas should be set in MB
folder.maxulmb=100
folder.quotamb=200
folder.sendDocumentToExtern=true
folder.sendDocumentLinkOnly=true
# file size limit for HTML and text editor is 1MB
folder.editFileSizeLimitBytes=1048576
#force download of the files
folder.force.download=true
folder.force.download.values=true,false

########################################################################
# Application settings
########################################################################

# Initial setting for the system default locale
# (used on the OLAT login page as well as when creating new user accounts)
# NOTE: Once set at runtime via the admin GUI (System configuration -> Languages)
# this default setting will be overridden by the values in
# ${userdata.dir}/system/configuration/org.olat.core.util.i18n.I18nModule.properties
defaultlang=en

#will be set by maven
project.build.home.directory=


# The language that is used as a fallback in case the system does not find a key in
# the users language nor in the default language. Note that in this language all
# keys must exist! Since developers only add the 'de' and 'en' keys it is strongly
# recommended that you don't set it to any other value that this. If unsure, use the default 'de'.
fallbacklang=de
fallbacklang.comment=Set this only to a language that is 100% translated when compared to 'de'
fallbacklang.values=de,en

# Initial setting for enabled languages: comma separated list of lang keys.
# Example:
# enabledLanguages=en,de,fr,it,es,da,cs,el,ru,pl,zh_CN,zh_TW,lt,fa,pt_PT,pt_BR,tr,hu,sq,in,ar,rm,af,iw,vi,mn
# or
# Set to 'all' to enable all languages that can be found in the source code
# Example:
# enabledLanguages=all
# NOTE: Once set at runtime via the admin GUI (System configuration -> Languages)
# this default setting will be overridden by the values in
# ${userdata.dir}/system/configuration/org.olat.core.util.i18n.I18nModule.properties
enabledLanguages=en,de,fr,it,es

# determines the character set of files written to the file system
# e.g.: US-ASCII, ISO-8859-1, UTF-8
defaultcharset=UTF-8
# abort system startup when no UTF-8 capable file system is detected. In production this should be set to
# true to prevent accidental startup with another encoding which leads to a big data mess
enforce.utf8.filesystem=true

# global on/off config for resume
history.resume.enabled=true
# default settings for the resume function in case feature is available
history.resume.enabled.default=ondemand
history.resume.enabled.default.values=none,auto,ondemand
# the owner of repository-entries of deleted users
deletionModule.adminUserName=administrator

# Session timeout configuration.
# Note that this are default values only. If you want to change the configuration, open the administration panel
# in OpenOlat and change the values there. They are stored in olatdata/system/configuration/ and will override
# the values from the olat.local.properties file.
# a) Session timeout in seconds for not-authenticated sessions (login screen etc).
#    Keep small to prevent denial of service attacks. Default is 5 minutes.
session.timeout=300
# b) Session timeout in seconds for authenticated users and guest users. Default is two hours.
session.timeout.authenticated=7200

########################################################################
# SMTP (mail) settings
########################################################################

# mail support can be disabled by leaving the following entry blank or
# setting it to the keyword 'disabled' (without quotes!)
smtp.host=localhost
smtp.port=
# if required by your local SMTP you may need to provide credentials
smtp.user=
smtp.pwd=
# enable SSL if your smtp server supports it
smtp.sslEnabled=false
smtp.sslCheckCertificate=false
smtp.starttls=false
# timeout in milliseconds
smtp.timeout=8000
# smtp.from will override the mail envelope, leave it empty to set it to the first reply-to address
smtp.from=
# local mail domain where the return address is allowed to be set to the sender accounts email address.
# if the sender or all the recipients are in this domain the senders mailaddress otherwise the fromemail (see below) will be in the from header.
fromdomain=
# system mails will be sent from this address (from local domain with valid reverse dns):
fromemail=no-reply@your.domain
# the plain text name of the from mail address usually displayed by the email client
fromname=OpenOlat eLearning Server (${server.domainname})
# set this email to a mail address in your domain (used as reply-to address)
adminemail=webmaster@your.domain
# set this email to a mail address in your domain (used for 'ask for help here' type of messages that do not have special address)
supportemail=${adminemail}
# set this email to a mail address in your domain (used to tell users how to apply for more quote disk space)
quotaemail=${supportemail}
# set this email to a mail address in your domain (used to notify when users are deleted from the system)
deleteuseremail=${supportemail}
# set this email to a mail address in your domain (used for red-screen error reports)
erroremail=${adminemail}
# maximum size for email attachments (in MB)
mail.attachment.maxsize=5

# Enable the intern email inbox and outbox
mail.intern=true
mail.showInboxRecipientNames=true
mail.showInboxMailAddresses=false
mail.showOutboxRecipientNames=true
mail.showOutboxMailAddresses=false
mail.receiveRealMailUserDefaultSetting=true

########################################################################
# User registration, login and deletion settings
########################################################################

# permit self registration
registration.enableSelfRegistration=true
# enable/disable the link self registration on the login page
registration.enableSelfRegistration.login=true
registration.enableSelfRegistration.login.values=true,false
# enable/disable the direct link to registration
registration.enableSelfRegistration.link=true
registration.enableSelfRegistration.link.values=true,false
# registration made in GUI are valid for how many hours (default 2 days)
registration.valid.hours.gui=48
# registration made in REST are valid for how many hours (default 30 days)
registration.valid.hours.rest=720
# a list of domains separated with a comma
registration.domainList=
# send an email when new users register
registration.enableNotificationEmail=false
# set this email to a mail address in your domain
registration.notificationEmail=${adminemail}
# ask user to accept a disclaimer at first login. Use i18n tool to customize disclaimer message
registration.enableDisclaimer=true
# add a second checkbox to the disclaimer, e.g. for a privacy statement
registration.disclaimerAdditionalCheckbox=false
# add a third checkbox to the disclaimer, e.g. for the terms of use
registration.disclaimerAdditionalCheckbox2=false
# add a link to the disclaimer with a file download
# if set to true you can add downloadable disclaimer files in olatdata/customizing/disclaimer/
# the names of the files can be configured in the i18n key org.olat.registration:disclaimer.filedownloadurl
registration.disclaimerAdditionaLinkText=false

# setting for the bean interceptor in the registration process, disabled mean that no interceptor
# is desired. Standard implementation are: byShibbolethAttribute which generate a username based
# from a shibboleth attribute, byEmail which generate a username based on the email from the user
# which try to register itself
registration.preset.username.values=disabled,byEmail,byShibbolethAttribute
registration.preset.username=disabled
# setting for byEmail implementation: a domain restriction to preset the username
registration.preset.username.domain=

# settings for byShibbolethAttribute implementation:
# allowChanges the new user to changes its username (only when using byShibbolethAttribute)
registration.preset.username.allowChanges=true
# the shibboleth attribute to use to preset the username
registration.preset.username.shibbolethAttribute=Shib-SwissEP-UniqueID

# provide guest login on the dmz page
login.enableGuestLoginLinks=true
guest.login=${login.enableGuestLoginLinks}
# provider guest url in groups and courses
guest.login.links=${login.enableGuestLoginLinks}

# allow invitation login
login.invitationLogin=true
invitation.login=${login.invitationLogin}

# Allow users to login using alternatively their email address or username
login.using.username.or.email.enabled=true

# Regex to validate username of new users. If yo change this property,
# Make sure to change the translation of $org.olat.user\:form.checkUsername accordingly.
username.regex=[0-9a-z\\.\\-@_]{4,32}

# permit users to change their own passwords
# (if you set this to false, nobody can can change their pws!)
password.change.allowed=true

# Password syntax checks
password.min.length=4
password.max.length=128

# Values to restrict letters, digits and special signs
# atLeastX:    min X letters (X = 1/2/3)
# disabled:    The check is disabled. Letters/Digits/Specials are allowd in any quantity
# forbidden:   Letters/Digits/Specials not allowed
# validateSeparately: Ignore this rule and use password.min.letters.uppercase / password.min.letters.lowercase instead

# By default, a password has to have at least one letter.
password.letters=atLeast1
password.letters.uppercase=disabled
password.letters.lowercase=disabled
# By default, a password has to have at least one digit or special sign.
password.digits.special.signs=atLeast1
password.digits=disabled
password.special.signs=disabled

# Are these values forbidden as part of the password?
password.forbidden.username=false
password.forbidden.firstname=false
password.forbidden.lastname=false

# Password ageing policy
password.change.valid.hours.gui=48
password.change.valid.hours.rest=720
password.max.age=0
password.max.age.author=${password.max.age}
password.max.age.groupmanager=${password.max.age}
password.max.age.poolmanager=${password.max.age}
password.max.age.usermanager=${password.max.age}
password.max.age.rolesmanager=${password.max.age}
password.max.age.learnresourcemanager=${password.max.age}
password.max.age.curriculummanager=${password.max.age}
password.max.age.qualitymanager=${password.max.age}
password.max.age.lecturemanager=${password.max.age}
password.max.age.linemanager=${password.max.age}
password.max.age.principal=${password.max.age}
password.max.age.administrator=${password.max.age}
password.max.age.sysadmin=${password.max.age}

#notifications intervals the user can choose from. Disabled those you do not want by setting them to "false"
notification.interval.never=true
notification.interval.monthly=true
notification.interval.weekly=true
notification.interval.daily=true
notification.interval.half-daily=true
notification.interval.four-hourly=true
notification.interval.two-hourly=true
#default notification interval. Make sure this interval is enabled!!
notification.interval.default=daily
notification.interval.default.values=never,monthly,weekly,daily,half-daily,four-hourly,two-hourly
#notification cron job
notification.cronjob.expression=0 10 */2 * * ?

# Request to delete account
allow.request.delete.account=false
allow.request.delete.account.disclaimer=false
request.delete.account.mail=

####################################################
# Groups
####################################################

# Standard users can create groups
group.user.create=true
group.user.create.values=true,false
# Authors can create groups. (Group managers and system administrators can create groups in any case)
group.author.create=true
group.author.create.values=true,false
# Show the contact form in the business group card to send mails to group members or the coaches
group.card.contact=groupconfig
group.card.contact.values=never,always,groupconfig
# Users can download member list of groups (default, can be overridden for each group)
group.userlist.download.default.allowed=false
group.userlist.download.default.allowed.values=true,false

# Behavior when manually adding a user to a group. There are two workflow elements regarding data privacy
# that can be configured:
# a) Email notification: is the notification email about the new group membership mandatory or optional?
#    Default is true for normal users and optional for users with role author, usermanager, groupmanager or administrator
group.mandatory.enrolment.email.users=true
group.mandatory.enrolment.email.authors=false
group.mandatory.enrolment.email.usermanagers=false
group.mandatory.enrolment.email.rolesmanagers=false
group.mandatory.enrolment.email.groupmanagers=false
group.mandatory.enrolment.email.learnresourcemanagers=false
group.mandatory.enrolment.email.poolmanagers=false
group.mandatory.enrolment.email.curriculummanagers=false
group.mandatory.enrolment.email.lecturemanagers=false
group.mandatory.enrolment.email.qualitymanagers=false
group.mandatory.enrolment.email.linemanagers=false
group.mandatory.enrolment.email.principals=false
group.mandatory.enrolment.email.administrators=false
group.mandatory.enrolment.email.systemadmins=false

# b) Invitation only or direct membership: is the new group membership immediate or is it only an invitation
#    that must be accepted by the invited user?
#    Default is invitation-only for normal users and immediate group membership without the need to accept
#    for users with the role author, usermanager, groupmanager or administrator
group.accept.membership.users=true
group.accept.membership.authors=false
group.accept.membership.usermanagers=false
group.accept.membership.rolesmanagers=false
group.accept.membership.groupmanagers=false
group.accept.membership.learnresourcemanagers=false
group.accept.membership.poolmanagers=false
group.accept.membership.curriculummanagers=false
group.accept.membership.lecturemanagers=false
group.accept.membership.qualitymanagers=false
group.accept.membership.linemanagers=false
group.accept.membership.principals=false
group.accept.membership.administrators=false
group.accept.membership.systemadmins=false

# Allow leaving groups created by learners
group.leaving.group.created.by.learners=true
# Allow leaving groups created by authors
group.leaving.group.created.by.authors=true
# Allow configuration of this settoing on a per-groupe base
group.leaving.group.override=true

#enable managed groups
group.managed=false
group.managed.values=true,false

####################################################
# assessment config
####################################################

# enable / disable the course assessment mode
assessment.mode=enabled
assessment.mode.values=enabled,disabled

####
# Olat -> default assessmentplugin
# Onyx -> The Onyx-Testplayer (onyxassessmentplugin) can be downloaded at http://www.olat.de/onyx.
# 		  The Testplayer is one element of the Onyx-Testsuite and has been designed,
#  		  developed and tested by BPS - Bildungsportal Sachsen GmbH - http://www.bps-system.de
#         OLAT makes no representations or warranties of any kind, either express or implied,
#         nor shall OLAT have any liability whatsoever to any person using Onyx, with respect to its functionality.
#         For all questions and help concerning the Onyx-Testplayer and the Onyx-Testsuite
#         including any support write to support@bps-system.de
####
assessmentplugin.activate=Olat


########################################################################
# QTI 2.1 QtiWorks
########################################################################

# Enable or disable the Math Extension of QtiWorks (need Maxima)
qti21.math.assessment.extension.enabled=false
qti21.math.assessment.extension.enabled.values=true,false

#Enable digital signature of the assessment results
qti21.digital.signature.enabled=false
#Path to a PFX certificate (with X509 certificate, private and public key)
qti21.digital.signature.certificate=

#Try an other encoding to open the ZIP files during import of tests
qti21.import.encoding.fallback=

########################################################################
# QTI 1.2 DEPRECATED , WILL BE REMOVED IN A FURTHER RELEASE
########################################################################
qti12.edit.resources.enabled=false
qti12.create.resources.enabled=false
qti12.survey.create.resources.enabled=false

########################################################################
# Certificates
########################################################################
# Send a copy of the certificates mails to someone
certificate.bcc=
certificate.linemanager=false

#####
# Help course and context help
#####
# Enable the help system. This create context help links all over the system that points to the help system configured by the help.plugin variable.
# By default, the help opens the manual hosted in a confluence wiki at confluence.openolat.org. If you want to build your own help system, write
# your own help plugin and configure it here.
help.enabled=true
# Define the plugin which generate the help URL
help.plugin=ooConfluenceLinkHelp
help.plugin.values=ooConfluenceLinkHelp,courseHelp
# Settings for the courseHelp plugin
# Note that when you use courseHelp, the context help will be disabled. Only the help button in the top navigation will be available and open the help course
help.course.softkey=OLAT::help-course_de.zip

########################################################################
# OLAT technical settings
########################################################################
# OLAT instance ID (effects a unqiue namesapce for addressable items)
# ID should be no longer than 10 characters!
instance.id=myopenolat

# Issuer of the OpenOlat users.
# The issuer is the entity that issues a set of claims. An issuer
# identifier is a case sensitive URL using the https scheme that contains
# scheme, host, and optionally, port number and path components and no
# query or fragment components.
instance.issuer.identifier=https://${instance.id}.openolat.org

# by creating a theme under webapp/WEB-INF/static/themes you can
# customize the OLAT application to your liking (see the example
# theme for futher information.
# you can also configure a theme via the admin GUI which takes precedence
# To create your own theme please read webapp/WEB-INF/static/themes/themes.README
layout.theme=openolat
layout.theme.values=light,openolat,yourowntheme
layout.coursetemplates.blacklist=
# Absolute path to directory where custom themes are loaded from (optional)
layout.custom.themes.dir=${userdata.dir}/customizing/themes

# CSS class prefixes from the content.css file that are to be displayed in
# the menu in the HTML editor. Default is /\.b_/ (javaScript regexp)
html.editor.css.class.prefix=/\.b_/

# test user generation
user.generateTestUsers=false
# debug mode for developers. If olat.debug is set to true you must also set project.build.home.directory to your source code
olat.debug.comment=for developers: Set to true to enable visual debugging by the red/green bug icon on the upper left corner of olat
olat.debug=false

# cache localization files (unless in development mode)
localization.cache=true
# required only for performance and functional testing
allow.loadtest.mode=false

# Whether or not the gui demo site should be enabled=shown. Note that when set to true the
# two other conditions must be met to show the site: user must be administrator and
# olat.debug must also be set to true. When olat.debug=false, the flag has no meaning whatsoever.
guidemo.enabled=true

########################################################################
# OLAT sites / tabs
########################################################################
# enable / disable homeSite. Those are the tools visible in the personal menu
site.minimalhome.enabled=true
# enable / disable menu items from home site
#note: orders, mail and EP are disabled via module-config
minimalhome.ext.efficiencystatement=true
minimalhome.ext.otherusers=true
minimalhome.ext.notelist=true
minimalhome.ext.userfolder=true
minimalhome.ext.notifications=true
minimalhome.ext.portfolio=true
minimalhome.ext.bookings=true
minimalhome.ext.calendar=true
minimalhome.ext.mysettings=true
minimalhome.ext.myprofile=true
minimalhome.ext.password=true

# The my courses and group sites are meant for learners to find their courses and groups
site.mycourses.enable=true
site.groups.enable=true
# The coaching site is visible to users with coaching rights to better support coaching users accross multiple courses
site.coaching.enable=true
# The repository and question pool site are authoring environments only
site.repository.enable=true
site.questionpool.enable=true
# When enabling the portfolio site you should set minimalhome.ext.portfolio to false to not have two separate entry points
site.portfolio.enable=false

# Enable/disable the whole catalog feature
repo.catalog.enable=true
# Enable/disable the catalog site as a catalog-only site and the catalog admin site
site.catalog.enable=true
site.catalogadmin.enable=true
# Enabl/disable the browsing of catalog in the course site
repo.catalog.browsing.enable=true

# Portal site - deprecated since OO 10 release, use the my courses instead
site.portal.enable=false
# Portlets enabled by default
portlet.didYouKnow.enabled=true
portlet.groups.enabled=true
portlet.bookmarks.enabled=true
portlet.notes.enabled=true
portlet.notifications.enabled=true
portlet.efficiencyStatements.enabled=true
portlet.quickstart.enabled=true
portlet.calendar.enabled=true
portlet.repository.student.enabled=true
portlet.repository.student.entries=6
portlet.repository.teacher.enabled=true
portlet.repository.teacher.entries=6
# the info message portlet is a counterpart of the course building block
# course.node.infomessage, see further down this file.
portlet.infomessages.enabled=true
# Optional portlets, disabled by default
portlet.shiblogin.enabled=false
portlet.infomsg.enabled=false
# the links from the links portlet are configure here: webapp/WEB-INF/olat_portals_links.xml
portlet.links.enabled=false
# the institutions are configure here : webapp/WEB-INF/olat_portals_institution.xml
portlet.institution.enabled=false
portlet.system.events.enabled=false
# sysinfo portlet settings (files are editable if hosted on local server) (system.events)
portlet.sysinfo.url=../../raw/${build.version}/events.html
portlet.sysinfo.filepath=pathToYourEventsFile/static/events.html

#enable managed courses
repo.managed=false
repo.managed.values=true,false

# The course database: a REST key-value store that can be used in single pages to
# implement all kind of fancy things that need a storage, e.g. build your own
# survey or "I've read this" checkbox. Course authors have the possibility do
# download the course db with the values from all users and check for values using
# expert rules
course.db.enabled=false

########################################################################
# Top navigation configuration
########################################################################
topnav.impressum=false
topnav.search=true

########################################################################
# WebDAV
########################################################################
webdav.enabled=true
#webdav manager (show or don't webdav links in GUI)
webdav.links.enabled=true
auth.digest.enabled=true
#sort courses using semester terms for better discoverability. Only
#usefull when semester terms are defined in admin area and used by courses
webdav.termsfolders.enabled=true

########################################################################
# Image and PDF scale/thumbnail options
########################################################################
thumbnail.provider=java
# java is a pure java implementation (which use PDFBox too), magick use ImageMagick and
# GhostScript. For the magick one, you must add the path to convert and gs command line
# in your PATH environnment variable.
thumbnail.provider.values=java,magick

########################################################################
# Shared resources - used only to generate sample configurations
########################################################################

# User a value of '0' if you do not want to enable SSL.
# If SSL is enabled, don't forget to uncomment the SSL section in the sample
# configuration file
# Eg. 8443, 443 (must not be empty, even if standard port 443 is used). Use 0 to disable SSL
server.port.ssl=0

#if migrating from a context as /olat to the ROOT context in tomcat
server.legacy.context=

# mobile context used to redirect
mobile.context=/mobile

########################################################################
# Web application container (e.g., Tomcat) settings
########################################################################

# hosted application fully qualified domain name (e.g., DNS CNAME)
# omit references to protocol/scheme (e.g., HTTP(S))
server.domainname=localhost
# the port on which the container is listening
server.port=8080
# OLAT JMX server port (must be unique per node in a cluster)
jmx.rmi.port=3000

########################################################################
# MathJAX CDN
########################################################################

mathjax.cdn=//mathjax.openolat.org/mathjax/2.7-latest/
mathjax.config=TeX-AMS-MML_HTMLorMML
# find \( \), \[ \], $$ to trigger MathJax rendering
mathjax.markers=true

########################################################################
# Database settings
########################################################################
# set to false if your db user does not have enough privileges upgrading the database.
# After manually upgrading the DB you have to add an entry like this to the olatdata/system/installed_upgrades.xml file
# <string>Database update</string><boolean>true</boolean>
auto.upgrade.database=true
db.vendor=mysql
db.vendor.values=mysql,postgresql,oracle
db.vendor.values.comment=supported vendors currently include "mysql", "postgresql" and "oracle"

# The local data source works out of the box with the Hikari database connection pool. However, we stronlgy
# recommend using a jndi container managed data source for better stability and realibility.
# When using jndi, make sure you copy the database connector to your application server lib directory and remove it from
# the OpenOlat release.
db.source=local
db.source.values=local,jndi
db.source.values.comment=supports jdbc connections created locally (local) or search them with a jndi name (jndi)

# the server hosting the database
db.host=localhost
db.host.port=3306
db.host.port.values=3306 (mysql default), 5432 (postgresql default)

# jndi name to find the jdbc connections
db.jndi=
db.jndi.values=java:comp/env/jdbc/OpenOLATDS

db.name=olat
db.user=olat
db.pass=olat

#this option is currently only for oracle
db.default.schema=olat

# Special options for mysql database. Set useOldUTF8Behavior=true if
# your mysql database is setup up with iso-latin (or any other) encoding.
# Remove the useOldUTF8Behavior parameter if you use native UTF-8 on the
# database (recommended when setting up a new system)
db.url.options.mysql=?useUnicode=true&characterEncoding=UTF-8

# enable database debugging (seldom required except for developers)
db.show_sql=false
# configure the Hikari pool with hibernate (c3p0 is only for legacy purpose and backwards compatibilty)
db.hibernate.hikari.minsize=${db.hibernate.c3p0.minsize}
db.hibernate.hikari.maxsize=${db.hibernate.c3p0.maxsize}
# 0 to disable leak detection, otherwise a value in milliseconds
db.hibernate.hikari.leakDetectionThreshold=0

db.hibernate.c3p0.minsize=20
db.hibernate.c3p0.maxsize=50

########################################################################
# Infinispan
########################################################################

#Use the jndi name if you want to retrieve the cache manager from JBoss AS
infinispan.jndi=
infinispan.jndi.values=,java:jboss/infinispan/openolatha

########################################################################
# Velocity Templating Engine
########################################################################
velocity.parser.pool.size=20
velocity.parser.pool.size.comment=20 is Velocity default value, use more when you get errors in the logfile. Only necessary on high load configurations.

########################################################################
# Instant Messaging / chat
########################################################################

# As of 8.4 no external instant messaging server is needed. Configuration
# of the instant messaging / chat infrastructure is done in the admin GUI
instantMessaging.enable=true

########################################################################
# Calendar
########################################################################

# Enable or not the calendar feature in OpenOlat
calendar.enabled=true
calendar.enabled.values=true,false
# Enable personal calendar (if calendar is enabled)
calendar.personal.enabled=true
calendar.personal.enabled.values=true,false
# Enable group calendar (if calendar is enabled)
calendar.group.enabled=true
calendar.group.enabled.values=true,false
# Enable the calendar tool in course (if calendar is enabled)
calendar.course.tool.enabled=true
calendar.course.tool.enabled.values=true,false
# Enable the calendar course element in course (if calendar is enabled)
calendar.course.element.enabled=true
calendar.course.element.enabled.values=true,false
# Enable managed calendars
calendar.managed=false
calendar.managed.values=true,false

########################################################################
# Social sharing options
########################################################################
# Enable social sharing features
social.share.enabled=true
# List of perma-link share buttons, normally visible in the footer of the page.
social.share.link.buttons=twitter,facebook,google,delicious,digg,mail,link
social.share.link.buttons.values=twitter,facebook,google,delicious,digg,mail,link

########################################################################
# Translation tool settings (translation infrastructure required!)
########################################################################

# note: when enabled the language customisation tool is not available! (only enabled or disabled allowed as values!)
is.translation.server=disabled
# Path to the CVS "olat3" project that contains the languages DE and EN
# During development this is normally /workspace/olat/src/main/java
i18n.application.src.dir=
# Path to any directory that contains
# translatable packages other than DE and EN which are in the application source directory
# During development this is normally ${i18n.application.src.dir}
i18n.application.opt.src.dir = ${i18n.application.src.dir}

########################################################################
# User search / privacy
########################################################################
# which roles see the administrative user properties
usersearch.adminProps.users=disabled
usersearch.adminProps.authors=enabled
usersearch.adminProps.usermanagers=enabled
usersearch.adminProps.rolesmanagers=enabled
usersearch.adminProps.groupmanagers=enabled
usersearch.adminProps.learnresourcemanagers=enabled
usersearch.adminProps.poolmanagers=enabled
usersearch.adminProps.curriculummanagers=enabled
usersearch.adminProps.lecturemanagers=enabled
usersearch.adminProps.qualitymanagers=enabled
usersearch.adminProps.linemanagers=enabled
usersearch.adminProps.principals=enabled
usersearch.adminProps.administrators=enabled
usersearch.adminProps.systemadmins=enabled

# which roles are allowed to see the last visited date of group, course and other learning resources
user.lastlogin.visible.users=disabled
user.lastlogin.visible.authors=enabled
user.lastlogin.visible.usermanagers=enabled
user.lastlogin.visible.rolesmanagers=enabled
user.lastlogin.visible.groupmanagers=enabled
user.lastlogin.visible.learnresourcemanagers=enabled
user.lastlogin.visible.poolmanagers=enabled
user.lastlogin.visible.curriculummanagers=enabled
user.lastlogin.visible.lecturemanagers=enabled
user.lastlogin.visible.qualitymanagers=enabled
user.lastlogin.visible.linemanagers=enabled
user.lastlogin.visible.principals=enabled
user.lastlogin.visible.administrators=enabled
user.lastlogin.visible.systemadmins=enabled

# which roles see the autocompletion
usersearch.autocomplete.users=enabled
usersearch.autocomplete.authors=enabled
usersearch.autocomplete.usermanagers=enabled
usersearch.autocomplete.rolesmanagers=enabled
usersearch.autocomplete.groupmanagers=enabled
usersearch.autocomplete.learnresourcemanagers=enabled
usersearch.autocomplete.poolmanagers=enabled
usersearch.autocomplete.curriculummanagers=enabled
usersearch.autocomplete.lecturemanagers=enabled
usersearch.autocomplete.qualitymanagers=enabled
usersearch.autocomplete.linemanagers=enabled
usersearch.autocomplete.principals=enabled
usersearch.autocomplete.administrators=enabled
usersearch.autocomplete.systemadmins=enabled

# the maximum of identities returned by search (-1 is unlimited)
usersearch.maxResults=-1
usersearch.maxResults.values=-1,20,50

#send user informations with the request in the tunnel cours ebuilding block
userinfos.tunnelcoursebuildingblock=disabled

########################################################################
# Other user related settings
########################################################################
# When user full name is displayed, is it "Lastname, Firstname" (default) or "Firstname Lastname"
userDisplayName=userDisplayName_lastname_firstname
userDisplayName.values=userDisplayName_firstname_lastname, userDisplayName_lastname_firstname

# An additional image attached to the user profile, eg. for the company logo.
# Diplayed on the users vising card
user.logoByProfile=disabled
user.logoByProfile.values=enabled,disabled

# Set whether a user has to have an email address.
user.email.mandatory=true
# Set whether the email address of a user has to be unique or not.
# If it is not unique, some features are disabled,
# e.g. password reset, login with email address.
user.email.unique=true

# Set to false to make user portrait / avatar image read-only 
# Does not apply to users with administrator role in usermanagement
user.portrait.managed=false

########################################################################
# Fulltext Search settings
########################################################################
# Enable search-service for only one node per cluster [ enabled | disabled ]
search.service=enabled
# The full text indexer can be configured in two ways:
# 1) Start indexer during startup and restart periodicaly in a given interval
generate.index.at.startup=false
# but only if startup is during the restart window...
restart.window.start=0
restart.window.end=24

search.index.path=search_index
search.permanent.index.path=perm_index
search.index.tempIndex=temp_search_index
search.index.tempSpellcheck=temp_spellcheck_index
search.index.pdfBuffer=temp_pdf_text_buf

search.pdf.external=false
search.pdf.external.command=convertpdf.sh

# Interval in millisecond after which the indexer should run again. O means: do not run again
search.indexing.restart.interval=0
# 2) Enable triggering indexer via cron-job instead at startup [ enabled | disabled ]
# When enabled , configure 'generate.index.at.startup=false'
search.indexing.cronjob=enabled
# Example '0 0 3 * * ?' start indexer at 03:00 ever day. If you do not provide a valid
# expression but have set search.indexing.cronjob=enabled, the system will generate a
# cron expression that triggers the indexer every four hour depending on your tomcat.id variable
search.indexing.cronjob.expression=0 0 3 * * ?
#examples:
# never fire: 0 0 0 1 1 ? 3000

# size of the thread pools for the text extractors
search.folder.pool.size=4

########################################################################
# REST API
########################################################################

# enable/disable the rest api
restapi.enable=false
restapi.enable.values=true,values

# Access to the /restapi/system without authentication if the IP
# of the client is in the list of IPs separated by comma. This is used for monitoring purpos
restapi.ips.system=
restapi.ips.system.values=192.168.1.200,192.168.1.201

########################################################################
# Statistics
########################################################################

# Calculate the course statistics
statistics.cronjob.expression=0 10 5 * * ?

########################################################################
# Shibboleth
########################################################################

#The auth provider you set to default will be the one you see when you access the loginpage, alternate providers are shows as links below
#enable and or set the basic login provider (username/password) on the loginpage active and or default
olatprovider.enable=true
olatprovider.default=true
# if you change this all current users will no longer be able to login!
default.auth.provider.identifier=OLAT

# Oauth / social providers as default
oauth.default=false

shibboleth.enable=false
#enable and or set the generic shib login provider on the loginpage active and or default
shibbolethGeneric.enable=false
shibbolethGeneric.default=false
#enable and or set the custom uzh shib login provider on the loginpage active and or default
shibbolethUZH.enable=false
shibbolethUZH.default=false

#these settings are university of zurich specific
shibboleth.wayfSPEntityID=
shibboleth.wayfSPHandlerURL=
shibboleth.wayfSPSamlDSURL=
shibboleth.wayfReturnUrl=
shibboleth.wayfReturnMobileUrl=$shibboleth.wayfReturnUrl
#you can manually add additional IDP servers. See org/olat/portal/shiblogin/_content/portlet.html
#for an example
shibboleth.wayf.additionalIDPs=

# set the name of the Shibboleth attribute used to identify authorized users
shibboleth.uid.shib=
shibboleth.uid.handler=

#Shibboleth attribute to use if a user logs in the first time.
shibboleth.preferred.language.shib=
shibboleth.preferred.language.handler=

#Apply author role automatically to users according to the value of a Shibboleth attribute.
#The contains parameter can have multiple values separated by commas. The value of the
#Shibboleth attribute has to match one value of the contains parameter to apply the author role.
shibboleth.role.mapping.author.enable=false
shibboleth.role.mapping.author.shib=
shibboleth.role.mapping.author.contains=

#Define which Shibboleth attributes are mapped to OLAT user properties
#and how the attributes are mapped. Use a handler to transform the from
#Shibboleth delivered value to the desired form. If no handler is
#configured the DoNothing handler is used. Set delete to false to avoid
#the deletion of the user property value if Shibboleth delivers no value.
#The mandatory user properties are never deleted by the synchronization.
shibboleth.user.mapping.handler.values=DoNothing,FirstValue,SchacGender
#These attributes are mandatory to create new users.
shibboleth.user.mapping.email.shib=
shibboleth.user.mapping.email.handler=
shibboleth.user.mapping.first.name.shib=
shibboleth.user.mapping.first.name.handler=
shibboleth.user.mapping.last.name.shib=
shibboleth.user.mapping.last.name.handler=
#Further attributes may be mapped if wanted.
shibboleth.user.mapping.key1.shib=
shibboleth.user.mapping.key1.olat=
shibboleth.user.mapping.key1.handler=
shibboleth.user.mapping.key1.delete=
shibboleth.user.mapping.key2.shib=
shibboleth.user.mapping.key2.olat=
shibboleth.user.mapping.key2.handler=
shibboleth.user.mapping.key2.delete=
shibboleth.user.mapping.key3.shib=
shibboleth.user.mapping.key3.olat=
shibboleth.user.mapping.key3.handler=
shibboleth.user.mapping.key3.delete=
shibboleth.user.mapping.key4.shib=
shibboleth.user.mapping.key4.olat=
shibboleth.user.mapping.key4.handler=
shibboleth.user.mapping.key4.delete=
shibboleth.user.mapping.key5.shib=
shibboleth.user.mapping.key5.olat=
shibboleth.user.mapping.key5.handler=
shibboleth.user.mapping.key5.delete=
shibboleth.user.mapping.key6.shib=
shibboleth.user.mapping.key6.olat=
shibboleth.user.mapping.key6.handler=
shibboleth.user.mapping.key6.delete=
shibboleth.user.mapping.key7.shib=
shibboleth.user.mapping.key7.olat=
shibboleth.user.mapping.key7.handler=
shibboleth.user.mapping.key7.delete=
shibboleth.user.mapping.key8.shib=
shibboleth.user.mapping.key8.olat=
shibboleth.user.mapping.key8.handler=
shibboleth.user.mapping.key8.delete=
shibboleth.user.mapping.key9.shib=
shibboleth.user.mapping.key9.olat=
shibboleth.user.mapping.key9.handler=
shibboleth.user.mapping.key9.delete=
shibboleth.user.mapping.key10.shib=
shibboleth.user.mapping.key10.olat=
shibboleth.user.mapping.key10.handler=
shibboleth.user.mapping.key10.delete=
shibboleth.user.mapping.key11.shib=
shibboleth.user.mapping.key11.olat=
shibboleth.user.mapping.key11.handler=
shibboleth.user.mapping.key11.delete=
shibboleth.user.mapping.key12.shib=
shibboleth.user.mapping.key12.olat=
shibboleth.user.mapping.key12.handler=
shibboleth.user.mapping.key12.delete=
shibboleth.user.mapping.key13.shib=
shibboleth.user.mapping.key13.olat=
shibboleth.user.mapping.key13.handler=
shibboleth.user.mapping.key13.delete=
shibboleth.user.mapping.key14.shib=
shibboleth.user.mapping.key14.olat=
shibboleth.user.mapping.key14.handler=
shibboleth.user.mapping.key14.delete=
shibboleth.user.mapping.key15.shib=
shibboleth.user.mapping.key15.olat=
shibboleth.user.mapping.key15.handler=
shibboleth.user.mapping.key15.delete=
shibboleth.user.mapping.key16.shib=
shibboleth.user.mapping.key16.olat=
shibboleth.user.mapping.key16.handler=
shibboleth.user.mapping.key16.delete=
shibboleth.user.mapping.key17.shib=
shibboleth.user.mapping.key17.olat=
shibboleth.user.mapping.key17.handler=
shibboleth.user.mapping.key17.delete=
shibboleth.user.mapping.key18.shib=
shibboleth.user.mapping.key18.olat=
shibboleth.user.mapping.key18.handler=
shibboleth.user.mapping.key18.delete=
shibboleth.user.mapping.key19.shib=
shibboleth.user.mapping.key19.olat=
shibboleth.user.mapping.key19.handler=
shibboleth.user.mapping.key19.delete=
shibboleth.user.mapping.key20.shib=
shibboleth.user.mapping.key20.olat=
shibboleth.user.mapping.key20.handler=
shibboleth.user.mapping.key20.delete=

# The attribute translator can be used to simplify ugly shibboleth attribute identifiers and mask them with nicer names.
# If unsure, use the emptyAttributeTranslator to not mask any shib attributes. The switchAttributeTranslator should only
# be used when participating in SWTICH AAI.
shibboleth.attribute.translator=emptyAttributeTranslator
shibboleth.attribute.translator.values=emptyAttributeTranslator,userMappingAttributeTranslator,switchAttributeTranslator

########################################################################
# Clustering settings
########################################################################

# set to Cluster to enable, otherwise use SingleVM to disable cluster features
cluster.mode=SingleVM
# each node requires a unique ID (1-64) starting at "1"
node.id=1
tomcat.id=${node.id}
# certain servies (e.g., notifications, course logger etc. are not
# cluster capable and can only run on a single node - set this to
# enabled on that node
cluster.singleton.services = enabled
# JMS broker url's where the path (localhost:61700) - defines teh local adress and local port :
# SingleVM jms.broker.url
jms.broker.url=vm://embedded?broker.persistent=false
search.broker.url=vm://embedded?broker.persistent=false
index.broker.url=vm://embedded?broker.persistent=false
certificate.broker.url=vm://embedded?broker.persistent=false
# Cluster (remote) jms.broker.url
#jms.broker.url=failover:(tcp://localhost:61616?wireFormat.maxInactivityDuration=0)
#search.broker.url=failover:(tcp://localhost:61616?wireFormat.maxInactivityDuration=0)

#if you use the jndi connection
jms.broker.jndi=OpenOLATConnectionFactory
sysbus.broker.jndi=topic/sysbus
search.broker.jndi=queue/searchQueue
index.broker.jndi=queue/indexQueue
certificate.broker.jndi=queue/certificateQueue

#####
#query cache config for singlevm/cluster
#####
hibernate.cache=enabled
hibernate.cache.values=enabled,disabled

#cluster need hibernate.caching.cluster.class set and hibernate.caching.singlevm.class empty and second level cache to false
#for the cluster version you have to add treecache.xml to the classpath, see olat3/conf/trecache.xml for an example
hibernate.caching.singlevm.class=net.sf.ehcache.hibernate.SingletonEhCacheProvider
#hibernate.caching.cluster.class=org.hibernate.cache.jbc2.SharedJBossCacheRegionFactory
hibernate.caching.cluster.class=org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
hibernate.caching.use.query.cache=true
hibernate.use.second.level.cache=true
hibernate.connection.timeout=120

########################################
# LDAP configuration parameters (optional)
# for advanced config options see webapp/WEB-INF/src/serviceconfig/org/olat/ldap/_spring/olatextconfig.xml
########################################
ldap.enable=false
# is ldap your default provider? true or false
ldap.default=false
ldap.activeDirectory=false
# The date format is not the same for OpenLDAP (yyyyMMddHHmmss'Z') or
# ActiveDirectory (yyyyMMddHHmmss'.0Z')
ldap.dateFormat=yyyyMMddHHmmss'Z'
ldap.dateFormat.values=yyyyMMddHHmmss'Z',yyyyMMddHHmmss'.0Z'
# The LDAP Provider from the Oracle's JDKs (standard and JRockit) allows the use of multiple LDAP servers.
# Write the URLs of all the servers with a space as separator and a trailing slash.
ldap.ldapUrl=ldap://ldap.openolat.org:389
ldap.ldapUrl.values=ldap://ldap1.openolat.org:389/ ldap://ldap2.openolat.org:389/ ldap://ldap3.openolat.org:389/
# Connection timeout in milliseconds
ldap.connectionTimeout=15000
# System user: used for getting all users and connection testing
ldap.ldapSystemDN=CN=Frentix,OU=Benutzer,DC=openolat,DC=org
ldap.ldapSystemPW=ldap4olat
# List of bases where to find users. To use multiple bases you must edit the config file manually
ldap.ldapBases=OU=Students,DC=openolat,DC=org
# SSL configuration for LDAP
ldap.sslEnabled=false
ldap.trustStoreLocation=/usr/lib/j2sdk1.5-sun/jre/lib/security/cacerts
ldap.trustStorePwd=changeit
ldap.trustStoreType=JKS
# Create LDAP users on the fly when authenticated successfully
ldap.ldapCreateUsersOnLogin=true
# When users log in via LDAP, the system can keep a copy of the password as encrypted
# hash in the database. This makes OLAT more independent from an offline LDAP server
# and users can use their LDAP password to use the WebDAV functionality.
# If you have a mixed environment where some users have webDAV passwords and some have
# only local OLAT user accounts, you have to set this flag to 'true.
# When setting to true (recommended), make sure you configured password.change.allowed=false
# unless you also set ldap.propagatePasswordChangedOnLdapServer=true
ldap.cacheLDAPPwdAsOLATPwdOnLogin=true
# Change the password on the LDAP server too
ldap.propagatePasswordChangedOnLdapServer=false
# Reset the password lock timeout on the active directory in case it is
# an active directory and also remove user from failed login list
ldap.resetLockTimoutOnPasswordChange=true
# Define an external url where the users can change their password
ldap.changePasswordUrl=
# When the system detects an LDAP user that does already exist in OLAT but is not marked
# as LDAP user, the OLAT user can be converted to an LDAP managed user.
# When enabling this feature you should make sure that you don't have a user 'administrator'
# in your ldapBases (not a problem but not recommended)
ldap.convertExistingLocalUsersToLDAPUsers=false
# Users that have been created vial LDAP sync but now can't be found on the LDAP anymore
# can be deleted automatically. If unsure, set to false and delete those users manually
# in the user management.
ldap.deleteRemovedLDAPUsersOnSync=false
# Sanity check when deleteRemovedLDAPUsersOnSync is set to 'true': if more than the defined
# percentages of user accounts are not found on the LDAP server and thus recognized as to be
# deleted, the LDAP sync will not happen and require a manual triggering of the delete job
# from the admin interface. This should prevent accidential deletion of OLAT user because of
# temporary LDAP problems or user relocation on the LDAP side.
# Value= 0 (never delete) to 100 (always delete).
ldap.deleteRemovedLDAPUsersPercentage=50
# Should users be created and synchronized automatically on OLAT startup? Set this option to
# 'true' to create and sync all LDAP users in a batch manner on each OLAT startup.If you set
# this configuration to 'false', the users will be generated on-the-fly when they log in
# For the cron syntax see http://quartz.sourceforge.net/javadoc/org/quartz/CronTrigger.html
ldap.ldapSyncOnStartup=true
# Independent of ldap.ldapSyncOnStartup, users can be created / synced in a batch manner
# peridically. Set ldap.ldapSyncCronSync=true if you want such a behaviour and set an
# appropriate cron expression to define the interval. The default cron expression will
# sync the LDAP database with the OLAT database each hour.
ldap.ldapSyncCronSync=${ldap.ldapSyncOnStartup}
ldap.ldapSyncCronSyncExpression=0 0 * * * ?
# Configuration for syncing user attributes during login or cron and batch sync (examples are
# for an active directory)
ldap.ldapUserObjectClass=person
# Filter that uses the user object class. Can be exteded to include group memberships as well. Default is a standard object class filter.
ldap.ldapUserFilter=(objectClass=${ldap.ldapUserObjectClass})
# Example for more complex filter:
# ldap.ldapUserFilter=(&(objectClass=${ldap.ldapUserObjectClass})(memberOf=CN=OpenOLATAccess,OU=Students,DC=openolat,DC=org))
# Attribute to resolve the DN of the suer during login (value is the internal attribute)
ldap.ldapUserCreatedTimestampAttribute=whenCreated
ldap.ldapUserLastModifiedTimestampAttribute=whenChanged
# OpenLDAP is userPassword, ActiveDirectory is unicodePwd
ldap.ldapUserPassordAttribute=userPassword
# Define mapping of user attributes. Only the mandatory attributes are defined here, see the
# config file for advanced user attributes mapping
ldap.attributename.useridentifyer=sAMAccountName
ldap.attributename.email=mail
ldap.attributename.firstName=givenName
ldap.attributename.lastName=sn
# Attribute used as username to log in. Note: the configured login attribute MUST be one of the mapped attributes below, e.g. genericTextProperty1
# If the login attribute should not be visible in OO, then disable the OO user property in all contexts.
ldap.login.attribute=${ldap.attributename.useridentifyer}
#mappings from ldap-attrib to olat-userproperty
ldap.attrib.gen.map.ldapkey1=
ldap.attrib.gen.map.olatkey1=
ldap.attrib.gen.map.ldapkey2=
ldap.attrib.gen.map.olatkey2=
ldap.attrib.gen.map.ldapkey3=
ldap.attrib.gen.map.olatkey3=
ldap.attrib.gen.map.ldapkey4=
ldap.attrib.gen.map.olatkey4=
ldap.attrib.gen.map.ldapkey5=
ldap.attrib.gen.map.olatkey5=
ldap.attrib.gen.map.ldapkey6=
ldap.attrib.gen.map.olatkey6=
ldap.attrib.gen.map.ldapkey7=
ldap.attrib.gen.map.olatkey7=
ldap.attrib.gen.map.ldapkey8=
ldap.attrib.gen.map.olatkey8=
ldap.attrib.gen.map.ldapkey9=
ldap.attrib.gen.map.olatkey9=
ldap.attrib.gen.map.ldapkey10=
ldap.attrib.gen.map.olatkey10=
ldap.attrib.gen.map.ldapkey11=
ldap.attrib.gen.map.olatkey11=
ldap.attrib.gen.map.ldapkey12=
ldap.attrib.gen.map.olatkey12=
ldap.attrib.gen.map.ldapkey13=
ldap.attrib.gen.map.olatkey13=
ldap.attrib.gen.map.ldapkey14=
ldap.attrib.gen.map.olatkey14=
ldap.attrib.gen.map.ldapkey15=
ldap.attrib.gen.map.olatkey15=
ldap.attrib.gen.map.ldapkey16=
ldap.attrib.gen.map.olatkey16=
ldap.attrib.gen.map.ldapkey17=
ldap.attrib.gen.map.olatkey17=
ldap.attrib.gen.map.ldapkey18=
ldap.attrib.gen.map.olatkey18=
ldap.attrib.gen.map.ldapkey19=
ldap.attrib.gen.map.olatkey19=
ldap.attrib.gen.map.ldapkey20=
ldap.attrib.gen.map.olatkey20=

#static mappings, olat-userproperties will be filled with given value
ldap.attrib.static.olatkey1=
ldap.attrib.static.value1=
ldap.attrib.static.olatkey2=
ldap.attrib.static.value2=
ldap.attrib.static.olatkey3=
ldap.attrib.static.value3=
#properties only to be synced on first sync
ldap.attrib.sync.once.olatkey1=
ldap.attrib.sync.once.olatkey2=
ldap.attrib.sync.once.olatkey3=

# sync group from a LDAP groups
ldap.ldapGroupBases=
ldap.ldapGroupBases.values=ou=groups,dc=openproject,dc=org
# the object class of groups
ldap.ldapGroupObjectClass=groupOfNames
ldap.ldapGroupFilter=(objectClass=${ldap.ldapGroupObjectClass})
# the marker attribute for coaches
ldap.coachRoleAttribute=employeeType
ldap.coachRoleValue=coach
# sync group from a list of separated ids saved in an attribute of
# the DLAP user
ldap.user.groupAttribute=
ldap.user.groupAttribute.values=o
ldap.user.groupAttributeSeparator=,
ldap.user.coachedGroupAttribute=
ldap.user.coachedGroupAttribute.values=o
ldap.user.coachedGroupAttributeSeparator=,

# sync authors
ldap.authorsGroupBases=
ldap.authorRoleAttribute=
ldap.authorRoleValue=
# sync user managers
ldap.userManagersGroupBases=
ldap.userManagerRoleAttribute=
ldap.userManagerRoleValue=
# sync group managers
ldap.groupManagersGroupBases=
ldap.groupManagerRoleAttribute=
ldap.groupManagerRoleValue=
# sync question pool managers
ldap.qpoolManagersGroupBases=
ldap.qpoolManagerRoleAttribute=
ldap.qpoolManagerRoleValue=
# sync curriculum managers
ldap.curriculumManagersGroupBases=
ldap.curriculumManagerRoleAttribute=
ldap.curriculumManagerRoleValue=
# sync learning resource managers
ldap.learningResourceManagersGroupBase=
ldap.learningResourceManagerRoleAttribute=
ldap.learningResourceManagerRoleValue=

#####
# Build properties
#####
application.name=OpenOlat
build.version=14.1a
build.identifier=openolat141a-dev
build.repo.revision=local-devel

#####
# OpenOlat user activity logging: anonymous logging will skipp all tracking loggings and only log actions
# of type admin and statistic
#####
log.anonymous=false

########################################
# Simple message service
########################################
message.enabled=false
message.provider=Dummy
message.provider.values=Dummy,WebSMS

#Features using the sms
message.reset.password.enabled=true
message.ask.by.first.login=true

#WebSMS configuration
websms.username=
websms.password=

########################################
# Access control
########################################
#module on/off
resource.accesscontrol.enabled=true
#The user has a menu item in home to see the list of access
resource.accesscontrol.home.overview=true
#access methods available
method.token.enabled=true
method.free.enabled=true
method.paypal.enabled=false
method.auto.enabled=false

# Properties to configure the Shibboleth implementation of the auto access method
# attributes to use for search (comma separated)
method.auto.shib.identifiers.values=internalId,externalId,externalRef
method.auto.shib.identifiers=
# Name of the Shibboleth attributes with the keys
method.auto.shib.shib=
# Splitter to split the parsed value in keys
method.auto.shib.splitter.values=Semicolon
method.auto.shib.splitter=

########################################
# Paypal (need a business account)
########################################
# API USERNAME, Replace RHS with your API user name you obtained from sandbox/live server.
paypal.security.user.id=
# API PASSWORD, Replace RHS with your API password you obtained from sandbox/live server.
paypal.security.password=
# API SIGNATURE ,If you are using the 3 token credential then you should uncomment the following
# line and specify/change the signature on the RHS of the = sign. The module only implements the
# 3 token credential.
paypal.security.signature=
# APPLICATION ID, Replace RHS with your application id
paypal.application.id=
# Replace the RHS with the email address you used to signup at http://developer.paypal.com
paypal.sandbox.email=
# Email of the first receiver/merchant
paypal.first.receiver.email=

# Use the sandbox server
paypal.sandbox=false
paypal.sandbox.values=true,false

# Only change this if you really know what you do
paypal.data.format=XML
paypal.data.format.values=XML,JSON,SOAP11

########################################
# Course specific settings
########################################

#whether to display current course participant count in the course toolbox
course.display.participants.count=true
#whether to display infobox on assessable coursenodes
course.display.infobox=true
#whether to display changelog on assessable coursenodes
course.display.changelog=true

########################################
# Course building blocks, every course building block can be disabled by adding a property here and reference it in
# appropriate spring config file (by default are course bb are enabled)
########################################
course.node.linklist.enabled=true
course.node.checklist.enabled=false
course.node.checklist.deprecated=false
course.node.dateenrollment.enabled=false
# The LTI course element
course.node.basiclti.enabled=true
# Force the use of a launch page (or not)
course.node.basiclti.force.launchpage=false
course.node.portfolio.enabled=true
course.node.infomessage.enabled=true
course.node.members.enabled=true
#deduplicate the list in the members list.
course.node.members.deduplicate.list=true
course.node.vc.enabled=false

course.node.cp.enabled=true
course.node.scorm.enabled=true
course.node.podcast.enabled=true
course.node.blog.enabled=true
# The project broker
course.node.projectbroker.enabled=true
# The test QTI
course.node.test.enabled=true
# The self test QTI
course.node.selfttest.enabled=true
# The survey QTI
course.node.survey.enabled=true
# The form survey
course.node.form.survey.enabled=true
# The modern check list
course.node.modern.checklist.enabled=true
# The file dialog course element
course.node.dialog.enabled=true
# The course enrollment
course.node.en.enabled=true
# the contact / mail course element
course.node.co.enabled=true

########################################
# Options for e-portfolio
########################################
#List of styles avaialbe for the e-portfolio maps. The separator is a ,
portfolio.map.styles=default,comic,leather,epmst-green,epmst-blue,epmst-red
portfolio.map.styles.values=default,comic,leather,epmst-green,epmst-blue,epmst-red
#offer a list of all maps shared to public. Don't enable if > 500 public maps exist! The maps can still be viewed by opening a users vcard.
portfolio.offer.public.map.list=true

########################################
# Options for content editor
########################################
ceditor.image.styles=o_image_classic,o_image_border,o_image_shadow,o_image_frame,o_image_polaroid,o_image_round
ceditor.image.title.styles=o_image_title_dark,o_image_title_bright,o_image_title_standard
ceditor.table.styles=b_gray,b_blue,b_green,b_yellow,b_red

########################################
# Options for evaluation
########################################

# Possible file size limitations (in MB) in the file upload element of an evaluation form
forms.file.upload.limit.mb=5,10,20,50
# Set the limit of session to show in the report (e.g. the print view)
forms.report.max.sessions=100

########################################
# Curriculum
########################################
curriculum.enabled=true
curriculum.enabled.values=true,false

########################################
# Organisation
########################################
organisation.enabled=true
organisation.enabled.values=true,false

########################################
# Lectures / absences
########################################
lecture.enabled=false
lecture.enabled.values=true,false

# Default values for the lectures controlled assessment mode
lecture.assessment.mode.enabled=false
lecture.assessment.mode.lead.time=10
lecture.assessment.mode.followup.time=10
lecture.assessment.mode.admissible.ips=
lecture.assessment.mode.seb.keys=

########################################
# User to user relations
########################################
relation.role.enabled=enabled
relation.role.enabled.values=enabled,disabled

########################################
# Options for Virtual Classrooms
########################################

#Adobe connect
vc.adobe.enabled=false
vc.adobe.protocol=http
vc.adobe.port=80
vc.adobe.baseurl=localhost
# The account used is defined by the following admin. account
vc.adobe.adminlogin=
vc.adobe.adminpassword=
#The type of user accounts
vc.adobe.providerid=connect9
vc.adobe.providerid.values=connect9,dfn
vc.adobe.guestAccessAllowed=true

#Vitero
vc.vitero.enabled=false
vc.vitero.protocol=http
vc.vitero.port=8080
vc.vitero.baseurl=localhost
vc.vitero.contextPath=vitero
vc.vitero.adminlogin=admin
vc.vitero.adminpassword=007
vc.vitero.customerid=1
vc.vitero.olatTimeZoneId=Africa/Ceuta
vc.vitero.olatTimeZoneId.values=c.f. listing of Vitero
vc.vitero.deleteVmsUserOnUserDelete=true

#Open meetings
vc.openmeetings.enabled=false
vc.openmeetings.protocol=http
vc.openmeetings.port=5080
vc.openmeetings.baseurl=localhost
vc.openmeetings.contextPath=openmeetings
vc.openmeetings.adminlogin=admin
vc.openmeetings.adminpassword=0007
vc.openmeetings.customerid=1

#GoTo Meetings
vc.gotomeetings.enabled=false
vc.gotomeetings.consumerKey=

########################################
# Options for card2brain
########################################
card2brain.enabled=false
card2brain.enterpriseLoginEnabled=false
card2brain.privateLoginEnabled=false
card2brain.baseUrl=https://card2brain.ch/grails/SSO/lti.dispatch?alias=%s
card2brain.peekViewUrl=https://card2brain.ch/box/%s/embed
card2brain.verifyLtiUrl=https://card2brain.ch/grails/SSO/verifyLti.dispatch

########################################
# Options for Edubase and Edubook
########################################
edubase.enabled=false
edubase.readerUrl=https://app.edubase.ch/
edubase.readerUrl.unique=true
edubase.ltiLaunchUrl=https://reader.silkcodeapps.de/lookup/srv/v2/lti/basicLaunch/
edubase.infoverUrl=https://reader.silkcodeapps.de/lookup/srv/v2/information/infodocvers/%s

########################################
# Options for edu-sharing
# You have to configure public keys in the admin section in the GUI of OpenOlat.
########################################
edusharing.enabled=false
edusharing.url=https://edusharing.example.org/edu-sharing/
edusharing.app.id=
# IP address of the OpenOlat instance
edusharing.host=
edusharing.ticket.valid.seconds=10

# User attribute to pass as userid to edu-sharing
edusharing.user.identifier.key=email
edusharing.user.identifier.key.values=username,email

# Names of user attributes are configurable in edu-sharing. Use the same names here.
edusharing.auth.key.userid=userid
edusharing.auth.key.lastname=lastname
edusharing.auth.key.firstname=firstname
edusharing.auth.key.email=email
edusharing.auth.affiliation.id=${instance.id}
edusharing.auth.affiliation.name=${instance.id}


########################################
# Options for Collabora Office
########################################
collabora.enabled=false
collabora.baseUrl=https://collabora.example.org/
collabora.data.transfer.confirmation.enabled=false
collabora.usage.restricted.authors=false
collabora.usage.restricted.coaches=false
collabora.usage.restricted.managers=false


########################################
# Options for OnlyOffice
########################################
onlyoffice.enabled=false
onlyoffice.baseUrl=https://onlyoffice.example.org/
onlyoffice.api.path=web-apps/apps/api/documents/api.js
onlyoffice.data.transfer.confirmation.enabled=false
onlyoffice.usage.restricted.authors=false
onlyofficeusage.restricted.coaches=false
onlyoffice.usage.restricted.managers=false


########################################
# Options for Office 365
########################################
office365.enabled=false
office365.baseUrl=https://office365.example.org/
office365.data.transfer.confirmation.enabled=false
office365.usage.restricted.authors=false
office365.usage.restricted.coaches=false
office365.usage.restricted.managers=false


########################################
# Options for monitoring
########################################
monitoring.enabled=true
monitoring.instance.description=OpenOlat instance
monitored.probes=Runtime,System,Database,Memory,OpenOLAT,Release,Environment,Indexer
monitoring.dependency.server=myserver

########################################
# Options for document pool
########################################
# Enable the document pool based on taxonomies
site.docpool.enable=false
# Define the document pool name as it appears when mounted via WebDAV. Best is to use only plain 
# vanilla ASCII characters
docpool.webdav.mountpoint=doc-pool
docpool.webdav.mountpoint.values=doclibrary,hfm,topics...

########################################
# Options for library
########################################
sites.enable.library=false
site.library.enabled=${sites.enable.library}
library.repository.entry.key=
library.notify.afterupload=
library.notify.afterfreeing=

########################################
# Options for video resource
########################################
# Video resource, course node and site
video.enabled=true
video.coursenode.enabled=true
video.site.enable=false
video.marker.styles=o_video_marker_gray,o_video_marker_blue,o_video_marker_green,o_video_marker_yellow,o_video_marker_red
# Enable transcoding if you want to create optimized version of your video for delivery.
video.transcoding.enabled=false
# The transcoding process can run locally in s separate process using HandBrake. In that
# case, the binary "HandBrakeCLI" must be installed in your system and available to the
# java environment of your system. Only HandBrakeCLI in version > 1 is supported.
# Alternatively, you can disable local transcoding and implement a shell script that runs
# on another server which reads from the o_vid_transcoding table to separate transcoding
# from the main server. For larger installations it is recommendet to run the transcoding
# on a dedicated server
video.transcoding.local=true
# Use tasklist to limit CPU usage if you set video.transcoding.local=true
video.transcoding.taskset.cpuconfig=0,1
video.transcoding.taskset.cpuconfig.values=0,1 to indicate usage of 2 cores, set empty value to disable taskset (e.g. on osx not available)
# List of transcoding versions to be generated by the transcoder
video.transcoding.resolutions=1080,720,480
video.transcoding.resolutions.values=2160,1080,720,480
# The preferred resolution if multiple video versions are available and the user has no
# customized setting. Should be a values from video.transcoding.resolutions
video.transcoding.resolution.preferred=720
# Which profile should be used while transcoding. "Fast" delivers better quality, but taks
# roughly twice the time for transcoding. "Fast" has about one third larger file size. In
# short: "Fast" for better quality at the cost or resources, "Very Fast" for smaller files
# at the cost of quality.
video.transcoding.profile=Very Fast
video.transcoding.profile.values=Fast,Very Fast
# Where to store transcoded versions. This can be located on another path in case the
# transcoding service is working on another physical server or you just want it to use
# another (cheap) disk. By default it is also located in the olatdata dir.
# The master video files are kept in the olatdata directory, this is only about the
# transcoded versions.
# If you set video.transcoding.local=false and use an external script for transcoding, this
# other script must have access to this video.transcoding.dir as well to store the transcoded
# videos. Make sure the access permissions are implemented in a way so that the OpenOlat process
# can always delete the files from this video.transcoding.dir directory (when deleting the
# master video)
video.transcoding.dir=${folder.root}/transcodedVideos
video.transcoding.dir.values=${folder.root}/transcodedVideos, /mount/cheap/disk/transcodedVideos


###############################################################################
# Options for the live stream course node
###############################################################################
live.stream.enabled=false
# Buffer time to switch from the announcement page to the live stream (in minutes)
# and vice versa.
live.stream.buffer.before.min=5
live.stream.buffer.after.min=5
live.stream.edit.coach=false

