# Licensed to the Apache Software Foundation (ASF) under one or more
#  contributor license agreements.  The ASF licenses this file to You
# under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.  For additional information regarding
# copyright in this work, please see the NOTICE file in the top level
# directory of this distribution.

# roller.properties
#
# This file is for meant for Roller deployment properties
# Any properties that don't change at runtime are defined here
#
# You can override the values in this file in a couple ways ..
#   1. define a roller-custom.properties file and place it somewhere
#       at the root of one of your classpath locations.
#       for example:
#           $TOMCAT_HOME/common/classes
#           $ROLLER_LOCATION/WEB-INF/classes
#
#   2. specify a custom properties file via jvm option
#       example:
#           roller.custom.config=/path/to/properties/file
#
#   **NOTE: if you run multiple instances of roller on the same server
#           then you should beware of the fact that the override options above
#           may affect *all* of you running instances.  if you want to do
#           custom overrides for each instance then you must do it by
#           placing a roller-custom.properties file at WEB-INF/classes/ in
#           each of you roller installations.
#
# properties in this file are accessed like this ...
#    WebloggerConfig.getProperty("propname");


#-----------------------------------------------------------------------------
# Table of contents
#-----------------------------------------------------------------------------

# -- Required configuration settings
# -- Directory settings
# -- Feature specific settings
# -- Scheduled tasks configuration
# -- Cache configuration
# -- User management and security settings
# -- Rendering system
# -- Weblog ping system
# -- Pluggable backend, page and editor plugins
# -- Log4j logging settings
# -- Other settings
# -- Experimental, deprecated and "undocumented" settings


#-----------------------------------------------------------------------------
# Required configuration settings
#-----------------------------------------------------------------------------

# Installation type 'auto' or 'manual'
# - Set to 'auto' if you'd like tables to be auto-created if they are not found
#   on startup and auto-upgraded if they need it.
# - Set to 'manual' if you'd want to run the SQL scripts by hand. 
installation.type=manual

#---------------------------------
# Database configuration settings

# Specify database configuration type of 'jndi' or 'jdbc'
database.configurationType=jndi

# For database configuration type 'jndi',this will be used.
# If it does not start 'java:' then 'java:comp/env/' will be prepended
database.jndi.name=jdbc/rollerdb

# For database configuration type of 'jdbc', you MUST override these
database.jdbc.driverClass=
database.jdbc.connectionURL=
database.jdbc.username=
database.jdbc.password=

#---------------------------------
# Mail server connection parameters

# Specify mail configuration type of 'jndi' or 'properties'
mail.configurationType=jndi

# For mail configuration type 'jndi', this will be used
mail.jndi.name=mail/Session

# For mail configuration type of 'properties', you MUST override hostname
mail.hostname=

# Only override mail username and password if your mail server requires them
#mail.username=
#mail.password=


#-----------------------------------------------------------------------------
# Directory settings
#-----------------------------------------------------------------------------

# The directory in which Roller will upload files
mediafiles.storage.dir=${user.home}/roller_data/mediafiles

# The context path under which resources will be made available
mediafile.resource.url=/resources

# The directory in which Roller 4.0 used to upload files
# (only set this if you want 4.0 to 5.0 migration of uploaded files to occur)
# uploads.dir=${user.home}/roller_data/uploads

# Migrate old file resources to Roller 5.0 Mediafile Storage automatically
uploads.migrate.auto=false

# Directory in which search index is to be created 
# (delete this directory to force Roller to recreate the entire search index)
search.index.dir=${user.home}/roller_data/search-index

# The directory in which Roller will look for themes
themes.dir=${webapp.context}

# Allow theme reloading during development
# 1. You must be logged in.
# 2. Delete the style-sheet (Design | Style Sheet tab) from the weblog/theme you're changing.
# 3. To reload macros under path /WEB-INF/velocity, first modify the macro file and then trigger 
#    the reload by changing a template on the theme currently working on, then refresh the page.
themes.reload.mode=false

#-----------------------------------------------------------------------------
# Feature specific settings
#-----------------------------------------------------------------------------

# True to enable group blogging. False to prevent users from creating more 
# than one weblog and from joining other weblogs.
groupblogging.enabled=true

#----------------------------------
# search

# Enables indexing of weblog entries and comments and enables search servlet
search.enabled=true

# Whether or not to include comments in the search index.  If this
# is false, comments are not included in the index.
search.index.comments=true

#----------------------------------
# comments and trackbacks

# comment throttling
comment.throttle.enabled=false
comment.throttle.threshold=25
comment.throttle.interval=60
comment.throttle.maxentries=250

# default port is 389
comment.authenticator.ldap.port=389
comment.authenticator.ldap.host=
# options are "none" "simple" "strong"
comment.authenticator.ldap.securityLevel=

# Plugable comment authentication
comment.authenticator.classname=\
org.apache.roller.weblogger.ui.rendering.plugins.comments.MathCommentAuthenticator
# custom comment authenticator, using LDAP to ensure the user is able to comment
#org.apache.roller.weblogger.ui.rendering.plugins.comments.LdapCommentAuthenticator

# pluggable comment validation
comment.validator.classnames=\
org.apache.roller.weblogger.ui.rendering.plugins.comments.BlacklistCommentValidator,\
org.apache.roller.weblogger.ui.rendering.plugins.comments.ExcessLinksCommentValidator,\
org.apache.roller.weblogger.ui.rendering.plugins.comments.ExcessSizeCommentValidator
#org.apache.roller.weblogger.ui.rendering.plugins.comments.AkismetCommentValidator

comment.validator.excessLinks.threshold=3
comment.validator.excessSize.threshold=1000
#comment.validator.akismet.key=<get one at wordpress.com>

# pluggable comment formatters
comment.formatter.classnames=\
org.apache.roller.weblogger.business.plugins.comment.LinkMarkupPlugin,\
org.apache.roller.weblogger.business.plugins.comment.AutoformatPlugin,\
org.apache.roller.weblogger.business.plugins.comment.HTMLSubsetPlugin

# enables site full blacklist check on comment posts (default: true)
site.blacklist.enable.comments=true

# enables site full blacklist check at time of trackback post (default: true)
site.blacklist.enable.trackbacks=true

# enables partial blacklist check (not including blacklist.txt) for each incoming referrer
site.blacklist.enable.referrers=false

# Trackback protection. Set this only if you need to limit the URLs to
# which users may send trackbacks. Regex expressions are allowed, for example:
# trackback.allowedURLs=http://w3.ibm.com/.*||http://another.example.com/.*
trackback.allowedURLs=


#----------------------------------
# Planet Aggregator settings

# Set to true to enable the Planet aggregator. You also need to enable the 
# RefreshRollerPlanetTask task below to get the feed fetcher running.
planet.aggregator.enabled=false

# Planet backend guice module, customized for use with Weblogger
planet.aggregator.guice.module=\
org.apache.roller.weblogger.planet.business.jpa.RollerPlanetModule

# Planet Cache directory - See DiskFeedInfoCache
cache.dir=${user.home}/roller_data/planet-cache

#-----------------------------------------------------------------------------
# Scheduled tasks configuration
#-----------------------------------------------------------------------------

# Scheduled Background Tasks ... all times are in minutes.
#
# Task properties should follow the given format ...
#     tasks.<taskname>.<prop>=<value>
#
# The *enabled* tasks are defined by tasks.enabled=<taskname>[,<taskname>]

# Tasks which are enabled.  Only tasks listed here will be run.
tasks.enabled=ScheduledEntriesTask,ResetHitCountsTask,PingQueueTask

# client identifier.  should be unique for each instance in a cluster.
tasks.clientId=defaultClientId

# Publish scheduled weblog entries
tasks.ScheduledEntriesTask.class=org.apache.roller.weblogger.business.runnable.ScheduledEntriesTask
tasks.ScheduledEntriesTask.startTime=immediate
tasks.ScheduledEntriesTask.interval=1
tasks.ScheduledEntriesTask.leaseTime=30

# Reset hit counts
tasks.ResetHitCountsTask.class=org.apache.roller.weblogger.business.runnable.ResetHitCountsTask
tasks.ResetHitCountsTask.startTime=startOfDay
tasks.ResetHitCountsTask.interval=1440
tasks.ResetHitCountsTask.leaseTime=30

# Ping processor, does sending of pings
tasks.PingQueueTask.class=org.apache.roller.weblogger.business.pings.PingQueueTask
tasks.PingQueueTask.startTime=immediate
tasks.PingQueueTask.interval=5
tasks.PingQueueTask.leaseTime=30

# Sync Roller weblogs with planet
tasks.SyncWebsitesTask.class=org.apache.roller.weblogger.planet.tasks.SyncWebsitesTask
tasks.SyncWebsitesTask.startTime=startOfDay
tasks.SyncWebsitesTask.interval=1440
tasks.SyncWebsitesTask.leaseTime=30

# Refresh entries for planet feeds
tasks.RefreshRollerPlanetTask.class=org.apache.roller.weblogger.planet.tasks.RefreshRollerPlanetTask
tasks.RefreshRollerPlanetTask.startTime=startOfHour
tasks.RefreshRollerPlanetTask.interval=60
tasks.RefreshRollerPlanetTask.leaseTime=30

#-----------------------------------------------------------------------------
# Cache configuration
#-----------------------------------------------------------------------------

# Remember... times are in seconds
# Default settings suitable for 100 user system

# Cache properties all follow the given format ...
#     cache.<cache_id>.<prop>=<value>
# we then pass all <prop>=<value> pairs into the cache manager when the cache
# is being constructed.  this makes it easy to add cache properties that can
# be used by the specified CacheFactory you are using.
#
# NOTE: it is expected that property validation happens in the CacheFactory

# The default cache implementation we want to use
cache.defaultFactory=org.apache.roller.weblogger.util.cache.ExpiringLRUCacheFactoryImpl
cache.customHandlers=

# set "true" to NOT cache the custom pages for users who are logged in
cache.excludeOwnerEditPages=false

# This sets how many minutes into the future we look to prepare
# entries posted into the future which need to be invalidated from the cache.
# It is very unlikely that this should ever need to be changed
cache.futureInvalidations.peerTime=3

# Site-wide cache (all content for site-wide frontpage weblog)
cache.sitewide.enabled=true
cache.sitewide.size=50
cache.sitewide.timeout=1800

# Weblog page cache (all the weblog content)
cache.weblogpage.enabled=true
cache.weblogpage.size=400
cache.weblogpage.timeout=3600

# Feed cache (xml feeds like rss, atom, etc)
cache.weblogfeed.enabled=true
cache.weblogfeed.size=200
cache.weblogfeed.timeout=3600

# Planet cache (planet page and rss feed)
cache.planet.enabled=true
cache.planet.size=10
cache.planet.timeout=1800

# Salt cache (XSRF protection)
cache.salt.enabled=true
cache.salt.size=5000
cache.salt.timeout=3600


#-----------------------------------------------------------------------------
# User management and security settings
#-----------------------------------------------------------------------------

# Top-level authentication declaration for Apache Roller.  Introduced in Roller 5.1,
# replaces authentication.cma.enabled, authentication.openid, and users.sso.enabled
# from earlier versions.  Must be one of the following values:
# db:  use Roller database to store usernames and passwords
# ldap: use external LDAP to authenticate (must configure Roller security.xml,
#       see Roller Wiki for more details)
# openid: users must use OpenID to authenticate
# db-openid: users may choose to authenticate via Roller DB or OpenID but not both.
#      Trickier to implement so may not work as well as above methods, test before using.
# cma: container-managed authentication (e.g., Tomcat tomcat-users.xml file).  Currently
#      unusable, not implemented.
# Note that if you override this value in your roller-custom.properties file, you will also
# need to re-configure the security.xml file in the Roller WAR (under WEB-INF) to use the
# new security method -- check the comments in that latter file for instructions on
# how to do so.
authentication.method=db

# Enables HTTPS for login page only
securelogin.enabled=false

# Empty value used for passphrase in roller_user table when LDAP or CMA used;
# openid presently generates a random (long) password string instead.
users.passwords.externalAuthValue=<externalAuth>

# Password security settings
passwds.encryption.enabled=true
passwds.encryption.algorithm=SHA

# Role name to global permission action mappings
role.names=editor,admin
role.action.editor=login,comment,weblog
role.action.admin=login,comment,weblog,admin

# True to give the first user that is registered admin privileges
users.firstUserAdmin=true

# Normally, for security purposes Roller keeps usernames private and the user
# getUserName() method in templates actually returns the user's screenname.
# If you want templates to have access to real usernames, set this to false.
user.hideUserNames=true

# Enable scheme enforcement?
# Scheme enforcement ensures that specific URLs are viewed only via HTTPS
schemeenforcement.enabled=false

# URL patterns that require HTTPS
schemeenforcement.https.urls=/roller_j_security_check,\
/roller-ui/login-redirect.jsp,\
/roller-ui/login.rol,\
/roller-ui/register.rol,/roller-ui/register!save.rol,\
/roller-ui/profile.rol,/roller-ui/profile!save.rol,\
/roller-ui/admin/userAdmin.rol,\
/roller-ui/admin/createUser.rol,/roller-ui/admin/createUser!save.rol,\
/roller-ui/admin/userdata,\
/roller-ui/authoring/membersInvite.rol,/roller-ui/authoring/membersInvite!save.rol

# Ignored extensions otherwise we get SSL mixed content issues
schemeenforcement.https.ignored=css,gif,png,js

# Ignored urls for salt.  These are for multipart/form-data submissions as we do not get any parameters
salt.ignored.urls=mediaFileAdd!save.rol,mediaFileEdit!save.rol,bookmarksImport!save.rol

#---------------------------------------------------------------------
# LDAP authentication properties -- valid only if LDAP authentication
# authentication.method via authentication.method setting.
# See also comments and trackbacks section above for addition LDAP
# config options.

# Set these properties for a custom LDAP schema (optional)
#users.ldap.registry.attributes.name=cn
#users.ldap.registry.attributes.email=mail
#users.ldap.registry.attributes.locale=locale
#users.ldap.registry.attributes.timezone=timezone

users.ldap.autoProvision.enabled=false
users.ldap.autoProvision.className=\
org.apache.roller.weblogger.ui.core.security.BasicUserAutoProvision

#-----------------------------------------------------------------------------
# Rendering system
#-----------------------------------------------------------------------------

# The set of default Roller renderer factories.
rendering.rollerRendererFactories=\
org.apache.roller.weblogger.ui.rendering.velocity.VelocityRendererFactory

# The set of user defined renderer factories.  These are prepended to the list above.
rendering.userRendererFactories=

# The set of default Roller request mappers
rendering.rollerRequestMappers=\
org.apache.roller.weblogger.ui.rendering.WeblogRequestMapper

# The set of user defined request mappers.  These are prepended to the list above.
rendering.userRequestMappers=

# Url path elements which can NEVER be considered a weblog url
# each represents a url at the application root, i.e. /<elem>/*
rendering.weblogMapper.rollerProtectedUrls=\
roller-ui,roller-services,images,theme,themes,CommentAuthenticatorServlet,\
index.jsp,favicon.ico,robots.txt,\
page,flavor,rss,atom,language,search,comments,rsd,resource,planetrss

# Set of user defined protected urls.  These are added to the set above.
rendering.weblogMapper.userProtectedUrls=

# Set of models to be made available for weblog page rendering
rendering.pageModels=\
org.apache.roller.weblogger.ui.rendering.model.PageModel,\
org.apache.roller.weblogger.ui.rendering.model.ConfigModel,\
org.apache.roller.weblogger.ui.rendering.model.UtilitiesModel,\
org.apache.roller.weblogger.ui.rendering.model.URLModel,\
org.apache.roller.weblogger.ui.rendering.model.MessageModel,\
org.apache.roller.weblogger.ui.rendering.model.CalendarModel,\
org.apache.roller.weblogger.ui.rendering.model.MenuModel

# Set of models to be made available for weblog feed rendering
rendering.feedModels=\
org.apache.roller.weblogger.ui.rendering.model.FeedModel,\
org.apache.roller.weblogger.ui.rendering.model.ConfigModel,\
org.apache.roller.weblogger.ui.rendering.model.UtilitiesModel,\
org.apache.roller.weblogger.ui.rendering.model.URLModel,\
org.apache.roller.weblogger.ui.rendering.model.MessageModel

# Set of models to be made available for weblog search rendering
rendering.searchModels=\
org.apache.roller.weblogger.ui.rendering.model.SearchResultsModel,\
org.apache.roller.weblogger.ui.rendering.model.ConfigModel,\
org.apache.roller.weblogger.ui.rendering.model.UtilitiesModel,\
org.apache.roller.weblogger.ui.rendering.model.URLModel,\
org.apache.roller.weblogger.ui.rendering.model.MessageModel,\
org.apache.roller.weblogger.ui.rendering.model.CalendarModel,\
org.apache.roller.weblogger.ui.rendering.model.MenuModel

# Set of models to be made available for weblog page *preview* rendering
# NOTE: this *does* have some differences between the pageModels
rendering.previewModels=\
org.apache.roller.weblogger.ui.rendering.model.PreviewPageModel,\
org.apache.roller.weblogger.ui.rendering.model.ConfigModel,\
org.apache.roller.weblogger.ui.rendering.model.UtilitiesModel,\
org.apache.roller.weblogger.ui.rendering.model.PreviewURLModel,\
org.apache.roller.weblogger.ui.rendering.model.MessageModel,\
org.apache.roller.weblogger.ui.rendering.model.CalendarModel,\
org.apache.roller.weblogger.ui.rendering.model.MenuModel

# Set of page models specifically for site-wide rendering
rendering.siteModels=\
org.apache.roller.weblogger.ui.rendering.model.SiteModel,\
org.apache.roller.weblogger.ui.rendering.model.PlanetModel

# Velocity settings
velocity.properties=/WEB-INF/velocity.properties

#-----------------------------------------------------------------------------
# Weblog ping system
#-----------------------------------------------------------------------------

# The number of attempts to try to reach a ping target before refusing to 
# requeue it for further retrials. If absent, this defaults to 3.
pings.maxPingAttempts=3

# The interval between ping queue processing runs in minutes.  Must be between 
# 0 and 120. If set to 0, ping queue processing is disabled on this server; 
# this is for clustered environments. Make sure it is nonzero on one host in 
# a cluster.  Don't use the value 0 here to disable ping functionality, you 
# will instead get an infinitely growing ping queue.  See the documentation on 
# the properties below to disable ping functionality if you need to.
# If absent, this defaults to 5.
pings.queueProcessingIntervalMins=5

# The set of initial common ping targets.  This is used to initialize the 
# database if there are no common ping targets at startup.  Ping targets are 
# specified as a comma-separated list, each target in the form {{name}{url}}.  
# To disable initialization of common ping targets, comment this out, or set it
# to the empty value.  Common targets can be edited in the UI; this is just 
# used to set up some typical ones.
pings.initialCommonTargets=\
{{Technorati}{http://rpc.technorati.com/rpc/ping}}\
,{{Weblogs.com}{http://rpc.weblogs.com/RPC2}}\
,{{blo.gs}{http://ping.blo.gs/}}\
,{{IceRocket}{http://rpc.icerocket.com:10080/}}

# Specify variant options for known buggy ping targets.
pings.variantOptions={{http://rpc.icerocket.com:10080/}{noname}}

# This controls whether the Weblog:Pings menu item and its associated actions
# are enabled.  Set this to false to disallow users from configuring autopings 
# and doing manual pings.  If absent, this defaults to true.
# NOTE: There is a separate runtime property (configurable from the 
# Admin:Configuration page, that can be used to suspend ping processing without 
# disabling the UI.
# CAUTION: Setting this to true will cause the server to remove all users' 
# existing autoping configurations on startup. Leave this false or commented 
# for normal behavior.
pings.disablePingUsage=false

# Setting both pings.disallowCustomTarget=true and pings.disablePingUsage=true 
# will effectively disable the ping functionality.

# This is used for debugging the ping mechanism in Roller.  If this is set 
# to true, pings that would normally be sent will cause log messages to be sent 
# but will NOT actually result in real pings being sent.  Leave this false or 
# commented for normal behavior.
pings.logOnly=false


#-----------------------------------------------------------------------------
# Pluggable backend, page and editor plugins
#-----------------------------------------------------------------------------

# Backend Provider
weblogger.provider.class=org.apache.roller.weblogger.business.GuiceWebloggerProvider

# Backend Guice module
guice.backend.module=org.apache.roller.weblogger.business.jpa.JPAWebloggerModule

#---------------------------------
# Weblog entry plugins

plugins.page=\
org.apache.roller.weblogger.business.plugins.entry.ConvertLineBreaksPlugin \
,org.apache.roller.weblogger.business.plugins.entry.ObfuscateEmailPlugin \
,org.apache.roller.weblogger.business.plugins.entry.SmileysPlugin


# The list of configured WeblogEntryEditors available to users
plugins.weblogEntryEditors=\
org.apache.roller.weblogger.ui.core.plugins.TextEditor,\
org.apache.roller.weblogger.ui.core.plugins.XinhaEditor

# The "id" of the default editor to use. NOT the class name
plugins.defaultEditor=editor-text.jsp

# Default weblog editor
# The list of available editors is in rollerRuntimeConfigDefs.xml
newweblog.editor=editor-text.jsp


#-----------------------------------------------------------------------------
# Log4j logging settings
#-----------------------------------------------------------------------------

log4j.rootLogger=ERROR, roller

log4j.appender.roller=org.apache.log4j.DailyRollingFileAppender
log4j.appender.roller.File=${catalina.base}/logs/roller.log
log4j.appender.roller.layout=org.apache.log4j.PatternLayout
log4j.appender.roller.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss,SSS} %C{1}:%M - %m%n

# Roller code. Options are: DEBUG, INFO, WARN, ERROR, FATAL
log4j.logger.org.apache.roller=INFO
log4j.logger.net.java.roller=ERROR

# Roller dependent libraries
log4j.logger.org.apache.struts2=ERROR
log4j.logger.org.apache.tiles=ERROR
log4j.logger.com.opensymphony.xwork2=ERROR
log4j.logger.org.springframework=ERROR
log4j.logger.org.springframework.security=ERROR
log4j.logger.org.hibernate=ERROR

# the struts2 file upload stuff has some overly verbose messaging
log4j.logger.org.apache.struts2.interceptor.FileUploadInterceptor=ERROR

# Velocity talks *way* too much, so set it to log only FATAL problems
log4j.logger.org.apache.velocity=FATAL

# Roller extras
log4j.logger.com.ecyrd.jspwiki=ERROR
log4j.logger.com.danga.MemCached=ERROR

#-----------------------------------------------------------------------------
# Other settings
#-----------------------------------------------------------------------------

# Values of the properties in this list get system property expansion 
# applied to them when loaded.
config.expandedProperties=uploads.dir,search.index.dir,mediafiles.storage.dir

# True to enable history in Atom feeds with next/prev links
site.newsfeeds.history.enabled=false

# Some folks consider remember-me type functionality to be a security
rememberme.enabled=true

# You might want to disable GZIP if your app server already supports it
compression.gzipResponse.enabled=true

# specifies the max number of tags allowed in URL ( /feed?tags=foo+bar+baz )
tags.queries.maxIntersectionSize=3

# Characters to be allowed in user names (change at your own risk)
username.allowedChars=A-Za-z0-9

# Starting with Roller 5.1 SEO-friendlier hyphens instead
# of underscores used by default to separate words in blog
# URLs.  Set to true below to use pre-5.1 default of
# underscores instead.
weblogentry.title.useUnderscoreSeparator=false

# editor theme to be used (corresponds to directory name under /theme)
editor.theme=tan

# list of links to include in root bookmark folder of each new blog
# format is like so: linktitle2|linkurl2,linktitle2|linkurl2,linktitle3|linkurl3
newuser.blogroll=\
Apache Software Foundation|http://apache.org,\
Apache Roller Project|http://roller.apache.org

# comma-separated list of top-level categories to be created in each new weblog
newuser.categories=Technology,Finance,General

# these properties are needed to run Roller on JBoss with Hibernate JPA
hibernate.transaction.factory_class=org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup

# EclipseLink JPA properties
eclipselink.persistence-context.flush-mode=auto

#-----------------------------------------------------------------------------
# Experimental, deprecated and "undocumented" settings
#-----------------------------------------------------------------------------

# Allow users to edit the original path setting of media files
mediafile.originalPathEdit.enabled=false
