# 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=true

# 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.Summernote

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

# Default weblog editor
# The list of available editors is in rollerRuntimeConfigDefs.xml
newweblog.editor=editor-summernote.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 risk
# If you enable remember me you MUST define a unique secret key that is not 'springRocks'
rememberme.enabled=false
rememberme.key=

# 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

# 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

# Lucene configurations
lucene.analyzer.class=org.apache.lucene.analysis.standard.StandardAnalyzer
lucene.analyzer.maxTokenCount=1000

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

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