$data = {

     ########################################
     # DEBUGGING
     #
     # This is a system-wide debugging variable; increasing
     # values (from 1-5) give you increasing verbosity in the
     # error log.

     'DEBUG'         => 0,

     ########################################
     # Hosts/Email Addresses
     #
     # CHANGE THESE
     #
     #   smtp_host
     #     host we use for sending email (can be IP address or hostname)
     #   admin_email
     #     sysadmin address; all system emails come to/from this address
     #   content_email
     #     notification of changed content, where appropriate

     'smtp_host'     => '127.0.0.1',       
     'admin_email'   => 'admin@mycompany.com',
     'content_email' => 'content@mycompany.com',

     ########################################
     # Session Configuration
     #
     # CHANGE THIS as necessary. 
     #
     # If you're using a database-backed session store, you just need
     # to change 'class' to the relevant storage module (e.g.,
     # 'Apache::Session::Postgres')

     # If you're not using a database-backed session store, you should
     # be able to change 'class' to something like
     # 'Apache::Session::File' and then create relevant entries in
     # 'params' (e.g., 'Directory' and 'LockDirectory' for
     # 'Apache::Session::File').

     # Note that you can also set the expiration for the session
     # cookie -- if you set it to be 'undef' the cookie will be
     # 'short-lived', meaning it will expire when the user shuts
     # down the browser. Otherwise, pass something like the
     # following: '+3d' (3 days); '+3M' (3 months); '+480s' (480
     # seconds); '+15h' (15 hours); '+1y' (1 year)
     #
     # The setting for 'expires_in' is in minutes. If set to 0 or
     # undef the sessions will never be time-expired.

     'session_info' => {
       'class'      => 'Apache::Session::MySQL',
       'expiration' => '+3M',
       'params'     => {},
       'expires_in' => 0,
     },


     'datasource' => {
       'default_connection_db'   => 'main',
       'default_connection_ldap' => 'main',
     },


     ########################################
     # DBI Datasource Definitions
     #
     # CHANGE THIS as necessary
     #
     # Enter your database connection parameters in the 'main' entry
     # -- see 'OpenInteract::DBI' for more information about
     # them). Briefly:
     #
     #   db_owner  (optional)
     #     who owns the db? (this should only be set if your
     #     database requires it!)
     #   username  
     #     who do we login as?
     #   password
     #     what password do we login with?
     #   dsn
     #     last part of the DBI DSN
     #   db_name
     #     name of database
     #   driver_name
     #     name of driver -- second part of the DBI DSN
     #   sql_install  (optional)
     #     if name of driver and name of SQL installer to use differ,
     #     put the SQL installer here. For instance, if you use
     #     DBD::ODBC and Sybase, you'd put 'ODBC' under the
     #     'driver_name' and 'Sybase' under 'sql_install'
     #   long_read_len
     #     length of longest TEXT/LOB to read (see DBI docs under
     #     'LongReadLen')
     #   long_trunc_ok
     #     whether it's okay to truncate TEXT/LOB values that exceed
     #     long_read_len (see DBI docs under 'LongTruncOk')

     'db_info' => { 
           main => {
              'db_owner'      => '',
              'username'      => '',
              'password'      => '',
              'dsn'           => '',
              'db_name'       => '',
              'driver_name'   => '',
              'sql_install'   => '',
              'long_read_len' => 65536,
              'long_trunc_ok' => 0,
          },
     },


     ########################################
     # LDAP Datasource Definitions
     #
     # CHANGE THIS as necessary.
     #
     # Enter your LDAP connection information if you're using
     # LDAP. Briefly:
     #
     #
     #   host
     #     The IP address/hostname with the LDAP server
     #   port
     #     The port the LDAP server is running on (usually 389)
     #   bind_dn
     #     The distinguished name of the record to bind as. If left
     #     blank you will be doing an anonymous bind and the value for
     #     'bind_password' will not be used.
     #   bind_password
     #     Password to use with 'bind_dn' to bind to the server.
     #   base_dn
     #     Can be used by modules to determine the Base DN where
     #     objects should be stored. This might be something like
     #     'dc=MyCompany,dc=com'
     #   timeout
     #     Value (in seconds) to wait for a timed out connection
     #   version
     #     LDAP protocol version. Use '3' if you're using SASL
     #   sasl
     #     Set to a true value to use SASL authentication
     #   debug
     #     See entry in Net::LDAP->new() for possible values

     'ldap_info' => {
           main => {
              host          => '',
              port          => '',
              bind_dn       => '',
              bind_password => '',
              base_dn       => '',
              timeout       => 120,
              version       => 2,
              sasl          => 0,
              debug         => 0,
           },
     },

     ########################################
     # Default Object IDs
     #
     # Unless you're using LDAP for authentication, you probably don't
     # want to change these in the beginning. However, you might want
     # to change them (particularly the 'theme' value) as your site
     # grows.

     'default_objects' => {
       'superuser'        => 1,
       'supergroup'       => 1,
       'theme'            => 1,
       'public_group'     => 2,
       'site_admin_group' => 3,
     },

     ########################################
     # Box Handling
     #
     # Define the box handler and the handler to take care of the
     # default system boxes. The 'custom_box_handler' entry is for you
     # to fill in if you'd like -- you can add other boxes to every
     # page, add them depending on the request type, etc.

     'box' => {
       handler            => '%%WEBSITE_NAME%%::Handler::Box',
       default_template   => 'base_box::main_box_shell',
       default_separator  => undef,
       default_method     => undef,
       system_box_handler => '%%WEBSITE_NAME%%::Handler::SystemBoxes',
       system_box_method  => '',
       custom_box_handler => '',
       custom_box_method  => '',
     },

     ########################################
     # Login Information
     #
     #
     # Define login information. In the future you'll be able to define
     # the object(s) used for logging in and possibly more.
     #
     # crypt_password: Set whether you want to store encrypted passwords in
     # the database (set by default and recommended). Note that if you're
     # using LDAP or some SMB authentication you want to set this to '0'
     # since the backend will take care of that for you.
     #
     # *_field: These are the fields used to read in the username and
     # password from the user and are used in the 'login_box' component
     # shipped with OpenInteract and found in the 'base_box' package. Note
     # that if 'remember_field' is not defined then we don't display the
     # checkbox in the login box.
     #
     # custom_login_*: Class and method that specify an action that
     # executes when a user logs in (Optional)
     #
     # always_remember: if true then we always remember the login (and
     # don't display the checkbox)
     #
     # required: if set a login is always required; if the user isn't
     # logged in she'll be sent to the URL in 'required_url'
     #
     # required_skip: zero or more regular expressions indicating the areas
     # of the site that don't require a login even if 'required' is true

     'login' => {
       crypt_password       => 1,
       login_field          => 'login_login_name',
       password_field       => 'login_password',
       remember_field       => 'login_remember',
       custom_handler       => undef,
       custom_method        => undef,
       custom_fail-method   => undef,
       always_remember      => 0,
       required             => 0,
       required_url         => '/login.html',
       required_skip        => [ '^/$', '^/index.html$', '^/Login.*', '^/help.*' ],
     },

     ########################################
     # Display 
     #
     # Various simple miscellaneous display items can go here
     #
     # use_meta_redirect: if set to 1 we'll create a redirect using META
     # tags (old way)
     #
     # use_http_redirect: if set to 1 we'll perform a redirect using HTTP
     # headers (new way); overrides 'use_header_redirect' if set
     #
     # show_redirect_message: if using 'use_meta_redirect' controls whether
     # we display a message in the page using META tags

     'display_info' => {
        use_meta_redirect     => 1,
        use_http_redirect     => 0,
        show_redirect_message => 0,
     },

     ########################################
     # Page Directives
     #
     # Page directives come before the rest of the URL and
     # control some fundamental aspect of display. For instance,
     # 'NoTmpl' before a URL will not put the content in a
     # template, and 'Popup' before a URL will put the content
     # into the template used for popup windows (usually a really
     # simple one that you set in your theme). For all directives
     # except the 'No' ones the key  should be found as the value
     # in 'template_names' below which matches up to a key in the
     # theme. (Slightly confusing.)

     'page_directives' => {
       'Popup'      => 'simple_template', 
       'NoTemplate' => 1,
       'NoTmpl'     => 1,
     },

     ########################################
     # Template Key -> Name Mapping
     #
     # Define the keys under which we store our important
     # template names in a theme. This way we can use simple
     # keywords to refer to the page definition templates. (NOTE:
     # This is not used quite yet but should be implemented
     # shortly.)

     'template_names' => {
       'main'   => 'main_template',
       'simple' => 'simple_template',
     },

     ########################################
     # Template Processing
     #
     # Define information used by the template processing modules. 

     'template_info' => {

       # Extension for template files -- used to lookup files by
       # the TT provider module (shouldn't need to change).

       'template_ext' => 'tmpl',

       # cache_size: How many templates the Template Toolkit should
       # cache in memory

       'cache_size' => 75,

       # If true, will remove all compiled files on server restart
       # (production boxes can set this to false so that startup costs
       # aren't so heavy)

       'compile_cleanup' => 1,

       # Extension for compiled TT files. Most people won't (or
       # shouldn't) care about this.

       'compile_ext' => '.ttc',

       # Custom handler that's called before the template object is
       # initialized. Here you can define a PRE_PROCESS template (for
       # instance, with BLOCKs having all your common widgets) or set
       # any of the other configuration information specified in
       # 'perldoc Template::Manual::Config'. If you use this, set
       # 'custom_init_class' to a class that has a method specified in
       # 'custom_init_method' or use the default ('handler')

       'custom_init_class'      => '',
       'custom_init_method'     => '',

       # Custom handler that's called before every template is
       # processed. If you have common BLOCKs, formatting elements or
       # other items that are not full-blown OI components, you can
       # add them to the template variable hash. If you use this, set
       # 'custom_variable_class' to a class that has a method
       # specified in 'custom_variable_method' or use the default
       # ('handler').

       'custom_variable_class'  => '',
       'custom_variable_method' => '',

     },

     ########################################
     # Override filenames
     #
     # Set thse to the filename(s) with your override rules. (If the
     # files are no!t defined nothing bad will happen.) You probably
     # do not need to change them.

     'override' => {
       spops_file  => 'conf/override_spops.ini',
       action_file => 'conf/override_action.ini',
     },

     ########################################
     # System Aliases
     #
     # Setup aliases so that you can retrieve a class name from $R;
     # for instance: $R->cookies will return
     # 'OpenInteract::Cookies::Apache' by default.. Generally the only
     # one you might possibly want to change is the first one, to
     # refer to a different cookie get/set scheme (Win32 users may
     # need to use 'OpenInteract::Cookies::CGI')

     'system_alias' => {
       site_template   => 'OpenInteract::SiteTemplate',
       sitetemplate    => 'OpenInteract::SiteTemplate',
       cookies         => 'OpenInteract::Cookies::Apache',
       session         => 'OpenInteract::Session::DBI',
       template        => 'OpenInteract::Template::Process',
       repository      => 'OpenInteract::PackageRepository',
       package         => 'OpenInteract::Package',
       error           => 'OpenInteract::Error',
       auth            => 'OpenInteract::Auth',
       auth_user       => 'OpenInteract::Auth',
       auth_group      => 'OpenInteract::Auth',
       security_object => '%%WEBSITE_NAME%%::Security',
       object_security => '%%WEBSITE_NAME%%::Security',
       security        => '%%WEBSITE_NAME%%::Security',
       secure          => 'SPOPS::Secure',
       error_handler   => 'OpenInteract::Error::Main',
       component       => 'OpenInteract::Component',
     },

     ########################################
     # ID Definitions
     #
     # Define what your system uses for certain IDs. Defaults are fine
     # for 95% of users -- the most common need for changing these is
     # if you're using LDAP to store user and group objects.
     #
     # Currently accepted values: 'int', 'char'

     'id' => {
        user_type  => 'int',
        group_type => 'int',
     },

     ########################################
     # Directory Definitions
     #
     # Directories used by OpenInteract. Only change these if you know
     # what you're doing. Note that 'base' and 'interact' are replaced
     # when the server starts up, so any values you set there will
     # just be overwritten.

     'dir' => {
       'base'          => undef, # replaced in OpenInteract::Startup
       'interact'      => undef, # replaced in OpenInteract::Startup
       'error'         => '$BASE/error',
       'html'          => '$BASE/html',
       'log'           => '$BASE/logs',
       'cache_content' => '$BASE/cache/content',
       'cache_tt'      => '$BASE/cache/tt',
       'config'        => '$BASE/conf',
       'data'          => '$BASE/data',
       'mail'          => '$BASE/mail',
       'help'          => '$HTML/help',
       'overflow'      => '$BASE/overflow',
       'download'      => '$HTML/downloads',
       'upload'        => '$BASE/uploads',
       'template'      => '$BASE/template',
     },

     ########################################
     # Caching
     #

     #
     # Define information used by the SPOPS/content cache
     #
     # use: If true, caching is on; otherwise caching is disabled 
     #
     # use_spops: If true, caching for SPOPS objects is on; otherwise it is
     # disabled
     #
     # default_expire: Each caching call can set its own expiration, but
     # if not this is used. (In seconds)
     #
     # class: Cache implementation to use. File-based caching is the only
     # implementation so far.
     #
     # max_size: Max size of the cache. (In bytes)
     #
     # directory_depth: Cache::FileCache will divide cached items into
     # subdirectories so too many don't clog a single directory. This
     # describes the depth. (Default is usually fine.)

     'cache_info' => {
       'data' => { 
         'use'             => 0,
         'use_spops'       => 0,
         'default_expire'  => 600,
         'class'           => 'OpenInteract::Cache::File',
         'max_size'        => 2000000,
         'cleanup'         => 1,
         'directory_depth' => 3,
       },
       'template' => {
         'expire'   => 900,
       },
     },

     ########################################
     # Errors
     #
     # error_object_class: Class of error object (shouldn't need to
     # change)
     # default_error_handler: Class of default error handler -- one
     # that can handle every error thrown by OpenInteract (shouldn't
     # need to change)

     'error' => {
        'error_object_class'    => '%%WEBSITE_NAME%%::ErrorObject',
        'default_error_handler' => 'OpenInteract::Error::System',
     },


     ########################################
     # Site-Specific Classes
     #
     # Don't change these three! Whatever you enter will be
     # overwritten at server startup.

     'server_info' => {
        'stash_class'      => '',
        'website_name'     => '',
        'request_class'    => '',
     },

     ########################################
     # Conductors
     #
     # Define the main conductor; if you create additional
     # interfaces for your website(s) (e.g., SOAP), then you
     # can add another conductor here.

     'conductor' => {
       'main' => { 
           'class'     => 'OpenInteract::UI::Main',
           'method'    => 'handler',
       },
     },

     ########################################
     # Action Table
     #
     # The action table defines how OpenInteract responds to URLs; the
     # only information we hold here is for default information
     # (information that does not need to be specified in the
     # individual package's 'conf/action.perl' file); we also define
     # how OpenInteract should respond to a null action (under the ''
     # key) and how it should respond to an action that is not found
     # (under 'not_found')

     'action_info' => {
       'default' => {
           'template_processor'  => 'OpenInteract::Template::Process',
           'conductor' => 'main',
           'method'    => 'handler',           
       },
       'none' => {
           'redir'     => 'page',
       },
       'not_found' => {
           'redir'     => 'page',
       },
     },

     ########################################
     # Misc

     'no_promotion' => 0,


     # Don't change this value -- if you have problems it helps the
     # OpenInteract development community figure out from which
     # version your configuration originated

     'ConfigurationRevision' => '$Revision: 1.40 $',
};