# Exporter class
exporter.class=com.atlassian.uwc.exporters.MediaWikiExporter

### Mediawiki database connection information

## database name is the name of the mediawiki database
databaseName=wikidb
## dbUrl is the JDBC connection url. The following is an example mysql url
dbUrl=jdbc:mysql://localhost:3306
# The JDBC driver you wish to use
# Note: You will have to provide the JAR, unless you use MySQL. See:
# http://confluence.atlassian.com/display/CONFEXT/UWC+F.A.Q.#UWCF.A.Q.-HowdoIaddalibraryjartotheUWC%3F
# The Mysql driver has been provided. The following would be the class if you use MySQL.
jdbc.driver.class=com.mysql.jdbc.Driver

## Login info to connect to this database. You will need to replace this.
login=mylogin
password=mypassword

## This is the output directory. The export will send text files with Mediawiki syntax to this directory.
output=/Users/laura/Desktop/

## OPTIONAL properties

## database prefix is the prefix that mediawiki assigns to every table. 
## You can find it in LocalSettings.php as $wgDBprefix 
## This is only used by the default SQL
dbPrefix=

## encoding, if this is not set, the default is utf-8
## See this list for available options:
## http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html
#encoding=utf-8
## You can turn on url-encoding with the page titles (if your file system can't
## handle certain characters) by uncommenting this setting. If you do this,
## remember to set to true its counterpart in converter.mediawiki.properties
## Mediawiki.0002.illegalnames-urldecode.property=true
#urlencoding=true

## page history properties
## Set history to true if you wish to preserve page histories
## Choose a filename suffix that follows the requirements of the page
## history framework. Described here: http://confluence.atlassian.com/display/CONFEXT/UWC+Page+History+Framework#UWCPageHistoryFramework-pagehistorysuffixproperty
#history=true
#history-suffix=-#.txt

## User and Timestamp data properties (udmf)
## Set this to true if you would like user and timestamp metadata to be 
## preserved. Data will be added to the beginning of each file as:
## {user:foobar}
## {timestamp:yyyymmddhhmmss}
#udmf=true

## output the original title to page content as an {orig-title:foo bar} macro
## Useful for hierarchy data that's maintained in the page title like that
## maintained with SubPageList3 plugin
#origtitle=true

## Provide your own sql for querying the database. 
## In order for these statements to be used instead of the default:
## All properties (except db.sql.revdata) must be defined and non-empty.
## The textdata SQL will be run once for every result row of the pagedata SQL.
## The revdata SQL will be run, if the above page history properties are set.
## You can use any column properties in the the textdata sql. 
## You can use the pageid column property in the revdata sql.
## Those refs will be replaced with appropriate data from the results
## of the pagedata SQL.
## Here is an example of what the default SQL looks like.
## It is compatible with Mediawiki 1.7.1, and should (untested)
## be backward compatible with Mediawiki 1.5
##
#db.sql.pagedata=select page_id, page_namespace, page_title, page_latest from mw_page where page_namespace!='8' and page_namespace!='12';
#db.sql.textdata=select old_text from mw_text where old_id="db.column.textid";
#db.sql.textiddata=select rev_text_id from mw_revision where rev_id="db.column.textid";
#db.sql.revdata=select rev_id from mw_revision where rev_page = "db.column.pageid";
#db.column.title=page_title
#db.column.namespace=page_namespace
#db.column.pageid=page_id
#db.column.textid=page_latest
#db.column.text=old_text

##
## Here is an example of some suggested Mediawiki 1.4 SQL, submitted by Blair Labatt via jira issue UWC-189 - http://developer.atlassian.com/jira/browse/UWC-189
#db.sql.pagedata=select cur_id, cur_namespace, cur_title from cur;
#db.sql.textdata=(select old_text from old where old_id in( select rc_this_oldid from recentchanges where rc_cur_id = "db.column.textid" )) union (select cur_text from cur where cur_id = "db.column.textid");
#db.column.title=cur_title
#db.column.namespace=cur_namespace
#db.column.pageid=cur_id
#db.column.textid=cur_id
#db.column.text=cur_text
## For examples relating to other versions, see http://confluence.atlassian.com/display/CONFEXT/UWC+Mediawiki+Notes#UWCMediawikiNotes-UserSuggestedOptionalSQLProperties

## Namespaces
## Identifies which namespaces to output when not using optional sql properties.
## The default behavior will be:
## Namespace | Out directory
## Main -> Pages 
## Users -> Users
## Any custom namespaces -> idnum or define them here
## namespaces.ids=comma seperated list of namespace id numbers to be exported
#namespaces.ids=0,2
## namespaces.exportallcustom=true (default), if you want all custom 
## namespaces to be exported. false, if you want to define the custom namespaces
## explicitly in namespaces.ids 
#namespaces.exportallcustom=true
## namespaces.customnamespace.mapping=comma delimted key value pairs. 
## key is namespace id
## value is namespace name, values should be able to be legal directory names
## use syntax: id=>name,id2=>name2
#namespaces.customnamespace.mapping=100=>Foo,101=>Foo_talk
